VR-Forces Developer's Guide
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups Pages
basePolygon.h
Go to the documentation of this file.
1 /*********************************************************************
2 ** Copyright (c) 1998 MAK Technologies, Inc.
3 ** All rights reserved.
4 *********************************************************************/
5 /*********************************************************************
6 ** $RCSfile: basePoly.h,v $ $Revision: 1.26 $ $State: Exp $
7 *********************************************************************/
8 #ifndef basePolygon_H_
9 #define basePolygon_H_
10 
11 #include "gdb/gdbDefines.h"
12 #include "gdb/allTypesPolygon.h"
13 #include "geometry/plane.h"
14 #include "geometry/extent.h"
15 #include <matrix/vlVector.h>
16 
17 // forward declarations
18 class DtList;
19 class DtChordBundle;
20 class DtSurface;
21 class DtTerrainDatabase;
22 
23 // class DtBasePolygon:
24 //
25 // DtBasePolygon is an abstract base class for representing
26 // polygons. A polygon consists of a sequence of vertices in
27 // counter-clockwise order. It is assumed that all the
28 // vertices (if more than 3) are coplanar.
30 {
31 public:
32  // Destructor
33  virtual ~DtBasePolygon();
34 
35 protected:
36  // Constructor is protected as this is an abstract
37  // base class.
38  DtBasePolygon();
39 
40  // Additional constructor
41  DtBasePolygon(unsigned int numVertices);
42 
43  // Copy constructor
44  DtBasePolygon(const DtBasePolygon& orig);
45 
46  // Assignment operator
48 
49 public:
50 
51  // mutator function
52  virtual void setNumberOfVertices(unsigned int n);
53 
54  //accessor functions
55  virtual unsigned int numberOfVertices() const;
56 
57  // Calls initPlaneAndExtent to force the polygon
58  // to recompute the extent.
59  virtual void recomputeExtent();
60 
61  // initialization function
62  virtual void initPlaneAndExtent();
63 
64  // @return The plane through the polygon
65  virtual DtPlane plane() const;
66 
67  // @return The extent of polygon
68  // @note Non-virtual to allow inlining. Very frequently called.
69  DtExtent extent() const;
70 
71  // returns normal to polygon
72  virtual DtVector normal() const;
73 
74  // for edge, plane, and normal.
75  virtual bool getEdge(DtChord& edge, int edgeNumber) const;
76  virtual void getPlane(DtPlane& plane) const;
77  virtual void getNormal(DtVector& normal) const;
78 
79  // if the polygon falls within the input
80  // extent, update the color count in the colorCountRecord which is
81  // an in-out parameter.
82  virtual void countPolyColors(DtColorCountRecord& cr,const DtExtent& e) const;
83 
84  //geometric functions
85 
86  //redefine other extent to include all the vertices of the
87  //polygon.
88  virtual void expandExtent(DtExtent& otherExtent) const;
89 
90  // computes the intersection of chord with polygon; returns
91  // intersection point.
92  // \param chordToTest The chord to test for intersection.
93  // \param intersectionPoint The intersection point, if one occurred.
94  // \param intersectionTime The time along the chord of the intersection. Only set if an intersection occured.
95  // \return A boolean indicating whether or not an intersection occurred.
96  virtual bool intersect(const DtChord& chordToTest, DtPoint& intersectionPoint,
97  double& intersectionTime) const;
98 
99  // Computes the intersection of the polygon and a chord. In addition to the
100  // intersection point and a parametric value, optionally computes and
101  // returns surface description for the intersecting surface, and
102  // normal. Identifies the lowest level intersecting polygon. This function
103  // will only replace the contents of the intersection record if it finds an
104  // intersection with a smaller intersectionTime value.
105  virtual bool intersect(
106  const DtChord& chord,
107  DtChordIntersectionRecord& record,
108  DtIntersectRecordType irtFlag) const;
109 
110  // Computes the intersection of terrain section represented by the polygon
111  // and a bundle of chords. The returned record list is a a DtList of
112  // DtChordIntersectionRecords (one for each chord) each of which must be
113  // created and deleted by the caller. The irtFlag value specifies which
114  // data should be calculated and returned for each intersection point. The
115  // return value of this function is the number of the chords that had any
116  // intersections with the terrain. This function will only replace the
117  // contents of the intersection records if it finds an intersection with a
118  // smaller intersectionTime value.
119  virtual int intersectBundle(
120  const DtChordBundle& chordBundle,
121  DtList& recordList,
122  DtIntersectRecordType irtFlag) const;
123 
124  // Computes the list of all intersections of each of a bundle of chords
125  // with the polygon. For each chord in the bundle, adds to a matching
126  // DtChordIntersectRecordList sorted by distance along the chord. The
127  // caller is responsible for creating and deleting the
128  // DtChordIntersectRecordLists in the intListList DtList. The return value
129  // of this function is the number of the chords that had any intersections
130  // with the terrain. Note that passing an irtFlag value of IRT_NO_DATA
131  // will probably never return more than one intersection per chord.
132  virtual int allIntersectsAlongChordBundle(
133  const DtChordBundle& chordBundle,
134  DtList& intListList,
135  DtIntersectRecordType irtFlag) const;
136 
137  // \copydoc DtGdbNode::intersect(const DtSphere& sphere,
138  // DtSphereIntersectionRecord& record, DtIntersectRecordType irtFlag)
139  virtual bool intersect(const DtSphere& sphere, DtSphereIntersectionRecord& record,
140  DtIntersectRecordType irtFlag) const;
141 
142  //accessor functions
143  virtual bool getVertex(DtPoint& retVal, unsigned int i) const = 0;
144  virtual const DtPoint& getVertex(unsigned int i) const = 0;
145  virtual bool getSurface(DtSurface& s) const = 0;
146  virtual const DtSurface& getSurface() const = 0;
147  virtual bool setSurface(const DtSurface& newSurface) = 0;
148 
149  // determine if a given point is inside the polygon.
150  virtual bool pointInPolygon(const DtPoint& point) const;
151 
152  // Finds the point on the specified chord that is closest to this
153  // polygon, and returns it in closestPoint.
154  // \return Distance squared to the found point.
155  // If cutoffDistance is specified (> 0), the first point found within
156  // this distance will be returned, even if it is not the closest point.
157  // This may cut down significantly on the calculation when the actual
158  // closest point is not required.
159  virtual double closestPointOnChordToPolygon(const DtChord& chord,
160  DtPoint& closestPoint, double cutoffDistance = 0.) const;
161 
162  // determine the minimum and maximum z-values among the
163  // vertices in the polygon.
164  virtual double minZ() const;
165  virtual double maxZ() const;
166 
167  // KLUDGE -- have different max # of verts per type of poly -- JM
168  virtual bool isFull() const = 0;
169 
170  virtual int sizeInBytes() const = 0;
171 
172 protected:
173  bool testInvariant() const;
174 
175  // compute twice the area of the triangle formed by a, b, c,
176  // as the magnitude of the cross product (b-a)X(c-a).
177  virtual double computeTwiceArea(
178  const DtPoint& a,
179  const DtPoint& b,
180  const DtPoint& c) const;
181 
182 protected:
183 
184  unsigned int myNumberOfVertices;
185  bool myInitialized; // used to determine if plane and extent have
186  // been computed.
189 };
190 
191 inline double DtBasePolygon::minZ() const
192 {
193  return myExtent.minZ();
194 }
195 
196 inline double DtBasePolygon::maxZ() const
197 {
198  return myExtent.maxZ();
199 }
200 
201 inline unsigned int DtBasePolygon::numberOfVertices() const
202 {
203  return myNumberOfVertices;
204 }
205 
206 inline void DtBasePolygon::setNumberOfVertices(unsigned int n)
207 {
208  myNumberOfVertices = n;
209 }
210 
212 {
213  return myPlane;
214 }
215 
217 {
218  return myExtent;
219 }
220 
222 {
223  return plane().normal();
224 }
225 
226 #endif
NOTE: This entire class is deprecated, in favor of Dt3dChord.
Definition: chord.h:40
Definition: chordIntersectionRecord.h:23
Definition: sphere.h:22
virtual double maxZ() const =0
Definition: colorCountRecord.h:21
virtual bool pointInPolygon(const DtPoint &point) const =0
Definition: plane.h:25
virtual double minZ() const
Definition: basePolygon.h:191
virtual void expandExtent(DtExtent &extent) const
DtExtent myExtent
Definition: basePolygon.h:188
Definition: sphereIntersectionRecord.h:19
virtual bool getVertex(DtPoint &retVal, unsigned int i) const =0
DtIntersectRecordType
Definition: gdbNode.h:74
The DtExtent represents an axis-aligned 3d bounding box.
Definition: extent.h:43
Definition: allTypesPolygon.h:22
Definition: surface.h:181
#define DT_DLL_gdb
Definition: gdbDefines.h:25
virtual void getNormal(DtVector &normal) const =0
double maxZ() const
Access and/or mutate individual values.
double minZ() const
Access and/or mutate individual values.
bool myInitialized
Definition: basePolygon.h:185
Definition: basePolygon.h:29
DtPlane myPlane
Definition: basePolygon.h:187
virtual bool setSurface(const DtSurface &newSurface)=0
virtual void setNumberOfVertices(unsigned int n)
Definition: basePolygon.h:206
virtual unsigned int numberOfVertices() const =0
DtAllTypesPolygon & operator=(const DtAllTypesPolygon &orig)
virtual bool intersect(const DtChord &chord, DtPoint &intersectionPoint, double &t) const =0
unsigned int myNumberOfVertices
Definition: basePolygon.h:184
virtual double maxZ() const
Definition: basePolygon.h:196
Definition: chordBundle.h:29
virtual unsigned int numberOfVertices() const
Definition: basePolygon.h:201
virtual double minZ() const =0
DtExtent extent() const
Definition: basePolygon.h:216
virtual double closestPointOnChordToPolygon(const DtChord &chord, DtPoint &closestPoint, double cutoffDistance=0.) const =0
virtual int intersectBundle(const DtChordBundle &chordBundle, DtList &recordList, DtIntersectRecordType irtFlag) const =0
virtual DtPlane plane() const
Definition: basePolygon.h:211
virtual int allIntersectsAlongChordBundle(const DtChordBundle &chordBundle, DtList &intListList, DtIntersectRecordType irtFlag) const
Contains the declaration of the DtExtent class.
virtual int sizeInBytes() const =0
virtual void recomputeExtent()
virtual const DtSurface & getSurface() const =0
virtual DtVector normal() const
Definition: basePolygon.h:221
Definition: terrainDatabase.h:148
virtual bool getEdge(DtChord &edge, int edgeNumber) const =0
virtual const DtVector normal() const
virtual DtVector normal() const =0
virtual void countPolyColors(DtColorCountRecord &cr, const DtExtent &e) const =0
Definition: point.h:34

Document ID: Generated on Tue Sep 24 19:28:17 EDT 2024 from SVN revision 269799
Copyright © 2005-2024 MAK Technologies. All Rights Reserved (www.mak.com)