选择相似项
你好我需要为((水平线、多段线或垂直线、多段线)选择类似的LISP。plz查找示例附件。
我感谢您的快速回复
文基
这是我的版本,可以根据用户的选择选择垂直或水平线/多段线。
(defun c:Test (/ sel ss go)
(vl-load-com)
;;;;******* Tharwat 14. June . 2012 ******* ;;;;;;
;;;;This peice of code to select Horizontal or Vertical ;;;;;
;;;;lines or Polylines according to user's choose ;;;;;
(defun Catch (ang1 ang2 ss)
((lambda (l / i n sn e x p1 p2)
(while (setq sn (ssname ss (setq l (1+ l))))
(setq e (entget sn))
(if (wcmatch (cdr (assoc 0 (entget sn))) "*POLYLINE")
(progn
(setq i 0
n 0
)
(repeat (setq x (fix (vlax-curve-getendparam sn)))
(if
(or
(equal
(angle (setq p1 (vlax-curve-getpointatparam sn i))
(setq p2 (vlax-curve-getpointatparam
sn
(setq i (1+ i))
)
)
)
ang1
)
(equal (angle p1 p2) ang2)
)
(setq n (1+ n))
)
)
(if (eq n x)
(ssadd sn sel)
)
)
(if
(or (eq (angle (cdr (assoc 10 e)) (cdr (assoc 11 e))) ang1)
(eq (angle (cdr (assoc 10 e)) (cdr (assoc 11 e))) ang2)
)
(ssadd sn sel)
)
)
)
)
-1
)
(princ)
)
(if
(and (setq sel (ssadd))
(progn
(initget "Horizontal Vertical")
(setq go (getkword "\n Choose one :"))
)
(setq ss (ssget "_:L" '((0 . "*POLYLINE,LINE"))))
)
(if (eq go "Horizontal")
(Catch 0.0 pi ss)
(Catch (/ pi 2.) (* pi 1.5) ss)
)
)
(if (> (sslength sel) 0)
(sssetfirst nil sel)
)
(princ)
)
也许我错过了什么。。。鉴于上面发布的示例屏幕截图,为什么SELECTSIMILAR命令不起作用?
首先,OP使用cad 2006,新命令在cad 2012之前不可用,
第二个问题是,角度选项在新的命令调用中不可用。
Tharwat,SELECTSIMILAR命令自+/-2006年就出现了;我用它与土地桌面(LDD)2006年。。。诚然,LDD具有Vanilla所没有的功能。
其次,您认为缺少垂直或水平选择选项是命令设计中的一个缺陷,而事实上它有更大的用途。。。使用户有义务遵守“良好”的起草实践,在这种情况下,不需要选择此选项(IMHO)。。。相反,我们可以依靠其他层命令来实现他们的目标。
谢谢你为我花了很多时间;伟大的作品
文基
很高兴听到这个消息。
不客气。
页:
[1]