有没有什么办法,能够获取选定图形所有图元的定义数据?
比如一张图,我想或得这张图中所有图形的定义数据,然后存到txt中。(defun c:sss ()
(setq ss (ssget))
(setq n (sslength ss))
(setq i 0)
(repeat n
(setq s1 (ssname ss i))
(setq s0 (entget s1))
(print "s0=")
(princ s0)
(setq i (1+ i))
)
)
我用这个获取图元定义数据,有时候有效果,有时候没有,不知道为什么 倔强的蚂蚁 发表于 2013-11-25 12:52 static/image/common/back.gif
(defun c:sss ()
(setq ss (ssget))
(setq n (sslength ss))
“所有图元的定义数据”这是很含糊的概念,图元的种类有很多,数据的类型也很多,有可见的,有不可见的,还有隐含的,无法一概而论,应该针对你的需要来分析,总有办法来解决的。
当然,如果你有兴趣,不妨把图形保存为dxf文件,那里面几乎什么都有了。 ll_j 发表于 2013-11-25 14:20 static/image/common/back.gif
“所有图元的定义数据”这是很含糊的概念,图元的种类有很多,数据的类型也很多,有可见的,有不可见的, ...
我试一试dxf,谢谢了! 本帖最后由 llsheng_73 于 2013-11-25 15:58 编辑
当然,存为DXF它是什么都有了,但是要在里边找到你所需要的却比较头痛了,它里边数据太多太多了。。。
如果你仅仅是想把你选择得到的图元定义数据写出去的话,可以在你在代码里边加一两句
(defun c:sss ()
(while(null(setq f1(getfiled "指定文件保存图元数据" "D:\\" "txt" 32))))
(setq f1(open f1"a"))
(setq ss (ssget))
(setq n (sslength ss))
(setq i 0)
(repeat n
(setq s1 (ssname ss i))
(setq s0 (entget s1))
;;其实s0里边还有很多是你不需要关心的比如-1组以及很多很多,这些你都可以先去掉它们
;;比如(setq s0(vl-remove(assoc 5 s0)(cdr s0))
s0(vl-remove(assoc 330 s0) s0));;一个图元的图元名对于帮助我们理解DXF的数据定义是没有用的(-1组更没用,因为每次打开图它都会不一样)
(write-line (vl-princ-to-string s0)f1 );;
; (print "s0=")
;(princ s0)
(setq i (1+ i))
)
(close f1)
)
;;;应该说这样写出去的数据你可以读它们进来后经过简单处理就可以一个个重新绘它们出来
llsheng_73 发表于 2013-11-25 15:33 static/image/common/back.gif
当然,存为DXF它是什么都有了,但是要在里边找到你所需要的却比较头痛了,它里边数据太多太多了。。。
如 ...
非常感谢!大概是因为单位电脑加密的原因,图纸转dxg转不了,看来只能用代码了。 倔强的蚂蚁 发表于 2013-11-25 15:55 static/image/common/back.gif
非常感谢!大概是因为单位电脑加密的原因,图纸转dxg转不了,看来只能用代码了。
不过向上边那样得到的数据CAD是不认识它的
只有你自己认识 llsheng_73 发表于 2013-11-25 16:01 static/image/common/back.gif
不过向上边那样得到的数据CAD是不认识它的
只有你自己认识
我试过,画一个简单的圆,然后得到定义数据,然后用entmake在新文件中重新画,还是可以还原的。就是需要对数据进行删删减减,很麻烦啊。 本帖最后由 llsheng_73 于 2013-11-25 19:10 编辑
倔强的蚂蚁 发表于 2013-11-25 16:31 static/image/common/back.gif
我试过,画一个简单的圆,然后得到定义数据,然后用entmake在新文件中重新画,还是可以还原的。就是需要对 ...
(while(not(null(setq en(read-line f1))))
(foreach a en
(if(member(car a)'(0 1 2 3 4 6 7 8 9 410 330))
(setq en(subst(cons(car a)(vl-princ-to-string (cdr a))) a en)))
)
(entmake en)
)
(close f1)
;;;应该对很多图元有效,但如果有扩展数据就要麻烦得多,不过道理是一样,反正它本来应该是字串的得把它改成字串就可以 llsheng_73 发表于 2013-11-25 19:05 static/image/common/back.gif
(while(not(null(setq en(read-line f1))))
(foreach a en
(if(member(car a)'(0 1 2 3 4...
非常感谢!代码我留下了,回去研究研究。