找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 2751|回复: 22

[已解决] 【已解决】求自动修改块属性

[复制链接]

已领礼包: 1310个

财富等级: 财源广进

发表于 2017-2-28 22:41:44 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

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

×
本帖最后由 jxwlkj 于 2017-3-1 22:46 编辑

大家好,本人电气行业,新到一家公司上班,这里是用CAD画电气图。而且是在一个DWG文件里包含一个订单的所有图纸。电气线路中有很多线要去到另一张图纸,因此线的末端有索引,如/2.1D,表示这根线去到第2张图的1D处,以方便读图人员。每次画好图后,要花大量的时间来核对每一根线去到哪里的座标值。自己也花了些时间来研究,但终因功力不够,未出成果。因此,特求一插件,可以至少半自动的填入座标值,即 插件开始后,连续选中两个HA1S1块,自动填入对应的XERF属性值。图纸编号在图框的属性值里。见下图: AAA.png

图框是这里用的标准图框,横向等分8分,间距36,竖向等分4分,间距50。个人之前的想法是选中一个HA1S1块后,判断这个块是不是在图框内,在的话提取出图纸编号(我主要是这里卡壳了)。然后根据HA1S1块的基点座标判断出属于哪个方块。先第二个HA1S1块后,同样的操作。然后把两个值交换写入HA1S1块的XERF属性值。有劳大神帮忙,本人不胜感谢。

CAD_DWG附件:
请点击此处下载

查看状态:需购买或无权限

您的用户组是:游客

文件名称:CAD_DWG.rar 
下载次数:11  文件大小:40.19 KB 
下载权限: 不限 以上  [免费赚D豆]




论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

已领礼包: 859个

财富等级: 财运亨通

