Branch data Line data Source code
1 : : //- Class: CubitPlane
2 : : //-
3 : : //- Description: This file defines the CubitPlane class which is a
4 : : //- three-dimensional planar surface defined by the equation
5 : : //- {Ax + By + Cz + D = 0}. Plane normal is normalized
6 : : //- Only basic functionality required by other Cubit classes is
7 : : //- currently supported.
8 : : //-
9 : : //- Owner: Greg Sjaardema
10 : : //- Checked by: Tony Edwards 8/18/94
11 : : //- Version: $Id:
12 : :
13 : : #ifndef CUBITPLANE_HPP
14 : : #define CUBITPLANE_HPP
15 : :
16 : : template <class X> class DLIList;
17 : : #include "CubitVector.hpp"
18 : : #include "CubitPlaneStruct.h"
19 : : #include "CGMUtilConfigure.h"
20 : : #include <vector>
21 : :
22 : : class CUBIT_UTIL_EXPORT CubitPlane
23 : : {
24 : : public:
25 : :
26 : : //- Heading: Constructors and Destructor
27 : : CubitPlane();
28 : : //- Default constructor.
29 : :
30 : : CubitPlane(const double A, const double B,
31 : : const double C, const double D);
32 : : //- Constructor: create plane from three components of normal and
33 : : //- coefficient
34 : :
35 : : CubitPlane(const CubitVector &Normal, const double D);
36 : : //- Constructor: create plane from plane normal and coefficient.
37 : :
38 : : CubitPlane(const CubitVector &Normal, const CubitVector &point);
39 : : //- Constructor: create plane from plane normal that passes through point.
40 : :
41 : : CubitPlane(DLIList<CubitVector> &positions);
42 : : //- Constructor: create plane closest to the set of points in {positions}
43 : : //- using Newell's Method.
44 : :
45 : : CubitPlane(const CubitPlane& copy_from); //- Copy Constructor
46 : :
47 : : CubitPlane(const CubitPlaneStruct& from);
48 : :
49 : : int mk_plane_with_points(const CubitVector& vector1,
50 : : const CubitVector& vector2,
51 : : const CubitVector& vector3);
52 : : //- Create a plane given three points represented as
53 : : //- CubitVectors.
54 : : //- Return a CUBIT_FAILURE if the points are collinear.
55 : :
56 : : //- fit a plane through the input points.
57 : : bool fit_points(const std::vector<CubitVector> &positions);
58 : :
59 : : const CubitVector& normal() const;
60 : : //- Return Plane normal (normalized)
61 : :
62 : : void normal(const CubitVector &temp_normal);
63 : : //- set the normal for this plane
64 : :
65 : : double coefficient() const;
66 : : //- Return the coefficient
67 : :
68 : : void coefficient(const double temp_coeff);
69 : : //- set the coefficient
70 : :
71 : : void set(const CubitVector &Normal, const CubitVector &point);
72 : : //- redefine plane using normal and point on plane
73 : :
74 : : //- Heading: Other Functions
75 : : CubitVector point_on_plane() const;
76 : : //- Returns a random point on the plane.
77 : :
78 : : double distance(const CubitVector &vector) const;
79 : : //- Calculates the distance from {vector} to plane. If the point lies
80 : : //- behind the plane (the opposite direction than the normal points),
81 : : //- the returned distance will be negative.
82 : :
83 : : CubitVector intersect(const CubitVector &base,
84 : : const CubitVector &direction) const;
85 : : //- Calculate intersection of line from {base} in direction {direction}
86 : : //- and plane {this}.
87 : : //- Returns coordinates of intersection in a CubitVector.
88 : :
89 : : int intersect(const CubitPlane &other_plane,
90 : : CubitVector &origin, CubitVector &vector) const;
91 : : //- Calculate the intersection of {this} with {other_plane}
92 : : //- Returns a point on the intersection line in {origin} and the
93 : : //- direction of the intersection line in {vector}.
94 : : //- Returns CUBIT_FALSE if the planes are coplanar
95 : :
96 : : CubitVector project( const CubitVector& point ) const;
97 : : //- Project a point onto plane
98 : :
99 : 0 : void reverse()
100 [ # # ]: 0 : { normal_ = -normal_; d_ = -d_; }
101 : : //- flip the normal of the plane
102 : :
103 : : CubitPlane& operator=(const CubitPlane &plane);
104 : : //- assignment
105 : :
106 : : CubitPlane &operator=(const CubitPlaneStruct &from);
107 : :
108 : : operator CubitPlaneStruct()
109 : : {
110 : : CubitPlaneStruct to;
111 : : to.normal_ = normal_;
112 : : to.d_ = d_;
113 : : return to;
114 : : }
115 : :
116 : : private:
117 : :
118 : : CubitVector normal_; //- Normal to plane.
119 : : double d_; //- Coefficient
120 : :
121 : : };
122 : :
123 : 28204 : inline const CubitVector& CubitPlane::normal() const { return normal_; }
124 : :
125 : 0 : inline void CubitPlane::normal(const CubitVector &temp_normal)
126 : 0 : {normal_ = temp_normal;}
127 : :
128 : 0 : inline double CubitPlane::coefficient() const { return d_; }
129 : 0 : inline void CubitPlane::coefficient(const double temp_coeff)
130 : 0 : {d_ = temp_coeff; }
131 : :
132 : : inline CubitPlane::CubitPlane(const CubitPlaneStruct &from)
133 : : {
134 : : normal_ = from.normal_;
135 : : d_ = from.d_;
136 : : }
137 : :
138 : : #endif
139 : :
|