乐筑天下

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

[编程交流] 将动态块拆分为s

[复制链接]

5

主题

1074

帖子

1088

银币

初来乍到

Rank: 1

铜币
9
发表于 2022-7-5 20:24:04 | 显示全部楼层
如果有疑问,请查看李。
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-5 20:26:34 | 显示全部楼层
非常感谢大家的推荐
 
编写代码确实很有趣——下面是一个快速草稿:
  1. ;; Split Dynamic Block by Visibility State  -  Lee Mac
  2. (defun c:dynsplit ( / *error* blk dis llp obj prp tmp urp )
  3.    (defun *error* ( msg )
  4.        (LM:endundo (LM:acdoc))
  5.        (if (not (wcmatch (strcase msg t) "*break,*cancel*,*exit*"))
  6.            (princ (strcat "\nError: " msg))
  7.        )
  8.        (princ)
  9.    )
  10.    (while
  11.        (progn (setvar 'errno 0) (setq obj (car (entsel "\nSelect dynamic block to split: ")))
  12.            (cond
  13.                (   (= 7 (getvar 'errno))
  14.                    (princ "\nMissed, try again.")
  15.                )
  16.                (   (null obj) nil)
  17.                (   (= 4 (logand 4 (cdr (assoc 70 (tblsearch "layer" (cdr (assoc 8 (entget obj))))))))
  18.                    (princ "\nSelected object is on a locked layer.")
  19.                )
  20.                (   (/= "AcDbBlockReference" (vla-get-objectname (setq obj (vlax-ename->vla-object obj))))
  21.                    (princ "\nSelected object is not a block.")
  22.                )
  23.                (   (= :vlax-false (vla-get-isdynamicblock obj))
  24.                    (princ "\nSelected block is not dynamic.")
  25.                )
  26.                (   (null (setq prp (LM:getvisibilityparametername obj)))
  27.                    (princ "\nSelected dynamic block does not have a visibility parameter.")
  28.                )
  29.            )
  30.        )
  31.    )
  32.    (if obj
  33.        (progn
  34.            (LM:startundo (LM:acdoc))
  35.            (setq blk (vla-get-effectivename obj)
  36.                  dis 0.0
  37.                  prp
  38.                (vl-some
  39.                   '(lambda ( x )
  40.                        (if (= (strcase prp) (strcase (vla-get-propertyname x))) x)
  41.                    )
  42.                    (vlax-invoke obj 'getdynamicblockproperties)
  43.                )
  44.            )
  45.            (foreach x (vlax-get prp 'allowedvalues)
  46.                (vla-put-value prp (vlax-make-variant x vlax-vbstring))
  47.                (vla-move
  48.                    (setq tmp (vla-copy obj))
  49.                    (vlax-3D-point 0 0)
  50.                    (vlax-3D-point dis 0)
  51.                )
  52.                (vla-converttostaticblock tmp (uniqueblockname (strcat blk "_" x)))
  53.                (vla-getboundingbox tmp 'llp 'urp)
  54.                (setq dis (+ dis (* 1.1 (apply '- (mapcar '(lambda ( x ) (car (vlax-safearray->list x))) (list urp llp))))))
  55.            )
  56.            (vla-delete obj)
  57.            (LM:endundo (LM:acdoc))
  58.        )
  59.    )
  60.    (princ)
  61. )
  62. (defun uniqueblockname ( key / cnt rtn )
  63.    (if (tblsearch "block" key)
  64.        (progn
  65.            (setq cnt 1)
  66.            (while
  67.                (tblsearch "block"
  68.                    (setq rtn (strcat key "(" (itoa (setq cnt (1+ cnt))) ")"))
  69.                )
  70.            )
  71.            rtn
  72.        )
  73.        key
  74.    )
  75. )
  76. ;; Get Visibility Parameter Name  -  Lee Mac
  77. ;; Returns the name of the Visibility Parameter of a Dynamic Block (if present)
  78. ;; blk - [vla] VLA Dynamic Block Reference object
  79. ;; Returns: [str] Name of Visibility Parameter, else nil
  80. (defun LM:getvisibilityparametername ( blk / vis )  
  81.    (if
  82.        (and
  83.            (vlax-property-available-p blk 'effectivename)
  84.            (setq blk
  85.                (vla-item
  86.                    (vla-get-blocks (vla-get-document blk))
  87.                    (vla-get-effectivename blk)
  88.                )
  89.            )
  90.            (= :vlax-true (vla-get-isdynamicblock blk))
  91.            (= :vlax-true (vla-get-hasextensiondictionary blk))
  92.            (setq vis
  93.                (vl-some
  94.                   '(lambda ( pair )
  95.                        (if
  96.                            (and
  97.                                (= 360 (car pair))
  98.                                (= "BLOCKVISIBILITYPARAMETER" (cdr (assoc 0 (entget (cdr pair)))))
  99.                            )
  100.                            (cdr pair)
  101.                        )
  102.                    )
  103.                    (dictsearch
  104.                        (vlax-vla-object->ename (vla-getextensiondictionary blk))
  105.                        "ACAD_ENHANCEDBLOCK"
  106.                    )
  107.                )
  108.            )
  109.        )
  110.        (cdr (assoc 301 (entget vis)))
  111.    )
  112. )
  113. ;; Start Undo  -  Lee Mac
  114. ;; Opens an Undo Group.
  115. (defun LM:startundo ( doc )
  116.    (LM:endundo doc)
  117.    (vla-startundomark doc)
  118. )
  119. ;; End Undo  -  Lee Mac
  120. ;; Closes an Undo Group.
  121. (defun LM:endundo ( doc )
  122.    (while (= 8 (logand 8 (getvar 'undoctl)))
  123.        (vla-endundomark doc)
  124.    )
  125. )
  126. ;; Active Document  -  Lee Mac
  127. ;; Returns the VLA Active Document Object
  128. (defun LM:acdoc nil
  129.    (eval (list 'defun 'LM:acdoc 'nil (vla-get-activedocument (vlax-get-acad-object))))
  130.    (LM:acdoc)
  131. )
  132. (vl-load-com) (princ)
回复

使用道具 举报

145

主题

590

帖子

446

银币

中流砥柱

Rank: 25

铜币
725
发表于 2022-7-5 20:31:39 | 显示全部楼层
像往常一样聪明的李。惊人的东西。这正是我之前所做的,甚至是对街区的命名。谢谢
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-5 20:36:09 | 显示全部楼层
谢谢你,伍德曼,这是一个有趣的一写-我很高兴你对结果感到满意
回复

使用道具 举报

pBe

32

主题

2722

帖子

2666

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
211
发表于 2022-7-5 20:38:20 | 显示全部楼层
 
是的。确实是这样。
回复

使用道具 举报

4

主题

13

帖子

9

银币

初来乍到

Rank: 1

铜币
20
发表于 2022-7-5 20:43:57 | 显示全部楼层
感谢您的帮助,lisp不会显示在AutoCAD表格中。还有其他想法吗?
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-12 00:53 , Processed in 0.450282 second(s), 62 queries .

© 2020-2025 乐筑天下

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