求cad lisp。cad有很多数字,想同时做乘法,并且在原位置替换,第三点要求是能控制小数点后的位数。
谁能帮忙写个程序,cad有很多数字,想同时做乘法,并且在原位置替换,第三点要求是能控制小数点后的位数。...
谁能帮忙写个程序,cad有很多数字,想同时做乘法,并且在原位置替换,第三点要求是能控制小数点后的位数。
展开
推荐于2016-02-25 · 知道合伙人软件行家
关注
展开全部
(defun C:ZX48 ( / #k1 #l1 #l2 &k1 &kw1 n wznr1 wznr2)
(setvar "cmdecho" 0)
(setvar "blipmode" 0)
(setq #L1 (getdist (strcat "\n请输入要相乘的数值:<" "1" ">")))
(if (= #L1 nil) (setq #L1 1) );默认相乘数值为1
(setq #L2 (getint (strcat "\n请输入要控制小数点后的位数:<" "5" ">")));默认小数点后5位
(while (and (/= #L2 nil) (< #L2 0)) (setq #L2 (getint (strcat "\n请输入要控制小数点后的位数:<" "5" ">"))));数值输入不得小于0
(if (= #L2 nil) (setq #L2 5) )
(princ "\n请选择数字文字")
(setq &kw1 (ssget '((0 . "text,mtext") (1 . "~*[~-.0-9]*" ))));只选择数字文字
(if (/= &kw1 nil);如果有选择了
(progn
(setq n (sslength &kw1))
(setq &k1 (ssname &kw1 0));提取文字
(while &k1
(setq &kw1 (ssdel &k1 &kw1))
(setq #k1 (entget &k1));取得文字属性列表
(setq WZNR1 (assoc 1 #k1));取得文字
(setq WZNR2 (cons 1 (rtos (* (atof (cdr WZNR1)) #L1) 2 #L2)));得到要替换的内容
(setq #k1 (subst WZNR2 WZNR1 #k1));替换内容
(entmod #k1);刷新文字
(setq &k1 (ssname &kw1 0));下一个文字
)
)
)
(princ "\n共选择了") (princ n) (princ "个文字相乘");在命令行显示
(prin1)
);复制到记事本以【.lsp】为后缀命名,加载到AutoCAD就可以使用,使用命令为【ZX48】
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询