已能够使用LISP编程实现将图中框选部分的文字导出至*.TXT.
但生成的*.TXT中的"文字"是混乱的,无顺序,基本没用.
现希望:CAD导出文字时,框选后,依据所"画出的直线的方向"所指示的顺序,按顺序导出"文字"!

能实现吗?

拜求!
谢谢各位大侠!


网友答: 回复 zj12345678 的帖子

取文字的x坐标由小到大排序!vl-sort函数
(vl-sort textenlist '(lambda (e1 e2) (< (cadr(assoc 10 (entget e1)))  (cadr(assoc 10 (entget e2))))))
;;;textenlist 为text图元列表

网友答: 谢谢版主.
上述特例的文字排序,可根据X或Y座标顺序对文字进行排序,
实际使用中,文字可能正方向.可能负方向,比较复杂.
想法:希望以"所画出的PLINE线为导引,完全依据线的走向确定导出的文字顺序"
有可能实现吗?

网友答: 试试手工给它一下路径方向,再判断一下坐标,应该可以实现抛物线型的复杂曲线

网友答: 学习了,有时候要大量导出CAD的文字,版主的文章给了很好的启示,谢谢。

网友答: 按PLine顺序读图形其实是有办法的,在每个读取数据点产生一个PLINE顶点,然后按定点排序,产生一个顶点表,并以顶点表为选取点进行度数据,就OK了

网友答: 一堆文字零散分布;可选择从上到下,从左到右;   或从左到右,从上到下;

也就是可选指定顺序,就更完美了

借花献佛,下面的默认顺序,是从上到下第一优先,从左到右第二优先;

(defun c:tout()
(setq flnm (getfiled "保存文件名" "" "txt" 1))
 (setq fn (open flnm "w"))
 (setq s (ssget))
 (setq n (sslength s))
 (setq index ( - n 1))
 (repeat n
  (setq ents (entget (ssname s index)))
  (setq index ( - index 1))
  (setq ent (assoc 0 ents))
  (if ( = "TEXT" (cdr ent))
    (progn
      (setq txt (cdr (assoc 1 ents)))
      (write-line txt fn)
    )
  )
 )
(close fn)
)
(princ "\n文本导出")
  • 上一篇:acadiso.pat 填充文件格式?
  • 下一篇:没有了