求大神帮我把定数等分改为定距等分
求大神帮我把定数等分改为定距等分谢谢了(defun c:test ()
(setq a (car (entsel "\n选择多义线: ")))
(setq num (getint "\n分段数: "))
(vl-cmdf "divide" a num)
(setq pp (ssget "x" '((0 . "POINT"))))
(setq n 0)
(while (< n (sslength pp))
(setq pt (cdr (assoc 10 (entget (ssname pp n)))))
(vl-cmdf "break" (list a pt) pt)
(setq n (1+ n))
)
)
;;;定距的话,函数“divide” 是等分的,那除非你要分的多义线的长度是你定距的整数倍哦。
;;;所以思路就是把你要等分的曲线长度除以你要等分的长度的余数长度先cut掉哦!
(defun c:test2 ()
(vl-load-com)
(setq a (car (entsel "\n选择多义线: ")))
(command "list" a "")
(setq total_length (getvar "PERIMETER")) ;;;多义线总长
(setq dis (getreal "\n分段距离: "))
(setq rem_num (rem total_length dis)) ;;;整除指定长度后得到的余数
(setq splineObj (vlax-ename->vla-object a))
(setq cut_point (vlax-curve-getPointAtDist splineObj rem_num)) ;;;从一个端点起把余数长度点裁切点找到
(vl-cmdf "break" (list a cut_point) cut_point);;;裁掉多义线的余数长度
(setq num (/ (- total_length rem_num) dis)) ;;;多义线剩下的长度就能够整除你指定的长度,并求出等分数,剩下的就是你自己的程序了,虽然我并不知道你这程序有什么用…………
(vl-cmdf "divide" a num)
(setq pp (ssget "x" '((0 . "POINT"))))
(setq n 0)
(while (< n (sslength pp))
(setq pt (cdr (assoc 10 (entget (ssname pp n)))))
(vl-cmdf "break" (list a pt) pt)
(setq n (1+ n))
)
)
;;;;测试了一下除直线之外的都能用这个方式找到裁切余数长度的点 可能是因为这个函数vlax-curve-getPointAtDist只能得到曲线上的点
;;;;;其实直线上的裁剪点也能用别的方式找到从一个端点走裁切的余数长度,方向就是直线的角度。用(polar)函数,一样的,你自己去研究下喽
;;;只是提供下思路,不知道是不是你想要的,相互学习下! divide-->measure jin1114 发表于 2018-8-16 23:16
;;;定距的话,函数“divide” 是等分的,那除非你要分的多义线的长度是你定距的整数倍哦。
;;;所以思路就 ...
谢谢这个虽然不是我要的 还是谢谢你了好久没来论坛了 不好意思 感謝分享...............
页:
[1]