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

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

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

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

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

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

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

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

acdbmgd.dll

acmgd.dll

ManagedMapApi.dll

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

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

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 MapTopologyExceptioncadCleanobj.Init(cadAction, null);cadCleanobj.Start();cadCleanobj.GroupNext();while (!cadCleanobj.Completed){cadCleanobj.GroupFix();cadCleanobj.GroupNext();}//提交所做的更改 Commit the changescadCleanobj.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,如需转载请自行联系原作者

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

  1. Autocad、中望CAD自动加载程序研究(注册表法、acad.rx、acaddoc.lsp或acad.lsp)

    Autocad.中望CAD自动加载程序研究(注册表法.acad.rx.acaddoc.lsp或acad.lsp) 一.使用注册表 假设你的arx文件名字是aaa.arx绝对路径是c:\aaa.arx ...

  2. ArangoDB AQL中的图形绘制遍历

    原文:Graphs in AQL AQL中的图形 在ArangoDB中可以使用多种方式处理图形,以及使用AQL查询图形的不同方法. 管理图形的两个选项是使用 ArangoDB管理一个图形中涉及的集合的 ...

  3. 学习如何在AutoCad土木工程中绘制建筑设计图

    学习如何在AutoCad中绘制建筑设计图从平面图到AutoCad土木工程中的整栋建筑 你会学到: 如何绘制房屋地图 如何绘制建筑设计 如何从AutoCad打印或出图 AutoCaD使用 AutoCaD ...

  4. android 集合 内存泄漏,Android内存泄漏第二课--------(集合中对象没清理造成的内存泄漏 )...

    一.我们通常把一些对象的引用加入到了集合容器(比如ArrayList)中,当我们不需要该对象时,并没有把它的引用从集合中清理掉,这样这个集合就会越来越大.如果这个集合是static的话,那情况就更严重 ...

  5. linux 内存清理 释放命令,Linux系统中的内存清理和释放命令总结

    Linux内核代码量大.逻辑关系复杂,因此对内核中的错误进行追溯和调试一直以来都是一件既耗费时间又耗费精力的事情.接下来是小编为大家收集的Linux系统中的内存清理和释放命令总结,希望能帮到大家. L ...

  6. C++/CLI中的资源清理(Destructor,Finalizer)

    本文将分成三部分,他们分别是引言.Destructor,Finalizer的语法表示.如何保证Destructor,Finalizer与其他语言兼容.   一. 引言    资源是一个很大的范畴,先让 ...

  7. java 图片阴影_Java如何为 PPT 中的图形添加阴影效果

    在PowerPoint文档中,给图片添加阴影效果能增强图片的逼真度,使其贴近现实效果,提升文档的美观度. 本文将展示如何使用Free Spire.Presentation for Java为PPT中的 ...

  8. 将Spring Boot应用程序部署到Tomcat中

    "我喜欢编写身份验证和授权代码." 〜从来没有Java开发人员. 厌倦了一次又一次地建立相同的登录屏幕? 尝试使用Okta API进行托管身份验证,授权和多因素身份验证. 部署应用 ...

  9. turbo c填充图形_C / C ++中的图形:Turbo C编译器中的简介和图形模式

    turbo c填充图形 In this advanced learning tutorial, you will learn more about the C/C++ feature "Gr ...

最新文章

  1. 在IIS上搭建WebSocket服务器(一)
  2. qt 雷达扫描障碍物_自动驾驶系统入门(五) - 激光雷达
  3. 数据库安全性相关知识笔记​
  4. 我国最新十大黑科技发布,颠覆你的想象!
  5. MySQL substring()函数
  6. Linux定时任务Crontab命令详解
  7. matlab绘图白边设定
  8. ubuntu 中 ROS 一些报错的解决
  9. 抖音打破了传统互联网的商业逻辑
  10. 获取Linux的方法,CDN Linux系统中获取LDNS的方法
  11. 从虚拟化到软件定义--重新定义IT产业格局
  12. libx264.c:function X264_init: error: undefined reference to x264_encoder_open_142
  13. NumPy库---文件操作
  14. 电脑上计算机软件一直自动弹出,win7系统开机一直自动弹出计算器窗口怎么解决...
  15. 2022.5.23-5.29 AI行业周刊(第99期):AI创业道路
  16. PR-CTS-Specify Clock Tree Synthesis Options
  17. Android 使用gson完成Json转map,json转单个对象,json转数组
  18. WinHex脚本命令教程--中文版
  19. pdf怎么移除权限口令,忘记pdf密码如何找回?
  20. 黑龙江测绘局事业单位2009拟聘人员公示

热门文章

  1. 卷积神经网络 手写数字识别(包含Pytorch实现代码)
  2. 让人意外,三星在全球5G手机市场可能仅位居第三名
  3. 读书印记 - 《中国大历史》
  4. md解密 vue_vue项目用sha256、md5、base64加密密码
  5. html的textarea标签的文本显示,文本框样式简单设置
  6. 倒计时2天!云鼎实验室攻防最新成果即将披露
  7. 第 1 章 一 JVM 和 Java 体系架构 (虚拟机介绍、字节码、Java跨平台性)
  8. NLP(三十一)短语的语序问题
  9. iOS 里RGB 配色 UIColor colorWithRed
  10. Form表单提交JSON数据