【源码】楼梯绘制v3.21版,优化输入方法,功能增加,操作减少
本帖最后由 kele99kele 于 2015-8-18 14:52 编辑持续完善中……
公告:
今后最新版只提供免费下载vlx、DCL文件及所有的支持文件,
次新版本的LISP源码开房下载但收1个明经币)
之前版本的所有源码及DLC文件均为免费下载。
ps:我会采用更新功能,用币下载的以后升级多少版本都是免费升了,我升级的勤快的
话打赏几个币哦。
更新至3.2版本。(2015-08-18)
3.21版本更新内容
本次更新工作量很大,但用户可能感觉变化很小,难度在于vector_image函数的坐标表转化上,由于之前程序运行
流程的限值,有些楼梯是分3次分别绘制的,这给vector_image函数的运用带来了很大的麻烦,不过好在解决了,
感觉解决不掉了,就要放弃的时候灵机一动,解决以后半宿兴奋的睡不着,哈哈,都是废话了,其实这次的优化改
动对用户体验真是没什么。好吧,言归正传,本次更新了如下内容:
1.重写img缩略图,不用再把sld文件考来考去了,彻底丢弃它吧,现在显示方式为vector_image实时绘图,只要参数
变化,不管是板厚变化、踏步数变化还是什么别的,统统在img缩略图区域自动显示出即将绘出的图形,好吧,套用
流行用语是所见即所得哦。
2.增加了一个参数,最小梯板厚度设置
3.其他……好吧……这次其他的没什么变化,调整了下dcl img区域的颜色又改回来算不算?
3.2版本更新内容
a.本次更新不涉及算法,结构,仅对对话框的参数输入进行优化,尽量减少键盘及鼠标操作,节约绘图时间。
b.本次更新参考了cjrun的“剖面楼梯”工具,借鉴了部分功能(鼠标量取尺寸、左右方向、踏步数计算等思路)
1.梯板长度及爬高可通过鼠标量取输入,减少键盘操作。
2.踏步数可根据所输入的参考踏步高度,以不超过所输入的参考高度为原则,自动划分踏步数量。
3.梯板厚度可根据梯板跨度、高度因素,自动计算踏步板厚度,结果以5mm为一档递增。(重新优化成10mm一档,5mm用到的人不多)
4.取消左右方向填写,改为绘图时鼠标点击指定。
5.取消所有下拉列表,改为单选框,减少鼠标点击操作。
6.增加常用AT\BT\CT\DT的快速选择,制作为12个快速选择模板,减少常规楼梯的类型选择时间,一建即可设置。
7.增加常用类型楼梯的缩略图,避免选择类型与需求不符,重绘浪费时间。
8.常规类型以外的楼梯,同样可以通过自定义的方式予以绘图,保留原有楼梯类型数量不变。
9.优化菜单布局及action,取消之前的action闪退重进的选择方式,所有enable、disabled实现方法优化。
10.建筑专业的总是说这个工具他们没用,天正的楼梯工具比这个好,好吧,我承认,不过这次版本其中一个功能建筑专业也可以用哦,板厚计算功能,不用问结构专业了,点点鼠标就知道梯板要做多少厚度了,好吧,功能不多,不过总是天正没有的嘛,呵呵。
再次感谢cjrun上传代码,希望有类似功能的插件互相借鉴,多提宝贵意见。
另外看了cjrun的代码,有点羞愧难当,人家的代码只有300行,实现了我1200行代码的大部分功能,这就是实力了,我的代码纯粹是体力活,人家的才是技术活。
3.0版本更新内容
1.增加了15种梯板+梯梁+平台板的绘制
2.镜像、缩放的坐标均采用计算得出,不再使用系统的MIRROR、SCALE命令,采用ENTMAKE函数生成,提高绘图速度。
3.全面改写坐标点计算公式,坐标计算更简练,提高效率。
4.重新制作DCL,参数达到20个,平台处梯梁与踏步板可以分别定义是否绘制,是否填充,上下梯梁、平台板均可以分开定义。如果连是否填充、镜
像、缩放的COND都计算在内,可绘制60种以上的各种自定义楼梯,单跑梯段凡是能够想到的类型全部涵盖,当然啦,基本类型只有15种,其他的采
用嵌套COND来实现,否则代码长度会超过1500行啦,现在的代码长度有700行。
5.采用多个自定义函数程序,大大减少了代码长度和插件体积。
6.剩下的就靠大家自己摸索了,通过不同参数的组合形式,可以绘制出各种不同情况的楼梯剖面。
20150729 1:40 编程日记:为了增加不绘制梯梁只绘制梯段的功能,索性就一起加了绘制平台板的功能,发现原来的编程结构不适合增加这么多的功
能,代码要超过1000行,有点小小的洁癖,大刀阔斧的从底层改起,基本上是重写了所有代码,包括DCL也重新编写了现在参数数量达到了25个,各
种情况排列组合有10类,只好又动脑筋编写通用子程序,这么多天没更新不是没管他而是所有精力都放在了重写代码上,这次改的是够彻底的,连各
坐标点的计算方法都改掉了,草稿纸都用掉了十几页,值得高兴的是所有子程序都已经写完并调试好了,DCL接口也编写调试完毕,主程序就是对各种
情况的选择运行问题了,估计还要2-3天就可以了,代码行数现在是780多行,估计最终优化完毕会有600行左右,翻了下最初的1.1版本,只有50行,
真心累啊,不过看着之前设想的功能,一步步实现,虽然累但是还是很满足的。
x.x版本前瞻:
1.查找资料,看能不能给梯段增加各种属性,为将来进一步开发做好接口准备。(这个有点难,自定义实体功能恐怕比较难搞,而且对cad的版本有
限制,近期目标是先做ini文件凑合一下吧,还有版本稳定以后把DCL和PAT文件做到LISP里面临时生成,省的考来考去的,现在做进去版本升级很难
改)
2.3版本前瞻:(这个有点改过了,直接重写了90%的代码,下个版本就3.0吧,改动实在太大了,感觉完全是两个插件了)
1.考虑增加不绘制梯梁,只绘制梯段的选项。
2.考虑增加绘制梯梁+平台板的选项
2.2版本更新内容20150725:
1.全面采用entmake函数创建图元,提高生成速度,100个踏步的楼梯生成时运行顺畅。
2.梯梁边上顶点增加多段线顶点,方便捕捉、拖拽。
20150725 21:51编程日记:所有多段线绘制工作的代码全部改用entmake函数,大大提高了绘图效率,绘图起始点修改为自梯梁边,更新镜像、缩放
对象的参照点,值得一提的是,镜像命令并非采用mirror,而是所有坐标点在list组下全部重新依据参照点计算镜像后的坐标,镜像后的图形同样采用
entmake函数创建,现在绘制100个踏步也不会出现卡顿、闪屏现象。绘制的多段线增加了上下梯梁边的顶点,方便拖拽图形。
20150725 3:25编程日记,试验了entmake函数按生成多顶点多以线楼梯的可行性,初步确定改用entmake重新编写程序并将涉及到的表操作函数调
试完毕,整装待发。最近发现影响编写进度的不是没有思路而是困扰在语言上,需要话费大量的时间用来熟悉语言,查阅函数资料。
2.1版本更新内容20150723:
1.解决上折板下端点在折板宽度过小的情况下端点坐标会超出梯梁边线的问题,重新编写上折板下端点的坐标计算方法。
2.增加绘图比例以满足大样图1:30或剖面图1:50等情况的自动绘制。
3.增加填充材料为钢筋混凝土的选择项,现在填充选项为3个,一个不填充,一个涂黑,一个填充钢筋混凝土。
4.解决钢筋混凝土填充图案个版本cad不统一的问题,新建一个名称为nice_rc的填充定义文件,将文件拷贝到所使用cad的搜索支持路径里面即可。
ps:我们的终极目标是实现全自动楼梯结构剖面施工图绘制,节省广大
结构佬每个工程画楼梯剖面图3个小时的时间,万里长征开始了第一步……
psps:另外,欢迎各种大神提出好的优化思路和做法,十分感谢
pspsps:感谢5楼lucas_3333同学提出的优化建议,3.0版本已采纳并加入程序。
pspsps:感谢25楼clinber同学提出的优化建议,2.0版本已采纳并加入程序。
本帖最后由 lee50310 于 2024-9-23 11:50 编辑
chenyizhen28 发表于 2024-8-2 11:46
我下载他3.0的没办法使用。运行没反应
下載3.0版 無反應處理方式:
1.下載來3.0版lsp 及 dcl2檔
分別用 記事本開啟 後另存新檔 在下方 將編碼 UTF-8 改為 ANSI 存檔即可
2.在AutoCad的 command: op 輸入 op 指令會出現選單
找到支援檔案路徑 選擇 增加按鈕
將你下載所存放的檔案路徑貼附 存檔即可
3.載入 nice_hualouti_v3.0源碼.lsp
4.輸入指令:nice_hualouti
arcers 发表于 2019-5-6 16:39
楼主威武,基于3.0版界面优化,依然无比强大。
我下载他3.0的没办法使用。运行没反应 谢谢楼主,我是来学习的 楼梯生成工具,作为CAD新手还没涉及到这个程度,不过不妨碍我来跟贴支持。 本帖最后由 lucas_3333 于 2015-7-20 08:56 编辑
粗略的看了下楼主的程序
虽然所有变局部变量都定义在主函数下是可行了, 但为何不做到每个子函数都有自己的局部变量呢?
另外我觉得这些子函数都可以作为局部子函数 , 通常来说用局部子函数会比全局函数慢,但是于这种小程序是没有一点影响的
个人建议这样 (欢迎各位大师拍砖)
(defun main (/ v1 v2 _subfun1 _subfun2)
(defun _subfun1(a0/ v2 v3)
(setq a0 (.....))
......
(setq v2 (......))
(setq v3 (......))
......
V3
);;end_defun_subfun1
(defun _subfun2(/ _subb v4 v5 v6)
(defun _subb(a0/ a b c)
(setq a (...))
(setq b (...))
(setq c (* (atoi a0) 10))
......
c
);;end_defun_subb
(setq v4 (.....))
(setq v5 (*(atoi v4) 13))
(setq v6 (_subb v5))
......
V6
);;end_defun_subfun2
(setq v1 (......))
(setq v2 (_subfun1 v1))
......
......
);;end_defun_main 学习一下. lucas_3333 发表于 2015-7-20 08:54 static/image/common/back.gif
粗略的看了下楼主的程序
虽然所有变局部变量都定义在主函数下是可行了, 但为何不做到每个子函数都有自己的 ...
定义在子函数下是没问题的,主要目的也就是为了释放变量内容,为了方便统计一共用了哪些变量,所以写到了一起,另外写到子函数里面我理解是某些大型程序,难以避免变量名重名的问题,每个子函数分别定义可以在重名的情况下各个子函数独立运行,对于我编写的这个小东西,还是以方便为准设置的,谢谢不吝赐教,以前我也没想这么多的。 起步方向貌似现在不起作用看了一下主程序里面还没有这个变量 后续版本会加上的,预留一个接口:) clinber 发表于 2015-7-20 10:00 static/image/common/back.gif
起步方向貌似现在不起作用看了一下主程序里面还没有这个变量
已经加上方向的判定了,昨天有这个思路,先把菜单文件加上了功能,今天才把lisp里的判定加上。 支持下不是本专业的