PostGIS 3.0.6dev-r@@SVN_REVISION@@
Loading...
Searching...
No Matches

◆ 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}
const char * lwtype_name(uint8_t type)
Return the type name string associated with a type number (e.g.
Definition lwutil.c:216
#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
#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: