MCPcopy Index your code
hub / github.com/MapServer/MapServer / getTile

Function getTile

maprendering.c:183–262  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

181}
182
183imageObj *getTile(imageObj *img, symbolObj *symbol, symbolStyleObj *s, int width, int height,
184 int seamlessmode) {
185 tileCacheObj *tile;
186 rendererVTableObj *renderer = img->format->vtable;
187 if(width==-1 || height == -1) {
188 width=height=MS_MAX(symbol->sizex,symbol->sizey);
189 }
190 tile = searchTileCache(img,symbol,s,width,height);
191 if(tile==NULL) {
192 imageObj *tileimg;
193 double p_x,p_y;
194 tileimg = msImageCreate(width,height,img->format,NULL,NULL,img->resolution, img->resolution, NULL);
195 if(!seamlessmode) {
196 p_x = width/2.0;
197 p_y = height/2.0;
198 switch(symbol->type) {
199 case (MS_SYMBOL_TRUETYPE):
200 renderer->renderTruetypeSymbol(tileimg, p_x, p_y, symbol, s);
201 break;
202 case (MS_SYMBOL_PIXMAP):
203 if(msPreloadImageSymbol(renderer,symbol) != MS_SUCCESS) {
204 return NULL; //failed to load image, renderer should have set the error message
205 }
206 renderer->renderPixmapSymbol(tileimg, p_x, p_y, symbol, s);
207 break;
208 case (MS_SYMBOL_ELLIPSE):
209 renderer->renderEllipseSymbol(tileimg, p_x, p_y,symbol, s);
210 break;
211 case (MS_SYMBOL_VECTOR):
212 renderer->renderVectorSymbol(tileimg, p_x, p_y, symbol, s);
213 break;
214 default:
215 break;
216 }
217 } else {
218 /*
219 * in seamless mode, we render the the symbol 9 times on a 3x3 grid to account for
220 * antialiasing blending from one tile to the next. We finally keep the center tile
221 */
222 imageObj *tile3img = msImageCreate(width*3,height*3,img->format,NULL,NULL,
223 img->resolution, img->resolution, NULL);
224 int i,j;
225 rasterBufferObj tmpraster;
226 for(i=1;i<=3;i++) {
227 p_x = (i+0.5)*width;
228 for(j=1;j<=3;j++) {
229 p_y = (j+0.5) * height;
230 switch(symbol->type) {
231 case (MS_SYMBOL_TRUETYPE):
232 renderer->renderTruetypeSymbol(tile3img, p_x, p_y, symbol, s);
233 break;
234 case (MS_SYMBOL_PIXMAP):
235 if(msPreloadImageSymbol(renderer,symbol) != MS_SUCCESS) {
236 return NULL; //failed to load image, renderer should have set the error message
237 }
238 renderer->renderPixmapSymbol(tile3img, p_x, p_y, symbol, s);
239 break;
240 case (MS_SYMBOL_ELLIPSE):

Callers 3

msDrawLineSymbolFunction · 0.85
msDrawShadeSymbolFunction · 0.85
msDrawMarkerSymbolFunction · 0.85

Calls 10

searchTileCacheFunction · 0.85
msImageCreateFunction · 0.85
msPreloadImageSymbolFunction · 0.85
msFreeImageFunction · 0.85
addTileCacheFunction · 0.85
renderTruetypeSymbolMethod · 0.80
renderPixmapSymbolMethod · 0.80
renderEllipseSymbolMethod · 0.80
mergeRasterBufferMethod · 0.80
renderVectorSymbolMethod · 0.45

Tested by

no test coverage detected