单纯使用ArcEngine提供的接口读取dwg数据转shp存在众多属性无法读取的情况(最直观的 南方cass生产的dwg文件有SOUTH这一字段,为目标要素的类型)

private void ConvertDwgToShp()
{ DwgReader pDwgReader = new DwgReader(@"D:\app\CAD\test.dwg"); DxfModel pDxf = pDwgReader.Read();
DxfEntityCollection xx = pDxf.Entities; //为写入shp文件做准备
WriteDestShpFile wSHP = new WriteDestShpFile(); //在遍历CAD要素时 筛选唯一图层,创建shp用
List<string> pLayerList = new List<string>();
//创建shp文件时,字段集合
List<string> pDwgFieldList = new List<string>();
//写入shp时,字段与值 的键值对
Dictionary<string,string> pDic = new Dictionary<string,string>(); IWorkspaceFactory pWFactory = new ShapefileWorkspaceFactoryClass();
IFeatureWorkspace pFWorkspace = pWFactory.OpenFromFile("C:/test",0) as IFeatureWorkspace; DelegateTest delegateTest = null;
foreach (DxfEntity item in xx)
{
//当前要素的类型(点线面)
string GeoType = GetEntityType.GetitemType(item);
//当前要素将要存入的图层名称
string DesLayerName = string.Format("{0}_{1}", item.Layer.Name, GeoType); //扩展属性
DxfExtendedDataCollection pDxfDataCol = item.ExtendedDataCollection; pDic.Clear();
pDwgFieldList.Clear(); foreach (DxfExtendedData ExData in pDxfDataCol)
{
//AppID.Name 字段名
pDwgFieldList.Add(ExData.AppId.Name); string values = "";
for (int j = 0; j < ExData.Values.Count; j++)
{
values += ExData.Values[j];
}
pDic.Add(ExData.AppId.Name, values);
} if (!pLayerList.Contains(DesLayerName))
{
pLayerList.Add(DesLayerName);
            //此处为根据要素类类型,名称,字段及路径的一个创建shp文件的方法(需要方法联系,下有联系方式)
CreateDestShpFile.CreateShpFile(GeoType, DesLayerName, pDwgFieldList, "C:/test");
} switch (item.GetType().Name)
{
case "DxfLwPolyline":
delegateTest = new DelegateTest((new ConvertDxfLwPolyline()).ConvertToshp);
break;
case "DxfLwPoint":
delegateTest = new DelegateTest((new ConvertDxfPoint()).ConvertToshp);
break;
case "DxfCircle":
delegateTest = new DelegateTest((new ConvertDxfCircle()).ConvertToshp);
break;
case "DxfPolyline2D":
delegateTest = new DelegateTest((new ConvertDxfPolyline2D()).ConvertToshp);
break;
default:
Console.WriteLine(item.GetType().Name);
break;
}
IGeometry pGeometry = delegateTest.Invoke(item); IFeatureClass pFeatureClass = pFWorkspace.OpenFeatureClass(DesLayerName);
wSHP.WriteDestFeature(pFeatureClass, pGeometry,pDic);
}
}

个人理解:CAD中没有面要素与线要素的概念,全部都是线要素,只存在图形封闭与不封闭的区分,因此封闭的时候视为面,下为CAD要素为DxfLwPolyline时的要素转换代码,其它同理。

 1 public  IGeometry ConvertToshp(DxfEntity item)
2 {
3 //CAD 获取点集合
4 DxfLwPolyline pPointColl = item as DxfLwPolyline;
5
6 IGeometry pGeometry = null;
7 if (pPointColl.Closed)
8 {
9 IPointCollection pPoints = new PolygonClass();
10 foreach (var point in pPointColl.Vertices)
11 {
12 IPoint pPoint = new PointClass() { X = point.X, Y = point.Y };
13 pPoints.AddPoint(pPoint);
14 }
15 pPoints.AddPoint(pPoints.get_Point(0));
16 pGeometry = pPoints as IPolygon;
17 }
18 else
19 {
20 IPointCollection pPoints = new PolylineClass();
21 foreach (var point in pPointColl.Vertices)
22 {
23 IPoint pPoint = new PointClass() { X = point.X, Y = point.Y };
24 pPoints.AddPoint(pPoint);
25 }
26 pGeometry = pPoints as IPolyline;
27 }
28 return pGeometry;
29 }

使用的是 ww.cad 类库 版本4.0.35.21(单纯复制粘贴不可使用,非关键代码篇幅原因没展示)

联系VX:cl141545646

