KrisLibrary  1.0.0
geometry2d.h
1 #ifndef MATH3D_GEOMETRY2D_H
2 #define MATH3D_GEOMETRY2D_H
3 
4 #include "AABB2D.h"
5 #include "Line2D.h"
6 #include "Ray2D.h"
7 #include "Segment2D.h"
8 #include "Plane2D.h"
9 #include "Triangle2D.h"
10 #include "Box2D.h"
11 #include "Circle2D.h"
12 //#include "Ellipse2D.h"
13 #include "Polygon2D.h"
14 #include <KrisLibrary/utils/AnyValue.h>
15 #include <vector>
16 
17 namespace Math3D {
18 
25 {
26  public:
27  enum Type { Empty, Point, Segment, AABB, Triangle, Circle, Box };
28 
31  GeometricPrimitive2D(const Vector2& point);
32  GeometricPrimitive2D(const Segment2D& segment);
33  GeometricPrimitive2D(const AABB2D& aabb);
34  GeometricPrimitive2D(const Box2D& box);
35  GeometricPrimitive2D(const Circle2D& circle);
36  GeometricPrimitive2D(const Triangle2D& triangle);
37  static const char* TypeName(Type type);
38  const char* TypeName() const { return GeometricPrimitive2D::TypeName(type); }
39  void Set(const Vector2& point);
40  void Set(const Segment2D& segment);
41  void Set(const AABB2D& aabb);
42  void Set(const Box2D& box);
43  void Set(const Circle2D& circle);
44  void Set(const Triangle2D& triangle);
45  AABB2D GetAABB() const;
46  Box2D GetBB() const;
47  RigidTransform GetFrame() const;
48  void Transform(const RigidTransform2D& T);
49  void ToPolygon(std::vector<Vector2>& outline,int divs=32) const;
50 
51  static bool SupportsCollides(Type a,Type b);
52  bool SupportsCollides(Type b) const { return GeometricPrimitive2D::SupportsCollides(type,b); }
53  bool Collides(const GeometricPrimitive2D& geom) const;
54  bool Collides(const Vector2& point) const;
55  bool Collides(const Segment2D& segment) const;
56  bool Collides(const AABB2D& aabb) const;
57  bool Collides(const Box2D& box) const;
58  bool Collides(const Circle2D& circle) const;
59  bool Collides(const Triangle2D& triangle) const;
60  static bool SupportsDistance(Type a,Type b);
61  bool SupportsDistance(Type b) { return GeometricPrimitive2D::SupportsDistance(type,b); }
62  Real Distance(const GeometricPrimitive2D& geom) const;
63  Real Distance(const Vector2& x) const;
64  Real Distance(const Segment2D& segment) const;
65  Real Distance(const AABB2D& aabb) const;
66  Real Distance(const Box2D& box) const;
67  Real Distance(const Circle2D& circle) const;
68  Real Distance(const Triangle2D& triangle) const;
69 
70  Type type;
71  AnyValue data;
72 };
73 
74 } //Math3D
75 
76 #endif
77 
A 2D circle class.
Definition: Circle2D.h:16
A 2D triangle class.
Definition: Triangle2D.h:25
A polymorphic container class that can contain data of any type.
Definition: AnyValue.h:25
A 2D boxThe box is the unit square [0,1]^2 set in the scaled local coordinate system. That is, one corner is at the origin, and it has dimensions [dims.x,dims.y] in the coordinates given by {xbasis,ybasis}.
Definition: Box2D.h:20
A rigid-body transformation.
Definition: math3d/primitives.h:820
A generic 2D geometric primitive class.
Definition: geometry2d.h:24
A 2D segment class.
Definition: Segment2D.h:17
Contains all the definitions in the Math3D package.
Definition: AnyGeometry.h:13
A 2D vector class.
Definition: math3d/primitives.h:41
A 2D axis-aligned bounding box.
Definition: AABB2D.h:13
Same as above, but in 2D.
Definition: math3d/primitives.h:902