将线的端点存储到
请帮个小忙有什么想法吗
我想选择一条特定的线,然后将这些线的端点存储在一个列表中
塔克斯 基本引擎可能如下所示:
(defun c:linepl (/ pl ss i en ed)
(and (setq ss (ssget '((0 . "LINE"))))
(setq i 0)
(while (setq en (ssname ss i))
(setq ed (entget en))
(foreach g '(10 11)
(setq pl (cons (cdr (assoc g ed)) pl)))
(setq i (1+ i)))
(and pl (alert (rtos (length pl) 2 0))))
(prin1))
变量“lst”保存选定线的端点坐标列表。
(defun c:Ends (/ ss lst)
(if (setq ss (ssget '((0 . "LINE"))))
((lambda (i / sn)
(while (setq sn (ssname ss (setq i (1+ i))))
(setq lst (cons (cdr (assoc 11 (entget sn))) lst))
)
)
-1
)
)
(if lst lst (princ))
)
谢谢david谢谢tharwat 当你用另一种方式画一条线时,会发生什么?你可能需要额外的一点,就像我在检查你选择哪一端时使用的那样,因此交换10和11个答案,以获得我想要的开始-结束。 虽然我经常使用sp(start\u pt)和ep(end\u point)作为线的点值,但AutoCAD实际上使用了From和To提示,从不真正指定起点和终点。
OP从未真正说明需要哪些分数。(所有直线点)(所有直线点的对)(所有直线点的对及其反向)
我经常使用这些对和它们的反面(对于过度杀戮类型的函数)
(defun vld_deldup (/ ss i ll en ed p10 p11 mln)
(setq mln 0.003)
(princ (strcat "\nSearching " (getvar "CLAYER") "..."))
(and (setq ss (ssget "X" (list (cons 0 "LINE")(cons 8 (getvar "CLAYER")))))
(setq i 0)
(while (setq en (ssname ss i))
(setq ed (entget en)
p10 (cdr (assoc 10 ed))
p11 (cdr (assoc 11 ed)))
(if (or (< (distance p10 p11) mln)
(member (list p10 p11) ll)
(member (list p11 p10) ll))
(entdel en)
(setq ll (cons (list p10 p11) ll)))
(setq i (1+ i)))
(if ll (princ (strcat (rtos (length ll) 2 0) " Of " (rtos i 2 0) " LINEs Remain"))
(princ "- No Duplicates Found")))
(prin1))
大多数情况下,我会将点值四舍五入到mln
欢迎随时光临。
示例:如果OP希望收集垂直线在横截面中相交的点?,如果第一条直线端点朝下,则其余偏移间隔和修剪的直线将继承相同的图案。
虽然OP的示例dwg没有问题,但我确实同意应考虑BIGAL对方向的考虑。注意
页:
[1]