lisp怎么实现选择一个矩形,获取矩形内的文字,并选中。
[*](defun c:wz ()
[*] (setq ss (ssget '((0 . "LWPOLYLINE"))));;这里可以选择矩形
[*](if (setq ss (ssget '((0 . "TEXT"))));;这里可以选择文字,
[*] (sssetfirst nil ss)
[*])
[*](princ)
[*];;我想实现选择矩形内的文字。
[*])
(defun c:wz (/ dxf10 i s s1 ss)
(defun dxf10 (e / s)
(if (setq s
(mapcar 'cdr
(vl-remove-if-not '(lambda (x) (= (car x) 10))(entget e))
)
)
(if (= 1 (length s))(car s)s)
)
)
(setq i -1)
(if(setq ss (ssget '((0 . "LWPOLYLINE")(90 . 4)(70 . 1))));;这里可以选择矩形
(while(and(setq s1 (ssname ss (setq i (1+ i)))))
(setq s(dxf10 s1))
(if (setq ss (ssget "cp" s '((0 . "TEXT"))));;这里可以选择文字,
(sssetfirst nil ss);;这里的ss是每个矩形的,如果需要其他操作写这里就行,当前的亮显,仅仅最后一个选择集亮显,楼主应该懂吧
;对应其他功能写这里
)
)
)
(princ)
) 谢谢分享谢谢分享谢谢分享 (defun c:11 (/ s1 s2 p1 p2)
(if(setq s1 (ssget ":E:S" '((0 . "LWPOLYLINE")(90 . 4)(70 . 1))));;选择矩形
(progn
(vla-getboundingbox (vlax-ename->vla-object (ssname s1 0) )'minpoint 'maxpoint) ;获得包围盒
(setq p1(vlax-safearray->list minpoint) p2(vlax-safearray->list maxpoint)) ;包围盒最小与最大点
(setq s2 (ssget "W" p1 p2 '((0 . "*TEXT")))) ;;W表示窗选,与矩形相交的文字不会被选中,如还想选中与矩形相交的文字,把W改为C
(sssetfirst nil s2)
)
)
(princ)) qazxswk 发表于 2024-3-21 17:32
(defun c:11 (/ s1 s2 p1 p2)
(if(setq s1 (ssget ":E:S" '((0 . "LWPOLYLINE")(90 . 4)(70 . 1))));; ...
完美,我之前也是这个思路,卡在获取包围范围的坐标的求取上了,☆⌒(*^-゜)v THX!!
页:
[1]