Skip to content

Commit 39bac24

Browse files
authored
Merge pull request #329 from jzy3d/panamagl-jfx
PanamaGL javafx implementation & tutorials
2 parents 519a7e3 + e0cbf21 commit 39bac24

39 files changed

Lines changed: 1643 additions & 467 deletions

File tree

jzy3d-core-javafx/pom.xml

Lines changed: 72 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,72 @@
1+
<project xmlns="https://maven.apache.org/POM/4.0.0" xmlns:xsi="https://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="https://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
2+
<modelVersion>4.0.0</modelVersion>
3+
4+
<parent>
5+
<groupId>org.jzy3d</groupId>
6+
<artifactId>jzy3d-all</artifactId>
7+
<version>3.0.0-SNAPSHOT</version>
8+
</parent>
9+
10+
<artifactId>jzy3d-core-javafx</artifactId>
11+
<name>Jzy3d Core JavaFX</name>
12+
<description>JavaFX-specific building blocks (mouse and keyboard camera controllers, resizable canvas) reusable by any Jzy3D rendering backend (JOGL, PanamaGL, ...).</description>
13+
14+
<properties>
15+
<!-- Work as of JDK8 up to recent JDKs -->
16+
<java.version>8</java.version>
17+
18+
<!-- Depend on javafx 17 (at build time only) for simplicity -->
19+
<openjfx.version>17</openjfx.version>
20+
</properties>
21+
22+
<dependencies>
23+
24+
<dependency>
25+
<groupId>${project.groupId}</groupId>
26+
<artifactId>jzy3d-core</artifactId>
27+
<version>${project.version}</version>
28+
</dependency>
29+
30+
<dependency>
31+
<groupId>org.openjfx</groupId>
32+
<artifactId>javafx</artifactId>
33+
<version>${openjfx.version}</version>
34+
<type>pom</type>
35+
<scope>provided</scope>
36+
</dependency>
37+
38+
<dependency>
39+
<groupId>org.openjfx</groupId>
40+
<artifactId>javafx-base</artifactId>
41+
<version>${openjfx.version}</version>
42+
<scope>provided</scope>
43+
</dependency>
44+
45+
<dependency>
46+
<groupId>org.openjfx</groupId>
47+
<artifactId>javafx-controls</artifactId>
48+
<version>${openjfx.version}</version>
49+
<scope>provided</scope>
50+
</dependency>
51+
52+
<dependency>
53+
<groupId>org.openjfx</groupId>
54+
<artifactId>javafx-graphics</artifactId>
55+
<version>${openjfx.version}</version>
56+
<scope>provided</scope>
57+
</dependency>
58+
</dependencies>
59+
60+
<build>
61+
<plugins>
62+
<plugin>
63+
<groupId>org.apache.maven.plugins</groupId>
64+
<artifactId>maven-compiler-plugin</artifactId>
65+
<configuration>
66+
<source>${java.version}</source>
67+
<target>${java.version}</target>
68+
</configuration>
69+
</plugin>
70+
</plugins>
71+
</build>
72+
</project>

jzy3d-native-jogl-javafx/src/main/java/org/jzy3d/javafx/canvas/ResizableCanvas.java renamed to jzy3d-core-javafx/src/main/java/org/jzy3d/javafx/canvas/ResizableCanvas.java

File renamed without changes.

jzy3d-native-jogl-javafx/src/main/java/org/jzy3d/javafx/controllers/JavaFXChartController.java renamed to jzy3d-core-javafx/src/main/java/org/jzy3d/javafx/controllers/JavaFXChartController.java

File renamed without changes.

jzy3d-native-jogl-javafx/src/main/java/org/jzy3d/javafx/controllers/keyboard/JavaFXCameraKeyController.java renamed to jzy3d-core-javafx/src/main/java/org/jzy3d/javafx/controllers/keyboard/JavaFXCameraKeyController.java

File renamed without changes.

jzy3d-native-jogl-javafx/src/main/java/org/jzy3d/javafx/controllers/mouse/JavaFXCameraMouseController.java renamed to jzy3d-core-javafx/src/main/java/org/jzy3d/javafx/controllers/mouse/JavaFXCameraMouseController.java

File renamed without changes.

jzy3d-native-jogl-javafx/src/main/java/org/jzy3d/javafx/controllers/mouse/JavaFXCameraThreadController.java renamed to jzy3d-core-javafx/src/main/java/org/jzy3d/javafx/controllers/mouse/JavaFXCameraThreadController.java

