Beispiel #1
0
 private void GenerateCorners()
 {
     if (Corners != null)
     {
         Corners.ForEach(x => {
             x.DrawPoint();
         });
     }
 }
Beispiel #2
0
        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));
            }
        }
Beispiel #3
0
        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;
            }
        }