[#1168] Implement Show/hide CG/CP markings

This commit is contained in:
SiboVG 2022-05-26 17:18:17 +02:00
parent 5df388bafd
commit 18a690d829
3 changed files with 46 additions and 5 deletions

View File

@ -83,6 +83,7 @@ public class RocketFigure3d extends JPanel implements GLEventListener {
private Overlay extrasOverlay, caretOverlay; private Overlay extrasOverlay, caretOverlay;
private BufferedImage cgCaretRaster, cpCaretRaster; private BufferedImage cgCaretRaster, cpCaretRaster;
private volatile boolean redrawExtras = true; private volatile boolean redrawExtras = true;
private boolean drawCarets = true;
private final ArrayList<FigureElement> relativeExtra = new ArrayList<FigureElement>(); private final ArrayList<FigureElement> relativeExtra = new ArrayList<FigureElement>();
private final ArrayList<FigureElement> absoluteExtra = new ArrayList<FigureElement>(); private final ArrayList<FigureElement> absoluteExtra = new ArrayList<FigureElement>();
@ -324,7 +325,9 @@ public class RocketFigure3d extends JPanel implements GLEventListener {
rr.render(drawable, configuration, selection); rr.render(drawable, configuration, selection);
drawExtras(gl, glu); drawExtras(gl, glu);
if (drawCarets) {
drawCarets(gl, glu); drawCarets(gl, glu);
}
// GLJPanel with GLSL Flipper relies on this: // GLJPanel with GLSL Flipper relies on this:
gl.glFrontFace(GL.GL_CCW); gl.glFrontFace(GL.GL_CCW);
@ -710,4 +713,11 @@ public class RocketFigure3d extends JPanel implements GLEventListener {
} }
} }
public boolean isDrawCarets() {
return drawCarets;
}
public void setDrawCarets(boolean drawCarets) {
this.drawCarets = drawCarets;
}
} }

View File

@ -73,6 +73,8 @@ public class RocketFigure extends AbstractScaleFigure {
private double rotation; private double rotation;
private Transformation axialRotation; private Transformation axialRotation;
private boolean drawCarets = true;
/** /**
* The shapes to be drawn are stored in this Priority Queue, where the first shape to be drawn is the one with * The shapes to be drawn are stored in this Priority Queue, where the first shape to be drawn is the one with
* the highest priority, namely being the one where the corresponding RocketComponent has the highest displayOrder * the highest priority, namely being the one where the corresponding RocketComponent has the highest displayOrder
@ -320,9 +322,12 @@ public class RocketFigure extends AbstractScaleFigure {
// Draw relative extras // Draw relative extras
if (drawCarets) {
for (FigureElement e : relativeExtra) { for (FigureElement e : relativeExtra) {
e.paint(g2, scale); e.paint(g2, scale);
} }
}
// Draw absolute extras // Draw absolute extras
g2.setTransform(baseTransform); g2.setTransform(baseTransform);
@ -487,4 +492,12 @@ public class RocketFigure extends AbstractScaleFigure {
} }
} }
public boolean isDrawCarets() {
return drawCarets;
}
public void setDrawCarets(boolean drawCarets) {
this.drawCarets = drawCarets;
}
} }

View File

@ -5,6 +5,8 @@ import java.awt.BorderLayout;
import java.awt.Dimension; import java.awt.Dimension;
import java.awt.Font; import java.awt.Font;
import java.awt.Point; import java.awt.Point;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.InputEvent; import java.awt.event.InputEvent;
import java.awt.event.MouseEvent; import java.awt.event.MouseEvent;
import java.util.ArrayList; import java.util.ArrayList;
@ -120,6 +122,7 @@ public class RocketPanel extends JPanel implements TreeSelectionListener, Change
private final ScaleScrollPane scrollPane; private final ScaleScrollPane scrollPane;
private final JPanel figureHolder; private final JPanel figureHolder;
private JLabel zoomLabel;
private JLabel infoMessage; private JLabel infoMessage;
@ -259,6 +262,7 @@ public class RocketPanel extends JPanel implements TreeSelectionListener, Change
figureHolder.add(figure3d, BorderLayout.CENTER); figureHolder.add(figure3d, BorderLayout.CENTER);
rotationSlider.setEnabled(false); rotationSlider.setEnabled(false);
scaleSelector.setEnabled(false); scaleSelector.setEnabled(false);
zoomLabel.repaint(); // Makes sure the zoom label is above the scaleSelector
revalidate(); revalidate();
figureHolder.revalidate(); figureHolder.revalidate();
@ -328,7 +332,8 @@ public class RocketPanel extends JPanel implements TreeSelectionListener, Change
// Zoom level selector // Zoom level selector
scaleSelector = new ScaleSelector(scrollPane); scaleSelector = new ScaleSelector(scrollPane);
ribbon.add(new JLabel(trans.get("RocketPanel.lbl.Zoom")), "cell 1 0, center"); zoomLabel = new JLabel(trans.get("RocketPanel.lbl.Zoom"));
ribbon.add(zoomLabel, "cell 1 0, center");
ribbon.add(scaleSelector, "cell 1 1"); ribbon.add(scaleSelector, "cell 1 1");
// Show CG/CP // Show CG/CP
@ -337,6 +342,19 @@ public class RocketPanel extends JPanel implements TreeSelectionListener, Change
showCGCP.setSelected(true); showCGCP.setSelected(true);
ribbon.add(showCGCP, "cell 2 1, gapleft para"); ribbon.add(showCGCP, "cell 2 1, gapleft para");
showCGCP.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
if (figure != null) {
figure.setDrawCarets(showCGCP.isSelected());
}
if (figure3d != null) {
figure3d.setDrawCarets(showCGCP.isSelected());
}
updateFigures();
}
});
// Vertical separator // Vertical separator
JSeparator sep = new JSeparator(SwingConstants.VERTICAL); JSeparator sep = new JSeparator(SwingConstants.VERTICAL);
Dimension d_sep = sep.getPreferredSize(); Dimension d_sep = sep.getPreferredSize();