lamensterms 发表于 2022-7-5 23:15:52

请帮助LM:SetAttribu

嘿伙计们,
 
我有一个例程,它由另外两个例程组成,这两个例程是由李·麦克和卡利提供的。
 
其思想是让例程从ProSteel元素(Carry的例程)中读取ProSteel属性,并将该属性分配给我的标题栏(Lee Mac的例程)中的属性值。
 
代码:
 
(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)
       )
   )
)






(defun c:FC2TB(/ ss num con ent3A ent3B acadapp shapeinfo CPOS NPOS acadApp)

;--------------------------Read Data From Element------------------------------
(prompt "\nSelect ELEMENTS:")(princ)
(setq ss (ssget "x" '((0 . "KS_SHAPE,KS_PLATE,KS_BOLT,KS_BENDSHAPE,KS_ARCSHAPE,KS_ARCPLATE,KSBENDPLATE,Ks_VolBody"))));8=Name Layer 0=ks_object
(setq num (sslength ss));n° object
(setq con 0)
(repeat num
(setq ent3A (ssname ss con)) ;       (entsel "\nSelect BOLT: "))
(setq ent3B ent3A)
(setq acadapp (vlax-get-acad-object))
(setq shapeinfo (vla-getinterfaceobject acadapp "PSCOMWRAPPER.Ks_ComShapeInfo"))   
(vlax-invoke-method shapeinfo 'setobject(vlax-ename->vla-object ent3A))
(vlax-invoke-method shapeinfo 'getinfo);ritrova le informazioni nel database
(setq shapeinfo (vla-getinterfaceobject acadApp "PSCOMWRAPPER.Ks_ComShape"))
(setq shapeinfo (vlax-ename->vla-object ent3B))   
(setq PSCOUNT (vlax-get-property shapeinfo 'TotalCount));Position Number
(vlax-release-object shapeinfo)   
(setq shapeinfo nil)
(setq acadApp nil)(princ)
(setq con (1+ con)))

;*****************************************************************************

(defun c:UPDATETITLEBLOCK ( / ss data i )
   (if (setq ss (ssget "_X" '((0 . "INSERT") (66 . 1))))
       (progn
         (setq data
            '(
                  ("COUNT" . PSCOUNT)
               )
         )                  
         (repeat (setq i (sslength ss))
               (LM:SetAttributeValues (ssname ss (setq i (1- i))) data)
         )
       )
   )
   (princ)
)

(c:UPDATETITLEBLOCK)

)


 
我正在努力解决的是将PSCOUNT符号输入李·麦克的例程(代码突出显示为粗体)。
 
我只是想知道是否有人能帮我理解我错在哪里。
 
非常感谢您的帮助。

BIGAL 发表于 2022-7-5 23:22:08

您实际上是指属性值吗?标签是两个不同事物的属性描述/名称。
 
只需选择与块标记名称匹配的块并更新属性值。
 
还有几个问题,你的标题栏模型空间或布局在哪里也会有所不同。简单地说,如果在一个布局进入一个面纱选择“螺栓”标题栏更新非常容易。

lamensterms 发表于 2022-7-5 23:33:05

嗨,比格尔,
 
谢谢你的回复。
 
是的,很抱歉,我指的是属性值。
 
标题栏位于模型空间中。

Bhull1985 发表于 2022-7-5 23:38:04

这可能是一个问题。
如果标准确定标题栏应该在模型空间中,那么它就应该在模型空间中,
但通常情况下,几何体进入模型空间,注释性对象(如标签、图章、标题栏、引线、文本标注等)与已剪切的视口一起进入图纸空间,以包括正在使用的模型的部分。
如果你可以改变这个设置,这可能是有益的长期错误,如果你的设置不是你自己做或你自己的电话,那么请原谅我的帖子只是想提供帮助。

lamensterms 发表于 2022-7-5 23:41:19

嗨,Bhull1985,
 
谢谢你的回复。
 
我非常感谢你的意见,但我们的协议实际上是由我们合作的办公室以及他们习惯的设置决定的。此外,我很确定(但不确定)我们使用的当前配置依赖于我们使用的ProSteel插件包。因此,不幸的是,我们可以改变的程序非常有限。
 
再次感谢。

Bhull1985 发表于 2022-7-5 23:50:40

啊,好的。
那么,你为什么不公布它给你的错误是什么。
consp错误?

lamensterms 发表于 2022-7-5 23:52:47

哈哈,如果能在原来的帖子中包含这一点,那将是一个好主意。当我开始工作时(大约11个小时后),我会把我遇到的错误发回来。
 
再次感谢各位,待续。

Bhull1985 发表于 2022-7-6 00:00:20

不客气

cwake 发表于 2022-7-6 00:04:23

目前,您的代码引用了列表,因此它没有计算PSCOUNT。注意括号前的撇号。
 
在这种情况下,你需要做的是
(setq data (list (cons "COUNT" PSCOUNT)))
 
需要注意的是,PSCOUNT必须是字符串,而不是整数或实数。如果值是整数,则使用itoa进行转换,如果是实数,则使用rtos进行转换。

lamensterms 发表于 2022-7-6 00:11:51

大家好,
 
再回来一次。
 
克林特,你的建议效果很好,非常感谢你提供的建议。我确实需要使用RTOS将PSCOUNT转换为字符串。
 
为了保存记录,我在应用Clint的解决方案之前收到的错误代码是“错误:坏DXF组:(1.PSCOUNT)”。
 
再次感谢大家的帮助和建议。
页: [1] 2
查看完整版本: 请帮助LM:SetAttribu