Skip to content
Snippets Groups Projects
Commit 86d571d4 authored by Radek Ošlejšek's avatar Radek Ošlejšek
Browse files

Merge branch '120-set-transparency-of-cutting-planes' into 'master'

Transaprency of cutting planes

See merge request grp-fidentis/analyst2!137
parents b1583cce 0f6a22e6
No related branches found
No related tags found
No related merge requests found
......@@ -3,6 +3,7 @@ package cz.fidentis.analyst.scene;
import com.jogamp.opengl.GL;
import com.jogamp.opengl.GL2;
import java.awt.Color;
import java.util.Comparator;
import javax.vecmath.Vector3d;
/**
......@@ -31,7 +32,25 @@ public abstract class Drawable {
* Render mode to use, one from {@code GL_FILL}, {@code GL_LINE}, {@code GL_POINT}
*/
private int renderMode = GL2.GL_FILL; // GL_FILL, GL_LINE, or GL_POINT
/**
* Comparator for Drawable objects based on transparency. Used for rendering.
*
* @author Dominik Racek
*/
public static class TransparencyComparator implements Comparator<Drawable> {
@Override
public int compare(Drawable a, Drawable b) {
if (a.transparency < b.transparency) {
return 1;
}
if (a.transparency > b.transparency) {
return -1;
}
return 0;
}
}
/**
* Renders the scene.
* @param gl OpenGL context
......
......@@ -117,17 +117,12 @@ public class SceneRenderer {
gl.glLightfv(GL2.GL_LIGHT1, GL2.GL_DIFFUSE, Color.white.getComponents(null), 0);
setPosition(camera);
List<DrawableFace> faces = getOrderedFaces(drawables);
for (Drawable obj: drawables) {
if (!(obj instanceof DrawableFace) && obj.isShown()) {
obj.render(gl);
}
}
for (DrawableFace obj: faces) {
List<Drawable> objects = new ArrayList<>(drawables);
objects.sort(new Drawable.TransparencyComparator());
for (Drawable obj : objects) {
if (obj.isShown()) {
//showBackface(obj);
obj.render(gl);
}
}
......
......@@ -24,7 +24,9 @@ public class PolylinePanel extends JPanel {
private static final int PREF_H = 500;
private static final int BORDER_GAP = 15;
private static final Color PRIMARY_COLOR = Color.green;
private static final Color SECONDARY_COLOR = Color.blue;
private static final Color PRIMARY_MIRROR_COLOR = new Color(0, 85, 0);
private static final Color SECONDARY_COLOR = new Color(0, 155, 200);
private static final Color SECONDARY_MIRROR_COLOR = Color.blue;
private static final Stroke GRAPH_STROKE = new BasicStroke(3f);
private List<Point3d> primaryPoints;
private List<Point3d> secondaryPoints;
......@@ -144,11 +146,11 @@ public class PolylinePanel extends JPanel {
if (mirrorCuts) {
drawFace(g2, primaryPoints, PRIMARY_COLOR, true);
drawFace(g2, primaryMirrorPoints, SECONDARY_COLOR, true);
drawFace(g2, primaryMirrorPoints, PRIMARY_MIRROR_COLOR, true);
if (secondaryPoints != null) {
drawFace(g2, secondaryPoints, PRIMARY_COLOR, false);
drawFace(g2, secondaryMirrorPoints, SECONDARY_COLOR, false);
drawFace(g2, secondaryPoints, SECONDARY_COLOR, false);
drawFace(g2, secondaryMirrorPoints, SECONDARY_MIRROR_COLOR, false);
}
} else {
drawFace(g2, primaryPoints, PRIMARY_COLOR, true);
......
......@@ -168,8 +168,10 @@ public class ProfilesAction extends ControlPanelAction {
case ProfilesPanel.ACTION_COMMAND_SHOW_HIDE_PLANE:
if (((JToggleButton) ae.getSource()).isSelected()) {
getScene().showCuttingPlanes();
getScene().showMirrorPlanes();
} else {
getScene().hideCuttingPlanes();
getScene().hideMirrorPlanes();
}
break;
case ProfilesPanel.ACTION_COMMAND_EXPORT:
......
......@@ -75,23 +75,39 @@ public class SymmetryAction extends ControlPanelAction {
SymmetryEstimator primaryEstimator = new SymmetryEstimator(controlPanel.getSymmetryConfig());
getPrimaryDrawableFace().getModel().compute(primaryEstimator);
getCanvas().getScene().setDrawableSymmetryPlane(0,
new DrawablePlane(primaryEstimator.getSymmetryPlaneMesh(), primaryEstimator.getSymmetryPlane()));
getCanvas().getScene().setDrawableCuttingPlane(0,
new DrawablePlane(primaryEstimator.getSymmetryPlaneMesh(), primaryEstimator.getSymmetryPlane()));
getCanvas().getScene().setDrawableMirrorPlane(0,
new DrawablePlane(primaryEstimator.getSymmetryPlaneMesh(), primaryEstimator.getSymmetryPlane()));
DrawablePlane primarySymmetryPlane = new DrawablePlane(primaryEstimator.getSymmetryPlaneMesh(),
primaryEstimator.getSymmetryPlane());
primarySymmetryPlane.setTransparency(0.5f);
getScene().setDrawableSymmetryPlane(0, primarySymmetryPlane);
DrawablePlane primaryCuttingPlane = new DrawablePlane(primaryEstimator.getSymmetryPlaneMesh(),
primaryEstimator.getSymmetryPlane());
primaryCuttingPlane.setTransparency(0.5f);
getScene().setDrawableCuttingPlane(0, primaryCuttingPlane);
DrawablePlane primaryMirrorPlane = new DrawablePlane(primaryEstimator.getSymmetryPlaneMesh(),
primaryEstimator.getSymmetryPlane());
primaryMirrorPlane.setTransparency(0.5f);
getScene().setDrawableMirrorPlane(0, primaryMirrorPlane);
if (getSecondaryDrawableFace() != null) {
SymmetryEstimator secondaryEstimator = new SymmetryEstimator(controlPanel.getSymmetryConfig());
getSecondaryDrawableFace().getModel().compute(secondaryEstimator);
getCanvas().getScene().setDrawableSymmetryPlane(1,
new DrawablePlane(secondaryEstimator.getSymmetryPlaneMesh(), secondaryEstimator.getSymmetryPlane()));
getCanvas().getScene().setDrawableCuttingPlane(1,
new DrawablePlane(secondaryEstimator.getSymmetryPlaneMesh(), secondaryEstimator.getSymmetryPlane()));
getCanvas().getScene().setDrawableMirrorPlane(1,
new DrawablePlane(secondaryEstimator.getSymmetryPlaneMesh(), secondaryEstimator.getSymmetryPlane()));
DrawablePlane secondarySymmetryPlane = new DrawablePlane(secondaryEstimator.getSymmetryPlaneMesh(),
secondaryEstimator.getSymmetryPlane());
secondarySymmetryPlane.setTransparency(0.5f);
getScene().setDrawableSymmetryPlane(1, secondarySymmetryPlane);
DrawablePlane secondaryCuttingPlane = new DrawablePlane(secondaryEstimator.getSymmetryPlaneMesh(),
secondaryEstimator.getSymmetryPlane());
secondaryCuttingPlane.setTransparency(0.5f);
getScene().setDrawableCuttingPlane(1, secondaryCuttingPlane);
DrawablePlane secondaryMirrorPlane = new DrawablePlane(secondaryEstimator.getSymmetryPlaneMesh(),
secondaryEstimator.getSymmetryPlane());
secondaryMirrorPlane.setTransparency(0.5f);
getScene().setDrawableMirrorPlane(1, secondaryMirrorPlane);
}
getCanvas().getScene().hideSymmetryPlanes();
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment