- 积分
- 14512
- 明经币
- 个
- 注册时间
- 2011-12-24
- 在线时间
- 小时
- 威望
-
- 金钱
- 个
- 贡献
-
- 激情
-
|
本帖最后由 风树 于 2014-7-12 12:22 编辑
我是从去年开始才经常浏览明经网站的,出于兴趣,也是从那时候才开始了解cad编程,为了只是解决工作中碰到的问题。有时不能不机器式的制图确实挺烦人的,所以才在明经论坛里逛游。很多情况,lsp版的小工具能应急的解决急需解决的问题。由于以前感性趣的是c++,所以自己没有选择lsp作为工具。但我看到有能用得上的lsp程序都会下下来保存。感觉一个人的能力有限的,又不是专业搞这个,哪个工具并不重要,不同编程语言各有长短,只是适用性不同而已,重点只是能及时解决当下的问题以及解决问题的思路。
为了制图时能偷懒,首先找的就是群众基础较大的论坛,选择较多人用的语言工具,尽快的解决问题。工具是什么语言编的并不重要,算法是一样的,归根到底能解决问题才是重要的。
看到论坛的各种小程序,感慨明经lsp版底蕴如此深厚,各行各业的同胞们都在通过不同途径去分享自己的资源、探讨解决问题的方法。也许途径不一样,但能解决当下的问题,这也是应该令人高兴的。看来其它论坛也不用瞎逛了,有好的资源可能在这里就有转发的。
接触这个源自于兴趣。因此借用lsp版总结一下自己一些整理的内容。雁过留声,人过留影,希望几十年以后还能在明经上看到当年自己的影子。那应该是挺令人高兴的事,想一下,挺轻松的。
写这贴子的目的,就像是日记一样,留到以后留念的。有不足之处请宽容。
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
完整代码见下帖:
代码生来就是为人们服务的,它喜欢干的事就由它去干(部分整理)
http://bbs.mjtd.com/forum.php?mo ... 8960&fromuid=408117
最终实现内容及代码说明见:
http://bbs.mjtd.com/?408117
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
11.1: (统一更新,如图)
命令27 : 指定最大三角形生成面积的 一般Delaunay三角剖分
命令33: 按用户输入的点进行非增生性的一般Delaunay三角剖分
如果输入的点带高程信息,可以计算表面积和体积;体积计算使用二重积分。
如图:
10.30:对命令25(填充图案的划分)修正,并增加“挖洞”功能(统一更新,如图)
10.29:简单标签栏(统一更新,,命令31调用,命令32关闭)
提供多文档切换使用,简简单单。
10.28:常用属性查看(统一更新,命令31调用,命令32关闭)
用cad官方例子改的:
方便查看基本图元的一些常用属性。
10.21:
主要更新:
1、修正工具箱在不同显示器下的显示大小问题
2、完善命令22的查图功能,简化操作,修正错误,提高速度。优化界面。
命令 26:对重叠文字的位置查找(集成于命令22)
参见:http://bbs.mjtd.com/forum.php?mo ... 7975&fromuid=408117
命令 25:填充填充图案的划分
用户提供一根或多跟线作为填充对象的新边界,划分填充图案。
实现过程:将用户选定的线和填充体原来边界线求交点、打断、造面域;删除原填充体,并按生成的面域,继承原填充体图形样式重生成新的填充对象。
命令 24:提取填充边界
刚才看到以前网上收集下来的一个提取填充图案边界的代码,向原作者致敬;原来代码能将填充图案的边界分段提取出来,还是把它改成提取闭合边界吧。暂时没发现具体应用方向,但还是放到这里。
日志:
1、还是做成面域好了,面域边界线也有线形、颜色等 选项,偷个巧。
2、原来作者代码:http://bbs.xdcad.net/thread-667785-1-1.html
3、但原来代码在处理填充图案边界含有圆弧时,在某种情况下有部分圆弧没法正确生成实体,变通解决。(从填充边界提取出来的部分圆弧(AcGeCircArc3d),按常规正常的途径不能生成AcDbArc实体,如命令 25的图。)
2013.10.7: (重新编译完成,除命令19、22在cad2007里暂不能实现外,其余各功能2007-2013均能使用,如有问题请反馈)
命令22:改图小帮手
说明见:改图小帮手 http://bbs.mjtd.com/forum.php?mo ... 7975&fromuid=408117
命令21:在曲线相交位置画圆
说明:1、不更改原图,圆的可半径自定义
2、如果选中的对象中含参照,则参照内的曲线同样处理。
如图:
命令20:用一条曲线打断一个曲线集
说明:1、先选择需要打断的曲线集,但请不要选择用来打断的曲线。
2、如果选择范围内有参照,参照不做处理
如图:
命令19:局部两倍放大
说明见:改图小帮手 http://bbs.mjtd.com/forum.php?mo ... 7975&fromuid=408117
2013.10.7:
发现原拓扑造区不能支持三维多段线,已改正,现经验证的有直线、多段线、三维多段线、样条曲线、圆、圆弧、椭圆;二维多段线没试。
2013.10.6:
昨天,对改动未作详细检查,犯了低级错误,修正后效率还能接受,如图。
还是昨天的数据,开始造区,共耗时35秒,其中相交计算(虽然之前已经打断过一次,但重新运行时该步骤也不可避免,程序不知道你打断过而且没有改动)、打断(实际无操作)约13秒;造区约22秒,能接受了。在相交计算的过程中,重线检查等辅助项占用约6秒;造区时也多做了一次重线检查等辅助操作。
2013.10.5:
cad曲线求交点的过程中,不管是lsp还是arx,最费时间的就是求两条曲线相交的命令代码,直线、多段线等还好,样条曲线速度就慢多了,属于底层问题;要提高效率,建立空间检索数据库,图元间的相交预判,尽量减少求两条曲线相交语句的运行次数,应该是优先考虑的。
整理时,在原来求曲线交点的代码中新增:每求出两条曲线的交点,同时登记在对应曲线的断点登记表中;并在求交点的循环中增加将已经比较过的曲线排除的判断语句,提高曲线相关性很大时候的交点查找效率。
经过初次打断形成的3万7千多条直线段,再次运行打断命令,在空间数据库起到减压作用下,运行近 5分钟,如果是样条
曲线那就更那个了。
从书上及网上看到的有关求交的简单的优化方式基本也试着用上了,差别只是代码的实现效率问题。也不钻牛角尖了,有时处理特殊情况的代码也是影响效率的因素之一( 如 曲线自相交、闭合不闭合、特殊情况下的离散处理等),就当作练习了。
2013.10.2:
放假了,整理一下,添点内容,增加其它版本的支持,修正bug,欢迎指正。
命令17:线段临近端点按容差值合并
1、可以处理二维多段线、三维多段线等,但暂时不能对圆弧端点进行处理
2、只对端点起作用,曲线是闭合非闭合均可。
3、合并后的点位于合并前各点围成的近似形心处。
4、可同时选择所有曲线,能进行snap的位置均能处理。
命令16:删除重合线-可选容差值
分离于命令2。可能做图形预处理能用得上。功能如图。
实现过程:将每个图元依次加入空间库,对每新加入的图元的空间范围按容差值扩大后,作为检索范围,检索出和它相关的图元,再初步排除完全不相关的部分,最后相互比较;曲线离散后比较,被容差包含的排除;精度和速度目前还没想到办法兼顾,因此单曲线最多设定为离散成100个点。
特点:
1、对圆、弧的判断没加入容差考虑范围,圆、弧心相同,含有包容或被包容关系时才考虑删除处理
2、圆、弧和其它曲线类不认为存在重合关系
3、不同线型、颜色、线宽,不在同一图层的不做处理,避免误删。
4、造区分析时简化了该过程。
命令15:求图形的最小包围矩形
该命令求曲线类、文字类组成图形的最小包围矩形。算法是:离散曲线成点集(文字类为离散其边界框),从点集求凸包,然后遍历由凸包点构成的多边形的每条边,求出每种情况下包围矩形的面积,对结果排序 得到最小包围矩形,算法精度有一部份和离散程度相关。算法实现来源网络,原代码感觉有明显的c语言风格,就把它改动得效率低些[em0],也放到这里。是计算几何中的基本问题之一,如图。
命令13:标注序号
站内也有挺多的。
特点:
1、输入带有记忆功能,数据选择性的保存到C:\Cad_tool_bar\平面坐标.text文件中,保存时记录保存时间,且添加到文件开头,原有数据不动,用分隔符号分隔;
2、能指定容差范围,用户调整。暂时只能标注圆的序号,如桩号,其它的同理。3、鼠标指定标注主轴方向。4、提供4种s型的基本标注形式,但主轴线可自己定义(见图):
实现:
1、按从图上指定的两点作为新坐标系y轴,以任意一点旋转新坐标系,使其y轴平衡与原图y轴,对输入的数据先按变换后的x坐标排序,容差主要按x坐标对其分组。然后分别对每组的坐标按y方向排序(使用系统精度作为容差值)。
10.9发现导出坐标文件时没有考虑用户坐标问题,以更正。
容差失败的:
调整容差后的:
调整标注主轴方向的:
命令12:
挺好玩的功能,选择曲线范围,生成包围线,可指定向外偏移距离。
原理:将选择的曲线离散为点,对所有点求凸包,用凸包内的点生成多段线,然后指定向外偏移距离,生成范围线。
应该还可以做的:考虑文字的 影响。
命令11:
查找对话框,从命令5而来,增加显示追踪、查找替换结果提示。
命令10:提取外环
从命令2分离出来的。
命令8:
自动连线,挺好玩的。选择需要连线的全部曲线,选中其中一条,程序会搜索所有和该条曲线相接的曲线(自动排除不相关的)。
1、搜索停止条件:
1:在查找过程中没有找到和该曲线相关的曲线
2:在查找过程中重新连接到自身的另外一个端点
3 : 寻找过程中碰到路径上的某个点有两条相关的线
2、特点:
1:不更改原图,用多段线生成连接路径。
2:不受画图时曲线方向影响。
3:不受不相关曲线影响。
命令7:
选择曲线,对所选取的曲线,在其相交位置打断。 从命令2分离出来的。
命令6:
动态标注平面坐标,论坛有挺多类似的。
特点:
1、动态显示 ,可拖动,输入过程中能随时改变输入字高和精确度,有记忆能力
2、标注后如变换cad坐标系,刷新,能显示在当前坐标系下坐标。
命令5:查找、替换(以前用来练手的)
1、样子不好看,cad有这个功能,纯属用来练习对话框类的使用的
2、热键为alt+z,单、多行字体均可。
命令3:曲线类拓扑造区
1、简介:框选曲线范围,建立曲线的空间数据结构,删除重合线,相交判断、打断于交点、删除不能构成区域的多余线,拓扑造区,选择范围内的曲线所能构成的封闭区域将建立面域对象,原图不做改变。这是gis方面的功能,在gis软件都有,基本算法和教科书上相同,只是自己在cad上做了实现。使用的是四叉检索树,拓扑分析类是从网上一个博客里下载的类,但原来的版本在处理cad内的数据是会随机出现错误,经修改后问题解决,修改后的内容也反馈给原作者,该类算法效率还可以的。有时感觉写代码难,但读代码也可能也不容易。
2、 对原图不做修改
3、使用版本
cad2007-cad2013
4、日志:
9.27,整理时发现,因某个条件辨别式的关系,程序一直进入为解决小尺度范围下的重建算法(处理曲线在3个图形单位长度以下),所以大图形的处理可能会出现随机错误,属计算精度范畴;辨别两个圆是否相同的辨别式有误,曲线包含、与被包含辨别有bug,已修正。两条曲线有部分相交,可以删除相交部分。
9.29,发现椭圆未作处理,一部分修正,打断功能正常,但造区时,不能准确获得被打断后的椭圆曲线终点坐标,待改正。
10.1,椭圆造区问题解决。到目前为止,该类已能处理直线、多段线、样条曲线、椭圆、圆弧等曲线类,能删除被包含及完全一样、零长度(小于某值)的曲线,曲线相接处能容差。希望能尽快解决cad2010以下版本的问题。
10.2,已发现的问题已经解决了。
命令2:
1、功能:让框选的文字(单、多行),居中于和它相交面积最大的由曲线构成的封闭区域内,非曲线类不行,如阵列矩形线。
2、特点:不更改块和非块内曲线,不生成其它对象。
3、应用举例:
制图时,选用的图框为块参照,假如你需要用单、多行文字填写标签框的内容,文字不在块内,可以尝试使用。
4、操作步骤:
1)按提示框选曲线范围
2)按提示框选要居中的文字(文字要选两次,分单、多行,直接框选就行,不用区分单、多行,因为实现函数选择制作成了模版)
3)操作完成
5、实现原理:
程序在你框选的曲线范围内提取所有的曲线及参照对象,并遍历参照(含镶嵌参照),提取所有的曲线;通过获得的曲线,建立空间数据库;在空间库下,逐个文字地检索出和它交集最大的面域,让该文字居中于该面域的质心(某些规则图形质心和形心一致,如矩形等),如果没有相交的面域,则不处理。
6、暂时的问题:是参照内全曲线选取,未能实现对参照内曲线按框选范围提取。因为使用acedSSGet获取对象集时暂时不知道如何获得选取范围数据。
7、应该还能有的实现:对块属性文字的居中。
8、其它:要实现左对齐、右对齐的,可以在居中后选用其它的lsp工具,加到工具箱里就行。
命令1:工具箱:
工具箱详细说明请参照:
让刚接触lsp的人都能制作自己的工具箱:2007-2013版,新加特性,简化操作,重新说明
http://bbs.mjtd.com/forum.php?mo ... 7678&fromuid=408117
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?注册
x
评分
-
查看全部评分
|