乐筑天下

搜索
欢迎各位开发者和用户入驻本平台 尊重版权,从我做起,拒绝盗版,拒绝倒卖 签到、发布资源、邀请好友注册,可以获得银币 请注意保管好自己的密码,避免账户资金被盗
查看: 15|回复: 8

[编程交流] 如何更新

[复制链接]

1

主题

4

帖子

3

银币

初来乍到

Rank: 1

铜币
5
发表于 2022-7-6 11:03:07 | 显示全部楼层 |阅读模式
我们使用了大量的块,并创建了一些块,这些块是用于特定应用的一组块。问题是,我似乎无法更新仅包含在我刚刚插入的块中的嵌套块的属性。
 
我在网上找到的唯一代码更新了图形中的所有嵌套块,而不是特定块。
 
这里有一个片段
 
  1.   
  2. (setq rm_name (getstring "\nEnter Module Name:      "))
  3. (setq insertpt (getpoint "\nSelect Insertion Point For Wiring Block:     "))
  4. (setq wiringblk (vla-insertBlock (vla-get-ModelSpace doc) (vlax-3d-point insertpt) "WIRING-CONTROL-GROUP-ROOF-VENT" 1 1 1 0))
  5. (vlax-for o (vla-item (vla-get-Blocks doc) "WIRING-CONTROL-GROUP-ROOF-VENT") ;parent block
  6.    (if
  7.      (and  (eq (vla-get-objectname o) "AcDbBlockReference")
  8.              (eq (vlax-get-property o 'Effectivename) "WIRING-MODULE-2CGROL")) ;child block
  9.      (progn
  10.        (setq olist (vlax-safearray->list
  11.                    (vlax-variant-value (vla-getAttributes o)))) ;list of attributes in child block
  12.           (while (> (vl-list-length olist) 0)
  13.              (setq otag (vla-get-tagstring (car olist)))
  14.              (setq otxt (vla-get-textstring (car olist)))
  15.                (if (and (eq otag "MODULENAME")
  16.                           (eq otxt "RM-01-01"));and
  17.                    (vla-put-textString (car olist) rm_name) ;update textstring
  18.                 );if
  19.               (setq olist (cdr olist)) ;counter
  20.               (princ "\n")
  21.        );while
  22.      );progn
  23.    );if
  24. );vlax-for o

 
我被困在如何确保我只更新我插入的块。我可以看到变量“wiringblk”是块引用,但我似乎不能将其限制为仅更新该块。
 
感谢所有能帮忙的人,
 
接线盒
回复

使用道具 举报

26

主题

1495

帖子

20

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
118
发表于 2022-7-6 11:16:10 | 显示全部楼层
如果父块包含属性化插入,则父块的所有插入将具有相同的嵌套块属性。我认为您必须重新定义块表定义,以更改嵌套块值,而这反过来将更新块插入的所有实例。
 
 
  1. Block Table Information  ....
  2. Select objects: L
  3. 1 found
  4. INSERT - TEMP1
  5. INSERT -TESTB Lay-0 Scl-1.00,1.00,1.00
  6. ATTRIB     8.0 62.ByLayer  6.ByLayer
  7. SEQEND     8.0 62.ByLayer  6.ByLayer
  8. INSERT -TESTC Lay-0 Scl-1.00,1.00,1.00
  9. ATTRIB     8.0 62.ByLayer  6.ByLayer
  10. SEQEND     8.0 62.ByLayer  6.ByLayer
  11. INSERT -TESTC Lay-0 Scl-1.00,1.00,1.00
  12. ATTRIB     8.0 62.ByLayer  6.ByLayer
  13. SEQEND     8.0 62.ByLayer  6.ByLayer

 
块TEMP1包含3个嵌套插入。如果更改其中一个嵌套插入属性的值,则所有TEMP1插入都将更新。
 
-大卫
回复

使用道具 举报

1

主题

4

帖子

3

银币

初来乍到

Rank: 1

铜币
5
发表于 2022-7-6 11:24:30 | 显示全部楼层
所以我可能会更幸运地分解块并在文字后更新嵌套块?
 
有没有办法判断这些块是原始父块的一部分,并用它来构建选择集?
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 11:27:42 | 显示全部楼层
我认为最好使用更新的属性创建另一个块定义。
回复

使用道具 举报

26

主题

1495

帖子

20

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
118
发表于 2022-7-6 11:37:43 | 显示全部楼层
如果插入块始终位于当前图形之外,则可以在插入期间使用增量计数器
 
命令:INSERT temp2=temp1
 
命令:INSERT temp3=temp1
 
然后在插入后立即重新定义每个块表
 
如果块仅在当前图形中定义,则不能使用此方法。
 
 
 
至于爆炸,我会尝试以下方法:
 
(setq le(entlast));;;记录最后一个实体
(命令“_.INSERT”“*TEMP1”'(0 0)1 0)
(setq fe(entnext le));;;le之后的第一个实体
 
 
如果插入是图形中的第一个图元,则此操作将失败
 
前导*将自动分解插入
 
整个过程可能有点复杂,但会给你更多的灵活性
 
 
-大卫
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 11:42:04 | 显示全部楼层
您可以使用类似的方法创建块的重复定义,然后更改其中的属性:
 
  1. ;; AddDuplicateDefinition
  2. ;; Adds a Duplicate Block Definition
  3. ;; Args: Name of existing block to duplicate
  4. ;; Returns: VLA Block Object (Definition)
  5. (defun AddDuplicateDefinition ( blockname / blocks block doc ObjLst dupe )
  6. ;; © Lee Mac  ~  04.06.10
  7. (vl-load-com)
  8. (if
  9.    (setq block
  10.      (Itemp
  11.        (setq blocks
  12.          (vla-get-Blocks
  13.            (setq doc
  14.              (vla-get-ActiveDocument
  15.                (vlax-get-acad-object)
  16.              )
  17.            )
  18.          )
  19.        )
  20.        blockname
  21.      )
  22.    )
  23.    (progn
  24.      (vlax-for obj block (setq ObjLst (cons obj ObjLst)))
  25.      
  26.      (vla-CopyObjects doc
  27.        (vlax-make-variant
  28.          (vlax-safearray-fill
  29.            (vlax-make-safearray vlax-vbObject
  30.              (cons 0 (1- (length ObjLst)))
  31.            )
  32.            ObjLst
  33.          )
  34.        )
  35.        (setq dupe
  36.          (vla-Add blocks
  37.            (vla-get-origin block)
  38.            (
  39.              (lambda ( # / s )
  40.                (while
  41.                  (Itemp blocks
  42.                    (setq s
  43.                      (strcat blockname
  44.                        (itoa (setq # (1+ #)))
  45.                      )
  46.                    )
  47.                  )
  48.                )
  49.                s
  50.              )
  51.              0
  52.            )
  53.          )
  54.        )
  55.      )
  56.    )
  57. )
  58. dupe
  59. )
  60. (defun Itemp ( coll item )
  61. (if
  62.    (not
  63.      (vl-catch-all-error-p
  64.        (setq item
  65.          (vl-catch-all-apply
  66.            (function vla-item) (list coll item)
  67.          )
  68.        )
  69.      )
  70.    )
  71.    item
  72. )
  73. )
回复

使用道具 举报

1

主题

4

帖子

3

银币

初来乍到

Rank: 1

铜币
5
发表于 2022-7-6 11:49:22 | 显示全部楼层
几分钟后我会试一试。感谢您的快速回复。
回复

使用道具 举报

1

主题

4

帖子

3

银币

初来乍到

Rank: 1

铜币
5
发表于 2022-7-6 11:58:02 | 显示全部楼层
当然,你在vlisp方面很有天赋,它工作得很好,但不幸的是,老板不喜欢为了命名的目的,在每个图形中都有同一块的多个实例。担心这可能会影响一些外部参考或数据提取,我们将在未来的道路上工作。
 
同时,我又回来分解块并更新单个引用。
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 12:08:07 | 显示全部楼层
谢谢,伙计,我很高兴你能让它工作
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

QQ|关于我们|小黑屋|乐筑天下 繁体中文

GMT+8, 2025-7-4 16:35 , Processed in 1.148052 second(s), 70 queries .

© 2020-2025 乐筑天下

联系客服 关注微信 帮助中心 下载APP 返回顶部 返回列表