[mapserver-dev] A question...

Daniel Morissette dmorissette at mapgears.com
Thu Aug 6 10:58:25 EDT 2009

kiran varma wrote:
> In order to implement SVG functionality currently i am trying to mimic 
> VECTOR rendering. Can someone explain the flow of control for the 
> rendering of vector symbol? Preferably from mapfile parsing upto gd/agg 
> rendering. This will help me understand the route that i have to take in 
> order to render SVG symbol.

1- Parsing:

When the mapfile/symbolset is parsed, the symbol definitions is stored 
in a symbolObj

2- At rendering time, msDrawMap() is called, which in turn calls 
msDrawLayer() for each layer

3- For each shape read, msDrawShape() is called. This function contains 
a switch/case statement based on layer type

The rest of the processing depends on the layer type and renderer. Let's 
continue with the GD renderer:

4a- MS_LAYER_POINT: For a shape in a point layer, msDrawMarkerSymbol() 
(which in turn calls msDrawMarkerSymbolGD() ) is called to draw the 
symbol at the right location on the map based on the symbolObj 
information. The point layer case is different from the two other layer 
types because it doesn't use the symbol cache, the symbol is drawn 
directly on top of the output image... I'm not exactly sure why, but 
there is a TODO comment about this in the code.

4b- MS_LAYER_LINE: For a shape in a line layer, msDrawLineSymbol() is 
called, which in turn calls msDrawLineSymbolGD(). Then 
searchImageCache() is used to check if the symbol is already in the 
cache for the current size, color and angle, and if not then 
createBrush() is used to render the symbol in a and gdImagePtr, we store 
it in the cache using addImageCache() and finally it is used as a brush 
to render the line with gdImageLine().

4c - MS_LAYER_POLYGON: I leave that one to you as an exercise.

Hint: stepping through the code in GDB is an excellent way to figure the 
flow of control of a given operation.

Daniel Morissette

More information about the mapserver-dev mailing list