程序实现AutoCAD Map3D 中的图形清理(MapClean)自动化

简介:


我们在进行数据采集后,经常需要对数据做清理工作以建立拓扑。比如在从图纸数字化的过程中,经常会有些线段该接上的而没接上,或者有短小露头的地方等等。Map3D中的图形清理(MapClean)就是自动化完成这些数据修复,从而为建立拓扑做好准备的工具。这篇文章中我就来说说 Map 3D中的图形清理工具的用法,以及如何通过程序的方式实现图形清理的自动化。

 

比如我们有下面的地图,比如是河流吧。其中我选中的线段明显是在数字化时画出了头,应该把小头头去掉。还有一个是没画到头而接不上。这种问题在数字化时是非常常见的。图形清理工具就是解决这些问题的。

image

 

要调用图形清理工具,直接在命令行敲“MapClean”即可调出图形清理向导。这里首先要选择要操作的对象,可以选择全部或者手动选择。

image

然后是要进行的图形清理工作项,Map 3D以及内置的多种工作项,能够解决工作中遇到的绝大多数图形问题。比如我们这里添加了一个从交点打断的工作项,然后再把小于指定容差的小对象删除。对应容差的设置你可以通过点pick按钮在图面上指定。你可以添加多个,并设置他们的执行顺序。每个工作项的含义大家一看便知,如果有中文版就更方便了 :)

image

这里指定是对原数据直接进行修改还是创建一个拷贝

image

 

最后你还可以把这些操作步骤保存为脚本文件方便重复使用。通过Save或Load按钮即可保存或加载脚本文件。保存的脚本文件其实是一个扩展名为dpf的xml文件,你可以用写字本打开来查询它的内容。看一下执行结果如下,当然你可以继续增加新的工作项把每接上头的那些接上。

image

 

好了,界面用法很简单,下面我们看看如果用代码来实现。我们需要用Visual Studio编写一个自定义的命令,在执行这个命令时自动调用我的dpf文件执行图形清理工作。

首先打开VS2008,创建一个Class Library类型的项目,并添加Map 3D 相关的引用。我们需要添加如下引用,这些文件都在Map3D的安装目录下:

acdbmgd.dll

acmgd.dll

ManagedMapApi.dll

注意要把引用的Copy To Local设置为false。

image

 

好了,代码最有说服力,直接看代码吧:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Autodesk.Gis.Map.Topology;
using Autodesk.AutoCAD.Runtime;
using Autodesk.Gis.Map;

namespace MapCleanDemo
{
    public class Class1
    {
        [CommandMethod("MyClean")]
        public void DrawingCleanUp()
        {

            Autodesk.Gis.Map.Topology.Variable cadAction = new Autodesk.Gis.Map.Topology.Variable();
            //加载一个dpf脚本文件
            cadAction.LoadProfile(@"myclean.dpf");
            //如不用脚本文件,也可以通过代码定义图形清理工作项
            //....


            //为避免内存泄露,TopologyClean对象使用完毕后要调用dispose()方法释放,也可以采用using语句
            //The instance of this class should be released by explicitly calling Dispose() in order to avoid memory leak. 
            //See also 'using' keyword in C# and VB.Net. 
            using (Autodesk.Gis.Map.Topology.TopologyClean cadCleanobj = new Autodesk.Gis.Map.Topology.TopologyClean())
            {
                //TODO:在运行这个命令之前需要打开dwg文件,在这里增加一个判断语句
                //Open a file first to avoid MapTopologyException
                cadCleanobj.Init(cadAction, null);

                cadCleanobj.Start();
                cadCleanobj.GroupNext();

                while (!cadCleanobj.Completed)
                {
                    cadCleanobj.GroupFix();
                    cadCleanobj.GroupNext();
                }
                //提交所做的更改 Commit the changes
                cadCleanobj.End();
            }

        }

    }
}

 

编译后,我们在Map 3D中敲netload加载我们生成的dll文件,然后键入MyClean即可完成图形清理的自动执行。需要注意的一点就是在执行这个命令之前,要首先打开dwg文档,否则会有MapTopologyException例外发生。为了程序的健壮性,最好在前面加上判断条件。

 

除了加载dpf脚本的方式外,还可以用代码定义图形清理工作项,具体的可以参考SDK的帮助文件sdk.arx.net.dev.chm,比如在帮助文件中有下面一小段代码:

 

   1:  Dim toleranceVal As New DatabaseServices.TypedValue _
   2:  (Autodesk.AutoCAD.DatabaseServices.DxfCode.Real, 25.5)
   3:  Dim toleranceSetting As New DatabaseServices.ResultBuffer
   4:  toleranceSetting.Add(toleranceVal)
   5:   
   6:  Dim blocksVal As New DatabaseServices.TypedValue _
   7:  (Autodesk.AutoCAD.DatabaseServices.DxfCode.Int16, 1)
   8:  Dim blocksSetting As New DatabaseServices.ResultBuffer
   9:  blocksSetting.Add(blocksVal)
  10:   
  11:  Dim settings As New Topology.Variable
  12:  settings.Set("CLEAN_TOL", toleranceSetting)
  13:  settings.Set("INCLUDE_BLOCKS", blocksSetting)
  14:   
  15:  Dim action As New Topology.Variable
  16:  action.InsertActionToList(-1, 8, settings)

 

