private void btnCreateModelPoint_Click(object sender, EventArgs e) { _geoEditor.FinishEdit(); //用于当拾取到基准面时,或者没有正常右键结束连续调用Start时 if (gfactory == null) { gfactory = new GeometryFactory(); } string tmpOsgPath = (strMediaPath + @"\osg\Buildings\Apartment\Apartment.osg"); fde_modelpoint = gfactory.CreateGeometry(gviGeometryType.gviGeometryModelPoint, gviVertexAttribute.gviVertexAttributeZ) as IModelPoint; fde_modelpoint.SetCoords(0, 0, 0, 0, 0); fde_modelpoint.ModelName = tmpOsgPath; //****获取包围盒 IResourceFactory resfac = new ResourceFactory(); IPropertySet images = new PropertySet(); IModel model = null; IMatrix matrix = null; resfac.CreateModelAndImageFromFile(tmpOsgPath, out images, out model, out matrix); fde_modelpoint.ModelEnvelope = model.Envelope; //************* rmodelpoint = this.axRenderControl1.ObjectManager.CreateRenderModelPoint(fde_modelpoint, null, rootId); resultCode = _geoEditor.StartEditRenderGeometry(rmodelpoint, gviGeoEditType.gviGeoEditCreator); if (!resultCode) { MessageBox.Show(this.axRenderControl1.GetLastError().ToString()); } oldfdeGeometry = fde_modelpoint; }
private void drawTempLine(INetworkRoute route) { // 画出停靠点到映射点的虚线 int segmentCount = route.SegmentCount; INetworkRouteSegment segment = null; INetworkLocation startLocation = null; INetworkLocation endLocation = null; IPoint pointOnNetwork = null; ICurveSymbol tmpLineSym = new CurveSymbol(); tmpLineSym.Color = System.Drawing.Color.Yellow; tmpLineSym.Width = -2; for (int i = 0; i < segmentCount; i++) { segment = route.GetSegment(i); startLocation = segment.StartLocation; pointOnNetwork = startLocation.NetworkPosition; fdepoint = startLocation.Position; IPolyline tmpLine = geoFac.CreateGeometry(gviGeometryType.gviGeometryPolyline, gviVertexAttribute.gviVertexAttributeZ) as IPolyline; tmpLine.AppendPoint(fdepoint); tmpLine.AppendPoint(pointOnNetwork); tmpRenderLineArray.Add(this.axRenderControl1.ObjectManager.CreateRenderPolyline(tmpLine, tmpLineSym, rootId)); if (i == segmentCount - 1) { endLocation = segment.EndLocation; pointOnNetwork = endLocation.NetworkPosition; fdepoint = endLocation.Position; tmpLine = geoFac.CreateGeometry(gviGeometryType.gviGeometryPolyline, gviVertexAttribute.gviVertexAttributeZ) as IPolyline; tmpLine.AppendPoint(fdepoint); tmpLine.AppendPoint(pointOnNetwork); tmpRenderLineArray.Add(this.axRenderControl1.ObjectManager.CreateRenderPolyline(tmpLine, tmpLineSym, rootId)); } } }
/// <summary> /// 开始绘制线段 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void btn_createLine_Click(object sender, EventArgs e) { this.label7.Text = "请在三维窗口中点两个点构造一条线"; this.axRenderControl1.FeatureManager.UnhighlightAll(); flagx = true; if (renderPolyline != null) { this.axRenderControl1.ObjectManager.DeleteObject(renderPolyline.Guid); renderPolyline = null; } if (polyline != null) { polyline = null; } if (geoFactory == null) { geoFactory = new GeometryFactory(); } if (polyline == null) { polyline = (IPolyline)geoFactory.CreateGeometry(gviGeometryType.gviGeometryPolyline, gviVertexAttribute.gviVertexAttributeZ); polyline.SpatialCRS = currentEnvCRS; } this.axRenderControl1.InteractMode = gviInteractMode.gviInteractSelect; this.axRenderControl1.MouseSelectObjectMask = gviMouseSelectObjectMask.gviSelectAll; this.axRenderControl1.MouseSelectMode = gviMouseSelectMode.gviMouseSelectClick; this.axRenderControl1.RcMouseClickSelect += new _IRenderControlEvents_RcMouseClickSelectEventHandler(axRenderControl1_RcMouseClickSelect); }
private void toolStripButtonCreateCutFill_Click(object sender, System.EventArgs e) { if (currentRenderGeometry != null) { this.axRenderControl1.ObjectManager.DeleteObject(currentRenderGeometry.Guid); currentRenderGeometry = null; } if (cutrmp != null) { this.axRenderControl1.ObjectManager.DeleteObject(cutrmp.Guid); cutrmp = null; } if (fillrmp != null) { this.axRenderControl1.ObjectManager.DeleteObject(fillrmp.Guid); fillrmp = null; } currentGeometry = geoFactory.CreateGeometry(gviGeometryType.gviGeometryPolygon, gviVertexAttribute.gviVertexAttributeZ) as IPolygon; currentGeometry.SpatialCRS = crs as ISpatialCRS; ISurfaceSymbol sf = new SurfaceSymbol(); sf.Color = System.Drawing.Color.FromArgb(Convert.ToInt32("0x55ffff80", 16)); ICurveSymbol cs = new CurveSymbol(); cs.Color = System.Drawing.Color.FromArgb(Convert.ToInt32("0x55ffff80", 16)); sf.BoundarySymbol = cs; currentRenderGeometry = this.axRenderControl1.ObjectManager.CreateRenderPolygon(currentGeometry as IPolygon, sf, rootId); (currentRenderGeometry as IRenderPolygon).HeightStyle = gviHeightStyle.gviHeightOnTerrain; this.axRenderControl1.InteractMode = gviInteractMode.gviInteractEdit; this.axRenderControl1.ObjectEditor.StartEditRenderGeometry(currentRenderGeometry, gviGeoEditType.gviGeoEditCreator); }
public void TestDeepCopy() { var g = (IPoint)Read("POINT ( 10 10) "); var g2 = Factory.CreateGeometry(g); g.CoordinateSequence.SetOrdinate(0, 0, 99); Assert.IsTrue(!g.EqualsExact(g2)); }
private void LoadData() { if (geoFactory == null) { geoFactory = new GeometryFactory(); } string modelName = (strMediaPath + @"\osg\Schemes\scheme-01.osg"); IModelPoint modelPoint = (IModelPoint)geoFactory.CreateGeometry(gviGeometryType.gviGeometryModelPoint, gviVertexAttribute.gviVertexAttributeZ); modelPoint.ModelName = modelName; modelPoint.SetCoords(dx, dy, dz + 15, 0, 0); modelPoint.SpatialCRS = _datasetCRS; renderModelPoint1 = axRenderControl1.ObjectManager.CreateRenderModelPoint(modelPoint, null, rootId); renderModelPoint1.VisibleMask = gviViewportMask.gviView0; IVector3 position = new Vector3(); position.Set(dx, dy, dz); IPoint point = new GeometryFactory().CreatePoint(gviVertexAttribute.gviVertexAttributeZ); point.SpatialCRS = _datasetCRS; point.SetCoords(position.X, position.Y, position.Z, 0, 0); IEulerAngle angle = new EulerAngle(); angle.Set(0, -20, 0); axRenderControl1.Camera.LookAt2(point, 300, angle); modelName = (strMediaPath + @"\osg\Schemes\scheme-02.osg"); modelPoint = (IModelPoint)geoFactory.CreateGeometry(gviGeometryType.gviGeometryModelPoint, gviVertexAttribute.gviVertexAttributeZ); modelPoint.ModelName = modelName; modelPoint.SetCoords(dx, dy, dz - 15, 0, 0); modelPoint.SpatialCRS = _datasetCRS; renderModelPoint2 = axRenderControl1.ObjectManager.CreateRenderModelPoint(modelPoint, null, rootId); renderModelPoint2.VisibleMask = gviViewportMask.gviView1; modelName = (strMediaPath + @"\osg\Schemes\scheme-03.osg"); modelPoint = (IModelPoint)geoFactory.CreateGeometry(gviGeometryType.gviGeometryModelPoint, gviVertexAttribute.gviVertexAttributeZ); modelPoint.ModelName = modelName; modelPoint.SetCoords(dx, dy, dz - 10, 0, 0); modelPoint.SpatialCRS = _datasetCRS; renderModelPoint3 = axRenderControl1.ObjectManager.CreateRenderModelPoint(modelPoint, null, rootId); renderModelPoint3.VisibleMask = gviViewportMask.gviView2; modelName = (strMediaPath + @"\osg\Schemes\scheme-04.osg"); modelPoint = (IModelPoint)geoFactory.CreateGeometry(gviGeometryType.gviGeometryModelPoint, gviVertexAttribute.gviVertexAttributeZ); modelPoint.ModelName = modelName; modelPoint.SetCoords(dx, dy, dz - 13, 0, 0); modelPoint.SpatialCRS = _datasetCRS; renderModelPoint4 = axRenderControl1.ObjectManager.CreateRenderModelPoint(modelPoint, null, rootId); renderModelPoint4.VisibleMask = gviViewportMask.gviView3; }
private void MainForm_Load(object sender, System.EventArgs e) { // 初始化RenderControl控件 IPropertySet ps = new PropertySet(); ps.SetProperty("RenderSystem", gviRenderSystem.gviRenderOpenGL); this.axRenderControl1.Initialize(true, ps); this.axRenderControl1.Camera.FlyTime = 1; rootId = this.axRenderControl1.ObjectManager.GetProjectTree().RootID; // 设置天空盒 if (System.IO.Directory.Exists(strMediaPath)) { string tmpSkyboxPath = strMediaPath + @"\skybox"; ISkyBox skybox = this.axRenderControl1.ObjectManager.GetSkyBox(0); skybox.SetImagePath(gviSkyboxImageIndex.gviSkyboxImageBack, tmpSkyboxPath + "\\1_BK.jpg"); skybox.SetImagePath(gviSkyboxImageIndex.gviSkyboxImageBottom, tmpSkyboxPath + "\\1_DN.jpg"); skybox.SetImagePath(gviSkyboxImageIndex.gviSkyboxImageFront, tmpSkyboxPath + "\\1_FR.jpg"); skybox.SetImagePath(gviSkyboxImageIndex.gviSkyboxImageLeft, tmpSkyboxPath + "\\1_LF.jpg"); skybox.SetImagePath(gviSkyboxImageIndex.gviSkyboxImageRight, tmpSkyboxPath + "\\1_RT.jpg"); skybox.SetImagePath(gviSkyboxImageIndex.gviSkyboxImageTop, tmpSkyboxPath + "\\1_UP.jpg"); } else { MessageBox.Show("请不要随意更改SDK目录名"); return; } // 可视化Polygon类型FeatureLayer { IConnectionInfo ci = new ConnectionInfo(); ci.ConnectionType = gviConnectionType.gviConnectionFireBird2x; string tmpFDBPath = (strMediaPath + @"\polygon.FDB"); ci.Database = tmpFDBPath; FeatureLayerVisualize(ci, true, "Polygon"); } if (gfactory == null) { gfactory = new GeometryFactory(); } geo1 = gfactory.CreateGeometry(gviGeometryType.gviGeometryMultiPolygon, gviVertexAttribute.gviVertexAttributeNone) as IMultiPolygon; geo2 = gfactory.CreateGeometry(gviGeometryType.gviGeometryMultiPolygon, gviVertexAttribute.gviVertexAttributeNone) as IMultiPolygon; { this.helpProvider1.SetShowHelp(this.axRenderControl1, true); this.helpProvider1.SetHelpString(this.axRenderControl1, ""); this.helpProvider1.HelpNamespace = "TopologicalOperator.html"; } }
private void toolStripButtonCreateTerrainHole_Click(object sender, System.EventArgs e) { currentGeometry = geoFactory.CreateGeometry(gviGeometryType.gviGeometryPolygon, gviVertexAttribute.gviVertexAttributeZ) as IPolygon; currentGeometry.SpatialCRS = crs as ISpatialCRS; ISurfaceSymbol sfbottom = new SurfaceSymbol(); sfbottom.Color = System.Drawing.Color.Red; currentRenderGeometry = this.axRenderControl1.ObjectManager.CreateRenderPolygon(currentGeometry as IPolygon, sfbottom, rootId); (currentRenderGeometry as IRenderPolygon).HeightStyle = gviHeightStyle.gviHeightOnTerrain; this.axRenderControl1.InteractMode = gviInteractMode.gviInteractEdit; this.axRenderControl1.ObjectEditor.StartEditRenderGeometry(currentRenderGeometry, gviGeoEditType.gviGeoEditCreator); }
private void timer1_Tick(object sender, System.EventArgs e) { // 删除原有指针 if (render_ZhiZhen != null) { this.axRenderControl1.ObjectManager.DeleteObject(render_ZhiZhen.Guid); render_ZhiZhen = null; } // 加载指针 string modelNameZhiZhen = (strMediaPath + @"\osg\Dashboard\zhizhen.osg"); fdepoint_ZhiZhen = (IModelPoint)geoFactory.CreateGeometry(gviGeometryType.gviGeometryModelPoint, gviVertexAttribute.gviVertexAttributeZ); fdepoint_ZhiZhen.ModelName = modelNameZhiZhen; fdepoint_ZhiZhen.SetCoords(biaoPanX, biaoPanY, biaoPanZ + 0.01, 0, 0); fdepoint_ZhiZhen.SpatialCRS = dataset.SpatialReference; zhiZhenValue = random1.Next(0, 16); fdepoint_ZhiZhen.SelfRotate(0, 0, 1, -((zhiZhenValue % 16) * 3 * 3.14 / 32)); render_ZhiZhen = this.axRenderControl1.ObjectManager.CreateRenderModelPoint(fdepoint_ZhiZhen, null, rootId); label.Text = "当前的压力值是:" + zhiZhenValue.ToString(); // 刷新弹出窗口 if (clickFlag == 1) { if (dxform.IsDisposed) { return; } else { dxform.arcScaleComponent1.Value = zhiZhenValue; dxform.Refresh(); } } }
private void toolStripButtonCreateTerrainModifier_Click(object sender, System.EventArgs e) { TerrainModifierSettingForm form = new TerrainModifierSettingForm(); if (form.ShowDialog() == DialogResult.OK) { order = form.Order; switch (form.Strtype) { case "用定义了高程的多边形替代相应地形区域中大于多边形高程部分的高程值": mode = gviElevationBehaviorMode.gviElevationBehaviorAbove; break; case "用定义了高程的多边形替代相应地形区域中小于多边形高程部分的高程值": mode = gviElevationBehaviorMode.gviElevationBehaviorBelow; break; case "用定义了高程的多边形替代相应的地形区域的高程值": mode = gviElevationBehaviorMode.gviElevationBehaviorReplace; break; } currentGeometry = geoFactory.CreateGeometry(gviGeometryType.gviGeometryPolygon, gviVertexAttribute.gviVertexAttributeZ) as IPolygon; currentGeometry.SpatialCRS = crs as ISpatialCRS; ISurfaceSymbol sfbottom = new SurfaceSymbol(); sfbottom.Color = System.Drawing.Color.Red; currentRenderGeometry = this.axRenderControl1.ObjectManager.CreateRenderPolygon(currentGeometry as IPolygon, sfbottom, rootId); (currentRenderGeometry as IRenderPolygon).HeightStyle = gviHeightStyle.gviHeightOnTerrain; this.axRenderControl1.InteractMode = gviInteractMode.gviInteractEdit; this.axRenderControl1.ObjectEditor.StartEditRenderGeometry(currentRenderGeometry, gviGeoEditType.gviGeoEditCreator); } }
// 创建车模型 private void CreateCarModelPoint() { string carImgPath = Path.Combine(Environment.CurrentDirectory, @"data\TrashCar\SSCMX01.osg"); try { IModelPoint mp = (IModelPoint)_geoFactory.CreateGeometry(i3dGeometryType.i3dGeometryModelPoint, i3dVertexAttribute.i3dVertexAttributeZ); mp.ModelName = carImgPath; mp.SpatialCRS = _spatialCRS; mp.SetCoords(121.27170, 31.17965, 1.5, 0, 0); CarRmp = _axRenderControl.ObjectManager.CreateRenderModelPoint(mp, null); CarRmp.MaxVisibleDistance = 15000; CarRmp.MinVisiblePixels = 10; CarRmp.ClientData = "111"; } catch (Exception e) { LoggerHelper.Logger.Error(e, "执行SetCarModelPoint错误"); throw e; } }
private void CreateRenderModelPoint(IPoint point) { // 创建模型 if (gfactory == null) { gfactory = new GeometryFactory(); } string tmpOSGPath = Environment.CurrentDirectory + @"\TrashCar\GLJCHE01.osg"; //string tmpOSGPath = Environment.CurrentDirectory + @"\Apartment\Apartment.osg"; fde_modelpoint = gfactory.CreateGeometry(i3dGeometryType.i3dGeometryModelPoint, i3dVertexAttribute.i3dVertexAttributeZ) as IModelPoint; fde_modelpoint.SpatialCRS = crs; fde_modelpoint.SetCoords(point.X, point.Y, point.Z, 0, 0); fde_modelpoint.ModelName = tmpOSGPath; rmodelpoint = _axRenderControl.ObjectManager.CreateRenderModelPoint(fde_modelpoint, null); rmodelpoint.MaxVisibleDistance = double.MaxValue; rmodelpoint.MinVisiblePixels = 0; IEulerAngle angle = new EulerAngle(); angle.Set(0, -20, 0); _axRenderControl.Camera.LookAt2(point, 100, angle); }
private void toolStripButtonCreateRenderArrow_Click(object sender, System.EventArgs e) { currentGeometry = geoFactory.CreateGeometry(gviGeometryType.gviGeometryPolyline, gviVertexAttribute.gviVertexAttributeZ) as IPolyline; currentGeometry.SpatialCRS = crs as ISpatialCRS; ICurveSymbol curveSym = new CurveSymbol(); curveSym.Width = -2; curveSym.Color = System.Drawing.Color.Red; currentRenderGeometry = this.axRenderControl1.ObjectManager.CreateRenderPolyline(currentGeometry as IPolyline, curveSym, rootId); (currentRenderGeometry as IRenderPolyline).HeightStyle = gviHeightStyle.gviHeightOnTerrain; this.axRenderControl1.InteractMode = gviInteractMode.gviInteractEdit; this.axRenderControl1.ObjectEditor.StartEditRenderGeometry(currentRenderGeometry, gviGeoEditType.gviGeoEditCreator); }
private void toolStripButtonCreatePolygon_Click(object sender, System.EventArgs e) { //创建日志文件 Logger.Create(Application.StartupPath); if (renderpolygonDraw != null) { this.axRenderControl1.ObjectManager.DeleteObject(renderpolygonDraw.Guid); renderpolygonDraw = null; } polygonDraw = geoFactory.CreateGeometry(gviGeometryType.gviGeometryPolygon, gviVertexAttribute.gviVertexAttributeZ) as IPolygon; polygonDraw.SpatialCRS = crs as ISpatialCRS; ISurfaceSymbol sf = new SurfaceSymbol(); sf.Color = Color.FromArgb(Convert.ToInt32("0x55ffff80", 16)); ICurveSymbol cs = new CurveSymbol(); cs.Color = Color.FromArgb(Convert.ToInt32("0x55ffff80", 16)); sf.BoundarySymbol = cs; renderpolygonDraw = this.axRenderControl1.ObjectManager.CreateRenderPolygon(polygonDraw as IPolygon, sf, rootId); this.axRenderControl1.InteractMode = gviInteractMode.gviInteractEdit; this.axRenderControl1.ObjectEditor.StartEditRenderGeometry(renderpolygonDraw, gviGeoEditType.gviGeoEditCreator); }
/// <summary> /// 出沿街立面图 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void toolStripStreet_Click(object sender, EventArgs e) { this.axRenderControl1.FeatureManager.UnhighlightAll(); MessageBox.Show("请沿街道画一条线"); this.axRenderControl1.InteractMode = gviInteractMode.gviInteractEdit; this.axRenderControl1.MouseSelectMode = gviMouseSelectMode.gviMouseSelectClick; this.axRenderControl1.RcObjectEditing += new _IRenderControlEvents_RcObjectEditingEventHandler(axRenderControl1_RcObjectEditing); if (rpolyline != null) { this.axRenderControl1.ObjectManager.DeleteObject(rpolyline.Guid); } polyline = geoFactory.CreateGeometry(gviGeometryType.gviGeometryPolyline, gviVertexAttribute.gviVertexAttributeZ) as IPolyline; polyline.SpatialCRS = dataset.SpatialReference; rpolyline = this.axRenderControl1.ObjectManager.CreateRenderPolyline(polyline, null, rootId); this.axRenderControl1.ObjectEditor.StartEditRenderGeometry(rpolyline, gviGeoEditType.gviGeoEditCreator); }
/// <summary> /// 鼠标点击 拾取分析点 /// </summary> /// <param name="PickResult"></param> /// <param name="IntersectPoint"></param> /// <param name="Mask"></param> /// <param name="EventSender"></param> void g_RcMouseClickSelect(IPickResult PickResult, IPoint IntersectPoint, gviModKeyMask Mask, gviMouseSelectMode EventSender) { if (IntersectPoint == null) { return; } if (EventSender.Equals(gviMouseSelectMode.gviMouseSelectClick)) { mouseClicks++; if (mouseClicks % 2 == 1) { this.label7.Text = "请鼠标点击选择目标点"; fde_point1 = IntersectPoint; axRenderControl1.MouseSelectMode = gviMouseSelectMode.gviMouseSelectClick | gviMouseSelectMode.gviMouseSelectMove; } else { this.label7.Text = "选择结束"; this.btnStartAnalyse.Enabled = true; axRenderControl1.InteractMode = gviInteractMode.gviInteractNormal; axRenderControl1.MouseSelectObjectMask = gviMouseSelectObjectMask.gviSelectNone; axRenderControl1.MouseSelectMode = gviMouseSelectMode.gviMouseSelectClick; axRenderControl1.RcMouseClickSelect -= new _IRenderControlEvents_RcMouseClickSelectEventHandler(g_RcMouseClickSelect); switch (this.comboBoxSunMode.SelectedIndex) { case 0: { } break; case 1: { axRenderControl1.SunConfig.SunCalculateMode = gviSunCalculateMode.gviSunModeAccordingToGMT; DateTime time = new DateTime(int.Parse(this.numYear.Value.ToString()), int.Parse(this.numMonth.Value.ToString()), int.Parse(this.numDay.Value.ToString()), int.Parse(this.numHour.Value.ToString()), int.Parse(this.numMinute.Value.ToString()), 0); axRenderControl1.SunConfig.SetGMT(time); this.btnPlay.Enabled = true; this.btnStop.Enabled = true; this.btnNow.Enabled = true; } break; case 2: { axRenderControl1.SunConfig.SunCalculateMode = gviSunCalculateMode.gviSunModeUserDefined; IEulerAngle angle = new EulerAngle(); angle.Set(double.Parse(numHeading.Value.ToString()), double.Parse(numTilt.Value.ToString()), 0); axRenderControl1.SunConfig.SetSunEuler(angle); } break; } geoRegion = axRenderControl1.HighlightHelper.GetRegion(); //开始空间查询 try { this.label7.Text = "正在做空间查询"; ISpatialFilter sfilter = new SpatialFilter(); sfilter.Geometry = geoRegion; sfilter.SpatialRel = gviSpatialRel.gviSpatialRelIntersects; sfilter.GeometryField = "footprint"; cursor = buildingFC.Search(sfilter, false); row = null; while ((row = cursor.NextRow()) != null) { int geopos = row.FieldIndex("Geometry"); if (geopos > -1) { geoInFC = row.GetValue(geopos) as IGeometry; } if (geoInFC != null) { //AddOccluder axRenderControl1.VisualAnalysis.AddOccluder(buildingFL, geoInFC); //highlight occluder int fidpos = row.FieldIndex("oid"); if (fidpos > -1) { axRenderControl1.FeatureManager.HighlightFeature(buildingFC, int.Parse(row.GetValue(fidpos).ToString()), Color.Red); } } } } catch (System.Exception ex) { } finally { if (cursor != null) { //Marshal.ReleaseComObject(cursor); cursor = null; } } this.label7.Text = "正在日照分析中..."; //StartAnalyse axRenderControl1.VisualAnalysis.StartShadowAnalyse(); axRenderControl1.HighlightHelper.VisibleMask = 0; this.label7.Text = "分析结束"; } } else if (EventSender.Equals(gviMouseSelectMode.gviMouseSelectMove)) { fde_point2 = IntersectPoint; ILine fde_line = geoFactory.CreateGeometry(gviGeometryType.gviGeometryLine, gviVertexAttribute.gviVertexAttributeZ) as ILine; fde_line.StartPoint = fde_point1; fde_line.EndPoint = fde_point2; axRenderControl1.HighlightHelper.SetCircleRegion(fde_point1, fde_line.Length); } }
/// <summary> /// 鼠标点击 拾取分析点 /// </summary> /// <param name="PickResult"></param> /// <param name="IntersectPoint"></param> /// <param name="Mask"></param> /// <param name="EventSender"></param> void g_RcMouseClickSelect(IPickResult PickResult, IPoint IntersectPoint, gviModKeyMask Mask, gviMouseSelectMode EventSender) { if (IntersectPoint == null) { return; } if (EventSender.Equals(gviMouseSelectMode.gviMouseSelectClick)) { mouseClicks++; if (mouseClicks % 2 == 1) { this.label7.Text = "请鼠标点击选择目标点"; this.startX.Text = IntersectPoint.X.ToString(); this.startY.Text = IntersectPoint.Y.ToString(); this.startZ.Text = (IntersectPoint.Z + double.Parse(numZOffset.Value.ToString())).ToString(); axRenderControl1.MouseSelectMode = gviMouseSelectMode.gviMouseSelectClick | gviMouseSelectMode.gviMouseSelectMove; } else { this.label7.Text = "选择结束"; this.btnStartAnalyse.Enabled = true; axRenderControl1.InteractMode = gviInteractMode.gviInteractNormal; axRenderControl1.MouseSelectObjectMask = gviMouseSelectObjectMask.gviSelectNone; axRenderControl1.MouseSelectMode = gviMouseSelectMode.gviMouseSelectClick; axRenderControl1.RcMouseClickSelect -= new _IRenderControlEvents_RcMouseClickSelectEventHandler(g_RcMouseClickSelect); geoRegion = axRenderControl1.HighlightHelper.GetRegion(); //开始空间查询 try { this.label7.Text = "开始空间查询"; ISpatialFilter sfilter = new SpatialFilter(); sfilter.Geometry = geoRegion; sfilter.SpatialRel = gviSpatialRel.gviSpatialRelIntersects; sfilter.GeometryField = "footprint"; cursor = buildingFC.Search(sfilter, false); row = null; while ((row = cursor.NextRow()) != null) { int nfidpos = row.FieldIndex("Geometry"); if (nfidpos > -1) { geoInFC = row.GetValue(nfidpos) as IGeometry; } if (geoInFC != null) { //AddOcluder axRenderControl1.VisualAnalysis.AddOccluder(buildingFL, geoInFC); //highlight occluder int fidpos = row.FieldIndex("oid"); if (fidpos > -1) { axRenderControl1.FeatureManager.HighlightFeature(buildingFC, int.Parse(row.GetValue(fidpos).ToString()), System.Drawing.Color.Red); } } } } catch (System.Exception ex) { } finally { if (cursor != null) { //Marshal.ReleaseComObject(cursor); cursor = null; } } this.label7.Text = "正在视域分析中..."; //StartAnalyse axRenderControl1.VisualAnalysis.StartViewshedAnalyse(fde_point1, fde_point2, double.Parse(this.numHorizontalAngle.Value.ToString())); axRenderControl1.HighlightHelper.VisibleMask = 0; this.label7.Text = "分析结束"; } } else if (EventSender.Equals(gviMouseSelectMode.gviMouseSelectMove)) { this.endX.Text = IntersectPoint.X.ToString(); this.endY.Text = IntersectPoint.Y.ToString(); this.endZ.Text = IntersectPoint.Z.ToString(); fde_point1 = geoFactory.CreateGeometry(gviGeometryType.gviGeometryPoint, gviVertexAttribute.gviVertexAttributeZ) as IPoint; fde_point1.SetCoords(double.Parse(this.startX.Text), double.Parse(this.startY.Text), double.Parse(this.startZ.Text), 0, 0); fde_point2 = geoFactory.CreateGeometry(gviGeometryType.gviGeometryPoint, gviVertexAttribute.gviVertexAttributeZ) as IPoint; fde_point2.SetCoords(double.Parse(this.endX.Text), double.Parse(this.endY.Text), double.Parse(this.endZ.Text), 0, 0); axRenderControl1.HighlightHelper.SetSectorRegion(fde_point1, fde_point2, double.Parse(this.numHorizontalAngle.Value.ToString())); } }
private void MainForm_Load(object sender, System.EventArgs e) { if (_geoFactory == null) { _geoFactory = new GeometryFactory(); } if (_gc == null) { _gc = new GeometryConvertor(); } // 初始化RenderControl控件 IPropertySet ps = new PropertySet(); ps.SetProperty("RenderSystem", gviRenderSystem.gviRenderOpenGL); this.axRenderControl1.Initialize(true, ps); this.axRenderControl1.Camera.FlyTime = 1; rootId = this.axRenderControl1.ObjectManager.GetProjectTree().RootID; // 设置天空盒 if (System.IO.Directory.Exists(strMediaPath)) { string tmpSkyboxPath = strMediaPath + @"\skybox"; ISkyBox skybox = this.axRenderControl1.ObjectManager.GetSkyBox(0); skybox.SetImagePath(gviSkyboxImageIndex.gviSkyboxImageBack, tmpSkyboxPath + "\\1_BK.jpg"); skybox.SetImagePath(gviSkyboxImageIndex.gviSkyboxImageBottom, tmpSkyboxPath + "\\1_DN.jpg"); skybox.SetImagePath(gviSkyboxImageIndex.gviSkyboxImageFront, tmpSkyboxPath + "\\1_FR.jpg"); skybox.SetImagePath(gviSkyboxImageIndex.gviSkyboxImageLeft, tmpSkyboxPath + "\\1_LF.jpg"); skybox.SetImagePath(gviSkyboxImageIndex.gviSkyboxImageRight, tmpSkyboxPath + "\\1_RT.jpg"); skybox.SetImagePath(gviSkyboxImageIndex.gviSkyboxImageTop, tmpSkyboxPath + "\\1_UP.jpg"); } else { MessageBox.Show("请不要随意更改SDK目录名"); return; } #region 创建地面模型 Array imgNames = null; try { string osgPath = (strMediaPath + @"\mdb+osg\Ground\00650100agc4001.osg"); IResourceFactory resFac = new ResourceFactory(); IPropertySet imgs = new PropertySet(); resFac.CreateModelAndImageFromFile(osgPath, out imgs, out ModelSrc, out MatrixSrc); this.axRenderControl1.ObjectManager.AddModel("test", ModelSrc); string[] keys = imgs.GetAllKeys(); foreach (string imgName in keys) { IImage img = imgs.GetProperty(imgName) as IImage; this.axRenderControl1.ObjectManager.AddImage(imgName, img); } ModelPointSrc = _geoFactory.CreateGeometry(gviGeometryType.gviGeometryModelPoint, gviVertexAttribute.gviVertexAttributeZ) as IModelPoint; ModelPointSrc.ModelEnvelope = ModelSrc.Envelope; ModelPointSrc.FromMatrix(MatrixSrc); ModelPointSrc.ModelName = "test"; RenderModelPointSrc = this.axRenderControl1.ObjectManager.CreateRenderModelPoint(ModelPointSrc, null, rootId); this.axRenderControl1.Camera.FlyToObject(RenderModelPointSrc.Guid, gviActionCode.gviActionFlyTo); } catch (COMException ex) { System.Diagnostics.Trace.WriteLine(ex.Message); return; } #endregion _geoEditor = this.axRenderControl1.ObjectEditor; _multiPolygon = _geoFactory.CreateGeometry(gviGeometryType.gviGeometryMultiPolygon, gviVertexAttribute.gviVertexAttributeZ) as IMultiPolygon; { this.helpProvider1.SetShowHelp(this.axRenderControl1, true); this.helpProvider1.SetHelpString(this.axRenderControl1, ""); this.helpProvider1.HelpNamespace = "GeometryConvert3.html"; } }
private void btnConstructModelPoint_Click(object sender, EventArgs e) { if (gfactory == null) gfactory = new GeometryFactory(); modelPoint = gfactory.CreateGeometry(gviGeometryType.gviGeometryModelPoint, gviVertexAttribute.gviVertexAttributeZ) as IModelPoint; modelPoint.SetCoords(100, 200, 300, 0, 0); modelPoint.ModelName = "testModel"; //IMatrix matrix = new Matrix(); //matrix.MakeIdentity(); //modelPoint.Matrix33 = matrix as Array; IEnvelope boundingBox = new Envelope(); boundingBox.Set(50, 60, 70, 150, 160, 170); modelPoint.ModelEnvelope = boundingBox; if (modelPoint == null) return; ModelPoint geo = new ModelPoint(); // Geometry属性 geo.Dimension = modelPoint.Dimension; if (modelPoint.Envelope != null) { geo.MaxX = modelPoint.Envelope.MaxX; geo.MaxY = modelPoint.Envelope.MaxY; geo.MaxZ = modelPoint.Envelope.MaxZ; geo.MinX = modelPoint.Envelope.MinX; geo.MinY = modelPoint.Envelope.MinY; geo.MinZ = modelPoint.Envelope.MinZ; } geo.GeometryType = modelPoint.GeometryType; geo.IsEmpty = modelPoint.IsEmpty; geo.IsValid = modelPoint.IsValid; geo.VertexAttribute = modelPoint.VertexAttribute; geo.HasId = modelPoint.HasId(); geo.HasM = modelPoint.HasM(); geo.HasZ = modelPoint.HasZ(); // Point属性 geo.Id = modelPoint.Id; geo.M = modelPoint.M; geo.X = modelPoint.X; geo.Y = modelPoint.Y; geo.Z = modelPoint.Z; // modelPoint属性 geo.Matrix33 = modelPoint.Matrix33; if (modelPoint.ModelEnvelope != null) { geo.ModelEnvelopeMaxX = modelPoint.ModelEnvelope.MaxX; geo.ModelEnvelopeMaxY = modelPoint.ModelEnvelope.MaxY; geo.ModelEnvelopeMaxZ = modelPoint.ModelEnvelope.MaxZ; geo.ModelEnvelopeMinX = modelPoint.ModelEnvelope.MinX; geo.ModelEnvelopeMinY = modelPoint.ModelEnvelope.MinY; geo.ModelEnvelopeMinZ = modelPoint.ModelEnvelope.MinZ; } geo.ModelName = modelPoint.ModelName; this.propertyGrid1.SelectedObject = geo; }
void g_RcMouseClickSelect(IPickResult PickResult, IPoint IntersectPoint, gviModKeyMask Mask, gviMouseSelectMode EventSender) { if (IntersectPoint == null) { return; } if (isDrawing == true) { if (EventSender.Equals(gviMouseSelectMode.gviMouseSelectClick)) { mouseClicks++; if (mouseClicks % 2 == 1) { switch (type) { case HelperType.SectorRegion: { this.label7.Text = "请鼠标点击选择目标点"; fde_point1 = IntersectPoint; axRenderControl1.MouseSelectMode = gviMouseSelectMode.gviMouseSelectClick | gviMouseSelectMode.gviMouseSelectMove; } break; case HelperType.CircleRegion: { this.label7.Text = "请鼠标点击选择最外环点"; fde_point1 = IntersectPoint; axRenderControl1.MouseSelectMode = gviMouseSelectMode.gviMouseSelectClick | gviMouseSelectMode.gviMouseSelectMove; } break; } } else { isDrawing = false; this.label7.Text = "画结束"; this.btnSetSectorRegion.Enabled = true; this.btnSetCircleRegion.Enabled = true; this.btnSetRegion.Enabled = true; axRenderControl1.InteractMode = gviInteractMode.gviInteractNormal; axRenderControl1.MouseSelectObjectMask = gviMouseSelectObjectMask.gviSelectNone; axRenderControl1.MouseSelectMode = gviMouseSelectMode.gviMouseSelectClick; axRenderControl1.RcMouseClickSelect -= new _IRenderControlEvents_RcMouseClickSelectEventHandler(g_RcMouseClickSelect); } } else if (EventSender.Equals(gviMouseSelectMode.gviMouseSelectMove)) { switch (type) { case HelperType.SectorRegion: { fde_point2 = IntersectPoint; axRenderControl1.HighlightHelper.SetSectorRegion(fde_point1, fde_point2, double.Parse(this.numHorizontalAngle.Value.ToString())); } break; case HelperType.CircleRegion: { fde_point2 = IntersectPoint; ILine fde_line = geoFactory.CreateGeometry(gviGeometryType.gviGeometryLine, gviVertexAttribute.gviVertexAttributeZ) as ILine; fde_line.StartPoint = fde_point1; fde_line.EndPoint = fde_point2; this.centerRadius.Text = fde_line.Length.ToString(); axRenderControl1.HighlightHelper.SetCircleRegion(fde_point1, fde_line.Length); } break; } } } }
void axRenderControl1_RcMouseClickSelect(object sender, Gvitech.CityMaker.Controls._IRenderControlEvents_RcMouseClickSelectEvent e) { if (e.pickResult.Type == gviObjectType.gviObjectLabel) { ILabelPickResult tlpr = e.pickResult as ILabelPickResult; gviObjectType type = tlpr.Type; ILabel fl = tlpr.Label; MessageBox.Show("拾取到" + type + "类型,内容为" + fl.Text); } else if (e.pickResult.Type == gviObjectType.gviObjectRenderModelPoint) { IRenderModelPointPickResult tlpr = e.pickResult as IRenderModelPointPickResult; gviObjectType type = tlpr.Type; IRenderModelPoint fl = tlpr.ModelPoint; MessageBox.Show("拾取到" + type + "类型,模型名称为" + fl.ModelName); } else if (e.pickResult.Type == gviObjectType.gviObjectRenderPoint) { IRenderPointPickResult tlpr = e.pickResult as IRenderPointPickResult; gviObjectType type = tlpr.Type; IRenderPoint fl = tlpr.Point; MessageBox.Show("拾取到" + type + "类型,大小为" + fl.Symbol.Size); } else if (e.pickResult.Type == gviObjectType.gviObjectRenderPolyline) { IRenderPolylinePickResult tlpr = e.pickResult as IRenderPolylinePickResult; gviObjectType type = tlpr.Type; IRenderPolyline fl = tlpr.Polyline; MessageBox.Show("拾取到" + type + "类型,GUID为" + fl.Guid); } else if (e.pickResult.Type == gviObjectType.gviObjectRenderPolygon) { IRenderPolygonPickResult tlpr = e.pickResult as IRenderPolygonPickResult; gviObjectType type = tlpr.Type; IRenderPolygon fl = tlpr.Polygon; MessageBox.Show("拾取到" + type + "类型,GUID为" + fl.Guid); } else if (e.pickResult.Type == gviObjectType.gviObjectRenderPOI) { IRenderPOIPickResult tlpr = e.pickResult as IRenderPOIPickResult; gviObjectType type = tlpr.Type; IRenderPOI fl = tlpr.POI; MessageBox.Show("拾取到" + type + "类型,名称为" + ((IPOI)fl.GetFdeGeometry()).Name); } else if (e.pickResult.Type == gviObjectType.gviObjectReferencePlane) { //ta = new TextAttribute(); ta.TextSize = Convert.ToInt32(this.toolstripFontSize.Text.ToString()); // ta.TextColor = olec; IImage image = null; IModel model = null; string imageName = ""; this.axRenderControl1.Utility.CreateFixedBillboard(label.Text, ta, 50, 100, true, out model, out image, out imageName); this.axRenderControl1.ObjectManager.AddModel("fixedModel", model); this.axRenderControl1.ObjectManager.AddImage(imageName, image); if (gfactory == null) { gfactory = new GeometryFactoryClass(); } fde_modelpoint = gfactory.CreateGeometry(gviGeometryType.gviGeometryModelPoint, gviVertexAttribute.gviVertexAttributeZ) as IModelPoint; fde_modelpoint.SetCoords(e.intersectPoint.X, e.intersectPoint.Y, e.intersectPoint.Z, 0, 0); fde_modelpoint.ModelName = "fixedModel"; rmodelpoint = this.axRenderControl1.ObjectManager.CreateRenderModelPoint(fde_modelpoint, null, rootId); rmodelpoint.MaxVisibleDistance = double.MaxValue; rmodelpoint.MinVisiblePixels = 0; rmodelpoint.ShowOutline = checkShowOutline.Checked; IEulerAngle angle = new EulerAngle(); angle.Set(0, -20, 0); this.axRenderControl1.Camera.LookAt(e.intersectPoint.Position, 100, angle); } }
void axRenderControl1_RcMouseClickSelect(IPickResult PickResult, IPoint IntersectPoint, gviModKeyMask Mask, gviMouseSelectMode EventSender) { if (PickResult.Type == gviObjectType.gviObjectLabel) { ILabelPickResult tlpr = PickResult as ILabelPickResult; gviObjectType type = tlpr.Type; ILabel fl = tlpr.Label; MessageBox.Show("拾取到" + type + "类型,内容为" + fl.Text); } else if (PickResult.Type == gviObjectType.gviObjectRenderModelPoint) { IRenderModelPointPickResult tlpr = PickResult as IRenderModelPointPickResult; gviObjectType type = tlpr.Type; IRenderModelPoint fl = tlpr.ModelPoint; MessageBox.Show("拾取到" + type + "类型,模型名称为" + fl.ModelName); } else if (PickResult.Type == gviObjectType.gviObjectRenderPoint) { IRenderPointPickResult tlpr = PickResult as IRenderPointPickResult; gviObjectType type = tlpr.Type; IRenderPoint fl = tlpr.Point; MessageBox.Show("拾取到" + type + "类型,大小为" + fl.Symbol.Size); } else if (PickResult.Type == gviObjectType.gviObjectRenderPolyline) { IRenderPolylinePickResult tlpr = PickResult as IRenderPolylinePickResult; gviObjectType type = tlpr.Type; IRenderPolyline fl = tlpr.Polyline; MessageBox.Show("拾取到" + type + "类型,GUID为" + fl.Guid); } else if (PickResult.Type == gviObjectType.gviObjectRenderPolygon) { IRenderPolygonPickResult tlpr = PickResult as IRenderPolygonPickResult; gviObjectType type = tlpr.Type; IRenderPolygon fl = tlpr.Polygon; MessageBox.Show("拾取到" + type + "类型,GUID为" + fl.Guid); } else if (PickResult.Type == gviObjectType.gviObjectRenderPOI) { IRenderPOIPickResult tlpr = PickResult as IRenderPOIPickResult; gviObjectType type = tlpr.Type; IRenderPOI fl = tlpr.POI; MessageBox.Show("拾取到" + type + "类型,名称为" + ((IPOI)fl.GetFdeGeometry()).Name); } else if (PickResult.Type == gviObjectType.gviObjectTerrainRegularPolygon) { ITerrainRegularPolygonPickResult regPolygonPick = PickResult as ITerrainRegularPolygonPickResult; gviObjectType type = regPolygonPick.Type; ITerrainRegularPolygon regPolygon = regPolygonPick.TerrainRegularPolygon; MessageBox.Show("拾取到" + type + "类型,geometryCount为" + regPolygon.GetFdeGeometry().GeometryType); } else if (PickResult.Type == gviObjectType.gviObjectTerrainArrow) { ITerrainArrowPickResult arrowPickResult = PickResult as ITerrainArrowPickResult; gviObjectType type = arrowPickResult.Type; ITerrainArrow arrow = arrowPickResult.TerrainArrow; MessageBox.Show("拾取到" + type + "类型,geometryType" + arrow.GetFdeGeometry().GeometryType); } else if (PickResult.Type == gviObjectType.gviObjectReferencePlane) { switch (this.toolStripComboBoxObjectManager.Text) { case "CreateLabel": { label = this.axRenderControl1.ObjectManager.CreateLabel(rootId); label.Text = "我是testlabel"; label.Position = IntersectPoint; textSymbol = new TextSymbol(); textAttribute = new TextAttribute(); textAttribute.TextColor = System.Drawing.Color.Yellow; textAttribute.TextSize = 20; textAttribute.Underline = true; textAttribute.Font = "楷体"; textSymbol.TextAttribute = textAttribute; textSymbol.VerticalOffset = 10; textSymbol.DrawLine = true; textSymbol.MarginColor = System.Drawing.Color.Yellow; label.TextSymbol = textSymbol; this.axRenderControl1.Camera.FlyToObject(label.Guid, gviActionCode.gviActionFlyTo); } break; case "CreateRenderModelPoint": { if (gfactory == null) { gfactory = new GeometryFactory(); } string tmpOSGPath = (strMediaPath + @"\osg\Buildings\Apartment\Apartment.osg"); fde_modelpoint = gfactory.CreateGeometry(gviGeometryType.gviGeometryModelPoint, gviVertexAttribute.gviVertexAttributeZ) as IModelPoint; fde_modelpoint.SetCoords(IntersectPoint.X, IntersectPoint.Y, IntersectPoint.Z, 0, 0); fde_modelpoint.ModelName = tmpOSGPath; rmodelpoint = this.axRenderControl1.ObjectManager.CreateRenderModelPoint(fde_modelpoint, null, rootId); rmodelpoint.MaxVisibleDistance = double.MaxValue; rmodelpoint.MinVisiblePixels = 0; rmodelpoint.ShowOutline = checkShowOutline.Checked; IEulerAngle angle = new EulerAngle(); angle.Set(0, -20, 0); this.axRenderControl1.Camera.LookAt(IntersectPoint.Position, 100, angle); } break; case "CreateRenderPoint": { if (gfactory == null) { gfactory = new GeometryFactory(); } fde_point = (IPoint)gfactory.CreateGeometry(gviGeometryType.gviGeometryPoint, gviVertexAttribute.gviVertexAttributeZ); fde_point.SetCoords(IntersectPoint.X, IntersectPoint.Y, IntersectPoint.Z, 0, 0); pointSymbol = new SimplePointSymbol(); pointSymbol.FillColor = System.Drawing.Color.Red; pointSymbol.Size = 10; rpoint = this.axRenderControl1.ObjectManager.CreateRenderPoint(fde_point, pointSymbol, rootId); rpoint.ShowOutline = checkShowOutline.Checked; this.axRenderControl1.Camera.FlyToObject(rpoint.Guid, gviActionCode.gviActionFlyTo); } break; case "CreateRenderPolyline": { if (gfactory == null) { gfactory = new GeometryFactory(); } fde_polyline = (IPolyline)gfactory.CreateGeometry(gviGeometryType.gviGeometryPolyline, gviVertexAttribute.gviVertexAttributeZ); fde_point = (IPoint)gfactory.CreateGeometry(gviGeometryType.gviGeometryPoint, gviVertexAttribute.gviVertexAttributeZ); fde_point.SetCoords(IntersectPoint.X, IntersectPoint.Y, IntersectPoint.Z, 0, 0); fde_polyline.AppendPoint(fde_point); fde_point.SetCoords(IntersectPoint.X + 20, IntersectPoint.Y, IntersectPoint.Z, 0, 0); fde_polyline.AppendPoint(fde_point); fde_point.SetCoords(IntersectPoint.X + 20, IntersectPoint.Y + 20, IntersectPoint.Z, 0, 0); fde_polyline.AppendPoint(fde_point); fde_point.SetCoords(IntersectPoint.X + 20, IntersectPoint.Y + 20, IntersectPoint.Z + 20, 0, 0); fde_polyline.AppendPoint(fde_point); lineSymbol = new CurveSymbol(); lineSymbol.Color = System.Drawing.Color.Red; // 紫红色 rpolyline = this.axRenderControl1.ObjectManager.CreateRenderPolyline(fde_polyline, lineSymbol, rootId); rpolyline.ShowOutline = checkShowOutline.Checked; this.axRenderControl1.Camera.FlyToObject(rpolyline.Guid, gviActionCode.gviActionFlyTo); } break; case "CreateRenderPolygon": { if (gfactory == null) { gfactory = new GeometryFactory(); } fde_polygon = (IPolygon)gfactory.CreateGeometry(gviGeometryType.gviGeometryPolygon, gviVertexAttribute.gviVertexAttributeZ); fde_point = (IPoint)gfactory.CreateGeometry(gviGeometryType.gviGeometryPoint, gviVertexAttribute.gviVertexAttributeZ); fde_point.SetCoords(IntersectPoint.X, IntersectPoint.Y, IntersectPoint.Z, 0, 0); fde_polygon.ExteriorRing.AppendPoint(fde_point); fde_point.SetCoords(IntersectPoint.X + 10, IntersectPoint.Y, IntersectPoint.Z, 0, 0); fde_polygon.ExteriorRing.AppendPoint(fde_point); fde_point.SetCoords(IntersectPoint.X + 10, IntersectPoint.Y + 10, IntersectPoint.Z, 0, 0); fde_polygon.ExteriorRing.AppendPoint(fde_point); fde_point.SetCoords(IntersectPoint.X, IntersectPoint.Y + 10, IntersectPoint.Z, 0, 0); fde_polygon.ExteriorRing.AppendPoint(fde_point); surfaceSymbol = new SurfaceSymbol(); surfaceSymbol.Color = System.Drawing.Color.Blue; // 蓝色 rpolygon = this.axRenderControl1.ObjectManager.CreateRenderPolygon(fde_polygon, surfaceSymbol, rootId); rpolygon.ShowOutline = checkShowOutline.Checked; this.axRenderControl1.Camera.FlyToObject(rpolygon.Guid, gviActionCode.gviActionFlyTo); } break; case "CreateRenderPOI": { if (gfactory == null) { gfactory = new GeometryFactory(); } fde_poi = (IPOI)gfactory.CreateGeometry(gviGeometryType.gviGeometryPOI, gviVertexAttribute.gviVertexAttributeZ); fde_poi.SetCoords(IntersectPoint.X, IntersectPoint.Y, IntersectPoint.Z, 0, 0); fde_poi.ImageName = "#(1)"; fde_poi.Name = (++poiCount).ToString(); fde_poi.Size = 50; rpoi = this.axRenderControl1.ObjectManager.CreateRenderPOI(fde_poi); rpoi.ShowOutline = checkShowOutline.Checked; this.axRenderControl1.Camera.FlyToObject(rpoi.Guid, gviActionCode.gviActionFlyTo); } break; case "CreateFixedBillboard": { TextAttribute ta = new TextAttribute(); ta.TextSize = 10; ta.TextColor = System.Drawing.Color.Yellow; IImage image = null; IModel model = null; string imageName = ""; this.axRenderControl1.Utility.CreateFixedBillboard("I'm fixed billboard!", ta, 50, 100, true, out model, out image, out imageName); this.axRenderControl1.ObjectManager.AddModel("fixedModel", model); this.axRenderControl1.ObjectManager.AddImage(imageName, image); if (gfactory == null) { gfactory = new GeometryFactory(); } fde_modelpoint = gfactory.CreateGeometry(gviGeometryType.gviGeometryModelPoint, gviVertexAttribute.gviVertexAttributeZ) as IModelPoint; fde_modelpoint.SetCoords(IntersectPoint.X, IntersectPoint.Y, IntersectPoint.Z, 0, 0); fde_modelpoint.ModelName = "fixedModel"; rmodelpoint = this.axRenderControl1.ObjectManager.CreateRenderModelPoint(fde_modelpoint, null, rootId); rmodelpoint.MaxVisibleDistance = double.MaxValue; rmodelpoint.MinVisiblePixels = 0; rmodelpoint.ShowOutline = checkShowOutline.Checked; IEulerAngle angle = new EulerAngle(); angle.Set(0, -20, 0); this.axRenderControl1.Camera.LookAt(IntersectPoint.Position, 100, angle); } break; case "CreateRegularPolygon": { IPosition pos = new Position(); pos.X = IntersectPoint.X; pos.Y = IntersectPoint.Y; pos.Altitude = IntersectPoint.Z; ITerrainRegularPolygon regPolygon = this.axRenderControl1.ObjectManager.CreateRegularPolygon(pos, 10, 10, System.Drawing.Color.Red, System.Drawing.Color.White, rootId); this.axRenderControl1.Camera.FlyToObject(regPolygon.Guid, gviActionCode.gviActionFlyTo); } break; case "CreateArrow": { IPosition pos = new Position(); pos.X = IntersectPoint.X; pos.Y = IntersectPoint.Y; pos.Altitude = IntersectPoint.Z; ITerrainArrow regArrow = this.axRenderControl1.ObjectManager.CreateArrow(pos, 30, 4, System.Drawing.Color.Red, System.Drawing.Color.White, rootId); this.axRenderControl1.Camera.FlyToObject(regArrow.Guid, gviActionCode.gviActionFlyTo); } break; } } }
public static bool ConvertPolygon(double[] vtx, double height, int flag, out IDoubleArray VArray, out IUInt16Array IndexArray, out IFloatArray TextureArrayU1V1, out IDoubleArray Norms) { bool flag2; VArray = new DoubleArrayClass(); IndexArray = new UInt16ArrayClass(); TextureArrayU1V1 = new FloatArrayClass(); IFloatArray array = null; Norms = new DoubleArrayClass(); IPolygon polygon = null; ITriMesh o = null; try { if (((vtx == null) || ((vtx.Length % 2) != 0)) || (vtx.Length < 8)) { return(false); } polygon = geoFactory.CreateGeometry(gviGeometryType.gviGeometryPolygon, gviVertexAttribute.gviVertexAttributeZ) as IPolygon; if (polygon == null) { return(false); } int num = vtx.Length / 2; for (int i = 0; i < num; i++) { IPoint pointValue = geoFactory.CreatePoint(gviVertexAttribute.gviVertexAttributeZ); if (flag == 1) { pointValue.X = vtx[i * 2]; pointValue.Y = vtx[(i * 2) + 1]; pointValue.Z = height; } else { pointValue.X = vtx[((num - i) - 1) * 2]; pointValue.Y = vtx[(((num - i) - 1) * 2) + 1]; pointValue.Z = height; } polygon.ExteriorRing.AppendPoint(pointValue); } if (!polygon.IsClosed) { polygon.Close(); } o = geoConvertor.PolygonToTriMesh(polygon); if (o == null) { return(false); } if (!o.BatchExport(ref VArray, ref IndexArray, ref TextureArrayU1V1, ref array, ref Norms)) { return(false); } flag2 = true; } catch (Exception) { flag2 = false; } finally { if (polygon != null) { Marshal.ReleaseComObject(polygon); } if (o != null) { Marshal.ReleaseComObject(o); } } return(flag2); }
void axRenderControl1_RcMouseClickSelect(IPickResult PickResult, IPoint IntersectPoint, gviModKeyMask Mask, gviMouseSelectMode EventSender) { //删除包围框 for (int i = 0; i < rPolylinelist.Count; i++) { this.axRenderControl1.ObjectManager.DeleteObject((rPolylinelist[i] as IRenderPolyline).Guid); } rPolylinelist.Clear(); for (int i = 0; i < rPolylinelistWhole.Count; i++) { this.axRenderControl1.ObjectManager.DeleteObject((rPolylinelistWhole[i] as IRenderPolyline).Guid); } rPolylinelistWhole.Clear(); for (int i = 0; i < tableLabelList.Count; i++) { this.axRenderControl1.ObjectManager.DeleteObject((tableLabelList[i] as ITableLabel).Guid); } tableLabelList.Clear(); for (int i = 0; i < modelpointList.Count; i++) { this.axRenderControl1.ObjectManager.DeleteObject((modelpointList[i] as IRenderModelPoint).Guid); } modelpointList.Clear(); if (rpl1 != null) { this.axRenderControl1.ObjectManager.DeleteObject(rpl1.Guid); } if (rpl2 != null) { this.axRenderControl1.ObjectManager.DeleteObject(rpl2.Guid); } this.axRenderControl1.HighlightHelper.SetRegion(null); if (EventSender == gviMouseSelectMode.gviMouseSelectClick) { IPickResult pr = PickResult; if (pr == null) { return; } if (pr.Type == gviObjectType.gviObject3DTileLayer) { if (Mode == 1) { IPoint intersectPoint = IntersectPoint; IRelationalOperator2D relation = intersectPoint as IRelationalOperator2D; foreach (IFeatureClass fc in fcMap.Keys) { List <string> geoNames = fcMap[fc] as List <string>; if (geoNames.Count == 0) { continue; } IFdeCursor cursor = null; IRowBuffer row = null; List <IRowBuffer> list = new List <IRowBuffer>(); try { ISpatialFilter filter = new SpatialFilter(); filter.Geometry = intersectPoint; filter.SpatialRel = gviSpatialRel.gviSpatialRelEnvelope; filter.GeometryField = "Geometry"; cursor = fc.Search(filter, false); while ((row = cursor.NextRow()) != null) { list.Add(row); } //开始遍历 foreach (IRowBuffer r in list) { int geometryIndex = -1; geometryIndex = r.FieldIndex(geoNames[0].ToString()); if (geometryIndex != -1) { IGeometry polygon = r.GetValue(geometryIndex) as IGeometry; if (relation.Within2D(polygon)) { this.axRenderControl1.HighlightHelper.SetRegion(polygon); } } } } catch (System.Exception ex) { if (ex.GetType().Name.Equals("UnauthorizedAccessException")) { MessageBox.Show("需要标准runtime授权"); } else { MessageBox.Show(ex.Message); } } finally { if (cursor != null) { //System.Runtime.InteropServices.//Marshal.ReleaseComObject(cursor); cursor = null; } } if (Mask != gviModKeyMask.gviModKeyCtrl && Mask != gviModKeyMask.gviModKeyShift) { if (list.Count > 0) { break; } } } } else if (Mode == 2) { this.axRenderControl1.Camera.GetCamera2(out cameraPoint, out cameraAngle); IProximityOperator disOperator = cameraPoint as IProximityOperator; double length = disOperator.Distance3D(IntersectPoint); //向相机方向延伸n米:n跟眼睛到交点距离有关,当距离远时n大,当距离近时n小。 factor = length * 0.001; IPoint aimingPoint = this.axRenderControl1.Camera.GetAimingPoint2(IntersectPoint, cameraAngle, factor); IPoint sourcePoint = this.axRenderControl1.Camera.GetAimingPoint2(IntersectPoint, cameraAngle, -factor); IPolyline intersetPolyline = geoFactory.CreateGeometry(gviGeometryType.gviGeometryPolyline, gviVertexAttribute.gviVertexAttributeZ) as IPolyline; intersetPolyline.SpatialCRS = _currentCRS; intersetPolyline.AppendPoint(sourcePoint); //瓦片焦点可能在ModelPoint内部,导致拾取不上。因此要向intersectPoint内外各拉一定距离。 //intersetPolyline.AppendPoint(IntersectPoint); intersetPolyline.AppendPoint(aimingPoint); ICurveSymbol cs = new CurveSymbol(); cs.Color = System.Drawing.Color.Yellow; cs.Width = -5; rpl1 = this.axRenderControl1.ObjectManager.CreateRenderPolyline(intersetPolyline, cs, rootId); rpl1.Glow(-1); //IPolyline intersetPolyline2 = geoFactory.CreateGeometry(gviGeometryType.gviGeometryPolyline, gviVertexAttribute.gviVertexAttributeZ) as IPolyline; //intersetPolyline2.AppendPoint(cameraPoint); //intersetPolyline2.AppendPoint(IntersectPoint); //cs.Color = System.Drawing.Color.Yellow; //rpl2 = this.axRenderControl1.ObjectManager.CreateRenderPolyline(intersetPolyline2, cs, rootId); //rpl2.Glow(-1); foreach (IFeatureClass fc in fcMap.Keys) { ISpatialFilter sp = new SpatialFilter(); sp.Geometry = intersetPolyline; sp.SpatialRel = gviSpatialRel.gviSpatialRelIntersects; sp.GeometryField = "Geometry"; IFdeCursor cursor = null; try { cursor = fc.Search(sp, false); IRowBuffer row = null; while ((row = cursor.NextRow()) != null) { int index = row.FieldIndex("Geometry"); IModelPoint mp = row.GetValue(index) as IModelPoint; //DrawEnvelope(mp.Envelope, mp.SpatialCRS, out rPolylinelist); //rPolylinelistWhole.AddRange(rPolylinelist); //创建RenderModelPoint,显示轮廓线 //IModelPointSymbol mps = new ModelPointSymbol(); //mps.Color = 0; //防止与瓦片同时显示时打架 //mps.EnableColor = true; //mps.SetResourceDataSet(fc.FeatureDataSet); //IRenderModelPoint rmp = this.axRenderControl1.ObjectManager.CreateRenderModelPoint(mp, mps, rootId); //rmp.ShowOutline = true; //modelpointList.Add(rmp); //创建RenderModelPoint,禁止深度检测 IModelPointSymbol mps = new ModelPointSymbol(); mps.Color = System.Drawing.Color.Red; mps.EnableColor = true; mps.EnableTexture = false; mps.SetResourceDataSet(fc.FeatureDataSet); IRenderModelPoint rmp = this.axRenderControl1.ObjectManager.CreateRenderModelPoint(mp, mps, rootId); rmp.DepthTestMode = gviDepthTestMode.gviDepthTestDisable; //防止与瓦片同时显示时打架 modelpointList.Add(rmp); //创建TableLabel if (fde_point == null) { fde_point = (new GeometryFactory()).CreatePoint(gviVertexAttribute.gviVertexAttributeZ); } fde_point.Position = mp.Position; fde_point.SpatialCRS = mp.SpatialCRS; tableLabelList.Add(DrawTableLabel(row, fde_point)); } } catch (COMException ex) { System.Diagnostics.Trace.WriteLine(ex.Message); } finally { if (cursor != null) { //System.Runtime.InteropServices.//Marshal.ReleaseComObject(cursor); cursor = null; } } } } } } }
private void MainForm_Load(object sender, System.EventArgs e) { // 初始化RenderControl控件 IPropertySet ps = new PropertySet(); ps.SetProperty("RenderSystem", gviRenderSystem.gviRenderOpenGL); this.axRenderControl1.Initialize(true, ps); this.axRenderControl1.Camera.FlyTime = 1; rootId = this.axRenderControl1.ObjectManager.GetProjectTree().RootID; this.axRenderControl1.Camera.NearClipPlane = 0.1f; this.axRenderControl1.Camera.AutoClipPlane = false; // 设置天空盒 if (System.IO.Directory.Exists(strMediaPath)) { string tmpSkyboxPath = strMediaPath + @"\skybox"; ISkyBox skybox = this.axRenderControl1.ObjectManager.GetSkyBox(0); skybox.SetImagePath(gviSkyboxImageIndex.gviSkyboxImageBack, tmpSkyboxPath + "\\1_BK.jpg"); skybox.SetImagePath(gviSkyboxImageIndex.gviSkyboxImageBottom, tmpSkyboxPath + "\\1_DN.jpg"); skybox.SetImagePath(gviSkyboxImageIndex.gviSkyboxImageFront, tmpSkyboxPath + "\\1_FR.jpg"); skybox.SetImagePath(gviSkyboxImageIndex.gviSkyboxImageLeft, tmpSkyboxPath + "\\1_LF.jpg"); skybox.SetImagePath(gviSkyboxImageIndex.gviSkyboxImageRight, tmpSkyboxPath + "\\1_RT.jpg"); skybox.SetImagePath(gviSkyboxImageIndex.gviSkyboxImageTop, tmpSkyboxPath + "\\1_UP.jpg"); } else { MessageBox.Show("请不要随意更改SDK目录名"); return; } // 加载FDB场景 try { IConnectionInfo ci = new ConnectionInfo(); ci.ConnectionType = gviConnectionType.gviConnectionFireBird2x; string tmpFDBPath = (strMediaPath + @"\SDKDEMO.FDB"); ci.Database = tmpFDBPath; IDataSourceFactory dsFactory = new DataSourceFactory(); IDataSource ds = dsFactory.OpenDataSource(ci); string[] setnames = (string[])ds.GetFeatureDatasetNames(); if (setnames.Length == 0) { return; } dataset = ds.OpenFeatureDataset(setnames[0]); string[] fcnames = (string[])dataset.GetNamesByType(gviDataSetType.gviDataSetFeatureClassTable); if (fcnames.Length == 0) { return; } fcMap = new Hashtable(fcnames.Length); foreach (string name in fcnames) { IFeatureClass fc = dataset.OpenFeatureClass(name); // 找到空间列字段 List <string> geoNames = new List <string>(); IFieldInfoCollection fieldinfos = fc.GetFields(); for (int i = 0; i < fieldinfos.Count; i++) { IFieldInfo fieldinfo = fieldinfos.Get(i); if (null == fieldinfo) { continue; } IGeometryDef geometryDef = fieldinfo.GeometryDef; if (null == geometryDef) { continue; } geoNames.Add(fieldinfo.Name); } fcMap.Add(fc, geoNames); } } catch (COMException ex) { System.Diagnostics.Trace.WriteLine(ex.Message); return; } // CreateFeautureLayer //bool hasfly = false; foreach (IFeatureClass fc in fcMap.Keys) { List <string> geoNames = (List <string>)fcMap[fc]; foreach (string geoName in geoNames) { if (!geoName.Equals("Geometry")) { continue; } this.axRenderControl1.ObjectManager.CreateFeatureLayer(fc, geoName, null, null, rootId); //if (!hasfly) //{ // IFieldInfoCollection fieldinfos = fc.GetFields(); // IFieldInfo fieldinfo = fieldinfos.Get(fieldinfos.IndexOf(geoName)); // IGeometryDef geometryDef = fieldinfo.GeometryDef; // IEnvelope env = geometryDef.Envelope; // if (env.MaxX == 0.0 && env.MaxY == 0.0 && env.MaxZ == 0.0 && // env.MinX == 0.0 && env.MinY == 0.0 && env.MinZ == 0.0) // continue; // IEulerAngle angle = new EulerAngle(); // angle.Set(0, -20, 0); // this.axRenderControl1.Camera.LookAt(env.Center, 1000, angle); //} //hasfly = true; } } geoFactory = new GeometryFactory(); positionPoint = geoFactory.CreatePoint(gviVertexAttribute.gviVertexAttributeZ); positionPoint.SpatialCRS = dataset.SpatialReference; // 加载仪表盘 string modelNameBiaoPan = (strMediaPath + @"\osg\Dashboard\yibiaopan.osg"); fdepoint_biaopan = (IModelPoint)geoFactory.CreateGeometry(gviGeometryType.gviGeometryModelPoint, gviVertexAttribute.gviVertexAttributeZ); fdepoint_biaopan.ModelName = modelNameBiaoPan; fdepoint_biaopan.SetCoords(biaoPanX, biaoPanY, biaoPanZ, 0, 0); fdepoint_biaopan.SpatialCRS = dataset.SpatialReference; render_biaopan = this.axRenderControl1.ObjectManager.CreateRenderModelPoint(fdepoint_biaopan, null, rootId); // 加载指针 string modelNameZhiZhen = (strMediaPath + @"\osg\Dashboard\zhizhen.osg"); fdepoint_ZhiZhen = (IModelPoint)geoFactory.CreateGeometry(gviGeometryType.gviGeometryModelPoint, gviVertexAttribute.gviVertexAttributeZ); fdepoint_ZhiZhen.ModelName = modelNameZhiZhen; fdepoint_ZhiZhen.SetCoords(biaoPanX, biaoPanY, biaoPanZ + 0.01, 0, 0); fdepoint_ZhiZhen.SpatialCRS = dataset.SpatialReference; render_ZhiZhen = this.axRenderControl1.ObjectManager.CreateRenderModelPoint(fdepoint_ZhiZhen, null, rootId); // 加载文字标签 IVector3 positionLabel = new Vector3(); positionLabel.Set(biaoPanX, biaoPanY, biaoPanZ + 0.1); positionPoint.Position = positionLabel; label = this.axRenderControl1.ObjectManager.CreateLabel(rootId); label.Text = "当前的压力值是:" + zhiZhenValue.ToString(); label.Position = positionPoint; ITextSymbol textSymbol = new TextSymbol(); TextAttribute textAttribute = new TextAttribute(); textAttribute.TextColor = System.Drawing.Color.Black; textAttribute.TextSize = 30; textAttribute.Font = "宋体"; textSymbol.TextAttribute = textAttribute; textSymbol.MaxVisualDistance = 3; label.TextSymbol = textSymbol; // 飞入表盘 IEulerAngle angle_camera = new EulerAngle(); angle_camera.Set(0, -45, 0); this.axRenderControl1.Camera.LookAt2(positionPoint, 2, angle_camera); // 注册鼠标单击事件 this.axRenderControl1.RcMouseClickSelect += new _IRenderControlEvents_RcMouseClickSelectEventHandler(axRenderControl1_RcMouseClickSelect); { this.helpProvider1.SetShowHelp(this.axRenderControl1, true); this.helpProvider1.SetHelpString(this.axRenderControl1, ""); this.helpProvider1.HelpNamespace = "DynamicBoard.html"; } }