已经在论坛里查找到了相关代码,编写成了我需要的小工具,目前我需依据字符长短来调节属性块中文字下方线的长短。代码如下: - ;; 获取动态块的属性 - Lee Mac
- ;; 返回动态块的一个属性值 (如果存在)
- ;; blk - [vla] VLA 类型动态块数据
- ;; prp - [str] str 类型的动态块属性名称(不分大小写)
- (defun LM:getdynpropvalue (blk prp)
- (setq prp (strcase prp))
- (vl-some '(lambda (x)
- (if (= prp (strcase (vla-get-propertyname x)))
- (vlax-get x 'value)
- )
- )
- (vlax-invoke blk 'getdynamicblockproperties)
- )
- )
- ;; 设置动态块的属性值 - Lee Mac
- ;; 修改一个动态块的属性值(如果存在)
- ;; blk - [vla] VLA 类型的动态块数据
- ;; prp - [str] str 类型的动态块属性名称(不分大小写)
- ;; val - [any] 新的动态块属性(数据类型随系统,常见为string)
- ;; 返回: [any] 新的动态块属性(如果成功,否则nil)
- (defun LM:setdynpropvalue (blk prp val)
- (setq prp (strcase prp))
- (vl-some
- '(lambda (x)
- (if (= prp (strcase (vla-get-propertyname x)))
- (progn
- (vla-put-value
- x
- (vlax-make-variant
- val
- (vlax-variant-type (vla-get-value x))
- )
- )
- (cond (val)
- (t)
- )
- )
- )
- )
- (vlax-invoke blk 'getdynamicblockproperties)
- )
- )
- (defun c:test()
- (setq lenCH (car (apply 'mapcar (cons '- (reverse (textbox (entget(car(nentsel "\n请选择文字")))))))));获取块内文字长度,这段代码论坛中获取,谢谢
- (setq lenw (rtos lenCH));转换文字长度串值
- (prompt "\n请选择图名.");这里继续选择属性块
- (setq dx_actdyn (vlax-ename->vla-object (car (entsel))))
- (LM:setdynpropvalue dx_actdyn "距离1" lenw);
- ;设置选择的动态属性块 ”距离1“ 长度为文字长度
- (princ)
- )
目前需要解决的是属性图块需要选择两次,不知是否有办法选择一次就可实现二次的修改问题? |