37 enum PtInOutOrOn_enum {
48 bool gmPointInOrOnBox2d(
const Pt3d& a_bMin,
const Pt3d& a_bMax,
const Pt3d& a_pt);
49 bool gmBoxesOverlap2d(
const Pt3d& a_b1Min,
53 void gmCalculateNormalizedPlaneCoefficients(
const Pt3d& p1,
60 void gmCalculateNormalizedPlaneCoefficients(
const Pt3d* p1,
67 double gmMiddleZ(
const VecPt3d& a_points);
68 PtInOutOrOn_enum gmPtInCircumcircle(
const Pt3d& pt,
Pt3d circumcirclePts[3]);
69 double gmXyDistanceSquared(
const Pt3d& pt1,
const Pt3d& pt2);
70 bool gmCircumcircleWithTol(
const Pt3d* pt1,
77 int gmCartToBary(
const Pt3d* cart,
const Pt3d* orig,
double coef[6],
int dir,
Pt3d* bary);
78 int gmBaryPrepare(
const Pt3d* p1,
86 bool gmColinearWithTol(
const Pt3d& p1,
const Pt3d& p2,
const Pt3d& p3,
const double tol);
87 bool gmIntersectLineSegmentsWithTol(
const Pt3d& one1,
96 bool gmCounterClockwiseTri(
const Pt3d& vtx0,
const Pt3d& vtx1,
const Pt3d& vtx2);
97 double gmCross2D(
const double& dx1,
const double& dy1,
const double& dx2,
const double& dy2);
98 double gmAngleBetween2DVectors(
double dxp,
double dyp,
double dxn,
double dyn);
99 double gmAngleBetween2DVectors(
double dxp,
105 double gmAngleBetweenEdges(
const Pt3d&,
const Pt3d&,
const Pt3d&);
106 double gmAngleBetweenEdges(
const Pt2d& p1,
const Pt2d& p2,
const Pt2d& p3);
107 double gmComputeDeviationInDirection(
const Pt3d&,
const Pt3d&,
const Pt3d&);
108 bool gmOnLineAndBetweenEndpointsWithTol(
const Pt3d& a_pt1,
113 bool gmOnLineWithTol(
const Pt3d& vertex1,
118 void gmAddToExtents(
const Pt3d& a_pt,
Pt3d& a_min,
Pt3d& a_max);
119 void gmAddToExtents(
const Pt3d& a_pt,
Pt2d& a_min,
Pt2d& a_max);
120 void gmAddToExtents(
const Pt2d& a_pt,
Pt3d& a_min,
Pt3d& a_max);
121 double gmXyDistance(
double x1,
double y1,
double x2,
double y2);
122 double gmXyDistance(
const Pt3d& pt1,
const Pt3d& pt2);
123 Turn_enum gmTurn(
const Pt3d& a_v1,
const Pt3d& a_v2,
const Pt3d& a_v3,
double a_angtol = 0.0017453);
126 bool gmLinesIntersect(
const Pt3d& one1,
const Pt3d& one2,
const Pt3d& two1,
const Pt3d& two2);
127 int gmPointInPolygon2D(
const Pt3d*,
size_t,
double,
double);
128 int gmPointInPolygon2D(
const Pt3d*,
size_t,
double,
double);
129 int gmPointInPolygon2D(
const Pt3d*,
size_t,
Pt3d);
130 int gmPointInPolygon2D(
const Pt2i*,
size_t,
Pt2d);
131 int gmPointInPolygon2D(
const Pt2i*,
size_t,
Pt2i);
132 int gmPointInPolygon2D(
const Pt2i*,
size_t,
Pt3d);
133 int gmPointInPolygon2D(
const VecPt3d&,
const Pt3d&);
134 template <
typename T>
135 int gmPointInPolygon2D(
const T* theverts,
136 const size_t numverts,
140 double gmComputeXyTol(
const Pt3d& a_mn,
const Pt3d& a_mx);
141 double gmXyTol(
bool a_set =
false,
double a_value = 1e-9);
142 double gmZTol(
bool a_set =
false,
double a_value = 1e-6);
143 bool gmEqualPointsXY(
double x1,
double y1,
double x2,
double y2);
144 bool gmEqualPointsXY(
double x1,
double y1,
double x2,
double y2,
double tol);
145 bool gmEqualPointsXY(
const Pt2i&,
const Pt2i&);
146 bool gmEqualPointsXY(
const Pt2d& a_pt1,
const Pt2d& a_pt2,
double tol);
147 bool gmEqualPointsXY(
const Pt3d& a_pt1,
const Pt3d& a_pt2,
double tol);
148 bool gmEqualPointsXYZ(
double x1,
double y1,
double z1,
double x2,
double y2,
double z2);
149 bool gmEqualPointsXYZ(
double x1,
double y1,
double z1,
double x2,
double y2,
double z2,
double tol);
150 bool gmEqualPointsXYZ(
const Pt3d& pt1,
const Pt3d& pt2,
double tol);
151 bool gmPointInTriangleWithTol(
const Pt3d* p1,
157 bool gmInsideOrOnLineWithTol(
const Pt3d* p1,
163 double* dist = NULL);
164 double gmPolygonArea(
const Pt3d* points,
size_t npoints);
165 VecPt3d gmArrayToVecPt3d(
double* a_array,
int a_size);
167 void gmOrderPointsCounterclockwise(
const VecPt3d& pts,
VecInt& ccwOrder,
int startindex = 0);
168 void gmOrderPointsCounterclockwise(
VecPt3d& pts);
169 double gmFindClosestPtOnSegment(
const Pt3d& pt1,
174 double gmPtDistanceAlongSegment(
const Pt3d& pt1,
const Pt3d& pt2,
const Pt3d& pt,
const double tol);
175 bool gmInsideOfLineWithTol(
const Pt3d& a_vertex1,
176 const Pt3d& a_vertex2,
177 const Pt3d& a_oppositevertex,
184 double gmPerpendicularAngle(
const Pt3d& point1,
const Pt3d& point2);
185 double gmBisectingAngle(
const Pt3d& p1,
const Pt3d& p2,
const Pt3d& p3);
186 void gmComponentMagnitudes(
double* x,
double* y,
double* mag,
double* dir,
bool tomagdir);
188 double gmConvertAngleToBetween0And360(
double a_angle,
bool a_InDegrees =
true);
189 void gmCross3D(
const Pt3d& a_vec1,
const Pt3d& a_vec2,
Pt3d* a_vec3);
190 inline double gmDot3D(
const Pt3d& a_vec1,
const Pt3d& a_vec2);
191 int gmIntersectTriangleAndLineSegment(
const Pt3d& a_pt1,
196 Pt3d& a_IntersectPt);
197 double gm2DDistanceToLineWithTol(
const Pt3d* pt1,
const Pt3d* pt2,
double x,
double y,
double tol);
std::vector< int > VecInt
std::vector< Pt3d > VecPt3d