求取逐个显示选中的图元的代码
我有这样的设想,就是逐个显示选中的图元。选中图元可以用常青藤来进行,比如筛选出了5个TEXT,内容为“ABC”,或5个直径为3的圆。由于选中的这些图元分布零散,我就想写一些代码,将这些图元逐个显示。显示时需先计算这个图元的外包围盒的大小,再定视口高度是围盒的大小的4倍大,将窗口缩放到这一图元上。按一个空格键,其它的图元也如此逐个显示。甚至还可以设一个文本框,可以输入数值,设定从第几个开始显示。
请高手帮忙写一下看看,VBA、LISP都行 真会想,我不敢想 刚好做了个按编号浏览构件的,引用了论坛里的一段代码,缩放用的,只是不记得从哪里摘取的了
抛砖引玉吧;浏览平面定位,以核对配筋、截面等
(defun c:czz()
(setvar "cmdecho" 0)
(setq stxt (getstring "\n需要查找的编号<屏选> :"))
(if (and (= stxt "")
(setq s1 (entsel "\n选择编号 :"))
(setq ent (entget(car s1)))
(= (cdr(assoc 0 ent)) "TEXT"))
(setq stxt (cdr(assoc 1 (entget(car s1)))))
)
(setq ss (ssget (list '(0 . "TEXT") (cons 1 stxt) (cons 62 256))))
(ifss
(progn
(setq i 0)
(princ "\n点击鼠标左键到下一个目标<右键退出>")
(while (< i (sslength ss))
(setq en (ssname ss i))
;;以下代码参考了明经通道论坛某大侠的作品,抱歉,没把作者记下来
(vla-getboundingbox(vlax-ename->vla-object en) 'minp 'maxp)
(setq minp (vlax-safearray->list minp)
maxp (vlax-safearray->list maxp))
(setq pt (polar minp (angle minp maxp) (/ (distance minp maxp) 2)))
;;以上参考明经通道
(command "change" en "" "p" "c" "6" "")
(command "zoom" minp maxp)
(command "zoom" "0.05x")
(if (= (getpoint) nil)
(progn
(princ (strcat "已检查 " (itoa (1+ i)) " 个"))
(setq i (sslength ss))
)
(setq i (+ i 1))
)
)
(princ (strcat "\n一共选择 " (itoa (sslength ss)) " 个 " stxt))
))
(setvar "CMDECHO" 1)
(princ)
) lyqiezi 发表于 2014-4-14 13:10 static/image/common/back.gif
刚好做了个按编号浏览构件的,引用了论坛里的一段代码,缩放用的,只是不记得从哪里摘取的了
抛砖引玉吧
按编号浏览真强 本帖最后由 llsheng_73 于 2015-3-22 19:06 编辑
(defun SstoEs(ss / a en lst)
(if ss(progn(setq a -1)
(while(setq en(ssname ss(setq a(1+ a))))
(setq lst(cons en lst)))))
lst)
(DEFUN C:TT()
(princ"\n选择图元进行逐一显示")
(MAPCAR'(LAMBDA(X)(COMMAND"ZOOM""O"X"")(command"zoom""0.5x")(GETPOINT"\n鼠标左键到下一图元"))(SSTOES(SSGET)))
(PRINC))
页:
[1]