protected virtual void OnMeasureData(PositionEventArgs e) { EventHandler <PositionEventArgs> handler = PositionEvent; if (handler != null) { handler(this, e); } }
private void SurfaceMouseUp(object sender, MouseButtonEventArgs e) { if (positionInfo.Count < 1) { return; } // using SciChart.Charting3D.RenderableSeries HitTestInfo3D hitVertex2 = backgroundSurfaceMesh.HitTest(e.GetPosition(sciChart)); HitTestInfo3D hitVertex = surfaceMeshRenderableSeries.HitTest(e.GetPosition(sciChart)); var xyzInfo2 = backgroundSurfaceMesh.ToSeriesInfo(hitVertex2); var xyzInfo = surfaceMeshRenderableSeries.ToSeriesInfo(hitVertex); if (IsHitPointValid(hitVertex) && !drawInfo.IsNullOrEmptyList()) { if (movePoint && selectedIdx > -1) { int idx = sciChart.Viewport3D.RootEntity.Children.Count; // sciChart.Viewport3D.RootEntity.Children.Count? if (positionInfo[selectedIdx / 2].points[0].y > positionInfo[selectedIdx / 2].points[1].y) { marker.Update(selectedIdx, xyzInfo.HitVertex.X, positionInfo[selectedIdx / 2].points[0].y + 25, xyzInfo.HitVertex.Z); } else { marker.Update(selectedIdx, xyzInfo.HitVertex.X, positionInfo[selectedIdx / 2].points[1].y + 25, xyzInfo.HitVertex.Z); } Coords tt = positionInfo[selectedIdx / 2].points[selectedIdx % 2]; tt.x = xyzInfo.HitVertex.X; tt.y = xyzInfo.HitVertex.Y; tt.z = xyzInfo.HitVertex.Z; positionInfo[selectedIdx / 2].points[selectedIdx % 2] = tt; tt = ConvertCoordToVec(tt); if (selectedIdx % 2 == 0) { drawInfo[selectedIdx / 2].firstPos.X = tt.x; drawInfo[selectedIdx / 2].firstPos.Y = tt.y; drawInfo[selectedIdx / 2].firstPos.Z = tt.z; } else { drawInfo[selectedIdx / 2].secondPos.X = tt.x; drawInfo[selectedIdx / 2].secondPos.Y = tt.y; drawInfo[selectedIdx / 2].secondPos.Z = tt.z; } drawInfo[selectedIdx / 2].Update(); movePoint = false; selectedIdx = -1; } } //if (drawInfo.Count > 0) //{ // MessageBox.Show(e.GetPosition(sciChart).X.ToString() + ", " + e.GetPosition(sciChart).Y.ToString()); // SciChart.Charting3D.Primitives.HeightMapIndex t = new SciChart.Charting3D.Primitives.HeightMapIndex(); // t.XIndex = 647; // t.ZIndex = 375; // hitVertex.EntityId = 7; // hitVertex.IjIndices = t; // hitVertex.IsHit = true; // hitVertex.VertexId = 0; // // //var tt = surfaceMeshRenderableSeries.HitTest(new Point(647, 375)); // var tt = surfaceMeshRenderableSeries.ToSeriesInfo(hitVertex); //} if (IsHitPointValid(hitVertex) && positionInfo[annotIdx].checkShape != CheckShape.None) { PositionInfo temp = positionInfo[annotIdx]; temp.points.Add(new Coords(xyzInfo.HitVertex.X, xyzInfo.HitVertex.Y, xyzInfo.HitVertex.Z)); // 마우스 따라가는 거 필요함 if (temp.points.Count == 2 && temp.checkShape != CheckShape.Circle_3P) { PositionEventArgs args = new PositionEventArgs(); switch (temp.checkShape) { case CheckShape.Line: Coords[] LineCoords = { temp.points[0], temp.points[1] }; temp.length = GetLength(); LineCoords[0] = ConvertCoordToVec(temp.points[0]); LineCoords[1] = ConvertCoordToVec(temp.points[1]); drawInfo.Add(new DrawGeometry(new Vector3(LineCoords[0].x, LineCoords[0].y, LineCoords[0].z), new Vector3(LineCoords[1].x, LineCoords[1].y, LineCoords[1].z), Color.FromArgb(128, 0, 0, 255), CheckShape.Line)); sciChart.Viewport3D.RootEntity.Children.Add(drawInfo[annotIdx]); AddMarker(temp); args.Data = temp; OnMeasureData(args); break; case CheckShape.Rect: Coords[] rectCoords = { temp.points[0], temp.points[1] }; temp.width = GetWidth(); temp.height = GetHeight(); rectCoords[0] = ConvertCoordToVec(temp.points[0]); rectCoords[1] = ConvertCoordToVec(temp.points[1]); drawInfo.Add(new DrawGeometry(new Vector3(rectCoords[0].x, rectCoords[0].y, rectCoords[0].z), new Vector3(rectCoords[1].x, rectCoords[1].y, rectCoords[1].z), Color.FromArgb(128, 255, 0, 0), CheckShape.Rect)); sciChart.Viewport3D.RootEntity.Children.Add(drawInfo[annotIdx]); AddMarker(temp); args.Data = temp; OnMeasureData(args); break; case CheckShape.Circle_2P: Coords[] circleCoords = { temp.points[0], temp.points[1] }; temp.radius = GetRadius2P(); circleCoords[0] = ConvertCoordToVec(temp.points[0]); circleCoords[1] = ConvertCoordToVec(temp.points[1]); drawInfo.Add(new DrawGeometry(new Vector3(circleCoords[0].x, circleCoords[0].y, circleCoords[0].z), new Vector3(circleCoords[1].x, circleCoords[1].y, circleCoords[1].z), Color.FromArgb(255, 255, 0, 0), CheckShape.Circle_2P)); sciChart.Viewport3D.RootEntity.Children.Add(drawInfo[annotIdx]); break; default: break; } } else if (temp.points.Count == 3) { double[] ret = GetRadiusCenter3P(); temp.centerPoints.x = (float)ret[0]; temp.centerPoints.y = xyzInfo.HitVertex.Y; temp.centerPoints.z = (float)ret[1]; temp.radius = ret[2]; } positionInfo[annotIdx] = temp; } }