KO你 发表于 2021-11-29 14:01:51

导出导入属性值

我在CAD的Express ET扩展工具里找到的导出属性值与导入属性值
发上来让高手们探讨
这个程序只能在安装了ET扩展工具的条件下才能使用,
是否有高手修改一下,能在没装ET扩展的条件下使用
导出与导入是图块所有的属性都导了,能否修改指定的属性值(多选)导出导入呢,
顺序要从左到右,从上到下排序

masterlong 发表于 2021-12-1 11:25:12

如果是我就不会采用属性导入导出的思路


假设你的两套图框拥有【相同的大小】和【相同的插入点位置】
同时拥有【相同的属性“标记”】
比如“工程名称”、“子项名称”、“图纸名称”、“图纸编号”等等


块定义都存在的情况下
图框替换其实很简单
(mapcar ''(( Atknm Btknm )
                                        (foreach Atk (ss2list (ssget "x" (list '(0 . "insert") (cons 2 Atknm))))
                                                (entmodone Atk 2 Btknm)
                                        )
                        )
                        '("A单位图框-A0" "A单位图框-A1" "A单位图框-A2")
                        '("B单位图框-A0" "B单位图框-A1" "B单位图框-A2")
)
再用battman命令逐一选择B单位图框同步属性位置
图框的替换就算是基本完成了


以上代码用到的公共函数如下
;999公共函数
;;选择集转为图元列表
(defun ss2list ( ss / n i elist )
        (cond
                ((null ss) NIL)
                ((and (= (type ss) 'Pickset) (null (sslength ss)))
                                NIL
                )
                ((= (type ss) 'Pickset)
                        (setq n(sslength ss)
                                        i n
                                        elist '()
                        )
                        (repeat n
                                (setq i (1- i))
                                ;;如果没有这个if,那么选择集中被删除的图元,也会被加入到列表之中————但是极其偶尔也有可能,图元不存在但是能entget(遇到过一次,原因不明,或许是CAD的BUG)
                                (if (entget (ssname ss i))
                                        (setq elist (cons (ssname ss i) elist))
                                )
                        )
                        elist
                )
                ((= (type ss) 'ename)
                        (list ss)
                )
                ((= (type ss) 'list)
                        (vl-remove-if-not ''((x) (and (= (type x) 'ename) (entget x))) ss)
                )
                ( T NIL )
        )
)
;999公共函数
;;修改一个图元的某个数据                        ——————不是所有的图元类型都适用此方式                ——————此函数尚未考虑组码不存在时的情况:比如62
(defun entmodone( ent dxfnum data )
        (entmod (list (cons -1 ent)(cons dxfnum data)))
)

masterlong 发表于 2021-12-1 11:28:37

当然以上说的是最理想的情况
AB两单位的图框肯定会存在某些差异
比如
【大小不一样】
一个SC=1时是1:100的尺寸
一个SC=1时是1:1的尺寸
【插入点位置不一样】
一个插入点在左下角
一个插入点在右下角
更多的可能的差异是【不同的属性“标记”】
比如A图框的“工程编号”在B图框里叫“业号”之类的
因此
你就要另外做一件事----将它们统一起来
也就是将B单位的图框按A单位的模式
全部重新做成属性块


至于怎么在这个步骤中将事情变得相对轻松
其实也不难
先做好两个准备工作
一是找个可指定插入点的快速建块插件以及块改名的插件
搜一下一大堆
二是将所有A图框的属性定义
按【1:1的比例】单独放到某个dwg里保存起来备用
需要重新做块的时候
先将某一个B图框调整好大小
粘贴A图框的属性定义并调整好位置
移位后ctrl+shift+c全部属性
再连同【B图框和A属性定义】【一起】快速建块、改名
其它B图框依次操作即可


这个地方看明白没有
新建的块是个“嵌套块”
嵌套了原始的B图框
不管原始B图框是否属性块、动态块
大小是否匹配、插入点在哪里
一个嵌套全部统一了

masterlong 发表于 2021-12-1 11:31:43

假设B单位图框有一些A单位图框所没有的属性
这时就需要你做一些变通
比如“建设单位名称”之类的
直接就在原始B图框内以文字的形式“固化”
因为对一个特定项目而言
这些基本都属于“固定”的内容
如果实在是无法固化的
那就新建属性定义
并在替换完成以后一个一个改吧
反正按你之前的思路也是需要手动改的


再假设反过来
A单位图框有一些B单位图框所没有的属性
或者前面重新做块阶段就删除
或者find命令清空
左右也费不了多少时间


以上所说
肯定不如一个完整的程序一步到位简便
但是相比找到人为你定制的难度
已经是小了很多很多


最后再推荐你一个或许能用得上的程序
http://bbs.mjtd.com/thread-80718-1-1.html
2楼

masterlong 发表于 2021-11-29 14:25:12

左到右上到下排序
你的要求还挺高

KO你 发表于 2021-11-29 14:34:08

masterlong 发表于 2021-11-29 14:25
左到右上到下排序
你的要求还挺高

有要求才有追求哈,谢谢回帖

masterlong 发表于 2021-11-29 14:54:44

旋转
镜像
包括属性位置本身可变
按位置排序有意义么?

KO你 发表于 2021-11-29 21:24:03

masterlong 发表于 2021-11-29 14:54
旋转
镜像
包括属性位置本身可变


我是为了方便修改图框信息,图框没有镜像与旋转

alexmai 发表于 2021-11-30 14:30:55

把内容copy 到 excel

excel 有 分栏 命令,可以把需要的内容分开显示

能达到你部分目的

KO你 发表于 2021-11-30 16:38:18

alexmai 发表于 2021-11-30 14:30
把内容copy 到 excel

excel 有 分栏 命令,可以把需要的内容分开显示


我知道这个方法,但太多项目删也麻烦,有时设计院要换图框,我想把这些信息指定导到别的图框,不知道怎么操作,这是我一直追求的,论坛没有找到类似的程序
不懂编程的我只能求助大家了

alexmai 发表于 2021-11-30 17:07:03

换图框参考这个链接
https://mp.weixin.qq.com/s/ospTcU37yteunZvN_sYtuQ

masterlong 发表于 2021-11-30 19:13:36

这就对了么
不要顺着你的解题思路来提要求
而是要把你的真实需求讲出来

从看到你的求助第一眼
我就猜是和图框有关
可你偏要抛出一个程序求修改
要知道一件事
玩lsp的
几乎没有人愿意读别人的程序
特别是acet的lsp
读起来更费劲
老外的思路总是怪怪的

KO你 发表于 2021-11-30 20:45:41

masterlong 发表于 2021-11-30 19:13
这就对了么
不要顺着你的解题思路来提要求
而是要把你的真实需求讲出来


受教了,还请大师指点:handshake
页: [1] 2
查看完整版本: 导出导入属性值