明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1432|回复: 12

[经验] SLdesign V3.0 画钢筋

[复制链接]
发表于 2024-8-27 23:33:22 | 显示全部楼层 |阅读模式
本帖最后由 尘缘一生 于 2024-8-29 04:56 编辑

如果大型软件哪边,结构模型建的合理,准确,到CAD里,实际上钢筋是不用再需要寻思的,然而,有时候进行二次设计,还偶尔需要画,
需要时候,就费事,为此,做下子这个功能,

大家觉得还有点用,我贴下代码,可惜我集成太多,抽函数,基本不可能做到,也就是,不能独立运行,
更何况,代码还错综复杂的全局变量,节选摘录部分:
  1. ;;nam1 在 nam2 nam3 两个实体间均布---(一级)---
  2. ;;div 目标实体总数(包含nam1 nam2)
  3. ;;返回包含nam2 nam3的:实体中点表
  4. ;;SLdesign V3.0  Modify by 尘缘一生  QQ:15290049
  5. (defun sl:djbz (nam1 nam2 nam3 div / p1 p2 p0 ang dis d i lis)
  6.   (setq p1 (e-mid nam2) p2 (e-mid nam3) ang (angle p1 p2) dis (distance p1 p2) lis (list p1 p2) div (1- div))
  7.   (if (> div 1)
  8.     (progn
  9.       (setq d (/ dis div) i 0)
  10.       (while (> (1- div) 0)
  11.         (setq p0 (polar p1 ang (* (setq i (1+ i)) d)))
  12.         (setq lis (cons p0 lis))
  13.         (vla-move (vla-copy (en2obj nam1)) (vlax-3D-point p1) (vlax-3D-point p0))
  14.         (setq div (1- div))
  15.       )
  16.       (redraw)
  17.     )
  18.   )
  19.   (setq lis (gps->lst-delsame (order-pt lis)));点击排序并删除重复点
  20.   lis
  21. )
  22. ;;点表引线批量标注----(一级)----
  23. ;;txt1 线上文字 nil txt2 线下文字nil  kd3 0 1 线上-下开关 h 文字高度
  24. ;;SLdesign V3.0  Modify by 尘缘一生  QQ:15290049
  25. (defun sl:dd-pliang (plis txt1 txt2 kd3 h / bb loop pt p pp pj p00 p0 p1 p2 f3 f8 e_lst ang d0 kk str str1 str2 msg e s i el1 el2 hi kh1 kh2 d)
  26.   (setq e_lst (sysvar '("CMDECHO" "OSMODE" "ORTHOMODE")) pp (slget-box plis))
  27.   (if (= p00 nil) (setq p00 (caddr pp)))
  28.   (setq f8 (getvar 'ORTHOMODE) f3 (getvar "OSMODE"))
  29.   (setvar "CMDECHO" 0)
  30.   (setvar "OSMODE" 2048)
  31.   (setq
  32.     str (slmsg "\n->[切换方式(Tab)/正交(F8)/扑捉(F3)]..." "\n->ち传よΑ(Tab)/タユ(F8)/汲(F3)..." "\n->[Style Switch(Tab)/Orth(F8)/Osnap(F3)]...")
  33.     str1 (slmsg "当前:<平行>" "讽玡:<キ︽>" "Current:<Parallel>")
  34.     str2 (slmsg "当前:<集中>" "讽玡:<栋い>" "Current:<Concentrate>")
  35.     hi (/ h slbl) d (* hi 0.8 slbl)
  36.   )
  37.   (if (and txt1 (= kd3 0) (/= txt1 "") (/= txt1 " "))
  38.     (progn
  39.       (slmkwz txt1 p00 hi nil nil nil nil 241 "m")
  40.       (setq kh1 (text:slstringlen txt1 h $hz 0.7))
  41.       (setq el1 (entget (entlast)))
  42.     )
  43.   )
  44.   (if (and (= kd3 1) txt2 (/= txt2 "") (/= txt2 " "))
  45.     (progn
  46.       (slmkwz txt2 p00 hi nil nil nil nil 241 "m")
  47.       (setq kh2 (text:slstringlen txt2 h $hz 0.7))
  48.       (setq el2 (entget (entlast)))
  49.     )
  50.   )
  51.   (cond
  52.     ((and kh1 (not kh2))
  53.       (setq kh kh1)
  54.     )
  55.     ((and kh2 (not kh1))
  56.       (setq kh kh2)
  57.     )
  58.     ((and kh1 kh2)
  59.       (setq kh (max kh1 kh2))
  60.     )
  61.   )
  62.   (if (or (not kh) (< kh 0)) (setq kh (distance (car pp) (cadr pp))))
  63.   (setq loop t kk t)
  64.   (princ (strcat str str1))
  65.   (while loop
  66.     (setq bb (grread t 15 2) p0 (cadr bb))
  67.     (cond
  68.       ((equal bb '(2 6));F3切换捕捉开关
  69.         (cond
  70.           ((and (< f3 16384) (/= f3 0))
  71.             (setq f3 (+ f3 16384))
  72.             (prompt (slmsg "\n <对象捕捉 关>" "\n <癸禜 闽>" "\n <OSnap Off>"))
  73.           )
  74.           ((or (= f3 0) (>= f3 16384))
  75.             (setq f3 16383)
  76.             (prompt (slmsg "\n <对象捕捉 开>" "\n <癸禜 秨>" "\n <OSnap On>"))
  77.           )
  78.         )
  79.         (setvar "OSMODE" f3) (redraw)
  80.       )   
  81.       ((equal bb '(2 15)) ;F8切换正交开关
  82.         (if (= f8 0)
  83.           (progn (setq f8 1) (prompt (slmsg "\n <正交 开>" "\n <タユ 秨>" "\n <Orth open>")))
  84.           (progn (setq f8 0) (prompt (slmsg "\n <正交 关>" "\n <タユ 闽>" "\n <Orth off>")))
  85.         )
  86.         (setvar 'ORTHOMODE f8) (redraw)
  87.       )
  88.       ((member bb '((2 9)));;table 键
  89.         (if kk
  90.           (setq kk nil msg str2)
  91.           (setq kk t msg str1)
  92.         )
  93.         (princ (strcat str msg))
  94.       )
  95.       ((= (car bb) 5);移动时
  96.         (setq pt p0 e (entlast))
  97.         (if s (sl:erase s))
  98.         (if (= f8 1)
  99.           (if (< (abs (- (car p00) (car p0))) (abs (- (cadr p00) (cadr p0))))
  100.             (setq pt (list (car p00) (cadr p0)))
  101.             (setq pt (list (car p0)(cadr p00)))
  102.           )
  103.         )
  104.         (if (and (<= f3 16384) (> f3 0))
  105.           (setq pt (slosnappt (car (nentselp pt)) pt))
  106.         )
  107.         (setq i -1 pp nil ang (angle p00 pt))
  108.         (if (= ang 0) (setq ang (+ ang 0.001)))
  109.         (while (setq p (nth (setq i (1+ i)) plis))
  110.           (if kk
  111.             (setq pj (inters p (polar p ang 300.0) pt (polar pt 0 300.0) nil))
  112.             (setq pj pt)
  113.           )
  114.           (fy_lineformat (makeline p pj) "PUB_DIM" nil nil 241)
  115.           (setq pp (cons pj pp))
  116.         )
  117.         (setq pp (order-pt pp))
  118.         (if (> (car pt) (car p00))
  119.           (progn
  120.             (setq p1 (car pp) p2 (polar (last pp) 0.0 kh))
  121.             (fy_lineformat (makeline p1 p2) "PUB_DIM" nil nil 241)
  122.             (setq p (polar p2 pi (* 0.5 kh)))
  123.           )
  124.           (progn
  125.             (setq p1 (polar (car pp) pi kh) p2 (last pp))
  126.             (fy_lineformat (makeline p1 p2) "PUB_DIM" nil nil 241)
  127.             (setq p (polar p1 0 (* 0.5 kh)))
  128.           )
  129.         )
  130.         (if el1
  131.           (progn
  132.             (setq p (polar p pi2 d))
  133.             (entmod (emod (emod el1 10 p) 11 p))
  134.           )
  135.         )
  136.         (if el2
  137.           (progn
  138.             (setq p (polar p 3pi2 d))
  139.             (entmod (emod (emod el2 10 p) 11 p))
  140.           )
  141.         )
  142.         (setq s (last_ent e))
  143.       )
  144.       ((or
  145.          (= (car bb) 3);左击
  146.          (equal bb '(2 32)) ;空格
  147.          (equal bb '(2 13)) ;回车
  148.          (equal bb' (11 0)) ;右击
  149.        )
  150.         (setq loop nil)
  151.       )
  152.     )
  153.   )
  154.   (mapcar 'eval e_lst)
  155. )
  156. ;绘制箍筋
  157. ;;SLdesign V3.0  Modify by 尘缘一生  QQ:15290049
  158. (defun c:hguj (/ oldos ss s pa pb e p0x p0y p0 b h pt sinalfa p1 p2 p3 p4 p5 p6 p7 p8 p9 p10 p11 p12 hrein_r hrein_l hrein_d hrein_of nam1 nam2 nam3
  159.                 nam4 div plis len0 len1 wzlst txt1)
  160.   (setq oldos (getvar "OSMODE"))
  161.   (setvar "OSMODE" 16383)
  162.   (setq pa (getpoint (slmsg "\n >>> 指定箍筋第一角点:" "\n >>> ﹚鉚惮材à翴:" "\n >>> Specify the first corner of the stirrup:")))
  163.   (if (null hrein_r) (setq hrein_r (* slbl 0.6)))
  164.   (if (null hrein_l) (setq hrein_l (* slbl 3.0)))
  165.   (if (null hrein_d) (setq hrein_d (* slbl 0.45)))
  166.   (if (null hrein_of) (setq hrein_of (* slbl -0.6)))
  167.   (setq pb (getcorner pa (slmsg "\n >>> 指定箍筋第二角点:" "\n >>> ﹚鉚惮材à翴:" "\n >>> Specify the secend corner of the stirrup:")))
  168.   (setvar "OSMODE" oldos)
  169.   (princ (slmsg "\n >>>指定箍筋弯头位置:" "\n >>>﹚鉚惮舠繷&#59284;竚:" "\n >>>>>>Specify the position of stirrup elbow:"))
  170.   (setq p0x (* (+ (car pa) (car pb)) 0.5))
  171.   (setq p0y (* (+ (cadr pa) (cadr pb)) 0.5))
  172.   (setq b (+ (* (abs (- (car pa) (car pb))) 0.5) hrein_of))
  173.   (setq h (+ (* (abs (- (cadr pa) (cadr pb))) 0.5) hrein_of))
  174.   (setq p0 (list p0x p0y))
  175.   (setq sinalfa (sin pi4))
  176.   (setq p1 (list (+ p0x b) (+ p0y h (- hrein_r)))
  177.     p2 (list (+ p0x b) (+ p0y (- h) hrein_r))
  178.     p3 (list (+ p0x b (- hrein_r)) (- p0y h))
  179.     p4 (list (+ p0x (- b) hrein_r) (- p0y h))
  180.     p5 (list (+ p0x (- b)) (+ p0y (- h) hrein_r))
  181.     p6 (list (+ p0x (- b)) (+ p0y h (- hrein_r)))
  182.     p7 (list (+ p0x (- b) hrein_r) (+ p0y h))
  183.     p8 (list (+ p0x b (- hrein_r)) (+ p0y h))
  184.     p9 (list (+ p0x b (- hrein_r) (- hrein_d)) (+ p0y h))
  185.     p10 (list (+ p0x b (- hrein_r) (- hrein_d) (- (* hrein_l sinalfa))) (+ p0y h (- (* hrein_l sinalfa))))
  186.     p11 (list (+ p0x b) (+ p0y h (- hrein_r) (- hrein_d)))
  187.     p12 (list (+ p0x b (- (* hrein_l sinalfa))) (+ p0y h (- hrein_r) (- hrein_d) (- (* hrein_l sinalfa))))
  188.     ss (ssadd)
  189.   )
  190.   (command "DOUGHNUT" 0 SLBL (polar (sl:mid p2 p3) (- (angle p2 p3) pi2) (* 0.5 SLBL)) "") ;右下
  191.   (setq nam1 (entlast))
  192.   (ssadd nam1 ss)
  193.   (command "DOUGHNUT" 0 SLBL (polar (sl:mid p4 p5) (- (angle p4 p5) pi2) (* 0.5 SLBL)) "") ;左下
  194.   (setq nam2 (entlast))
  195.   (ssadd nam2 ss)
  196.   (command "DOUGHNUT" 0 SLBL (polar (sl:mid p6 p7) (- (angle p6 p7) pi2) (* 0.5 SLBL)) "") ;左上
  197.   (setq nam3 (entlast))
  198.   (ssadd nam3 ss)
  199.   (command "DOUGHNUT" 0 SLBL (polar (sl:mid p1 p8) (+ (angle p1 p8) pi2) (* 0.5 SLBL)) "") ;右上
  200.   (setq nam4 (entlast))
  201.   (ssadd nam4 ss)
  202.   (chss2lay ss (slmsg "钢筋" "葵惮" "steelbar")) ;调取移层函数,把4个角点钢筋点,移到钢筋图层去
  203.   (setq e (entlast))
  204.   (slgujk p12 p11 p2 p3 p4 p5 p6 p7 p9 p10 p9 p8 p1 p11)
  205.   (setq s (last_ent e))
  206.   (while (and (setq pt (grread 5)) (= (car pt) 5))
  207.     (if s (sl:erase s))
  208.     (redraw)
  209.     (setq pt (cadr pt))
  210.     (if (= 1 (sl-4p p0 pt))
  211.       (progn
  212.         (setq p9 (list (+ p0x b (- hrein_r) (- hrein_d)) (+ p0y h))
  213.           p10 (list (+ p0x b (- hrein_r) (- hrein_d) (- (* hrein_l sinalfa))) (+ p0y h (- (* hrein_l sinalfa))))
  214.           p11 (list (+ p0x b) (+ p0y h (- hrein_r) (- hrein_d)))
  215.           p12 (list (+ p0x b (- (* hrein_l sinalfa))) (+ p0y h (- hrein_r) (- hrein_d) (- (* hrein_l sinalfa))))
  216.         )
  217.         (slgujk p12 p11 p2 p3 p4 p5 p6 p7 p9 p10 p9 p8 p1 p11)
  218.       )
  219.       (if (= 2 (sl-4p p0 pt))
  220.         (progn
  221.           (setq p9 (list (+ p0x (- b)) (+ p0y h (- hrein_r) (- hrein_d)))
  222.             p10 (list (+ p0x (- b) (+ (* hrein_l sinalfa))) (+ p0y h (- hrein_r) (- hrein_d) (- (* hrein_l sinalfa))))
  223.             p11 (list (+ p0x (- b) hrein_r hrein_d) (+ p0y h))
  224.             p12 (list (+ p0x (- b) hrein_r hrein_d (+ (* hrein_l sinalfa))) (+ p0y h (- (* hrein_l sinalfa))))
  225.           )
  226.           (slgujk p12 p11 p8 p1 p2 p3 p4 p5 p9 p10 p9 p6 p7 p11)
  227.         )
  228.         (if (= 3 (sl-4p p0 pt))
  229.           (progn
  230.             (setq p9 (list (+ p0x (- b) hrein_r hrein_d) (- p0y h))
  231.               p10 (list (+ p0x (- b) hrein_r hrein_d (+ (* hrein_l sinalfa))) (+ p0y (- h) (+ (* hrein_l sinalfa))))
  232.               p11 (list (+ p0x (- b)) (+ p0y (- h) hrein_r hrein_d))
  233.               p12 (list (+ p0x (- b) (+ (* hrein_l sinalfa))) (+ p0y (- h) hrein_r hrein_d (+ (* hrein_l sinalfa))))
  234.             )
  235.             (slgujk p12 p11 p6 p7 p8 p1 p2 p3 p9 p10 p9 p4 p5 p11)
  236.           )
  237.           (progn
  238.             (setq p9 (list (+ p0x b) (+ p0y (- h) hrein_r hrein_d))
  239.               p10 (list (+ p0x b (- (* hrein_l sinalfa))) (+ p0y (- h) hrein_r hrein_d (+ (* hrein_l sinalfa))))
  240.               p11 (list (+ p0x b (- hrein_r) (- hrein_d)) (- p0y h))
  241.               p12 (list (+ p0x b (- hrein_r) (- hrein_d) (- (* hrein_l sinalfa))) (+ p0y (- h) (+ (* hrein_l sinalfa))))
  242.             )
  243.             (slgujk p12 p11 p4 p5 p6 p7 p8 p1 p9 p10 p9 p2 p3 p11)
  244.           )
  245.         )
  246.       )
  247.     )
  248.     (setq s (last_ent e))
  249.   );while
  250.   (setq $stj (gjjb) len0 (p2uu 88) len1 (* 0.26 5 len0)) ;$stj 为SLdesign 钢筋级别全局变量
  251.   (setq div (atoi (inputbox-1 (slmsg "上部钢筋根数:?" "场葵惮计:?" "Number of Upper steel bars:?") (slmsg "输入>2" "块>2" "Input>2")  "3" "25")))
  252.   (setq plis (sl:djbz nam3 nam3 nam4 div))
  253.   (setq div (rtos div 2 0) wzlst
  254.     (list
  255.       (strcat div $stj "4") (strcat div $stj "6") (strcat div $stj "8") (strcat div $stj "10") (strcat div $stj "12") (strcat div $stj "14") (strcat div $stj "16")
  256.       (strcat div $stj "18") (strcat div $stj "20") (strcat div $stj "22") (strcat div $stj "25") (strcat div $stj "28") (strcat div $stj "30") (strcat div $stj "32")
  257.     )
  258.   )
  259.   (setq txt1 (cadr (sl:yjcaidan (last plis) len0 len1 wzlst nil)))
  260.   (sl:dd-pliang plis txt1 nil 0 (* SLBL 3.0))
  261.   ;----------
  262.   (setq div (atoi (inputbox-1 (slmsg "下部钢筋根数:?" "场葵惮计:?" "Number of Lower steel bars:?") (slmsg "输入>2" "块>2" "Input>2")  "3" "25")))
  263.   (setq plis (sl:djbz nam2 nam2 nam1 div))
  264.   (setq div (rtos div 2 0) wzlst
  265.     (list
  266.       (strcat div $stj "4") (strcat div $stj "6") (strcat div $stj "8") (strcat div $stj "10") (strcat div $stj "12") (strcat div $stj "14") (strcat div $stj "16")
  267.       (strcat div $stj "18") (strcat div $stj "20") (strcat div $stj "22") (strcat div $stj "25") (strcat div $stj "28") (strcat div $stj "30") (strcat div $stj "32")
  268.     )
  269.   )
  270.   (setq txt1 (cadr (sl:yjcaidan (last plis) len0 len1 wzlst nil))) ;调用右键菜单选钢筋
  271.   (sl:dd-pliang plis txt1 nil 0 (* SLBL 3.0))
  272. )
  273. ;;14点箍筋框------(一级)-----
  274. ;;SLdesign V3.0  Modify by 尘缘一生  QQ:15290049
  275. (defun slgujk (p1 p2 p3 p4 p5 p6 p7 p8 p9 p10 p11 p12 p13 p14 / d)
  276.   (setq d (* SLBL 0.45)) ;slbl 为SLdesign 绘图比例全局变量
  277.   (entmake
  278.     (list
  279.       (cons 0 "LWPOLYLINE") (cons 100 "AcDbEntity")
  280.       (cons 8 (slmsg "钢筋" "葵惮" "steelbar"))
  281.       (cons 62 1) (cons 100 "AcDbPolyline")
  282.       (cons 90 14)
  283.       (cons 70 0)
  284.       (cons 10 p1) (cons 40 d) (cons 41 d)
  285.       (cons 10 p2) (cons 40 d) (cons 41 d)
  286.       (cons 10 p3) (cons 40 d) (cons 41 d) (cons 42 -0.414214)
  287.       (cons 10 p4) (cons 40 d) (cons 41 d)
  288.       (cons 10 p5) (cons 40 d) (cons 41 d) (cons 42 -0.414214)
  289.       (cons 10 p6) (cons 40 d) (cons 41 d)
  290.       (cons 10 p7) (cons 40 d) (cons 41 d) (cons 42 -0.414214)
  291.       (cons 10 p8) (cons 40 d) (cons 41 d)
  292.       (cons 10 p9) (cons 40 d) (cons 41 d)
  293.       (cons 10 p10) (cons 40 d) (cons 41 d)
  294.       (cons 10 p11) (cons 40 d) (cons 41 d)
  295.       (cons 10 p12) (cons 40 d) (cons 41 d) (cons 42 -0.414214)
  296.       (cons 10 p13) (cons 40 d) (cons 41 d)
  297.       (cons 10 p14) (cons 40 d) (cons 41 d)
  298.     )
  299.   )
  300. )

本帖子中包含更多资源

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

x

评分

参与人数 5明经币 +5 收起 理由
USER2128 + 1 赞一个!
嘒彼小星 + 1 很给力!
baitang36 + 1 很给力!
hubeiwdlue + 1 很给力!
tranque + 1 很给力!

查看全部评分

"觉得好,就打赏"
还没有人打赏,支持一下
发表于 2024-8-28 11:51:44 | 显示全部楼层
想法很不错,不过柱子一般都需要对称配筋,对边配筋应该一致不需要分别标注。

点评

我还没在这方面作柱子的,目前,主要是为作配筋方面,写几个函数。  发表于 2024-8-29 04:22
发表于 2024-8-28 16:14:28 | 显示全部楼层
有些专业,配筋图是软件自动出图的。但是我们专门,还处于石器时代,只能手画,这个功能还是很实用的。

点评

如果如此的话,哪我下一步,柱子、梁,都应该做了它。  发表于 2024-8-29 04:25
发表于 2024-8-28 16:20:42 | 显示全部楼层
建议写一个画截面的,尺寸,配筋一起画上

点评

嗯,会作的,一步步。分部做完,做个集成界面,就是了。  发表于 2024-8-29 04:24
发表于 2024-8-29 18:44:07 | 显示全部楼层

根据标注生成钢筋表

本帖子中包含更多资源

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

x
发表于 2024-8-29 22:57:50 | 显示全部楼层
这个是画钢筋的利器,希望大佬继续完善
发表于 2024-9-29 17:28:46 | 显示全部楼层
希望大佬继续完善
发表于 2024-10-29 17:55:11 | 显示全部楼层
这个功能还是很实用的
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-11-21 01:30 , Processed in 0.208195 second(s), 28 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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