Beispiel #1
0
void layerObj_destroy(layerObj *self) {
   /* if the layer has a parent_map, let's the map object destroy it */
   if ((self->map == NULL) && (self->refcount == 1)) {
      /* if there is no other PHP Object that use this C layer object, delete it */
         freeLayer(self);
         free(self);
         self = NULL;
   } else 
   {
      MS_REFCNT_DECR(self);  
   }
   return;
}
Beispiel #2
0
layerObj *msRemoveLayer(mapObj *map, int nIndex) 
{
    int i;
    int order_index;
    layerObj *layer;
    
    if (nIndex < 0 || nIndex >= map->numlayers) {
        msSetError(MS_CHILDERR, "Cannot remove Layer, invalid index %d",
                   "msRemoveLayer()", nIndex);
        return NULL;
    }
    else {
    	layer=GET_LAYER(map, nIndex);
        /* msCopyLayer(layer, (GET_LAYER(map, nIndex))); */
        
        /* Iteratively copy the higher index layers down one index */
        for (i=nIndex; i<map->numlayers-1; i++) {
            /* freeLayer((GET_LAYER(map, i))); */
            /* initLayer((GET_LAYER(map, i)), map); */
            /* msCopyLayer(GET_LAYER(map, i), GET_LAYER(map, i+1)); */
	    GET_LAYER(map, i)=GET_LAYER(map, i+1);
            GET_LAYER(map, i)->index = i;
        }
        /* Free the extra layer at the end */
        /* freeLayer((GET_LAYER(map, map->numlayers-1))); */
        GET_LAYER(map, map->numlayers-1)=NULL;
        
        /* Adjust drawing order */
        order_index = 0;
        for (i=0; i<map->numlayers; i++) {
            if (map->layerorder[i] > nIndex) map->layerorder[i]--;
            if (map->layerorder[i] == nIndex) {
                order_index = i;
                break;
            }
        }
        for (i=order_index; i<map->numlayers-1; i++) {
            map->layerorder[i] = map->layerorder[i+1];
            if (map->layerorder[i] > nIndex) map->layerorder[i]--;
        }
        
        /* decrement number of layers and return copy of removed layer */
        map->numlayers--;
	layer->map=NULL;
	MS_REFCNT_DECR(layer);
        return layer;
    }
}
styleObj *msRemoveLabelStyle(labelObj *label, int nStyleIndex)
{
  int i;
  styleObj *style;
  if (nStyleIndex < 0 || nStyleIndex >= label->numstyles) {
    msSetError(MS_CHILDERR, "Cannot remove style, invalid nStyleIndex %d", "removeLabelStyle()", nStyleIndex);
    return NULL;
  } else {
    style=label->styles[nStyleIndex];
    for (i=nStyleIndex; i<label->numstyles-1; i++) {
      label->styles[i]=label->styles[i+1];
    }
    label->styles[label->numstyles-1]=NULL;
    label->numstyles--;
    MS_REFCNT_DECR(style);
    return style;
  }
}
Beispiel #4
0
symbolObj *msRemoveSymbol(symbolSetObj *symbolset, int nSymbolIndex)
{
  int i;
  symbolObj *symbol;
  if (symbolset->numsymbols == 1) {
    msSetError(MS_CHILDERR, "Cannot remove a symbolset's sole symbol", "removeSymbol()");
    return NULL;
  } else if (nSymbolIndex < 0 || nSymbolIndex >= symbolset->numsymbols) {
    msSetError(MS_CHILDERR, "Cannot remove symbol, invalid nSymbolIndex %d", "removeSymbol()", nSymbolIndex);
    return NULL;
  } else {
    symbol=symbolset->symbol[nSymbolIndex];
    for (i=nSymbolIndex+1; i<symbolset->numsymbols; i++) {
      symbolset->symbol[i-1] = symbolset->symbol[i];
    }
    symbolset->symbol[i-1]=NULL;
    symbolset->numsymbols--;
    MS_REFCNT_DECR(symbol);
    return symbol;
  }
}