终于打通了在AE中从Multipatch建立到带纹理保存到GDB这一流程
通常(几乎所有的博文)是构造一个3D容器—— IGraphicsContainer3D来接收我们在sceneControl中生成的Multipatch,如果不能保存下来则显得太不优雅,所以得考虑新建一个图层保存所生成的MP。不可行的几条弯路:
弯路①:保存到IFeatureLayer中。MP是必须要有Z值的,而IFeatureLayer不能接受带Z值的Geometry(这两句是提示的错误,不是我随口瞎说的)。
弯路②:MP保存到shp,shp保存到GDB。纹理会丢失,不解释。
正道:
IFeatureLayer mpFLayer = new FeatureLayerClass();
IFeatureClass mpFClass;
while (pDataset != null)
{
mpFClass = pDataset as IFeatureClass;//获取FeatureClass
IFeatureCursor pFeatCur;
IFeatureBuffer pFeatBuf;
pFeatCur = mpFClass.Insert(true);
pFeatBuf = mpFClass.CreateFeatureBuffer();
pFeatBuf.Shape = geometry as IGeometry;
pFeatCur.InsertFeature(pFeatBuf);
pFeatCur.Flush();
mpFLayer.FeatureClass = mpFClass;
pDataset = FeatureEnumDataset.Next();
}
mpFLayer.Name = "Success";
axSceneControl1.Scene.AddLayer(mpFLayer);