public void ClearTrack() { try { mSceneControl.Bubbles.Clear(); TrackingLayer3D trackinglayer = mSceneControl.Scene.TrackingLayer; trackinglayer.Clear(); m_rec = Rectangle2D.Empty; mSceneControl.Scene.Refresh(); this.mDataGridView.Rows.Clear(); this.mDataGridView.Columns.Clear(); mSceneControl.Tracking -= new Tracking3DEventHandler(bd_sceneControl_Tracking); mSceneControl.Tracked -= new Tracked3DEventHandler(bd_sceneControl_Tracked); mSceneControl.ObjectSelected -= new ObjectSelectedEventHandler(mSceneControlObjectSelected); Layer3Ds m_layer = mSceneControl.Scene.Layers; foreach (Layer3D layer in m_layer) { if (layer.Selection != null) { layer.Selection.Clear(); } } } catch (System.Exception ex) { Trace.WriteLine(ex.Message); } }
public void OwnerBar() { try { Layer3Ds mLayer3D = mSceneControl.Scene.Layers; Layer3DDataset mLayer = null; Recordset mRecord = null; DatasetVector mData = null; String str = ""; String str1 = ""; for (int i = 0; i < mOwnerStatist.GetPipeStatist.Count; i++) { mLayer = mLayer3D[mOwnerStatist.GetPipeStatist[i].ToString() + "@" + mDataSourceName] as Layer3DDataset; mData = mLayer.Dataset as DatasetVector; for (int k = 0; k < mOwnerStatist.GetOwnerStatist.Count; k++) { mRecord = mData.Query("OwnerShip='" + mOwnerStatist.GetOwnerStatist[k].ToString() + "'", CursorType.Dynamic); mOwnerCount.Add(mRecord.RecordCount.ToString()); } } OwnerCreate(); } catch (System.Exception ex) { Trace.WriteLine(ex.Message); } }
/// <summary> /// 删除缓冲区 /// </summary> public void DeleteWhole() { try { mRecordset.DeleteAll(); if (mLayerBuffer != null) { mSceneControl.Scene.Layers.Remove(mLayerBuffer.Name); mLayerBuffer = null; } mSceneControl.Scene.Refresh(); if (mBufferDataset != null) { mDatasource.Datasets.Delete(mBufferDataset.Name); mBufferDataset = null; } Layer3Ds mlayer = mSceneControl.Scene.Layers; foreach (Layer3D layer in mlayer) { if (layer.Selection != null) { layer.Selection.Clear(); } } } catch (System.Exception ex) { Trace.WriteLine(ex.Message); } }
public void LayerStyle_Ctrl() { Layer3Ds layer3ds = this.m_sceneControl.Scene.Layers; if (layer3ds.Count <= 0) { return; } TreeNode treeNode = this.m_LayersControl.Layer3DsTree.SelectedNode; Layer3DsTreeNodeBase treeNodeBase = treeNode as Layer3DsTreeNodeBase; if (treeNodeBase == null) { MessageBox.Show("请先选择一矢量图层"); return; } Layer3D layer3D = treeNodeBase.GetData() as Layer3D; if (layer3D == null) { return; } if (layer3D.Type == Layer3DType.Dataset || layer3D.Type == Layer3DType.VectorFile) { if (m_DlgSetLayerStyle == null || m_DlgSetLayerStyle.IsDisposed) { m_DlgSetLayerStyle = new DlgSetLayerStyle(); } m_DlgSetLayerStyle.Initialize(m_sceneControl, layer3D, false); m_DlgSetLayerStyle.StartPosition = FormStartPosition.CenterScreen; m_DlgSetLayerStyle.Show(); } }
/// <summary> /// 寻找目标点,进行飞行 /// </summary> public void TargetPoint() { try { if (mFlyPoint3D.X == 0 && mFlyPoint3D.Y == 0 && mFlyPoint3D.Z == 0) { Layer3Ds bd_3DLayers = mSceneControl.Scene.Layers; Layer3DDataset bd_3DLayer = bd_3DLayers[0] as Layer3DDataset; double bd_3DLayerHeight = bd_3DLayer.Bounds.Height; double bd_3DLayerWidth = bd_3DLayer.Bounds.Width; int PointX = (int)(bd_3DLayer.Bounds.Left + bd_3DLayerWidth / 2); int PointY = (int)(bd_3DLayer.Bounds.Bottom + bd_3DLayerHeight / 2); Point FlyPoint = new Point(PointX, PointY); mFlyPoint3D = mSceneControl.Scene.PixelToGlobe(FlyPoint); FlyTo(200, mFlyPoint3D.X, mFlyPoint3D.Y, 0); } else { FlyTo(200, mFlyPoint3D.X, mFlyPoint3D.Y, 0); } } catch (Exception) { } }
//设置阴影分析范围 private void cb_ShadowType_SelectedIndexChanged(object sender, EventArgs e) { int index = this.cb_ShadowType.SelectedIndex; if (index == 0) { m_shadowType = ShadowType.ALL; m_selection = null; } else if (index == 1) { m_shadowType = ShadowType.SELECTION; } else if (index == 2) { m_shadowType = ShadowType.NONE; m_selection = null; } Layer3Ds layers = m_sceneControl.Scene.Layers; //设置阴影类型 for (int i = 0; i < layers.Count; i++) { Layer3D layer = layers[i]; layer.ShadowType = m_shadowType; } }
//加载缓存 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; } } } }
internal static void Terminate() { for (int loop = 0; loop < 3; loop++) { SoundSources.DestroyAll(); Cursors.DestroyAll(); Texture2Ds.DestroyAll(); CubemapTextures.DestroyAll(); Fonts.DestroyAll(); Chip2Ds.DestroyAll(); Shader2Ds.DestroyAll(); Shader3Ds.DestroyAll(); Material2Ds.DestroyAll(); Material3Ds.DestroyAll(); MaterialPropertyBlocks.DestroyAll(); ImagePackages.DestroyAll(); Effects.DestroyAll(); Meshs.DestroyAll(); Deformers.DestroyAll(); Models.DestroyAll(); MassModels.DestroyAll(); Terrain3Ds.DestroyAll(); KeyframeAnimations.DestroyAll(); AnimationSources.DestroyAll(); Scenes.DestroyAll(); Layer2Ds.DestroyAll(); Object2Ds.DestroyAll(); Layer3Ds.DestroyAll(); Object3Ds.DestroyAll(); PostEffects.DestroyAll(); Transitions.DestroyAll(); StaticFiles.DestroyAll(); StreamFiles.DestroyAll(); Shapes.DestroyAll(); //Profilers.DestroyAll(); Collector.Collect(); System.GC.Collect(); System.GC.WaitForPendingFinalizers(); System.GC.Collect(); Collector.Collect(); } }
//刷新场景 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(); }
/// <summary> /// 找出横断面线与管线相交的断点 /// </summary> public void CrossSecLine() { try { Layer3Ds m_layer = mSceneControl.Scene.Layers; foreach (Layer3D mlayer in m_layer) { if (mlayer.Selection != null) { mlayer.Selection.Clear(); } } QueryParameter para = new QueryParameter(); para.HasGeometry = true; para.SpatialQueryMode = SpatialQueryMode.Intersect; para.SpatialQueryObject = mRec2D; Recordset recordset = null; Layer3DDataset layer = null; switch (mPipeType[0].ToString()) { case "排水管网": recordset = mUseData.OutWaterNetWork.Query(para); layer = mUseData.OutWaterLines; break; case "给水管网": recordset = mUseData.SupplyWaterNetWork.Query(para); layer = mUseData.SupplyWaterLines; break; case "电力管网": recordset = mUseData.ElectricNetWork.Query(para); layer = mUseData.ElectricLayer; break; } List <Int32> ids = new List <int>(recordset.RecordCount); while (!recordset.IsEOF) { ids.Add(recordset.GetID()); recordset.MoveNext(); } layer.Selection.AddRange(ids.ToArray()); layer.Selection.UpdateData(); layer.Selection.Style.LineColor = Color.GreenYellow; mSceneControl.Scene.Refresh(); } catch (Exception ex) { Trace.Write(ex.Message); } }
internal static void Update() { if (Collector.Collect()) { SoundSources.Collect(); Cursors.Collect(); Texture2Ds.Collect(); CubemapTextures.Collect(); Fonts.Collect(); Chip2Ds.Collect(); Shader2Ds.Collect(); Shader3Ds.Collect(); Material2Ds.Collect(); Material3Ds.Collect(); MaterialPropertyBlocks.Collect(); ImagePackages.Collect(); MediaPlayers.Collect(); Effects.Collect(); Meshs.Collect(); Deformers.Collect(); Models.Collect(); MassModels.Collect(); Terrain3Ds.Collect(); KeyframeAnimations.Collect(); AnimationSources.Collect(); AnimationClips.Collect(); Scenes.Collect(); Layer2Ds.Collect(); Object2Ds.Collect(); Layer3Ds.Collect(); Object3Ds.Collect(); PostEffects.Collect(); Transitions.Collect(); StaticFiles.Collect(); StreamFiles.Collect(); Shapes.Collect(); Collider2Ds.Collect(); } }
private void Scene_Opened(object sender, EventArgs e) { Layer3Ds layers = this.m_SceneControl.Scene.Layers; for (int i = 0; i < layers.Count; i++) { Layer3D layer = layers[i]; if (layer.Type == Layer3DType.OSGB) { m_LayerOSGB = layer as Layer3DOSGBFile; } } }
public bool SetQueryType(OSGBQueryType queryType) { m_queryType = queryType; m_srcDatasetVector = this.GetDataset(); if (m_srcDatasetVector == null) { MessageBox.Show("找不到指定的面数据集!"); return(false); } if (m_queryType == OSGBQueryType.SQL) { this.gb_SqlQuery.Enabled = true; this.gb_BufferQuery.Enabled = false; m_sceneControl.ObjectSelected -= new SuperMap.UI.ObjectSelectedEventHandler(m_sceneControl_ObjectSelected); } else { this.gb_SqlQuery.Enabled = false; this.gb_BufferQuery.Enabled = true; //缓存区分析,需要先把原始数据集添加到场景中 if (m_sceneControl.Scene.Layers.Contains(m_srcDatasetVector.Name)) { m_layerSrcRegion = m_sceneControl.Scene.Layers[m_srcDatasetVector.Name] as Layer3DDataset; } else { m_layerSrcRegion = AddSrcRegionToScene(m_srcDatasetVector); } //将场景中其他图层设为不可见 Layer3Ds layer3Ds = m_sceneControl.Scene.Layers; for (int i = 0; i < layer3Ds.Count; i++) { Layer3D layer = layer3Ds[i]; if (layer.Name != m_layerSrcRegion.Name) { layer.IsVisible = false; } } //注册事件 m_sceneControl.ObjectSelected -= new SuperMap.UI.ObjectSelectedEventHandler(m_sceneControl_ObjectSelected); m_sceneControl.ObjectSelected += new SuperMap.UI.ObjectSelectedEventHandler(m_sceneControl_ObjectSelected); } return(true); }
public void GetTreeNode() { Layer3Ds mLayer = mScenecontrol.Scene.Layers; foreach (Layer3D m_layer in mLayer) { String m_layname = m_layer.Name; if (m_layname.Contains("管网")) { mTreeNode = new TreeNode(m_layname); treeView1.Nodes.Add(mTreeNode); } } treeView1.ExpandAll(); }
/// <summary> /// 全线清除掉 /// </summary> /// <param name="Layername">图层的名称</param> public void ConnectClearEdges(string Layername) { try { /* 判断是否有上游下游 即判断数组是否有值,有值清空数组 无值跳过 * 按图层名字清空图层选择集 并注销掉两个MouseDown事件 */ if (mConnectUpEdges[0] != 0) { Array.Clear(mConnectUpEdges, 0, mConnectUpEdges.Length); } mPipeConId1 = 0; mPipeConId2 = 0; if (mConnectDownEdges[0] != 0) { Array.Clear(mConnectDownEdges, 0, mConnectDownEdges.Length); } if (mConnectUpNodes[0] != 0) { Array.Clear(mConnectUpNodes, 0, mConnectUpNodes.Length); } if (mConnectDownNodes[0] != 0) { Array.Clear(mConnectDownNodes, 0, mConnectDownNodes.Length); } Layer3Ds m_layer = mSceneControl.Scene.Layers; foreach (Layer3D layer in m_layer) { if (layer.Selection != null) { layer.Selection.Clear(); } } mSceneControl.Scene.Layers[Layername].Selection.Clear(); mSceneControl.Scene.Layers[Layername].Selection.UpdateData(); mSceneControl.Scene.Refresh(); mSceneControl.ObjectSelected -= new ObjectSelectedEventHandler(mSceneControlObjectSelectedFlow); mSceneControl.ObjectSelected -= new ObjectSelectedEventHandler(mSceneControlObjectSelectedCon); } catch (Exception ex) { Trace.WriteLine(ex); } }
public void ClearRemoveRange() { try { mSceneControl.Scene.TrackingLayer.Clear(); Layer3Ds m_layer = mSceneControl.Scene.Layers; foreach (Layer3D layer in m_layer) { if (layer.Selection != null) { layer.Selection.Clear(); } } } catch (Exception ex) { Trace.WriteLine(ex); } }
//将查询结果显示到场景中 private Layer3D AddResultToScene(DatasetVector dataset, Color color) { Layer3Ds layer3Ds = m_sceneControl.Scene.Layers; //设置图层风格为依模型 Layer3DSettingVector settingVector = new Layer3DSettingVector(); GeoStyle3D style3D = new GeoStyle3D(); style3D.AltitudeMode = AltitudeMode.ClampToObject; style3D.FillForeColor = color; settingVector.Style = style3D; //将数据添加到场景中 Layer3DDataset layerDataset = layer3Ds.Add(dataset, settingVector, true); layerDataset.UpdateData(); m_sceneControl.Scene.EnsureVisible(layerDataset); return(layerDataset); }
internal static void Terminate() { for (int loop = 0; loop < 3; loop++) { SoundSources.DestroyAll(); Texture2Ds.DestroyAll(); CubemapTextures.DestroyAll(); Shader2Ds.DestroyAll(); Material2Ds.DestroyAll(); Effects.DestroyAll(); Meshs.DestroyAll(); Deformers.DestroyAll(); Models.DestroyAll(); KeyframeAnimations.DestroyAll(); AnimationSources.DestroyAll(); Scenes.DestroyAll(); Layer2Ds.DestroyAll(); Object2Ds.DestroyAll(); Layer3Ds.DestroyAll(); Object3Ds.DestroyAll(); PostEffects.DestroyAll(); //Profilers.DestroyAll(); Collector.Collect(); System.GC.Collect(); System.GC.WaitForPendingFinalizers(); System.GC.Collect(); Collector.Collect(); } }
//将原始面数据集加载到场景中 private Layer3DDataset AddSrcRegionToScene(DatasetVector dataset) { Layer3Ds layer3Ds = m_sceneControl.Scene.Layers; //设置图层风格为依模型 Layer3DSettingVector settingVector = new Layer3DSettingVector(); GeoStyle3D style3D = new GeoStyle3D(); style3D.AltitudeMode = AltitudeMode.RelativeToGround; style3D.BottomAltitude = 1; style3D.FillForeColor = Color.Blue; settingVector.Style = style3D; //将数据添加到场景中 Layer3DDataset layerDataset = layer3Ds.Add(dataset, settingVector, true, dataset.Name); layerDataset.UpdateData(); m_sceneControl.Scene.EnsureVisible(layerDataset); m_sceneControl.Scene.Refresh(); return(layerDataset); }
//绘制区域并开始分析 private void btn_StartAnalysis_Click(object sender, EventArgs e) { if (m_shadowType == ShadowType.SELECTION) { //目前只允许一次选择一个图层中的对象 Layer3Ds layers = m_sceneControl.Scene.Layers; for (int i = 0; i < layers.Count; i++) { Layer3D layer = layers[i]; Selection3D seletion3D = layer.Selection; if (seletion3D != null) { m_selection = seletion3D; break; } } if (m_selection == null) { MessageBox.Show("请先选择要产生阴影的对象!"); return; } } this.RegisterEvents(false); this.RegisterEvents(true); m_oldAction = m_sceneControl.Action; m_sceneControl.Action = Action3D.CreatePolygon; if (m_shadowQuery == null) { m_shadowQuery = this.CreateShadowVisibilityQuery(); } this.btn_StartAnalysis.Enabled = false; this.btn_ClearResult.Enabled = true; }
public void ClearEvent() { try { mSceneControl.Tracking -= new Tracking3DEventHandler(TrackingPullFlatEvent); mSceneControl.Tracked -= new Tracked3DEventHandler(TrackedPullFlatEvent); mSceneControl.MouseDown -= new MouseEventHandler(mSceneControlMouse); mSceneControl.ObjectSelected -= new ObjectSelectedEventHandler(mSceneControlObject); mSceneControl.Scene.TrackingLayer.Clear(); mSceneControl.Action = Action3D.Pan2; Layer3Ds m_layer = mSceneControl.Scene.Layers; foreach (Layer3D layer in m_layer) { if (layer.Selection != null) { layer.Selection.Clear(); } } } catch (Exception ex) { Trace.WriteLine(ex.Message); } }
//删除数据集 private void DelDataset_ToolStripMenuItem_Click(object sender, EventArgs e) { WorkspaceTreeNodeBase node = this.workspaceControl.WorkspaceTree.SelectedNode as WorkspaceTreeNodeBase; Dataset dataset = node.GetData() as Dataset; //如果该图层在场景中打开,移除图层 Layer3Ds layers = this.m_sceneControl.Scene.Layers; int nLayer = layers.Count; for (int i = 0; i < nLayer; i++) { Layer3D layer = layers[i]; if (layer.Caption.Contains(dataset.Name)) { layers.Remove(layer.Name); nLayer--; i--; } } Datasource datsource = dataset.Datasource; bool ret = datsource.Datasets.Delete(dataset.Name); datsource.Refresh(); }
//Buffer查询 public void BufferQuery() { try { //清除已有查询结果 if (m_layerResultDataset != null) { this.ClearResult(); } //创建结果面数据集 String bufferName = "bufferRegionDataset"; if (m_workspace.Datasources[0].Datasets.Contains(bufferName)) { m_workspace.Datasources[0].Datasets.Delete(bufferName); } DatasetVector bufferDataset = (DatasetVector)m_workspace.Datasources[0].Datasets.CreateFromTemplate(bufferName, m_srcDatasetVector); BufferAnalystParameter bufferAnalystParam = new BufferAnalystParameter(); bufferAnalystParam.EndType = BufferEndType.Round; bufferAnalystParam.LeftDistance = m_bufferRadius; Boolean isTrue = SuperMap.Analyst.SpatialAnalyst.BufferAnalyst.CreateBuffer(m_selectRegion, bufferDataset, bufferAnalystParam, false, true); m_layerBufferDataset = this.AddResultToScene(bufferDataset, Color.FromArgb(100, 255, 255, 0)) as Layer3DDataset; //进行叠加分析 QueryParameter para = new QueryParameter(); para.SpatialQueryMode = SpatialQueryMode.Intersect; para.SpatialQueryObject = bufferDataset; Recordset recordset = m_srcDatasetVector.Query(para); List <Int32> ids = new List <int>(recordset.RecordCount); while (!recordset.IsEOF) { ids.Add(recordset.GetID()); recordset.MoveNext(); } String resultName = "BufferResult"; if (m_workspace.Datasources[0].Datasets.Contains(resultName)) { m_workspace.Datasources[0].Datasets.Delete(resultName); } DatasetVector dataset_result = (DatasetVector)m_workspace.Datasources[0].Datasets.CreateFromTemplate(resultName, m_srcDatasetVector); Console.Write(isTrue); // 将空间查询结果追加到新建的数据集中 dataset_result.Append(recordset); m_layerSrcRegion.IsVisible = false; //将结果数据集添加到场景中 Color color = Color.FromArgb(200, 0, 233, 0); m_layerResultDataset = this.AddResultToScene(dataset_result, color) as Layer3DDataset; //如果场景中有osgb图层,设置osgb图层可见 Layer3Ds layer3ds = m_sceneControl.Scene.Layers; for (int i = 0; i < layer3ds.Count; i++) { Layer3D layer = layer3ds[i]; if (layer.Type == Layer3DType.OSGB) { layer.IsVisible = true; } } recordset.Dispose(); m_selectRegion.Dispose(); m_selectRegion = null; } catch (System.Exception ex) { MessageBox.Show(ex.Message); } }
public void ContainQuery() { try { this.mDataGridView.Rows.Clear(); this.mDataGridView.Columns.Clear(); Layer3Ds m_layer = mSceneControl.Scene.Layers; foreach (Layer3D mlayer in m_layer) { if (mlayer.Selection != null) { mlayer.Selection.Clear(); } } QueryParameter para = new QueryParameter(); para.HasGeometry = true; para.SpatialQueryMode = SpatialQueryMode.Contain; para.SpatialQueryObject = m_rec; Recordset recordset = null; Layer3DDataset layer = null; for (int i = 0; i < 3; i++) { if (i == 0) { recordset = mUseData.OutWaterNetWork.Query(para); layer = mUseData.OutWaterLines; } else if (i == 1) { recordset = mUseData.SupplyWaterNetWork.Query(para); layer = mUseData.SupplyWaterLines; } else if (i == 2) { recordset = mUseData.ElectricNetWork.Query(para); layer = mUseData.ElectricLayer; } List <Int32> ids = new List <int>(recordset.RecordCount); while (!recordset.IsEOF) { ids.Add(recordset.GetID()); recordset.MoveNext(); } layer.Selection.AddRange(ids.ToArray()); layer.Selection.UpdateData(); layer.Selection.Style.LineColor = Color.GreenYellow; mSceneControl.Scene.Refresh(); //在DataGrid中显示表 recordset.MoveFirst(); FieldInfos fieldinfos = recordset.GetFieldInfos(); foreach (FieldInfo fieldInfo in fieldinfos) { if (i >= 1) { break; } if (!fieldInfo.IsSystemField) { if (fieldInfo.Name == "SmPPoint" || fieldInfo.Name == "SmNPoint") { continue; } string mCaption = fieldInfo.Caption; this.mDataGridView.Columns.Add(mCaption, mCaption); } } //初始化行 DataGridViewRow dataGridViewRow; recordset.MoveFirst(); //根据选中的个数将对象的信息添加到列表中 while (!recordset.IsEOF) { dataGridViewRow = new DataGridViewRow(); for (int a = 0; a < recordset.FieldCount; a++) { if (!recordset.GetFieldInfos()[a].IsSystemField) { if (recordset.GetFieldInfos()[a].Name == "SmPPoint" || recordset.GetFieldInfos()[a].Name == "SmNPoint") { continue; } //定义并获取字段值 object filevalue = recordset.GetFieldValue(a); //添加到相应的位置 DataGridViewTextBoxCell cell = new DataGridViewTextBoxCell(); if (filevalue != null) { cell.ValueType = filevalue.GetType(); cell.Value = filevalue; } dataGridViewRow.Cells.Add(cell); } } this.mDataGridView.Rows.Add(dataGridViewRow); recordset.MoveNext(); } this.mDataGridView.Update(); recordset.Dispose(); } mSceneControl.Action = Action3D.Pan2; mSceneControl.Scene.Refresh(); } catch (System.Exception ex) { Trace.WriteLine(ex.Message); } }
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 LengBar() { try { Layer3Ds mLayer3D = mSceneControl.Scene.Layers; Layer3DDataset mLayer = null; Recordset mRecord = null; DatasetVector mData = null; String str = ""; String str1 = ""; for (int i = 0; i < mLengthStatis.GetPipeStatist.Count; i++) { mLayer = mLayer3D[mLengthStatis.GetPipeStatist[i].ToString() + "@" + mDataSourceName] as Layer3DDataset; mData = mLayer.Dataset as DatasetVector; mRecord = mData.GetRecordset(false, CursorType.Static); mRecord.MoveFirst(); if (i == 0) { while (!mRecord.IsEOF) { for (int k = 0; k < mRecord.FieldCount; k++) { str = mRecord.GetFieldInfos()[k].Name; if (str == "Length") { str1 = mRecord.GetFieldValue(k).ToString(); if (System.Convert.ToDouble(str1) > 0 && System.Convert.ToDouble(str1) <= 5) { mCount[0]++; break; } else if (System.Convert.ToDouble(str1) > 5 && System.Convert.ToDouble(str1) <= 10) { mCount[1]++; break; } else if (System.Convert.ToDouble(str1) > 10) { mCount[2]++; break; } } } mRecord.MoveNext(); } } else if (i == 1) { while (!mRecord.IsEOF) { for (int k = 0; k < mRecord.FieldCount; k++) { str = mRecord.GetFieldInfos()[k].Name; if (str == "Length") { str1 = mRecord.GetFieldValue(k).ToString(); if (System.Convert.ToDouble(str1) > 0 && System.Convert.ToDouble(str1) <= 5) { mCount1[0]++; break; } else if (System.Convert.ToDouble(str1) > 5 && System.Convert.ToDouble(str1) <= 10) { mCount1[1]++; break; } else if (System.Convert.ToDouble(str1) > 10) { mCount1[2]++; break; } } } mRecord.MoveNext(); } } else if (i == 2) { while (!mRecord.IsEOF) { for (int k = 0; k < mRecord.FieldCount; k++) { str = mRecord.GetFieldInfos()[k].Name; if (str == "Length") { str1 = mRecord.GetFieldValue(k).ToString(); if (System.Convert.ToDouble(str1) > 0 && System.Convert.ToDouble(str1) <= 5) { mCount2[0]++; break; } else if (System.Convert.ToDouble(str1) > 5 && System.Convert.ToDouble(str1) <= 10) { mCount2[1]++; break; } else if (System.Convert.ToDouble(str1) > 10) { mCount2[2]++; break; } } } mRecord.MoveNext(); } } } LengthCreate(); } catch (System.Exception ex) { Trace.WriteLine(ex.Message); } }
public void LineInsertQuery() { Layer3Ds m_layer = mSceneControl.Scene.Layers; foreach (Layer3D mlayer in m_layer) { if (mlayer.Selection != null) { mlayer.Selection.Clear(); } } QueryParameter para = new QueryParameter(); para.HasGeometry = true; para.SpatialQueryMode = SpatialQueryMode.Intersect; para.SpatialQueryObject = mRec2D; Recordset recordset = null; Layer3DDataset layer = null; String m_textID = String.Empty; String m_textName = String.Empty; String m_textDepth = String.Empty; String m_textDiameter = String.Empty; String m_InfomationText = String.Empty; for (int i = 0; i < 3; i++) { if (i == 0) { recordset = mUseData.OutWaterNetWork.Query(para); layer = mUseData.OutWaterLines; } else if (i == 1) { recordset = mUseData.SupplyWaterNetWork.Query(para); layer = mUseData.SupplyWaterLines; } else if (i == 2) { recordset = mUseData.ElectricNetWork.Query(para); layer = mUseData.ElectricLayer; } List <Int32> ids = new List <int>(recordset.RecordCount); while (!recordset.IsEOF) { m_textID = System.Convert.ToString(recordset.GetFieldValue("SmID")); m_textName = System.Convert.ToString(recordset.GetFieldValue("Name")); m_textDepth = System.Convert.ToString(recordset.GetFieldValue("BottomAltitude")); m_textDiameter = System.Convert.ToString(recordset.GetFieldValue("PipeDiameter")); m_InfomationText += m_textID + " " + m_textName + " " + m_textDepth + " " + m_textDiameter + "\n"; ids.Add(recordset.GetID()); recordset.MoveNext(); } layer.Selection.AddRange(ids.ToArray()); layer.Selection.UpdateData(); layer.Selection.Style.LineColor = Color.GreenYellow; mSceneControl.Scene.Refresh(); } //进行文本标注 String m_text = "编号" + " " + "管线类别" + " " + "埋设深度" + " " + "管径" + "\n"; m_text += m_InfomationText; TextPart3D mText1 = new TextPart3D(); mText1.Text = m_text; mText1.AnchorPoint = mAnchorPoint3D; TextStyle mTextStyle1 = new TextStyle(); mTextStyle1.FontName = "微软雅黑"; mTextStyle1.ForeColor = Color.Red; mTextStyle1.FontHeight = 7; mTextStyle1.IsSizeFixed = false; mTextStyle1.Alignment = TextAlignment.MiddleCenter; GeoText3D geoText_1 = new GeoText3D(mText1, mTextStyle1); GeoStyle3D geostyle_1 = new GeoStyle3D(); geostyle_1.AltitudeMode = AltitudeMode.RelativeToGround; geoText_1.Style3D = geostyle_1; TrackingLayer3D trackinglayer = mSceneControl.Scene.TrackingLayer; trackinglayer.IsEditable = true; trackinglayer.IsVisible = true; trackinglayer.Add(geoText_1, "PullFlatLabel"); }
/// <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); } }