关于偏移的lisp,高手请指导
可以批量偏移,如图是由1偏移出来的其他的线段2-7.是否可以实现线形和颜色预设定也可以是其他颜色线性,谢谢大师不支持自交的多段线,自交的样条曲线,以及无法偏移的各类线。
图层、线型必须加载好了的。
(defun c:o1()
;;(sk_offset 图层 颜色 线型 线宽)
;(sk_offset nil nil nil nil)
(sk_offset "Text" 8 "ACAD_ISO03W100" 211)
(princ)
)
;;;;简单版偏移后改属性函数2014-4-24
;;;;(sk_offset 图层 颜色 线型 线宽)
;;;;;(sk_offset nil nil nil nil)
(defun sk_offset(sk_lay sk_color sk_lt sk_lw / sk_dist1ss p0 p1 p2 obj obj-offset obj-offset1 obj-offset2)
(vl-load-com)
(if sk_dist
(and(setq sk_dist1(getdist (strcat "\n请输入偏移距离["(rtos sk_dist) "]:")))(setq sk_dist sk_dist1))
(setq sk_dist(getdist "\n请输入偏移距离:"))
)
(if sk_dist
(while (and (setq ss(ssget ":E:S" '((0 . "*LINE,ELLIPSE,CIRCLE,ARC"))))
)
(setq obj (vlax-ename->vla-object (ssname ss 0)))
(vla-Highlight obj :vlax-true)
(if (setq p0(getpoint "\n请指定偏移方向:"))
(progn
(setq obj-offset1(vlax-invoke-method obj 'offsetsk_dist))
(setq obj-offset2(vlax-invoke-method obj 'offset(* sk_dist -1)))
(setq obj-offset1(vlax-safearray-get-element(vlax-variant-value obj-offset1) 0))
(setq obj-offset2(vlax-safearray-get-element(vlax-variant-value obj-offset2) 0))
(setq p1(vlax-curve-getClosestPointTo obj-offset1 p0)
p2(vlax-curve-getClosestPointTo obj-offset2 p0))
(if (> (distance p0 p1) (distance p0 p2))
(progn(setq obj-offset obj-offset2)(vla-delete obj-offset1))
(progn(setq obj-offset obj-offset1)(vla-delete obj-offset2))
)
;(and sk_lay (vlax-put-property 'layer obj-offset sk_lay))
(and sk_lay (vla-put-layer obj-offset sk_lay))
(and sk_color (vla-put-color obj-offset sk_color))
(and sk_lt (vla-put-linetype obj-offset sk_lt))
(and sk_lw (vla-put-lineweight obj-offset sk_lw))
)
)
(vla-Highlight obj :vlax-false)
)
)
(princ)
)
(princ) 可以偏移后再改偏移后的物体性质。 总之就是只能先偏移出去再进行相应的修改 不具有通用性:
xyp1964 发表于 2014-4-24 19:04 static/image/common/back.gif
不具有通用性:
最好是可以自己选择填写每条线的,线性,颜色,和图层 edata 发表于 2014-4-24 17:53 static/image/common/back.gif
不支持自交的多段线,自交的样条曲线,以及无法偏移的各类线。
图层、线型必须加载好了的。
没有5#“xyp1964”的效果啊,就是普通的偏移啊,麻烦给看一下 非你可1 发表于 2014-4-26 13:09 static/image/common/back.gif
没有5#“xyp1964”的效果啊,就是普通的偏移啊,麻烦给看一下
(defun c:o2()
;;(sk_myoffset 距离 图元名 偏移方向点 图层 颜色 线型 线宽)
;(sk_myoffset 距离 图元名 偏移方向点 nil nil nil nil)
(if(and (setq ss(ssget ":E:S" '((0 . "line"))))
(setq p0 (getpoint "\n指定偏移方向:")))
(progn
(setq en(ssname ss 0))
(sk_myoffset 100 en p0 "Text" 1 "ACAD_ISO03W100" 211)
(sk_myoffset 150 en p0 "Text" 2 "door" nil)
(sk_myoffset 200 en p0 "Text" 3 "bylayer" nil)
(sk_myoffset 300 en p0 "Text" 4 "ACAD_ISO03W100" 211)
(sk_myoffset 800 en p0 "Text" 5 "ACAD_ISO03W100" 211)
)
)
(princ)
)
;;;;简单版偏移后改属性函数222014-4-26
;;;(sk_myoffset 距离 图元名 偏移方向点 图层 颜色 线型 线宽)
(defun sk_myoffset(sk_dist en p0 sk_lay sk_color sk_lt sk_lw / OBJ OBJ-OFFSET OBJ-OFFSET1 OBJ-OFFSET2 P1 P2)
(if (and sk_dist en p0)
(progn
(setq obj (vlax-ename->vla-object en))
(vla-Highlight obj :vlax-true)
(setq obj-offset1(vlax-invoke-method obj 'offsetsk_dist))
(setq obj-offset2(vlax-invoke-method obj 'offset(* sk_dist -1)))
(setq obj-offset1(vlax-safearray-get-element(vlax-variant-value obj-offset1) 0))
(setq obj-offset2(vlax-safearray-get-element(vlax-variant-value obj-offset2) 0))
(setq p1(vlax-curve-getClosestPointTo obj-offset1 p0)
p2(vlax-curve-getClosestPointTo obj-offset2 p0))
(if (> (distance p0 p1) (distance p0 p2))
(progn(setq obj-offset obj-offset2)(vla-delete obj-offset1))
(progn(setq obj-offset obj-offset1)(vla-delete obj-offset2))
)
(and sk_lay (vla-put-layer obj-offset sk_lay))
(and sk_color (vla-put-color obj-offset sk_color))
(and sk_lt (vla-put-linetype obj-offset sk_lt))
(and sk_lw (vla-put-lineweight obj-offset sk_lw))
)
)
(vla-Highlight obj :vlax-false)
)
(princ)
页:
[1]