急需LISP源码:钢材重量计算!
本帖最后由 尘缘一生 于 2014-5-27 15:11 编辑如题:哪位高手有啊?
主要得到就是钢板计算问题。这对钢构设计太重要啦,我为此都花费大量时间,相信大家都需要。
解释:
1:程序要求,点取"规格"一栏数据字符 ,比如:-180x8,关键这个数值不是纯数字,如何完美拆分相乘?存为变量1
2:再点取"长度”一栏数据字符,存为变量2
3:变量2X变量2X78.5= 变量 3
4:变量3显示,或者点取“单重”一栏,自动修改准确值!OK
程序加上提示:实用性更好了。
;;; 门钢构件表重量自动计算明经 zzxxqq 2014.5.26
(defun c:ccj (/ ss1 ss2 x1 x2 x3 txt1 txt2 ss3)
(while (and
(princ "\n 选择门钢构件表第一栏: ")
(setq ss1 (ssget ":E:S" '((0 . "TEXT") (1 . "*#*"))))
(princ "\n 选择门钢构件表第二栏: ")
(setq ss2 (ssget ":E:S" '((0 . "TEXT") (1 . "*#*"))))
)
(setq txt1 (cdr (assoc 1 (entget (ssname ss1 0)))))
(if (wcmatch txt1 "*X*")
(setq x1 (atof (substr txt1 2))
x2 (atof (substr txt1 (+ 2 (vl-string-position (ascii "X") txt1))))
)
(setq x1 (atof txt1)
x2 1
)
)
(setq txt2 (cdr (assoc 1 (entget (ssname ss2 0)))))
(if (wcmatch txt2 "#*")
(setq x3 (atof txt2))
)
(setq re (* x1 x2 x3 0.00000785))
(princ "\n 选择门钢构件表单件重量栏: ")
(if (setq ss3 (ssget ":E:S" '((0 . "TEXT"))))
(progn
(setq ent (entget (ssname ss3 0)))
(entmod (subst
(cons 1 (rtos re 2 1))
(assoc 1 ent)
ent
)
)
)
)
)
(princ)
)
;;; 结束===========================================================*
这个还可以加上反应器 那效果就无敌了 钢板厚度 宽度长度数量有一个变化 自动算单重总重 bai2000 发表于 2018-9-16 15:03
楼上的,举个例子
本帖最后由 尘缘一生 于 2014-5-27 07:53 编辑
对于这个帖子http://bbs.mjtd.com/thread-107027-1-1.html的编程是不行的,
原因:这个帖子是真对机械设计的,建筑设计用的是这样的表! 本帖最后由 ZZXXQQ 于 2014-5-27 09:00 编辑
程序测试通过
;算重量 明经 ZZXXQQ 2014.5.26
(defun c:tt ()
(while (and (setq ss1 (ssget ":E:S" '((0 . "TEXT") (1 . "*#*"))))
(setq ss2 (ssget ":E:S" '((0 . "TEXT") (1 . "*#*")))))
(setq txt1 (cdr(assoc 1 (entget(ssname ss1 0)))))
(if (wcmatch txt1 "*X*")
(setq x1 (atof (substr txt1 2))
x2 (atof (substr txt1 (+ 2 (vl-string-position (ascii "X") txt1)))))
(setq x1 (atof txt1) x2 1)
)
(setq txt2 (cdr(assoc 1 (entget(ssname ss2 0)))))
(if (wcmatch txt2 "#*")
(setq x3 (atof txt2))
)
(setq re (* x1 x2 x3 78.5))
(if (setq ss3 (ssget ":E:S" '((0 . "TEXT")))) (progn
(setq ent (entget(ssname ss3 0)))
(entmod (subst (cons 1 (rtos re 2 1)) (assoc 1 ent) ent))
))
)
(princ)
)
本帖最后由 尘缘一生 于 2014-5-27 08:11 编辑
ZZXXQQ 发表于 2014-5-26 08:29 static/image/common/back.gif
程序未测试
非常感谢,
我测试不能运行啊,
一:加载CAD运行提示:
“函数被取消Error: 函数被取消; 错误: *error* 函数中出错AutoCAD 变量设置被拒绝: "blipmode" nil”
我是WIN7系统,64为,AUTOCAD 2010版本。
二:VLISP 编译出现错误提示为:
编译器发现致命错误 "TT.LSP"
Error: 编译器发现致命错误 "TT.LSP"
; 错误: *error* 函数中出错AutoCAD 变量设置被拒绝: "blipmode" nil
_$
尘缘一生 发表于 2014-5-27 07:58 static/image/common/back.gif
非常感谢,
我测试不能运行啊,
二楼程序调试好了 本帖最后由 尘缘一生 于 2014-5-27 13:10 编辑
ZZXXQQ 发表于 2014-5-27 09:01 static/image/common/back.gif
二楼程序调试好了
不会吧?我测试下,恩,好像对,需要变换单位下。 本帖最后由 尘缘一生 于 2014-5-27 16:17 编辑
再次表示感谢,调试成功!;;; 门钢构件表重量自动计算明经 zzxxqq 2014.5.26
(defun c:mggl (/ ss1 ss2 x1 x2 x3 txt1 txt2 ss3)
(while (and
(setq ss1 (ssget ":E:S" '((0 . "TEXT") (1 . "*#*"))))
(setq ss2 (ssget ":E:S" '((0 . "TEXT") (1 . "*#*"))))
)
(setq txt1 (cdr (assoc 1 (entget (ssname ss1 0)))))
(if (wcmatch txt1 "*X*")
(setq x1 (atof (substr txt1 2))
x2 (atof (substr txt1 (+ 2 (vl-string-position (ascii "X") txt1))))
)
(setq x1 (atof txt1)
x2 1
)
)
(setq txt2 (cdr (assoc 1 (entget (ssname ss2 0)))))
(if (wcmatch txt2 "#*")
(setq x3 (atof txt2))
)
(setq re (* x1 x2 x3 0.00000785))
(if (setq ss3 (ssget ":E:S" '((0 . "TEXT"))))
(progn
(setq ent (entget (ssname ss3 0)))
(entmod (subst
(cons 1 (rtos re 2 1))
(assoc 1 ent)
ent
)
)
)
)
)
(princ)
)
;;; 结束===========================================================*引申考虑:
我LISP不精通,提点建议,如此好的代码,可以考虑编写一个“炸开文字和数字混编”的代码,就是文字炸开一起,数字炸开在一起,不要文字和数字字符都是单个的。
我编写的总重计算,可以框选。 楼上的,举个例子
页:
[1]
2