private void DrawCirle(Point3D mPoint3D) { try { GeoCircle3D m_circle3d = new GeoCircle3D(mPoint3D, mRemoveRadius); GeoModel3D m_model = m_circle3d.ConvertToGeoModel3D(true); mRec = m_model.Bounds; //设置数据集容量,避免空间查询出现过多对象 mUseData.OutWaterNetWork.Tolerance.NodeSnap = 0.0001; mUseData.SupplyWaterNetWork.Tolerance.NodeSnap = 0.0001; GeoStyle3D style = new GeoStyle3D(); style.FillForeColor = Color.FromArgb(150, 153, 207, 25); style.AltitudeMode = AltitudeMode.RelativeToGround; style.FillMode = FillMode3D.Fill; m_model.Style3D = style; mSceneControl.Scene.TrackingLayer.IsEditable = true; mSceneControl.Scene.TrackingLayer.IsVisible = true; mSceneControl.Scene.TrackingLayer.Add(m_model, "圆"); CloseMethod(); } catch (System.Exception ex) { Trace.WriteLine(ex.Message); } }
public void DrawCirle(Point3D bd_point3D) { try { GeoCircle3D m_circle3d = new GeoCircle3D(bd_point3D, 20); GeoModel3D m_model = m_circle3d.ConvertToGeoModel3D(true); m_rec = m_model.Bounds; //设置数据集容量,避免空间查询出现过多对象 mUseData.OutWaterNetWork.Tolerance.NodeSnap = 0.0001; mUseData.SupplyWaterNetWork.Tolerance.NodeSnap = 0.0001; GeoStyle3D style = new GeoStyle3D(); style.FillForeColor = Color.FromArgb(100, 255, 128, 64); style.AltitudeMode = AltitudeMode.RelativeToGround; style.FillMode = FillMode3D.Fill; m_model.Style3D = style; TrackingLayer3D trackinglayer = mSceneControl.Scene.TrackingLayer; trackinglayer.IsEditable = true; trackinglayer.IsVisible = true; trackinglayer.Add(m_model, "圆"); CircleID = trackinglayer.IndexOf("圆"); } catch (System.Exception ex) { Trace.WriteLine(ex.Message); } }
/// <summary> /// 结束空间查询 /// </summary> private void EndSpatialQuery() { string actionStr = SmObjectLocator.getInstance().GlobeObject.Action.ToString().ToLower(); switch (actionStr) { case "createpoint": if (this.TempPoints3Ds.Count == 1) { GeoPoint3D geoPoint3D = new GeoPoint3D(TempPoints3Ds[0]); geoPoint3D.Style3D = GetGeoStyle3D(); SmObjectLocator.getInstance().GlobeObject.Scene.TrackingLayer.Add(geoPoint3D, spatialTag); } break; //此时划线就是为了画圆 case "createline": int index = SmObjectLocator.getInstance().GlobeObject.Scene.TrackingLayer.IndexOf(spatialTempTag); if (index >= 0) { SmObjectLocator.getInstance().GlobeObject.Scene.TrackingLayer.Remove(index); } if (this.TempPoints3Ds.Count == 2) { Point3D point3D = new Point3D(TempPoints3Ds[0].X, TempPoints3Ds[0].Y, TempPoints3Ds[0].Z); double radius = GetLengthBy2Point(TempPoints3Ds[0], TempPoints3Ds[1]); GeoCircle3D geoCircle3D = new GeoCircle3D(point3D, radius); GeoModel geoModel = geoCircle3D.GetGeoModel(72, 72); geoModel.Style3D = GetGeoStyle3D(); SmObjectLocator.getInstance().GlobeObject.Scene.TrackingLayer.Add(geoModel, spatialTag); } break; case "createpolygon": if (this.TempPoints3Ds.Count > 2) { GeoRegion3D geoRegion3D = new GeoRegion3D(TempPoints3Ds); geoRegion3D.Style3D = GetGeoStyle3D(); SmObjectLocator.getInstance().GlobeObject.Scene.TrackingLayer.Add(geoRegion3D, spatialTag); } else { int index1 = SmObjectLocator.getInstance().GlobeObject.Scene.TrackingLayer.IndexOf(spatialTempTag); if (index1 >= 0) { SmObjectLocator.getInstance().GlobeObject.Scene.TrackingLayer.Remove(index1); } } break; default: break; } Point3Ds queryPoints = TempPoints3Ds.Clone(); TempPoints3Ds.Clear(); removeListener(); if (ms != null) { ms.ExecuteQuery(spatialTag, queryPoints, actionStr); } //恢复场景光标形状 SmObjectLocator.getInstance().GlobeObject.IsCursorCustomized = false; }