明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
楼主: 倔强的蚂蚁

[已解答] 有没有什么办法,能够获取选定图形所有图元的定义数据?

[复制链接]
 楼主| 发表于 2013-11-26 16:34 | 显示全部楼层
llsheng_73 发表于 2013-11-25 19:05
(while(not(null(setq en(read-line f1))))
    (foreach a en
      (if(member(car a)'(0 1 2 3 4  ...

程序执行中,提示参数类型错误。
我单独执行一句,试了试,是这样的
(cadr '(0 . circle))
; 错误: 参数类型错误: consp CIRCLE

会不会是它把(0.circle)当成了一个元素,而不是一个含三个元素的表来看待,所以会出错?
发表于 2013-11-26 18:00 | 显示全部楼层
本帖最后由 llsheng_73 于 2013-11-26 18:05 编辑

原因不在那里,因为 '(0 . circle)它不是点对形式的,只能用 cdr去访问后边的元素
下班了,改天看有时间没,有时间好好琢磨下
 楼主| 发表于 2013-11-27 11:37 | 显示全部楼层
llsheng_73 发表于 2013-11-25 19:05
(while(not(null(setq en(read-line f1))))
    (foreach a en
      (if(member(car a)'(0 1 2 3 4  ...

回去研究了下这段代码,但是read-line读取的点表,是字符串的方式,返回的表带双引号,这样执行car的时候,就会出错。不知道怎么把这个字符串中的双引号去掉,让它成为一个表。
en的返回值是这样的
"((-1 . <图元名: 7effa6f8>) (0 . LINE) (330 . <图元名: 7efd5cf8>) (5 . 6E2F) (100 .
AcDbEntity) (67 . 0) (410 . Model) (8 . 4虚线层) (48 . 10.0) (100 . AcDbLine) (10
1668.32 6477.7 0.0) (11 1663.74 6479.84 0.0) (210 0.0 0.0 1.0))"
要怎么变成下边这样呢?
((-1 . <图元名: 7effa6f8>) (0 . LINE) (330 . <图元名: 7efd5cf8>) (5 . 6E2F) (100 .
AcDbEntity) (67 . 0) (410 . Model) (8 . 4虚线层) (48 . 10.0) (100 . AcDbLine) (10
1668.32 6477.7 0.0) (11 1663.74 6479.84 0.0) (210 0.0 0.0 1.0))

论坛里搜了搜,没搜到有什么方法。
发表于 2013-11-27 12:01 | 显示全部楼层
命令: (read "(a b c)")

(A B C)

 楼主| 发表于 2013-11-27 12:06 | 显示全部楼层
q3_2006 发表于 2013-11-27 12:01
命令: (read "(a b c)")

(A B C)

不行,变不过来。
发表于 2013-11-27 12:34 | 显示全部楼层
倔强的蚂蚁 发表于 2013-11-27 12:06
不行,变不过来。

变不过来是不READ的问题,是你的关联表有问题。。。
 楼主| 发表于 2013-11-27 12:35 | 显示全部楼层
q3_2006 发表于 2013-11-27 12:34
变不过来是不READ的问题,是你的关联表有问题。。。

嗯,我再研究研究吧。谢谢啊
发表于 2013-11-27 13:45 | 显示全部楼层
本帖最后由 llsheng_73 于 2013-11-27 13:49 编辑
倔强的蚂蚁 发表于 2013-11-27 12:35
嗯,我再研究研究吧。谢谢啊

中午研究了一下,原来的代码有几处错误
1.foreach 出错,因为先没有对读出的字串进行read
2.对字串READ后它绘制不出来,原因出在100子类标记的小写字母被read变成了大写
现在根据这个结果改了一下,不去read它,以免它变成大写很头痛,但不read它不能变成表?
所以通过在字串中找" . "和"(" ")"来对字串进行截取重新组成图元表
原来写图元数据出去的文件小改了一下基本没修改什么
  1. (defun c:sss ()
  2.    (while(null(setq f1(getfiled "指定文件保存图元数据" "D:\\" "txt" 32))))
  3.     (setq f1(open f1"a"))
  4.     (setq ss (ssget))
  5.     (setq n (sslength ss))
  6.     (setq i 0)
  7.     (repeat n
  8.       (setq s0 (entget(ssname ss i))
  9.      s0(vl-remove(assoc 5 s0)(cdr s0))
  10.      s0(vl-remove(assoc 330 s0) s0)
  11.       i (1+ i))
  12.       (write-line (vl-princ-to-string s0)f1)
  13.     )
  14.     (close f1)
  15. )

现在代码见附件(包含写出和读入重新绘制);由于没时间详细测试,可能部分图元无法绘出并且只适于简单图元
其实这样做的唯一好处可能在于便于理解DXF数据,别的实际意义还没想到
对于复杂图元和扩展数据有时间了再研究下







本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x
发表于 2013-11-27 14:39 | 显示全部楼层
llsheng_73 发表于 2013-11-27 13:45
中午研究了一下,原来的代码有几处错误
1.foreach 出错,因为先没有对读出的字串进行read
2.对字串READ ...


拜托早点研究清楚,来个全面版的,扩展,属性什么的!

点评

关键没想明白它的用处在哪里  发表于 2013-11-27 15:42
 楼主| 发表于 2013-11-27 14:57 | 显示全部楼层
llsheng_73 发表于 2013-11-27 13:45
中午研究了一下,原来的代码有几处错误
1.foreach 出错,因为先没有对读出的字串进行read
2.对字串READ ...

谢谢你的详细讲解。学习了。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-5-20 00:45 , Processed in 0.283077 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表