AutoCAD:自动编辑对象属性表

时间:2018-03-01 07:27:40

标签: automation attributes label autocad

我在AutoCAD绘图中有几个(很多)对象,每个对象在其首选项中都有相同的属性字段。现在我想用一个数字填充这个属性字段(对象1 - 数字1,对象2 - 数字2,依此类推)。手动输入数字是非常耗时的,因此我想问你是否有针对这个问题的自动化方法。

提前多多感谢!

3 个答案:

答案 0 :(得分:4)

示例

以下程序是一个非常简单的示例,它将提示您编号的属性标记和一个从中开始编号的整数,然后将连续提示您选择要编号的属性块引用,增加数字每个有效选择一个:

(defun c:attnum ( / ent enx num tag )
    (if (/= "" (setq tag (strcase (getstring "\nSpecify attribute tag <exit>: "))))
        (progn
            (setq num (cond ((getint "\nSpecify starting number <1>: ")) (1)))
            (while
                (not
                    (progn
                        (setvar 'errno 0)
                        (setq ent (car (entsel (strcat "\nSelect block number " (itoa num) " <exit>: "))))
                        (cond
                            (   (= 7 (getvar 'errno))
                                (prompt "\nMissed, try again.")
                            )
                            (   (null ent))
                            (   (/= "INSERT" (cdr (assoc 0 (setq enx (entget ent)))))
                                (prompt "\nThe selected object is not a block.")
                            )
                            (   (/= 1 (cdr (assoc 66 enx)))
                                (prompt "\nThe selected block is not attributed.")
                            )
                            (   (progn
                                    (setq ent (entnext ent)
                                          enx (entget  ent)
                                    )
                                    (while
                                        (and
                                            (= "ATTRIB" (cdr (assoc 0 enx)))
                                            (/= tag (strcase (cdr (assoc 2 enx))))
                                        )
                                        (setq ent (entnext ent)
                                              enx (entget  ent)
                                        )
                                    )
                                    (/= "ATTRIB" (cdr (assoc 0 enx)))
                                )
                                (prompt (strcat "\nThe selected block does not contain the attribute \"" tag "\"."))
                            )
                            (   (entmod (subst (cons 1 (itoa num)) (assoc 1 enx) enx))
                                (entupd ent)
                                (setq num (1+ num))
                                nil
                            )
                            (   (prompt "\nUnable to edit attribute value."))
                        )
                    )
                )
            )
        )
    )
    (princ)
)

如何装载&amp;运行上面的

  • 打开Windows记事本。
  • 复制&amp;将上述代码粘贴到记事本中。
  • 使用您选择的文件名保存文件,文件扩展名为.lsp确保Save As Type设置为All Files (*.*) )。
  • 将AutoCAD打开到新图形或现有图形。
  • 在AutoCAD命令行中键入APPLOAD
  • 浏览&amp;选择上面保存的文件,然后单击Load加载程序。
  • 关闭APPLOAD对话框。
  • 在AutoCAD命令行中键入ATTNUM以运行程序。

我可以在How to Run an AutoLISP Program的教程中找到类似的说明。

如果您希望为在AutoCAD中打开的每个新图纸或现有图纸自动加载程序,请参阅我在Loading Programs Automatically上的教程。

其他现有解决方案

除上述内容外,您可能还对以下程序感兴趣:

  • 我的Incremental Numbering Suite应用程序将提供更广泛的选项集,允许您自定义编号格式,允许使用前缀和附件。后缀,多个递增部分和字母数字递增。

    您可以使用此应用程序对现有的属性块引用进行编号,方法是键入&#39; R&#39;或者&#39; r&#39;在对象放置期间在AutoCAD命令行输入替换模式

  • 我的Incremental Array应用程序允许您在排列属性块引用(或其他对象)时自动递增属性值。

答案 1 :(得分:1)

此 lsp 可帮助您为任何块属性添加前缀或后缀,但同时对所有块,我遇到了与您类似的情况,因此我将上面的 attnum.lsp 与此 Presuf.lsp 结合起来。

首先使用 attnum 将标签字段设置为递增数字 1、2、3、4 等。然后隔离对象并运行presuf,指明是要添加的后缀还是前缀,指明所需的值,然后选择所有对象。

(defun c:presuf ( / as el en i ss str typ )

 (initget "Prefix Suffix")
 (setq typ (cond ((getkword "\nAdd Prefix or Suffix? [Prefix/Suffix] <Prefix>: ")) ("Prefix")))
 (setq str (getstring t (strcat typ " to Add: ")))

 (if (setq ss (ssget '((0 . "INSERT") (66 . 1))))
     (repeat (setq i (sslength ss))
         (setq en (ssname ss (setq i (1- i))))
         (while (eq "ATTRIB" (cdr (assoc 0 (setq el (entget (setq en (entnext en)))))))
             (setq as (cdr (assoc 1 el)))
             (if (eq "Prefix" typ)
                 (if (not (wcmatch as (strcat str "*")))
                     (entmod (subst (cons 1 (strcat str as)) (assoc 1 el) el))
                 )
                 (if (not (wcmatch as (strcat "*" str)))
                     (entmod (subst (cons 1 (strcat as str)) (assoc 1 el) el))
                 )
             )
         )
     )
 )
 (princ)
)

答案 2 :(得分:0)

如果我有属性标记或阻止名称,我可以尝试使用自定义解决方案回答您的问题,但是,我相信您可以找到所需的全部hereBFindGlobal Attribute Extractor & Editor)。