Looks like a nice and useful project!  But,I’m looking for something specific 
to the JavaFX canvas and that doesn’t require use of java.awt.  There are many 
examples of code that has been built on top of java.awt.Graphics2D (like 
yours), but this doesn’t seem to be possible with the JavaFX GraphicsContext.  
I think some small changes within JavaFX would allow a lot of nice tools to be 
developed in a way similar to what was done with Graphics2D.

Bruce


> On Nov 2, 2020, at 8:51 AM, Hervé Girod <herve.gi...@gmail.com> wrote:
> 
> Hello, Ivhabe created some time ago an OpenSource project called 
> jfcClnvertercwhichvtefurect the Jz aFX calls to a Graphics2D context. I don’t 
> know if it answers at least partially to this need. The project is here: 
> https://sourceforge.net/projects/jfxconverter/ 
> <https://sourceforge.net/projects/jfxconverter/>
> 
> Hervé
> 
> Sent from my iPhone
> 
>> On Nov 2, 2020, at 14:19, Bruce Johnson <nmrv...@mac.com> wrote:
>> 
>> 
>> A variety of packages (for example,  VectorGraphics or JFreeSVG) exist that 
>> allow redirecting Java2D drawing to output other than the Java2D canvas. 
>> 
>> These work by extending java.awt.Graphics2D.  By passing the extended 
>> Graphics2D object into a paint method, output can be redirected to a file 
>> (.svg, .pdf, etc.).
>> 
>> The GraphicsContext class of JavaFX serves a similar function to Graphics2D 
>> of java.awt, but because it is a final class it cannot be extended to create 
>> similar functionality as found in VectorgGraphics or JFreeSVG.
>> 
>> This is a serious limitation (at least as far as I can tell) to JavaFX 
>> applications.  It would be highly desirable to be able to redirect drawing 
>> on a Canvas to other output formats such as vector graphics files (.svg, 
>> .pdf etc.).
>> 
>> I currently work around this by using composition.  I have a Java interface 
>> that has most methods of GraphicsContext.  Then a GraphicsContextProxy class 
>> implements the interface and contains an instance of GraphicsContext.  This 
>> class is used for drawing to the Canvas.  I’ve then created a 
>> SVGGraphicsContext and PDFGraphicsContext that implement the interface and 
>> these can be used to draw to .svg or .pdf files.
>> 
>> This works, but means that all code that draws on the canvas has to be 
>> rewritten to take the GraphicsContextInterface rather than the normal 
>> GraphicsContext.
>> 
>> It would be much simpler if
>>    1) GraphicsContext was not final and could be extended.
>>    or
>>    2) A GraphicsContextInterface existed that GraphicsContext implemented.  
>> Developers could then have alternative GraphicsContext implementations that 
>> implemented that interface.  This would require canvas drawing code to be 
>> written to use the interface, but would still be very useful.
>> 
>> Either solution could (I think) be easily implemented in JavaFX without 
>> breaking existing code and add a significant advance to the toolkit.
>> 
>> If there are alternative solutions to the problem, that would allow 
>> exporting canvas drawing to vector graphics files without requiring a change 
>> to the code that draws to the canvas, I’d appreciate hearing them.
>> 
>> — Bruce
>> 

Reply via email to