Skip to main content

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [List Home]
Re: [udig-devel] Question on Renderers

Ugo,

Here is my attempt to explain some of the rendering stuff.

Renderers are responsible for drawing data on an image. Each Renderer has a RenderMetrics which is used to determine "how well" the corresponding renderer can render a given georesource. The RenderMetricsFactories are used to create the RenderMetrics.

Udig uses all this information to draw layers on the map. When UDig opens a map it gets a list of all available RenderMetricsFactories by processing the extension point.

When it goes to render a given layer (for example a shapefile layer); it goes though all the possible rendermetricsfactories; creates render metrics; and then rates the render metrics based on the information provided in that class. Then the render metrics with the highest rating is used to create a renderer for that given layer. (Some of this information is cached; so all this processing does not necessarily happen for each draw).

So a layer can have multiple renderer, but by using the render metrics uDig determines which one to use. In uDig there are multiple renderers that can render a shapefile: BasicFeatureRenderer and ShapefileFeatureRenderer; however because of the way the render metrics are set up for a shapefile the ShapefileFeatureRenderer will be picked over the other renderer to render shapefiles.


>I cannot see any other renderes.

My first guess would be to ensure the plug-ins for all renderers are included when you run your project. If the RenderMetricFactories are not included when running then uDig won't know about them and won't be able to find any render metric factories when processing the extension point.

I hope this is of some help.

Emily



Ugo Taddei wrote:
Hello,

I'm hopelessly trying to understand the rationale behind all those Renderers, RenderMetrics and RenderMetricsFactories. For that, I've adapted the code from StaticGISWidget and I'm trying to render onto an image I created.

I use ApplicationGIS.drawMap( drawParameters ) to render the image. It's not working because

Renderer renderer = decisive.getRenderer(context); (around line 855)

returns a net.refractions.udig.project.internal.render.impl.PlaceHolder, which apparently is some sort of dummy renderer, that is, does nothing.

In my application I read a project, and try to render a map (with the adapted code from StatcGisWidget). In the printlns I added, I only see a MapGraphicRenderMetricsFactory (which I assume is always there, as I don't have explicitely instantiated on or created one within the project). I cannot see any other renderes.

How does udig figures out, what sort of layer it has, say a shapefile, and when does it do that?

What renderer is responsible for the shapefiles, is it ShapefileFeatureRenderer?

Do I have to set the renderer myself?

Thanks in advance,

Ugo



Back to the top