Newer
Older
package cz.fidentis.analyst.symmetry;
import cz.fidentis.analyst.core.ControlPanel;
import cz.fidentis.analyst.core.ControlPanelBuilder;
import org.openide.windows.WindowManager;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.List;
import javax.swing.ImageIcon;
import javax.swing.JCheckBox;
import javax.swing.JOptionPane;
import javax.swing.JTextField;
import javax.vecmath.Point3d;
/**
* Control panel for Polyline profiles and cutting planes
*
* @author Dominik Racek
*/
public class ProfilesPanel extends ControlPanel {
/*
* GUI primitives holding the configuration state:
*/
private JTextField cuttingOffset;
private JCheckBox alignProfiles;
private PolylinePanel polylinePanel;
/*
* Handled actions
*/
public static final String ACTION_COMMAND_SHOW_HIDE_PLANE = "show-hide symmetry plane";
public static final String ACTION_COMMAND_RECOMPUTE = "recompute";
public static final String ACTION_COMMAND_EXPORT = "export";
public static final String ACTION_OFFSET_CUTTING_PLANE = "offset_plane";
public static final String ACTION_ALIGN_PROFILES = "align_profiles";
public static final String ACTION_MIRROR_CUTS = "mirror-cuts";
/*
* Mandatory design elements
*/
public static final String ICON = "profiles28x28.png";
public static final String NAME = "Profiles";
/**
* Constructor for one face
*/
public ProfilesPanel(ActionListener action, List<Point3d> values) {
setName(NAME);
ControlPanelBuilder builder = new ControlPanelBuilder(this);
this.polylinePanel = new PolylinePanel(values);
builder.addPolylinePanel(this.polylinePanel);
builder.addLine();
buildPanel(action, builder);
}
/**
* Constructor for two faces
*/
public ProfilesPanel(ActionListener action, List<Point3d> primary, List<Point3d> secondary) {
setName(NAME);
ControlPanelBuilder builder = new ControlPanelBuilder(this);
this.polylinePanel = new PolylinePanel(primary, secondary);
builder.addPolylinePanel(this.polylinePanel);
builder.addLine();
buildPanel(action, builder);
}
private void buildPanel(ActionListener action, ControlPanelBuilder builder) {
builder.addCaptionLine("Computation options:");
builder.addLine();
cuttingOffset = builder.addSliderOptionLine(
(ActionEvent e) -> {
showCuttingOffsetHelp();
},
"Cutting Plane Offset",
-1,
(ActionEvent e) -> {
action.actionPerformed(new ActionEvent(
e.getSource(),
ActionEvent.ACTION_PERFORMED,
ACTION_OFFSET_CUTTING_PLANE
));
showCuttingPlane = builder.addCheckBoxOptionLine(
"Show cutting plane",
true,
createListener(action, ACTION_COMMAND_SHOW_HIDE_PLANE)
mirrorCuts = builder.addCheckBoxOptionLine(
null,
"Mirror cuts",
false,
createListener(action, ACTION_MIRROR_CUTS)
);
alignProfiles = builder.addCheckBoxOptionLine(
"Align profiles",
false,
createListener(action, ACTION_ALIGN_PROFILES)
);
builder.addLine();
builder.addButtons(
List.of("Recompute",
action.actionPerformed(new ActionEvent(
e.getSource(),
ActionEvent.ACTION_PERFORMED,
ACTION_COMMAND_RECOMPUTE
));
action.actionPerformed(new ActionEvent(
e.getSource(),
ActionEvent.ACTION_PERFORMED,
ACTION_COMMAND_EXPORT
));
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
}
)
);
}
@Override
public ImageIcon getIcon() {
return getStaticIcon();
}
/**
* Static implementation of the {@link #getIcon()} method.
*
* @return Control panel icon
*/
public static ImageIcon getStaticIcon() {
return new ImageIcon(ProfilesPanel.class.getClassLoader().getResource("/" + ICON));
}
private void showCuttingOffsetHelp() {
JOptionPane.showMessageDialog(WindowManager.getDefault().findTopComponent("Cutting Plane Offset"),
"TO DO",
"TO DO",
0,
new ImageIcon(getClass().getResource("/distance.png"))
);
}
public boolean isShowPlaneChecked() {
return showCuttingPlane.isSelected();
}
public boolean isMirrorCutsChecked() {
return mirrorCuts.isSelected();
}
public double getOffsetValue() {
return ControlPanelBuilder.parseLocaleDouble(cuttingOffset);
}
/**
* Sets the mirrorCuts boolean based on the checkbox
*/
public void setMirrorCuts() {
this.polylinePanel.setMirrorCuts(this.mirrorCuts.isSelected());
}
/**
* Sets the alignProfiles boolean based on the checkbox
*/
public void setAlignProfiles() {
this.polylinePanel.setAlignProfiles(alignProfiles.isSelected());
}
/**
* Sets the primary points in the polyline panel
*
* @param points primary points
*/
public void setPrimaryPoints(List<Point3d> points) {
this.polylinePanel.setPrimaryPoints(points);
}
/**
* Sets the primary mirror points in the polyline panel
*
* @param points primary mirror points
*/
public void setPrimaryMirrorPoints(List<Point3d> points) {
this.polylinePanel.setPrimaryMirrorPoints(points);
}
/**
* Sets the secondary points in the polyline panel
*
* @param points secondary points
*/
public void setSecondaryPoints(List<Point3d> points) {
this.polylinePanel.setSecondaryPoints(points);
}
/**
* Sets the secondary mirror points in the polyline panel
*
* @param points secondary mirror points
*/
public void setSecondaryMirrorPoints(List<Point3d> points) {
this.polylinePanel.setSecondaryMirrorPoints(points);
}