Neodroid  0.2.0
Machine Learning Environment Prototyping Tool
BoundingBoxUtilities.cs
Go to the documentation of this file.
1 using System;
2 using UnityEngine;
3 
4 namespace droid.Runtime.Utilities.GameObjects.BoundingBoxes.Experimental {
8  public static class BoundingBoxUtilities {
12  public const int _Num_Points_Per_Line = 2;
13 
14  public const int _Num_Lines = 12;
15  public static Vector3 _Top_Front_Right = new Vector3(1, 1, 1);
16  public static Vector3 _Top_Front_Left = new Vector3(-1, 1, 1);
17  public static Vector3 _Bottom_Back_Right = new Vector3(1, -1, -1);
18  public static Vector3 _Bottom_Back_Left = new Vector3(-1, -1, -1);
19  public static Vector3 _Bottom_Front_Left = new Vector3(-1, -1, 1);
20  public static Vector3 _Bottom_Front_Right = new Vector3(1, -1, 1);
21  public static Vector3 _Top_Back_Right = new Vector3(1, 1, -1);
22  public static Vector3 _Top_Back_Left = new Vector3(-1, 1, -1);
23 
34  public static Vector3[] GetCameraMinMaxPoints(this Mesh mesh,
35  Transform t,
36  Camera cam,
37  Vector3 min,
38  Vector3 max,
39  bool use_view_port = false) {
40  var a = mesh.vertices;
41 
42  Vector3 point;
43 
44  foreach (var t1 in a) {
45  if (use_view_port) {
46  point = cam.WorldToViewportPoint(t.TransformPoint(t1));
47  } else {
48  point = cam.WorldToScreenPoint(t.TransformPoint(t1));
49  }
50 
51  point.GetMinMax(ref min, ref max);
52  }
53 
54  var size = max - min;
55 
56  return new[] {min, max, size};
57  }
58 
67  public static Vector3[] GetCameraMinMaxPoints(this Mesh mesh,
68  Transform t,
69  Camera cam,
70  bool use_view_port = false) {
71  var a = mesh.vertices;
72 
73  Vector3 min;
74  if (use_view_port) {
75  min = cam.WorldToViewportPoint(t.TransformPoint(a[0]));
76  } else {
77  min = cam.WorldToScreenPoint(t.TransformPoint(a[0]));
78  }
79 
80  var max = min;
81 
82  var point = min;
83  point.GetMinMax(ref min, ref max);
84 
85  for (var i = 1; i < a.Length; i++) {
86  if (use_view_port) {
87  point = cam.WorldToViewportPoint(t.TransformPoint(a[i]));
88  } else {
89  point = cam.WorldToScreenPoint(t.TransformPoint(a[i]));
90  }
91 
92  point.GetMinMax(ref min, ref max);
93  }
94 
95  var size = max - min;
96 
97  return new[] {min, max, size};
98  }
99 
108  public static Rect GetCameraMinMaxRect(this Mesh mesh,
109  Transform t,
110  Camera cam,
111  float margin = 0,
112  bool use_viewport = false) {
113  var cen = mesh.GetCameraMinMaxPoints(t, cam, use_viewport);
114  var min = cen[0];
115  var max = cen[1];
116 
117  var r = Rect.MinMaxRect(min.x, min.y, max.x, max.y);
118  r.xMin -= margin;
119  r.xMax += margin;
120  r.yMin -= margin;
121  r.yMax += margin;
122 
123  return r;
124  }
125 
126  public static Rect GetMinMaxRect(Vector3 min, Vector3 max, float margin = 0) {
127  var r = Rect.MinMaxRect(min.x, min.y, max.x, max.y);
128  r.xMin -= margin;
129  r.xMax += margin;
130  r.yMin -= margin;
131  r.yMax += margin;
132 
133  return r;
134  }
135 
143  public static Rect Normalise(this Rect rect, float width, float height) {
144  if (width < float.Epsilon || Math.Abs(height) < float.Epsilon) {
145  return new Rect();
146  }
147 
148  return new Rect {
149  x = rect.x / width,
150  width = rect.width / width,
151  y = rect.y / width,
152  height = rect.height / height
153  };
154  }
155 
162  public static Bounds TransformBounds(this Transform transform, Bounds local_bounds) {
163  var center = transform.TransformPoint(local_bounds.center);
164 
165  // transform the local extents' axes
166  var extents = local_bounds.extents;
167  var axis_x = transform.TransformVector(extents.x, 0, 0);
168  var axis_y = transform.TransformVector(0, extents.y, 0);
169  var axis_z = transform.TransformVector(0, 0, extents.z);
170 
171  // sum their absolute value to get the world extents
172  extents.x = Mathf.Abs(axis_x.x) + Mathf.Abs(axis_y.x) + Mathf.Abs(axis_z.x);
173  extents.y = Mathf.Abs(axis_x.y) + Mathf.Abs(axis_y.y) + Mathf.Abs(axis_z.y);
174  extents.z = Mathf.Abs(axis_x.z) + Mathf.Abs(axis_y.z) + Mathf.Abs(axis_z.z);
175 
176  return new Bounds {center = center, extents = extents};
177  }
178  }
179 }