乐筑天下

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

[编程交流] 创建属性自动编号

[复制链接]

1

主题

3

帖子

2

银币

初来乍到

Rank: 1

铜币
5
发表于 2022-7-5 18:31:24 | 显示全部楼层
我已经离开ACAD好几年了。我记得有一个类似的lisp或VBA,它允许我选择块,然后按指定的增量重新编号。我喜欢这个代码,但是,我有几个问题
 
1) 有没有办法删除“标记”特定的代码行,以便我可以在不同的块上使用
2) 有没有办法选择顺序或选择所有相同的块,并按插入顺序更新属性
 
 
我下载了这个lisp,它可以正常工作,但改变了我块中的字体类型;http://www.cadstudio.cz/en/download.asp?file=InsertC
 
最后,我记得一种方法,当我插入块时,块会自动增加数字。
 
很抱歉问了这么多奇怪的问题,已经两年多了。
 
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-5 18:33:46 | 显示全部楼层
谢谢LeeMac
我进行了粗略修改,以允许:
[列表]
  • 增量选择
  • 前缀和后缀
    [/列表]
    1. (defun c:AttNum ( / *error* _StartUndo _EndUndo doc ss lst ) (vl-load-com)
    2. ;; © Lee Mac 2010
    3. (defun *error* ( msg )
    4.    (if doc (_EndUndo doc))
    5.    (or (wcmatch (strcase msg) "*BREAK,*CANCEL*,*EXIT*")
    6.        (princ (strcat "\n** Error: " msg " **")))
    7.    (princ)
    8. )
    9. (defun _StartUndo ( doc ) (_EndUndo doc)
    10.    (vla-StartUndoMark doc)
    11. )
    12. (defun _EndUndo ( doc )
    13.    (if (= 8 (logand 8 (getvar 'UNDOCTL)))
    14.      (vla-EndUndoMark doc)
    15.    )
    16. )
    17. (setq doc  (vla-get-ActiveDocument (vlax-get-acad-object)))  
    18. (setq *tag (cond ( *tag ) ( "TAG1" ))
    19.       
    20. )
    21. (setq *tag
    22.    (strcase
    23.      (cond
    24.        (
    25.          (eq ""
    26.            (setq tmp
    27.              (getstring
    28.                (strcat "\nSpecify Attribute Tag to be Numbered <"
    29.                  (setq *tag
    30.                    (cond ( *tag ) ( "TAG1" ))
    31.                  )
    32.                  "> : "
    33.                )
    34.              )
    35.            )
    36.          )
    37.          *tag
    38.        )
    39.        ( tmp )
    40.      )
    41.    )
    42. )
    43. (setq *num
    44.    (1-
    45.      (cond
    46.        (
    47.          (getint
    48.            (strcat "\nSpecify Starting Number <"
    49.              (itoa
    50.                (setq *num
    51.                  (1+
    52.                    (cond ( *num ) ( 0 ))
    53.                  )
    54.                )
    55.              )
    56.              "> : "
    57.            )
    58.          )
    59.        )
    60.        ( *num )
    61.      )
    62.    )
    63. )
    64. (if (ssget "_:L" '((0 . "INSERT") (66 . 1)))
    65.    (progn      
    66.      (vlax-for o (setq ss (vla-get-ActiveSelectionSet doc))
    67.        (setq lst
    68.          (cons
    69.            (cons (vlax-get o 'InsertionPoint) o) lst
    70.          )
    71.        )
    72.      )
    73.      (vla-delete ss)
    74.      (_StartUndo doc)
    75.      (mapcar
    76.        (function
    77.          (lambda ( block )
    78.            (mapcar
    79.              (function
    80.                (lambda ( attrib )
    81.                  (if (eq *tag (strcase (vla-get-TagString attrib)))
    82.                    (vla-put-TextString attrib (setq *num (1+ *num)))
    83.                  )
    84.                )
    85.              )
    86.              (vlax-invoke (cdr block) 'GetAttributes)
    87.            )
    88.          )
    89.        )
    90.        (vl-sort lst
    91.          (function
    92.            (lambda ( a b ) (> (cadar a) (cadar b)))
    93.          )
    94.        )
    95.      )
    96.      (_EndUndo doc)
    97.    )
    98. )
    99. (princ)
    100. )
  • 回复

    使用道具 举报

    6

    主题

    21

    帖子

    15

    银币

    初来乍到

    Rank: 1

    铜币
    30
    发表于 2022-7-5 18:40:07 | 显示全部楼层
    回复

    使用道具 举报

    18

    主题

    78

    帖子

    61

    银币

    初露锋芒

    Rank: 3Rank: 3Rank: 3

    铜币
    90
    发表于 2022-7-5 18:42:25 | 显示全部楼层
    Thank LeeMac
    I crudely modified to allow for:


    • increment selection
    • prefix & suffix

    1. (defun c:AttNum        (/             *error*         MakeVariant Itemp         MakeSelectionSet         DOC             OBJ         OBJECTLIST  SS                 TAG             UFLAG        ) (vl-load-com) ;; Lee Mac  ~  15.04.10 (setq tag "SM_TAG") (defun *error* (msg)   (if        uFlag     (vla-EndUndoMark(vla-get-ActiveDocument  (vlax-get-acad-object))     )   )   (or        (wcmatch (strcase msg) "*BREAK,*CANCEL*,*EXIT*")(princ (strcat "\n** Error: " msg " **"))   )   (princ) ) (defun MakeVariant (data datatype)   (vlax-make-variant     (vlax-safearray-fill(vlax-make-safearray  (eval datatype)  (cons 1 (length data)))data     )   ) ) (defun Itemp (collection item / result)   (if        (not (vl-catch-all-error-p       (setq result              (vl-catch-all-apply                (function vla-item)                (list collection item)              )       )     ))     result   ) ) (defun MakeSelectionSet (ref / SelSets SelSet)   (if        (setq SelSet       (itemp         (setq SelSets                (vla-get-SelectionSets                  (vla-get-ActiveDocument                    (vlax-get-acad-object)                  )                )         )         ref       ))     (vla-delete SelSet)   )   (vla-add SelSets ref) ) (setq        *start (cond   (*start)   (1) ) );;;  (setq *start;;;    (1-;;;      (cond;;;        (  (getint;;;             (strcat "\nSpecify Starting Number  : ";;;             );;;           );;;        );;;        (*start);;;      );;;    );;;  ) (setq        startnum (cond   (startnum)   (1) ) )  (setq        startnum (cond   ((getint      (strcat "\nSpecify Starting Number  : "      )    )   )   (startnum) ) )  (setq        INC (getint   (strcat "\nSpecify Increment "   ) ) )  (setq *start (- startnum INC))        ; lm var set  (setq        prefix (getstring   (strcat "\nSpecify Prefix"   ) ) ) (setq        sufix (getstring   (strcat "\nSpecify Sufix"   ) ) )                                ;                                                        rc (if (zerop(vla-get-Count  (setq        ss         (vla-get-PickFirstSelectionSet           (setq doc                  (vla-get-ActiveDocument                    (vlax-get-acad-object)                  )           )         )  ))     )   (progn     (setq ss (MakeSelectionSet "Tree_SS"))     (vla-SelectOnScreenss(MakeVariant '(0 66) vlax-vbInteger)(MakeVariant '("INSERT" 1) vlax-vbVariant)     )   ) ) (if (not(zerop  (vla-get-Count ss))     )   (progn     (setq UFlag     (not       (vla-StartUndoMark doc)     )     )     (vlax-for        obj ss(setq ObjectList       (cons         (cons obj               (vlax-safearray->list                 (vlax-variant-value                   (vlax-get-property obj 'InsertionPoint)                 )               )         )         ObjectList       ))     )     (vla-delete ss)     (mapcar(function  (lambda (block)    (mapcar      (function        (lambda        (attribute)          (if (eq tag (vla-get-TagString attribute))            (vl-catch-all-apply              (function vla-put-TextString)              (list attribute                    (strcat prefix                            (itoa (setq *start (+ INC *start)))                            sufix                    )              )                        ;rc            )          )        )      )      (vlax-invoke block 'GetAttributes)    )  ))(mapcar        (function car)        (vl-sort ObjectList                 (function                   (lambda (point1 point2)                     (< (caddr point1) (caddr point2))                   )                 )        ))     )     (setq UFlag     (vla-EndUndoMark doc)     )   ) ) (princ))
    回复

    使用道具 举报

    发表回复

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

    本版积分规则

    • 微信公众平台

    • 扫描访问手机版

    • 点击图片下载手机App

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

    GMT+8, 2025-3-13 04:57 , Processed in 0.511302 second(s), 58 queries .

    © 2020-2025 乐筑天下

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