转自原文 打开cad文件的几种方法

  IWorkspaceFactory pWorkspaceFactory;
  IFeatureWorkspace pFeatureWorkspace;
  IFeatureLayer pFeatureLayer;
  IFeatureDataset pFeatureDataset;
  //打开CAD数据集
  pWorkspaceFactory = new CadWorkspaceFactoryClass();
  pFeatureWorkspace = (IFeatureWorkspace)pWorkspaceFactory.OpenFromFile(directoryPath, 0);
  //打开一个要素集
  pFeatureDataset = pFeatureWorkspace.OpenFeatureDataset(fileName);
  //IFeaturClassContainer可以管理IFeatureDataset中的每个要素类
  IFeatureClassContainer pFeatureClassContainer = (IFeatureClassContainer)pFeatureDataset;
  //对CAD文件中的要素进行遍历处理
  for (int i = 0; i < pFeatureClassContainer.ClassCount - 1; i++)
  {
  IFeatureClass pFeatureClass = pFeatureClassContainer.get_Class(i);
  if (pFeatureClass.FeatureType == esriFeatureType.esriFTAnnotation)
  {
  //如果是注记,则添加注记层
  pFeatureLayer = new CadAnnotationLayerClass();
  }
  else//如果是点、线、面,则添加要素层
  {
  pFeatureLayer = new FeatureLayerClass();
  pFeatureLayer.Name = pFeatureClass.AliasName;
  pFeatureLayer.FeatureClass = pFeatureClass;
  this.axmc_Main.Map.AddLayer(pFeatureLayer);
  this.axmc_Main.ActiveView.**();
  }

  }

  方法二、直接打开CAD数据的点线面注记等要素类,所加载的数据均为一个独立的图层。

 具体代码如下:

CadWorkspaceFactoryClass fac=new CadWorkspaceFactoryClass ();
   String filePath="E:\cad";
   IFeatureWorkspace space=fac.OpenFromFile(filePath,0) as IFeatureWorkspace ;
   下面是打开FeatureClass的代码:
   //线
   IFeatureClass polyline =space.OpenFeatureClass("NewCAD.dwg:Polyline");  
   IFeatureLayer layer=new CadFeatureLayerClass ();
   layer.FeatureClass =polyline;
   //点
   IFeatureClass point=space.OpenFeatureClass ("NewCAD.dwg:Point");
   layer=new CadFeatureLayerClass ();
   layer.FeatureClass =point;
   //面  
   IFeatureClass polygon=space.OpenFeatureClass ("NewCAD.dwg:Polygon");
   ayer=new CadFeatureLayerClass();
   layer.FeatureClass =polygon;
   //注记  
   IFeatureClass anno=space.OpenFeatureClass ("NewCAD.dwg:Annotation");
   layer=new CadAnnotationLayerClass();
   layer.FeatureClass =anno;
//其实在Coverage文件的开发方式与Autocad方法类似,可以参考.

  方法三、利用绘图空间直接加载CAD数据集,加载后各类型数据作为一个图层显示。

  

  IWorkspaceFactory pWorkspaceFactory = new CadWorkspaceFactoryClass();

  IWorkspace pWorkspace = pWorkspaceFactory.OpenFromFile(directoryPath, 0);

  //--定义一个CAD画图空间,并把上边打开的工作空间赋给它

  ICadDrawingWorkspace pCadDrawingWorkspace = pWorkspace as ICadDrawingWorkspace;

  //--定义一个CAD的画图数据集,并且打开上边指定的工作空间中一幅CAD图

  //--然后赋值给CAD数据集

  ICadDrawingDataset pCadDrawingDataset = pCadDrawingWorkspace.OpenCadDrawingDataset(fileName);

  //--通过ICadLayer类,把上边得到的CAD数据局赋值给ICadLayer类对象的

  //--CadDrawingDataset属性

  ICadLayer pCadLayer = new CadLayerClass();

  pCadLayer.CadDrawingDataset = pCadDrawingDataset;

  //--利用MapControl加载CAD层

  this.axmc_Main.Map.AddLayer(pCadLayer);
  this.axmc_Main.ActiveView.**();

  方法四、也是遍历CAD点线面,但是不用检查数据类型是否为注记。

  IWorkspaceFactory pWorkspaceFactory = new CadWorkspaceFactoryClass();
  IFeatureWorkspace pFeatureWorkspace = pWorkspaceFactory.OpenFromFile(directoryPath, 0) as IFeatureWorkspace;
  IFeatureDataset pFeatureDataset = pFeatureWorkspace.OpenFeatureDataset(fileName);
  IFeatureClassContainer pFeatureClassContainer = (IFeatureClassContainer)pFeatureDataset;
  for (int i = 0; i < pFeatureClassContainer.ClassCount - 1; i++)
  {
  IFeatureClass pFeatureClass = pFeatureClassContainer.get_Class(i);
  IFeatureLayer pFeatureLayer = new FeatureLayerClass();
  pFeatureLayer.FeatureClass = pFeatureClass;
  //ICadLayer pCadLayer = new CadLayerClass();
  //pCadLayer = pFeatureLayer as ICadLayer;
  this.axmc_Main.Map.AddLayer(pFeatureLayer);
  this.axmc_Main.ActiveView.**();

  }

  方法五、类似与方法三。

  //Add passed file to MapControl
  ICadDrawingDataset pCadDrawingDataset = GetCadDrawingDataset(directoryPath, fileName);
  if (pCadDrawingDataset == null) return;
  ICadLayer pCadLayer = new CadLayerClass();
  pCadLayer.CadDrawingDataset = pCadDrawingDataset;
  pCadLayer.Name = fileName;
  this.axmc_Main.AddLayer(pCadLayer, 0);

  /// <summary>
  /// 获取记录集
  /// </summary>
  /// <param name="directoryPath"></param>
  /// <param name="fileName"></param>
  /// <returns></returns>
  private ICadDrawingDataset GetCadDrawingDataset(string directoryPath, string fileName)
  {
  //Create a WorkspaceName object
  IWorkspaceName pWorkspaceName = new WorkspaceNameClass();
  pWorkspaceName.WorkspaceFactoryProgID = "esriDataSourcesFile.CadWorkspaceFactory";
  pWorkspaceName.PathName = directoryPath;
  //Create a CadDrawingName object
  IDatasetName pDatasetName = new CadDrawingNameClass();
  pDatasetName.Name = fileName;
  pDatasetName.WorkspaceName = pWorkspaceName;
  //Open the CAD drawing
  IName pName = (IName)pDatasetName;
  return (ICadDrawingDataset)pName.Open();
  }

 

