本帖最后由 tranque 于 2025-12-9 11:46 编辑
感谢菜总 ,分享的程序!!!!我把这个代码给AI让它给我改出来我需要的功能了
顺便让AI给菜总提供的代码加个注释
 - ;| 功能: 获取或设置动态块的属性
- 参数:
- ename - 图元名或VLA对象
- propname - 属性名称(字符串)
- - 空字符串""获取所有属性
- - 指定名称获取特定属性
- value - 要设置的属性值
- - nil: 仅获取不设置
- - 其他: 设置该值
- 返回值: 根据调用情况返回
- |;
- (defun DynamicProps (ename propname value / obj prpL cla cll prp)
- (vl-load-com) ; 加载VLISP扩展支持ActiveX
-
- ; 将输入参数转换为VLA对象(如果输入的是图元名)
- (setq obj
- (if (= (type ename) 'VLA-OBJECT) ; 判断是否为VLA对象
- ename ; 是: 直接使用
- (vlax-ename->vla-object ename) ; 否: 转换为VLA对象
- )
- )
-
- ; 获取动态块属性列表(如果对象支持)
- (if vla-getdynamicblockproperties
- (setq prpL (vlax-invoke obj 'getdynamicblockproperties))
- )
-
- ; 主处理逻辑: 根据propname参数决定返回内容
- (setq return
- (if (setq prp ; 查找匹配指定名称的属性
- (vl-remove-if-not ; 移除不匹配的元素
- (function ; 定义判断函数
- (lambda (x)
- (= (vlax-get-property x 'PropertyName) propname)
- )
- )
- prpL
- )
- )
- ; 情况1: 找到了指定名称的属性(propname非空且匹配)
- (mapcar ; 遍历匹配到的属性列表
- (function
- (lambda (v)
- ; 如果提供了要设置的值且属性支持Value属性
- (if (and
- (/= value nil) ; 有设置值
- (vlax-property-available-p v 'Value) ; 属性可写
- (/= (type value) 'LIST) ; 值不是列表类型
- )
- (progn
- (vlax-put-property v 'Value value) ; 设置属性值
- (vla-update obj) ; 更新对象显示
- )
- )
-
- ; 构造返回值
- (if (and
- (vlax-property-available-p v 'AllowedValues) ; 有允许值列表
- (vlax-get v 'AllowedValues) ; 允许值非空
- )
- ; 返回: (当前值 允许值列表)
- (list
- (vlax-get v 'Value) ; 当前属性值
- (vlax-get v 'AllowedValues) ; 允许的取值范围
- )
- ; 返回: 当前值
- (vlax-get v 'Value)
- )
- )
- )
- prp
- )
-
- ; 情况2: 没有指定属性名或未找到匹配(propname为空或未匹配)
- (mapcar
- (function
- (lambda (v)
- ; 返回: (属性名 属性值 VLA对象)
- (list
- (vla-get-propertyName v) ; 属性名称
- (vlax-get v 'Value) ; 属性值
- v ; VLA对象引用
- )
- )
- )
- prpL
- )
- )
- )
-
- return ; 返回最终结果
- )
|