Commit 5a1db19f authored by Mario Chromik's avatar Mario Chromik
Browse files

refactoring Drawable IM

parent 461a0d62
Loading
Loading
Loading
Loading
+30 −30
Original line number Diff line number Diff line
@@ -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;

@@ -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;
    
@@ -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
@@ -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();
@@ -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;
@@ -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;
@@ -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;
@@ -181,4 +180,5 @@ public class DrawableInteractiveMask extends Drawable {
            return normal;
        }
    }
    */
}
+1 −1
Original line number Diff line number Diff line
@@ -316,7 +316,7 @@ public class Scene {
            }
        } 
     
        drawableInteractiveMasks.set(slot, new DrawableInteractiveMask(face.getSurfaceMask()));
        drawableInteractiveMasks.set(slot, new DrawableInteractiveMask(face.getSurfaceMask().getPoints()));
        return true;
    }