直线和多段线两端画额外的线段
求助一下大佬,有什么办法可以如图所示,框选直线或非闭合多段线,之后会自动在两端生成额外的可自定长度的直线重画一条啊,那么简单...
(defun c:tt ()
"tt(两端画线)"
(defun abc (s1 / p1 p2 r1 r2 l1 l2)
(setq p1 (vlax-curve-getStartPoint s1)
p2 (vlax-curve-getEndPoint s1)
)
(if (not (equal p1 p2 1e-3))
(setq r1 (xyp-AngleAtPoint s1 p1)
r2 (xyp-AngleAtPoint s1 p2)
l1 (xyp-Line p1 (polar p1 r1 (- dd)))
l2 (xyp-Line p2 (polar p2 r2 dd))
)
)
)
(setq dd (Udist 7 "" "线长<输入或鼠标直接量取>" dd nil))
(setq i -1)
(if (setq ss (ssget '((0 . "*line,arc"))))
(while (setq s1 (ssname ss (setq i (1+ i))))
(abc s1)
)
)
(princ)
)
(setq ss (ssget '((0 . "LWPOLYLINE,LINE"))))
(setq dis (getint "\n输入长度:"))
(foreach ty (vl-remove-if-not '(lambda (x) (= (type x) 'ENAME)) (mapcar 'cadr (ssnamex ss)))
(setq
spt (vlax-curve-getStartPoint ty)
ept (vlax-curve-getEndPoint ty)
an (angle spt ept)
pt1 (polar spt an (- dis))
pt2 (polar ept an dis)
)
(entmake (list '(0 . "LINE") (cons 62 1) (cons 10 spt) (cons 11 pt1)))
(entmake (list '(0 . "LINE") (cons 62 1) (cons 10 ept) (cons 11 pt2)))
) 你有种再说一遍 发表于 2024-10-17 16:29
重画一条啊,那么简单...
原先的线也要保留啊 624777395 发表于 2024-10-17 16:38
原先的线也要保留啊
再画一条不就保留了吗 都是写代码,方式很多的,先算点,在生成直线 本帖最后由 qazxswk 于 2024-10-17 20:08 编辑
直线和两点的多段线很容易,多点带转角的多段线有点麻烦,怕实现不了。 飞雪神光 发表于 2024-10-17 19:21
你的最后画的线,在原来的线外了。楼主要在原来的线内或原来的线上画线
应该把这里改一下
pt1 (polar spt an dis)
pt2 (polar ept an (- dis)) 本帖最后由 kozmosovia 于 2024-10-17 20:32 编辑
任意曲线的,拐弯也不怕,端点曲线也相切
(Defun Extend2Ends (crv dis / _Angle ANG EPT SPT)
(Defun _Angle(crv)
(mapcar (function (lambda (x)
(angle '(0. 0.)
(vlax-curve-getFirstDeriv
crv
x
)
)
)
)
(list (vlax-curve-getstartparam crv)
(vlax-curve-getendparam crv)
)
)
)
(and (setq spt (vlax-curve-getstartpoint crv))
(setq ept (vlax-curve-getendpoint crv))
(not (equal spt ept 0.01))
(setq ang (_Angle crv))
(entmakex (list (cons 0 "line")
(cons 10 spt)
(cons 11 (polar spt (car ang) (- dis)))
)
)
(entmakex (list (cons 0 "line")
(cons 10 ept)
(cons 11 (polar ept (cadr ang) dis))
)
)
)
)
(Defun c:tt () (Extend2Ends (Car (entsel)) 123.45))
本帖最后由 qazxswk 于 2024-10-17 20:49 编辑
kozmosovia 发表于 2024-10-17 20:26
任意曲线的,拐弯也不怕,端点曲线也相切
还是你厉害,我跟飞雪神光大神的思路差不多,不过他用的是foreach函数,我想到的是用repeat函数。就是拐弯的多段线,实现不了。
页:
[1]
2