Engine中如何使用scenecontrol保存sxd文件?

Engine中如何使用scenecontrol保存sxd文件?功能与ArcScene中保存功能一样
已邀请:

刘峥 - ArcGIS多面手

赞同来自:

【解决办法】:
Engine里使用scenecontrol控件的话,没有提供保存sxd文件的接口,可以用序列化和反序列化的方式在scenecontrol中保存sxd文件,但这样保存的sxd在ArcScene中无法打开。

  
//save sxd
IMemoryBlobStream mbStream = new MemoryBlobStreamClass();
IObjectStream objectStream = new ObjectStreamClass();
objectStream.Stream = mbStream;
IPersistStream persistStream = (ESRI.ArcGIS.esriSystem.IPersistStream)axSceneControl1.Scene;
persistStream.Save(objectStream, 1);

saveFileDialog1.Title = 保存Scene文档;
saveFileDialog1.Filter = 保存Scene文档(*.sxd)|*.sxd;
saveFileDialog1.ShowDialog();
string filename = saveFileDialog1.FileName;

mbStream.SaveToFile(filename);
MessageBox.Show(OK);

//open engine-saved sxd
openFileDialog1.Title = 打开Scene文档;
openFileDialog1.Filter = Scene文档(*.sxd)|*.sxd;
openFileDialog1.ShowDialog();
string filename = openFileDialog1.FileName;
if (axSceneControl1.CheckSxFile(filename))
axSceneControl1.LoadSxFile(filename);
else
{
IScene pScene = axSceneControl1.Scene;
IMemoryBlobStream mbStream = new MemoryBlobStreamClass();
IObjectStream objectStream = new ObjectStreamClass();
mbStream.LoadFromFile(filename);
IPersistStream pPersistStream = (ESRI.ArcGIS.esriSystem.IPersistStream)pScene;
objectStream.Stream = mbStream;
pPersistStream.Load(objectStream);
}

要回复问题请先登录注册