bradb 发表于 2022-7-6 08:43:31

属性编辑

大家好,
 
我确实搜索了论坛,发现了许多lisp的想法,并试图修改以满足我的需要,但没有什么结果像我想的那样。所以我会尽力解释我的需要。
 
我用一个有两个布局的模板开始绘图。一个有一个大标题栏,另一个有一个小标题栏。(参考“A”“B”的块名)。两者都是具有属性的块。所有标记都相同,只是块名称不同。当图纸签署时,我用签名名称更新标题栏,删除“供批准”,有时反之亦然。
 
我想热键,添加一个名称,以“检查”和删除“审批”从stauts。
 
然后,另一个命令将名称从“检查”中删除,并将“供批准”添加到状态。
 
例如属性
block name“A”tag“checked”value“name here”
块名称“B”标记“选中”值“此处的名称”
 
块名称“A”标签“状态”值“供批准”
块名称“B”标签“状态”值“供批准”
 
我已经写了一个lisp使用的代码,我在这个网站上找到了它的作品ok。
 
但也存在一些问题:
我可以在两个块上使用相同的命令吗?(每个标题栏不写一个。
2、当我需要取消审批图纸时,我需要删除名称,无论名称是什么。(意思是我写的代码,我必须为每个可能签署图纸的人写一个代码)。
 
感谢您的帮助,代码如下:
 

(defun c:commandname ()
(command "attedit" "_N" "_N" "blockname" "tag" "*" "old value" "new value")
(command "attedit" "_N" "_N" "blockname" "tag" "*" "old value" "new value")
(graphscr)
(princ)
);end defun

;Ex with tags
(defun c:name ()
(command "attedit" "_N" "_N" "titleb" "checked" "*" "" "approved by name")
(command "attedit" "_N" "_N" "titleb" "status" "*" "FOR APPROVAL" "")
(graphscr)
(princ)
);end defun

Lee Mac 发表于 2022-7-6 09:04:44

假设块不是动态的,请尝试以下操作:
 
(defun c:addname ( / ss name data i )
   (if (setq ss (ssget "_X" '((0 . "INSERT") (66 . 1) (2 . "A,B"))))
       (progn
         (setq name (getstring t "\nSpecify Name: "))
         (setq data
               (list
                   (cons "CHECKED" name)
                  '("STATUS" . "")
               )
         )                  
         (repeat (setq i (sslength ss))
               (LM:SetAttributeValues (ssname ss (setq i (1- i))) data)
         )
       )
   )
   (princ)
)

(defun c:forapproval ( / ss data i )
   (if (setq ss (ssget "_X" '((0 . "INSERT") (66 . 1) (2 . "A,B"))))
       (progn
         (setq data
            '(
                   ("CHECKED" . "")
                   ("STATUS" . "FOR APPROVAL")
               )
         )                  
         (repeat (setq i (sslength ss))
               (LM:SetAttributeValues (ssname ss (setq i (1- i))) data)
         )
       )
   )
   (princ)
)

;; Set Attribute Values-Lee Mac
;; Sets the block attributes whose tags are found in the supplied
;; association list to their associated values.

(defun LM:SetAttributeValues ( block lst / elist item )
   (if
       (eq "ATTRIB"
         (cdr
               (assoc 0
                   (setq elist
                     (entget (setq block (entnext block)))
                   )
               )
         )
       )
       (if (setq item (assoc (strcase (cdr (assoc 2 elist))) lst))
         (progn
               (if (setq elist (entmod (subst (cons 1 (cdr item)) (assoc 1 elist) elist)))
                   (entupd (cdr (assoc -1 elist)))
               )
               (LM:SetAttributeValues block lst)
         )
         (LM:SetAttributeValues block lst)
       )
   )
)
 
您可能还对这些函数感兴趣。

bradb 发表于 2022-7-6 09:17:33

你就是李。谢谢

Lee Mac 发表于 2022-7-6 09:28:21

不客气,布拉德。
 
我试图设置这些函数,以便可以轻松修改它们,而不需要知道“LM:setAttributeValue”函数的具体工作原理,但只需要知道它需要一个格式正确的标签和值列表。
 
如果您对如何修改代码有任何疑问,请提问。
 

bradb 发表于 2022-7-6 09:37:08

我只是做了一些简单的修改
 
更改块名称
将getstring更改为调用变量,发出短命令,在其中键入签名的首字母,然后它调用addname。
 
非常好,再次感谢。

Lee Mac 发表于 2022-7-6 09:50:53

好东西
页: [1]
查看完整版本: 属性编辑