source: GTP/trunk/Lib/Vis/Preprocessing/src/Triangle3.h @ 2714

Revision 2714, 2.0 KB checked in by bittner, 16 years ago (diff)

dynamic object changes in preprocessor.cpp

Line 
1#ifndef __TRIANGLE3_H
2#define __TRIANGLE3_H
3
4#include "Vector3.h"
5
6
7namespace GtpVisibilityPreprocessor {
8
9class AxisAlignedBox3;
10class Ray;
11struct SimpleRay;
12class Plane3;
13
14struct Triangle3
15{
16        Triangle3() {};
17        Triangle3(const Vector3 &a, const Vector3 &b, const Vector3 &c);
18
19        void Init(const Vector3 &a, const Vector3 &b, const Vector3 &c);
20
21        Vector3 GetNormal() const;
22
23        Vector3 GetCenter() const;
24
25  void ApplyTransformation(const Matrix4x4 &m) {
26        for (int i = 0; i < 3; i++)
27          mVertices[i] = m*mVertices[i];
28  }
29 
30  float GetSpatialAngle(const Vector3 &point) const;
31
32        float GetArea() const;
33
34        /// returns bounding box around this triangle
35        AxisAlignedBox3 GetBoundingBox() const;
36
37        /// Casts ray into this triangle. Returns hit
38        int CastRay(const Ray &ray, float &t, const float nearestT, Vector3 &normal) const;
39
40        int CastSimpleRay(const SimpleRay &ray, float &t, const float nearestT) const;
41 
42        friend std::ostream& operator<< (std::ostream &s, const Triangle3 &A);
43        friend std::istream& operator>> (std::istream &s, Triangle3 &A);
44
45        /** Checks if this triangle is ill-defined.
46        */
47        bool CheckValidity() const;
48
49        /** Intersects triangle with plane, returns intersection points
50                if intersection is happening.
51
52                @returns true if triangle intersects plane
53        */
54        bool GetPlaneIntersection(const Plane3 &plane,
55                                                          Vector3 &intersectA,
56                                                          Vector3 &intersectB) const;
57
58        ///////////////////
59
60        /// the triangle vertices
61        Vector3 mVertices[3];
62};
63
64
65// Overload << operator for C++-style output
66inline std::ostream&
67operator<< (std::ostream &s, const Triangle3 &A)
68{
69  return s << "(" << A.mVertices[0] << ", " << A.mVertices[1] << ", " << A.mVertices[2] << ")";
70}
71
72// Overload >> operator for C++-style input
73inline std::istream&
74operator>> (std::istream &s, Triangle3 &A)
75{
76  char a;
77  // read "(x, y, z)"
78  return s >> a >> A.mVertices[0] >> a >> A.mVertices[1] >> a >> A.mVertices[2] >> a;
79}
80
81
82}
83
84#endif
85
Note: See TracBrowser for help on using the repository browser.