/// <summary> /// Draw body orientation on top view canvas /// </summary> /// <param name="diameter"></param> /// <param name="size"></param> /// <param name="orientation"></param> /// <param name="headPositionGroundX"></param> /// <param name="headPositionGroundY"></param> /// <param name="brush"></param> /// <param name="canvas"></param> public static void DrawOrientationOnCanvas(double diameter, double size, BodyOrientation.Orientations orientation, double headPositionGroundX, double headPositionGroundY, Brush brush, Canvas canvas) { if (orientation == BodyOrientation.Orientations.Front) { Point point1 = Transformation.ConvertGroundPlaneToCanvas(new Point(headPositionGroundX + size / 2, headPositionGroundY - diameter / 2), canvas); Point point2 = Transformation.ConvertGroundPlaneToCanvas(new Point(headPositionGroundX - size / 2, headPositionGroundY - diameter / 2), canvas); Point point3 = Transformation.ConvertGroundPlaneToCanvas(new Point(headPositionGroundX, headPositionGroundY - diameter / 2 - Math.Cos(30 / 180 * Math.PI) * size), canvas); DrawTriangle(point1, point2, point3, brush, canvas); } else if (orientation == BodyOrientation.Orientations.Left) { Point point1 = Transformation.ConvertGroundPlaneToCanvas(new Point(headPositionGroundX - diameter / 2, headPositionGroundY + size / 2), canvas); Point point2 = Transformation.ConvertGroundPlaneToCanvas(new Point(headPositionGroundX - diameter / 2, headPositionGroundY - size / 2), canvas); Point point3 = Transformation.ConvertGroundPlaneToCanvas(new Point(headPositionGroundX - diameter / 2 - Math.Cos(30 / 180 * Math.PI) * size, headPositionGroundY), canvas); DrawTriangle(point1, point2, point3, brush, canvas); } else if (orientation == BodyOrientation.Orientations.Right) { Point point1 = Transformation.ConvertGroundPlaneToCanvas(new Point(headPositionGroundX + diameter / 2, headPositionGroundY + size / 2), canvas); Point point2 = Transformation.ConvertGroundPlaneToCanvas(new Point(headPositionGroundX + diameter / 2, headPositionGroundY - size / 2), canvas); Point point3 = Transformation.ConvertGroundPlaneToCanvas(new Point(headPositionGroundX + diameter / 2 + Math.Cos(30 / 180 * Math.PI) * size, headPositionGroundY), canvas); DrawTriangle(point1, point2, point3, brush, canvas); } else { Point point1 = Transformation.ConvertGroundPlaneToCanvas(new Point(headPositionGroundX + size / 2, headPositionGroundY + diameter / 2), canvas); Point point2 = Transformation.ConvertGroundPlaneToCanvas(new Point(headPositionGroundX - size / 2, headPositionGroundY + diameter / 2), canvas); Point point3 = Transformation.ConvertGroundPlaneToCanvas(new Point(headPositionGroundX, headPositionGroundY + diameter / 2 + Math.Cos(30 / 180 * Math.PI) * size), canvas); DrawTriangle(point1, point2, point3, brush, canvas); } }
/// <summary> /// Add a defined activity /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void Button_AddActivity(object sender, RoutedEventArgs e) { Rect area = new Rect(new Point(mouseDownPosition.X > mouseUpPosition.X ? mouseUpPosition.X : mouseDownPosition.X, mouseDownPosition.Y > mouseUpPosition.Y ? mouseUpPosition.Y : mouseDownPosition.Y), new Size(System.Math.Abs(mouseDownPosition.X - mouseUpPosition.X), System.Math.Abs(mouseDownPosition.Y - mouseUpPosition.Y))); string name = TextBox_ActivityName.Text; BodyOrientation.Orientations orientations = 0; if (CheckBox_OrientationFront.IsChecked == true) { orientations |= BodyOrientation.Orientations.Front; } if (CheckBox_OrientationLeft.IsChecked == true) { orientations |= BodyOrientation.Orientations.Left; } if (CheckBox_OrientationRight.IsChecked == true) { orientations |= BodyOrientation.Orientations.Right; } if (CheckBox_OrientationBack.IsChecked == true) { orientations |= BodyOrientation.Orientations.Back; } int minPeopleCount = ComboxBox_MinPeople.SelectedIndex + 1; LinkedList <Object.Objects> objects = new LinkedList <Object.Objects>(); LinkedList <Requirement> requirements = new LinkedList <Requirement>(); LinkedList <Posture> pos = new LinkedList <Posture>(); foreach (KeyValuePair <Object.Objects, Object> pair in ListBox_Object.SelectedItems) { objects.AddLast(pair.Key); } foreach (Requirement req in ListBox_Requirement.SelectedItems) { requirements.AddLast(req); } foreach (Posture p in ListBox_Posture.SelectedItems) { pos.AddFirst(p); } if (ListBox_Area.SelectedIndex == -1) { activities.AddLast(new Activity(area, orientations, pos, objects, requirements, name, minPeopleCount)); } else { foreach (Template t in ListBox_Area.SelectedItems) { activities.AddLast(new Activity(t.Name, orientations, pos, objects, requirements, name, minPeopleCount)); } } Popup_AddActivity.IsOpen = false; }
/// <summary> /// Constructor /// </summary> public Person() { IsTracked = false; ID = 0; Position = new System.Windows.Point(0.0, 0.0); Orientation = BodyOrientation.Orientations.Front; Color = System.Windows.Media.Brushes.Red; Activities = ""; postures = new LinkedList <Posture>(); }
/// <summary> /// Construction for static area activity /// </summary> /// <param name="area"></param> /// <param name="bodyOrientations"></param> /// <param name="postures"></param> /// <param name="objects"></param> /// <param name="requirements"></param> /// <param name="name"></param> /// <param name="minPeopleCount"></param> public Activity(System.Windows.Rect area, BodyOrientation.Orientations bodyOrientations, LinkedList <Posture> postures, LinkedList <Object.Objects> objects, LinkedList <Requirement> requirements, string name, int minPeopleCount) { Area = area; BodyOrientations = bodyOrientations; Postures = postures; Objects = objects; Requirements = requirements; Name = name; MinPeopleCount = minPeopleCount; IsActive = false; IsRecording = false; RecordRow = 0; LastTime = System.DateTime.Now.ToString(@"HHmmss"); }
/// <summary> /// Check if one side of an area containing a person /// </summary> /// <param name="area"></param> /// <param name="persons"></param> /// <param name="canvas"></param> /// <param name="orientation"></param> /// <returns></returns> public bool checkOneSide(Rect area, Person[] persons, System.Windows.Controls.Canvas canvas, BodyOrientation.Orientations orientation) { foreach (Person person in persons) { if (person.IsTracked && area.Contains(Transformation.ConvertGroundPlaneToCanvas(person.Position, canvas)) && person.Orientation == orientation) { return(true); } } return(false); }