private void GenerateCorners() { if (Corners != null) { Corners.ForEach(x => { x.DrawPoint(); }); } }
public void UpdateProperties() { Position = new Vector3(Corners.Average(p => p.position.x), Corners.Average(p => p.position.y), Corners.Average(p => p.position.z)); float heightAv = (Vector3.Distance(Corners[0].position, Corners[2].position) + Vector3.Distance(Corners[1].position, Corners[7].position) + Vector3.Distance(Corners[6].position, Corners[4].position) + Vector3.Distance(Corners[3].position, Corners[5].position)) / 4; float widthAv = (Vector3.Distance(Corners[0].position, Corners[1].position) + Vector3.Distance(Corners[3].position, Corners[6].position) + Vector3.Distance(Corners[2].position, Corners[7].position) + Vector3.Distance(Corners[4].position, Corners[5].position)) / 4; float deepAv = (Vector3.Distance(Corners[0].position, Corners[3].position) + Vector3.Distance(Corners[1].position, Corners[6].position) + Vector3.Distance(Corners[7].position, Corners[4].position) + Vector3.Distance(Corners[2].position, Corners[5].position)) / 4; Size = new Vector3(deepAv, heightAv, widthAv); float angleAv = Mathf.Atan2(Corners[1].position.x - Corners[0].position.x, Corners[1].position.z - Corners[0].position.z) * Mathf.Rad2Deg + Mathf.Atan2(Corners[6].position.x - Corners[3].position.x, Corners[6].position.z - Corners[3].position.z) * Mathf.Rad2Deg + Mathf.Atan2(Corners[7].position.x - Corners[2].position.x, Corners[7].position.z - Corners[2].position.z) * Mathf.Rad2Deg + Mathf.Atan2(Corners[4].position.x - Corners[5].position.x, Corners[4].position.z - Corners[5].position.z) * Mathf.Rad2Deg; Rotation = Quaternion.Euler(0, angleAv / 4, 0); // Update ObjectClass ObjectClass = Scores.OrderByDescending(x => x.Value).FirstOrDefault().Key; Score = Scores[ObjectClass] / NDetections; Defined = (!Corners[0].occluded && !Corners[1].occluded && (!Corners[7].occluded || !Corners[2].occluded || !Corners[4].occluded || !Corners[5].occluded) && (!Corners[4].occluded || !Corners[5].occluded || !Corners[6].occluded || !Corners[3].occluded)) || Defined; if (Defined) { Corners.ForEach(c => c.SetOccluded(false)); } }
public void CanvasMouseDown(object sender, MouseButtonEventArgs e) { MousePressed = true; if (Corners == null) { Corners = new List <Corner>(); } if (Walls == null) { Walls = new List <Wall>(); } var mousePosition = e.MouseDevice.GetPosition(ShapeGen.Can); var tempPoint = new Corner(mousePosition.X, mousePosition.Y); if (HoveredCorner == null) { Corners.ForEach(x => { if (x.RepEllipse.IsMouseDirectlyOver) { HoveredCorner = x; } }); } if (HoveredCorner == null) { var cor = new Corner(mousePosition.X, mousePosition.Y) { FillBrush = Brushes.Black, Height = 10, Width = 10, StrokeBrush = Brushes.White, StrokeThickness = 1 }; Corners.ForEach(x => { if (cor.DistanceFrom(x) <= SnapTolerance) { cor = x; } }); if (Corners.Count(x => x.X == cor.X && x.Y == cor.Y) == 0) { Corners.Add(cor); } cor.DrawPoint(); if (AddingWall && LastNode != null) { var wall = new Wall(LastNode, cor); Walls.Add(wall); wall.StrokeBrush = Brushes.Black; wall.DrawLine(); } LastNode = cor; LastMousePosition = mousePosition; AddingWall = true; } }