《钢板重量计算器》
我的几十位同事,桌子上都摆上计算器,主要用来计算明细表中钢板重量的,我这个比他们的快想用正则表达式没有成功
想将下面的SplitInstead SplitHiflybir合而为一,也没成功
;;======================================自贡黄明儒 2013年8月*《钢板重量计算器》
(defun hh-mm (a / B)
;;1 字符串中非数字用空格替代
(defun SplitInstead (a / B C D)
(setq d "")
(while (/= a "")
(setq c (substr a 1 1))
(setq b (ascii c))
(setq a (substr a 2 (strlen a)))
(if (or (and (> b 47) (< b 58)) (= b 46))
(setq d (strcat d c))
(setq d (strcat d " "))
)
)
d
)
;;2 分割字符串 by highflybir
(defun SplitHiflybir (String Delimiter / LST STR)
(setq str (VL-STRING-TRANSLATE Delimiter " " String)) ;首先替换
(setq str (strcat "(" str ")")) ;然后加括号
(mapcar 'atof (mapcar 'VL-PRINC-TO-STRING (read str))) ;转化
)
;;3 钢管重量计算(外径*臂厚-长度)
(defun hh-js2 (b / A C)
(setq a (/ (car b) 2.0)) ;外半径
(setq c (- a (cadr b))) ;内半径
(/ (* pi (- (* a a) (* c c)) (caddr b) 7.85)
1000000
)
)
;;4 圆钢重量计算(外径-长度)
(defun hh-js3 (b / A)
(setq a (/ (car b) 2.0)) ;半径
(/ (* pi (* a a) (caddr b) 7.85)
1000000
)
)
;;5 筋板(厚)
(defun hh-js4 (b / AREA1)
(vl-cmdf "area"
"o"
(car (entsel "\n>>>>(面域)or(pline组成的封闭线)"))
)
(setq area1 (getvar "area"))
(/ (* area1 (car b) 7.85) 1000000)
)
;;6 钢板(长*宽*高)
(defun hh-js5 (b)
(/ (* (car b) (cadr b) (caddr b) 7.85)
1000000
)
)
;;7 计算
(setq b (SplitHiflybir (SplitInstead a) ""))
(cond ((and (wcmatch a "*钢管*") (= (length b) 3)) (hh-js2 b))
((and (wcmatch a "*圆钢*") (= (length b) 2)) (hh-js3 b))
((and (wcmatch a "*筋板*,*钢板*") (= (length b) 1))
(hh-js4 b)
)
((and (wcmatch a "*筋板*,*钢板*") (= (length b) 3))
(hh-js5 b)
)
)
)
(defun C:mm (/ CMD1 DCLID EN ENTL FN FNAME LIN RETURN# ZL)
(defun *error* (S)
(setvar "cmdecho" cmd1)
(princ S)
(princ)
)
(setvar "modemacro" "自贡运机集团")
(setq cmd1 (getvar "cmdecho"))
(setvar "cmdecho" 0)
(while (not (and (setq en (car (entsel "\n 点取文本,计算重量")))
(setq entl (entget en))
(wcmatch (cdr (assoc 0 entl)) "*TEXT")
(setq zl (cdr (assoc 1 entl)))
(wcmatch zl "*钢板*,*钢管*,*筋板*,*圆钢*")
)
)
)
(setq zl (rtos (hh-mm zl) 2 3))
(setq fname (vl-filename-mktemp nil nil ".dcl"))
(setq fn (open fname "w"))
(write-line "cjjskdcl : dialog{" fn)
(write-line "label=\"自贡运机集团 黄明儒\";" fn)
(write-line
":edit_box{label=\"重量(Kg)\";key=\"cjjsedi\";value=\"1000\";mnemonic=\"K\";allow_accept=true;}"
fn
)
(write-line "ok_only;" fn)
(write-line "}" fn)
(close fn)
(setq fn (open fname "r"))
(setq dclid (load_dialog fname))
(while
(or (eq (substr (setq lin (vl-string-right-trim
"\" fn)"
(vl-string-left-trim "(write-line \"" (read-line fn))
)
)
1
2
)
"//"
)
(eq (substr lin 1 (vl-string-search " " lin)) "")
(not (eq (substr lin (+ (vl-string-search " " lin) 1) 9)
" : dialog"
)
)
)
)
;;以下根据情况处理
(new_dialog (substr lin 1 (vl-string-search " " lin)) dclid)
(set_tile "cjjsedi" zl)
(mode_tile "cjjsedi" 2)
(action_tile "accept" "(done_dialog 1)")
(setq return# (start_dialog))
(unload_dialog dclid)
(close fn)
(vl-file-delete fname)
(setvar "cmdecho" cmd1)
(princ)
)
;;======================================自贡黄明儒 2013年8月*《钢板重量计算器》
**** Hidden Message ***** 进来学习一下 东西不错,挺实用的 好东西啊, 不错, 这个东西试试看学习一下 材料表计算太麻烦了 应增加方钢管为好………… 本帖最后由 kwok 于 2013-8-4 23:18 编辑
弄个算体积,如可乐瓶体积. 确实不错,辛苦了