明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 33368|回复: 102

[讨论] 在明经一年来的逐步总结、整理、简述算法(10.21)

    [复制链接]
发表于 2013-9-26 14:05 | 显示全部楼层 |阅读模式
本帖最后由 风树 于 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

评分

参与人数 4明经币 +2 金钱 +45 收起 理由
武林至尊李小龙 + 20 很给力!
bzhjl + 20 很给力!
spp_wall + 1 + 5 很给力!
zctao1966 + 1 神马都是浮云

查看全部评分

"觉得好,就打赏"
还没有人打赏,支持一下
发表于 2018-11-16 10:04 | 显示全部楼层
2007 32位 无法加载是怎么回事
发表于 2017-12-22 22:50 | 显示全部楼层
非常好的学习资料,香楼主致敬
发表于 2017-12-27 09:51 | 显示全部楼层
好东西 。就是币还少
发表于 2013-9-26 15:49 | 显示全部楼层
抢个沙发吧,楼主的心态是我所钦佩的,我也在尝试使用楼主为我们提供的插件。。。
明经有你更精彩!
 楼主| 发表于 2013-9-26 16:05 | 显示全部楼层
xiaxiang 发表于 2013-9-26 15:49
抢个沙发吧,楼主的心态是我所钦佩的,我也在尝试使用楼主为我们提供的插件。。。
明经有你更精彩!

谢谢了,心态
发表于 2013-9-26 16:11 | 显示全部楼层
能否弄个动画演示,你说了一堆,看得我都晕了

点评

同感,前面很认真的逐字逐句在看,后面的就一带而过了,没看弄明白楼主的意思。但是感觉楼主应该总结帖和求助帖分开来发比较好。  发表于 2013-9-27 21:19
发表于 2013-9-26 16:19 | 显示全部楼层
可惜,俺基本用的是04和06
 楼主| 发表于 2013-9-26 16:21 | 显示全部楼层
自贡黄明儒 发表于 2013-9-26 16:11
能否弄个动画演示,你说了一堆,看得我都晕了

新手,除了截图,动画不会做,写的除了介绍以外,还有是留给自己以后看的,而且前面第一个功能cad里不常用,一般都是gis里做好导到cad里的,纯属捣腾。第二个功能明经见过有lsp程序。可能实现的算法不一样。
 楼主| 发表于 2013-9-26 16:26 | 显示全部楼层
图怎么这么大呢,由编辑不了[em0]。
发表于 2013-9-26 16:47 来自手机 | 显示全部楼层
支持,顶,楼主是做测绘的?
 楼主| 发表于 2013-9-26 21:41 | 显示全部楼层
004 发表于 2013-9-26 16:47
支持,顶,楼主是做测绘的?

不是学生时候搞过gis,工作时就只用cad,转型
 楼主| 发表于 2013-9-26 21:57 | 显示全部楼层
hao3ren 发表于 2013-9-26 16:19
可惜,俺基本用的是04和06

抱歉啊                  
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-4-27 08:04 , Processed in 0.548418 second(s), 38 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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