Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
tree: b508bb9519
Fetching contributors…

Cannot retrieve contributors at this time

221 lines (188 sloc) 6.722 kb
/******************************************************************************
* $Id$
*
* Project: MapServer
* Purpose: Functions for operating on a layerObj that don't belong in a
* more specific file such as mapfile.c.
* Adapted from mapobject.c.
* Author: Sean Gillies, sgillies@frii.com
*
******************************************************************************
* Copyright (c) 2004, Sean Gillies
*
* Permission is hereby granted, free of charge, to any person obtaining a
* copy of this software and associated documentation files (the "Software"),
* to deal in the Software without restriction, including without limitation
* the rights to use, copy, modify, merge, publish, distribute, sublicense,
* and/or sell copies of the Software, and to permit persons to whom the
* Software is furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies of this Software or works derived from this Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
* DEALINGS IN THE SOFTWARE.
****************************************************************************/
#include "mapserver.h"
#ifdef USE_GDAL
# include "gdal.h"
# include "cpl_conv.h"
#endif
MS_CVSID("$Id$")
/* ===========================================================================
msInsertClass
Returns the index at which the class was inserted.
======================================================================== */
int msInsertClass(layerObj *layer, classObj *classobj, int nIndex)
{
int i;
if (!classobj)
{
msSetError(MS_CHILDERR, "Cannot insert NULL class", "msInsertClass()");
return -1;
}
/* Ensure there is room for a new class */
if (msGrowLayerClasses(layer) == NULL) {
return -1;
}
/* Catch attempt to insert past end of styles array */
else if (nIndex >= layer->numclasses) {
msSetError(MS_CHILDERR, "Cannot insert class beyond index %d",
"msInsertClass()", layer->numclasses-1);
return -1;
}
else if (nIndex < 0) { /* Insert at the end by default */
#ifndef __cplusplus
layer->class[layer->numclasses]=classobj;
#else
layer->_class[layer->numclasses]=classobj;
#endif
/* set parent pointer */
classobj->layer=layer;
MS_REFCNT_INCR(classobj);
layer->numclasses++;
return layer->numclasses-1;
}
else if (nIndex >= 0 && nIndex < layer->numclasses) {
/* Copy classes existing at the specified nIndex or greater */
/* to an index one higher */
#ifndef __cplusplus
for (i=layer->numclasses-1; i>=nIndex; i--)
layer->class[i+1] = layer->class[i];
layer->class[nIndex]=classobj;
#else
for (i=layer->numclasses-1; i>=nIndex; i--)
layer->_class[i+1] = layer->_class[i];
layer->_class[nIndex]=classobj;
#endif
/* set parent pointer */
classobj->layer=layer;
MS_REFCNT_INCR(classobj);
/* increment number of classes and return */
layer->numclasses++;
return nIndex;
}
else {
msSetError(MS_CHILDERR, "Invalid index", "msInsertClass()");
return -1;
}
}
/* ===========================================================================
msRemoveClass
remove the class at an index from a layer, returning a copy
======================================================================== */
classObj *msRemoveClass(layerObj *layer, int nIndex)
{
int i;
classObj *classobj;
if (nIndex < 0 || nIndex >= layer->numclasses)
{
msSetError(MS_CHILDERR, "Cannot remove class, invalid index %d",
"removeClass()", nIndex);
return NULL;
}
else
{
#ifndef __cplusplus
classobj=layer->class[nIndex];
#else
classobj=layer->_class[nIndex];
#endif
classobj->layer=NULL;
MS_REFCNT_DECR(classobj);
/* Iteratively copy the higher index classes down one index */
for (i=nIndex; i<layer->numclasses-1; i++)
{
#ifndef __cplusplus
layer->class[i]=layer->class[i+1];
#else
layer->_class[i]=layer->_class[i+1];
#endif
}
#ifndef __cplusplus
layer->class[i]=NULL;
#else
layer->_class[i]=NULL;
#endif
/* decrement number of layers and return copy of removed layer */
layer->numclasses--;
return classobj;
}
}
/**
* Move the class up inside the array of classes.
*/
int msMoveClassUp(layerObj *layer, int nClassIndex)
{
classObj *psTmpClass = NULL;
if (layer && nClassIndex < layer->numclasses && nClassIndex >0)
{
psTmpClass=layer->class[nClassIndex];
layer->class[nClassIndex] = layer->class[nClassIndex-1];
layer->class[nClassIndex-1] = psTmpClass;
return(MS_SUCCESS);
}
msSetError(MS_CHILDERR, "Invalid index: %d", "msMoveClassUp()",
nClassIndex);
return (MS_FAILURE);
}
/**
* Move the class down inside the array of classes.
*/
int msMoveClassDown(layerObj *layer, int nClassIndex)
{
classObj *psTmpClass = NULL;
if (layer && nClassIndex < layer->numclasses-1 && nClassIndex >=0)
{
psTmpClass=layer->class[nClassIndex];
layer->class[nClassIndex] = layer->class[nClassIndex+1];
layer->class[nClassIndex+1] = psTmpClass;
return(MS_SUCCESS);
}
msSetError(MS_CHILDERR, "Invalid index: %d", "msMoveClassDown()",
nClassIndex);
return (MS_FAILURE);
}
/**
* Set the extent of a layer.
*/
int msLayerSetExtent( layerObj *layer,
double minx, double miny, double maxx, double maxy)
{
layer->extent.minx = minx;
layer->extent.miny = miny;
layer->extent.maxx = maxx;
layer->extent.maxy = maxy;
if (minx == -1.0 && miny == -1.0 && maxx == -1.0 && maxy == -1.0)
return(MS_SUCCESS);
if (!MS_VALID_EXTENT(layer->extent)) {
msSetError(MS_MISCERR, "Given layer extent is invalid. minx=%lf, miny=%lf, maxx=%lf, maxy=%lf.", "msLayerSetExtent()", layer->extent.minx, layer->extent.miny, layer->extent.maxx, layer->extent.maxy);
return(MS_FAILURE);
}
return(MS_SUCCESS);
}
Jump to Line
Something went wrong with that request. Please try again.