Larry,

The original JUMP only allowed you to customize rendering behavior for
objects that were painted above and below the Layerable objects. In
addition, the programmer had no control over the order these
"non-layerable" objects were painted in.

The first restriction was partially addressed by Ole Rahn. (I think it
was Ole, anyways.) He hardcoded into the RenderingManager different
rendering behavior based on the class of Layerable being painted. In
this case he I believe he enabled different painting logic for
WMSLayer objects than for regular Layer objects. (Or maybe he was
doing the custom painting for image layers. I don't remember at this
point.)

I was intrigued at the idea of allowing different rendering behavior
based on the class of the Layerable object being rendered. My goal was
to allow this behavior via a plug-in, instead of OpenJUMP's current
system which was based on hardcoding the "switch" logic to select the
appropriate renderer into the RenderingManager class. I basically
tried to take Ole's switch logic and make it pluggable or modular.

I did this by implementing the State design pattern. I created a
RendererFactory class that returns the appropriate renderer when given
the Layerable object that needs to be painted. We will now be able to
customize the rendering of any Layerable object by simply dropping a
JAR file into the /ext directory.

Here is one example of how this might work. Let's say I design some
logic that I think will really speed up the rendering of WMSLayers in
OpenJUMP. I simply encapsulate my renderer in a plug-in and add it to
the /ext folder. OpenJUMP will now render all istances of the WMSLayer
class with my new renderer, instead of the built-in renderer. There
will be no need to recompile OpenJUMP's source code.

This pluggable rendering system will also allow us to add rendering
behavior for new Layerable objects. Here is an example of how this
might work. Let's say I want to add support for route and route
stationing to OpenJUMP. I design a set of classes to support this
behavior, one of which is a RouteAlignment class. This is a linear
feature that needs to be painted on the screen with stationing labels.
I can make a new class that implements the Layerable interface,
something like AlignmentsLayer, and then create a renderer that will
only paint instances of that class.

I have also added the ability to control the order that
"non-layerables" are painted above and below the Layerable objects.

I hope these changes will be of use to programmers like Geoff, who
like developing with plug-ins, but who don't want to mess with
building the core.

My changes to existing code are mostly in the RenderingManager class.
I had to tweak the behavior of the getRenderer and createRenderer
methods. Everything else basically stayed the same.

I hope this rambling makes some sense.

The Sunburned Surveyor

On 7/26/07, Larry Becker <[EMAIL PROTECTED]> wrote:
> Hi SS,
>
> >I believe I have finshed converting the built-in renderers to my
> >pluggable rendering system.
> ...
> >Do they, or
> >anyone else working with the rendering system, expect my modifications
> >to cause conflicts with there improvements?
>
> I would need to examine the code to determine that.  What was your
> specific goal for this modification?  For instance, SkyJUMP has
> additional hard-coded (special selection feedback) renderers to
> support a new Audit Geometry tool.  Would your pluggable mod remove
> the necessity for these to pollute the name space in the
> RenderingManager?
>
> regards,
> Larry Becker
>
> On 7/24/07, Stefan Steiniger <[EMAIL PROTECTED]> wrote:
> > >
> > > [1] I noticed that OpenJUMP passes a "SCALE_SHOW" String to each tasks
> > > RenderingManager. I wasn't able to find a Renderer for this String. I
> > > did find an InstallScaleShowPlugIn class. This class has an
> > > org.openjump package structure, so I don't think it was included in
> > > the original JUMP. Does anyone know what the purpose of this plug-in
> > > is and how it relates to the rendering of the scale bar in OpenJUMP. I
> > > need to figure how to integrate it into my pluggable rendering system.
> >
> > mhm.. as far as i remember i did not change something in the core.
> > The code i used to display the "scale" as number (i assume you talk
> > about this) was more or less a copy of the "scale bar" code from Jump.
> >
> > so i am not sure where this change should come from (would be good to
> > look in the history of the file that provides the string).
> >
> > It may actually be, that this string is used for the project settings
> > and has been added by Jon/Martin for the scale bar.
> >
> > stefan
> >
> >
> > -------------------------------------------------------------------------
> > This SF.net email is sponsored by: Splunk Inc.
> > Still grepping through log files to find problems?  Stop.
> > Now Search log events and configuration files using AJAX and a browser.
> > Download your FREE copy of Splunk now >>  http://get.splunk.com/
> > _______________________________________________
> > Jump-pilot-devel mailing list
> > Jump-pilot-devel@lists.sourceforge.net
> > https://lists.sourceforge.net/lists/listinfo/jump-pilot-devel
> >
>
>
> --
> http://amusingprogrammer.blogspot.com/
>
> -------------------------------------------------------------------------
> This SF.net email is sponsored by: Splunk Inc.
> Still grepping through log files to find problems?  Stop.
> Now Search log events and configuration files using AJAX and a browser.
> Download your FREE copy of Splunk now >>  http://get.splunk.com/
> _______________________________________________
> Jump-pilot-devel mailing list
> Jump-pilot-devel@lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/jump-pilot-devel
>

-------------------------------------------------------------------------
This SF.net email is sponsored by: Splunk Inc.
Still grepping through log files to find problems?  Stop.
Now Search log events and configuration files using AJAX and a browser.
Download your FREE copy of Splunk now >>  http://get.splunk.com/
_______________________________________________
Jump-pilot-devel mailing list
Jump-pilot-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/jump-pilot-devel

Reply via email to