明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 9188|回复: 31

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

[复制链接]
发表于 2014-5-8 21:45 | 显示全部楼层 |阅读模式
本帖最后由 林霄云 于 2014-5-8 21:49 编辑

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

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

  6. (setup "beam_in"); 设置图层
  7. (setq en (make_line  ptlist-w (getvar "clayer") ))

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

  11. ;添加到选择集 en-a1 en-a2.
  12. (setq ss (ssadd))
  13. (setq ss (ssadd en-a1 ss))
  14. (setq ss (ssadd en-a2 ss))
  15. )
至于调用函数
  1. (defun C:bl( / en  ptlist-w  ss flag num-pt wid-flag wid-temp)
  2. ;BEAMLINE-L方式
  3. ;Designed by 林霄云 2014年2月26日
  4. (setq ss (ssadd))
  5. (setq flag t)
  6. (setq num-pt 1)
  7. (setq wid-flag nil )


  8. (setq ptlist-w (getbeampoint))

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

  10.       ;捕捉左键,进行缩放测试
  11.       (prompt "\n左击循环方式调整梁位置 or U撤销 or 键入梁宽 or 右击退出")
  12.       (while (and (setq ptr (grread t 15 2))
  13.                     flag
  14.                  )   
  15.                  ;(redraw)
  16.       (cond ((= (car ptr) 3);_Mouse Left button
  17.          (if ss
  18.          (progn (ss_delete ss)(setq ss nil)(setq num-pt (1+ num-pt)) (setq ss (make_beam ptlist-w hnu:beamwid num-pt))) ;切换标志,删除,生成
  19.          ) ;左键进行0.5倍缩小,测试ss选择集方式可行。
  20.            ));cond 左击事件
  21.         (cond ((= (car ptr) 2);键盘事件   
  22.          (if (or (= (ascii "U") (cadr ptr)) (= (ascii "u") (cadr ptr))) (if ss (progn (ss_delete ss) (setq ss nil) (setq flag (not flag)))))
  23.          (if  (<= (ascii "0")(setq wid-temp (cadr ptr))(ascii "9"))
  24.           (if wid-flag  
  25.           (progn (setq wid-flag (+ (* 10 wid-flag )(- wid-temp (ascii "0"))))(princ (itoa (- wid-temp (ascii "0"))))) ;处理其他数字
  26.           (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")))))));处理第一个数字
  27.           )
  28.           ; (if wid-flag (princ (itoa wid-flag)));回显
  29.           );处理输入数字情况
  30.          (if (or (= 13 (cadr ptr)) (= 32 (cadr ptr)))
  31.           (if wid-flag
  32.           (progn (setq hnu:beamwid wid-flag)
  33.                (princ (strcat "\n当前梁宽设置为:" (itoa hnu:beamwid)))
  34.                (if ss  (progn (ss_delete ss) (setq ss nil)))               
  35.                (setq ss (make_beam ptlist-w hnu:beamwid num-pt))
  36.                (setq wid-flag nil)
  37.                )
  38.                (setq flag (not flag));退出循环
  39.            )
  40.            )
  41.            ));cond 键盘事件
  42.       (cond ((or (= (car ptr) 11) (= (car ptr) 25))           
  43.       (if wid-flag
  44.           (progn (setq hnu:beamwid wid-flag)
  45.                (princ (strcat "\n当前梁宽设置为:" (itoa hnu:beamwid)))
  46.                (if ss  (progn (ss_delete ss) (setq ss nil)))               
  47.                (setq ss (make_beam ptlist-w hnu:beamwid num-pt))
  48.                (setq wid-flag nil)
  49.                )
  50.                (setq flag (not flag));退出循环
  51.            ))  ;_Mouse Right button
  52.            );cond 右击事件
  53.            );while
  54.       ;捕捉左键,进行缩放测试
  55. (princ)
  56. )
必须强调的是,
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)

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x
"觉得好,就打赏"
还没有人打赏,支持一下
发表于 2018-9-23 16:34 | 显示全部楼层
楼主目前的程序都是针对平法画图方式,有没有批量梁剖面配筋图得程序呢   纵剖那种
发表于 2018-5-16 14:53 | 显示全部楼层
bte增加梁截面文字为何无法操作?
发表于 2019-1-6 02:15 | 显示全部楼层
很强大,支持一个,赞!
 楼主| 发表于 2014-5-8 21:51 | 显示全部楼层
再加两张演示!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x
发表于 2014-5-8 21:57 | 显示全部楼层
先占座再后说.
发表于 2014-5-8 22:16 | 显示全部楼层
虽然不是这个专业,也支持下
发表于 2014-5-8 22:35 | 显示全部楼层
是否梁柱交线处理?
发表于 2014-5-8 23:05 | 显示全部楼层
;; 山寨一个

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x

点评

我提供的是一种方式。新的方式。你那种模式确实是山寨。与天正之流无异。  发表于 2014-5-9 18:51
发表于 2014-5-8 23:19 | 显示全部楼层
很给力啊!!通用函数必须一起下载加载吗?
发表于 2014-5-9 08:46 | 显示全部楼层
很给力啊!!比我以前用的那个好~
发表于 2014-5-9 10:35 | 显示全部楼层
赞一个~~~~~~~~~
发表于 2014-5-9 16:49 | 显示全部楼层
昨天说期待梁线今天就有了,感谢楼主无私
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-3-29 09:35 , Processed in 0.242096 second(s), 33 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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