终于打通了在AE中从Multipatch建立到带纹理保存到GDB这一流程

终于打通了在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);