mbaumhardt645 发表于 2022-7-6 06:16:39

从特定a中提取值

我刚开始使用AutoLISP,一直在努力自学它的工作原理。通过查看示例,我能够确定发生了什么。然而,我很难更新公司使用的现有LISP例程。创造者最近离开了。我不知道要更改什么,具体在哪里更改,或者如何更改/添加任何内容。
 
这是我的情况。我们当前的LISP例程要求用户选择他们想要包括的标准块。选定的每个块中始终嵌入相同的4个属性标记(值更改)。其中三个属性(“族”、“描述”和“PN”)设置为常数,第四个属性(“SEC_NO”)可以由用户定义。LIPS例程获取这些值并创建一个表,其中标题为“SECTION NO”、“FAMILY”、“DESCRIPTION”和“PN”。这非常有效。
 
然而,我正在改变块的创建方式,以便更容易地创建和管理它们(将它们转换为动态块)。通过这样做,我在新块中创建了额外的属性。这些额外的属性破坏了我们当前的LISP例程。我想修改这个例程,以便它创建一个从上面列出的相同4个属性(“SEC_NO”、“FAMILY”、“DESCRIPTION”和“PN”)中提取的属性值列表,并忽略其余属性。属性的标记名将始终保持不变。
 
下面是创建表所用列表的例程部分。任何帮助都将不胜感激。如果有更简单的方法,我洗耳恭听。
 
-标记
 


(defun get-all-atts (obj / atts
att_list const_atts const_list ent)
(and

(if (and obj
   (vlax-property-available-p
obj 'Hasattributes)
   (eq :vlax-true
(vla-get-hasattributes obj))
)



(progn
(if
(not

(vl-catch-all-error-p

(vl-catch-all-apply
(function
   (lambda
()
   (setq atts (vlax-invoke obj
'Getattributes))

)
)

)
    )

)

(setq
   (progn
   (foreach
att atts
       (setq
att_list
       (cons (cons
(vla-get-tagstring att)
   (vla-get-textstring
att)

)

att_list

)

)
   )

)
)
(if
(not

(vl-catch-all-error-p

(vl-catch-all-apply
(function
   (lambda
()
   (setq
const_atts

(vlax-invoke

obj

'Getconstantattributes

)
   )

)
)

)
    )
)

(progn
   (foreach att
const_atts
       (setq
const_list
       (cons (cons
(vla-get-tagstring att)
   (vla-get-textstring
att)

)

const_list

)

)
   )
   (setq
att_list (append const_list att_list))

)
)
   )

)
)
(reverse att_list)
)




Lee Mac 发表于 2022-7-6 06:36:24

你好,马克,
 
替换以下代码:
(defun get-all-atts ( obj / lst tag )
   (if (and obj (vlax-property-available-p obj 'hasattributes) (= :vlax-true (vla-get-hasattributes obj)))
       (foreach att (append (vlax-invoke obj 'getattributes) (vlax-invoke obj 'getconstantattributes))
         (if (member (strcase (setq tag (vla-get-tagstring att))) '("FAMILY" "DESCRIPTION" "PN" "SEC_NO"))
               (setq lst (cons (cons tag (vla-get-textstring att)) lst))
         )
       )
   )
   (reverse lst)
)
 
您可能还会发现我的属性函数库很有用。
 
欢迎来到CADTutor

prodromosm 发表于 2022-7-6 07:00:39

为什么不使用EATTEXT

mbaumhardt645 发表于 2022-7-6 07:10:21

prodromosm,
我曾经考虑过EATTEXT,但不想使用属性提取,以使我们的过程尽可能简单,便于设计师使用。我正在努力减少点击次数,使其成为傻瓜。谢谢你的回复。
 
 
李·麦克,
你的代码运行得很好。我有一种感觉,它本可以写得更干净、更简单。此外,我上周也去过你的“属性函数”页面寻求帮助。然而,由于我是LISP新手,我很难决定使用什么以及需要添加/更改什么才能使其适用于我的应用程序。我更熟悉Excel中的VBA。
 
谢谢你的帮助。我真的很感激!

Lee Mac 发表于 2022-7-6 07:19:40

非常欢迎-如果您不确定如何从程序中调用我的属性函数,请询问。
页: [1]
查看完整版本: 从特定a中提取值