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

◆ lwtriangle_clip_to_ordinate_range()

static LWCOLLECTION * lwtriangle_clip_to_ordinate_range ( const LWTRIANGLE tri,
char  ordinate,
double  from,
double  to 
)
inlinestatic

Clip an input LWTRIANGLE between two values, on any ordinate input.

Definition at line 751 of file lwlinearreferencing.c.

752{
753 assert(tri);
754 char hasz = FLAGS_GET_Z(tri->flags), hasm = FLAGS_GET_M(tri->flags);
755 LWCOLLECTION *lwgeom_out = lwcollection_construct_empty(TINTYPE, tri->srid, hasz, hasm);
756 POINTARRAY *pa = ptarray_clamp_to_ordinate_range(tri->points, ordinate, from, to, LW_TRUE);
757
758 if (!pa)
759 return NULL;
760
761 if (pa->npoints >= 4)
762 {
763 POINT4D first = getPoint4d(pa, 0);
764 for (uint32_t i = 1; i < pa->npoints - 2; i++)
765 {
766 POINT4D p;
767 POINTARRAY *tpa = ptarray_construct_empty(hasz, hasm, 4);
768 ptarray_append_point(tpa, &first, LW_TRUE);
769 getPoint4d_p(pa, i, &p);
771 getPoint4d_p(pa, i + 1, &p);
773 ptarray_append_point(tpa, &first, LW_TRUE);
774 LWTRIANGLE *otri = lwtriangle_construct(tri->srid, NULL, tpa);
775 lwgeom_out = lwcollection_add_lwgeom(lwgeom_out, (LWGEOM *)otri);
776 }
777 }
778 ptarray_free(pa);
779 return lwgeom_out;
780}
POINT4D getPoint4d(const POINTARRAY *pa, uint32_t n)
Definition lwgeom_api.c:107
POINTARRAY * ptarray_construct_empty(char hasz, char hasm, uint32_t maxpoints)
Create a new POINTARRAY with no points.
Definition ptarray.c:59
#define FLAGS_GET_Z(flags)
Definition liblwgeom.h:165
#define TINTYPE
Definition liblwgeom.h:116
#define FLAGS_GET_M(flags)
Definition liblwgeom.h:166
int getPoint4d_p(const POINTARRAY *pa, uint32_t n, POINT4D *point)
Definition lwgeom_api.c:125
void ptarray_free(POINTARRAY *pa)
Definition ptarray.c:327
LWCOLLECTION * lwcollection_construct_empty(uint8_t type, int32_t srid, char hasz, char hasm)
int ptarray_append_point(POINTARRAY *pa, const POINT4D *pt, int allow_duplicates)
Append a point to the end of an existing POINTARRAY If allow_duplicate is LW_FALSE,...
Definition ptarray.c:147
#define LW_TRUE
Return types for functions with status returns.
Definition liblwgeom.h:93
LWCOLLECTION * lwcollection_add_lwgeom(LWCOLLECTION *col, const LWGEOM *geom)
Appends geom to the collection managed by col.
LWTRIANGLE * lwtriangle_construct(int32_t srid, GBOX *bbox, POINTARRAY *points)
Definition lwtriangle.c:40
static POINTARRAY * ptarray_clamp_to_ordinate_range(const POINTARRAY *ipa, char ordinate, double from, double to, uint8_t is_closed)
int32_t srid
Definition liblwgeom.h:496
lwflags_t flags
Definition liblwgeom.h:497
POINTARRAY * points
Definition liblwgeom.h:495
uint32_t npoints
Definition liblwgeom.h:427

References LWTRIANGLE::flags, FLAGS_GET_M, FLAGS_GET_Z, getPoint4d(), getPoint4d_p(), LW_TRUE, lwcollection_add_lwgeom(), lwcollection_construct_empty(), lwtriangle_construct(), POINTARRAY::npoints, LWTRIANGLE::points, ptarray_append_point(), ptarray_clamp_to_ordinate_range(), ptarray_construct_empty(), ptarray_free(), LWTRIANGLE::srid, and TINTYPE.

Referenced by lwgeom_clip_to_ordinate_range().

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