找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 1463|回复: 9

[求助] [求助]:可否编这个样用于计算重量的LSP程序

[复制链接]
发表于 2007-1-31 10:15:10 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
钢板的变截面重量计算
    规格        长度    数量    单重(kg)    总重(kg)
-(200~400)x5           2000           2              *.*                *

这个规格其实就是(200+400)/2,也就是-300x5的规格.编一个程序只要点击规格、长度、数量,单重和总重就自动计算出来的。
不知道我这样讲能理解吗?
哪们高手可以编一个这样的?谢谢!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

已领礼包: 2个

财富等级: 恭喜发财

发表于 2007-1-31 14:56:18 | 显示全部楼层
楼主的想法是行的。
请楼主将CAD中表格以dwg的格式传上来,我可以写这个。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-2-1 09:24:44 | 显示全部楼层
OK。谢谢:)
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 2个

财富等级: 恭喜发财

发表于 2007-2-3 15:27:04 | 显示全部楼层
三楼的附件,没能下载下来,
根据我的理解,写了如下代码。
请楼主试用,不妥之处请回复说明。
[PHP]
;;定义函数,用于钢板材料重量表的计算。
;; 日 期:zml84 于2007-02-03
;;;===========================================================
(defun c:t (/ el ent str lst a b c gg cd sl dz zz)
    ;;第1步:选择规格
    (while
        (progn
            (while (= (setq el (entsel "\n请点取《规格》:")) nil))
            (if        (setq str (cdr (assoc '1 (entget (car el) '("*")))))
                (progn
                    (setq lst (zml-str-fg str '("(" "~" ")" "x")))
                    (if        (>= (length lst) 3)
                        (not (setq a  (atof (car lst))
                                   b  (atof (cadr lst))
                                   c  (atof (nth 2 lst))
                                   gg (* (+ a b) 0.5 c)
                             )
                        )
                        (princ "你选择的文字不是规格。请重新选择。")
                    )
                ) ;_ 结束progn
                (princ "你选择的不是文字对象。请重新选择。")
            )
        ) ;_ 结束progn
    ) ;_ 结束while
    (princ "★(")
    (princ a)
    (princ "+")
    (princ b)
    (princ ")÷2×")
    (princ c)

    ;;第2步:选择长度
    (while
        (progn
            (while (= (setq el (entsel "\n请点取《长度》:")) nil))
            (if        (setq str (cdr (assoc '1 (entget (car el) '("*")))))
                (not (setq cd (atof str)))
                (princ "你选择的不是文字对象。请重新选择。")
            )
        ) ;_ 结束progn
    ) ;_ 结束while
    (princ cd)

    ;;第3步:选择数量
    (while
        (progn
            (while (= (setq el (entsel "\n请点取《数量》:")) nil))
            (if        (setq str (cdr (assoc '1 (entget (car el) '("*")))))
                (not (setq sl (atof str)))
                (princ "你选择的不是文字对象。请重新选择。")
            )
        ) ;_ 结束progn
    ) ;_ 结束while
    (princ sl)

    ;;第4步:计算
    ;;默认文字中数据单位为毫米,
    ;;钢铁容重(/ 7.856 1E6),单位KG/mm3
    (setq dz (* gg cd (/ 7.856 1E6))
          zz (* dz sl)
    )

    ;;第5步:选择单重,并修改其内容
    (while
        (progn
            (while (= (setq el (entsel "\n请点取《单重》:")) nil))
            (if        (setq str
                         (cdr (assoc '1
                                     (setq ent (entget (car el) '("*")))
                              )
                         )
                )
                (progn (setq ent (subst        (cons 1 (rtos dz 2 2))
                                        (assoc '1 ent)
                                        ent
                                 )
                       )
                       (not (entmod ent))
                )
                (princ "你选择的不是文字对象。请重新选择。")
            )
        ) ;_ 结束progn
    ) ;_ 结束while

    ;;第6步:选择总重,并修改其内容
    (while
        (progn
            (while (= (setq el (entsel "\n请点取《总重》:")) nil))
            (if        (setq str
                         (cdr (assoc '1
                                     (setq ent (entget (car el) '("*")))
                              )
                         )
                )
                (progn (setq ent (subst        (cons 1 (rtos zz 2 2))
                                        (assoc '1 ent)
                                        ent
                                 )
                       )
                       (not (entmod ent))
                )
                (princ "你选择的不是文字对象。请重新选择。")
            )
        ) ;_ 结束progn
    ) ;_ 结束while

    (princ "\n★计算过程:(")
    (princ a)
    (princ "+")
    (princ b)
    (princ ")÷2×")
    (princ c)
    (princ "×")
    (princ cd)
    (princ "×")
    (princ sl)
    (princ "×0.000007856=")
    (princ zz)
    (princ " ★完成★")
    (princ)
) ;_ 结束defun

(princ "\n加载完毕\n★键入命令\"T\"开始执行★\n")
;;;===========================================================
;;;自定义函数:分割字符串                                    
;;;参数说明: str---欲分割的字符串                           
;;;           lst---分割符表,参数类型:表                    
;;; 返回值:分割后的字符,类型:表;原子类型:字符串         
;;; 示 例:(zml-str-fg "(200~400)x5" '("(" "~" ")" "x"))   
;;;     返回:("200" "400" "5")                          
;;; 日 期:zml84 于2007-02-03                              
;;;===========================================================
(defun zml-str-fg (str lst / xx i j stri test01 n ni jg)
    (setq xx '()
          i  1
    ) ;_ 结束setq
    (repeat (strlen str)
        (setq stri   (substr str i 1)
              j             0
              test01 T
        ) ;_ 结束setq
        (while test01
            (if        (= j (length lst))
                (setq test01 nil)
                (if (= stri (nth j lst))
                    (setq xx         (cons i xx)
                          test01 nil
                    ) ;_ 结束setq
                    (setq j (1+ j))
                ) ;_ 结束if
            ) ;_ 结束if
        ) ;_ 结束while
        (setq i (1+ i))
    ) ;_ 结束repeat

    (if        (= 0 (length xx))
        (setq jg (list str))
        (progn
            (setq jg '()
                  i  (strlen str)
                  n  0
            )
            (repeat (length xx)
                (setq ni (nth n xx))
                (if (= i ni)
                    (setq i (1- i))
                    (setq jg (cons (substr str (1+ ni) (- i ni)) jg)
                          i  (- ni 1)
                    )
                )
                (setq n (1+ n))
            )
        )
    )
    jg
) ;_ 结束defun
;;;===========================================================
[/PHP]
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-2-5 12:24:47 | 显示全部楼层
TO ZML84:
你的附件我也下不下来,可能晓东论坛有问题。
我粘贴试用了,好像计算有点问题。不知道是不是我操作不对。我把它粘下面。

命令: tr
请点取《规格》:★(284.0+734.0)÷2×0.0
请点取《长度》:7994.0
请点取《数量》:1.0
请点取《单重》:
请点取《总重》:
★计算过程:(284.0+734.0)÷2×0.0×7994.0×1.0×0.000007856=0.0 ★完成★

为什么它会*0.0呢。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 2个

财富等级: 恭喜发财

发表于 2007-2-5 14:41:53 | 显示全部楼层
1.出错地方:
问题出在代码的第11行,即:
[PHP](setq lst (zml-str-fg str '("(" "~" ")" "x"))) [/PHP]
2.原因:
在选取“规格”字符串后,需要把其中的三个数据(首尾宽度及厚度)提取出来。
在分割这些数据时,我自作聪明地设置了分割符为:- ( ) ~ x,所以厚度那个数据错误地转化成为了0.0
3.修改:
你应该根据你的情况修改第11行,比如下句:
[PHP](setq lst (zml-str-fg str '( "-" "(" "~" ")" "x" "X" "*" "×")))[/PHP]
也就是说:把你用到的表示乘号字符添加到程序中。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-2-5 19:04:52 | 显示全部楼层
谢谢!
OK可以计算了,我还想问下,就是单重保留一位小数,总重没有小数要如何改?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 2个

财富等级: 恭喜发财

发表于 2007-2-6 15:48:22 | 显示全部楼层
在代码中找到以下两处并修改之即可。
[PHP](rtos dz 2 2)    =====》改成        (rtos dz 2 1)

(rtos zz 2 2)    =====》改成        (rtos zz 2 0)
[/PHP]
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-2-7 17:19:48 | 显示全部楼层
谢谢。已改好。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2007-2-9 14:56:09 | 显示全部楼层
你这个程序应该比较容易
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

GMT+8, 2024-11-17 18:45 , Processed in 0.268924 second(s), 48 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表