File renamed without changes.

jzy3d-native-jogl-javafx/pom.xml

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,12 @@
3535
<version>${project.version}</version>
3636
</dependency>
3737

38+
<dependency>
39+
<groupId>${project.groupId}</groupId>
40+
<artifactId>jzy3d-core-javafx</artifactId>
41+
<version>${project.version}</version>
42+
</dependency>
43+
3844
<dependency>
3945
<groupId>org.openjfx</groupId>
4046
<artifactId>javafx</artifactId>

jzy3d-native-panama-gl-swing/src/main/java/org/jzy3d/chart/PanamaGLAnimator.java renamed to jzy3d-native-panama-gl-core/src/main/java/org/jzy3d/chart/PanamaGLAnimator.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -66,4 +66,4 @@ public void stop() {
6666
t = null;
6767
}
6868
}
69-
}
69+
}

jzy3d-native-panama-gl-swing/src/main/java/org/jzy3d/chart/factories/PanamaGLPainterFactory.java renamed to jzy3d-native-panama-gl-core/src/main/java/org/jzy3d/chart/factories/APanamaGLPainterFactory.java

Lines changed: 10 additions & 79 deletions
Original file line numberDiff line numberDiff line change
@@ -17,16 +17,8 @@
1717
*******************************************************************************/
1818
package org.jzy3d.chart.factories;
1919

20-
import org.jzy3d.chart.Chart;
2120
import org.jzy3d.chart.IAnimator;
2221
import org.jzy3d.chart.PanamaGLAnimator;
23-
import org.jzy3d.chart.controllers.keyboard.camera.AWTCameraKeyController;
24-
import org.jzy3d.chart.controllers.keyboard.camera.ICameraKeyController;
25-
import org.jzy3d.chart.controllers.keyboard.screenshot.AWTScreenshotKeyController;
26-
import org.jzy3d.chart.controllers.keyboard.screenshot.IScreenshotKeyController;
27-
import org.jzy3d.chart.controllers.mouse.camera.AWTCameraMouseController;
28-
import org.jzy3d.chart.controllers.mouse.camera.ICameraMouseController;
29-
import org.jzy3d.chart.controllers.mouse.picking.IMousePickingController;
3022
import org.jzy3d.maths.Dimension;
3123
import org.jzy3d.maths.Rectangle;
3224
import org.jzy3d.painters.IPainter;
@@ -35,25 +27,28 @@
3527
import org.jzy3d.plot3d.primitives.symbols.SymbolHandler;
3628
import org.jzy3d.plot3d.rendering.canvas.ICanvas;
3729
import org.jzy3d.plot3d.rendering.canvas.IScreenCanvas;
38-
import org.jzy3d.plot3d.rendering.canvas.PanamaGLCanvas;
39-
import org.jzy3d.plot3d.rendering.canvas.Quality;
4030
import org.jzy3d.plot3d.rendering.image.IImageWrapper;
41-
import org.jzy3d.plot3d.rendering.scene.Scene;
4231
import org.jzy3d.plot3d.rendering.view.IViewOverlay;
4332
import org.jzy3d.plot3d.rendering.view.layout.IViewportLayout;
4433
import org.jzy3d.plot3d.rendering.view.layout.PanamaGLViewAndColorbarsLayout;
45-
import panamagl.canvas.GLCanvasSwing;
4634
import panamagl.factory.PanamaGLFactory;
47-
import panamagl.opengl.GLContext;
4835

