NSHX 发表于 2024-3-20 19:43:23

lisp怎么实现选择一个矩形,获取矩形内的文字,并选中。


[*](defun c:wz ()
[*]   (setq ss (ssget '((0 . "LWPOLYLINE"))));;这里可以选择矩形
[*](if (setq ss (ssget '((0 . "TEXT"))));;这里可以选择文字,
[*]    (sssetfirst nil ss)
[*])
[*](princ)
[*];;我想实现选择矩形内的文字。
[*])

xj6019 发表于 2024-3-20 20:27:26



(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)
)

yefei812678 发表于 2024-3-21 09:24:25

谢谢分享谢谢分享谢谢分享

qazxswk 发表于 2024-3-21 17:32:31

(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))

NSHX 发表于 2024-3-21 17:54:21

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]
查看完整版本: lisp怎么实现选择一个矩形,获取矩形内的文字,并选中。