明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
楼主: shujh1989

[源码] 属性块参数复制到另一个属性块

[复制链接]
发表于 2024-1-9 15:32:52 | 显示全部楼层
飞雪神光 发表于 2023-10-10 13:07
就像这样 拾取一个原图块 批量覆盖有相同属性的属性块 不考虑数据是否对等

很好使,如果能把相近的替换完标记值以后,删除原块就完美了。
发表于 2024-1-9 20:48:31 | 显示全部楼层
lxl217114 发表于 2024-1-9 15:32
很好使,如果能把相近的替换完标记值以后,删除原块就完美了。

加个entdel 删了就行了
  1. (defun c:tt(/ bj get-insert-tag&value lm-set-attribute obj ss ss-enlst sx sxlst ty)
  2.         (defun get-insert-Tag&value (blk / lst)
  3.                 (if (= (type blk) 'ENAME)
  4.                         (if (safearray-value(setq lst (vlax-variant-value(vla-getattributes (vlax-ename->vla-object blk)))))
  5.                                 (mapcar'(lambda (x)(cons (vla-get-tagstring x) (vla-get-textstring x)))(vlax-safearray->list lst))
  6.                         )
  7.                         nil
  8.                 )
  9.         )
  10.         (defun lm-set-attribute(ty biaoji va / att_list)
  11.                 (setq ty (if(=(type ty)'ename)(vlax-ename->vla-object ty)ty))
  12.                 (setq att_list (vlax-safeArray->list (vlax-variant-value (vla-getattributes ty))))
  13.                 (setq xx(vl-some'(lambda(a)(if(=(strcase(vla-get-TagString a))(strcase biaoji))a))att_list))
  14.                 (if xx
  15.                         (vla-put-textstring xx va)
  16.                 )
  17.                 (princ)
  18.         )
  19.         (setq
  20.                 ty(car(entsel "\n原属性块:"))
  21.                 obj(vlax-ename->vla-object ty)
  22.         )
  23.         (setq sxlst (get-insert-Tag&value ty))
  24.         (entdel ty)
  25.         (princ"\n覆盖属性块:")
  26.         (setq ss(ssget '((0 . "insert"))))
  27.         (foreach ty (vl-remove-if-not '(lambda (x) (= (type x) 'ENAME)) (mapcar 'cadr (ssnamex ss)))
  28.                 (foreach x sxlst
  29.                         (setq
  30.                                 bj(car x)
  31.                                 sx(cdr x)
  32.                         )
  33.                         (lm-set-attribute ty bj sx)
  34.                 )
  35.         )
  36.         (princ)
  37. )

评分

参与人数 1明经币 +1 收起 理由
lxl217114 + 1 神马都是浮云

查看全部评分

发表于 2024-1-10 10:35:25 | 显示全部楼层
飞雪神光 发表于 2024-1-9 20:48
加个entdel 删了就行了

大佬,如果方便的话。
看看如图的这样可以实现么?

附件



本帖子中包含更多资源

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

x
发表于 2024-1-10 11:18:06 | 显示全部楼层
lxl217114 发表于 2024-1-10 10:35
大佬,如果方便的话。
看看如图的这样可以实现么?

可以用红框查找对应的 原图签和新图签进行替换 也可以试试这个
http://bbs.mjtd.com/forum.php?mo ... mp;page=1#pid968104
发表于 2024-1-10 11:30:39 | 显示全部楼层
lxl217114 发表于 2024-1-10 10:35
大佬,如果方便的话。
看看如图的这样可以实现么?

  1. (defun c:tt(/ bj get-insert-tag&value lm-set-attribute obj ss ss-enlst sx sxlst ty)
  2.         (defun get-insert-Tag&value (blk / lst)
  3.                 (if (= (type blk) 'ENAME)
  4.                         (if (safearray-value(setq lst (vlax-variant-value(vla-getattributes (vlax-ename->vla-object blk)))))
  5.                                 (mapcar'(lambda (x)(cons (vla-get-tagstring x) (vla-get-textstring x)))(vlax-safearray->list lst))
  6.                         )
  7.                         nil
  8.                 )
  9.         )
  10.         (defun lm-set-attribute(ty biaoji va / att_list)
  11.                 (setq ty (if(=(type ty)'ename)(vlax-ename->vla-object ty)ty))
  12.                 (setq att_list (vlax-safeArray->list (vlax-variant-value (vla-getattributes ty))))
  13.                 (setq xx(vl-some'(lambda(a)(if(=(strcase(vla-get-TagString a))(strcase biaoji))a))att_list))
  14.                 (if xx
  15.                         (vla-put-textstring xx va)
  16.                 )
  17.                 (princ)
  18.         )
  19.         (defun ss-enlst (ss / enlst)
  20.                 (cond
  21.                         ((= (type ss) 'PICKSET)
  22.                                 (vl-remove-if-not '(lambda (x) (= (type x) 'ENAME)) (mapcar 'cadr (ssnamex SS)))
  23.                         )
  24.                         ((= (type ss) 'LIST)
  25.                                 (setq enlst (ssadd))
  26.                                 (last (mapcar '(lambda (x) (ssadd x enlst)) ss))
  27.                         )
  28.                 )
  29.         )
  30.         (defun lm-Get-LwPts(en / x)
  31.                 (mapcar
  32.                         'cdr
  33.                         (vl-remove-if-not
  34.                                 '(lambda(x)
  35.                                          (= (car x) 10)
  36.                                  )
  37.                                 (entget en)
  38.                         )
  39.                 )
  40.         )
  41.         (setq ss(ssget '((0 . "LWPOLYLINE")(8 . "jm-创建块图框"))))
  42.         (foreach ty (ss-enlst ss)
  43.                 (setq pts (lm-Get-LwPts ty))
  44.                 (setq yss(ssget "cp" pts '((0 . "INSERT")(8 . "图签")(2 . "原始图签"))))
  45.                 (if (and yss (> (sslength yss) 0))
  46.                         (progn
  47.                                 (setq
  48.                                         ty (ssname yss 0)
  49.                                         obj(vlax-ename->vla-object ty)
  50.                                         sxlst (get-insert-Tag&value ty)
  51.                                 )
  52.                                 (entdel ty)
  53.                                 (setq xss(ssget "cp" pts '((0 . "INSERT")(2 . "新图签"))))
  54.                                 (foreach ty (vl-remove-if-not '(lambda (x) (= (type x) 'ENAME)) (mapcar 'cadr (ssnamex xss)))
  55.                                         (foreach x sxlst
  56.                                                 (setq
  57.                                                         bj(car x)
  58.                                                         sx(cdr x)
  59.                                                 )
  60.                                                 (lm-set-attribute ty bj sx)
  61.                                         )
  62.                                 )
  63.                         )
  64.                 )
  65.         )
  66.         (princ)
  67. )

评分

参与人数 1明经币 +1 收起 理由
lxl217114 + 1

查看全部评分

发表于 2024-1-10 12:55:41 | 显示全部楼层
本帖最后由 newmooooon 于 2024-1-10 13:02 编辑
lxl217114 发表于 2024-1-10 10:35
大佬,如果方便的话。
看看如图的这样可以实现么?
  1. (defun c:sbb(/ i en ss_Block Block_Name att_list)
  2.         (setq att_list '(2 8 41 42 43 50))
  3.         (princ "\n源块:")
  4.         (if sb_source_block (princ (strcat "默认:" (cdr (assoc 2 sb_source_block)))))
  5.         (setq en (ssget "_+.:E:S" '((0 . "INSERT"))))
  6.         (if en
  7.                 (setq sb_source_block (nw_get_assocs (entget (ssname en 0)) att_list))
  8.         )
  9.         (princ "\n需要被替换的块:")
  10.         (setq ss_Block (ssget ":S" '((0 . "INSERT"))))
  11.         (while ss_Block
  12.                 (setq i -1)
  13.                 (while (setq en (ssname ss_Block (setq i (1+ i))))
  14.                         (setq en (entget en))
  15.                         (entmod (nw_set_assocs en sb_source_block))
  16.                 )
  17.                 (setq ss_Block (ssget ":S" '((0 . "INSERT"))))
  18.         )
  19. )

  20. ;;返回图元中所有群码在dxf_lst中的表
  21. (defun nw_get_assocs(en_data dxf_lst)
  22.         (if (= 'ENAME (type en_data))
  23.                 (setq en_data (entget en_data))
  24.         )
  25.         (vl-remove-if-not '(lambda(x) (member (car x) dxf_lst)) en_data)
  26. )

  27. ;;修改指定群码表
  28. (defun nw_set_assocs(en_data assoc_lst1 / x y)
  29.         (foreach x assoc_lst1
  30.                 (if (setq y (assoc (car x) en_data))
  31.                         (setq en_data (subst x y en_data))
  32.                         (setq en_data (cons x en_data))
  33.                 )
  34.         )
  35. )


自用的,只刷块,不刷属性
带记忆的块刷
发表于 2024-1-10 13:31:32 | 显示全部楼层
newmooooon 发表于 2024-1-10 12:55
自用的,只刷块,不刷属性
带记忆的块刷

厉害的,厉害的。
发表于 2024-1-10 13:38:51 | 显示全部楼层

还有一丢丢问题:
就是在图框是如下情况会①不是矩形 ②是图块③外部参照④没有矩形、没有图块、没有外部参照的图框
会失效
发表于 2024-1-10 15:21:00 | 显示全部楼层
lxl217114 发表于 2024-1-10 13:38
还有一丢丢问题:
就是在图框是如下情况会①不是矩形 ②是图块③外部参照④没有矩形、没有图块、没有外 ...

这就是开始不停地加需求了么
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-11-25 17:40 , Processed in 0.181304 second(s), 20 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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