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,如需轉載請自行聯系原作者