Cheezee 发表于 2022-7-5 20:11:31

属性更改wro

大家好,所有LSP专家请帮助我
起初,这个LSP代码是有效的,我用了很长时间使用auto cad 2012。但现在LSP代码不起作用了
 
代码标签:
请参阅附件,
 
 
出了什么问题?
我用这个LSP做scr。对于多个图形,它非常有用。
查特里布。LSP

pBe 发表于 2022-7-5 20:16:43

奶酪是怎么错的?

Tharwat 发表于 2022-7-5 20:18:19

该函数没有任何问题,但如果块名是动态块,则不会工作。

Cheezee 发表于 2022-7-5 20:23:21

@Tharwat如何知道块是否为动态块?

Cheezee 发表于 2022-7-5 20:24:50

这是我使用CHATTRIB LSP时得到的

Cheezee 发表于 2022-7-5 20:29:47

dwg和lsp见附件
查特里布。LSP
样品图纸

Tharwat 发表于 2022-7-5 20:31:11

 
ENT获取块的实体名称,然后搜索DXF 2的cdr值,如果它以*U开头,则表示动态块,否则不是。

Cheezee 发表于 2022-7-5 20:35:07

对不起,我真的不知道如何知道我的区块是否是动态的
我试图输入Entget,但autocad说未知
 
 
我已附上我的。图纸和。我上一条消息中的lsp。
请介意上传,并提出一些建议,如何使我的LSP再次工作。

Tharwat 发表于 2022-7-5 20:39:01

将以下代码行复制并粘贴到命令行中,然后按Enter键开始,因此选择一个块,如果它以*U开头,则它是动态的,否则它不是。
 
(cdr (assoc 2 (entget (car (entsel "\n Select a Block :")))))

Tharwat 发表于 2022-7-5 20:40:37

无论如何,试试这个修改,让我知道。
 
注意:将函数changeAttribValue添加到以下例程中。
 

(defun C:CHATTRIB(/ ss sn a attag bname oldval newval)
(and (/= "" (setq bname (getstring "\nBlock name: ")))
      (/= "" (setq attag (getstring T "\nTag: ")))
      (/= "" (setq oldval (getstring T "\nOld value: ")))
      (/= "" (setq newval (getstring T "\nNew value: ")))
      (setq ss (ssget "_X"
                      (list '(0 . "INSERT")
                            '(66 . 1)
                            (cons 2 (strcat "`*U*," bname)))))
      (repeat (setq a (sslength ss))
      (if (eq (vla-get-effectivename
                  (vlax-ename->vla-object
                  (setq sn (ssname ss (setq a (1- a))))))
                bname)
          (changeAttribValue
            sn
            attag
            oldval
            newval)
          ))
      )
(princ)
)(vl-load-com)
页: [1] 2
查看完整版本: 属性更改wro