//加载缓存 private void AddCache_ToolStripMenuItem_Click(object sender, EventArgs e) { this.openFileDialog.Title = "打开三维缓存文件"; this.openFileDialog.Filter = "所有支持的三维缓存文件(*.sci, *.scv, *.scp,*.sci3d, *.sct, *.sit,*.gci,*.scm)|*.sci;*.scv;*.scp;*.sci3d;*.sct;*.sit;*.gci;*.scm"; this.openFileDialog.InitialDirectory = Directory.GetCurrentDirectory(); if (this.openFileDialog.ShowDialog() == DialogResult.OK) { String fileName = this.openFileDialog.FileName; String extention = System.IO.Path.GetExtension(fileName); Layer3D layer3D = null; Layer3Ds layer3ds = this.m_sceneControl.Scene.Layers; switch (extention) { case ".sci": case ".sci3d": case ".sit": case ".gci": { layer3D = layer3ds.Add(fileName, Layer3DType.ImageFile, true); layer3D.UpdateData(); this.m_sceneControl.Scene.Refresh(); this.m_sceneControl.Scene.EnsureVisible(layer3D.Bounds); break; } case ".scv": { layer3D = layer3ds.Add(fileName, Layer3DType.VectorFile, true); //layer3D.UpdateData(); this.m_sceneControl.Scene.Refresh(); this.m_sceneControl.Scene.EnsureVisible(layer3D.Bounds); break; } case ".scp": { layer3D = layer3ds.Add(fileName, Layer3DType.OSGB, true); this.m_sceneControl.Scene.Refresh(); //this.m_sceneControl.Scene.EnsureVisible(layer3D.Bounds); if (layer3D != null) { m_layerOSGB = layer3D as Layer3DOSGBFile; } break; } case ".sct": { TerrainLayer terrainlayer3D = this.m_sceneControl.Scene.TerrainLayers.Add(fileName, true); this.m_sceneControl.Scene.Refresh(); this.m_sceneControl.Scene.EnsureVisible(terrainlayer3D.Bounds); break; } } } }
//刷新场景 private void btn_RefreshScene_Click(object sender, EventArgs e) { Layer3Ds layers = this.m_sceneControl.Scene.Layers; for (int i = 0; i < layers.Count; i++) { Layer3D layer = layers[i]; layer.UpdateData(); } this.m_sceneControl.Scene.Refresh(); }
public void Layer3D_Click() { OpenFileDialog openFileDialog = new OpenFileDialog(); openFileDialog.Title = "打开三维缓存文件"; openFileDialog.Filter = "所有支持的三维缓存文件(*.sci, *.scv, *.scp,*.sci3d, *.sct, *.sit,*.gci,*.scm)|*.sci;*.scv;*.scp;*.sci3d;*.sct;*.sit;*.gci;*.scm"; if (openFileDialog.ShowDialog() == DialogResult.OK) { string fileName = openFileDialog.FileName; String extention = System.IO.Path.GetExtension(fileName); Layer3D layer3D = null; Layer3Ds layer3ds = this.m_SceneControl.Scene.Layers; switch (extention) { case ".sci": case ".sci3d": case ".sit": case ".gci": { layer3D = layer3ds.Add(fileName, Layer3DType.ImageFile, true); layer3D.UpdateData(); this.m_SceneControl.Scene.Refresh(); this.m_SceneControl.Scene.EnsureVisible(layer3D.Bounds); break; } case ".scv": { layer3D = layer3ds.Add(fileName, Layer3DType.VectorFile, true); //layer3D.UpdateData(); this.m_SceneControl.Scene.Refresh(); this.m_SceneControl.Scene.EnsureVisible(layer3D.Bounds); break; } case ".scp": { layer3D = layer3ds.Add(fileName, Layer3DType.OSGB, true); if (layer3D != null) { m_LayerOSGB = layer3D as Layer3DOSGBFile; this.m_SceneControl.Scene.EnsureVisible(m_LayerOSGB.Bounds); this.m_SceneControl.Scene.Refresh(); } break; } case ".sct": { TerrainLayer terrainlayer3D = this.m_SceneControl.Scene.TerrainLayers.Add(fileName, true); this.m_SceneControl.Scene.Refresh(); this.m_SceneControl.Scene.EnsureVisible(terrainlayer3D.Bounds); break; } } } }
/// <summary> /// 创建缓冲区 /// </summary> public void CreateBuffer() { try { Selection3D[] selection = mSceneControl.Scene.FindSelection(true); //判断选择集是否为空 if (selection == null || selection.Length == 0) { MessageBox.Show("请选择要扩建的道路线对象"); return; } Recordset mLineRecordset = selection[0].ToRecordset(); object RodeType = mLineRecordset.GetFieldValue("Name"); if (RodeType.ToString().Trim() == "大路") { mRadius += 3.5; } else if (RodeType.ToString().Trim() == "小路") { mRadius += 1.85; } else { MessageBox.Show("请选择需要扩建的道路线对象"); Layer3Ds mlayer = mSceneControl.Scene.Layers; foreach (Layer3D layer in mlayer) { if (layer.Selection != null) { layer.Selection.Clear(); } } return; } //按照模板创建模型数据集 mDatasource = mUseData.DataSource; Datasource datasource = mDatasource; DatasetVector mRegionDatasets = datasource.Datasets["New_Model"] as DatasetVector; String bufferName = "bufferModel"; if (datasource.Datasets.Contains(bufferName)) { datasource.Datasets.Delete(bufferName); } mBufferDataset = (DatasetVector)datasource.Datasets.CreateFromTemplate(bufferName, mRegionDatasets); mBufferDataset.PrjCoordSys = mLineRecordset.Dataset.PrjCoordSys; mRecordset = mBufferDataset.GetRecordset(false, CursorType.Dynamic); while (!mLineRecordset.IsEOF) { mGeo = mLineRecordset.GetGeometry() as Geometry3D; BufferAnalyst3DParameter bufferAnalyst3DParameter = new BufferAnalyst3DParameter(); bufferAnalyst3DParameter.EndType = SuperMap.Realspace.SpatialAnalyst.BufferEndType.Round; bufferAnalyst3DParameter.BufferDistance = Convert.ToDouble(mRadius); bufferAnalyst3DParameter.BufferQuality = 20; Geometry3D geo3D = Geometrist3D.CreateBuffer(mGeo, bufferAnalyst3DParameter, mLineRecordset.Dataset.PrjCoordSys); GeoStyle3D geoStyle3D = new GeoStyle3D(); mRecordset.AddNew(geo3D); mLineRecordset.MoveNext(); } mRecordset.Update(); //设置数据集容量,避免空间查询出现过多对象 mRecordset.Dataset.Tolerance.NodeSnap = 0.0002; Layer3DSettingVector layer3DSetting = new Layer3DSettingVector(); GeoStyle3D style = new GeoStyle3D(); style.FillForeColor = Color.FromArgb(170, 242, 242, 15); style.FillBackColor = Color.GreenYellow; style.AltitudeMode = AltitudeMode.RelativeToGround; style.FillMode = FillMode3D.Fill; layer3DSetting.Style = style; mLayerBuffer = mSceneControl.Scene.Layers.Add(mRecordset.Dataset, layer3DSetting, true); mLayerBuffer.UpdateData(); if (mSceneControl.Scene.Layers.Contains("道路断线[email protected]_UnderPipeLine#1")) { mSceneControl.Scene.Layers["道路断线[email protected]_UnderPipeLine#1"].Selection.Clear(); } mSceneControl.Scene.Refresh(); } catch (Exception ex) { Trace.WriteLine(ex.Message); } }