多段线向内或向外偏移后,角点自动画出斜线
多段线向内或向外偏移后,角点自动画出斜线类似这样的,蓝色的线是多段线,红色的线是偏移之后的线,需要角点的斜线自动出来。
有个参考的代码。
yyz123121 发表于 2020-12-15 21:49
你好,测试了下,如果输入数值,那么就直接向内偏移,如果点外侧,那就没法输入数值。可以帮忙优化一下吗 ...
(defun c:SGX()
(setq cmd (getvar "cmdecho"))
(setq osm (getvar "osmode"))
(setvar "cmdecho" 0)
(setvar "osmode" 0)
(command "_undo" "be")
(while (progn
(princ "\需要选取单根POLYLINE作为截面线")
(setq ssa (ssget ":S" '((0 . "lwpolyline")(70 . 1))))
)
(If (= (setq pyjl (getreal "\n偏移距离<1.0>=")) nil)
(setq pyjl 1.0)
)
(If (setq pt1 (getpoint "\n点选偏移方向(向内侧)"))
(progn
(setq ent (ssname ssa 0))
(setq dxf (entget ent))
(setq pts (mapcar 'cdr (vl-remove-if-not '(lambda(a)(= (car a) 10)) dxf)))
(command "_offset" pyjl ent pt1 "")
(command "_chprop" (entlast) "" "c" 1 "")
(setq pts1 (mapcar 'cdr (vl-remove-if-not '(lambda(a)(= (car a) 10)) (entget (entlast)))))
(mapcar '(lambda(a b)
(command "_line" a b "" "_chprop" (entlast) "" "c" 1 "")
)
pts
pts1
)
)
)
)
(command "_undo" "e")
(setvar "osmode" osm)
(setvar "cmdecho" cmd)
(princ)
)
(defun c:SGX()
(setq cmd (getvar "cmdecho"))
(setq osm (getvar "osmode"))
(setvar "cmdecho" 0)
(setvar "osmode" 0)
(command "_undo" "be")
(setq cd (getvar "offsetdist"))
(while (progn
(princ "\需要选取单根POLYLINE作为截面线")
(setq ssa (ssget ":S" '((0 . "lwpolyline")(70 . 1))))
)
(setq ent (ssname ssa 0))
(setq dxf (entget ent))
(setq pts (mapcar 'cdr (vl-remove-if-not '(lambda(a)(= (car a) 10)) dxf)))
(setq pt1 (getpoint "\n点选偏移方向(向内侧)"))
(setq cd (distance pt1 (vlax-curve-getclosestpointto ent pt1)))
(setvar "offsetdist" cd)
(command "_offset" "" ent pt1 "")
(command "_chprop" (entlast) "" "c" 1 "")
(setq pts1 (mapcar 'cdr (vl-remove-if-not '(lambda(a)(= (car a) 10)) (entget (entlast)))))
(mapcar '(lambda(a b)
(command "_line" a b "" "_chprop" (entlast) "" "c" 1 "")
)
pts
pts1
)
)
(command "_undo" "e")
(setvar "osmode" osm)
(setvar "cmdecho" cmd)
(princ)
) yshf 发表于 2020-12-15 14:13
(defun c:SGX()
(setq cmd (getvar "cmdecho"))
(setq osm (getvar "osmode"))
你好,测试了下,如果输入数值,那么就直接向内偏移,如果点外侧,那就没法输入数值。可以帮忙优化一下吗,改成输入命令后,让输入数值,然后选择多段线,然后点击内侧或外侧。 yshf 发表于 2020-12-15 22:04
(defun c:SGX()
(setq cmd (getvar "cmdecho"))
(setq osm (getvar "osmode"))
谢谢,就是这个效果,非常完美。 yshf 发表于 2020-12-15 08:48
(defun c:SGX()
(setq cmd (getvar "cmdecho"))
(setq osm (getvar "osmode"))
谢谢长老的回帖,我感觉可以用来参考画结构图的加腋板 yshf 发表于 2020-12-15 08:48
(defun c:SGX()
(setq cmd (getvar "cmdecho"))
(setq osm (getvar "osmode"))
版主,你这个只适合多段线, yshf 发表于 2020-12-15 08:48
(defun c:SGX()
(setq cmd (getvar "cmdecho"))
(setq osm (getvar "osmode"))
如果是线段或者其他图形,很难做出来这个效果 很好人实用 每次使用后捕捉都全部取消了是怎么回事呢
页:
[1]
2