From a2afb106d5253c7d7df1da5ef3a0945f45f5f244 Mon Sep 17 00:00:00 2001 From: Bill Kuker Date: Fri, 6 Jul 2012 18:48:52 +0000 Subject: [PATCH] Add ability to change RenderStrategy on the fly. --- .../openrocket/gui/figure3d/RocketFigure3d.java | 12 ++++++++++++ .../openrocket/gui/figure3d/RocketRenderer.java | 17 +++++++++++++++++ 2 files changed, 29 insertions(+) diff --git a/core/src/net/sf/openrocket/gui/figure3d/RocketFigure3d.java b/core/src/net/sf/openrocket/gui/figure3d/RocketFigure3d.java index b24e727ee..c2a48d48b 100644 --- a/core/src/net/sf/openrocket/gui/figure3d/RocketFigure3d.java +++ b/core/src/net/sf/openrocket/gui/figure3d/RocketFigure3d.java @@ -48,6 +48,10 @@ import com.jogamp.opengl.util.awt.Overlay; * @author Bill Kuker */ public class RocketFigure3d extends JPanel implements GLEventListener { + + public static final int TYPE_REALISTIC = 0; + public static final int TYPE_FIGURE = 1; + private static final long serialVersionUID = 1L; private static final LogHelper log = Application.getLogger(); @@ -611,5 +615,13 @@ public class RocketFigure3d extends JPanel implements GLEventListener { ComponentSelectionListener newListener) { this.csl = newListener; } + + public void setType(int t){ + if ( t == TYPE_FIGURE ){ + rr.setRenderStrategy(new FigureRenderStrategy()); + } else { + rr.setRenderStrategy(new RealisticRenderStrategy()); + } + } } diff --git a/core/src/net/sf/openrocket/gui/figure3d/RocketRenderer.java b/core/src/net/sf/openrocket/gui/figure3d/RocketRenderer.java index 7f62c8f84..ecef30f7e 100644 --- a/core/src/net/sf/openrocket/gui/figure3d/RocketRenderer.java +++ b/core/src/net/sf/openrocket/gui/figure3d/RocketRenderer.java @@ -28,6 +28,7 @@ public class RocketRenderer { private static final LogHelper log = Application.getLogger(); RenderStrategy currentStrategy = new FigureRenderStrategy(); + RenderStrategy nextStrategy; ComponentRenderer cr; @@ -35,6 +36,19 @@ public class RocketRenderer { private final float[] colorBlack = { 0, 0, 0, 1 }; + public void setRenderStrategy(RenderStrategy r){ + nextStrategy = r; + } + + private void checkRenderStrategy(GLAutoDrawable drawable){ + if ( nextStrategy == null ) + return; + currentStrategy.dispose(drawable); + nextStrategy.init(drawable); + currentStrategy = nextStrategy; + nextStrategy = null; + } + public void init(GLAutoDrawable drawable) { cr = new ComponentRenderer(); cr.init(drawable); @@ -52,6 +66,7 @@ public class RocketRenderer { public RocketComponent pick(GLAutoDrawable drawable, Configuration configuration, Point p, Set ignore) { + checkRenderStrategy(drawable); final GL2 gl = drawable.getGL().getGL2(); gl.glEnable(GL.GL_DEPTH_TEST); @@ -97,6 +112,8 @@ public class RocketRenderer { public void render(GLAutoDrawable drawable, Configuration configuration, Set selection) { + checkRenderStrategy(drawable); + if (cr == null) throw new IllegalStateException(this + " Not Initialized");