好了,实现也很简单,大家自己试试吧。对了,SDK帮助文件可以同ADN网站上下载,不是ADN的也可以从Autodesk官方网站的Developer Center下载。这个SDK包中包含了好的实例代码和帮助文档。下载地址是http://usa.autodesk.com/adsk/servlet/index?siteID=123112&id=868220

实例代码下载 MapCleanDemo.zip

 

先到这儿,您有任何问题可以下面评论,或者到MGDN论坛讨论。

峻祁连(Daniel Du)





本文转自峻祁连. Moving to Cloud/Mobile博客园博客,原文链接:http://www.cnblogs.com/junqilian/archive/2009/12/18/1627403.html,如需转载请自行联系原作者

相关文章
|
6天前
|
Web App开发 数据采集 JavaScript
CDP与Selenium相结合——玩转网页端自动化数据采集/爬取程序
本文介绍了Selenium、Chrome DevTools及Chrome DevTools Protocol (CDP) 的基本功能与应用。Selenium是一款开源自动化测试工具,适用于网页端应用程序测试和数据采集,具备跨平台特性。Chrome DevTools内置浏览器中,提供调试、分析Web应用程序的功能,包括元素、控制台、源代码和网络选项卡等。CDP是一套用于与Chromium内核浏览器通信的API,支持自动化测试和性能分析。文中还展示了Selenium与CDP结合使用的示例,如捕获网络请求数据和打印网页内容,并推荐了相关书籍和资源以供深入学习。
81 39
CDP与Selenium相结合——玩转网页端自动化数据采集/爬取程序
|
24天前
|
Android开发 开发者 Python
通过标签清理微信好友:Python自动化脚本解析
微信已成为日常生活中的重要社交工具,但随着使用时间增长,好友列表可能变得臃肿。本文介绍了一个基于 Python 的自动化脚本,利用 `uiautomator2` 库,通过模拟用户操作实现根据标签批量清理微信好友的功能。脚本包括环境准备、类定义、方法实现等部分,详细解析了如何通过标签筛选并删除好友,适合需要批量管理微信好友的用户。
34 7
|
1月前
|
开发者 Python
使用Python实现自动化邮件通知:当长时程序运行结束时
本文介绍了如何使用Python实现自动化邮件通知功能,当长时间运行的程序完成后自动发送邮件通知。主要内容包括:项目背景、设置SMTP服务、编写邮件发送函数、连接SMTP服务器、发送邮件及异常处理等步骤。通过这些步骤,可以有效提高工作效率,避免长时间等待程序结果。
66 9
|
7月前
|
监控 测试技术 持续交付
Python自动化测试代理程序可用性
总之,通过编写测试用例、自动化测试和设置监控系统,您可以确保Python自动化测试代理程序的可用性,并及时发现和解决问题。这有助于提供更可靠和高性能的代理服务。
68 4
|
7月前
|
机器学习/深度学习 人工智能 供应链
【专栏】阿里云RPA的Rap程序是自动化流程脚本,基于AI和机器学习,实现业务流程自动化
【4月更文挑战第29天】阿里云RPA的Rap程序是自动化流程脚本,基于AI和机器学习,实现业务流程自动化。具有灵活性、易用性、高效稳定和智能学习等特点。广泛应用于财务、人力资源、客服和供应链等领域,未来将与AI深度融合,跨平台应用,行业定制化,并构建完善生态,助力企业效率提升和创新。
526 2
|
7月前
|
弹性计算 Shell 开发工具
自动化Git仓库清理与维护
【4月更文挑战第30天】
55 0
|
7月前
|
存储 Unix Shell
Python 自动化指南(繁琐工作自动化)第二版:十七、计时、安排任务和启动程序
Python 自动化指南(繁琐工作自动化)第二版:十七、计时、安排任务和启动程序
110 1
|
7月前
|
jenkins Java Shell
一文搞定Jenkins自动化部署程序
一文搞定Jenkins自动化部署程序
140 0
|
7月前
|
Shell iOS开发 MacOS
Python 自动化指南(繁琐工作自动化)第二版:附录 B:运行程序
Python 自动化指南(繁琐工作自动化)第二版:附录 B:运行程序
85 0
|
机器学习/深度学习 算法 测试技术
【网安专题10.25】10 TitanFuzz完全自动化执行基于变异的模糊测试:生成式(如Codex)生成种子程序,逐步提示工程+第一个应用LLM填充模型(如InCoder)+差分测试
【网安专题10.25】10 TitanFuzz完全自动化执行基于变异的模糊测试:生成式(如Codex)生成种子程序,逐步提示工程+第一个应用LLM填充模型(如InCoder)+差分测试
244 0

热门文章

最新文章