倔强的蚂蚁 发表于 2013-11-26 16:34:16

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...

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

会不会是它把(0.circle)当成了一个元素,而不是一个含三个元素的表来看待,所以会出错?

llsheng_73 发表于 2013-11-26 18:00:32

本帖最后由 llsheng_73 于 2013-11-26 18:05 编辑

原因不在那里,因为 '(0 . circle)它不是点对形式的,只能用 cdr去访问后边的元素
下班了,改天看有时间没,有时间好好琢磨下

倔强的蚂蚁 发表于 2013-11-27 11:37:01

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...

回去研究了下这段代码,但是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))

论坛里搜了搜,没搜到有什么方法。

q3_2006 发表于 2013-11-27 12:01:29

命令: (read "(a b c)")

(A B C)

倔强的蚂蚁 发表于 2013-11-27 12:06:23

q3_2006 发表于 2013-11-27 12:01 static/image/common/back.gif
命令: (read "(a b c)")

(A B C)

不行,变不过来。

q3_2006 发表于 2013-11-27 12:34:12

倔强的蚂蚁 发表于 2013-11-27 12:06 static/image/common/back.gif
不行,变不过来。

变不过来是不READ的问题,是你的关联表有问题。。。

倔强的蚂蚁 发表于 2013-11-27 12:35:06

q3_2006 发表于 2013-11-27 12:34 static/image/common/back.gif
变不过来是不READ的问题,是你的关联表有问题。。。

嗯,我再研究研究吧。谢谢啊

llsheng_73 发表于 2013-11-27 13:45:25

本帖最后由 llsheng_73 于 2013-11-27 13:49 编辑

倔强的蚂蚁 发表于 2013-11-27 12:35 static/image/common/back.gif
嗯,我再研究研究吧。谢谢啊
中午研究了一下,原来的代码有几处错误
1.foreach 出错,因为先没有对读出的字串进行read
2.对字串READ后它绘制不出来,原因出在100子类标记的小写字母被read变成了大写
现在根据这个结果改了一下,不去read它,以免它变成大写很头痛,但不read它不能变成表?
所以通过在字串中找" . "和"(" ")"来对字串进行截取重新组成图元表
原来写图元数据出去的文件小改了一下基本没修改什么
(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 s0 (entget(ssname ss i))
   s0(vl-remove(assoc 5 s0)(cdr s0))
   s0(vl-remove(assoc 330 s0) s0)
      i (1+ i))
      (write-line (vl-princ-to-string s0)f1)
    )
    (close f1)
)
现在代码见附件(包含写出和读入重新绘制);由于没时间详细测试,可能部分图元无法绘出并且只适于简单图元
其实这样做的唯一好处可能在于便于理解DXF数据,别的实际意义还没想到
对于复杂图元和扩展数据有时间了再研究下







q3_2006 发表于 2013-11-27 14:39:49

llsheng_73 发表于 2013-11-27 13:45 http://bbs.mjtd.com/static/image/common/back.gif
中午研究了一下,原来的代码有几处错误
1.foreach 出错,因为先没有对读出的字串进行read
2.对字串READ ...

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

倔强的蚂蚁 发表于 2013-11-27 14:57:15

llsheng_73 发表于 2013-11-27 13:45 static/image/common/back.gif
中午研究了一下,原来的代码有几处错误
1.foreach 出错,因为先没有对读出的字串进行read
2.对字串READ ...

谢谢你的详细讲解。学习了。
页: 1 [2] 3
查看完整版本: 有没有什么办法,能够获取选定图形所有图元的定义数据?