天天看點

打開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);

方法四、也是周遊CAD點線面,但是不用檢查資料類型是否為注記。

IFeatureWorkspace pFeatureWorkspace = pWorkspaceFactory.OpenFromFile(directoryPath, 0) as IFeatureWorkspace;

IFeatureDataset pFeatureDataset = pFeatureWorkspace.OpenFeatureDataset(fileName);

IFeatureLayer pFeatureLayer = new FeatureLayerClass();

//ICadLayer pCadLayer = new CadLayerClass();

//pCadLayer = pFeatureLayer as ICadLayer;

方法五、類似與方法三。

//Add passed file to MapControl

ICadDrawingDataset pCadDrawingDataset = GetCadDrawingDataset(directoryPath, fileName);

if (pCadDrawingDataset == null) return;

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

沒有整理與歸納的知識,一文不值!高度概括與梳理的知識,才是自己真正的知識與技能。 永遠不要讓自己的自由、好奇、充滿創造力的想法被現實的架構所束縛,讓創造力自由成長吧! 多花時間,關心他(她)人,正如别人所關心你的。理想的騰飛與實作,沒有别人的支援與幫助,是萬萬不能的。

    本文轉自wenglabs部落格園部落格,原文連結:http://www.cnblogs.com/arxive/p/6262926.html,如需轉載請自行聯系原作者

繼續閱讀