打开cad文件的几种方法的更多相关文章

  1. ArcEngine 打开AutoCAD文件的几种方法

    方法一. IWorkspaceFactory pWorkspaceFactory; IFeatureWorkspace pFeatureWorkspace; IFeatureLayer pFeatur ...

  2. node服务器中打开html文件的两种方法

    方法1:利用 Express 托管静态文件,详情查看这里 方法2:使用fs模块提供的readFile方法打开文件,让其以text/html的形式输出. 代码: var express = requir ...

  3. 2015.1.25 Delphi打开网址链接的几种方法

    Delphi打开网址链接的几种方法1.使用shellapi打开系统中默认的浏览器              首先需在头部引用 shellapi单元即在uses中添加shellapi,这里我们需要知道有 ...

  4. MySQL命令执行sql文件的两种方法

    MySQL命令执行sql文件的两种方法 摘要:和其他数据库一样,MySQL也提供了命令执行sql脚本文件,方便地进行数据库.表以及数据等各种操作.下面笔者讲解MySQL执行sql文件命令的两种方法,希 ...

  5. .net(C#)操作文件的几种方法汇总

    .net(C#)操作文件的几种方法汇总 System.IO命名空间下类的用法:在System.IO名称空间中包含了用于文件输入输出的主要类.File:实用类,提供许多静态方法,用于移动.复制和删除文件 ...

  6. 【转】 分析iOS Crash文件:符号化iOS Crash文件的3种方法

    当你的应用提交到AppStore或者各个渠道之后,请问你多久会拿到crash文件?你如何分析crash文件的呢? 上传crash文件 你的应用应当有模块能够在应用程序crash的时候上传crash信息 ...

  7. matlab读取cvs文件的几种方法

    matlab读取CVS文件的几种方法: 1,实用csvread()函数   csvread()函数有三种使用方法: 1.M = csvread('filename')2.M = csvread('fi ...

  8. VC中加载LIB库文件的三种方法

    VC中加载LIB库文件的三种方法 在VC中加载LIB文件的三种方法如下: 方法1:LIB文件直接加入到工程文件列表中   在VC中打开File View一页,选中工程名,单击鼠标右键,然后选中&quo ...

  9. 分析iOS Crash文件:符号化iOS Crash文件的3种方法

    转自:http://www.cocoachina.com/industry/20140514/8418.html 转自wufawei的博客 当你的应用提交到App Store或者各个渠道之后,请问你多 ...

随机推荐

  1. 2.vector数组

    创建vector数组 vector<,,,, }; 尾部插入 ; i < ; i++) { myint.push_back(i); } 读取头部和尾部 cout << myin ...

  2. 57.大数据线性处理csdn数据(fread,fwrite) 百万数据秒读数据

    创建结构体存储csdn数据 struct csdn { ]; ]; ]; }; 对于分配的大小要先获取最大的长度,定义如下 //姓名最大长度 ; //密码最大长度 ; //邮件最大长度 ; //获取各 ...

  3. IIS特殊字符设置

    简介:[iis7]请求筛选模块被配置为拒绝包含双重转义序列的请求.HTTP 错误 404.11 - Not Found 特殊字符最好替换成其他的字符,主要的特殊字符有”*”.”&”.”%”.” ...

  4. 洛谷P1143 进制转换

    题目描述 请你编一程序实现两种不同进制之间的数据转换. 输入输出格式 输入格式: 输入数据共有三行,第一行是一个正整数,表示需要转换的数的进制n(2≤n≤16),第二行是一个n进制数,若n>10 ...

  5. Monkey服务器命令

  6. CList 点击表头排序 (2)两种排序方法中其中一种

    上一篇讲解SortItem()方法如何使用,虽然都是抄别人的但是就是想让大家有个大概的了解 CList 点击表头排序 (1)SortItems函数 点击表头排序基本思路都是 1.首先响应HDN_ITE ...

  7. [Redux] Understand Redux Higher Order Reducers

    Higher Order Reducers are simple reducer factories, that take a reducer as an argument and return a ...

  8. nagios 安装配置(包含nrpe端)全 (一)

    一.nagios安装: 1.安装下面命令: 这是本人监控服务时自己定义插件所用到的几个系统命令.可不安装. (1)iostat:监控磁盘IO信息: apt-getinstall sysstat (2) ...

  9. 学习笔记(一):offset

    很多初学者对于JavaScript中的offset.scroll.client一直弄不明白,虽然网上到处都可以看一张图(图1),但这张图太多太杂,并且由于浏览器差异性,图示也不完全正确. 图一 不知道 ...

  10. Solr 读数据流程

    Solr 读数据流程: 1.用户提供搜索关键词,也就是搜索语句,需要经过分词器处理以及语言处理. 2.对处理之后的关键词,搜索索引找出对应Document 即记录. 3.用户根据需要从找到的Docum ...