明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1791|回复: 6

请教个组码读取与更新的问题

[复制链接]
发表于 2008-12-10 13:18:00 | 显示全部楼层 |阅读模式
本帖最后由 作者 于 2008-12-10 13:27:07 编辑

请教个组码读取与更新的问题

CAD2008的MULTILEADER,DXF组码如下:

(-1 . <图元名: 7efa5290>)
(0 . "MULTILEADER")
(330 . <图元名: 7efa1cf8>)
(5 . "1EEA")
(100 . "AcDbEntity")
.........
(330 . <图元名: 7efa4b40>)
(177 . 2)
(44 . 0.0)
(302 . "ST")
(330 . <图元名: 7efa4b58>)
(177 . 3)
(44 . 0.0)
(302 . "大理石")
(330 . <图元名: 7efa4b60>)
(177 . 4)
(44 . 0.0)
(302 . "800X800")
........

请问:怎么分别取出当中的ST、大理石、800X800,大家都是302???

其实我是想通过程序将图中所有ST、大理石、800X800组合的MULTILEADER全部更新为CT、抛光砖、600X600

 

本帖子中包含更多资源

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

x
"觉得好,就打赏"
还没有人打赏,支持一下
发表于 2008-12-10 13:29:00 | 显示全部楼层
发表于 2008-12-10 18:35:00 | 显示全部楼层

实现思路:

   用(nth)函数逐一读取上述关联序列内的元素,如得到a,用(= 302 (car a))条件判断是否成立,如成立将a元素再追加至一个表,形成((302 . "ST")(302 . "大理石")(302 . "800X800")),然后再用(nth)函数顺序调用即可。

 楼主| 发表于 2008-12-11 23:10:00 | 显示全部楼层

谢谢nonsmal、ljttjl

我在国外一个论坛上找到这个:

(setq ent (entsel))
(setq ed (entget (car ent)))
(foreach item ed
(if (= (car item) 330)
(setq attnamelst (cons (vlax-ename->vla-object (cdr item))
attnamelst))
)
)

(setq vname (vla-getBlockAttributeValue
(vlax-ename->vla-object (car ent))
(vla-get-objectid (nth 6 attnamelst))))

(if (= vname "ST")
(vla-SetBlockAttributeValue
(vlax-ename->vla-object (car ent))
(vla-get-objectid (nth 6 attnamelst))"GT")
)

但是只能替换指定的第几个图元302码,如:上例的6

有没办法改得通用性强一点。我的目的是想将满足类似ST/大理石/800X800这种多属性组合的换成其它的。(也就是材料替换)

帮帮忙

 楼主| 发表于 2008-12-12 20:18:00 | 显示全部楼层
高手帮帮忙啊
 楼主| 发表于 2008-12-16 16:05:00 | 显示全部楼层
高手帮帮忙啊
 楼主| 发表于 2008-12-21 15:24:00 | 显示全部楼层
帮忙看看4楼。谢谢啊
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2025-7-29 22:55 , Processed in 0.184728 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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