Delphi版 MapControl加载DWG文件
function LoadDwgFile(mapControl: TMapControl; dwgFilePath: string; dwgFileName: string): Boolean;
var
qCadWorkFactory: IWorkspaceFactory;
qWorkSpace: IFeatureWorkspace;
qFeatDataset: IFeatureDataset;
qFeatClassContainer: IFeatureClassContainer; //要素类 容器
qFeatClass: IFeatureClass;
qfeatLayer: IFeatureLayer;
I : Integer;
begin
try
//创建 CAD 工作工厂
qCadWorkFactory := CoCadWorkspaceFactory.Create as IWorkspaceFactory;
if qCadWorkFactory.IsWorkspace(dwgFilePath) then
begin
qWorkSpace := qCadWorkFactory.OpenFromFile(dwgFilePath, 0) as IFeatureWorkspace;
qFeatDataset := qWorkSpace.OpenFeatureDataset(dwgFileName);
qFeatClassContainer := qFeatDataset as IFeatureClassContainer;
if (qFeatClassContainer = nil) or (qFeatClassContainer.ClassCount = 0) then
begin
Result := False;
Exit;
end;
for I := 0 to qFeatClassContainer.ClassCount - 1 do
begin
qFeatClass := qFeatClassContainer.Class_[i];
if qFeatClass.FeatureType = esriFTCoverageAnnotation then
begin
qfeatLayer := CoCadAnnotationLayer.Create as IFeatureLayer;
end
else
begin
qfeatLayer := CoFeatureLayer.Create as IFeatureLayer;
end;
qfeatLayer.Name := qFeatClass.AliasName;
qfeatLayer.FeatureClass := qFeatClass;
mapControl.AddLayer(qfeatLayer, mapControl.LayerCount);
mapControl.ActiveView.Refresh;
end;
end
else
begin
Result := False;
Exit;
end;
except
Result := False;
end;
Result := True;
end;
var
qCadWorkFactory: IWorkspaceFactory;
qWorkSpace: IFeatureWorkspace;
qFeatDataset: IFeatureDataset;
qFeatClassContainer: IFeatureClassContainer; //要素类 容器
qFeatClass: IFeatureClass;
qfeatLayer: IFeatureLayer;
I : Integer;
begin
try
//创建 CAD 工作工厂
qCadWorkFactory := CoCadWorkspaceFactory.Create as IWorkspaceFactory;
if qCadWorkFactory.IsWorkspace(dwgFilePath) then
begin
qWorkSpace := qCadWorkFactory.OpenFromFile(dwgFilePath, 0) as IFeatureWorkspace;
qFeatDataset := qWorkSpace.OpenFeatureDataset(dwgFileName);
qFeatClassContainer := qFeatDataset as IFeatureClassContainer;
if (qFeatClassContainer = nil) or (qFeatClassContainer.ClassCount = 0) then
begin
Result := False;
Exit;
end;
for I := 0 to qFeatClassContainer.ClassCount - 1 do
begin
qFeatClass := qFeatClassContainer.Class_[i];
if qFeatClass.FeatureType = esriFTCoverageAnnotation then
begin
qfeatLayer := CoCadAnnotationLayer.Create as IFeatureLayer;
end
else
begin
qfeatLayer := CoFeatureLayer.Create as IFeatureLayer;
end;
qfeatLayer.Name := qFeatClass.AliasName;
qfeatLayer.FeatureClass := qFeatClass;
mapControl.AddLayer(qfeatLayer, mapControl.LayerCount);
mapControl.ActiveView.Refresh;
end;
end
else
begin
Result := False;
Exit;
end;
except
Result := False;
end;
Result := True;
end;