本帖最后由 夏生生 于 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)(wcmatch X "*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) 400 h)
- 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)
- )
|