发表于 2017-3-3 21:33:23 | 显示全部楼层
本帖最后由 csharp 于 2017-3-3 21:44 编辑

  1. (defun c:tt (/ ss _getatt a4 al lst getposition)
  2.   (defun _getatt (l tag)
  3.     (car (vl-remove-if-not
  4.            (function (lambda (x) (= (xdrx_getpropertyvalue x "tag") tag)))
  5.            l
  6.          )
  7.     )
  8.   )
  9.   (defun getposition (b p str / p1 v l atts)
  10.     (setq p1   (xdrx_getpropertyvalue b "position")
  11.           v    (mapcar '- p1 (mapcar '+ '(4.5 5.0 0) p))
  12.           l    (mapcar 'fix (mapcar '/ v '(36.0 50.0 1.)))
  13.           atts (xdrx_getpropertyvalue b "attributeentities")
  14.     )
  15.     (list (xdrx_getpropertyvalue (_getatt atts "WIRENO") "textstring")
  16.           (_getatt atts "XREF")
  17.           (strcat "/"
  18.                   str
  19.                   "."
  20.                   (itoa (1+ (car l)))
  21.                   (chr (+ 65 (cadr l)))
  22.           )
  23.     )
  24.   )
  25.   (if (and (setq ss (ssget '((0 . "INSERT") (2 . "HA1S1"))))
  26.            (setq a4 (ssget "x" '((0 . "INSERT") (2 . "A4"))))
  27.       )
  28.     (progn
  29.       (setq al        (xdrx_pickset->ents ss)
  30.             lst        (mapcar
  31.                   '(lambda (x / p2 atts no l)
  32.                      (mapcar 'set '(p2 atts box) (xdrx_getpropertyvalue x "position" "attributeentities" "boundingbox"))
  33.                      (setq no (last (xdrx_string_split
  34.                                       (xdrx_getpropertyvalue (_getatt atts "4") "textstring")
  35.                                       "-"
  36.                                     )
  37.                               )
  38.                      )
  39.                      (setq l (vl-remove-if-not
  40.                                (function (lambda (a)
  41.                                            (xdrx_point_isinside (xdrx_getpropertyvalue a "position") box)
  42.                                          )
  43.                                )
  44.                                al
  45.                              )
  46.                      )
  47.                      (if l
  48.                        (progn
  49.                          (foreach i l (setq al (vl-remove i al)))
  50.                          (mapcar '(lambda (a) (getposition a p2 no)) l)
  51.                        )
  52.                        nil
  53.                      )
  54.                    )
  55.                   (xdrx_pickset->ents a4)
  56.                 )
  57.             lst        (xd::list:groupbyindex (apply 'append lst) 0)
  58.       )
  59.       (mapcar '(lambda (x)
  60.                  (if (= (length x) 2)
  61.                    (progn
  62.                      (xdrx_setpropertyvalue (caar x) "textstring" (cadadr x))
  63.                      (xdrx_setpropertyvalue (caadr x) "textstring" (cadar x))
  64.                    )
  65.                  )
  66.                )
  67.               (mapcar 'cdr lst)
  68.       )
  69.     )
  70.   )
  71.   (princ)
  72. )
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 1 反对 0

使用道具 举报

已领礼包: 40个

财富等级: 招财进宝

发表于 2017-2-28 23:22:35 | 显示全部楼层

回帖奖励 +5 D豆

能不能把你手工处理过程做个动画GIF贴上来? 或者有没有想法自动全部完处理一张整个的DWG
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 1310个

财富等级: 财源广进

 楼主| 发表于 2017-3-1 00:01:52 | 显示全部楼层

感谢版主newer回复,
动画我看了一下置顶里的教程,尚未学会,一开始录制电脑就啥操作都操作不了。非常抱歉。

因为图是自己画的,当时自己画的自己肯定知道这条线去到哪里,加上索引只是方便以后或者其他读图人员。

现在就是单纯手工来修改的。根据标号,如L1这条线,是要到第二张图去的。然后就看这两根线的末端处在图框的哪个区域。如DWG中L1在第1个图框中是在8D的区域,在第2张图是在1D的位置。记下,然后在第1张图那个HA1S1块修改XERF属性值为/2.1D,修改第2张图那个HA1S1块修改XERF属性值为/1.8D。


像这样两根线离得近的还好,图多了,就要来回查看-记住-再修改。或者我有时候是先打一份图纸出来,用笔标记修改每一个HA1S1块的XERF属性值,然后再修改DWG图。很是麻烦,一套图十来张,上百个索引要标注,经常要花大半天来核对。

版主newer提的好,有没有想法自动全部完处理一张整个的DWG。其实按目前这样是没有办法完全实现的。因为根据标号来实现的话,即HA1S1块的WIRENO属性值。这张图有一个L1出去,在另一张也必然会有一个L1进来。一一对应的话是可行。但是有时候图纸上会有很多的公共端,比如说0V,即有很多HA1S1块的WIRENO属性值均为0V,这个时候全自动就没有办法知道怎么对应了。


当然我知道有其他的软件可以实现电气图纸的这样画法引用。包括CAD电气版,还有EPLAN等。但是公司里是不能用的,因为老板的版权意识还是很强,不能用盗版,所以只购买了CAD标准版,机械电气都可以用。


如果能做到我说的那样,两个块连续选中,然后交互填入对方块基点所对应的图纸区域到XERF属性值,我就很知足啦。如果全自动处理,再加上人工处理有重复标号的那就更好啦。


再次感谢版主newer
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 1304个

财富等级: 财源广进

发表于 2017-3-1 11:12:27 | 显示全部楼层
我只是路过打酱油的
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 40个

财富等级: 招财进宝

发表于 2017-3-1 11:33:33 | 显示全部楼层
1D , 8D 是根据划分的线,程序算出来的? 还是在哪个属性里面?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 859个

财富等级: 财运亨通

发表于 2017-3-1 11:51:12 | 显示全部楼层
  1. (defun c:tt (/ ss a4 a4l b1 b2 p1 p2 b14 b24 getnum getposition setnum)
  2.   (defun getnum        (b)
  3.     (car
  4.       (vl-remove nil
  5.                  (mapcar '(lambda (x)
  6.                             (if        (= (xdrx_getpropertyvalue x "tag") "4")

  7.                               (last (xdrx_string_split
  8.                                       (xdrx_getpropertyvalue x "textstring")
  9.                                       "-"
  10.                                     )
  11.                               )

  12.                               nil
  13.                             )
  14.                           )
  15.                          (xdrx_getpropertyvalue b "AttributeEntities")
  16.                  )
  17.       )
  18.     )
  19.   )
  20.   (defun getposition (b1 b2 / p1 p2 v l pos)
  21.     (setq p1  (xdrx_getpropertyvalue b1 "position") ;_xref
  22.           p2  (xdrx_getpropertyvalue b2 "position") ;_a4
  23.           v   (mapcar '- p1 (mapcar '+ '(4.5 5.0 0) p2))
  24.           l   (mapcar 'fix (mapcar '/ v '(36.0 50.0 1.)))
  25.           pos (strcat "." (itoa (1+ (car l))) (chr (+ 65 (cadr l))))
  26.           num (strcat "/" (getnum b2) pos)
  27.     )
  28.   )
  29.   (defun setnum        (b str)
  30.     (mapcar '(lambda (x)
  31.                (if (= (xdrx_getpropertyvalue x "tag") "XREF")
  32.                  (xdrx_setpropertyvalue x "textstring" str)
  33.                )
  34.              )
  35.             (xdrx_getpropertyvalue b "AttributeEntities")
  36.     )
  37.   )
  38.   (if (and (setq ss (ssget '((0 . "INSERT") (2 . "HA1S1"))))
  39.            (= (sslength ss) 2)
  40.            (setq a4 (ssget "x" '((0 . "INSERT") (2 . "A4"))))
  41.       )
  42.     (progn
  43.       (setq b1        (ssname ss 0)
  44.             b2        (ssname ss 1)
  45.             p1        (xdrx_getpropertyvalue b1 "position")
  46.             p2        (xdrx_getpropertyvalue b2 "position")
  47.             a4l        (xdrx_pickset->ents a4)
  48.       )
  49.       (setq b14        (car
  50.                   (vl-remove-if-not
  51.                     '(lambda (x)
  52.                        (apply 'xdrx_point_isinside (cons p1 (xdrx_entity_box x)))
  53.                      )
  54.                     a4l
  55.                   )
  56.                 )
  57.             b24        (car
  58.                   (vl-remove-if-not
  59.                     '(lambda (x)
  60.                        (apply 'xdrx_point_isinside (cons p2 (xdrx_entity_box x)))
  61.                      )
  62.                     a4l
  63.                   )
  64.                 )
  65.       )
  66.       (if (and b14 b24)
  67.         (progn
  68.           (setnum b1 (getposition b2 b24))
  69.           (setnum b2 (getposition b1 b14))
  70.         )
  71.       )
  72.     )
  73.   )
  74.   (princ)
  75. )
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 1310个

财富等级: 财源广进

 楼主| 发表于 2017-3-1 20:41:54 | 显示全部楼层

1D,是根据图框上的分隔区域线,其实知道图框的位置,也可以计算出来。因为那些分隔线跟图框都是一个块,是相对固定的。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 1310个

财富等级: 财源广进

 楼主| 发表于 2017-3-1 20:57:39 | 显示全部楼层

感谢csharp,代码经测试,已经实现我预想的功能,已经可以节约很多时间,非常感谢。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 40个

财富等级: 招财进宝

发表于 2017-3-1 22:42:42 | 显示全部楼层

如果解决了,楼主编辑下主题帖,标题前面加上【已解决】 吧。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 1310个

财富等级: 财源广进

 楼主| 发表于 2017-3-1 22:46:21 | 显示全部楼层

好的,再次感谢csharp和newer的热心帮助。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 1310个

财富等级: 财源广进

 楼主| 发表于 2017-3-2 21:01:13 | 显示全部楼层
本帖最后由 jxwlkj 于 2017-3-2 21:04 编辑

@csharp,@newer,可以麻烦再编个自动的吗?有了快的工具就想更快的工具。

就是自动处理整个DWG文件里的HA1S1块。在最开始的时候可以选择不符合条件的HA1S1块不改变其XERF属性值或者改变为“-”
符合的条件就是:
若是两个HA1S1块的WIRENO属性值一样,就互相填XERF属性值。
若是有多余两个或者少于两个HA1S1块的WIRENO属性值一样,就按最开始选择的不处理或者是改变为“-”。

这样就只剩下为数不多的重复的块,再用上面的手动脚本拾取操作就行了。谢谢。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 859个

财富等级: 财运亨通

发表于 2017-3-3 15:07:58 | 显示全部楼层
本帖最后由 csharp 于 2017-3-3 15:13 编辑


你这只可能是两两对应?另外每个图框中有几个这个符号,如何去对应
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2017-3-3 18:48:41 | 显示全部楼层
能不能把你手工处理过程做个动画GIF贴上来?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 1310个

财富等级: 财源广进

 楼主| 发表于 2017-3-3 20:12:13 | 显示全部楼层

回复csharp,首先感谢您的再次关注,其实只要能处理两两对应的就行了,剩下的不是两两对应的,比如说是单个的,或者是多个对应,还有就是不在图框内的就不处理或者全部填“-”。自动处理过后再用您的手动处理那些就很方便了。

每个图框多的可能有四五十个这个符号,图纸最多的可能有二十来张。所以每次对这些就非常麻烦。要花费巨多时间来核对。

回复hanyaxinshou
手工处理的过程就是如我在三楼所说。根据标号(即HA1S1块的WIRENO属性值。),如L1这条线,是要到第二张图去的。然后就看这两根线的末端处在图框的哪个区域。如DWG中L1在第1个图框中是在8D的区域,在第2张图是在1D的位置。记下,然后在第1张图那个HA1S1块修改XERF属性值为/2.1D,修改第2张图那个HA1S1块修改XERF属性值为/1.8D。
GIF图没有想到好办法做,教程里那个软件一录制电脑就动不了。


论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 1310个

财富等级: 财源广进

 楼主| 发表于 2017-3-3 21:32:37 | 显示全部楼层
本帖最后由 jxwlkj 于 2017-3-4 00:08 编辑

刚才看了一下,最多的一个图框有70多个符号。。我上传动一个图纸上来供参考。谢谢了。

AAA.rar

416.88 KB, 阅读权限: 70, 下载次数: 2, 下载积分: D豆 -1 , 活跃度 1

论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

GMT+8, 2025-9-19 22:44 , Processed in 0.533154 second(s), 70 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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