/* @brief Clone LWGEOM object. Serialized point lists are not copied. * * @see ptarray_clone */ LWGEOM * lwgeom_clone(const LWGEOM *lwgeom) { LWDEBUGF(2, "lwgeom_clone called with %p, %s", lwgeom, lwtype_name(lwgeom->type)); switch (lwgeom->type) { case POINTTYPE: return (LWGEOM *)lwpoint_clone((LWPOINT *)lwgeom); case LINETYPE: return (LWGEOM *)lwline_clone((LWLINE *)lwgeom); case CIRCSTRINGTYPE: return (LWGEOM *)lwcircstring_clone((LWCIRCSTRING *)lwgeom); case POLYGONTYPE: return (LWGEOM *)lwpoly_clone((LWPOLY *)lwgeom); case TRIANGLETYPE: return (LWGEOM *)lwtriangle_clone((LWTRIANGLE *)lwgeom); case COMPOUNDTYPE: case CURVEPOLYTYPE: case MULTICURVETYPE: case MULTISURFACETYPE: case MULTIPOINTTYPE: case MULTILINETYPE: case MULTIPOLYGONTYPE: case POLYHEDRALSURFACETYPE: case TINTYPE: case COLLECTIONTYPE: return (LWGEOM *)lwcollection_clone((LWCOLLECTION *)lwgeom); default: lwerror("lwgeom_clone: Unknown geometry type: %s", lwtype_name(lwgeom->type)); return NULL; } }
LWGEOM * lwline_unstroke(const LWLINE *line) { LWDEBUG(2, "lwline_unstroke called."); if ( line->points->npoints < 4 ) return lwline_as_lwgeom(lwline_clone(line)); else return pta_unstroke(line->points, line->flags, line->srid); }
static LWGEOM* lwline_split_by_point(const LWLINE* lwline_in, const LWPOINT* blade_in) { LWMLINE* out; out = lwmline_construct_empty(lwline_in->srid, FLAGS_GET_Z(lwline_in->flags), FLAGS_GET_M(lwline_in->flags)); if ( lwline_split_by_point_to(lwline_in, blade_in, out) < 2 ) { lwmline_add_lwline(out, lwline_clone(lwline_in)); } /* Turn multiline into collection */ out->type = COLLECTIONTYPE; return (LWGEOM*)out; }
static LWLINE* lwline_set_effective_area(const LWLINE *iline,int set_area, double trshld) { LWDEBUG(2, "Entered lwline_set_effective_area"); int set_m; if(set_area) set_m=1; else set_m=FLAGS_GET_M(iline->flags); LWLINE *oline = lwline_construct_empty(iline->srid, FLAGS_GET_Z(iline->flags), set_m); /* Skip empty case */ if( lwline_is_empty(iline) ) return lwline_clone(iline); oline = lwline_construct(iline->srid, NULL, ptarray_set_effective_area(iline->points,2,set_area,trshld)); oline->type = iline->type; return oline; }
/* @brief Clone LWCIRCSTRING object. Serialized point lists are not copied. * * @see ptarray_clone */ LWCIRCSTRING * lwcircstring_clone(const LWCIRCSTRING *g) { return (LWCIRCSTRING *)lwline_clone((LWLINE *)g); }
/* @brief Clone LWTRIANGLE object. Serialized point lists are not copied. * * @see ptarray_clone */ LWTRIANGLE * lwtriangle_clone(const LWTRIANGLE *g) { LWDEBUGF(2, "lwtriangle_clone called with %p", g); return (LWTRIANGLE *)lwline_clone((const LWLINE *)g); }