1330         static const double DEFAULT_MITRE_LIMIT = 5.0;
 
 1331         static const int DEFAULT_JOIN_STYLE = JOIN_ROUND;
 
 1332         double mitreLimit = DEFAULT_MITRE_LIMIT;
 
 1333         int joinStyle  = DEFAULT_JOIN_STYLE;
 
 1335         char *paramstr = NULL;
 
 1339         gser_input = PG_GETARG_GSERIALIZED_P(0);
 
 1340         size = PG_GETARG_FLOAT8(1);
 
 1343         if (size == 0) PG_RETURN_POINTER(gser_input);
 
 1347         if ( ! lwgeom_input )
 
 1348                 lwpgerror(
"ST_OffsetCurve: lwgeom_from_gserialized returned NULL");
 
 1352                 PG_RETURN_POINTER(gser_input);
 
 1357                 text *wkttext = PG_GETARG_TEXT_P(2);
 
 1358                 paramstr = text_to_cstring(wkttext);
 
 1360                 POSTGIS_DEBUGF(3, 
"paramstr: %s", paramstr);
 
 1362                 for ( param=paramstr; ; param=NULL )
 
 1365                         param = strtok(param, 
" ");
 
 1367                         POSTGIS_DEBUGF(3, 
"Param: %s", param);
 
 1370                         val = strchr(key, 
'=');
 
 1371                         if (!val || *(val + 1) == 
'\0')
 
 1373                                 lwpgerror(
"ST_OffsetCurve: Missing value for buffer parameter %s", key);
 
 1379                         POSTGIS_DEBUGF(3, 
"Param: %s : %s", key, val);
 
 1381                         if ( !strcmp(key, 
"join") )
 
 1383                                 if ( !strcmp(val, 
"round") )
 
 1385                                         joinStyle = JOIN_ROUND;
 
 1387                                 else if ( !(strcmp(val, 
"mitre") && strcmp(val, 
"miter")) )
 
 1389                                         joinStyle = JOIN_MITRE;
 
 1391                                 else if ( ! strcmp(val, 
"bevel") )
 
 1393                                         joinStyle = JOIN_BEVEL;
 
 1398                                             "Invalid buffer end cap style: %s (accept: 'round', 'mitre', 'miter' or 'bevel')",
 
 1403                         else if ( !strcmp(key, 
"mitre_limit") ||
 
 1404                                   !strcmp(key, 
"miter_limit")    )
 
 1407                                 mitreLimit = atof(val);
 
 1409                         else if ( !strcmp(key, 
"quad_segs") )
 
 1412                                 quadsegs = atoi(val);
 
 1417                                     "Invalid buffer parameter: %s (accept: 'join', 'mitre_limit', 'miter_limit and 'quad_segs')",
 
 1422                 POSTGIS_DEBUGF(3, 
"joinStyle:%d mitreLimit:%g", joinStyle, mitreLimit);
 
 1426         lwgeom_result = 
lwgeom_offsetcurve(lwgeom_input, size, quadsegs, joinStyle, mitreLimit);
 
 1429                 lwpgerror(
"ST_OffsetCurve: lwgeom_offsetcurve returned NULL");
 
 1431         gser_result = geometry_serialize(lwgeom_result);
 
 1434         PG_RETURN_POINTER(gser_result);
 
LWGEOM * lwgeom_from_gserialized(const GSERIALIZED *g)
Allocate a new LWGEOM from a GSERIALIZED.
void lwgeom_free(LWGEOM *geom)
LWGEOM * lwgeom_offsetcurve(const LWGEOM *geom, double size, int quadsegs, int joinStyle, double mitreLimit)
static int lwgeom_is_empty(const LWGEOM *geom)
Return true or false depending on whether a geometry is an "empty" geometry (no vertices members)