画梁时,在梁线中间自动标上梁截面(200x600)
本帖最后由 OWEN7 于 2013-3-19 20:49 编辑rt,请高手帮忙写一个这样的lisp,。我也在酝酿中,欢迎提供思路 帮顶一下 顶一个,慢慢来吧。
院长如果能将集中标注与原位标注断面直接搞到梁边上那才牛B
本帖最后由 夏生生 于 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)
) 院长威武,很方便,真是只有想不到,没有办不到
如果能将原位标注与集中标注拉至靠梁边来就牛B
有什么妙处, 楼主现在还在做设计吗?
页:
[1]
2