找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 1330|回复: 4

[工具] 钢筋表格批量计算插件

[复制链接]
发表于 2021-5-20 09:27:34 | 显示全部楼层 |阅读模式

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

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

×
我之前发现一个可以批量计算钢筋工程量的插件。只需要依次批量框选钢筋直径,单根长,和根数即可,即可批量输出总长,单位重,共重,所有钢筋共重,现在我把源码贴上来。
但有几个地方可以改进,我不知道怎么弄,希望大佬指教。
(非常需要)第一个:希望在框选钢筋直径时,如果存在钢筋符号,可以自动去除前面的钢筋符号,比如%%130,%%131,%%143等,然后再计算
(非常需要)第二个:希望输出钢筋共重的时候,可以处根据钢筋直径进行分类,比如直径8钢筋共重...,直径12钢筋共重...,并输出所有钢筋共重
(能实现最好)第三个:希望框选对象时,对象会高亮显示。
现在使用highlight实现的效果如下,
143732p7bb2lut5xyxtjdu.png.thumb.png
如何实现下图这个效果
143735f9jgwrb8sb66dxss.png.thumb.png
源码如下
  1. ;本程序为钢筋表计算程序,按提示框选数据
  2. (defun c:gj ()
  3.   (setvar "DIMZIN" 0)
  4.   (setvar "BLIPMODE" 0)
  5.   (setvar "HIGHLIGHT" 1)
  6.   (setvar "CMDECHO" 0)
  7.   (setvar 'osmode 0)
  8.   (setq n 0)
  9.   (setq n1 0)
  10.   (setq j 0)
  11.   (setq sum 1.0)
  12.   (setq valve 0.0)
  13.   (setq unit_weight (list))
  14.   (setq cor_y (list))
  15.   (prompt "\n选择第一列-直径{mm}: ")
  16.   (setq s1 (ssget))
  17.   (setq s1 (srrt s1))
  18.   (setq n (sslength s1))
  19.   ;;;(print n)
  20.   (while (<= j (- n 1))
  21.     (setq f (entget (ssname s1 j)))
  22.     ;;;(print f)
  23.     (setq bg (assoc '1 f))
  24.     (setq dia (atof (cdr bg)))
  25.     (setq zg (assoc '40 f))
  26.     ;;;(print dia)
  27.     (setq height (cdr zg))
  28.     ;;;(print dia)
  29.     (if  (/= dia 0)
  30.       (progn
  31.         (setq value (* 7850 (* 3.1415926 (/ (expt (/ dia 1000) 2) 4))))
  32.         (setq value (atof (rtos value 2 3)))
  33.         (setq unit_weight (cons value unit_weight))
  34.         (setq y (nth 2 (assoc '10 f)))
  35.         (setq n1 (+ n1 1))
  36.         ;;;(print unit_weight)
  37.         (setq cor_y (cons y cor_y))
  38.       )
  39.     )
  40.     (setq j (+ j 1))
  41.   )
  42.   ;;;(print unit_weight)
  43.   ;;;(print cor_y)
  44.   (setq n2 0)
  45.   (setq j 0)
  46.   (setq unit_length (list))
  47.   (prompt "\n选择第二列-单根长度{mm}: ")
  48.   (setq s2 (ssget))
  49.   (setq s2 (srrt s2))
  50.   (setq n2 (sslength s2))
  51.   (while (/= n1 n2)
  52.     (print "直径个数与单根长度个数不符,请重选!!")
  53.     (setq s2 (ssget))
  54.     (setq n2 (sslength s2))
  55.   )
  56.   ;;;(print n2)
  57.   (while (<= j (- n2 1))
  58.     (setq f (entget (ssname s2 j)))
  59.     (setq bg (assoc '1 f))
  60.     (setq value (/ (atof (cdr bg)) 1000))
  61.     (setq unit_length (cons value unit_length))
  62.     ;;;(print unit_length)
  63.     (setq j (+ j 1))
  64.   )
  65.   ;;;(print unit_length)
  66.   (setq n3 0)
  67.   (setq j 0)
  68.   (setq total_number (list))
  69.   (prompt "\n选择第三列-总根数: ")
  70.   (setq s3 (ssget))
  71.   (setq s3 (srrt s3))
  72.   (setq n3 (sslength s3))
  73.   (while (/= n1 n3)
  74.     (print "直径个数与总根数个数不符,请重选!!")
  75.     (setq s3 (ssget))
  76.     (setq n3 (sslength s3))
  77.   )
  78.   ;;;(print n3)
  79.   (while (<= j (- n3 1))
  80.     (setq f (entget (ssname s3 j)))
  81.     (setq bg (assoc '1 f))
  82.     (setq value (atof (cdr bg)))
  83.     (setq total_number (cons value total_number))
  84.     ;;;(print total_number)
  85.     (setq j (+ j 1))
  86.   )
  87.   (print total_number)
  88.   (setq total_length (reverse (mapcar '* unit_length total_number)))
  89.   (setq total_weight (mapcar '* total_length (reverse unit_weight)))
  90.   (setq cor_y (reverse cor_y))
  91.   (setq unit_weight (reverse unit_weight))
  92.   ;;;(print total_length)
  93.   ;;;(print total_weight)
  94.   (setq n 0)
  95.   (setq j 0)
  96.   (setq x (nth 0 (getpoint "确定总长{m}写入点:")))
  97.   ;;;(print x)
  98.   (setq n (length total_length))
  99.   (while (<= j (- n 1))
  100.     (setq point (list x (nth j cor_y)))
  101.     (command "text"
  102.       point
  103.       height
  104.       0
  105.       (rtos (nth j total_length) 2 1)
  106.     )
  107.     (setq j (+ j 1))
  108.   )
  109.   (setq n 0)
  110.   (setq j 0)
  111.   (setq x (nth 0 (getpoint "确定单位重{kg/m}写入点:")))
  112.   ;;;(print x)
  113.   (setq n (length unit_weight))
  114.   (while (<= j (- n 1))
  115.     (setq point (list x (nth j cor_y)))
  116.     (command "text"
  117.       point
  118.       height
  119.       0
  120.       (rtos (nth j unit_weight) 2 3)
  121.     )
  122.     (setq j (+ j 1))
  123.   )
  124.   (setq n 0)
  125.   (setq j 0)
  126.   (setq x (nth 0 (getpoint "确定各钢筋总重{kg}写入点:")))
  127.   ;;;(print x)
  128.   (setq n (length total_weight))
  129.   (while (<= j (- n 1))
  130.     (setq point (list x (nth j cor_y)))
  131.     (command "text"
  132.       point
  133.       height
  134.       0
  135.       (rtos (nth j total_weight) 2 1)
  136.     )
  137.     (setq j (+ j 1))
  138.   )
  139.   (setq point (getpoint "确定所有钢筋总质量{kg}写入点:"))
  140.   (command "text"
  141.     point
  142.     height
  143.     0
  144.     (rtos (apply '+ total_weight) 2 1)
  145.   )
  146.   (setvar 'osmode 487)
  147. )
  148. (defun srrt (sss / srt n se1 se2 y1 y2 j)
  149.   (setq srt (ssadd))
  150.   (setq n (sslength sss))
  151.   (repeat n
  152.     (if  (/= n 0)
  153.       (progn
  154.         (setq se1 (ssname sss 0))
  155.         (setq y1 (nth 2 (assoc '10 (entget se1))))
  156.         (setq j 1)
  157.         (setq n (sslength sss))
  158.         (repeat  (- n 1)
  159.           (setq se2 (ssname sss j))
  160.           (setq y2 (nth 2 (assoc '10 (entget se2))))
  161.           (if (> y2 y1)
  162.             (progn
  163.               (setq se1 se2)
  164.               (setq y1 y2)
  165.             )
  166.           )
  167.           (setq j (+ j 1))
  168.         )
  169.         (ssadd se1 srt)
  170.         (ssdel se1 sss)
  171.         ;;;(print (sslength sss))
  172.       )
  173.     )
  174.   )
  175.   (setq sss srt)
  176. )








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

使用道具 举报

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

使用道具 举报

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

使用道具 举报

 楼主| 发表于 2021-5-27 16:28:20 | 显示全部楼层
我已经解决了第一个自动替换钢筋符号的问题,剩余第二第三个问题,希望大佬指导
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-12-26 15:32 , Processed in 0.588783 second(s), 38 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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