private void Shape_MouseMove(ViewGeometry viewGeometry, object sender, MouseEventArgs e) { if (isDragging && sender != null) { FrameworkElement element = (FrameworkElement)sender; Point point = e.GetPosition(grdHolder); double xPosition = point.X - selectPosition.X; double yPosition = point.Y - selectPosition.Y; double maxWidth = grdHolder.ActualWidth - 30; double maxHeight = grdHolder.ActualHeight - 50; dragDistance = Math.Abs(xPosition - refreshPosition.X) + Math.Abs(yPosition - refreshPosition.Y); viewGeometry.Move(Math.Min(maxWidth, Math.Max(0, xPosition)), Math.Min(maxHeight, Math.Max(0, yPosition))); if (dragDistance >= dragCollisionRefresh) { refreshPosition = new Point(xPosition, yPosition); viewGeometry.OnCheckCollision(); dragDistance = 0; } this.rectangleInfo.UpdateData(element.Name, viewGeometry); } }
private void OutlineEdges(ViewGeometry viewGeometry) { foreach (var vertex in viewGeometry.Geometry.Vertices) { foreach (var connection in vertex.VertexConnections) { DisplayRayLine(connection.Vertex1.Position.Point, connection.Vertex2.Position.Point, "TraceLine", connection.Name); } } }
public void UpdateData(string name, ViewGeometry viewGeometry) { this.lblName.Text = "Name: " + name; this.lbl11.Text = "11: X:" + viewGeometry.Geometry.Rect.TopLeft.X.ToString("0.0") + " Y:" + viewGeometry.Geometry.Rect.TopLeft.Y.ToString("0.0"); this.lbl12.Text = "12: X:" + viewGeometry.Geometry.Rect.TopRight.X.ToString("0.0") + " Y:" + viewGeometry.Geometry.Rect.TopRight.Y.ToString("0.0"); this.lbl21.Text = "21: X:" + viewGeometry.Geometry.Rect.BottomLeft.X.ToString("0.0") + " Y:" + viewGeometry.Geometry.Rect.BottomLeft.Y.ToString("0.0"); this.lbl22.Text = "22: X:" + viewGeometry.Geometry.Rect.BottomRight.X.ToString("0.0") + " Y:" + viewGeometry.Geometry.Rect.BottomRight.Y.ToString("0.0"); this.lblHeight.Text = "Height: " + viewGeometry.Geometry.Rect.Height.ToString("0.0"); this.lblWidth.Text = "Width: " + viewGeometry.Geometry.Rect.Width.ToString("0.0"); }
private void Shape_MouseUp(ViewGeometry viewGeometry, object sender, MouseButtonEventArgs e) { isDragging = false; FrameworkElement element = (FrameworkElement)sender; if (element != null) { OutlineEdges(viewGeometry); dragDistance = 0; element.ReleaseMouseCapture(); this.rectangleInfo.UpdateData(element.Name, viewGeometry); } }
private void Shape_MouseDown(ViewGeometry viewGeometry, object sender, MouseButtonEventArgs e) { FrameworkElement element = (FrameworkElement)sender; if (element != null) { element.CaptureMouse(); selectPosition = e.GetPosition(element); refreshPosition = selectPosition; isDragging = true; this.rectangleInfo.UpdateData(element.Name, viewGeometry); if (dragDistance > dragCollisionRefresh) { dragDistance = 0; } } }
private void Window_Loaded(object sender, EventArgs e) { CollisionMap = new List <ViewGeometry>(); Action <ViewGeometry.ViewGeometryHolder> onMouseDown = (item) => { Shape_MouseDown(item.ViewGeometry, item.Element, (MouseButtonEventArgs)item.MouseEventArgs); DrawBoundingBox("", item.ViewGeometry.Geometry.Rect); }; Action <ViewGeometry.ViewGeometryHolder> onMouseUp = (item) => { Shape_MouseUp(item.ViewGeometry, item.Element, (MouseButtonEventArgs)item.MouseEventArgs); OutlineEdges(item.ViewGeometry); DrawBoundingBox("", item.ViewGeometry.Geometry.Rect); }; Action <ViewGeometry.ViewGeometryHolder> onMouseMove = (item) => { Shape_MouseMove(item.ViewGeometry, item.Element, (MouseEventArgs)item.MouseEventArgs); if (isDragging) { OutlineEdges(item.ViewGeometry); DrawBoundingBox("", item.ViewGeometry.Geometry.Rect); } }; CollisionManager collisionManager = new CollisionManager(2); collisionManager.OnRayLineCreated += DisplayRayLine; ViewGeometry viewGeometry1 = new ViewGeometry(CollisionMap, collisionManager).AddShape(rctOne, new DynamicShape(new GeometryViewAdapter(rctOne))); viewGeometry1.MouseDown += onMouseDown; viewGeometry1.MouseUp += onMouseUp; viewGeometry1.MouseMove += onMouseMove; ViewGeometry viewGeometry2 = new ViewGeometry(CollisionMap, collisionManager).AddShape(rctThree, new DynamicShape(new GeometryViewAdapter(rctThree))); viewGeometry2.MouseDown += onMouseDown; viewGeometry2.MouseUp += onMouseUp; viewGeometry2.MouseMove += onMouseMove; ViewGeometry viewGeometry3 = new ViewGeometry(CollisionMap, collisionManager).AddShape(rctFour, new DynamicShape(new GeometryViewAdapter(rctFour))); viewGeometry3.MouseDown += onMouseDown; viewGeometry3.MouseUp += onMouseUp; viewGeometry3.MouseMove += onMouseMove; ViewGeometry viewGeometry4 = new ViewGeometry(CollisionMap, collisionManager).AddShape(polyTriangle, new DynamicShape(new GeometryViewAdapter(polyTriangle))); viewGeometry4.MouseDown += onMouseDown; viewGeometry4.MouseUp += onMouseUp; viewGeometry4.MouseMove += onMouseMove; ViewGeometry viewGeometry5 = new ViewGeometry(CollisionMap, collisionManager).AddShape(polyOctagon, new DynamicShape(new GeometryViewAdapter(polyOctagon))); viewGeometry5.MouseDown += onMouseDown; viewGeometry5.MouseUp += onMouseUp; viewGeometry5.MouseMove += onMouseMove; CollisionViewGeometry = new ViewGeometry(CollisionMap, collisionManager).AddShape(rctTwo, new DynamicShape(new GeometryViewAdapter(rctTwo))).AddShape(txtCollision, new DynamicShape(new GeometryViewAdapter(txtCollision))); CollisionViewGeometry.MouseDown += onMouseDown; CollisionViewGeometry.MouseUp += onMouseUp; CollisionViewGeometry.MouseMove += onMouseMove; CollisionViewGeometry.CheckCollision += (results) => { if (results.Count > 0) { txtCollision.Text = "Colliding with " + results.Count() + " items"; } else { txtCollision.Text = "No collisions"; } }; CollisionViewGeometry2 = new ViewGeometry(CollisionMap, collisionManager).AddShape(rctTwo2, new DynamicShape(new GeometryViewAdapter(rctTwo2))).AddShape(txtCollision2, new DynamicShape(new GeometryViewAdapter(txtCollision2))); CollisionViewGeometry2.MouseDown += onMouseDown; CollisionViewGeometry2.MouseUp += onMouseUp; CollisionViewGeometry2.MouseMove += onMouseMove; CollisionViewGeometry2.CheckCollision += (results) => { if (results.Count > 0) { txtCollision2.Text = "Colliding with " + results.Count() + " items"; } else { txtCollision2.Text = "No collisions"; } }; CollisionViewGeometry3 = new ViewGeometry(CollisionMap, collisionManager).AddShape(rctTwo3, new DynamicShape(new GeometryViewAdapter(rctTwo3))).AddShape(txtCollision3, new DynamicShape(new GeometryViewAdapter(txtCollision3))); CollisionViewGeometry3.MouseDown += (result) => { Shape_MouseDown(result.ViewGeometry, result.Element, (MouseButtonEventArgs)result.MouseEventArgs); }; CollisionViewGeometry3.MouseUp += (result) => { Shape_MouseUp(result.ViewGeometry, result.Element, (MouseButtonEventArgs)result.MouseEventArgs); }; CollisionViewGeometry3.MouseMove += (result) => { if (isDragging) { Shape_MouseMove(result.ViewGeometry, result.Element, (MouseEventArgs)result.MouseEventArgs); } }; CollisionViewGeometry3.CheckCollision += (results) => { if (results.Count > 0) { txtCollision3.Text = "Colliding with " + results.Count() + " items"; } else { txtCollision3.Text = "No collisions"; } }; CollisionMap.Add(viewGeometry1); CollisionMap.Add(viewGeometry2); CollisionMap.Add(viewGeometry3); CollisionMap.Add(viewGeometry4); CollisionMap.Add(viewGeometry5); CollisionMap.Add(CollisionViewGeometry); CollisionMap.Add(CollisionViewGeometry2); CollisionMap.Add(CollisionViewGeometry3); foreach (var item in CollisionMap) { OutlineEdges(item); } Timer timer = new Timer(3); timer.Elapsed += (param1, param2) => { //This way of invoking prevents crashing during shutdown. Dispatcher.Invoke(DispatcherPriority.Normal, new Action ( () => { timer.Stop(); ViewGeometry.Shape shape = CollisionViewGeometry3.Shapes.FirstOrDefault(p => p.Element == rctTwo3); CollisionViewGeometry3.Rotate(shape, 0.4f); OutlineEdges(CollisionViewGeometry3); CollisionViewGeometry3.OnCheckCollision(); DrawBoundingBox("rotating", CollisionViewGeometry3.Geometry.Rect); timer.Start(); } ) ); }; timer.Enabled = true; }