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

Aggregated action listeners for rendering

parent 00305791
No related branches found
No related tags found
No related merge requests found
Showing
with 1447 additions and 224 deletions
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package cz.fidentis.analyst.gui.core;
import java.awt.BorderLayout;
import javax.swing.JPanel;
import org.netbeans.api.settings.ConvertAsProperties;
import org.openide.awt.ActionID;
import org.openide.awt.ActionReference;
......@@ -14,6 +11,7 @@ import org.openide.util.NbBundle.Messages;
/**
* Top component which displays something.
*/
/*
@ConvertAsProperties(
dtd = "-//cz.fidentis.analyst.gui.core//ControlPanel//EN",
autostore = false
......@@ -25,7 +23,7 @@ import org.openide.util.NbBundle.Messages;
)
@TopComponent.Registration(mode = "properties", openAtStartup = true)
@ActionID(category = "Window", id = "cz.fidentis.analyst.gui.core.ControlPanelTC")
@ActionReference(path = "Menu/Window" /*, position = 333 */)
@ActionReference(path = "Menu/Window")
@TopComponent.OpenActionRegistration(
displayName = "#CTL_ControlPanelAction",
preferredID = "ControlPanelTopComponent"
......@@ -35,15 +33,16 @@ import org.openide.util.NbBundle.Messages;
"CTL_ControlPanelTopComponent=Control Panel",
"HINT_ControlPanelTopComponent=This is a ControlPanel window"
})
public final class ControlPanelTC extends TopComponent {
*/
public final class ControlPanelTC extends JPanel {
public ControlPanelTC() {
initComponents();
setName(Bundle.CTL_ControlPanelTopComponent());
setToolTipText(Bundle.HINT_ControlPanelTopComponent());
setLayout(new BorderLayout());
//initComponents();
//setName(Bundle.CTL_ControlPanelTopComponent());
//setToolTipText(Bundle.HINT_ControlPanelTopComponent());
}
/**
* This method is called from within the constructor to initialize the form.
* WARNING: Do NOT modify this code. The content of this method is always
......@@ -66,25 +65,4 @@ public final class ControlPanelTC extends TopComponent {
// Variables declaration - do not modify//GEN-BEGIN:variables
// End of variables declaration//GEN-END:variables
@Override
public void componentOpened() {
// TODO add custom code on component opening
}
@Override
public void componentClosed() {
// TODO add custom code on component closing
}
void writeProperties(java.util.Properties p) {
// better to version settings since initial version as advocated at
// http://wiki.apidesign.org/wiki/PropertyFiles
p.setProperty("version", "1.0");
// TODO store your settings
}
void readProperties(java.util.Properties p) {
String version = p.getProperty("version");
// TODO read your settings according to their version
}
}
package cz.fidentis.analyst.gui.rndtoolbar;
import cz.fidentis.analyst.gui.canvas.Canvas;
import java.awt.event.ActionEvent;
import javax.swing.AbstractAction;
import javax.swing.JToggleButton;
/**
* Switches between bark and blight background of the scene.
*
* @author Radek Oslejsek
*/
public class BackgroundAction extends AbstractAction {
private final Canvas canvas;
/**
* Constructor.
* @param canvas OpenGL canvas
*/
public BackgroundAction(Canvas canvas) {
this.canvas = canvas;
}
@Override
public void actionPerformed(ActionEvent e) {
JToggleButton button = (JToggleButton) e.getSource();
if (button.isSelected()) {
canvas.getSceneRenderer().setBrightBackground();
} else {
canvas.getSceneRenderer().setDarkBackground();
}
canvas.renderScene();
}
}
package cz.fidentis.analyst.gui.rndtoolbar;
import com.jogamp.opengl.GL2;
import cz.fidentis.analyst.gui.canvas.Canvas;
import cz.fidentis.analyst.gui.scene.DrawableMesh;
import java.awt.event.ActionEvent;
import javax.swing.AbstractAction;
/**
* Turns on the rending mode that draws triangle vertices only.
*
* @author Radek Oslejsek
*/
public class PointCloudRenderingAction extends AbstractAction {
private final Canvas canvas;
/**
* Constructor.
* @param canvas OpenGL canvas
*/
public PointCloudRenderingAction(Canvas canvas) {
this.canvas = canvas;
}
@Override
public void actionPerformed(ActionEvent e) {
for (DrawableMesh dm: canvas.getScene().getDrawables()) {
dm.setRenderMode(GL2.GL_POINT);
}
canvas.renderScene();
}
}
package cz.fidentis.analyst.gui.rndtoolbar;
import cz.fidentis.analyst.gui.canvas.Canvas;
import static cz.fidentis.analyst.gui.rndtoolbar.RenderingToolBar.REFLECTIONS_COLOR;
import cz.fidentis.analyst.gui.scene.DrawableMesh;
import java.awt.Color;
import java.awt.event.ActionEvent;
import javax.swing.AbstractAction;
import javax.swing.JToggleButton;
/**
* Switches on/off surface reflections.
*
* @author Radek Oslejsek
*/
public class ReflectionsAction extends AbstractAction {
private final Canvas canvas;
/**
* Constructor.
* @param canvas OpenGL canvas
*/
public ReflectionsAction(Canvas canvas) {
this.canvas = canvas;
}
@Override
public void actionPerformed(ActionEvent e) {
JToggleButton button = (JToggleButton) e.getSource();
for (DrawableMesh dm: canvas.getScene().getDrawables()) {
if (button.isSelected()) {
dm.setHighlights(REFLECTIONS_COLOR);
} else {
dm.setHighlights(Color.BLACK);
}
}
canvas.renderScene();
}
}
package cz.fidentis.analyst.gui.rndtoolbar;
import com.jogamp.opengl.GL2;
import cz.fidentis.analyst.gui.canvas.Canvas;
import static cz.fidentis.analyst.gui.rndtoolbar.RenderingToolBar.REFLECTIONS_COLOR;
import cz.fidentis.analyst.gui.scene.DrawableMesh;
import java.awt.Color;
import java.awt.event.ActionEvent;
import javax.swing.AbstractAction;
import javax.swing.JToggleButton;
/**
* Action listener form OpenGL canvas rendering modes.
*
* @author Radek Oslejsek
*/
public class RenderingModeAction extends AbstractAction {
public static final String ACTION_COMMAND_SMOOTH_MODE = "smooth";
public static final String ACTION_COMMAND_WIREFRAME_MODE = "wireframe";
public static final String ACTION_COMMAND_POINT_CLOUD_MODE = "point cloud";
public static final String ACTION_COMMAND_BACKGROUND_CHANGE = "background";
public static final String ACTION_COMMAND_REFLECTIONS_ON_OFF = "reflections";
private final Canvas canvas;
/**
* Constructor.
* @param canvas OpenGL canvas
*/
public RenderingModeAction(Canvas canvas) {
this.canvas = canvas;
}
@Override
public void actionPerformed(ActionEvent ae) {
String action = ae.getActionCommand();
switch (action) {
case ACTION_COMMAND_SMOOTH_MODE:
for (DrawableMesh dm: canvas.getScene().getDrawables()) {
dm.setRenderMode(GL2.GL_FILL);
}
break;
case ACTION_COMMAND_WIREFRAME_MODE:
for (DrawableMesh dm: canvas.getScene().getDrawables()) {
dm.setRenderMode(GL2.GL_LINE);
}
break;
case ACTION_COMMAND_POINT_CLOUD_MODE:
for (DrawableMesh dm: canvas.getScene().getDrawables()) {
dm.setRenderMode(GL2.GL_POINT);
}
break;
case ACTION_COMMAND_BACKGROUND_CHANGE:
JToggleButton button1 = (JToggleButton) ae.getSource();
if (button1.isSelected()) {
canvas.getSceneRenderer().setBrightBackground();
} else {
canvas.getSceneRenderer().setDarkBackground();
}
break;
case ACTION_COMMAND_REFLECTIONS_ON_OFF:
JToggleButton button2 = (JToggleButton) ae.getSource();
for (DrawableMesh dm: canvas.getScene().getDrawables()) {
if (button2.isSelected()) {
dm.setHighlights(REFLECTIONS_COLOR);
} else {
dm.setHighlights(Color.BLACK);
}
}
break;
}
canvas.renderScene();
}
}
......@@ -32,6 +32,10 @@ public class RenderingToolBar extends JToolBar {
private final Canvas canvas;
/**
* Constructor.
* @param canvas Rendering canvas
*/
public RenderingToolBar(Canvas canvas) {
this.canvas = canvas;
initToolBar();
......@@ -40,6 +44,10 @@ public class RenderingToolBar extends JToolBar {
addReflectionsButton();
}
protected Canvas getCanvas() {
return canvas;
}
private void initToolBar() {
setOrientation(javax.swing.SwingConstants.VERTICAL);
setRollover(true);
......@@ -49,9 +57,17 @@ public class RenderingToolBar extends JToolBar {
private void addRenderingModeButton() {
JPopupMenu popup = new JPopupMenu();
JMenuItem menuItem1 = new JMenuItem(new SmoothRenderingAction(canvas));
JMenuItem menuItem2 = new JMenuItem(new WireframeRenderingAction(canvas));
JMenuItem menuItem3 = new JMenuItem(new PointCloudRenderingAction(canvas));
//JMenuItem menuItem1 = new JMenuItem(new RenderingModeAction(canvas));
//JMenuItem menuItem2 = new JMenuItem(new WireframeRenderingAction(canvas));
//JMenuItem menuItem3 = new JMenuItem(new PointCloudRenderingAction(canvas));
JMenuItem menuItem1 = new JMenuItem(new RenderingModeAction(canvas));
JMenuItem menuItem2 = new JMenuItem(new RenderingModeAction(canvas));
JMenuItem menuItem3 = new JMenuItem(new RenderingModeAction(canvas));
menuItem1.setActionCommand(RenderingModeAction.ACTION_COMMAND_SMOOTH_MODE);
menuItem2.setActionCommand(RenderingModeAction.ACTION_COMMAND_WIREFRAME_MODE);
menuItem3.setActionCommand(RenderingModeAction.ACTION_COMMAND_POINT_CLOUD_MODE);
menuItem1.setIcon(new ImageIcon(getClass().getResource("/" + RenderingToolBar.SMOOT_BUTTON_ICON)));
menuItem2.setIcon(new ImageIcon(getClass().getResource("/" + RenderingToolBar.WIREFRAME_BUTTON_ICON)));
......@@ -84,7 +100,9 @@ public class RenderingToolBar extends JToolBar {
private void addBackgroundButton() {
JToggleButton button = new JToggleButton();
button.setAction(new BackgroundAction(canvas));
button.addActionListener(new RenderingModeAction(canvas));
button.setActionCommand(RenderingModeAction.ACTION_COMMAND_BACKGROUND_CHANGE);
//button.setAction(new BackgroundAction(canvas));
button.setIcon(new ImageIcon(getClass().getResource("/" + RenderingToolBar.BACKGROUND_BUTTON_ICON)));
//Mnemonics.setLocalizedText(button, NbBundle.getMessage(RenderingToolBar.class, "RenderingToolBar.background.text"));
button.setFocusable(false);
......@@ -95,7 +113,9 @@ public class RenderingToolBar extends JToolBar {
private void addReflectionsButton() {
JToggleButton button = new JToggleButton();
button.setAction(new ReflectionsAction(canvas));
button.addActionListener(new RenderingModeAction(canvas));
button.setActionCommand(RenderingModeAction.ACTION_COMMAND_REFLECTIONS_ON_OFF);
//button.setAction(new ReflectionsAction(canvas));
button.setIcon(new ImageIcon(getClass().getResource("/" + RenderingToolBar.REFLECTIONS_BUTTON_ICON)));
//Mnemonics.setLocalizedText(button, NbBundle.getMessage(RenderingToolBar.class, "RenderingToolBar.background.text"));
button.setFocusable(false);
......
package cz.fidentis.analyst.gui.rndtoolbar;
import cz.fidentis.analyst.gui.canvas.Canvas;
import javax.swing.ImageIcon;
import javax.swing.JPanel;
import javax.swing.JToggleButton;
import org.openide.util.NbBundle;
/**
* A toolbar extension for a single face analysis.
*
* @author Radek Oslejsek
*/
public class SingleFaceToolBar extends RenderingToolBar {
/**
* Constructor.
* @param canvas Rendering canvas
*/
public SingleFaceToolBar(Canvas canvas, JPanel controlPanel) {
super(canvas);
addSymmetryPlaneButton(controlPanel);
}
private void addSymmetryPlaneButton(JPanel controlPanel) {
JToggleButton button = new JToggleButton();
button.addActionListener(new SymmetryPlaneAction(controlPanel, getCanvas()));
button.setActionCommand(SymmetryPlaneAction.ACTION_COMMAND_ON_OFF);
//button.setAction(new SymmetryPlaneAction(controlPanel));
button.setIcon(new ImageIcon(getClass().getResource("/" + RenderingToolBar.BACKGROUND_BUTTON_ICON)));
button.setFocusable(false);
button.setToolTipText(NbBundle.getMessage(RenderingToolBar.class, "SingleFaceToolBar.symmetry.text"));
add(button);
}
}
package cz.fidentis.analyst.gui.rndtoolbar;
import com.jogamp.opengl.GL2;
import cz.fidentis.analyst.gui.canvas.Canvas;
import cz.fidentis.analyst.gui.scene.DrawableMesh;
import java.awt.event.ActionEvent;
import javax.swing.AbstractAction;
/**
* Turns on the rending mode that fills triangles with color.
*
* @author Radek Oslejsek
*/
public class SmoothRenderingAction extends AbstractAction {
private final Canvas canvas;
/**
* Constructor.
* @param canvas OpenGL canvas
*/
public SmoothRenderingAction(Canvas canvas) {
this.canvas = canvas;
}
@Override
public void actionPerformed(ActionEvent e) {
for (DrawableMesh dm: canvas.getScene().getDrawables()) {
dm.setRenderMode(GL2.GL_FILL);
}
canvas.renderScene();
}
}
This diff is collapsed.
This diff is collapsed.
package cz.fidentis.analyst.gui.rndtoolbar;
import cz.fidentis.analyst.gui.canvas.Canvas;
import cz.fidentis.analyst.mesh.core.MeshFacet;
import cz.fidentis.analyst.symmetry.SignificantPoints.CurvatureAlg;
import cz.fidentis.analyst.symmetry.SymmetryConfig;
import cz.fidentis.analyst.symmetry.SymmetryEstimator;
import java.awt.Component;
import java.awt.Cursor;
import java.awt.event.ActionEvent;
import javax.swing.AbstractAction;
import javax.swing.JPanel;
import javax.swing.JToggleButton;
/**
*
* @author oslejsek
*/
public class SymmetryPlaneAction extends AbstractAction {
public static final String ACTION_COMMAND_ON_OFF = "on-off";
private final SymmetryPanel controlPanel = new SymmetryPanel();
private final JPanel topControlPanel;
private final Canvas canvas;
private final SymmetryConfig config = new SymmetryConfig();
private MeshFacet symmetryPlane = null;
private CurvatureAlg curvatureAlg = CurvatureAlg.GAUSSIAN;
public SymmetryPlaneAction(JPanel topControlPanel, Canvas canvas) {
this.canvas = canvas;
this.topControlPanel = topControlPanel;
this.topControlPanel.add(controlPanel);
controlPanel.setVisible(false);
}
@Override
public void actionPerformed(ActionEvent ae) {
String action = ae.getActionCommand();
switch (action) {
case ACTION_COMMAND_ON_OFF:
JToggleButton button = (JToggleButton) ae.getSource();
if (button.isSelected()) {
controlPanel.setVisible(true);
if (symmetryPlane == null) {
recomputeSymmetryPlane();
//canvas.getScene().getDrawables().get(0)...
}
} else {
controlPanel.setVisible(false);
}
break;
}
canvas.renderScene();
}
private void recomputeSymmetryPlane() {
//setCursor(Cursor.getPredefinedCursor(Cursor.CROSSHAIR_CURSOR));
SymmetryEstimator se = new SymmetryEstimator(this.config, this.curvatureAlg);
canvas.getScene().getDrawables().get(0).getModel().compute(se);
this.symmetryPlane = se.getSymmetryPlaneMesh();
}
}
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package cz.fidentis.analyst.gui.rndtoolbar;
import com.jogamp.opengl.GL2;
import cz.fidentis.analyst.gui.canvas.Canvas;
import cz.fidentis.analyst.gui.scene.DrawableMesh;
import java.awt.event.ActionEvent;
import javax.swing.AbstractAction;
/**
* Turns on the rending mode that draws triangle edges only.
*
* @author Radek Oslejsek
*/
public class WireframeRenderingAction extends AbstractAction {
private final Canvas canvas;
/**
* Constructor.
* @param canvas OpenGL canvas
*/
public WireframeRenderingAction(Canvas canvas) {
this.canvas = canvas;
}
@Override
public void actionPerformed(ActionEvent e) {
for (DrawableMesh dm: canvas.getScene().getDrawables()) {
dm.setRenderMode(GL2.GL_LINE);
}
canvas.renderScene();
}
}
......@@ -60,11 +60,12 @@ public class Scene {
*
* @return all drawable objects
*/
public Collection<DrawableFace> getDrawables() {
public List<DrawableFace> getDrawables() {
return this.drawables;
}
/*public void setDrawables(Collection<DrawableMesh> drawables) {
this.drawables = this.drawables;
}*/
}
package cz.fidentis.analyst.gui.tab;
import cz.fidentis.analyst.gui.canvas.Canvas;
import cz.fidentis.analyst.gui.core.ControlPanelTC;
import cz.fidentis.analyst.gui.rndtoolbar.RenderingToolBar;
import cz.fidentis.analyst.gui.rndtoolbar.SingleFaceToolBar;
import javax.swing.GroupLayout;
import javax.swing.LayoutStyle;
import org.netbeans.api.settings.ConvertAsProperties;
......@@ -21,12 +23,15 @@ import org.openide.windows.TopComponent;
public final class SingleFaceTab extends TopComponent {
private final Canvas canvas = new Canvas();
private final RenderingToolBar renderingToolBar = new RenderingToolBar(canvas);
private final RenderingToolBar renderingToolBar;
private final ControlPanelTC controlPanel;
/**
* Constructor.
*/
public SingleFaceTab() {
controlPanel = new ControlPanelTC();
renderingToolBar = new SingleFaceToolBar(canvas, controlPanel);
initComponents();
}
......@@ -43,7 +48,9 @@ public final class SingleFaceTab extends TopComponent {
.addGroup(layout.createSequentialGroup()
.addComponent(renderingToolBar, GroupLayout.PREFERRED_SIZE, RenderingToolBar.WIDTH, GroupLayout.PREFERRED_SIZE)
.addPreferredGap(LayoutStyle.ComponentPlacement.RELATED)
.addComponent(canvas, GroupLayout.DEFAULT_SIZE, 651, Short.MAX_VALUE))
.addComponent(canvas, GroupLayout.DEFAULT_SIZE, 651, Short.MAX_VALUE)
.addComponent(controlPanel, GroupLayout.DEFAULT_SIZE, 200, Short.MAX_VALUE)
)
);
layout.setVerticalGroup(
layout.createParallelGroup(GroupLayout.Alignment.LEADING)
......@@ -51,6 +58,7 @@ public final class SingleFaceTab extends TopComponent {
.addGroup(layout.createBaselineGroup(true, true)
.addComponent(renderingToolBar)
.addComponent(canvas)
.addComponent(controlPanel)
))
);
}
......
......@@ -4,3 +4,4 @@ RenderingToolBar.pointcloud.text=point cloud rendering
RenderingToolBar.background.text=background
RenderingToolBar.reflections.text=reflections
RenderingToolBar.renderingmode.text=rendering mode
SingleFaceToolBar.symmetry.text=symmetry plane
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