林霄云 发表于 2014-5-8 21:45:51

梁线绘制源码放送(支持UCS,动态偏心或居中布置、宽度设置)

本帖最后由 林霄云 于 2014-5-8 21:49 编辑

梁线绘制源码解析(支持UCS,动态偏心或居中布置、宽度设置)
墙线与梁线是建模前提,墙与梁是孪生子。墙线绘制源码解析(支持UCS,偏心或居中布置,厚度设置,自动填充)http://bbs.mjtd.com/forum.php?mod=viewthread&tid=109989&fromuid=7303580

梁线绘制,与墙线一样,甚至比墙线代码更为简单。
步骤
1,取点表getbeampoint( / pt1 pt2ptlist-w x )
2,生成梁线make_beam,返回梁线选择集
3,动态处理bl(beam line),梁宽(通过键入数字),偏心(通过鼠标左击)。
核心代码
生成梁线,梁线为line类型。(defun make_beam(ptlist-w wid lr-flag / ss en en-a1 en-a2 wid-temp)
;约定lr-flag取值为-1,0.5,1
(setq lr-flag (rem lr-flag 3))
(setq lr-flag (nth lr-flag '( -1.0 0.5 1.0)))
(setq wid-temp (* wid lr-flag))

(setup "beam_in"); 设置图层
(setq en (make_lineptlist-w (getvar "clayer") ))

;生成梁线
(setq en-a1 (en_offset en wid-temp t))
(setq en-a2 (en_offset en-a1 (* wid (- (sign wid-temp))) nil))

;添加到选择集 en-a1 en-a2.
(setq ss (ssadd))
(setq ss (ssadd en-a1 ss))
(setq ss (ssadd en-a2 ss))
)至于调用函数(defun C:bl( / enptlist-wss flag num-pt wid-flag wid-temp)
;BEAMLINE-L方式
;Designed by 林霄云 2014年2月26日
(setq ss (ssadd))
(setq flag t)
(setq num-pt 1)
(setq wid-flag nil )


(setq ptlist-w (getbeampoint))

(setq ss(make_beam ptlist-w hnu:beamwid num-pt) )

      ;捕捉左键,进行缩放测试
      (prompt "\n左击循环方式调整梁位置 or U撤销 or 键入梁宽 or 右击退出")
      (while (and (setq ptr (grread t 15 2))
                  flag
               )   
               ;(redraw)
      (cond ((= (car ptr) 3);_Mouse Left button
         (if ss
         (progn (ss_delete ss)(setq ss nil)(setq num-pt (1+ num-pt)) (setq ss (make_beam ptlist-w hnu:beamwid num-pt))) ;切换标志,删除,生成
         ) ;左键进行0.5倍缩小,测试ss选择集方式可行。
         ));cond 左击事件
      (cond ((= (car ptr) 2);键盘事件   
         (if (or (= (ascii "U") (cadr ptr)) (= (ascii "u") (cadr ptr))) (if ss (progn (ss_delete ss) (setq ss nil) (setq flag (not flag)))))
         (if(<= (ascii "0")(setq wid-temp (cadr ptr))(ascii "9"))
          (if wid-flag
          (progn (setq wid-flag (+ (* 10 wid-flag )(- wid-temp (ascii "0"))))(princ (itoa (- wid-temp (ascii "0"))))) ;处理其他数字
          (if ( = (ascii "0") wid-temp ) (setq wid-flag nil)(progn (setq wid-flag (- wid-temp (ascii "0"))) (princ (strcat "\n新梁宽:" (itoa (- wid-temp (ascii "0")))))));处理第一个数字
          )
          ; (if wid-flag (princ (itoa wid-flag)));回显
          );处理输入数字情况
         (if (or (= 13 (cadr ptr)) (= 32 (cadr ptr)))
          (if wid-flag
          (progn (setq hnu:beamwid wid-flag)
               (princ (strcat "\n当前梁宽设置为:" (itoa hnu:beamwid)))
               (if ss(progn (ss_delete ss) (setq ss nil)))               
               (setq ss (make_beam ptlist-w hnu:beamwid num-pt))
               (setq wid-flag nil)
               )
               (setq flag (not flag));退出循环
         )
         )
         ));cond 键盘事件
      (cond ((or (= (car ptr) 11) (= (car ptr) 25))         
      (if wid-flag
          (progn (setq hnu:beamwid wid-flag)
               (princ (strcat "\n当前梁宽设置为:" (itoa hnu:beamwid)))
               (if ss(progn (ss_delete ss) (setq ss nil)))               
               (setq ss (make_beam ptlist-w hnu:beamwid num-pt))
               (setq wid-flag nil)
               )
               (setq flag (not flag));退出循环
         ));_Mouse Right button
         );cond 右击事件
         );while
      ;捕捉左键,进行缩放测试
(princ)
)必须强调的是,
1,梁宽的设置逻辑,保存键入的数字;当空格回车右击时,判断,是否有键入数字标记,有则,删除原梁线,生成新梁线。否则,设置退出动态标记。
2,左击点数记录,作为参数传给make_beam。同时,删除原梁线,生成新梁线。
3,梁宽设置保存至全局变量,方便下次使用。

附加
生成梁线后,为了进一步方便建模。
1,在没有轴线处,生成辅助轴线,bax(beam axis)——取梁中线
2,梁高不同于典型梁高时,设置梁截面标注文字,bte(beam text)——自动取梁宽,按全局变量设置梁高
为了直接对接模板图,补充
3,梁裁剪,方便十字梁裁剪,btr(beam)
4,梁虚实线转换,bcd(beam continuous or dashed)——特定图层的切换
接口
5,bsetb(beam set b) 设梁宽 ,bseth(beam set h) 设梁高

作为纯cad绘图,这些命令或许能提高些许效率。而最重要的概念,左手快捷键及其设置原则不是lisp代码命令可以解决的。

下篇:徒手板负筋源码解析(支持UCS)

依然小小鸟 发表于 2018-9-23 16:34:57

楼主目前的程序都是针对平法画图方式,有没有批量梁剖面配筋图得程序呢   纵剖那种

1361878068 发表于 2025-4-12 14:00:55

casd 发表于 2014-5-10 15:55
我的执行不正确啊,输入起点、终点,就没有了

我也是,你解决了么

asd19400 发表于 2018-5-16 14:53:10

bte增加梁截面文字为何无法操作?

林霄云 发表于 2014-5-8 21:51:59

再加两张演示!

429014673 发表于 2014-5-8 21:57:51

先占座再后说.

hao3ren 发表于 2014-5-8 22:16:28

虽然不是这个专业,也支持下

xiaobaixiaobu 发表于 2014-5-8 22:35:58

是否梁柱交线处理?

xyp1964 发表于 2014-5-8 23:05:49

;; 山寨一个

freeok 发表于 2014-5-8 23:19:11

很给力啊!!通用函数必须一起下载加载吗?

enn09 发表于 2014-5-9 08:46:53

很给力啊!!比我以前用的那个好~

adc 发表于 2014-5-9 10:35:13

赞一个~~~~~~~~~

空谷藏 发表于 2014-5-9 16:49:04

昨天说期待梁线今天就有了,感谢楼主无私
页: [1] 2 3 4
查看完整版本: 梁线绘制源码放送(支持UCS,动态偏心或居中布置、宽度设置)