由于普通图层的featureClass不允许要素具有Z值,所以新建的三维面需要保存到mdb或gdb中。
步骤:1 在Arccatalog中建立一个mdb和一个空要素类testPolygon,注意勾选Z值,设置好投影。
步骤2:打开这个空要素类,插入点集转成的三维面:
//加载数据
IWorkspaceFactory pWorkspaceFactory=null;
pWorkspaceFactory = new AccessWorkspaceFactoryClass();
IWorkspace pWorkSpace = pWorkspaceFactory.OpenFromFile(@"C:\Users\Administrator\Desktop\test.mdb", 0);
IFeatureWorkspace pFeatureWorkSpace;
IFeatureClass pFeatureClass=null;
IFeatureLayer pFeatureLayer;
pFeatureWorkSpace = pWorkSpace as IFeatureWorkspace;
pFeatureClass = pFeatureWorkSpace.OpenFeatureClass("testpolygon");
pFeatureLayer = new FeatureLayerClass();
pFeatureLayer.FeatureClass = pFeatureClass;
axSceneControl1.Scene.AddLayer(pFeatureLayer);
IPoint p1 = new PointClass(); //第一组
IPoint p2 = new PointClass(); //第一组
p1.X = 502225.693493928; p1.Y = 401985.666916852;
IZAware pAware = p1 as IZAware;
pAware.ZAware = true;
p1.Z = 20;
p2.X = 502185.696188842; p2.Y = 401985.202822681;
IZAware pAware1 = p2 as IZAware;
pAware1.ZAware = true;
p2.Z = 20;
IPoint p3 = new PointClass();
IPoint p4 = new PointClass();
p3.X = 502226.273604096; p3.Y = 401935.67106726;
IZAware pAware2 = p3 as IZAware;
pAware2.ZAware = true;
p3.Z = 20;
p4.X = 502186.276295959; p4.Y = 401935.206973054;
IZAware pAware3 = p4 as IZAware;
pAware3.ZAware = true;
p4.Z = 20;
IPointCollection pPtC = new PolygonClass();
IZAware pPtCZAware= pPtC as IZAware;
pPtCZAware.ZAware = true;
pPtC.AddPoint(p2);
pPtC.AddPoint(p1);
pPtC.AddPoint(p3);
pPtC.AddPoint(p4);
Ring ring = new RingClass();
for (int i = 0; i < 4; i++)
{
ring.AddPoint(pPtC.Point[i], Type.Missing, Type.Missing);
}
ring.AddPoint(pPtC.Point[0], Type.Missing, Type.Missing);//必须补充起点,作为终点
IGeometryCollection pointPolygon = new PolygonClass();
pointPolygon.AddGeometry(ring as IGeometry, Type.Missing, Type.Missing);
IPolygon polygonGeo = pointPolygon as IPolygon;
IZAware pPolyZAware = polygonGeo as IZAware;
pPolyZAware.ZAware = true;
IWorkspaceEdit pWorkSpaceEdit;
pWorkSpaceEdit = pWorkSpace as IWorkspaceEdit;
pWorkSpaceEdit.StartEditing(true);
pWorkSpaceEdit.StartEditOperation();
IFeature pFeature =pFeatureClass.CreateFeature();
pFeature.Shape = polygonGeo as IGeometry;
pFeature.Store();
pWorkSpaceEdit.StopEditOperation();
pWorkSpaceEdit.StopEditing(true);