PostGIS  3.3.9dev-r@@SVN_REVISION@@

◆ lw_dist2d_ptarrayarc_ptarrayarc()

int lw_dist2d_ptarrayarc_ptarrayarc ( const POINTARRAY pa,
const POINTARRAY pb,
DISTPTS dl 
)

Test each arc of pa against each arc of pb for distance.

Definition at line 1322 of file measures.c.

1323 {
1324  uint32_t t, u;
1325  const POINT2D *A1;
1326  const POINT2D *A2;
1327  const POINT2D *A3;
1328  const POINT2D *B1;
1329  const POINT2D *B2;
1330  const POINT2D *B3;
1331  int twist = dl->twisted;
1332 
1333  LWDEBUGF(2, "lw_dist2d_ptarrayarc_ptarrayarc called (points: %d-%d)", pa->npoints, pb->npoints);
1334 
1335  if (dl->mode == DIST_MAX)
1336  {
1337  lwerror("lw_dist2d_ptarrayarc_ptarrayarc does not currently support DIST_MAX mode");
1338  return LW_FALSE;
1339  }
1340  else
1341  {
1342  A1 = getPoint2d_cp(pa, 0);
1343  for (t = 1; t < pa->npoints; t += 2) /* For each segment in pa */
1344  {
1345  A2 = getPoint2d_cp(pa, t);
1346  A3 = getPoint2d_cp(pa, t + 1);
1347  B1 = getPoint2d_cp(pb, 0);
1348  for (u = 1; u < pb->npoints; u += 2) /* For each arc in pb */
1349  {
1350  B2 = getPoint2d_cp(pb, u);
1351  B3 = getPoint2d_cp(pb, u + 1);
1352  dl->twisted = twist;
1353 
1354  lw_dist2d_arc_arc(A1, A2, A3, B1, B2, B3, dl);
1355 
1356  /* If we've found a distance within tolerance, we're done */
1357  if (dl->distance <= dl->tolerance && dl->mode == DIST_MIN)
1358  return LW_TRUE;
1359 
1360  B1 = B3;
1361  }
1362  A1 = A3;
1363  }
1364  }
1365  return LW_TRUE;
1366 }
#define LW_FALSE
Definition: liblwgeom.h:109
#define LW_TRUE
Return types for functions with status returns.
Definition: liblwgeom.h:108
#define LWDEBUGF(level, msg,...)
Definition: lwgeom_log.h:88
void lwerror(const char *fmt,...)
Write a notice out to the error handler.
Definition: lwutil.c:190
static const POINT2D * getPoint2d_cp(const POINTARRAY *pa, uint32_t n)
Returns a POINT2D pointer into the POINTARRAY serialized_ptlist, suitable for reading from.
Definition: lwinline.h:101
int lw_dist2d_arc_arc(const POINT2D *A1, const POINT2D *A2, const POINT2D *A3, const POINT2D *B1, const POINT2D *B2, const POINT2D *B3, DISTPTS *dl)
Definition: measures.c:1586
#define DIST_MIN
Definition: measures.h:44
#define DIST_MAX
Definition: measures.h:43
int twisted
Definition: measures.h:55
double tolerance
Definition: measures.h:56
int mode
Definition: measures.h:54
double distance
Definition: measures.h:51
uint32_t npoints
Definition: liblwgeom.h:442

References DIST_MAX, DIST_MIN, DISTPTS::distance, getPoint2d_cp(), lw_dist2d_arc_arc(), LW_FALSE, LW_TRUE, LWDEBUGF, lwerror(), DISTPTS::mode, POINTARRAY::npoints, DISTPTS::tolerance, and DISTPTS::twisted.

Referenced by lw_dist2d_circstring_circstring().

Here is the call graph for this function:
Here is the caller graph for this function: