Loading GUI/src/main/java/cz/fidentis/analyst/core/ControlPanelBuilder.java +53 −0 Original line number Diff line number Diff line Loading @@ -14,9 +14,11 @@ import java.text.ParseException; import java.util.ArrayList; import java.util.List; import java.util.Locale; import javax.swing.Box; import javax.swing.ImageIcon; import javax.swing.JButton; import javax.swing.JCheckBox; import javax.swing.JComboBox; import javax.swing.JFormattedTextField; import javax.swing.JLabel; import javax.swing.JPanel; Loading Loading @@ -250,6 +252,57 @@ public class ControlPanelBuilder { return retButtons; } /** * Adds a combo box * @param items Items * @param action Action listener invoked when some item is selected * @return */ public JComboBox addComboBox(List<String> items, ActionListener action) { GridBagConstraints c = new GridBagConstraints(); c.insets = new Insets(0, 25, 0, 0); c.gridwidth = OPTION_TEXT_WIDTH; c.gridy = row; c.gridx = col; col += OPTION_TEXT_WIDTH; c.anchor = GridBagConstraints.CENTER; c.fill = GridBagConstraints.NONE; JComboBox cbox = new JComboBox(items.toArray(String[]::new)); cbox.addActionListener(action); controlPanel.add(cbox, c); return cbox; } /** * Adds a horizontal strut that moves upper lines to the top of the panel */ public void addVerticalStrut() { GridBagConstraints c = new GridBagConstraints(); c.weighty = 1.0; c.gridwidth = 1; c.gridy = row; c.gridx = col++; c.anchor = GridBagConstraints.CENTER; c.fill = GridBagConstraints.BOTH; controlPanel.add(Box.createHorizontalStrut(5), c); } /** * Adds a gap occupying given number of grid cells */ public void addGap() { GridBagConstraints c = new GridBagConstraints(); c.weightx = 0.4; c.gridwidth = 1; c.gridy = row; c.gridx = col++; c.anchor = GridBagConstraints.CENTER; c.fill = GridBagConstraints.HORIZONTAL; controlPanel.add(Box.createVerticalStrut(5), c); } /** * Adds a check box. * Loading GUI/src/main/java/cz/fidentis/analyst/curvature/CurvatureAction.java +34 −5 Original line number Diff line number Diff line package cz.fidentis.analyst.curvature; import cz.fidentis.analyst.canvas.Canvas; import static cz.fidentis.analyst.curvature.CurvaturePanel.GAUSSIAN_CURVATURE; import cz.fidentis.analyst.mesh.core.MeshFacet; import cz.fidentis.analyst.visitors.mesh.Curvature; import java.awt.event.ActionEvent; import java.util.List; import java.util.Map; import javax.swing.AbstractAction; import javax.swing.JComboBox; import javax.swing.JPanel; import javax.swing.JTabbedPane; import javax.swing.JToggleButton; Loading @@ -20,12 +22,14 @@ public class CurvatureAction extends AbstractAction { public static final String ACTION_COMMAND_SHOW_HIDE_PANEL = "show-hide curvature control panel"; public static final String ACTION_COMMAND_SHOW_HIDE_HEATMAP = "show-hide heatmap"; public static final String ACTION_COMMAND_SET_CURVATURE_TYPE = "set curvature type"; private final CurvaturePanel controlPanel; private final JTabbedPane topControlPanel; private final Canvas canvas; private Curvature curvatureVisitor = null; private String curvatureType = CurvaturePanel.GAUSSIAN_CURVATURE; /** * Constructor. Loading Loading @@ -56,19 +60,44 @@ public class CurvatureAction extends AbstractAction { break; case ACTION_COMMAND_SHOW_HIDE_HEATMAP: if (((JToggleButton) ae.getSource()).isSelected()) { if (curvatureVisitor == null) { // compute missing curvature this.curvatureVisitor = new Curvature(); canvas.getScene().getDrawableFace(0).getModel().compute(curvatureVisitor); canvas.getScene().getDrawableFace(0).setHeatMap(curvatureVisitor.getGaussianCurvatures()); } setHeatmap(); canvas.getScene().getDrawableFace(0).setRenderHeatmap(true); } else { canvas.getScene().getDrawableFace(0).setRenderHeatmap(false); } break; case ACTION_COMMAND_SET_CURVATURE_TYPE: this.curvatureType = (String) ((JComboBox) ae.getSource()).getSelectedItem(); setHeatmap(); break; default: throw new UnsupportedOperationException(action); } canvas.renderScene(); } protected void setHeatmap() { if (curvatureVisitor == null) { // compute missing curvature this.curvatureVisitor = new Curvature(); canvas.getScene().getDrawableFace(0).getModel().compute(curvatureVisitor); } switch (this.curvatureType) { case CurvaturePanel.GAUSSIAN_CURVATURE: canvas.getScene().getDrawableFace(0).setHeatMap(curvatureVisitor.getGaussianCurvatures()); break; case CurvaturePanel.MEAN_CURVATURE: canvas.getScene().getDrawableFace(0).setHeatMap(curvatureVisitor.getMeanCurvatures()); break; case CurvaturePanel.MIN_CURVATURE: canvas.getScene().getDrawableFace(0).setHeatMap(curvatureVisitor.getMinPrincipalCurvatures()); break; case CurvaturePanel.MAX_CURVATURE: canvas.getScene().getDrawableFace(0).setHeatMap(curvatureVisitor.getMaxPrincipalCurvatures()); break; default: throw new UnsupportedOperationException(curvatureType); } } } GUI/src/main/java/cz/fidentis/analyst/curvature/CurvaturePanel.java +17 −1 Original line number Diff line number Diff line Loading @@ -2,6 +2,7 @@ package cz.fidentis.analyst.curvature; import cz.fidentis.analyst.core.ControlPanelBuilder; import java.awt.event.ActionEvent; import java.util.List; import javax.swing.ImageIcon; /** Loading @@ -14,6 +15,11 @@ public class CurvaturePanel extends javax.swing.JPanel { public static final ImageIcon ICON = new ImageIcon(CurvaturePanel.class.getClassLoader().getResource("/curvature28x28.png")); public static final String NAME = "Curvature"; public static final String GAUSSIAN_CURVATURE = "Gaussian"; public static final String MEAN_CURVATURE = "Mean"; public static final String MIN_CURVATURE = "Min"; public static final String MAX_CURVATURE = "Max"; //private final JCheckBox showCurvature; public CurvaturePanel(CurvatureAction curvAction) { Loading @@ -30,7 +36,17 @@ public class CurvaturePanel extends javax.swing.JPanel { CurvatureAction.ACTION_COMMAND_SHOW_HIDE_HEATMAP) ); }); builder.addComboBox(List.of(GAUSSIAN_CURVATURE, MEAN_CURVATURE, MIN_CURVATURE, MAX_CURVATURE), (ActionEvent e) -> { curvAction.actionPerformed(new ActionEvent( e.getSource(), ActionEvent.ACTION_PERFORMED, CurvatureAction.ACTION_COMMAND_SET_CURVATURE_TYPE) ); }); builder.addGap(); builder.addLine(); builder.addVerticalStrut(); } } GUI/src/main/java/cz/fidentis/analyst/toolbar/RenderingToolBar.java +0 −4 Original line number Diff line number Diff line Loading @@ -57,10 +57,6 @@ public class RenderingToolBar extends JToolBar { private void addRenderingModeButton() { JPopupMenu popup = new JPopupMenu(); //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)); Loading Loading
GUI/src/main/java/cz/fidentis/analyst/core/ControlPanelBuilder.java +53 −0 Original line number Diff line number Diff line Loading @@ -14,9 +14,11 @@ import java.text.ParseException; import java.util.ArrayList; import java.util.List; import java.util.Locale; import javax.swing.Box; import javax.swing.ImageIcon; import javax.swing.JButton; import javax.swing.JCheckBox; import javax.swing.JComboBox; import javax.swing.JFormattedTextField; import javax.swing.JLabel; import javax.swing.JPanel; Loading Loading @@ -250,6 +252,57 @@ public class ControlPanelBuilder { return retButtons; } /** * Adds a combo box * @param items Items * @param action Action listener invoked when some item is selected * @return */ public JComboBox addComboBox(List<String> items, ActionListener action) { GridBagConstraints c = new GridBagConstraints(); c.insets = new Insets(0, 25, 0, 0); c.gridwidth = OPTION_TEXT_WIDTH; c.gridy = row; c.gridx = col; col += OPTION_TEXT_WIDTH; c.anchor = GridBagConstraints.CENTER; c.fill = GridBagConstraints.NONE; JComboBox cbox = new JComboBox(items.toArray(String[]::new)); cbox.addActionListener(action); controlPanel.add(cbox, c); return cbox; } /** * Adds a horizontal strut that moves upper lines to the top of the panel */ public void addVerticalStrut() { GridBagConstraints c = new GridBagConstraints(); c.weighty = 1.0; c.gridwidth = 1; c.gridy = row; c.gridx = col++; c.anchor = GridBagConstraints.CENTER; c.fill = GridBagConstraints.BOTH; controlPanel.add(Box.createHorizontalStrut(5), c); } /** * Adds a gap occupying given number of grid cells */ public void addGap() { GridBagConstraints c = new GridBagConstraints(); c.weightx = 0.4; c.gridwidth = 1; c.gridy = row; c.gridx = col++; c.anchor = GridBagConstraints.CENTER; c.fill = GridBagConstraints.HORIZONTAL; controlPanel.add(Box.createVerticalStrut(5), c); } /** * Adds a check box. * Loading
GUI/src/main/java/cz/fidentis/analyst/curvature/CurvatureAction.java +34 −5 Original line number Diff line number Diff line package cz.fidentis.analyst.curvature; import cz.fidentis.analyst.canvas.Canvas; import static cz.fidentis.analyst.curvature.CurvaturePanel.GAUSSIAN_CURVATURE; import cz.fidentis.analyst.mesh.core.MeshFacet; import cz.fidentis.analyst.visitors.mesh.Curvature; import java.awt.event.ActionEvent; import java.util.List; import java.util.Map; import javax.swing.AbstractAction; import javax.swing.JComboBox; import javax.swing.JPanel; import javax.swing.JTabbedPane; import javax.swing.JToggleButton; Loading @@ -20,12 +22,14 @@ public class CurvatureAction extends AbstractAction { public static final String ACTION_COMMAND_SHOW_HIDE_PANEL = "show-hide curvature control panel"; public static final String ACTION_COMMAND_SHOW_HIDE_HEATMAP = "show-hide heatmap"; public static final String ACTION_COMMAND_SET_CURVATURE_TYPE = "set curvature type"; private final CurvaturePanel controlPanel; private final JTabbedPane topControlPanel; private final Canvas canvas; private Curvature curvatureVisitor = null; private String curvatureType = CurvaturePanel.GAUSSIAN_CURVATURE; /** * Constructor. Loading Loading @@ -56,19 +60,44 @@ public class CurvatureAction extends AbstractAction { break; case ACTION_COMMAND_SHOW_HIDE_HEATMAP: if (((JToggleButton) ae.getSource()).isSelected()) { if (curvatureVisitor == null) { // compute missing curvature this.curvatureVisitor = new Curvature(); canvas.getScene().getDrawableFace(0).getModel().compute(curvatureVisitor); canvas.getScene().getDrawableFace(0).setHeatMap(curvatureVisitor.getGaussianCurvatures()); } setHeatmap(); canvas.getScene().getDrawableFace(0).setRenderHeatmap(true); } else { canvas.getScene().getDrawableFace(0).setRenderHeatmap(false); } break; case ACTION_COMMAND_SET_CURVATURE_TYPE: this.curvatureType = (String) ((JComboBox) ae.getSource()).getSelectedItem(); setHeatmap(); break; default: throw new UnsupportedOperationException(action); } canvas.renderScene(); } protected void setHeatmap() { if (curvatureVisitor == null) { // compute missing curvature this.curvatureVisitor = new Curvature(); canvas.getScene().getDrawableFace(0).getModel().compute(curvatureVisitor); } switch (this.curvatureType) { case CurvaturePanel.GAUSSIAN_CURVATURE: canvas.getScene().getDrawableFace(0).setHeatMap(curvatureVisitor.getGaussianCurvatures()); break; case CurvaturePanel.MEAN_CURVATURE: canvas.getScene().getDrawableFace(0).setHeatMap(curvatureVisitor.getMeanCurvatures()); break; case CurvaturePanel.MIN_CURVATURE: canvas.getScene().getDrawableFace(0).setHeatMap(curvatureVisitor.getMinPrincipalCurvatures()); break; case CurvaturePanel.MAX_CURVATURE: canvas.getScene().getDrawableFace(0).setHeatMap(curvatureVisitor.getMaxPrincipalCurvatures()); break; default: throw new UnsupportedOperationException(curvatureType); } } }
GUI/src/main/java/cz/fidentis/analyst/curvature/CurvaturePanel.java +17 −1 Original line number Diff line number Diff line Loading @@ -2,6 +2,7 @@ package cz.fidentis.analyst.curvature; import cz.fidentis.analyst.core.ControlPanelBuilder; import java.awt.event.ActionEvent; import java.util.List; import javax.swing.ImageIcon; /** Loading @@ -14,6 +15,11 @@ public class CurvaturePanel extends javax.swing.JPanel { public static final ImageIcon ICON = new ImageIcon(CurvaturePanel.class.getClassLoader().getResource("/curvature28x28.png")); public static final String NAME = "Curvature"; public static final String GAUSSIAN_CURVATURE = "Gaussian"; public static final String MEAN_CURVATURE = "Mean"; public static final String MIN_CURVATURE = "Min"; public static final String MAX_CURVATURE = "Max"; //private final JCheckBox showCurvature; public CurvaturePanel(CurvatureAction curvAction) { Loading @@ -30,7 +36,17 @@ public class CurvaturePanel extends javax.swing.JPanel { CurvatureAction.ACTION_COMMAND_SHOW_HIDE_HEATMAP) ); }); builder.addComboBox(List.of(GAUSSIAN_CURVATURE, MEAN_CURVATURE, MIN_CURVATURE, MAX_CURVATURE), (ActionEvent e) -> { curvAction.actionPerformed(new ActionEvent( e.getSource(), ActionEvent.ACTION_PERFORMED, CurvatureAction.ACTION_COMMAND_SET_CURVATURE_TYPE) ); }); builder.addGap(); builder.addLine(); builder.addVerticalStrut(); } }
GUI/src/main/java/cz/fidentis/analyst/toolbar/RenderingToolBar.java +0 −4 Original line number Diff line number Diff line Loading @@ -57,10 +57,6 @@ public class RenderingToolBar extends JToolBar { private void addRenderingModeButton() { JPopupMenu popup = new JPopupMenu(); //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)); Loading