PostGIS  3.0.6dev-r@@SVN_REVISION@@

◆ lw_dist3d_distribute_bruteforce()

int lw_dist3d_distribute_bruteforce ( const LWGEOM lwg1,
const LWGEOM lwg2,
DISTPTS3D dl 
)

This function distributes the brute-force for 3D so far the only type, tasks depending on type.

Definition at line 564 of file measures3d.c.

565 {
566  int t1 = lwg1->type;
567  int t2 = lwg2->type;
568 
569  LWDEBUGF(2, "lw_dist3d_distribute_bruteforce is called with typ1=%d, type2=%d", lwg1->type, lwg2->type);
570 
571  if (t1 == POINTTYPE)
572  {
573  if (t2 == POINTTYPE)
574  {
575  dl->twisted = 1;
576  return lw_dist3d_point_point((LWPOINT *)lwg1, (LWPOINT *)lwg2, dl);
577  }
578  else if (t2 == LINETYPE)
579  {
580  dl->twisted = 1;
581  return lw_dist3d_point_line((LWPOINT *)lwg1, (LWLINE *)lwg2, dl);
582  }
583  else if (t2 == POLYGONTYPE)
584  {
585  dl->twisted = 1;
586  return lw_dist3d_point_poly((LWPOINT *)lwg1, (LWPOLY *)lwg2, dl);
587  }
588  else if (t2 == TRIANGLETYPE)
589  {
590  dl->twisted = 1;
591  return lw_dist3d_point_tri((LWPOINT *)lwg1, (LWTRIANGLE *)lwg2, dl);
592  }
593  else
594  {
595  lwerror("%s: Unsupported geometry type: %s", __func__, lwtype_name(t2));
596  return LW_FALSE;
597  }
598  }
599  else if (t1 == LINETYPE)
600  {
601  if (t2 == POINTTYPE)
602  {
603  dl->twisted = -1;
604  return lw_dist3d_point_line((LWPOINT *)lwg2, (LWLINE *)lwg1, dl);
605  }
606  else if (t2 == LINETYPE)
607  {
608  dl->twisted = 1;
609  return lw_dist3d_line_line((LWLINE *)lwg1, (LWLINE *)lwg2, dl);
610  }
611  else if (t2 == POLYGONTYPE)
612  {
613  dl->twisted = 1;
614  return lw_dist3d_line_poly((LWLINE *)lwg1, (LWPOLY *)lwg2, dl);
615  }
616  else if (t2 == TRIANGLETYPE)
617  {
618  dl->twisted = 1;
619  return lw_dist3d_line_tri((LWLINE *)lwg1, (LWTRIANGLE *)lwg2, dl);
620  }
621  else
622  {
623  lwerror("%s: Unsupported geometry type: %s", __func__, lwtype_name(t2));
624  return LW_FALSE;
625  }
626  }
627  else if (t1 == POLYGONTYPE)
628  {
629  if (t2 == POLYGONTYPE)
630  {
631  dl->twisted = 1;
632  return lw_dist3d_poly_poly((LWPOLY *)lwg1, (LWPOLY *)lwg2, dl);
633  }
634  else if (t2 == POINTTYPE)
635  {
636  dl->twisted = -1;
637  return lw_dist3d_point_poly((LWPOINT *)lwg2, (LWPOLY *)lwg1, dl);
638  }
639  else if (t2 == LINETYPE)
640  {
641  dl->twisted = -1;
642  return lw_dist3d_line_poly((LWLINE *)lwg2, (LWPOLY *)lwg1, dl);
643  }
644  else if (t2 == TRIANGLETYPE)
645  {
646  dl->twisted = 1;
647  return lw_dist3d_poly_tri((LWPOLY *)lwg1, (LWTRIANGLE *)lwg2, dl);
648  }
649  else
650  {
651  lwerror("%s: Unsupported geometry type: %s", __func__, lwtype_name(t2));
652  return LW_FALSE;
653  }
654  }
655  else if (t1 == TRIANGLETYPE)
656  {
657  if (t2 == POLYGONTYPE)
658  {
659  dl->twisted = -1;
660  return lw_dist3d_poly_tri((LWPOLY *)lwg2, (LWTRIANGLE *)lwg1, dl);
661  }
662  else if (t2 == POINTTYPE)
663  {
664  dl->twisted = -1;
665  return lw_dist3d_point_tri((LWPOINT *)lwg2, (LWTRIANGLE *)lwg1, dl);
666  }
667  else if (t2 == LINETYPE)
668  {
669  dl->twisted = -1;
670  return lw_dist3d_line_tri((LWLINE *)lwg2, (LWTRIANGLE *)lwg1, dl);
671  }
672  else if (t2 == TRIANGLETYPE)
673  {
674  dl->twisted = 1;
675  return lw_dist3d_tri_tri((LWTRIANGLE *)lwg1, (LWTRIANGLE *)lwg2, dl);
676  }
677  else
678  {
679  lwerror("%s: Unsupported geometry type: %s", __func__, lwtype_name(t2));
680  return LW_FALSE;
681  }
682  }
683 
684  else
685  {
686  lwerror("%s: Unsupported geometry type: %s", __func__, lwtype_name(t1));
687  return LW_FALSE;
688  }
689 }
#define LW_FALSE
Definition: liblwgeom.h:108
#define LINETYPE
Definition: liblwgeom.h:117
#define POINTTYPE
LWTYPE numbers, used internally by PostGIS.
Definition: liblwgeom.h:116
#define POLYGONTYPE
Definition: liblwgeom.h:118
const char * lwtype_name(uint8_t type)
Return the type name string associated with a type number (e.g.
Definition: lwutil.c:216
#define TRIANGLETYPE
Definition: liblwgeom.h:129
#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
int lw_dist3d_line_tri(LWLINE *line, LWTRIANGLE *tri, DISTPTS3D *dl)
line to triangle calculation
Definition: measures3d.c:820
int lw_dist3d_tri_tri(LWTRIANGLE *tri1, LWTRIANGLE *tri2, DISTPTS3D *dl)
triangle to triangle calculation
Definition: measures3d.c:918
int lw_dist3d_point_point(LWPOINT *point1, LWPOINT *point2, DISTPTS3D *dl)
point to point calculation
Definition: measures3d.c:705
int lw_dist3d_point_tri(LWPOINT *point, LWTRIANGLE *tri, DISTPTS3D *dl)
Definition: measures3d.c:770
int lw_dist3d_poly_tri(LWPOLY *poly, LWTRIANGLE *tri, DISTPTS3D *dl)
polygon to triangle calculation
Definition: measures3d.c:877
int lw_dist3d_poly_poly(LWPOLY *poly1, LWPOLY *poly2, DISTPTS3D *dl)
polygon to polygon calculation
Definition: measures3d.c:836
int lw_dist3d_line_line(LWLINE *line1, LWLINE *line2, DISTPTS3D *dl)
line to line calculation
Definition: measures3d.c:792
int lw_dist3d_point_poly(LWPOINT *point, LWPOLY *poly, DISTPTS3D *dl)
Computes point to polygon distance For mindistance that means: 1) find the plane of the polygon 2) pr...
Definition: measures3d.c:744
int lw_dist3d_point_line(LWPOINT *point, LWLINE *line, DISTPTS3D *dl)
point to line calculation
Definition: measures3d.c:721
int lw_dist3d_line_poly(LWLINE *line, LWPOLY *poly, DISTPTS3D *dl)
line to polygon calculation
Definition: measures3d.c:803
int twisted
Definition: measures3d.h:45
uint8_t type
Definition: liblwgeom.h:448

References LINETYPE, lw_dist3d_line_line(), lw_dist3d_line_poly(), lw_dist3d_line_tri(), lw_dist3d_point_line(), lw_dist3d_point_point(), lw_dist3d_point_poly(), lw_dist3d_point_tri(), lw_dist3d_poly_poly(), lw_dist3d_poly_tri(), lw_dist3d_tri_tri(), LW_FALSE, LWDEBUGF, lwerror(), lwtype_name(), POINTTYPE, POLYGONTYPE, TRIANGLETYPE, DISTPTS3D::twisted, and LWGEOM::type.

Referenced by lw_dist3d_recursive().

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