Skip to content

Commit

Permalink
initial setup for the layer geomtransform implementation
Browse files Browse the repository at this point in the history
  • Loading branch information
Alan Boudreault committed Jan 30, 2013
1 parent 72db35e commit 9bbbfda
Show file tree
Hide file tree
Showing 3 changed files with 40 additions and 1 deletion.
17 changes: 16 additions & 1 deletion mapfile.c
Expand Up @@ -3788,6 +3788,9 @@ int initLayer(layerObj *layer, mapObj *map)
layer->mask = NULL;
layer->maskimage = NULL;

initExpression(&(layer->_geomtransform));
layer->_geomtransform.type = MS_GEOMTRANSFORM_NONE;

return(0);
}

Expand Down Expand Up @@ -3845,7 +3848,8 @@ int freeLayer(layerObj *layer)
msFree(layer->classgroup);

msFreeProjection(&(layer->projection));

freeExpression(&layer->_geomtransform);

freeCluster(&layer->cluster);

for(i=0; i<layer->maxclasses; i++) {
Expand Down Expand Up @@ -4192,6 +4196,12 @@ int loadLayer(layerObj *layer, mapObj *map)
}
}
break;
case(GEOMTRANSFORM): {
int s;
if((s = getSymbol(1, MS_STRING)) == -1) return(MS_FAILURE);
msLayerSetGeomTransform(layer, msyystring_buffer);
}
break;
case(HEADER):
if(getString(&layer->header) == MS_FAILURE) return(-1); /* getString() cleans up previously allocated string */
if(msyysource == MS_URL_TOKENS) {
Expand Down Expand Up @@ -4488,6 +4498,11 @@ static void writeLayer(FILE *stream, int indent, layerObj *layer)
writeString(stream, indent, "FILTERITEM", NULL, layer->filteritem);
writeString(stream, indent, "FOOTER", NULL, layer->footer);
writeString(stream, indent, "GROUP", NULL, layer->group);
if(layer->_geomtransform.type != MS_GEOMTRANSFORM_NONE) {
writeKeyword(stream, indent, "GEOMTRANSFORM", layer->_geomtransform.type, 1,
MS_LAYER_GEOMTRANSFORM_SIMPLIFY, "\"simplify\""
);
}
writeString(stream, indent, "HEADER", NULL, layer->header);
/* join - see below */
writeKeyword(stream, indent, "LABELCACHE", layer->labelcache, 1, MS_OFF, "OFF");
Expand Down
14 changes: 14 additions & 0 deletions mapgeomtransform.c
Expand Up @@ -202,3 +202,17 @@ int msDrawTransformedShape(mapObj *map, symbolSetObj *symbolset, imageObj *image
}
return MS_SUCCESS;
}

void msLayerSetGeomTransform(layerObj *layer, char *transform)
{
msFree(layer->_geomtransform.string);
layer->_geomtransform.string = msStrdup(transform);
if(!strncasecmp("simplify",transform,8)) {
layer->_geomtransform.type = MS_LAYER_GEOMTRANSFORM_SIMPLIFY;
} else {
layer->_geomtransform.type = MS_LAYER_GEOMTRANSFORM_NONE;
msSetError(MS_MISCERR,"unknown transform expression","msLayerSetGeomTransform()");
msFree(layer->_geomtransform.string);
layer->_geomtransform.string = NULL;
}
}
10 changes: 10 additions & 0 deletions mapserver.h
Expand Up @@ -1639,6 +1639,9 @@ extern "C" {
#endif
char *mask;

#ifndef SWIG
expressionObj _geomtransform;
#endif
} layerObj;

/************************************************************************/
Expand Down Expand Up @@ -2653,9 +2656,16 @@ extern "C" {
MS_GEOMTRANSFORM_LABELPOLY
};

enum MS_LAYER_GEOMTRANSFORM_TYPE {
MS_LAYER_GEOMTRANSFORM_NONE,
MS_LAYER_GEOMTRANSFORM_SIMPLIFY,
};

MS_DLL_EXPORT int msDrawTransformedShape(mapObj *map, symbolSetObj *symbolset, imageObj *image, shapeObj *shape, styleObj *style, double scalefactor);
MS_DLL_EXPORT void msStyleSetGeomTransform(styleObj *style, char *transform);
MS_DLL_EXPORT char *msStyleGetGeomTransform(styleObj *style);

MS_DLL_EXPORT void msLayerSetGeomTransform(layerObj *layer, char *transform);
/* ==================================================================== */
/* end of prototypes for functions in mapgeomtransform.c */
/* ==================================================================== */
Expand Down

0 comments on commit 9bbbfda

Please sign in to comment.