/// <summary> /// 设置选择区域。 /// 目前只支持IPolygon,后面会支持ClosedTrimesh和IMultiPolygon。 /// 允许传入null,相当于把region清空,清空之后即使VisibleMask还是1也没有任何高亮区域。 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void btnSetRegion_Click(object sender, EventArgs e) { type = HelperType.PolygonRegion; this.label7.Text = "请鼠标点击画Polygon"; this.btnSetCircleRegion.Enabled = false; this.btnSetSectorRegion.Enabled = false; this.btnSetRegion.Enabled = false; isDrawing = true; axRenderControl1.HighlightHelper.SetRegion(null); //清空之前的高亮区 axRenderControl1.InteractMode = gviInteractMode.gviInteractEdit; axRenderControl1.MouseSelectObjectMask = gviMouseSelectObjectMask.gviSelectAll; axRenderControl1.MouseSelectMode = gviMouseSelectMode.gviMouseSelectClick; axRenderControl1.RcObjectEditing += new _IRenderControlEvents_RcObjectEditingEventHandler(g_RcObjectEditing); axRenderControl1.RcObjectEditFinish += new _IRenderControlEvents_RcObjectEditFinishEventHandler(g_RcObjectEditFinish); if (rpolygon != null) { axRenderControl1.ObjectManager.DeleteObject(rpolygon.Guid); } polygon = geoFactory.CreateGeometry(gviGeometryType.gviGeometryPolygon, gviVertexAttribute.gviVertexAttributeZ) as IPolygon; rpolygon = axRenderControl1.ObjectManager.CreateRenderPolygon(polygon, null, rootId); axRenderControl1.ObjectEditor.StartEditRenderGeometry(rpolygon, gviGeoEditType.gviGeoEditCreator); }
private void CreateRenderPolygon(IPoint point) { if (gfactory == null) { gfactory = new GeometryFactory(); } fde_polygon = (IPolygon)gfactory.CreateGeometry(i3dGeometryType.i3dGeometryPolygon, i3dVertexAttribute.i3dVertexAttributeZ); fde_polygon.SpatialCRS = crs; fde_point = (IPoint)gfactory.CreateGeometry(i3dGeometryType.i3dGeometryPoint, i3dVertexAttribute.i3dVertexAttributeZ); fde_point.SetCoords(point.X, point.Y, point.Z, 0, 0); fde_polygon.ExteriorRing.AppendPoint(fde_point); fde_point.SetCoords(point.X + 10, point.Y, point.Z, 0, 0); fde_polygon.ExteriorRing.AppendPoint(fde_point); fde_point.SetCoords(point.X + 10, point.Y + 10, point.Z, 0, 0); fde_polygon.ExteriorRing.AppendPoint(fde_point); fde_point.SetCoords(point.X, point.Y + 10, point.Z, 0, 0); fde_polygon.ExteriorRing.AppendPoint(fde_point); surfaceSymbol = new SurfaceSymbolClass(); surfaceSymbol.Color = 0xFF0000FF; // 蓝色 rpolygon = _axRenderControl.ObjectManager.CreateRenderPolygon(fde_polygon, surfaceSymbol); _axRenderControl.Camera.FlyToObject(rpolygon.Guid, i3dActionCode.i3dActionFlyTo); }
void preDraw(ISurfaceSymbol symbol) { this.axRenderControl1.RcObjectEditing += new _IRenderControlEvents_RcObjectEditingEventHandler(axRenderControl1_RcObjectEditing); this.axRenderControl1.RcObjectEditFinish += new _IRenderControlEvents_RcObjectEditFinishEventHandler(axRenderControl1_RcObjectEditFinish); this.axRenderControl1.InteractMode = gviInteractMode.gviInteractEdit; this.axRenderControl1.ObjectEditor.FinishEdit(); //用于当拾取到基准面时,或者没有正常右键结束连续调用Start时 if (gfactory == null) { gfactory = new GeometryFactory(); } fde_polygon = (IPolygon)gfactory.CreateGeometry(gviGeometryType.gviGeometryPolygon, gviVertexAttribute.gviVertexAttributeNone); rpolygon = this.axRenderControl1.ObjectManager.CreateRenderPolygon(fde_polygon, symbol, rootId); rpolygon.MaxVisibleDistance = 3000; rpolygon.MouseSelectMask = gviViewportMask.gviViewNone; renderGeoToDel.Add(rpolygon); resultCode = this.axRenderControl1.ObjectEditor.StartEditRenderGeometry(rpolygon, gviGeoEditType.gviGeoEditCreator); if (!resultCode) { MessageBox.Show(this.axRenderControl1.GetLastError().ToString()); return; } }
void axRenderControl1_RcMouseClickSelect(IPickResult PickResult, IPoint IntersectPoint, gviModKeyMask Mask, gviMouseSelectMode EventSender) { //获取水源点 waterPoint = IntersectPoint; //设置参数 this.numWaterHStart.Value = (decimal)IntersectPoint.Z; this.numWaterHEnd.Value = (decimal)(IntersectPoint.Z + 30); //获取缓冲区bufPolygon\renderBufPolygon radius = (double)numBufferRadius.Value; ITopologicalOperator2D to = waterPoint as ITopologicalOperator2D; bufPolygon = to.Buffer2D(radius, gviBufferStyle.gviBufferCapround) as IPolygon; ISurfaceSymbol sf = new SurfaceSymbol(); sf.Color = System.Drawing.Color.Yellow; ICurveSymbol cs = new CurveSymbol(); cs.Color = System.Drawing.Color.Yellow; sf.BoundarySymbol = cs; renderBufPolygon = this.axRenderControl1.ObjectManager.CreateRenderPolygon(bufPolygon, sf, rootId); renderBufPolygon.HeightStyle = gviHeightStyle.gviHeightOnTerrain; this.axRenderControl1.InteractMode = gviInteractMode.gviInteractNormal; this.axRenderControl1.RcMouseClickSelect -= new _IRenderControlEvents_RcMouseClickSelectEventHandler(axRenderControl1_RcMouseClickSelect); this.btnOnProcess.Enabled = true; this.btnSimulate.Enabled = true; }
public static void TestDrawTriangle(double offX, double offY, double offZ, double x1, double y1, double z1, double x2, double y2, double z2, double x3, double y3, double z3, ISurfaceSymbol sfSymbol) { IPolygon polygon = null; IPoint pointValue = null; polygon = geoFactory.CreateGeometry(gviGeometryType.gviGeometryPolygon, gviVertexAttribute.gviVertexAttributeZ) as IPolygon; pointValue = geoFactory.CreatePoint(gviVertexAttribute.gviVertexAttributeZ); pointValue.X = offX + x1; pointValue.Y = offY + y1; pointValue.Z = offZ + z1; polygon.ExteriorRing.AppendPoint(pointValue); pointValue.X = offX + x2; pointValue.Y = offY + y2; pointValue.Z = offZ + z2; polygon.ExteriorRing.AppendPoint(pointValue); pointValue.X = offX + x3; pointValue.Y = offY + y3; pointValue.Z = offZ + z3; polygon.ExteriorRing.AppendPoint(pointValue); polygon.Close(); IRenderPolygon item = Ocx.ObjectManager.CreateRenderPolygon(polygon, sfSymbol, Ocx.ProjectTree.RootID); item.MaxVisibleDistance = maxVisibleDis; tmpList.Add(item); }
public override void Close() { if (_rPoint != null) { this._objectManager.DeleteObject(_rPoint.Guid); System.Runtime.InteropServices.Marshal.ReleaseComObject(_rPoint); _rPoint = null; } if (_rPolyline != null) { this._3DControl.ObjectManager.DeleteObject(_rPolyline.Guid); _rPolyline = null; } if (_label != null) { this._3DControl.ObjectManager.DeleteObject(_label.Guid); _label = null; } if (_rPolygon != null) { this._3DControl.ObjectManager.DeleteObject(_rPolygon.Guid); _rPolygon = null; } this._3DControl.HighlightHelper.VisibleMask = 0; this._3DControl.HighlightHelper.SetRegion(null); }
/// <summary> /// 重置 /// </summary> /// <remarks>不再使用时调用</remarks> public virtual void Reset() { if (_StartRenderPoint != null) { _AxRenderControl.ObjectManager.DeleteObject(_StartRenderPoint.Guid); _StartRenderPoint = null; } if (_EndRenderPoint != null) { _AxRenderControl.ObjectManager.DeleteObject(_EndRenderPoint.Guid); _EndRenderPoint = null; } if (_RenderPolygon != null) { _AxRenderControl.ObjectManager.DeleteObject(_RenderPolygon.Guid); _RenderPolygon = null; } if (_TableLabel != null) { _AxRenderControl.ObjectManager.DeleteObject(_TableLabel.Guid); _TableLabel = null; } return; }
private void 生成地形挖洞ToolStripMenuItem_Click(object sender, System.EventArgs e) { myListNode selectNode = this.listView1.SelectedItems[0] as myListNode; if (selectNode != null) { IRenderPolygon rgeo = selectNode.obj as IRenderPolygon; IPolygon polygon = rgeo.GetFdeGeometry() as IPolygon; // 生成带洞polygon,可注释掉 IEnvelope env = rgeo.Envelope; IRing ring = (new GeometryFactory()).CreateGeometry(gviGeometryType.gviGeometryRing, gviVertexAttribute.gviVertexAttributeZ) as IRing; IPoint center = (new GeometryFactory()).CreatePoint(gviVertexAttribute.gviVertexAttributeZ); center.Position = env.Center; center.SpatialCRS = crs as ISpatialCRS; ring.AppendPoint(center); center.Y = env.Center.Y - 50; ring.AppendPoint(center); center.X = env.Center.X + 50; ring.AppendPoint(center); center.Y = env.Center.Y; ring.AppendPoint(center); polygon.AddInteriorRing(ring); // To here ISurfaceSymbol sfbottom = new SurfaceSymbol(); sfbottom.Color = System.Drawing.Color.Red; IRenderPolygon rgeoNew = this.axRenderControl1.ObjectManager.CreateRenderPolygon(polygon, sfbottom, rootId); TerrainHoleSettingForm form = new TerrainHoleSettingForm(); if (form.ShowDialog() == DialogResult.OK) { order = form.Order; ITerrainHole hole = this.axRenderControl1.ObjectManager.CreateTerrainHole(polygon, rootId); if (hole != null) { hole.DrawOrder = order; // 添加节点到界面控件上 myListNode item = new myListNode(string.Format("TerrainHole_{0}", hole.Guid), TreeNodeType.NT_TerrainHole, hole); item.Checked = true; listView1.Items.Add(item); // 添加节点到界面控件上 item = new myListNode(string.Format("RenderPolygon_{0}", hole.Guid), TreeNodeType.NT_RenderGeomtry, rgeoNew); item.Checked = true; listView1.Items.Add(item); } } } }
private void toolStripButtonCreateHole_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.ViewingDistance = 200; this.axRenderControl1.InteractMode = gviInteractMode.gviInteractEdit; this.axRenderControl1.ObjectEditor.StartEditRenderGeometry(currentRenderGeometry, gviGeoEditType.gviGeoEditCreator); }
private void buttonClearProfile_Click(object sender, EventArgs e) { if (renderpolygonDraw != null) { this.axRenderControl1.ObjectManager.DeleteObject(renderpolygonDraw.Guid); renderpolygonDraw = null; } if (RenderPolygonList.Count > 0) { for (int i = 0; i < RenderPolygonList.Count; i++) { this.axRenderControl1.ObjectManager.DeleteObject(RenderPolygonList[i].Guid); } RenderPolygonList.Clear(); } if (RenderMPExteriorList.Count > 0) { for (int i = 0; i < RenderMPExteriorList.Count; i++) { this.axRenderControl1.ObjectManager.DeleteObject(RenderMPExteriorList[i].Guid); } RenderMPExteriorList.Clear(); } if (RenderMPInteriorList.Count > 0) { for (int i = 0; i < RenderMPInteriorList.Count; i++) { this.axRenderControl1.ObjectManager.DeleteObject(RenderMPInteriorList[i].Guid); } RenderMPInteriorList.Clear(); } if (RenderMPProfileList.Count > 0) { for (int i = 0; i < RenderMPProfileList.Count; i++) { this.axRenderControl1.ObjectManager.DeleteObject(RenderMPProfileList[i].Guid); } RenderMPProfileList.Clear(); } PolygonList.Clear(); if (label != null) { this.axRenderControl1.ObjectManager.DeleteObject(label.Guid); label = null; } }
private IRenderPolygon CreateRenderPolygon(IPolygon poly) { Random randObj = new Random(nPolygon); int aColor = randObj.Next(0, 255); int gColor = randObj.Next(0, 255); int rColor = randObj.Next(0, 255); uint ranCor = (uint)(rColor | gColor << 8 | aColor << 16 | 255 << 24); ISurfaceSymbol ss = new SurfaceSymbol(); ss.Color = ColorHelper.UintToColor(ranCor); IRenderPolygon rtm2 = this.axRenderControl1.ObjectManager.CreateRenderPolygon(poly, ss, rootId); nPolygon++; return(rtm2); }
/// <summary> /// 选择水源点 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void toolStripButtonSelectWaterSource_Click(object sender, System.EventArgs e) { if (renderBufPolygon != null) { this.axRenderControl1.ObjectManager.DeleteObject(renderBufPolygon.Guid); renderBufPolygon = null; } deleteMPolygon(); this.axRenderControl1.InteractMode = gviInteractMode.gviInteractSelect; this.axRenderControl1.RcMouseClickSelect += new _IRenderControlEvents_RcMouseClickSelectEventHandler(axRenderControl1_RcMouseClickSelect); this.axRenderControl1.MouseSelectObjectMask = gviMouseSelectObjectMask.gviSelectTerrain; this.axRenderControl1.MouseSelectMode = gviMouseSelectMode.gviMouseSelectClick; }
private void toolStripButtonDeleteHole_Click(object sender, EventArgs e) { this.axRenderControl1.FeatureManager.ResetAllVisibleMask(); if (this.currentRenderGeometry != null) { this.axRenderControl1.ObjectManager.DeleteObject(currentRenderGeometry.Guid); this.currentRenderGeometry = null; } for (int i = 0; i < lll.Count; i++) { this.axRenderControl1.ObjectManager.DeleteObject(lll[i].Guid); } lll.Clear(); }
private void btnCreatePolygon_Click(object sender, EventArgs e) { this.axRenderControl1.RcObjectEditing += new _IRenderControlEvents_RcObjectEditingEventHandler(axRenderControl1_RcObjectEditing); this.axRenderControl1.RcObjectEditFinish += new _IRenderControlEvents_RcObjectEditFinishEventHandler(axRenderControl1_RcObjectEditFinish); this.axRenderControl1.InteractMode = gviInteractMode.gviInteractEdit; fde_polygon = (IPolygon)_geoFactory.CreateGeometry(gviGeometryType.gviGeometryPolygon, gviVertexAttribute.gviVertexAttributeZ); rpolygon = this.axRenderControl1.ObjectManager.CreateRenderPolygon(fde_polygon, null, rootId); if (!_geoEditor.StartEditRenderGeometry(rpolygon, gviGeoEditType.gviGeoEditCreator)) { MessageBox.Show(this.axRenderControl1.GetLastError().ToString()); return; } }
void draw(IGeometry geo) { if (geo == null) { return; } //清空上一次计算的结果 foreach (IRenderPolygon rpoly in rpolyToDel) { if (rpoly != null) { this.axRenderControl1.ObjectManager.DeleteObject(rpoly.Guid); } } rpolyToDel.Clear(); switch (geo.GeometryType) { case gviGeometryType.gviGeometryPolygon: { ISurfaceSymbol sym = new SurfaceSymbol(); sym.Color = System.Drawing.Color.Yellow; IRenderPolygon rpoly = this.axRenderControl1.ObjectManager.CreateRenderPolygon(geo as IPolygon, sym, rootId); rpolyToDel.Add(rpoly); } break; case gviGeometryType.gviGeometryMultiPolygon: { IMultiPolygon multiPolygon = geo as IMultiPolygon; for (int i = 0; i < multiPolygon.GeometryCount; i++) { IPolygon polygon = multiPolygon.GetGeometry(i) as IPolygon; ISurfaceSymbol sym = new SurfaceSymbol(); sym.Color = System.Drawing.Color.Yellow; IRenderPolygon rpoly = this.axRenderControl1.ObjectManager.CreateRenderPolygon(polygon, sym, rootId); rpolyToDel.Add(rpoly); } } break; } setHide(); }
public override void Close() { if (_rPoint != null) { this._objectManager.DeleteObject(_rPoint.Guid); System.Runtime.InteropServices.Marshal.ReleaseComObject(_rPoint); _rPoint = null; } if (_polygon != null) { System.Runtime.InteropServices.Marshal.ReleaseComObject(_polygon); _polygon = null; } if (_rPolygon != null) { this._3DControl.ObjectManager.DeleteObject(_rPolygon.Guid); _rPolygon = null; } }
private void btnCreatePolygon_Click(object sender, EventArgs e) { _geoEditor.FinishEdit(); //用于当拾取到基准面时,或者没有正常右键结束连续调用Start时 if (gfactory == null) { gfactory = new GeometryFactory(); } fde_polygon = (IPolygon)gfactory.CreateGeometry(gviGeometryType.gviGeometryPolygon, gviVertexAttribute.gviVertexAttributeZ); rpolygon = this.axRenderControl1.ObjectManager.CreateRenderPolygon(fde_polygon, null, rootId); resultCode = _geoEditor.StartEditRenderGeometry(rpolygon, gviGeoEditType.gviGeoEditCreator); if (!resultCode) { MessageBox.Show(this.axRenderControl1.GetLastError().ToString()); } }
/// <summary> /// 进行缓冲 /// </summary> /// <param name="distance">缓冲距离</param> /// <returns>缓冲形成的多边形</returns> private IRenderPolygon DrawBufferPolygon(double distance) { IPolygon bufferPolygon = GetBufferPolygon(distance); axRenderControl1.HighlightHelper.SetRegion(bufferPolygon); if (_RenderPolygon != null) { _RenderPolygon.SetFdeGeometry(bufferPolygon); } else { _RenderPolygon = axRenderControl1.ObjectManager.CreateRenderPolygon(bufferPolygon, _SurfaceSymbol, rootId); _RenderPolygon.MaxVisibleDistance = double.MaxValue; _RenderPolygon.MinVisiblePixels = 3; _RenderPolygon.HeightStyle = gviHeightStyle.gviHeightAbsolute; } _RenderPolygon.VisibleMask = gviViewportMask.gviViewAllNormalView; return(_RenderPolygon); }
void axRenderControl1_RcMouseClickSelect(IPickResult PickResult, IPoint IntersectPoint, gviModKeyMask Mask, gviMouseSelectMode EventSender) { if (PickResult == null) { return; } IRenderPolygonPickResult rpPickResult = PickResult as IRenderPolygonPickResult; if (rpPickResult != null) { IRenderPolygon rp = rpPickResult.Polygon; string strToShow = rp.GetClientData("Name"); if (label == null) { label = this.axRenderControl1.ObjectManager.CreateLabel(rootId); } label.Text = strToShow; label.Position = IntersectPoint; } }
private void toolStripButtonDeleteHole_Click(object sender, EventArgs e) { if (this.hole != null) { this.axRenderControl1.ObjectManager.DeleteObject(this.hole.Guid); this.hole = null; } if (this.rpolygon != null) { this.axRenderControl1.ObjectManager.DeleteObject(this.rpolygon.Guid); this.rpolygon = null; } if (this.rmpolygon != null) { this.axRenderControl1.ObjectManager.DeleteObject(this.rmpolygon.Guid); this.rmpolygon = null; } if (this.currentRenderGeometry != null) { this.axRenderControl1.ObjectManager.DeleteObject(currentRenderGeometry.Guid); this.currentRenderGeometry = null; } }
public void Clear() { if (this._drawTool != null) { this._drawTool.Close(); } DF3DApplication app = DF3DApplication.Application; if (app == null || app.Current3DMapControl == null) { return; } if (this._renderBox != null) { app.Current3DMapControl.ObjectManager.DeleteObject(this._renderBox.Guid); this._renderBox = null; } if (this._renderPolygon != null) { app.Current3DMapControl.ObjectManager.DeleteObject(this._renderPolygon.Guid); this._renderPolygon = null; } }
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); }
public static void TestDrawPolygon(double offX, double offY, double offZ, double[] vtxs, ISurfaceSymbol sfSymbol) { if ((vtxs.Length >= 9) && ((vtxs.Length % 3) == 0)) { IPolygon polygon = null; IPoint pointValue = null; polygon = geoFactory.CreateGeometry(gviGeometryType.gviGeometryPolygon, gviVertexAttribute.gviVertexAttributeZ) as IPolygon; for (int i = 0; i < (vtxs.Length / 3); i++) { pointValue = geoFactory.CreatePoint(gviVertexAttribute.gviVertexAttributeZ); pointValue.X = offX + vtxs[i * 3]; pointValue.Y = offY + vtxs[(i * 3) + 1]; pointValue.Z = offZ + vtxs[(i * 3) + 2]; polygon.ExteriorRing.AppendPoint(pointValue); } if (!polygon.IsClosed) { polygon.Close(); } IRenderPolygon item = Ocx.ObjectManager.CreateRenderPolygon(polygon, sfSymbol, Ocx.ProjectTree.RootID); item.MaxVisibleDistance = maxVisibleDis; tmpList.Add(item); } }
private void _3DControl_RcMouseClickSelect(object sender, _IRenderControlEvents_RcMouseClickSelectEvent e) { try { if (e.intersectPoint != null) { IPoint pt1 = this._geoFactory.CreateGeometry(gviGeometryType.gviGeometryPoint, gviVertexAttribute.gviVertexAttributeZ) as IPoint; pt1.X = e.intersectPoint.X; pt1.Y = e.intersectPoint.Y; pt1.Z = e.intersectPoint.Z; if (e.eventSender == gviMouseSelectMode.gviMouseSelectClick) { if (!this._isStarted) { this.Close(); if (this._onStartDraw != null) { this._onStartDraw(); } this._polygon = this._geoFactory.CreateGeometry(gviGeometryType.gviGeometryPolygon, gviVertexAttribute.gviVertexAttributeZ) as IPolygon; this._polygon.ExteriorRing.AppendPoint(pt1); IPoint pt2 = pt1.Clone() as IPoint; pt2.X += 0.015; this._polygon.ExteriorRing.AppendPoint(pt2); _rPolygon = this._3DControl.ObjectManager.CreateRenderPolygon(this._polygon, this._surfaceSymbol, this._rootID); _rPolygon.HeightStyle = this._heightStyle; this._3DControl.HighlightHelper.SetRegion(this._polygon); this._3DControl.HighlightHelper.VisibleMask = 1; //this._polygon.ExteriorRing.Close(); this._isStarted = true; this._isFinished = false; } else { this._polygon.ExteriorRing.AppendPoint(pt1); this._polygon.ExteriorRing.Close(); this._rPolygon.SetFdeGeometry(this._polygon); this._3DControl.HighlightHelper.SetRegion(this._polygon); } } else if (e.eventSender == gviMouseSelectMode.gviMouseSelectMove) { if (_rPoint != null) { this._objectManager.DeleteObject(_rPoint.Guid); System.Runtime.InteropServices.Marshal.ReleaseComObject(_rPoint); _rPoint = null; } _rPoint = this._objectManager.CreateRenderPoint(pt1, this._simplePointSymbol, this._rootID); if (this._isStarted) { this._polygon.ExteriorRing.UpdatePoint(this._polygon.ExteriorRing.PointCount - 1, pt1); this._rPolygon.SetFdeGeometry(this._polygon); this._3DControl.HighlightHelper.SetRegion(this._polygon); } } } } catch (Exception ex) { LoggingService.Error(ex.Message + "\r\n" + ex.StackTrace); } }
private void 生成地形编辑ToolStripMenuItem_Click(object sender, System.EventArgs e) { myListNode selectNode = this.listView1.SelectedItems[0] as myListNode; if (selectNode != null) { IRenderPolygon rgeo = selectNode.obj as IRenderPolygon; IPolygon polygon = rgeo.GetFdeGeometry() as IPolygon; // 生成带洞polygon,可注释掉 IEnvelope env = rgeo.Envelope; IRing ring = (new GeometryFactory()).CreateGeometry(gviGeometryType.gviGeometryRing, gviVertexAttribute.gviVertexAttributeZ) as IRing; IPoint center = (new GeometryFactory()).CreatePoint(gviVertexAttribute.gviVertexAttributeZ); center.Position = env.Center; center.SpatialCRS = crs as ISpatialCRS; ring.AppendPoint(center); center.Y = env.Center.Y - 10; ring.AppendPoint(center); center.X = env.Center.X + 10; ring.AppendPoint(center); center.Y = env.Center.Y; ring.AppendPoint(center); polygon.AddInteriorRing(ring); // To here ISurfaceSymbol sfbottom = new SurfaceSymbol(); sfbottom.Color = System.Drawing.Color.Red; IRenderPolygon rgeoNew = this.axRenderControl1.ObjectManager.CreateRenderPolygon(polygon, sfbottom, rootId); 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; } ITerrainModifier modifier = this.axRenderControl1.ObjectManager.CreateTerrainModifier(polygon, rootId); if (modifier != null) { modifier.DrawOrder = order; modifier.ElevationBehavior = mode; // 添加节点到界面控件上 myListNode item = new myListNode(string.Format("TerrainModifier_{0}", modifier.Guid), TreeNodeType.NT_TerrainModifier, modifier); item.Checked = true; listView1.Items.Add(item); // 添加节点到界面控件上 item = new myListNode(string.Format("RenderPolygon_{0}", modifier.Guid), TreeNodeType.NT_RenderGeomtry, rgeoNew); item.Checked = true; listView1.Items.Add(item); } } } }
private void repositoryItemButtonEdit1_ButtonClick(object sender, DevExpress.XtraEditors.Controls.ButtonPressedEventArgs e) { DevExpress.XtraEditors.Controls.EditorButton btn = e.Button; switch (btn.Caption) { case "定位": DF3DApplication app = DF3DApplication.Application; if (app == null || app.Current3DMapControl == null) { return; } int focusedRowHandle = this.gridView1.FocusedRowHandle; if (focusedRowHandle == -1) { return; } DataRow dr = this.gridView1.GetDataRow(focusedRowHandle); if (dr["geo"] != null && dr["Name"] != null && dr["fcName"] != null) { ISurfaceSymbol ss = new SurfaceSymbolClass(); ss.Color = 0xcc00ff00; ICurveSymbol cs = new CurveSymbolClass(); cs.Color = 0xff00ff00; cs.Width = -5; ss.BoundarySymbol = cs; ISimplePointSymbol ps = new SimplePointSymbol(); ps.Size = SystemInfo.Instance.SymbolSize; ps.FillColor = Convert.ToUInt32(SystemInfo.Instance.FillColor, 16); IGeometry objGeo = dr["geo"] as IGeometry; IPoint pt = null; if (objGeo.GeometryType == gviGeometryType.gviGeometryMultiPolyline) { double x = 0; double y = 0; double z = 0; IMultiPolyline mPolyline = objGeo as IMultiPolyline; for (int m = 0; m < mPolyline.GeometryCount; m++) { IPolyline polyline = mPolyline.GetPolyline(m); IPoint pttemp = polyline.Midpoint; x += pttemp.X; y += pttemp.Y; z += pttemp.Z; } x = x / mPolyline.GeometryCount; y = y / mPolyline.GeometryCount; z = z / mPolyline.GeometryCount; pt = (new GeometryFactory()).CreatePoint(gviVertexAttribute.gviVertexAttributeZ); pt.X = x; pt.Y = y; pt.Z = z; IRenderMultiPolyline rMPolyline = app.Current3DMapControl.ObjectManager.CreateRenderMultiPolyline(mPolyline, cs, app.Current3DMapControl.ProjectTree.RootID); rMPolyline.HeightStyle = gviHeightStyle.gviHeightOnEverything; rMPolyline.Glow(8000); this._listRender.Add(rMPolyline.Guid); } else if (objGeo.GeometryType == gviGeometryType.gviGeometryMultiPolygon) { double x = 0; double y = 0; double z = 0; IMultiPolygon mPolygon = objGeo as IMultiPolygon; for (int m = 0; m < mPolygon.GeometryCount; m++) { IPolygon polygon = mPolygon.GetPolygon(m); IPoint pttemp = polygon.Centroid; x += pttemp.X; y += pttemp.Y; z += pttemp.Z; } x = x / mPolygon.GeometryCount; y = y / mPolygon.GeometryCount; z = z / mPolygon.GeometryCount; pt = (new GeometryFactory()).CreatePoint(gviVertexAttribute.gviVertexAttributeZ); pt.X = x; pt.Y = y; pt.Z = z; IRenderMultiPolygon rMPolygon = app.Current3DMapControl.ObjectManager.CreateRenderMultiPolygon(mPolygon, ss, app.Current3DMapControl.ProjectTree.RootID); rMPolygon.HeightStyle = gviHeightStyle.gviHeightOnEverything; rMPolygon.Glow(8000); this._listRender.Add(rMPolygon.Guid); } else if (objGeo.GeometryType == gviGeometryType.gviGeometryPolyline) { IPolyline polyline = objGeo as IPolyline; pt = polyline.Midpoint; IRenderPolyline rPolyline = app.Current3DMapControl.ObjectManager.CreateRenderPolyline(polyline, cs, app.Current3DMapControl.ProjectTree.RootID); rPolyline.HeightStyle = gviHeightStyle.gviHeightOnEverything; rPolyline.Glow(8000); this._listRender.Add(rPolyline.Guid); } else if (objGeo.GeometryType == gviGeometryType.gviGeometryPoint) { IPoint point = objGeo as IPoint; pt = point; IRenderPoint rPoint = app.Current3DMapControl.ObjectManager.CreateRenderPoint(point, ps, app.Current3DMapControl.ProjectTree.RootID); rPoint.Glow(8000); this._listRender.Add(rPoint.Guid); } else if (objGeo.GeometryType == gviGeometryType.gviGeometryPolygon) { IPolygon polygon = objGeo as IPolygon; pt = polygon.Centroid; IRenderPolygon rPolygon = app.Current3DMapControl.ObjectManager.CreateRenderPolygon(polygon, ss, app.Current3DMapControl.ProjectTree.RootID); rPolygon.HeightStyle = gviHeightStyle.gviHeightOnEverything; rPolygon.Glow(8000); this._listRender.Add(rPolygon.Guid); } else { return; } ITableLabel tl = DrawTool.CreateTableLabel1(1); tl.TitleText = dr["fcName"].ToString(); tl.SetRecord(0, 0, dr["Name"].ToString()); tl.Position = pt; this._listRender.Add(tl.Guid); app.Current3DMapControl.Camera.FlyToObject(tl.Guid, gviActionCode.gviActionFlyTo); } 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); } }
/// <summary> /// 挖洞 /// </summary> /// <param name="polygon"></param> /// <param name="deep"></param> public void DrawTerrainHole(IPolygon polygon, double deep) { if (polygon == null) { return; } IRing ring = polygon.ExteriorRing; if (!ring.IsClosed) { return; } IPoint point0 = ring.GetPoint(0); double lowestPoint = this.axRenderControl1.Terrain.GetElevation(point0.X, point0.Y, gviGetElevationType.gviGetElevationFromDatabase); IPolygon pBottom = geoFactory.CreateGeometry(gviGeometryType.gviGeometryPolygon, gviVertexAttribute.gviVertexAttributeZ) as IPolygon; pBottom.SpatialCRS = crs as ISpatialCRS; for (int i = 0; i < ring.PointCount; i++) { IPoint point = ring.GetPoint(i); point.Z = this.axRenderControl1.Terrain.GetElevation(point.X, point.Y, gviGetElevationType.gviGetElevationFromDatabase); if (point.Z < lowestPoint) { lowestPoint = point.Z; } ring.UpdatePoint(i, point); point = point.Clone2(gviVertexAttribute.gviVertexAttributeZ) as IPoint; pBottom.ExteriorRing.AppendPoint(point); } //b、计算底面 lowestPoint -= deep; for (int jj = 0; jj < pBottom.ExteriorRing.PointCount; jj++) { IPoint point1 = pBottom.ExteriorRing.GetPoint(jj); point1.Z = lowestPoint; pBottom.ExteriorRing.UpdatePoint(jj, point1); } ICurveSymbol cvSymbol = new CurveSymbol(); cvSymbol.Color = System.Drawing.Color.Yellow; ISurfaceSymbol sfside = new SurfaceSymbol(); sfside.BoundarySymbol = cvSymbol; sfside.Color = System.Drawing.Color.BurlyWood; ISurfaceSymbol sfbottom = new SurfaceSymbol(); sfbottom.BoundarySymbol = cvSymbol; sfbottom.Color = System.Drawing.Color.Green; rpolygon = this.axRenderControl1.ObjectManager.CreateRenderPolygon(pBottom, sfbottom, rootId); rpolygon.MaxVisibleDistance = 9999999; IMultiPolygon mpolygon = geoFactory.CreateGeometry(gviGeometryType.gviGeometryMultiPolygon, gviVertexAttribute.gviVertexAttributeZ) as IMultiPolygon; mpolygon.SpatialCRS = crs as ISpatialCRS; for (int i = 0; i < ring.PointCount - 1; i++) { IPolygon pSide = geoFactory.CreateGeometry(gviGeometryType.gviGeometryPolygon, gviVertexAttribute.gviVertexAttributeZ) as IPolygon; pSide.SpatialCRS = crs as ISpatialCRS; pSide.ExteriorRing.AppendPoint(polygon.ExteriorRing.GetPoint(i)); pSide.ExteriorRing.AppendPoint(pBottom.ExteriorRing.GetPoint(i)); pSide.ExteriorRing.AppendPoint(pBottom.ExteriorRing.GetPoint(i + 1)); pSide.ExteriorRing.AppendPoint(polygon.ExteriorRing.GetPoint(i + 1)); pSide.Close(); mpolygon.AddPolygon(pSide); //renderControl.ObjectManager.CreateRenderPolygon(pSide, sfside); } rmpolygon = this.axRenderControl1.ObjectManager.CreateRenderMultiPolygon(mpolygon, sfside, rootId); rmpolygon.MaxVisibleDistance = 99999999; hole = this.axRenderControl1.ObjectManager.CreateTerrainHole(polygon, rootId); currentRenderGeometry.VisibleMask = gviViewportMask.gviViewNone; }
private void CreateTerrainHole() { try { IGeometry geo = this._drawTool.GetGeo(); if (geo == null) { return; } IPolygon region = geo as IPolygon; region.Close(); IPolygon region2 = geo.Clone2(gviVertexAttribute.gviVertexAttributeNone) as IPolygon; double refheight = d3.Terrain.GetElevation(region2.Centroid.X, region2.Centroid.Y, gviGetElevationType.gviGetElevationFromMemory) - 30; ITerrainHole terrainHole = d3.ObjectManager.CreateTerrainHole(region, d3.ProjectTree.RootID); this._listRGuids.Add(terrainHole.Guid); IPolygon bottom = region.Clone() as IPolygon; for (int i = 0; i < bottom.ExteriorRing.PointCount; i++) { IPoint pointValue = bottom.ExteriorRing.GetPoint(i); pointValue.Z = refheight; bottom.ExteriorRing.UpdatePoint(i, pointValue); } ICurveSymbol cs = new CurveSymbol(); cs.Color = 0x00ffffff; ISurfaceSymbol bottomSS = new SurfaceSymbol(); bottomSS.ImageName = System.Windows.Forms.Application.StartupPath + "\\..\\Resource\\Images\\TerrainHole\\TextureBottom.jpg"; bottomSS.RepeatLengthU = 5; bottomSS.RepeatLengthV = 5; bottomSS.EnableLight = true; bottomSS.BoundarySymbol = cs; IRenderPolygon rBottom = d3.ObjectManager.CreateRenderPolygon(bottom, bottomSS, d3.ProjectTree.RootID); this._listRGuids.Add(rBottom.Guid); IGeometryFactory geoFact = new GeometryFactoryClass(); IMultiPolygon side = geoFact.CreateGeometry(gviGeometryType.gviGeometryMultiPolygon, gviVertexAttribute.gviVertexAttributeZ) as IMultiPolygon; for (int i = 0; i < region.ExteriorRing.PointCount - 1; i++) { IPolygon gon = geoFact.CreateGeometry(gviGeometryType.gviGeometryPolygon, gviVertexAttribute.gviVertexAttributeZ) as IPolygon; IPoint pt1 = region.ExteriorRing.GetPoint(i); IPoint pt1temp = pt1.Clone() as IPoint; if (pt1temp.Z < refheight) { pt1temp.Z = refheight; } IPoint pt2 = region.ExteriorRing.GetPoint(i + 1); IPoint pt2temp = pt2.Clone() as IPoint; if (pt2temp.Z < refheight) { pt2temp.Z = refheight; } IPoint pt3 = pt2.Clone() as IPoint; pt3.Z = refheight; IPoint pt4 = pt1.Clone() as IPoint; pt4.Z = refheight; gon.ExteriorRing.AppendPoint(pt1temp); gon.ExteriorRing.AppendPoint(pt2temp); gon.ExteriorRing.AppendPoint(pt3); gon.ExteriorRing.AppendPoint(pt4); gon.Close(); side.AddPolygon(gon); } ISurfaceSymbol sideSS = new SurfaceSymbol(); sideSS.ImageName = System.Windows.Forms.Application.StartupPath + "\\..\\Resource\\Images\\TerrainHole\\TextureSide.jpg"; sideSS.RepeatLengthU = 5; sideSS.RepeatLengthV = 5; sideSS.EnableLight = true; sideSS.BoundarySymbol = cs; IRenderMultiPolygon rSide = d3.ObjectManager.CreateRenderMultiPolygon(side, sideSS, d3.ProjectTree.RootID); this._listRGuids.Add(rSide.Guid); } catch (Exception ex) { } }
private void _3DControl_RcMouseClickSelect(object sender, _IRenderControlEvents_RcMouseClickSelectEvent e) { try { if (e.intersectPoint != null) { IPoint pt1 = this._geoFactory.CreateGeometry(gviGeometryType.gviGeometryPoint, gviVertexAttribute.gviVertexAttributeZ) as IPoint; pt1.X = e.intersectPoint.X; pt1.Y = e.intersectPoint.Y; pt1.Z = e.intersectPoint.Z; if (e.eventSender == gviMouseSelectMode.gviMouseSelectClick) { if (!this._isStarted) { this.Close(); if (this._onStartDraw != null) { this._onStartDraw(); } this._polygon = this._geoFactory.CreateGeometry(gviGeometryType.gviGeometryPolygon, gviVertexAttribute.gviVertexAttributeZ) as IPolygon; this._polygon.ExteriorRing.AppendPoint(pt1); IPoint pt2 = pt1.Clone() as IPoint; pt2.X += 0.015; this._polygon.ExteriorRing.AppendPoint(pt2); ISurfaceSymbol ss = new SurfaceSymbolClass(); ss.Color = Convert.ToUInt32(SystemInfo.Instance.FillColor, 16); ICurveSymbol cs = new CurveSymbolClass(); cs.Color = Convert.ToUInt32(SystemInfo.Instance.LineColor, 16); ss.BoundarySymbol = cs; _rPolygon = this._3DControl.ObjectManager.CreateRenderPolygon(this._polygon, ss, this._3DControl.ProjectTree.RootID); _rPolygon.HeightStyle = this._heightStyle; //this._polygon.ExteriorRing.Close(); this._isStarted = true; this._isFinished = false; } else { this._polygon.ExteriorRing.AppendPoint(pt1); this._polygon.ExteriorRing.Close(); this._rPolygon.SetFdeGeometry(this._polygon); } } else if (e.eventSender == gviMouseSelectMode.gviMouseSelectMove) { if (_rPoint != null) { this._objectManager.DeleteObject(_rPoint.Guid); System.Runtime.InteropServices.Marshal.ReleaseComObject(_rPoint); _rPoint = null; } _rPoint = this._objectManager.CreateRenderPoint(pt1, this._simplePointSymbol, this._rootID); if (this._isStarted) { this._polygon.ExteriorRing.UpdatePoint(this._polygon.ExteriorRing.PointCount - 1, pt1); this._rPolygon.SetFdeGeometry(this._polygon); } } } } catch (Exception ex) { LoggingService.Error(ex.Message + "\r\n" + ex.StackTrace); } }