作业帮 > 综合 > 作业

求cad lisp.cad有很多数字,想同时做乘法,并且在原位置替换,第三点要求是能控制小数点后的位数.

来源:学生作业帮 编辑:搜搜考试网作业帮 分类:综合作业 时间:2024/06/03 20:53:25
求cad lisp.cad有很多数字,想同时做乘法,并且在原位置替换,第三点要求是能控制小数点后的位数.
谁能帮忙写个程序,cad有很多数字,想同时做乘法,并且在原位置替换,第三点要求是能控制小数点后的位数.
求cad lisp.cad有很多数字,想同时做乘法,并且在原位置替换,第三点要求是能控制小数点后的位数.
(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】