OWEN7 发表于 2013-3-18 21:10:55

画梁时,在梁线中间自动标上梁截面(200x600)

本帖最后由 OWEN7 于 2013-3-19 20:49 编辑

rt,请高手帮忙写一个这样的lisp,。我也在酝酿中,欢迎提供思路

完整武器 发表于 2013-3-19 00:01:15

帮顶一下

OWEN7 发表于 2013-3-19 20:49:56

顶一个,慢慢来吧。

xyp1964 发表于 2013-3-19 22:14:57


flytoday 发表于 2013-3-19 22:21:58

院长如果能将集中标注与原位标注断面直接搞到梁边上那才牛B

夏生生 发表于 2013-3-20 08:15:49

本帖最后由 夏生生 于 2013-3-21 08:33 编辑

自己改改,例如梁宽的设置当高度大于某值时取某值,根据习惯自己改
;;;回复网友点评
本来就不是用来画梁的程序,用sap2000的自然知道本程序的妙用,呵呵。梁宽的判断很简单,加个cons即可,不同单位不同工程对梁宽有不同的要求,只是初定截面罢了
;;;&&&&&&&&&&开始获取所有图层列表函数&&&&&&&&&&
(defun get_layer_list( / lay_name layer_list)
(setq layer_list nil)
(while (setq lay_name (cdr (assoc 2 (tblnext "layer"))))
    (setq layer_list (cons lay_name layer_list))
    )
(tblnext "layer" t)
layer_list
)
;;; &&&&&&&&&&开始检查是否存在图层,如无创建之函数&&&&&&&&&&
;;; =============================================
;;;      通用函数检查是否存在图层,如无创建之
;;; 参数:l_p------打印标志(整型) 如果设置为 0,则不打印此图层
;;;      l_l------线型(字符串)
;;;      l_s------图层状态(整型)
;;;      l_n------图层名(字符串)
(defun ly_mak (l_p l_l l_s l_n / L_C)
(SETQ L_C(LENGTH (VL-REMOVE-IF-NOT '(LAMBDA (X)(wcmatchX "*0X*0"))(get_layer_list))))
(if (= (tblobjname "LAYER" l_n) nil)
    (progn
      (entmake (list (cons 0 "LAYER")
                     (cons 100 "AcDbSymbolTableRecord")
                     (cons 100 "AcDbLayerTableRecord")
                     (if l_p
                     (cons 290 l_p)
                     '(290 . 1)
                     )                        ; _ 结束if
                     (if l_l
                     (cons 6 l_l)
                     '(6 . "CONTINUOUS")
                     )                        ; _ 结束if
                     (cons 62 (1+ l_c))
                     (if l_s
                     (cons 70 l_s)
                     '(70 . 0)
                     )                        ; _ 结束if
                     (cons 2 l_n)
               )                        ; _ 结束list
      )                                        ; _ 结束entmake
    )                                        ; _ 结束progn
)                                        ; _ 结束if

)
;;; _ 结束defun
;;; &&&&&&&&&&开始创建单行文字函数&&&&&&&&&&
;;; 参数:l_n------图层名(字符串)
;;;      t_10------第一对齐点,如t_72或t_73非零,则该值忽略(点)
;;;      t_t------文字本身(字符串)
;;;      t_h------文字高度(整型)
;;;      t_w------宽度因子(实型)
;;;      t_st------文字样式(字符串)
;;;      t_50------倾斜角度(整型)
;;;      t_72------水平文字对正类型
;;;      t_73-------垂直文字对正类型
;;;      t_11------第二对齐点,如t_72和t_73为零,则该值忽略(点)
(defun t_mak (l_n t_10 t_11 t_t t_50 t_72 t_73 t_h t_w t_st /)
(entmake (list '(0 . "text")
               '(100 . "AcDbEntity")
               (cons 8 l_n)
               '
                  (100 . "AcDbText")
               (cons 10 t_10)
               (cons 1 t_t)
               (cons 40 t_h)
               (cons 41 t_w)
               (cons 7 t_st)
               (cons 72 t_72)
               (cons 11 t_11)
               (cons 50 t_50)
               (cons 73 t_73)
         )                              ; _ 结束list
)                                        ; _ 结束entmake

)
;;; _ 结束defun
;;;线中点平移
(defun mv_midpt (pt1 pt2 ang dist / )
(polar (mapcar '(lambda (x) (/ x 2)) (mapcar '+ pt1 pt2)) ang dist)
)
(defun c:yjk( / pt1 pt2 ang dist b h l_n)
(SETVAR "OSMODE" 163)
(WHILE
(SETQ PT1 (GETPOINT "\n选择起始点:"))
(SETQ PT2 (GETPOINT pt1 "\n选择结束点:"))
(setq ang (angle pt1 pt2)
      dist (distance pt1 pt2)
      b 200
      h (if (< (setq h (* (fix (/ dist 12 50)) 50))400) 400h)
      l_n (strcat (itoa b) "X" (itoa h)))
(ly_mak nil nil nil l_n)
(t_mak l_n '(0 0 0) (mv_midpt pt1 pt2 (+ (/ pi 2) ang) 100) l_n ang 1 0 250 0.75 "standard")
(t_mak l_n '(0 0 0) (mv_midpt pt1 pt2 (- ang (/ pi 2)) 400) (STRCAT "梁跨"(RTOS DIST) "mm") ang 1 0 250 0.75 "standard")
(entmake (list '(0 . "LINE") (cons 8 l_n) (cons 10 pt1)(cons 11 pt2)))
)
(PRINC)
)

石井鱼 发表于 2013-3-20 09:28:46

院长威武,很方便,真是只有想不到,没有办不到

flytoday 发表于 2013-3-20 14:17:04



如果能将原位标注与集中标注拉至靠梁边来就牛B

OWEN7 发表于 2013-3-30 12:59:45

有什么妙处,

风流少年时 发表于 2015-8-11 09:35:22

楼主现在还在做设计吗?
页: [1] 2
查看完整版本: 画梁时,在梁线中间自动标上梁截面(200x600)