明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 364|回复: 0

[讨论] 平表法画吊筋

[复制链接]
发表于 2023-9-15 09:55 | 显示全部楼层 |阅读模式
分享一个结构施工图画平表法吊筋的LISP,很久以前写的。选择边界的时候用的是ssget选取直线。问题是这些图素如果是在块里面就没办法了。我想改写一下:我的平面图整个是一个块,也能用多选的办法选取边界,不知道怎么办。有没有谁给指点指点?



(defun c:dj(/ lines oos cla roo tbl p_st p_end paishu y_dn y_up x_lt x_rt
              pt1 pt2 pt3 pt4 pt5 pt6 pt7 pt8 d dd l ll alfa x y od_err num
              dsym)
    (defun dj_err(s)
        (command "undo" "e")
        (command "u")
        (setq   lines   nil     oos     nil     cla     nil     roo     nil
                tbl     nil     p_st    nil     p_end   nil     x_lt    nil
                x_rt    nil     y_up    nil     y_dn    nil     paishu  nil
                d       nil     dd      nil     l       nil     ll      nil
                alfa    nil     x       nil     y       nil     pt1     nil
                pt2     nil     pt3     nil     pt4     nil     pt5     nil
                pt6     nil     pt7     nil     pt8     nil     od_err  nil
                num     nil        dsym        nil        pt1s        nil        pt2s        nil
                pt3s        nil        pt4s        nil        pt5s        nil        pt6s        nil
                pt7s        nil        pt8s        nil
        )
        (setq *error* od_err)
        (princ)
    )
    (command "undo" "g")
    (setq od_err *error*)
    (setq *error* dj_err)
    (princ "\nselect lines.")
    (setq lines (ssget '((0 . "LINE"))))
    (initget "Horizntl Vertical")
    (setq dsym (getkword "Vertical/<Horizntl>:"))
    (if (null dsym) (setq dsym "Horizntl"))
    (setq oos (getvar "OSMODE"))
    (setq cla (getvar "CLAYER"))
    (setvar "OSMODE" 0)
    (command "ucs" "")
    (setq roo (sslength lines))
    (setq num 0)
    (repeat roo
        (setq tbl (entget (ssname lines num)))
        (setq p_st (cdr (assoc 10 tbl)))
        (setq p_end (cdr (assoc 11 tbl)))
        (if (< (abs (- (car p_st) (car p_end))) 1e-6)
            (progn
                (if (or (null x_lt) (< (car p_st) x_lt))
                    (setq x_lt (car p_st))
                )
                (if (or (null x_rt) (> (car p_st) x_rt))
                    (setq x_rt (car p_st))
                )
            )
            (if (< (abs (- (cadr p_st) (cadr p_end))) 1e-6)
                (progn
                    (if (or (null y_dn) (< (cadr p_st) y_dn))
                        (setq y_dn (cadr p_st))
                    )
                    (if (or (null y_up) (> (cadr p_st) y_up))
                        (setq y_up (cadr p_st))
                    )
                )
            )
        )
        (setq num (1+ num))
    )
    (initget 6)
    (setq paishu (getint "\nput in steel num <1>:"))
    (if (null paishu) (setq paishu 1))
    (setq d     50            ;多义线宽度
          dd    (* d paishu)     ;钢筋排数
          ll    200             ;水平段长度
          l     100           ;每排间距
    )
    (setq alfa (/ pi 4))
    (if (>= (- y_up y_dn) 800) (setq alfa (/ pi 3)))
    (if (= "Horizntl" dsym)
        (progn
            (setq x (- x_lt d (/ (- y_up y_dn d dd) (/ (sin alfa) (cos alfa))) ll))
            (setq y (- y_up d))
            (setq pt1 (polar (list x y) (* -1 (/ pi 4)) l))
            (setq pt2 (list x y))
            (setq pt3 (polar pt2 0 ll))
            (setq pt4 (polar pt3 (* -1 alfa) (/ (- y_up y_dn d dd) (sin alfa))))
            (setq pt5 (polar pt4 0 (+ (* 2 d) (- x_rt x_lt))))
            (setq pt6 (polar pt5 alfa (/ (- y_up y_dn d dd) (sin alfa))))
            (setq pt7 (polar pt6 0 ll))
            (setq pt8 (polar pt7 (* -1 (* pi 0.75)) l))
            (command "layer" "m" "steel" "")
            (command "pline" pt2 "w" d "" pt3 pt4 pt5 pt6 pt7 "")
            (setq num 1)
            (repeat 3
                (setq pt5s (list (- x_lt (* num l)) y_up))
                (setq pt6s (list (- x_lt (* num l)) y_dn))
                (setq pt7s (list (+ x_rt (* num l)) y_up))
                (setq pt8s (list (+ x_rt (* num l)) y_dn))
                (setq num (1+ num))
                (setq pt5 (trans pt5s 1 0))
                (setq pt6 (trans pt6s 1 0))
                (setq pt7 (trans pt7s 1 0))
                (setq pt8 (trans pt8s 1 0))
                (command "layer" "m" "hoop" "")
                (command "ucs" "")
                (command "pline" pt5 "w" d "" pt6 "")
                (command "pline" pt7 "w" d "" pt8 "")
                (command "ucs" "p")
            )
        )
        (progn
            (setq y (- y_dn d (/ (- x_rt x_lt d dd) (/ (cos alfa) (sin alfa))) ll))
            (setq x (+ x_lt d))
            (setq pt1 (polar (list x y) (/ pi 4) l))
            (setq pt2 (list x y))
            (setq pt3 (polar pt2 (/ pi 2) ll))
            (setq pt4 (polar pt3 (- (/ pi 2) alfa) (/ (- x_rt x_lt d dd) (sin alfa))))
                 (setq pt5 (polar pt4 (/ pi 2) (+ (* 2 d) (- y_up y_dn))))
            (setq pt6 (polar pt5 (+ (/ pi 2) alfa) (/ (- x_rt x_lt d dd) (sin alfa))))
            (setq pt7 (polar pt6 (/ pi 2) ll))
            (setq pt8 (polar pt7 (* -1 (* pi 0.25)) l))
            (command "layer" "m" "steel" "")
            (command "pline" pt2 "w" d "" pt3 pt4 pt5 pt6 pt7 "")
            (setq num 1)
            (repeat 3
                (setq pt1s (list x_lt (+ y_up (* num l))))
                (setq pt2s (list x_rt (+ y_up (* num l))))
                (setq pt3s (list x_lt (- y_dn (* num l))))
                (setq pt4s (list x_rt (- y_dn (* num l))))  
                (setq num (1+ num))
                (setq pt1 (trans pt1s 1 0))
                (setq pt2 (trans pt2s 1 0))
                (setq pt3 (trans pt3s 1 0))
                (setq pt4 (trans pt4s 1 0))
                (command "layer" "m" "hoop" "")
                (command "ucs" "")
                (command "pline" pt1 "w" d "" pt2 "")
                (command "pline" pt3 "w" d "" pt4 "")
                (command "ucs" "p")
            )
        )
    )
    (setvar "OSMODE" oos)
    (setvar "CLAYER" cla)
    (setq *error* od_err)
    (command "ucs" "p")
    (command "undo" "e")
    (princ)
)


评分

参与人数 2明经币 +2 收起 理由
bssurvey + 1 赞一个!
ssyfeng + 1 鼓励一下

查看全部评分

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

本版积分规则

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

GMT+8, 2024-6-3 22:00 , Processed in 0.238165 second(s), 25 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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