49-
public class PanamaGLPainterFactory implements IPainterFactory {
36+
/**
37+
* Toolkit-agnostic base for PanamaGL painter factories.
38+
*
39+
* Concrete subclasses (Swing/JavaFX/SWT) must provide the toolkit-dependent
40+
* pieces: canvas, frame, mouse/keyboard controllers, screenshot controller,
41+
* and mouse picking controller.
42+
*/
43+
public abstract class APanamaGLPainterFactory implements IPainterFactory {
44+
5045
protected PanamaGLFactory panamaGLFactory = PanamaGLFactory.select();
5146

5247
protected IChartFactory chartFactory;
5348
protected boolean offscreen = false;
5449
protected int width;
5550
protected int height;
56-
51+
5752
public PanamaGLFactory getPanamaGLFactory() {
5853
return panamaGLFactory;
5954
}
@@ -62,33 +57,13 @@ public void setPanamaGLFactory(PanamaGLFactory panamaGLFactory) {
6257
this.panamaGLFactory = panamaGLFactory;
6358
}
6459

65-
6660
@Override
6761
public IPainter newPainter() {
6862
PanamaGLPainter p = new PanamaGLPainter();
6963
p.setGL(panamaGLFactory.newGL());
70-
71-
7264
return p;
7365
}
7466

75-
76-
@Override
77-
public ICanvas newCanvas(IChartFactory factory, Scene scene, Quality quality) {
78-
GLCanvasSwing glCanvas = new GLCanvasSwing(panamaGLFactory);
79-
GLContext context = glCanvas.getContext();
80-
81-
82-
PanamaGLCanvas icanvas = new PanamaGLCanvas(factory, scene, quality, glCanvas);
83-
84-
// Update painter with context
85-
86-
//System.out.println();
87-
((PanamaGLPainter)icanvas.getView().getPainter()).setContext(context);
88-
return icanvas;
89-
}
90-
91-
9267
@Override
9368
public IViewOverlay newViewOverlay() {
9469
return null;
@@ -101,7 +76,6 @@ public IViewportLayout newViewportLayout() {
10176

10277
@Override
10378
public SymbolHandler newSymbolHandler(IImageWrapper image) {
104-
// TODO Auto-generated method stub
10579
return null;
10680
}
10781

@@ -110,41 +84,6 @@ public IAnimator newAnimator(ICanvas canvas) {
11084
return new PanamaGLAnimator((IScreenCanvas) canvas);
11185
}
11286

113-
@Override
114-
public ICameraMouseController newMouseCameraController(Chart chart) {
115-
return new AWTCameraMouseController(chart);
116-
}
117-
118-
@Override
119-
public IMousePickingController newMousePickingController(Chart chart, int clickWidth) {
120-
//return new AWTMousePickingController(chart, clickWidth);
121-
throw new RuntimeException("Not implemented");
122-
}
123-
124-
@Override
125-
public ICameraKeyController newKeyboardCameraController(Chart chart) {
126-
return new AWTCameraKeyController(chart);
127-
}
128-
129-
@Override
130-
public IScreenshotKeyController newKeyboardScreenshotController(Chart chart) {
131-
return new AWTScreenshotKeyController(chart, "target/out.png");
132-
}
133-
134-
@Override
135-
public IFrame newFrame(Chart chart) {
136-
return newFrame(chart, new Rectangle(0, 0, 800, 600), "PanamaGL");
137-
}
138-
139-
@Override
140-
public IFrame newFrame(Chart chart, Rectangle bounds, String title) {
141-
FrameSwing f = new FrameSwing();
142-
f.initialize(chart, bounds, title);
143-
144-
return f;
145-
}
146-
147-
14887
@Override
14988
public IChartFactory getChartFactory() {
15089
return chartFactory;
@@ -182,21 +121,13 @@ public Dimension getOffscreenDimension() {
182121
return new Dimension(width, height);
183122
}
184123

185-
186124
@Override
187125
public boolean isDebugGL() {
188126
return false;
189127
}
190128

191-
/**
192-
* If true, will let GL trigger {@link GLException} if an error occur in OpenGL which ease
193-
* debugging. Default is false.
194-
*/
195129
@Override
196130
public void setDebugGL(boolean debugGL) {
197131
throw new NotImplementedException();
198132
}
199-
200-
201-
202133
}

jzy3d-native-panama-gl-swing/src/main/java/org/jzy3d/chart/factories/PanamaGLChartFactory.java renamed to jzy3d-native-panama-gl-core/src/main/java/org/jzy3d/chart/factories/PanamaGLChartFactory.java

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -17,12 +17,16 @@
1717
*******************************************************************************/
1818
package org.jzy3d.chart.factories;
1919

20+
/**
21+
* Toolkit-agnostic chart factory for PanamaGL.
22+
*
23+
* Callers must supply a concrete {@link APanamaGLPainterFactory} whose toolkit
24+
* matches the target window system (Swing, JavaFX, SWT...). Dedicated
25+
* subclasses such as {@code PanamaGLSwingChartFactory} or
26+
* {@code PanamaGLJavaFXChartFactory} pick the right painter factory by default.
27+
*/
2028
public class PanamaGLChartFactory extends ChartFactory {
2129

22-
public PanamaGLChartFactory() {
23-
super(new PanamaGLPainterFactory());
24-
}
25-
2630
public PanamaGLChartFactory(IPainterFactory painterFactory) {
2731
super(painterFactory);
2832
}

0 commit comments

Comments
 (0)