zoukankan      html  css  js  c++  java
  • 【转】ArcEngine 打开AutoCAD文件的几种方法与读取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.**();
                    }
                }

    方法二、

                //--定义工作空间,并用CadWorkspaceFactoryClass()实例化它 
                IWorkspaceFactory pWorkspaceFactory = new CadWorkspaceFactoryClass();
                //--打开相应的工作空间,并赋值给要素空间,OpenFromFile() 
                //--中的参数为CAD文件夹的路径 
                IFeatureWorkspace pFeatureWorkspace = pWorkspaceFactory.OpenFromFile(directoryPath, 0) as IFeatureWorkspace;
                /*--打开线要素类,如果要打开点类型的要素,需要把下边的代码该成: 
                *-- IFeatureClass pFeatureClass = pFeatureWorkspace.OpenFeatureClass (fileName + ":point"); 
                *-- 由此可见fileName为CAD图的名字,后边加上要打开的要素类的类型,中间用冒号  
                *-- 隔开,大家可以想想多边形和标注是怎么打开的。 */
                //point          polyline
                IFeatureClass pFeatureClass = pFeatureWorkspace.OpenFeatureClass(fileName + ":point");
                IFeatureLayer pFeatureLayer = new FeatureLayerClass();
                pFeatureLayer.FeatureClass = pFeatureClass;
                this.axmc_Main.Map.AddLayer(pFeatureLayer);
                this.axmc_Main.ActiveView.**();

     

    方法三、

                /*--下边的两行代码是定义一个CAD工作空间,然后打开它,但这次不是赋值给 
                --IFeatureWorkspace对象,而是赋值给IWorkspace定义的对象*/
                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.**();

    方法四、

                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();
            }

     

    原文:http://maruigxxg.blog.163.com/blog/static/3051816420106623712567/

     

    由于autocad文件是由几个文件组成的,所以使用ArcEngine软件打开AutoCAD数据与其它数据有些不同,具体代码如下:

       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方法类似,可以参考.

    原文:http://www.gissky.net/blog/user1/yumao/16035.html

  • 相关阅读:
    Max History CodeForces
    Buy a Ticket CodeForces
    AC日记——字符串的展开 openjudge 1.7 35
    AC日记——回文子串 openjudge 1.7 34
    AC日记——判断字符串是否为回文 openjudge 1.7 33
    AC日记——行程长度编码 openjudge 1.7 32
    AC日记——字符串P型编码 openjudge 1.7 31
    AC日记——字符环 openjudge 1.7 30
    AC日记——ISBN号码 openjudge 1.7 29
    AC日记——单词倒排 1.7 28
  • 原文地址:https://www.cnblogs.com/lauer0246/p/1891648.html
Copyright © 2011-2022 走看看