Da Ballz 发表于 2022-7-5 18:41:11

创建属性值fr

我试图使用指定的前缀(用户定义的变量)和文件名构建一个字符串。然后我想将字符串设置为变量,并将其作为新值传递给属性。以下是目前为止的一些代码:
 
(if(setq ss(ssget“X”'((0。“insert”)(2。“Drawing\u Sheet_*,”)))
(程序
(while(>(sslength ss)0)
(setq ent(ssname ss 0))
(ssdel ent ss)
 
(setq pre“100-”)
(setq图纸(substr(getvar“dwgname”)1(-strlen(getvar“dwgname”))4)
(setq绘图名称(strcat预绘图))
 
(ATT:REPLACE-ent’(;ATT:REPLACE-works,在上面更大的函数中定义
 
(“图纸编号”。“图纸名称”)
 
)
 
问题是我还不够成熟,无法理解如何在这里传递变量。当我试图将drawingname传递给属性“Drawing\u Number”的属性值时,我没有得到预期的连接字符串。它应该是100——“文件名”,但我显然在传递变量时出错了。显然,唯一会发生的事情是,值会从字面上变成drawingname,而不是变量drawingname的值。
 
如果我删除“drawingname”中的引号,我会得到错误:错误的DXF组(1。drawingname)。这很简单,我能感觉到。

BIGAL 发表于 2022-7-5 19:07:06

一个小小的建议,而不是担心从选择集中删除只需滚动所有项目。
 

(if (setq ss (ssget "X" '((0 . "insert")(2 . "Drawing_Sheet_*,"))))
(progn
(setq x -1)
(while (setq ent (ssname ss (setq x (+ x 1))))

;my replacement code example
(setq oldtag1 "Drawing_number") ;attribute tag name
(foreach att (vlax-invoke (vlax-ename->vla-object (ssname SS x )) 'getattributes)
       (if (= oldtag1 (strcase (vla-get-tagstring att)))
       (vla-put-textstring att drawingname)
       ) ; end if
)

 
 

Da Ballz 发表于 2022-7-5 19:22:56

比加尔
 
完美极了,很有魅力。我更喜欢你的视觉lisp而不是我的ATT:REPLACE。

Tharwat 发表于 2022-7-5 19:43:00

 
由于您已经有了获取实体名称的变量ent,因此无需再次重新检索实体名称
页: [1]
查看完整版本: 创建属性值fr