倔强的蚂蚁
发表于 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 ...
谢谢你的详细讲解。学习了。