From 17c91cddf54b27ba3f1a20febc1af76d7f8fdc89 Mon Sep 17 00:00:00 2001 From: david-hall Date: Fri, 15 Jul 2016 23:45:38 -0400 Subject: [PATCH] Remove Collida DAE from the whitelist in getNaiveExporter() * Add Exporter3d.needsManifestation property. * Use Exporter3d.needsManifestation to validate the whitelist at runtime. --- .../com/vzome/core/editor/DocumentModel.java | 24 +++++++++++-------- .../com/vzome/core/exporters/Exporter3d.java | 8 +++++++ .../vzome/core/exporters/OpenGLExporter.java | 7 +++++- .../vzome/core/exporters/POVRayExporter.java | 7 +++++- 4 files changed, 34 insertions(+), 12 deletions(-) diff --git a/src/main/java/com/vzome/core/editor/DocumentModel.java b/src/main/java/com/vzome/core/editor/DocumentModel.java index f729e41..f4d20ea 100644 --- a/src/main/java/com/vzome/core/editor/DocumentModel.java +++ b/src/main/java/com/vzome/core/editor/DocumentModel.java @@ -45,7 +45,6 @@ import com.vzome.core.construction.SegmentCrossProduct; import com.vzome.core.construction.SegmentJoiningPoints; import com.vzome.core.editor.Snapshot.SnapshotAction; -import com.vzome.core.exporters.DaeExporter; import com.vzome.core.exporters.Exporter3d; import com.vzome.core.exporters.OpenGLExporter; import com.vzome.core.exporters.POVRayExporter; @@ -1125,14 +1124,17 @@ else if ( "plane" .equals( group ) ) public Exporter3d getNaiveExporter( String format, Camera view, Colors colors, Lights lights, RenderedModel currentSnapshot ) { + Exporter3d exporter = null; if ( format.equals( "pov" ) ) - return new POVRayExporter( view, colors, lights, currentSnapshot ); + exporter = new POVRayExporter( view, colors, lights, currentSnapshot ); else if ( format.equals( "opengl" ) ) - return new OpenGLExporter( view, colors, lights, currentSnapshot ); - else if ( format.equals( "dae" ) ) - return new DaeExporter( view, colors, lights, currentSnapshot ); - else - return null; + exporter = new OpenGLExporter( view, colors, lights, currentSnapshot ); + + boolean inArticleMode = (renderedModel != currentSnapshot); + if(exporter != null && exporter.needsManifestations() && inArticleMode ) { + throw new IllegalStateException("The " + format + " exporter can only operate on the current model, not article pages."); + } + return exporter; } /* @@ -1146,14 +1148,16 @@ else if ( format.equals( "dae" ) ) * * POV-Ray is a bit of a special case, but only because the .pov language supports coordinate values as expressions, * and supports enough modeling that the different strut shapes can be defined, and so on. - * It is likely that COLLADA DAE has the same character. OpenGL and WebGL (Web3d/json) could as well, since I - * can control how the data is stored and rendered. + * OpenGL and WebGL (Web3d/json) could as well, since I can control how the data is stored and rendered. * * The POV-Ray export reuses shapes, etc. just as vZome does, so really works just with the RenderedManifestations * (except when the Manifestation is available for structured coordinate expressions). Again, any rendering exporter * could apply the same reuse tricks, working just with RenderedManifestations, so the current limitations to * mRenderedModel for many of these is spurious. - */ + * + * The base Exporter3d class now has a boolean needsManifestations() method which subclasses should override + * if they don't rely on Manifestations and therefore can operate on article pages. + */ // TODO move all the parameters inside this object! diff --git a/src/main/java/com/vzome/core/exporters/Exporter3d.java b/src/main/java/com/vzome/core/exporters/Exporter3d.java index c5eaaaf..f0af63f 100644 --- a/src/main/java/com/vzome/core/exporters/Exporter3d.java +++ b/src/main/java/com/vzome/core/exporters/Exporter3d.java @@ -58,6 +58,14 @@ public String getContentType() return "text/plain"; } + /** + * Subclasses can override this if they don't rely on Manifestations and therefore can operate on article pages + * See the comments below DocumentModel.getNaiveExporter() for a more complete explanation. + */ + public boolean needsManifestations() { + return true; + } + /** * Subclasses can override this if they need to export history or the lesson model. */ diff --git a/src/main/java/com/vzome/core/exporters/OpenGLExporter.java b/src/main/java/com/vzome/core/exporters/OpenGLExporter.java index c5bd8ac..eb3fa8d 100644 --- a/src/main/java/com/vzome/core/exporters/OpenGLExporter.java +++ b/src/main/java/com/vzome/core/exporters/OpenGLExporter.java @@ -30,12 +30,17 @@ public class OpenGLExporter extends Exporter3d { private static final NumberFormat FORMAT = NumberFormat .getNumberInstance( Locale .US ); - + public OpenGLExporter( Camera scene, Colors colors, Lights lights, RenderedModel model ) { super( scene, colors, lights, model ); } + @Override + public boolean needsManifestations() { + return false; + } + @Override public void doExport( File directory, Writer writer, int height, int width ) throws IOException { diff --git a/src/main/java/com/vzome/core/exporters/POVRayExporter.java b/src/main/java/com/vzome/core/exporters/POVRayExporter.java index 5ecce49..f929829 100644 --- a/src/main/java/com/vzome/core/exporters/POVRayExporter.java +++ b/src/main/java/com/vzome/core/exporters/POVRayExporter.java @@ -54,7 +54,12 @@ public void mapViewToWorld( Camera view, Vector3f vector ) viewTrans .invert(); viewTrans .transform( vector ); } - + + @Override + public boolean needsManifestations() { + return false; + } + @Override public void doExport( File povFile, File directory, Writer writer, int height, int width ) throws IOException {