Loading Rendering/src/main/java/cz/fidentis/analyst/drawables/DrawableInteractiveMask.java +30 −30 Original line number Diff line number Diff line Loading @@ -3,14 +3,14 @@ package cz.fidentis.analyst.drawables; import com.jogamp.opengl.GL2; import com.jogamp.opengl.glu.GLU; import com.jogamp.opengl.glu.GLUquadric; import cz.fidentis.analyst.data.mesh.MeshFacet; import cz.fidentis.analyst.data.shapes.*; import cz.fidentis.analyst.data.shapes.CrossSection3D; import cz.fidentis.analyst.data.shapes.Cylinder; import cz.fidentis.analyst.data.shapes.Plane; import cz.fidentis.analyst.data.shapes.SurfaceMask; import cz.fidentis.analyst.engines.cut.CrossSectionConfig; import cz.fidentis.analyst.engines.cut.CrossSectionServices; import javax.vecmath.Point3d; import javax.vecmath.Vector3d; import java.awt.*; import java.awt.Color; import java.util.ArrayList; import java.util.List; Loading @@ -21,10 +21,7 @@ import java.util.List; * @author Mario Chromik */ public class DrawableInteractiveMask extends Drawable { private final SurfaceMask surfaceMask; private final List<MaskPoint> maskPoints = null; private final List<SurfaceMask.MaskPoint> maskPoints; private final double defaultRadius = 1; Loading @@ -33,14 +30,15 @@ public class DrawableInteractiveMask extends Drawable { /** * Constructor. * * @param mask interactive mask to generate drawable interactive mask from * @param maskPoints Points projected onto face and ready to be drawn * @throws IllegalArgumentException if the {@code mask} is {@code null} * TODO: switch to mask point defined locally after switching from using SurfaceMask(3D) */ public DrawableInteractiveMask(SurfaceMask mask) { if (mask == null) { throw new IllegalArgumentException("mask"); public DrawableInteractiveMask(List<SurfaceMask.MaskPoint> maskPoints) { if (maskPoints == null) { throw new IllegalArgumentException("MaskPoints cannot be null"); } surfaceMask = mask; this.maskPoints = maskPoints; } @Override Loading @@ -54,7 +52,7 @@ public class DrawableInteractiveMask extends Drawable { gl.glMaterialfv(GL2.GL_FRONT_AND_BACK, GL2.GL_DIFFUSE, rgba, 0); // draw mask points for (SurfaceMask.MaskPoint maskPoint : surfaceMask.getPoints()) { for (SurfaceMask.MaskPoint maskPoint : maskPoints) { gl.glPushMatrix(); gl.glTranslated(maskPoint.getPosition().x, maskPoint.getPosition().y, maskPoint.getPosition().z); GLUquadric center = GLU_CONTEXT.gluNewQuadric(); Loading Loading @@ -96,14 +94,14 @@ public class DrawableInteractiveMask extends Drawable { protected List<CrossSection3D> interpolatePoints() { List<CrossSection3D> curves = new ArrayList<>(); for (int i = 0; i < surfaceMask.getPoints().size() - 1; i++) { var p1 = surfaceMask.getPoints().get(i); var p2 = surfaceMask.getPoints().get(i + 1); for (int i = 0; i < maskPoints.size() - 1; i++) { var p1 = maskPoints.get(i); var p2 = maskPoints.get(i + 1); curves.add(interpolateLine(p1, p2)); } if (surfaceMask.getPoints().size() >= 3) { curves.add(interpolateLine(surfaceMask.getPoints().get(surfaceMask.getPoints().size() - 1), surfaceMask.getPoints().get(0))); if (maskPoints.size() >= 3) { curves.add(interpolateLine(maskPoints.get(maskPoints.size() - 1), maskPoints.get(0))); } return curves; Loading Loading @@ -131,26 +129,27 @@ public class DrawableInteractiveMask extends Drawable { */ protected List<Cylinder> getCylinders() { List<Cylinder> cylinders = new ArrayList<>(); for (int i = 0; i < surfaceMask.getPoints().size() - 1; i++) { var p1 = surfaceMask.getPoints().get(i); var p2 = surfaceMask.getPoints().get(i + 1); for (int i = 0; i < maskPoints.size() - 1; i++) { var p1 = maskPoints.get(i); var p2 = maskPoints.get(i + 1); Cylinder cyl = new Cylinder(p1.getPosition(), p2.getPosition(), 10); cylinders.add(cyl); } if (surfaceMask.getPoints().size() >= 3 ) { cylinders.add(new Cylinder(surfaceMask.getPoints().get(surfaceMask.getPoints().size() - 1).getPosition(), surfaceMask.getPoints().get(0).getPosition(), if (maskPoints.size() >= 3 ) { cylinders.add(new Cylinder(maskPoints.get(maskPoints.size() - 1).getPosition(), maskPoints.get(0).getPosition(), 10)); } return cylinders; } /** /** * Class representing a single point of Interactive Mask. * * @author Mario Chromik */ public static final class MaskPoint { private final Point3d position; Loading @@ -162,7 +161,7 @@ public class DrawableInteractiveMask extends Drawable { * * @param pos position of an Interactive Mask point in 3D space * @param fac facet of IM point */ private MaskPoint(Point3d pos, MeshFacet fac, Vector3d norm) { position = pos; facet = fac; Loading @@ -181,4 +180,5 @@ public class DrawableInteractiveMask extends Drawable { return normal; } } */ } Rendering/src/main/java/cz/fidentis/analyst/rendering/Scene.java +1 −1 Original line number Diff line number Diff line Loading @@ -316,7 +316,7 @@ public class Scene { } } drawableInteractiveMasks.set(slot, new DrawableInteractiveMask(face.getSurfaceMask())); drawableInteractiveMasks.set(slot, new DrawableInteractiveMask(face.getSurfaceMask().getPoints())); return true; } Loading Loading
Rendering/src/main/java/cz/fidentis/analyst/drawables/DrawableInteractiveMask.java +30 −30 Original line number Diff line number Diff line Loading @@ -3,14 +3,14 @@ package cz.fidentis.analyst.drawables; import com.jogamp.opengl.GL2; import com.jogamp.opengl.glu.GLU; import com.jogamp.opengl.glu.GLUquadric; import cz.fidentis.analyst.data.mesh.MeshFacet; import cz.fidentis.analyst.data.shapes.*; import cz.fidentis.analyst.data.shapes.CrossSection3D; import cz.fidentis.analyst.data.shapes.Cylinder; import cz.fidentis.analyst.data.shapes.Plane; import cz.fidentis.analyst.data.shapes.SurfaceMask; import cz.fidentis.analyst.engines.cut.CrossSectionConfig; import cz.fidentis.analyst.engines.cut.CrossSectionServices; import javax.vecmath.Point3d; import javax.vecmath.Vector3d; import java.awt.*; import java.awt.Color; import java.util.ArrayList; import java.util.List; Loading @@ -21,10 +21,7 @@ import java.util.List; * @author Mario Chromik */ public class DrawableInteractiveMask extends Drawable { private final SurfaceMask surfaceMask; private final List<MaskPoint> maskPoints = null; private final List<SurfaceMask.MaskPoint> maskPoints; private final double defaultRadius = 1; Loading @@ -33,14 +30,15 @@ public class DrawableInteractiveMask extends Drawable { /** * Constructor. * * @param mask interactive mask to generate drawable interactive mask from * @param maskPoints Points projected onto face and ready to be drawn * @throws IllegalArgumentException if the {@code mask} is {@code null} * TODO: switch to mask point defined locally after switching from using SurfaceMask(3D) */ public DrawableInteractiveMask(SurfaceMask mask) { if (mask == null) { throw new IllegalArgumentException("mask"); public DrawableInteractiveMask(List<SurfaceMask.MaskPoint> maskPoints) { if (maskPoints == null) { throw new IllegalArgumentException("MaskPoints cannot be null"); } surfaceMask = mask; this.maskPoints = maskPoints; } @Override Loading @@ -54,7 +52,7 @@ public class DrawableInteractiveMask extends Drawable { gl.glMaterialfv(GL2.GL_FRONT_AND_BACK, GL2.GL_DIFFUSE, rgba, 0); // draw mask points for (SurfaceMask.MaskPoint maskPoint : surfaceMask.getPoints()) { for (SurfaceMask.MaskPoint maskPoint : maskPoints) { gl.glPushMatrix(); gl.glTranslated(maskPoint.getPosition().x, maskPoint.getPosition().y, maskPoint.getPosition().z); GLUquadric center = GLU_CONTEXT.gluNewQuadric(); Loading Loading @@ -96,14 +94,14 @@ public class DrawableInteractiveMask extends Drawable { protected List<CrossSection3D> interpolatePoints() { List<CrossSection3D> curves = new ArrayList<>(); for (int i = 0; i < surfaceMask.getPoints().size() - 1; i++) { var p1 = surfaceMask.getPoints().get(i); var p2 = surfaceMask.getPoints().get(i + 1); for (int i = 0; i < maskPoints.size() - 1; i++) { var p1 = maskPoints.get(i); var p2 = maskPoints.get(i + 1); curves.add(interpolateLine(p1, p2)); } if (surfaceMask.getPoints().size() >= 3) { curves.add(interpolateLine(surfaceMask.getPoints().get(surfaceMask.getPoints().size() - 1), surfaceMask.getPoints().get(0))); if (maskPoints.size() >= 3) { curves.add(interpolateLine(maskPoints.get(maskPoints.size() - 1), maskPoints.get(0))); } return curves; Loading Loading @@ -131,26 +129,27 @@ public class DrawableInteractiveMask extends Drawable { */ protected List<Cylinder> getCylinders() { List<Cylinder> cylinders = new ArrayList<>(); for (int i = 0; i < surfaceMask.getPoints().size() - 1; i++) { var p1 = surfaceMask.getPoints().get(i); var p2 = surfaceMask.getPoints().get(i + 1); for (int i = 0; i < maskPoints.size() - 1; i++) { var p1 = maskPoints.get(i); var p2 = maskPoints.get(i + 1); Cylinder cyl = new Cylinder(p1.getPosition(), p2.getPosition(), 10); cylinders.add(cyl); } if (surfaceMask.getPoints().size() >= 3 ) { cylinders.add(new Cylinder(surfaceMask.getPoints().get(surfaceMask.getPoints().size() - 1).getPosition(), surfaceMask.getPoints().get(0).getPosition(), if (maskPoints.size() >= 3 ) { cylinders.add(new Cylinder(maskPoints.get(maskPoints.size() - 1).getPosition(), maskPoints.get(0).getPosition(), 10)); } return cylinders; } /** /** * Class representing a single point of Interactive Mask. * * @author Mario Chromik */ public static final class MaskPoint { private final Point3d position; Loading @@ -162,7 +161,7 @@ public class DrawableInteractiveMask extends Drawable { * * @param pos position of an Interactive Mask point in 3D space * @param fac facet of IM point */ private MaskPoint(Point3d pos, MeshFacet fac, Vector3d norm) { position = pos; facet = fac; Loading @@ -181,4 +180,5 @@ public class DrawableInteractiveMask extends Drawable { return normal; } } */ }
Rendering/src/main/java/cz/fidentis/analyst/rendering/Scene.java +1 −1 Original line number Diff line number Diff line Loading @@ -316,7 +316,7 @@ public class Scene { } } drawableInteractiveMasks.set(slot, new DrawableInteractiveMask(face.getSurfaceMask())); drawableInteractiveMasks.set(slot, new DrawableInteractiveMask(face.getSurfaceMask().getPoints())); return true; } Loading