From: <j....@ge...> - 2003-10-22 16:07:31
|
hi Martin i am writing a legend to support StyledMapPane, which method sould i call to notice or repaint StyledMapPane when the legend changed a style? cheers jin |
From: Andrea A. <aa...@li...> - 2003-10-22 20:41:06
|
On Wednesday 22 October 2003 17:05, j....@ge... wrote: > hi Martin > > i am writing a legend to support StyledMapPane, which method sould i call > to notice or repaint StyledMapPane when the legend changed a style? > I guess you're out of luck for the moment. Short summary of the situation: * Martin's renderer is the fastest one we have for interactive rendering * has been developed outside Geotools, and has been donated to the project, but for the moment is quite out of the general architecture * I'm woking now at point/label support for sld symbolizers, which are still missing * then I'll be working on making the Context interface a little more usable * finally, I'll work on MapPanes. Basically, at the moment you have to remove the layer changed and readd it back so that the renderer will recompute the styles: this is how j2d renderer works, it computes the styles in advance and keeps them resolved (int java2d terms) to speed up rendering. The only way to make it happen now is to remove the layer and readd it AFAIK, and I'm not even sure it will work (sorry). So please be patient, it'll take some time since I'm only able to work on geotools a few hours each week, and Martin is busy with the doctoract thesis and cannot code at all. Best regards Andrea Aime |
From: James M. <jma...@ps...> - 2003-10-24 20:34:24
|
At 10:37 PM 10/22/2003 +0200, Andrea Aime wrote: >On Wednesday 22 October 2003 17:05, j....@ge... wrote: > > hi Martin > > > > i am writing a legend to support StyledMapPane, which method sould i call > > to notice or repaint StyledMapPane when the legend changed a style? > > > >I guess you're out of luck for the moment. Short summary of the situation: >* Martin's renderer is the fastest one we have for interactive rendering >* has been developed outside Geotools, and has been donated to the project, > but for the moment is quite out of the general architecture >* I'm woking now at point/label support for sld symbolizers, which are >still missing >* then I'll be working on making the Context interface a little more usable >* finally, I'll work on MapPanes. All cool stuff, can you set each of these up as JIRA items so that we can track progress? >Basically, at the moment you have to remove the layer changed and readd it >back so that the renderer will recompute the styles: this is how j2d renderer >works, it computes the styles in advance and keeps them resolved (int java2d >terms) to speed up rendering. The only way to make it happen now is to remove >the layer and readd it AFAIK, and I'm not even sure it will work (sorry). This is no longer quite true, I added a quick hack to allow dynamic stying in the j2d renderer. If you look at SLDStyleFactory you will find a new method called createDynamicStyle which you can use. Basically what this does is delay the calculation of the Paint and Stroke until render time. To manage this a copy of the Feature and the Style object is held onto so it is less memory efficient. The important thing is that the geometry is NOT re-processed at render time so Martins optimized, cached, geometry stuff still works properly, only their appearance (fill and stroke style) are changed. I have tested this approach with features that have chaning attributes (i.e. constant style rules, changing attribute values) at it works well and fast - though with out an event mechanism you have to triger the redraw yourself. I have not tried it with changing style rules, but it should still work, as long as you change the existing style objects properties, replacing it with a new one will not work... Try this out and let me know how you get on. James |
From: <j....@ge...> - 2003-10-23 18:01:39
|
> I guess you're out of luck for the moment. Short summary of the situation: > * Martin's renderer is the fastest one we have for interactive rendering > * has been developed outside Geotools, and has been donated to the project, > but for the moment is quite out of the general architecture > * I'm woking now at point/label support for sld symbolizers, which are still missing > * then I'll be working on making the Context interface a little more usable > * finally, I'll work on MapPanes. > > Basically, at the moment you have to remove the layer changed and readd it > back so that the renderer will recompute the styles: this is how j2d renderer > works, it computes the styles in advance and keeps them resolved (int java2d > terms) to speed up rendering. The only way to make it happen now is to remove > the layer and readd it AFAIK, and I'm not even sure it will work (sorry). > > So please be patient, it'll take some time since I'm only able to work on geotools > a few hours each week, and Martin is busy with the doctoract thesis and cannot > code at all. > > Best regards > Andrea Aime thanks andrea aime. jin |
From: Martin D. <mar...@te...> - 2003-10-24 06:57:45
|
Hello Jin > i am writing a legend to support StyledMapPane, which method sould i call to notice or > repaint StyledMapPane when the legend changed a style? If you want to repaint the whole MapPane, you can invoke MapPane.repaint(). If you want to repaint only one (or a few) RenderedLayers, then you can invoke the 'repaint()' method on that specific RenderedLayer. It may result in a smaller widget area to be repainted. Note that RenderedLayer.repaint() is thread-safe: it doesn't have to be invoked in the Swing thread. Now, if a Style changed and you want to notify the renderer that the style changed, this is an other topic. 'repaint()' alone do not said that something changed. For now, there is not yet an API to change the style; this is the subject of tracking item GEOT-10: http://jira.codehaus.org/secure/ViewIssue.jspa?key=GEOT-10 In the mean time, a work around may be the following (slow!!!!): mapPane.setContext(mapPane.getContext()); Regards, Martin. |