3 AutoLisp编程实例3.1 程序源码 以下的程序经过认真注释,可读性较强。 ;;加载vlisp拓展 (vl-load-com) ;;;;-----通用函数----- ;; 获取动态块的属性 - LeeMac ;; 返回动态块的一个属性值 (如果存在) ;; blk - [vla] VLA 类型动态块数据 ;; prp - [str] str 类型的动态块属性名称(不分大小写) (defun LM:getdynpropvalue (blk prp) (setq prp (strcase prp)) (vl-some '(lambda (x) (if (= prp (strcase (vla-get-propertynamex))) (vlax-getx 'value) ) ) (vlax-invoke blk 'getdynamicblockproperties) ) ) ;; 设置动态块的属性值 - LeeMac ;; 修改一个动态块的属性值(如果存在) ;; 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) ) ) ;;;;-----主程序1----- ;;设置用于数据运算的动态块,保存在变量dx_paradyn中 (defun c:was() ;;取得用于数据运算的动态块(含约束参数) (setq dx_paradyn (vlax-ename->vla-object (car (entsel)))) (princ) ) ;;;;-----主程序2----- ;;数据运算并修改动态块 (defun c:wa() ;;取得用于需要修改的动态块,保存在变量dx_actdyn中 (setq dx_actdyn (vlax-ename->vla-object (car (entsel)))) ;;取得动态块的特定属性值 ;;此处,E1和E2为左右半跨梁长 (setq dyn_act_e1 (LM:getdynpropvalue dx_actdyn "E1")) (setq dyn_act_e2 (LM:getdynpropvalue dx_actdyn "E2")) ;;经测试,dyn_act_e1、dyn_act_e2的数据类型为real,直接将他们相加作为梁长 (setq d_real_e1_e2 (+ dyn_act_e1 dyn_act_e2)) ;;转换梁长数据d_real_e1_e2为string类型 (setq d_str_e1_e2 (rtos d_real_e1_e2)) ;;将梁长输入到用于数据运算的动态块dx_paradyn的参数d1中 (LM:setdynpropvalue dx_paradyn "d1" d_str_e1_e2) ;;调用CAD内置命令REGEN,更新动态块数据(重要) (command "REGEN") ;;取得动态块的特定属性值 ;;此处,d2为含约束参数的动态块,三分取整后的长度 (setq dyn_para_d2 (LM:getdynpropvalue dx_paradyn "d2")) ;;转换三分取整后的长度数据dyn_para_d2为string类型 (setq d_str_d2 (rtos dyn_para_d2)) ;;修改动态块dx_actdyn,调整钢筋搭接位置参数A1、A2 (print d_str_d2) (LM:setdynpropvalue dx_actdyn "A1" d_str_d2) (LM:setdynpropvalue dx_actdyn "A2" d_str_d2) (princ) ) 3.2 程序功能
利用AutoLisp联合使用约束参数和动作参数,将三分点计算和取整的操作交给CAD,可以减轻绘图员的计算量,提高绘图效率。
|