使用 ww.cad 完成dwg文件转shp(包含所有属性)的更多相关文章

  1. CAD保存DWG文件,设置保存的文件版本号和密码

    主要用到函数说明: MxDrawXCustomFunction::Mx_SaveDwgEx 保存DWG文件,可以设置保存的文件版本号和密码,详细说明如下: 参数 说明 IN CString sFile ...

  2. C# 读取CAD文件缩略图(DWG文件)

    //C# 读取CAD文件缩略图(DWG文件) https://blog.csdn.net/hanghangaidoudou/article/details/8589574 //2010-09-04 1 ...

  3. C# 实现预览dwg文件完整源代码(无需autocad环境)

    using System; using System.Drawing; using System.Collections; using System.ComponentModel; using Sys ...

  4. 梦想CAD控件,用于浏览和编辑DWG文件,在脱离AUTOCAD的情况下独立运行,相当于简易CAD

    (百度百科连接) 梦想绘图控件5.2  是国内最强,最专业的CAD开发组件(控件),不需要AutoCAD就能独立运行.控件使用VC 2010开发,最早从2007年第一个版本完成,经过多年的累积已经非常 ...

  5. 如何在网页中浏览和编辑DWG文件 梦想CAD控件

    如何在网页中浏览和编辑DWG文件 梦想CAD控件 www.mxdraw.com 梦想绘图控件5.2  是国内最强,最专业的CAD开发组件(控件),不需要AutoCAD就能独立运行.控件使用VC 201 ...

  6. 高精度快速预览打开dwg文件的CAD控件CAD Image DLL介绍及下载

    CAD Image DLL对于DXF格式, DWG格式(AutoCAD R12 到AutoCAD 2004/2005), PLT 以及 HPGL/HPGL2文件都有快速的显示速度和精度,开发者再也不会 ...

  7. CAD控件:网上打开dwg文件时,对dwg文件路径加密的功能

    梦想CAD控件2015.03.12最新更新  1. 增加控件状态栏文字,自定义功能,        C++接口为 :   CStatusBarInformationReactor::CreatePro ...

  8. CAD把一个dwg文件,或者图像文件当着一个背景导入(com接口VB语言)

    主要用到函数说明: MxDrawXCustomFunction::Mx_OpenBackgroundFile 把一个dwg文件,或者图像文件当着一个背景导入.详细说明如下: 参数 说明 CString ...

  9. CAD把一个DWG文件中的多个图框一次性全部插入到打开的DWG文件中

    主要用到函数说明: _DMxDrawX::InsertBlock 向控件数据库中插入一个图块,不用它插入匿名块,详细说明如下: 参数 说明 BSTR pszDwgFileName 图块定义的dwg 文 ...

  10. CAD图DWG解析WebGIS可视化技术分析总结

    背景 AutoCAD是国际上著名的二维和三维CAD设计软件,用于二维绘图.详细绘制.设计文档和基本三维设计.现已经成为国际上广为流行的绘图工具..dwg文件格式成为二维绘图的事实标准格式. 但由于Au ...

随机推荐

  1. 创建SFTP用户并指定访问目录 Linux

    1.创建登录用户及用户组   --可以根据自身磁盘挂载情况制定用户home目录 -d 选项 groupadd test1mkdir -p /data/test1 useradd test1 -g te ...

  2. C++书写的第一个类

    1.建立Student.h头文件 #ifndef STUDENT_H #define STUDENT_H #include <string> using namespace std; cl ...

  3. PyMySQL插入

    title: PyMySQL插入 author: 杨晓东 permalink: PyMySQL插入 date: 2021-10-02 11:27:04 categories: - 投篮 tags: - ...

  4. 前端电商 sku 的全排列算法

    需求 需求描述起来很简单,有这样三个数组: let names = ["iPhone",'iPhone xs'] let colors = ['黑色','白色'] let stor ...

  5. Mysql数据库基础第二章:(八)子查询经典案例

    Mysql数据库基础系列 软件下载地址 提取码:7v7u 数据下载地址 提取码:e6p9 mysql数据库基础第一章:(一)数据库基本概念 mysql数据库基础第一章:(二)mysql环境搭建 mys ...

  6. 2019-2020-1 20199318《Linux内核原理与分析》第九周作业

    第8章 进程的切换和系统的一般执行过程 一.学习总结 Linux系统的一般执行过程: 最一般的情况:正在运行的用户态进程X切换到运行用户态进程Y的过程. (1)正在运行的用户态进程X; (2)发生中断 ...

  7. PaddleOCR(PaddleHub Serving)离线部署包制作

    PaddleOCR(PaddleHub Serving)离线部署包制作 环境与版本: 系统 CPU架构 Anaconda3 PaddlePaddle PaccleOCR 银河麒麟Server V10 ...

  8. Redis基础命令和持久化

    Redis命令工具 Redis-server :用于启动Redis的工具 Redis-benchmark:用于检查Redis在本机的运行效率 Redis-check-aof:修复aof持久化文件 Re ...

  9. dead code?

    public static void main(String[] args) { DriverBase dbase = new DriverBase(); dbase.driverBase(); dr ...

  10. 北大2022编译原理实践(C/C++)-sysy 编译器构建

    这是今年新推出的实践方案,由往年的sysy->IR1->IR2->RISC V变成了sysy->Koopa->RISC V,通过增量的方式让整个实践过程更容易上手 所以先 ...