Newer
Older
package cz.fidentis.analyst.curvature;

Radek Ošlejšek
committed
import cz.fidentis.analyst.Logger;
import cz.fidentis.analyst.canvas.Canvas;
import cz.fidentis.analyst.core.ControlPanelAction;
import cz.fidentis.analyst.visitors.mesh.Curvature;
import java.awt.event.ActionEvent;
import javax.swing.JTabbedPane;
import javax.swing.JToggleButton;
/**
* Action listener for the curvature computation.
*
* @author Radek Oslejsek
*/
public class CurvatureAction extends ControlPanelAction {
/*
* Attributes handling the state
*/
private Curvature visitor = null;
private String curvatureType = CurvaturePanel.GAUSSIAN_CURVATURE;
private final JTabbedPane topControlPanel;
/**
* Constructor.
*
* @param canvas OpenGL canvas
* @param topControlPanel Top component for placing control panels
public CurvatureAction(Canvas canvas, JTabbedPane topControlPanel) {
super(canvas, topControlPanel);
this.topControlPanel = topControlPanel;
this.controlPanel = new CurvaturePanel(this);
// Place control panel to the topControlPanel
this.topControlPanel.addTab(controlPanel.getName(), controlPanel.getIcon(), controlPanel);
this.topControlPanel.addChangeListener(e -> {
// If the symmetry panel is focused...
if (((JTabbedPane) e.getSource()).getSelectedComponent() instanceof CurvaturePanel) {
getCanvas().getScene().setDefaultColors();
}
});
topControlPanel.setSelectedComponent(controlPanel);
}
@Override
public void actionPerformed(ActionEvent ae) {
String action = ae.getActionCommand();
switch (action) {
case CurvaturePanel.ACTION_COMMAND_SHOW_HIDE_PANEL:
hideShowPanelActionPerformed(ae, this.controlPanel);
case CurvaturePanel.ACTION_COMMAND_SHOW_HIDE_HEATMAP:
if (((JToggleButton) ae.getSource()).isSelected()) {
getPrimaryDrawableFace().setRenderHeatmap(true);
getPrimaryDrawableFace().setRenderHeatmap(false);
case CurvaturePanel.ACTION_COMMAND_SET_CURVATURE_TYPE:
this.curvatureType = (String) ((JComboBox) ae.getSource()).getSelectedItem();
setHeatmap();
break;
if (visitor == null) { // compute missing curvature

Radek Ošlejšek
committed
Logger out = Logger.measureTime();
this.visitor = new Curvature();
getPrimaryDrawableFace().getModel().compute(visitor);
out.printDuration("Computation of curvature for a model with "
+ getPrimaryDrawableFace().getHumanFace().getMeshModel().getNumVertices()
+ " vertices"
);
}
switch (this.curvatureType) {
case CurvaturePanel.GAUSSIAN_CURVATURE:
getPrimaryDrawableFace().setHeatMap(visitor.getGaussianCurvatures());
break;
case CurvaturePanel.MEAN_CURVATURE:
getPrimaryDrawableFace().setHeatMap(visitor.getMeanCurvatures());
break;
case CurvaturePanel.MIN_CURVATURE:
getPrimaryDrawableFace().setHeatMap(visitor.getMinPrincipalCurvatures());
break;
case CurvaturePanel.MAX_CURVATURE:
getPrimaryDrawableFace().setHeatMap(visitor.getMaxPrincipalCurvatures());
break;
default:
throw new UnsupportedOperationException(curvatureType);
}
}