求关于点选框输出框内文字
本帖最后由 weiqi 于 2013-1-13 23:24 编辑希望点选框 提取框内 两个图层的文字(框内有其他图层的文字)并输出(E-ID 和 E-PE)里的文字。(E-ID排在前,E-PE的文字排在后 输出)
感谢 群里 阿然大哥提供的一段 提取一个图层 内的文字并输出 图层里的所有 文字并输出。
但我希望是有 范围的输出。
望高手出手指点指点
本帖最后由 叮咚 于 2013-1-14 20:03 编辑
学习重要,
也只有你这样选吧
已改
本帖最后由 weiqi 于 2013-1-14 01:37 编辑
边查边写,自己试着改了一下。
有几个问题。
我这样写的时候
(ssget(list (cons 8 "E-ID,E-PE")(cons 0 "TEXT"))
选对象就可以。
但是我如果先选对象
(setq s1 (ssget))对象集定义为s1
后 想 从 s1 中加入条件 (list (cons 8 "E-ID,E-PE")(cons 0 "TEXT") 得怎么写呢。 本帖最后由 weiqi 于 2013-1-14 01:55 编辑
第三个箱错误 是因为第三个箱的文字 并不在 E-ID 和 E-PE上边。
还搞不懂 ,这个是以什么方式 来计算先输出哪个的。
貌似是按 生成时间来的,要是能就近距离按范围来输出就好了。。。。
免得,大量框选的时候。由于画图的时候顺序不对。 输出的顺 序乱了。
感谢楼上~但是 貌似 只能列出 一个屏幕内的内容,如果在框内,但是屏幕没显示的话,列不出来
CAD版本不同,有些命令不一样。
(defun c:cdx ()
(setvar "cmdecho" 0)
(princ "\n选择方框<空格退出>:")
(while (setq ss (ssget ":e:s" (list (cons 0 "lwpolyline"))))
(setq lin (ssname ss 0) data (entget lin) pts nil)
(foreach xx data (if (= 10 (car xx))(setq pts (cons (cdr xx) pts))))
(command ".zoom" "W" (car pts) (caddr pts))
(setq ens (ssget "cp" pts '((0 . "TEXT") (8 . "E-PE,e-id"))))
(command ".zoom" "p")
(or ens (setq ens (ssadd)))
(setq len (sslength ens) n 0 strs nil)
(while (< n len)
(setq en (ssname ens n) data (entget en))
(setq strs (cons (cons (cdr (assoc 10 data))(strcat " " (cdr (assoc 1 data)))) strs))
(setq n (1+ n))
)
(if strs (progn
(setq strs (vl-sort strs '(lambda(e1 e2) (> (cadar e1)(cadar e2)))))
(setq str "")
(foreachxx strs (setq str (strcat str (cdr xx))))
(initget 1)
(setq pt-ins (getpoint "\n指定一点:"))
(entmake
(list
'(0 . "TEXT")
'(100 . "AcDbEntity")
'(8 . "E-PE")
'(62 . 110)
'(100 . "AcDbText")
(cons 10 pt-ins)
'(40 . 444.444)
(cons 1str)
'(41 . 0.7)
'(7 . "HZ")
)
)
)
(princ "\n不包含指定层文字!")
)
(princ "\n选择方框<空格退出>:")
)
(setvar "cmdecho" 1)
(princ)
)
为什么要限制图层,合并框里面的就可以?
页:
[1]