xmsgeom  1.0
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros
GmExtents.cpp
Go to the documentation of this file.
1 //------------------------------------------------------------------------------
7 //------------------------------------------------------------------------------
8 
9 //----- Included files ---------------------------------------------------------
10 
11 // 1. Precompiled header
12 
13 // 2. My header
15 
16 // 3. Standard Library Headers
17 
18 // 4. External Library Headers
19 
20 // 5. Shared Headers
21 #include <boost/serialization/export.hpp>
22 #include <boost/serialization/vector.hpp>
23 #include <xmscore/math/math.h>
24 #include <xmscore/misc/XmConst.h>
25 
26 // 6. Non-shared Headers
27 
28 using namespace xms;
29 
30 //----- Namespace declaration --------------------------------------------------
31 
32 namespace xms
33 {
38 //------------------------------------------------------------------------------
40 //------------------------------------------------------------------------------
42 {
43  Clear();
44 } // GmExtents2d::GmExtents2d
45 //------------------------------------------------------------------------------
48 //------------------------------------------------------------------------------
50 {
51  m_min = static_cast<Pt2d>(a_extents.GetMin());
52  m_max = static_cast<Pt2d>(a_extents.GetMax());
53 }
54 //------------------------------------------------------------------------------
58 //------------------------------------------------------------------------------
59 GmExtents2d::GmExtents2d(const Pt2d& a_min, const Pt2d& a_max)
60 : m_min(a_min)
61 , m_max(a_max)
62 {
63 } // GmExtents2d::GmExtents2d
64 //------------------------------------------------------------------------------
68 //------------------------------------------------------------------------------
69 GmExtents2d::GmExtents2d(const Pt3d& a_min, const Pt3d& a_max)
70 : m_min(a_min)
71 , m_max(a_max)
72 {
73 } // GmExtents2d::GmExtents2d
74 //------------------------------------------------------------------------------
76 //------------------------------------------------------------------------------
78 {
79 } // GmExtents2d::~GmExtents2d
80 //------------------------------------------------------------------------------
83 //------------------------------------------------------------------------------
85 {
86  m_min.x = std::min(m_min.y, a_rhs.m_min.x);
87  m_max.x = std::max(m_max.x, a_rhs.m_max.x);
88  m_min.y = std::min(m_min.y, a_rhs.m_min.y);
89  m_max.y = std::max(m_max.y, a_rhs.m_max.y);
90 } // GmExtents2d::operator +=
91 //------------------------------------------------------------------------------
94 //------------------------------------------------------------------------------
96 {
97  Pt3d thePt(pt);
98 
99  m_min.x = std::min(m_min.x, thePt.x);
100  m_max.x = std::max(m_max.x, thePt.x);
101  m_min.y = std::min(m_min.y, thePt.y);
102  m_max.y = std::max(m_max.y, thePt.y);
103 } // GmExtents2d::AddToExtents.
104 //------------------------------------------------------------------------------
107 //------------------------------------------------------------------------------
109 {
110  return (m_min.x <= m_max.x);
111 } // GmExtents2d::IsValid
112 //------------------------------------------------------------------------------
115 //------------------------------------------------------------------------------
116 void GmExtents2d::SetTolerance(double a_Tol)
117 {
118  m_tolerance = a_Tol;
119 } // GmExtents2d::SetTolerance
120 //------------------------------------------------------------------------------
123 //------------------------------------------------------------------------------
125 {
126  return m_tolerance;
127 } // GmExtents2d::GetTolerance
128 //------------------------------------------------------------------------------
132 //------------------------------------------------------------------------------
133 bool GmExtents2d::Overlap(const GmExtents2d& a_b) const
134 {
135  // We add (or subtract) the tolerance to our mins and maxs to get
136  // modified boundaries
137  Pt2d modMin = m_min - m_tolerance;
138  Pt2d modMax = m_max + m_tolerance;
139 
140  if (a_b.m_min.x > modMax.x)
141  {
142  return false;
143  }
144  if (a_b.m_max.x < modMin.x)
145  {
146  return false;
147  }
148  if (a_b.m_min.y > modMax.y)
149  {
150  return false;
151  }
152  if (a_b.m_max.y < modMin.y)
153  {
154  return false;
155  }
156  return true;
157 } // GmExtents2d::Overlap
158 //------------------------------------------------------------------------------
160 //------------------------------------------------------------------------------
162 {
165 } // GmExtents2d::Clear
166 //------------------------------------------------------------------------------
172 //------------------------------------------------------------------------------
173 void GmExtents2d::GetExtents(double* a_MinX, double* a_MaxX, double* a_MinY, double* a_MaxY)
174 {
175  if (a_MinX)
176  {
177  *a_MinX = m_min.x;
178  }
179  if (a_MaxX)
180  {
181  *a_MaxX = m_max.x;
182  }
183  if (a_MinY)
184  {
185  *a_MinY = m_min.y;
186  }
187  if (a_MaxY)
188  {
189  *a_MaxY = m_max.y;
190  }
191 } // GmExtents2d::GetExtents
192 //------------------------------------------------------------------------------
196 //------------------------------------------------------------------------------
197 void GmExtents2d::GetExtents(Pt3d& a_dMin, Pt3d& a_dMax)
198 {
199  a_dMin = m_min;
200  a_dMax = m_max;
201 } // GmExtents2d::GetExtents
202 //------------------------------------------------------------------------------
205 //------------------------------------------------------------------------------
206 double GmExtents2d::GetMinX() const
207 {
208  return m_min.x;
209 } // GmExtents2d::GetMinX
210 //------------------------------------------------------------------------------
213 //------------------------------------------------------------------------------
214 double GmExtents2d::GetMaxX() const
215 {
216  return m_max.x;
217 } // GmExtents2d::GetMaxX
218 //------------------------------------------------------------------------------
221 //------------------------------------------------------------------------------
222 double GmExtents2d::GetMinY() const
223 {
224  return m_min.y;
225 } // GmExtents2d::GetMinY
226 //------------------------------------------------------------------------------
229 //------------------------------------------------------------------------------
230 double GmExtents2d::GetMaxY() const
231 {
232  return m_max.y;
233 } // GmExtents2d::GetMaxY
234 //------------------------------------------------------------------------------
237 //------------------------------------------------------------------------------
239 {
240  return m_min;
241 } // GmExtents2d::GetMin
242 //------------------------------------------------------------------------------
245 //------------------------------------------------------------------------------
247 {
248  return m_max;
249 } // GmExtents2d::GetMax
250 //------------------------------------------------------------------------------
254 //------------------------------------------------------------------------------
255 void GmExtents2d::Set(const Pt2d& a_min, const Pt2d& a_max)
256 {
257  m_min = a_min;
258  m_max = a_max;
259 } // GmExtents2d::Set
260 
261 double GmExtents2d::m_tolerance(0.0);
262 
267 //------------------------------------------------------------------------------
269 //------------------------------------------------------------------------------
271 {
272  Clear();
273 } // GmExtents3d::GmExtents3d
274 //------------------------------------------------------------------------------
278 //------------------------------------------------------------------------------
279 GmExtents3d::GmExtents3d(const Pt3d& a_min, const Pt3d& a_max)
280 : m_min(a_min)
281 , m_max(a_max)
282 {
283 } // GmExtents3d::GmExtents3d
284 //------------------------------------------------------------------------------
288 //------------------------------------------------------------------------------
289 GmExtents3d::GmExtents3d(const Pt2d& a_min, const Pt2d& a_max)
290 : m_min(a_min)
291 , m_max(a_max)
292 {
293 } // GmExtents3d::GmExtents3d
294 //------------------------------------------------------------------------------
297 //------------------------------------------------------------------------------
299 {
300  m_min = static_cast<Pt3d>(a_extents.GetMin());
301  m_max = static_cast<Pt3d>(a_extents.GetMax());
302 }
303 //------------------------------------------------------------------------------
306 //------------------------------------------------------------------------------
308 {
309  m_min.x = std::min(m_min.x, a_rhs.m_min.x);
310  m_max.x = std::max(m_max.x, a_rhs.m_max.x);
311  m_min.y = std::min(m_min.y, a_rhs.m_min.y);
312  m_max.y = std::max(m_max.y, a_rhs.m_max.y);
313  m_min.z = std::min(m_min.z, a_rhs.m_min.z);
314  m_max.z = std::max(m_max.z, a_rhs.m_max.z);
315 } // GmExtents3d::operator +=
316 //------------------------------------------------------------------------------
319 //------------------------------------------------------------------------------
321 {
322  m_min.x = std::min(m_min.x, pt.x);
323  m_max.x = std::max(m_max.x, pt.x);
324  m_min.y = std::min(m_min.y, pt.y);
325  m_max.y = std::max(m_max.y, pt.y);
326  m_min.z = std::min(m_min.z, pt.z);
327  m_max.z = std::max(m_max.z, pt.z);
328 } // GmExtents3d::AddToExtents
329 //------------------------------------------------------------------------------
332 //------------------------------------------------------------------------------
334 {
335  return (m_min.x <= m_max.x);
336 } // GmExtents3d::IsValid
337 //------------------------------------------------------------------------------
340 //------------------------------------------------------------------------------
341 void GmExtents3d::SetTolerance(double a_Tol)
342 {
343  m_tolerance = a_Tol;
344 } // GmExtents3d::SetTolerance
345 //------------------------------------------------------------------------------
348 //------------------------------------------------------------------------------
350 {
351  return m_tolerance;
352 } // GmExtents3d::GetTolerance
353 //------------------------------------------------------------------------------
357 //------------------------------------------------------------------------------
359 {
360  // We add (or subtract) the tolerance to our mins and maxs to get
361  // modified boundaries
362  Pt3d modMin = m_min - m_tolerance;
363  Pt3d modMax = m_max + m_tolerance;
364 
365  if (a_b.m_min.x > modMax.x)
366  {
367  return false;
368  }
369  if (a_b.m_max.x < modMin.x)
370  {
371  return false;
372  }
373  if (a_b.m_min.y > modMax.y)
374  {
375  return false;
376  }
377  if (a_b.m_max.y < modMin.y)
378  {
379  return false;
380  }
381  if (a_b.m_min.z > modMax.z)
382  {
383  return false;
384  }
385  if (a_b.m_max.z < modMin.z)
386  {
387  return false;
388  }
389  return true;
390 } // GmExtents3d::Overlap
391 //------------------------------------------------------------------------------
393 //------------------------------------------------------------------------------
395 {
398 } // GmExtents3d::Clear
399 //------------------------------------------------------------------------------
403 //------------------------------------------------------------------------------
404 bool GmExtents3d::IsPointWithin(const Pt3d& pt) const
405 {
406  return (m_min.x <= pt.x && m_max.x >= pt.x && m_min.y <= pt.y && m_max.y >= pt.y &&
407  m_min.z <= pt.z && m_max.z >= pt.z);
408 } // GmExtents3d::IsPointWithin
409 //------------------------------------------------------------------------------
417 //------------------------------------------------------------------------------
418 void GmExtents3d::GetExtents(double* a_MinX,
419  double* a_MaxX,
420  double* a_MinY,
421  double* a_MaxY,
422  double* a_MinZ,
423  double* a_MaxZ) const
424 {
425  if (a_MinX)
426  {
427  *a_MinX = m_min.x;
428  }
429  if (a_MaxX)
430  {
431  *a_MaxX = m_max.x;
432  }
433  if (a_MinY)
434  {
435  *a_MinY = m_min.y;
436  }
437  if (a_MaxY)
438  {
439  *a_MaxY = m_max.y;
440  }
441  if (a_MinZ)
442  {
443  *a_MinZ = m_min.z;
444  }
445  if (a_MaxZ)
446  {
447  *a_MaxZ = m_max.z;
448  }
449 } // GmExtents3d::GetExtents
450 //------------------------------------------------------------------------------
454 //------------------------------------------------------------------------------
455 void GmExtents3d::GetExtents(Pt3d& a_dMin, Pt3d& a_dMax) const
456 {
457  a_dMin = m_min;
458  a_dMax = m_max;
459 } // GmExtents3d::GetExtents
460 //------------------------------------------------------------------------------
463 //------------------------------------------------------------------------------
464 double GmExtents3d::GetMinX() const
465 {
466  return m_min.x;
467 } // GmExtents3d::GetMinX
468 //------------------------------------------------------------------------------
471 //------------------------------------------------------------------------------
472 double GmExtents3d::GetMaxX() const
473 {
474  return m_max.x;
475 } // GmExtents3d::GetMaxX
476 //------------------------------------------------------------------------------
479 //------------------------------------------------------------------------------
480 double GmExtents3d::GetMinY() const
481 {
482  return m_min.y;
483 } // GmExtents3d::GetMinY
484 //------------------------------------------------------------------------------
487 //------------------------------------------------------------------------------
488 double GmExtents3d::GetMaxY() const
489 {
490  return m_max.y;
491 } // GmExtents3d::GetMaxY
492 //------------------------------------------------------------------------------
495 //------------------------------------------------------------------------------
496 double GmExtents3d::GetMinZ() const
497 {
498  return m_min.z;
499 } // GmExtents3d::GetMinZ
500 //------------------------------------------------------------------------------
503 //------------------------------------------------------------------------------
504 double GmExtents3d::GetMaxZ() const
505 {
506  return m_max.z;
507 } // GmExtents3d::GetMaxZ
508 //------------------------------------------------------------------------------
511 //------------------------------------------------------------------------------
513 {
514  return m_min;
515 } // GmExtents3d::GetMin
516 //------------------------------------------------------------------------------
519 //------------------------------------------------------------------------------
521 {
522  return m_max;
523 } // GmExtents3d::GetMax
524 //------------------------------------------------------------------------------
528 //------------------------------------------------------------------------------
529 void GmExtents3d::Set(const Pt3d& a_min, const Pt3d& a_max)
530 {
531  m_min = a_min;
532  m_max = a_max;
533 } // GmExtents3d::Set
534 
535 double GmExtents3d::m_tolerance(1.0e-6);
536 
537 } // namespace xms
538 
540 #ifdef CXX_TEST
541 
543 
544 //----- Namespace declaration --------------------------------------------------
545 
546 // namespace xms {
547 using namespace xms;
548 
553 //------------------------------------------------------------------------------
555 //------------------------------------------------------------------------------
557 {
558  GmExtents3d e;
559 
560  Pt3d pt(50.0, 60.0, 80.0);
561 
562  e.AddToExtents(pt);
563 
564  TS_ASSERT(e.IsValid());
565  const double kDelta = 0.000001;
566  TS_ASSERT_DELTA(50.0, e.GetMinX(), kDelta);
567  TS_ASSERT_DELTA(50.0, e.GetMaxX(), kDelta);
568  TS_ASSERT_DELTA(60.0, e.GetMinY(), kDelta);
569  TS_ASSERT_DELTA(60.0, e.GetMaxY(), kDelta);
570  TS_ASSERT_DELTA(80.0, e.GetMinZ(), kDelta);
571  TS_ASSERT_DELTA(80.0, e.GetMaxZ(), kDelta);
572 } // GmExtents3dUnitTests::testSinglePt
573 //------------------------------------------------------------------------------
575 //------------------------------------------------------------------------------
577 {
578  GmExtents3d e;
579 
580  Pt3d pt(50.0, 60.0, 80.0);
581 
582  e.AddToExtents(pt);
583 
584  pt.Set(100.0, 120.0, 160.0);
585  e.AddToExtents(pt);
586  pt.Set(200.0, -100.0, -200.0);
587  e.AddToExtents(pt);
588 
589  TS_ASSERT(e.IsValid());
590  const double kDelta = 0.000001;
591  TS_ASSERT_DELTA(50.0, e.GetMinX(), kDelta);
592  TS_ASSERT_DELTA(200.0, e.GetMaxX(), kDelta);
593  TS_ASSERT_DELTA(-100.0, e.GetMinY(), kDelta);
594  TS_ASSERT_DELTA(120.0, e.GetMaxY(), kDelta);
595  TS_ASSERT_DELTA(-200.0, e.GetMinZ(), kDelta);
596  TS_ASSERT_DELTA(160.0, e.GetMaxZ(), kDelta);
597 } // GmExtents3dUnitTests::testMultiplePts
598 //------------------------------------------------------------------------------
600 //------------------------------------------------------------------------------
602 {
603  GmExtents3d e;
604 
605  TS_ASSERT(!e.IsValid());
606 
607 } // GmExtents3dUnitTests::testNoPts
608 //------------------------------------------------------------------------------
610 //------------------------------------------------------------------------------
612 {
613  {
614  GmExtents3d e, f;
615  // x -100 to -50, y 50 to 100, z -25 to 25
616  Pt3d pt(-100.0, 50.0, -25.0);
617  e.AddToExtents(pt);
618  pt.Set(-50.0, 100.0, -25.0);
619  e.AddToExtents(pt);
620  pt.Set(-50.0, 100.0, 25.0);
621  e.AddToExtents(pt);
622 
623  // x -150 to -40, y 25 to 75, z -15 to 55
624  pt.Set(-150.0, 30.0, 55.0);
625  f.AddToExtents(pt);
626  pt.Set(-50.0, 25.0, -5.0);
627  f.AddToExtents(pt);
628  pt.Set(-40.0, 75.0, -15.0);
629  f.AddToExtents(pt);
630 
631  TS_ASSERT(e.IsValid());
632  TS_ASSERT(f.IsValid());
633  TS_ASSERT_EQUALS(e.Overlap(f), true);
634 
635  // x -550 to -101, y 101 to 251, z -125 to -26
636  f.Clear();
637  pt.Set(-101.0, 101.0, -125.0);
638  f.AddToExtents(pt);
639  pt.Set(-550.0, 182.0, -98.0);
640  f.AddToExtents(pt);
641  pt.Set(-150.0, 251.0, -26.0);
642  f.AddToExtents(pt);
643 
644  TS_ASSERT_EQUALS(e.Overlap(f), false);
645 
646  // x -150 to -100+, y 50 to 100, z -25 to 25
647  f.SetTolerance(0.01);
648  f.Clear();
649  pt.Set(-100.0 - 2 * f.GetTolerance(), 50.0, -25.0);
650  f.AddToExtents(pt);
651  pt.Set(-150.0, 100.0, -25.0);
652  f.AddToExtents(pt);
653  pt.Set(-150.0, 100.0, 25.0);
654  f.AddToExtents(pt);
655 
656  TS_ASSERT_EQUALS(e.Overlap(f), false);
657  }
658  //--------------------------------------------------
659  {
660  GmExtents2d e, f;
661 
662  Pt3d pt(-100.0, 50.0, 0);
663  e.AddToExtents(pt);
664  pt.Set(-50.0, 100.0, 0);
665  e.AddToExtents(pt);
666 
667  pt.Set(-150.0, 25.0, 0);
668  f.AddToExtents(pt);
669  pt.Set(-101.0, 75.0, 0);
670  f.AddToExtents(pt);
671 
672  // x -100 to -50, y 50 to 100
673  // x -150 to -101, y 25 to 75
674  // X Y
675  // |-------| |--------|
676  // |-------| |--------|
677  TS_ASSERT(e.IsValid());
678  TS_ASSERT(f.IsValid());
679  TS_ASSERT_EQUALS(e.Overlap(f), false);
680 
681  f.Clear();
682  pt.Set(-550.0, 251.0, 0);
683  f.AddToExtents(pt);
684  pt.Set(-101.0, 101.0, 0);
685  f.AddToExtents(pt);
686 
687  // x -100 to -50, y 50 to 100
688  // x -550 to -101, y 101 to 251
689  // X Y
690  // |-------| |--------|
691  // |-------| |--------|
692  TS_ASSERT_EQUALS(e.Overlap(f), false);
693 
694  // x -100 to -50, y 50 to 100
695  // x -150 to -100+, y -50 to 75
696  // X Y
697  // |-------| |--------|
698  // |-------| |--------|
699  f.Clear();
700  pt.Set(-100.0 - 2 * f.GetTolerance(), -50.0, 0);
701  f.AddToExtents(pt);
702  pt.Set(-150.0, 75.0, 0);
703  f.AddToExtents(pt);
704 
705  TS_ASSERT_EQUALS(e.Overlap(f), true);
706 
707  // x -100 to -50, y 50 to 100
708  // x -75 to -60, y -50 to 75
709  // X Y
710  // |-----------| |--------|
711  // |-------| |------------|
712  f.Clear();
713  pt.Set(-75.0 - f.GetTolerance(), 25.0, 0);
714  f.AddToExtents(pt);
715  pt.Set(-60.0, 125.0, 0);
716  f.AddToExtents(pt);
717 
718  TS_ASSERT_EQUALS(e.Overlap(f), true);
719  }
720 } // GmExtents3dUnitTests::testOverlapping
721 
722  //} // namespace xms
723 
724 #endif
bool Overlap(const GmExtents2d &a_b) const
Test to see if two extents overlap.
Definition: GmExtents.cpp:133
bool IsValid()
If we don't have any data we return false.
Definition: GmExtents.cpp:108
double GetMinZ() const
Gets the minimum z.
Definition: GmExtents.cpp:496
static const double XM_DBL_LOWEST
static double GetTolerance()
Gets the tolerance in use.
Definition: GmExtents.cpp:349
Pt3d GetMax() const
Gets the maximum.
Definition: GmExtents.cpp:520
void GetExtents(double *a_MinX, double *a_MaxX, double *a_MinY, double *a_MaxY)
Gets the extents via the parameters.
Definition: GmExtents.cpp:173
Pt2d m_max
Maximum, maximum extents.
Definition: GmExtents.h:74
virtual void AddToExtents(const Pt3d &pt)
Add a point to the extents.
Definition: GmExtents.cpp:95
static void SetTolerance(double a_Tol)
Sets the tolerance to use.
Definition: GmExtents.cpp:116
3D geometric extents (min/max).
Definition: GmExtents.h:108
double GetMinY() const
Gets the minimum y.
Definition: GmExtents.cpp:480
double GetMaxX() const
Gets the maximum x.
Definition: GmExtents.cpp:472
GmExtents3d()
constructor
Definition: GmExtents.cpp:270
void testOverlapping()
Tests overlap.
Definition: GmExtents.cpp:611
double GetMaxY() const
Gets the maximum y.
Definition: GmExtents.cpp:488
void Set(const Pt3d &a_min, const Pt3d &a_max)
Sets the min/max.
Definition: GmExtents.cpp:529
double GetMinX() const
Gets the minimum x.
Definition: GmExtents.cpp:206
void testSinglePt()
Tests a single point.
Definition: GmExtents.cpp:556
static double m_tolerance
Tolerance used in comparisons.
Definition: GmExtents.h:154
bool IsValid() const
If we don't have any data we return false.
Definition: GmExtents.cpp:333
double GetMaxX() const
Gets the maximum x.
Definition: GmExtents.cpp:214
Pt2d GetMin() const
Gets the minimum.
Definition: GmExtents.cpp:238
GmExtents2d()
constructor
Definition: GmExtents.cpp:41
static double m_tolerance
Tolerance used in comparisons.
Definition: GmExtents.h:75
void testMultiplePts()
Tests multiple points.
Definition: GmExtents.cpp:576
void testNoPts()
Tests no points.
Definition: GmExtents.cpp:601
Pt2d GetMax() const
Gets the maximum.
Definition: GmExtents.cpp:246
void Set(const Pt2d &a_min, const Pt2d &a_max)
Sets the min/max.
Definition: GmExtents.cpp:255
void Set(T a_x, T a_y, T a_z)
static void SetTolerance(double a_Tol)
Sets the tolerance to use.
Definition: GmExtents.cpp:341
void operator+=(const GmExtents2d &a_rhs)
operator +=
Definition: GmExtents.cpp:84
void AddToExtents(const Pt3d &pt)
Add a point to the extents.
Definition: GmExtents.cpp:320
void Clear()
Resets the extents to defaults. IsValid will return false.
Definition: GmExtents.cpp:161
2D geometric extents (min/max).
Definition: GmExtents.h:37
Pt3d m_max
Maximum, maximum extents.
Definition: GmExtents.h:153
void Clear()
Resets the extents to defaults. IsValid will return false.
Definition: GmExtents.cpp:394
bool IsPointWithin(const Pt3d &pt) const
Tests if the point is inside the extents.
Definition: GmExtents.cpp:404
double GetMinX() const
Gets the minimum x.
Definition: GmExtents.cpp:464
void GetExtents(double *a_MinX, double *a_MaxX, double *a_MinY, double *a_MaxY, double *a_MinZ, double *a_MaxZ) const
Gets the extents via the parameters.
Definition: GmExtents.cpp:418
static double GetTolerance()
Gets the tolerance in use.
Definition: GmExtents.cpp:124
double GetMaxZ() const
Gets the maximum z.
Definition: GmExtents.cpp:504
Pt3d GetMin() const
Gets the minimum.
Definition: GmExtents.cpp:512
double GetMaxY() const
Gets the maximum y.
Definition: GmExtents.cpp:230
double GetMinY() const
Gets the minimum y.
Definition: GmExtents.cpp:222
Pt3d m_min
Minimum, maximum extents.
Definition: GmExtents.h:152
virtual ~GmExtents2d()
destructor
Definition: GmExtents.cpp:77
bool Overlap(GmExtents3d &a_b) const
Test to see if two extents overlap.
Definition: GmExtents.cpp:358
void operator+=(const GmExtents3d &a_rhs)
operator +=
Definition: GmExtents.cpp:307
Pt2d m_min
Minimum, maximum extents.
Definition: GmExtents.h:73
static const double XM_DBL_HIGHEST