/// <summary> /// 鼠标点击 拾取线段点 /// </summary> /// <param name="PickResult"></param> /// <param name="IntersectPoint"></param> /// <param name="Mask"></param> /// <param name="EventSender"></param> void axRenderControl1_RcMouseClickSelect(IPickResult PickResult, IPoint IntersectPoint, gviModKeyMask Mask, gviMouseSelectMode EventSender) { if (IntersectPoint == null) { return; } if (renderPolyline == null) { ICurveSymbol cs = new CurveSymbol(); cs.Color = System.Drawing.Color.Yellow; cs.Width = -5; renderPolyline = this.axRenderControl1.ObjectManager.CreateRenderPolyline(polyline, cs, rootId); } if (polyline.PointCount < 2) { polyline.AppendPoint(IntersectPoint); } if (polyline.PointCount == 2) { this.axRenderControl1.InteractMode = gviInteractMode.gviInteractNormal; this.axRenderControl1.MouseSelectObjectMask = gviMouseSelectObjectMask.gviSelectNone; this.axRenderControl1.MouseSelectMode = gviMouseSelectMode.gviMouseSelectClick; this.axRenderControl1.RcMouseClickSelect -= new _IRenderControlEvents_RcMouseClickSelectEventHandler(axRenderControl1_RcMouseClickSelect); IPoint p = polyline.StartPoint; this.startX.Text = p.X.ToString(); this.startY.Text = p.Y.ToString(); this.startZ.Text = p.Z.ToString(); p = polyline.EndPoint; this.endX.Text = p.X.ToString(); this.endY.Text = p.Y.ToString(); this.endZ.Text = p.Z.ToString(); flagx = false; this.label7.Text = "线构造成功!请点击“通视分析”按钮"; this.btnFlyToSourcePoint.Enabled = true; this.btnFlyToTargetPoint.Enabled = true; } renderPolyline.SetFdeGeometry(polyline); }
private void _3DControl_RcMouseClickSelect(object sender, Gvitech.CityMaker.Controls._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(); } if (_polyline != null) { _polyline = null; } startPoint = pt1; double radius = 0.0000001; this._geo = (startPoint as ITopologicalOperator2D).Buffer2D(radius, gviBufferStyle.gviBufferCapround); _rPolygon = this._3DControl.ObjectManager.CreateRenderPolygon(this._geo as IPolygon, this._surfaceSymbol, this._rootID); _rPolygon.HeightStyle = this._heightStyle; this._3DControl.HighlightHelper.SetRegion(this._geo); this._3DControl.HighlightHelper.VisibleMask = 1; _polyline = this._geoFactory.CreateGeometry(gviGeometryType.gviGeometryPolyline, gviVertexAttribute.gviVertexAttributeZ) as IPolyline; _polyline.AppendPoint(pt1); IPoint pt2 = pt1.Clone() as IPoint; pt2.X += 0.000001; _polyline.AppendPoint(pt2); _rPolyline = this._3DControl.ObjectManager.CreateRenderPolyline(_polyline, this._curveSymbol, this._3DControl.ProjectTree.RootID); _label = this._3DControl.ObjectManager.CreateLabel(this._3DControl.ProjectTree.RootID); _label.Position = _polyline.Midpoint; _label.Text = _polyline.Length.ToString("0.00") + " 米"; ITextSymbol ts = new TextSymbolClass(); TextAttribute ta = new TextAttribute(); ta.TextColor = Convert.ToUInt32(SystemInfo.Instance.TextColor, 16); ta.TextSize = SystemInfo.Instance.TextSize; ts.TextAttribute = ta; _label.TextSymbol = ts; this._isStarted = true; this._isFinished = false; } else { //this.End(); this._isStarted = false; this._isFinished = true; _polyline.UpdatePoint(1, pt1); _rPolyline.SetFdeGeometry(_polyline); _label.Position = _polyline.Midpoint; _label.Text = _polyline.Length.ToString("0.00") + " 米"; double radius = Math.Sqrt((startPoint.X - pt1.X) * (startPoint.X - pt1.X) + (startPoint.Y - pt1.Y) * (startPoint.Y - pt1.Y) + (startPoint.Z - pt1.Z) * (startPoint.Z - pt1.Z)); this._geo = (startPoint as ITopologicalOperator2D).Buffer2D(radius, gviBufferStyle.gviBufferCapround); _rPolygon.SetFdeGeometry(this._geo); this._3DControl.HighlightHelper.SetRegion(this._geo); this._geo = this._geo.Clone2(gviVertexAttribute.gviVertexAttributeNone); if (this._onFinishedDraw != null) { this._onFinishedDraw(); } } } 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) { _polyline.UpdatePoint(1, pt1); _rPolyline.SetFdeGeometry(_polyline); _label.Position = _polyline.Midpoint; _label.Text = _polyline.Length.ToString("0.00") + " 米"; double radius = Math.Sqrt((startPoint.X - pt1.X) * (startPoint.X - pt1.X) + (startPoint.Y - pt1.Y) * (startPoint.Y - pt1.Y) + (startPoint.Z - pt1.Z) * (startPoint.Z - pt1.Z)); this._geo = (startPoint as ITopologicalOperator2D).Buffer2D(radius, gviBufferStyle.gviBufferCapround); _rPolygon.SetFdeGeometry(this._geo); this._3DControl.HighlightHelper.SetRegion(this._geo); } } } } catch (Exception ex) { LoggingService.Error(ex.Message + "\r\n" + ex.StackTrace); } }