[OpenLayers-Dev] Renderer
Cameron Shorter
cameron.shorter at gmail.com
Mon Nov 13 13:40:38 EST 2006
Paul, in answer to your last question.
Please don't break the vector code. I'm writing a Layer/Gml at the
moment and need working code to test against.
If you do break the code, please let us know so that I can put of
syncronising with the head version until it works again.
Paul Spencer wrote:
> Hi Bertil,
>
> Thanks for the update. I think we are getting close here. I have some
> specific comments inline
>
> On 13-Nov-06, at 11:35 AM, bchapuis wrote:
>
>> Paul, Cameron,
>>
>> thanks for the svn updates. It's very exciting to see the code
>> modifications. We also think that's important to unify and refactor the
>> base of code.
>>
>> Now the first priority is to quickly find a common solution for the
>> Canvas, SVG and VML Renderers (Paul, thanks a lot for your initiative
>> with the Renderer Class).
>>
>> Here, we are a little bit afraid about the javascript performances. We
>> need a very reactive solution for editing functionalities and we drew
>> our design with this goal. So to answer some questions here are
>> more explanations about our architecture.
>>
>> The rendered vectors are directly drawn in vector coordinates. You can
>> see that if you browse the DOM attributes.
>
>
> To make performance decent in Canvas, I needed to pre-compute the pixel
> location from the geographic location and cache it until the geographic
> position changed or the canvas was moved. If we remove the Sheet
> object from the architecture, then this becomes an implementation
> detail of Canvas and lets Svg/Vml work in geographic coordinates (as
> appropriate).
>
> It may be possible with Canvas to do the same thing by scaling all
> rendering ... just thought of that!
>
>>
>> The Renderer.setExtent() function, is used to change the view box of the
>> SVG/VML document. So the vector layer is completely drawn when the page
>> is loaded. When pan or zoom actions appends we just reset the visible
>> part of the document. It's probably not possible to do the same with
>> canvas. But we can try to simulate it.
>
>
> In Canvas, I created a canvas twice as big as the map and only move the
> canvas when necessary. This is essentially the same technique I think,
> but managed slightly differently.
>
>>
>> Each instance of Renderer class have is own root property. Root is a
>> reference to a DOM node. So if you want to draw in a second layer, you
>> must create a new instance of a renderer.
>
>
> Right. Canvas creates a DOM element as well, <canvas>. What I did was
> to attach this as an attribute of the layer object in the attach ()
> code. This means that all the state for the rendering of a particular
> layer is stored with the layer rather than the renderer. Then you can
> have one instance of renderer work with multiple layers by passing the
> layer as an argument to each call. I think this is better (but I am
> willing to be convinced otherwise).
>
>>
>> Each Renderer have the ability to trig specific edition events. These
>> contain a reference to the pointed geometry. The goal was to
>> make an abstraction layer and allow renderer wich don't manage DOM
>> events to send the same events as the others. In Canvas, the only
>> possibility is probably to loop on features and find the geometry
>> reference.
>
>
> That is correct. With the changes I am proposing, each Renderer would
> have a findGeometryForEvent (or whatever I called it) and in the Vml
> and Svg cases, they can just get the element by id. In the canvas
> case, I can then search the nodes/lines/polygons etc.
>
>>
>> (Note that in SVG/VML renderer we directly put a geometry reference in
>> the DOM node. So we don't have to loop on the features.)
>>
>> Paul, it will be a great thing to copy the last version of your canvas
>> Renderer in the vector/lib/OpenLayers/Renderer folder.
>
>
> Ok :)
>
>>
>> We want discuss this architecture and pay attention to the others
>> arguments. So it will be nice to have more explanations for the global
>> Renderer Class and suggestions to merge the two architectures of canvas
>> and vector XML syntax. Due to time zone difference, it's probably
>> difficult for all of us to be at the same time on IRC, it's probably
>> better if we use the mailing-list to answer.
>
>
>
> I'd like to commit some changes for my modification to the
> architecture, but it will for sure break the code (i.e. it won't be
> runnable) until I have time to debug (and there are some changes that
> would need to be made in Svg and Vml). How do you want to do this?
> Should I work in (yet another) sandbox or should I just commit and then
> try to get it working again?
>
> If we are ready to move on the changes I am proposing, I'd like to work
> on them tonight I think.
>
> Cheers
>
> Paul
>
>>
>> Regard's,
>>
>> Bertil
>>
>>
>
> +-----------------------------------------------------------------+
> |Paul Spencer pspencer at dmsolutions.ca |
> +-----------------------------------------------------------------+
> |Chief Technology Officer |
> |DM Solutions Group Inc http://www.dmsolutions.ca/ |
> +-----------------------------------------------------------------+
>
>
>
>
>
--
Cameron Shorter
http://cameron.shorter.net
More information about the Dev
mailing list