This commit is contained in:
Sampo Niskanen 2012-09-19 04:13:57 +00:00
parent e68fbafde9
commit 3ff98a01d2

View File

@ -4,7 +4,6 @@
package net.sf.openrocket.gui.print; package net.sf.openrocket.gui.print;
import java.awt.Graphics2D; import java.awt.Graphics2D;
import java.io.IOException;
import java.text.DecimalFormat; import java.text.DecimalFormat;
import java.util.List; import java.util.List;
@ -31,12 +30,13 @@ import net.sf.openrocket.unit.UnitGroup;
import net.sf.openrocket.util.Chars; import net.sf.openrocket.util.Chars;
import net.sf.openrocket.util.Coordinate; import net.sf.openrocket.util.Coordinate;
import org.uispec4j.utils.Utils;
import com.itextpdf.text.Document; import com.itextpdf.text.Document;
import com.itextpdf.text.DocumentException; import com.itextpdf.text.DocumentException;
import com.itextpdf.text.Element; import com.itextpdf.text.Element;
import com.itextpdf.text.Paragraph; import com.itextpdf.text.Paragraph;
import com.itextpdf.text.Rectangle; import com.itextpdf.text.Rectangle;
import com.itextpdf.text.pdf.BaseFont;
import com.itextpdf.text.pdf.DefaultFontMapper; import com.itextpdf.text.pdf.DefaultFontMapper;
import com.itextpdf.text.pdf.PdfContentByte; import com.itextpdf.text.pdf.PdfContentByte;
import com.itextpdf.text.pdf.PdfPCell; import com.itextpdf.text.pdf.PdfPCell;
@ -75,33 +75,33 @@ import com.itextpdf.text.pdf.PdfWriter;
* </pre> * </pre>
*/ */
public class DesignReport { public class DesignReport {
/** /**
* The logger. * The logger.
*/ */
private static final LogHelper log = Application.getLogger(); private static final LogHelper log = Application.getLogger();
public static final double SCALE_FUDGE_FACTOR = 0.4d; public static final double SCALE_FUDGE_FACTOR = 0.4d;
/** /**
* The OR Document. * The OR Document.
*/ */
private OpenRocketDocument rocketDocument; private OpenRocketDocument rocketDocument;
/** /**
* A panel used for rendering of the design diagram. * A panel used for rendering of the design diagram.
*/ */
final RocketPanel panel; final RocketPanel panel;
/** /**
* The iText document. * The iText document.
*/ */
protected Document document; protected Document document;
/** /**
* The figure rotation. * The figure rotation.
*/ */
private double rotation = 0d; private double rotation = 0d;
/** The displayed strings. */ /** The displayed strings. */
private static final String STAGES = "Stages: "; private static final String STAGES = "Stages: ";
private static final String MASS_WITH_MOTORS = "Mass (with motors): "; private static final String MASS_WITH_MOTORS = "Mass (with motors): ";
@ -127,21 +127,21 @@ public class DesignReport {
private static final String LANDING_VELOCITY = "Landing Velocity"; private static final String LANDING_VELOCITY = "Landing Velocity";
private static final String ROCKET_DESIGN = "Rocket Design"; private static final String ROCKET_DESIGN = "Rocket Design";
private static final double GRAVITY_CONSTANT = 9.80665d; private static final double GRAVITY_CONSTANT = 9.80665d;
/** /**
* Constructor. * Constructor.
* *
* @param theRocDoc the OR document * @param theRocDoc the OR document
* @param theIDoc the iText document * @param theIDoc the iText document
* @param figureRotation the angle the figure is rotated on the screen; printed report will mimic * @param figureRotation the angle the figure is rotated on the screen; printed report will mimic
*/ */
public DesignReport(OpenRocketDocument theRocDoc, Document theIDoc, Double figureRotation) { public DesignReport(OpenRocketDocument theRocDoc, Document theIDoc, Double figureRotation) {
document = theIDoc; document = theIDoc;
rocketDocument = theRocDoc; rocketDocument = theRocDoc;
panel = new RocketPanel(rocketDocument); panel = new RocketPanel(rocketDocument);
rotation = figureRotation; rotation = figureRotation;
} }
/** /**
* Main entry point. Prints the rocket drawing and design data. * Main entry point. Prints the rocket drawing and design data.
* *
@ -154,23 +154,23 @@ public class DesignReport {
com.itextpdf.text.Rectangle pageSize = document.getPageSize(); com.itextpdf.text.Rectangle pageSize = document.getPageSize();
int pageImageableWidth = (int) pageSize.getWidth() - (int) pageSize.getBorderWidth() * 2; int pageImageableWidth = (int) pageSize.getWidth() - (int) pageSize.getBorderWidth() * 2;
int pageImageableHeight = (int) pageSize.getHeight() / 2 - (int) pageSize.getBorderWidthTop(); int pageImageableHeight = (int) pageSize.getHeight() / 2 - (int) pageSize.getBorderWidthTop();
PrintUtilities.addText(document, PrintUtilities.BIG_BOLD, ROCKET_DESIGN); PrintUtilities.addText(document, PrintUtilities.BIG_BOLD, ROCKET_DESIGN);
Rocket rocket = rocketDocument.getRocket(); Rocket rocket = rocketDocument.getRocket();
final Configuration configuration = rocket.getDefaultConfiguration().clone(); final Configuration configuration = rocket.getDefaultConfiguration().clone();
configuration.setAllStages(); configuration.setAllStages();
PdfContentByte canvas = writer.getDirectContent(); PdfContentByte canvas = writer.getDirectContent();
final PrintFigure figure = new PrintFigure(configuration); final PrintFigure figure = new PrintFigure(configuration);
figure.setRotation(rotation); figure.setRotation(rotation);
FigureElement cp = panel.getExtraCP(); FigureElement cp = panel.getExtraCP();
FigureElement cg = panel.getExtraCG(); FigureElement cg = panel.getExtraCG();
RocketInfo text = panel.getExtraText(); RocketInfo text = panel.getExtraText();
double scale = paintRocketDiagram(pageImageableWidth, pageImageableHeight, canvas, figure, cp, cg); double scale = paintRocketDiagram(pageImageableWidth, pageImageableHeight, canvas, figure, cp, cg);
canvas.beginText(); canvas.beginText();
canvas.setFontAndSize(ITextHelper.getBaseFont(), PrintUtilities.NORMAL_FONT_SIZE); canvas.setFontAndSize(ITextHelper.getBaseFont(), PrintUtilities.NORMAL_FONT_SIZE);
int figHeightPts = (int) (PrintUnit.METERS.toPoints(figure.getFigureHeight()) * 0.4 * (scale / PrintUnit.METERS int figHeightPts = (int) (PrintUnit.METERS.toPoints(figure.getFigureHeight()) * 0.4 * (scale / PrintUnit.METERS
@ -178,15 +178,15 @@ public class DesignReport {
final int diagramHeight = pageImageableHeight * 2 - 70 - (figHeightPts); final int diagramHeight = pageImageableHeight * 2 - 70 - (figHeightPts);
canvas.moveText(document.leftMargin() + pageSize.getBorderWidthLeft(), diagramHeight); canvas.moveText(document.leftMargin() + pageSize.getBorderWidthLeft(), diagramHeight);
canvas.moveTextWithLeading(0, -16); canvas.moveTextWithLeading(0, -16);
float initialY = canvas.getYTLM(); float initialY = canvas.getYTLM();
canvas.showText(rocketDocument.getRocket().getName()); canvas.showText(rocketDocument.getRocket().getName());
canvas.newlineShowText(STAGES); canvas.newlineShowText(STAGES);
canvas.showText("" + rocket.getStageCount()); canvas.showText("" + rocket.getStageCount());
if (configuration.hasMotors()) { if (configuration.hasMotors()) {
if (configuration.getStageCount() > 1) { if (configuration.getStageCount() > 1) {
canvas.newlineShowText(MASS_WITH_MOTORS); canvas.newlineShowText(MASS_WITH_MOTORS);
@ -197,29 +197,29 @@ public class DesignReport {
canvas.newlineShowText(MASS_EMPTY); canvas.newlineShowText(MASS_EMPTY);
} }
canvas.showText(text.getMass(UnitGroup.UNITS_MASS.getDefaultUnit())); canvas.showText(text.getMass(UnitGroup.UNITS_MASS.getDefaultUnit()));
canvas.newlineShowText(STABILITY); canvas.newlineShowText(STABILITY);
canvas.showText(text.getStability()); canvas.showText(text.getStability());
canvas.newlineShowText(CG); canvas.newlineShowText(CG);
canvas.showText(text.getCg()); canvas.showText(text.getCg());
canvas.newlineShowText(CP); canvas.newlineShowText(CP);
canvas.showText(text.getCp()); canvas.showText(text.getCp());
canvas.endText(); canvas.endText();
try { try {
//Move the internal pointer of the document below that of what was just written using the direct byte buffer. //Move the internal pointer of the document below that of what was just written using the direct byte buffer.
Paragraph paragraph = new Paragraph(); Paragraph paragraph = new Paragraph();
float finalY = canvas.getYTLM(); float finalY = canvas.getYTLM();
int heightOfDiagramAndText = (int) (pageSize.getHeight() - (finalY - initialY + diagramHeight)); int heightOfDiagramAndText = (int) (pageSize.getHeight() - (finalY - initialY + diagramHeight));
paragraph.setSpacingAfter(heightOfDiagramAndText); paragraph.setSpacingAfter(heightOfDiagramAndText);
document.add(paragraph); document.add(paragraph);
String[] motorIds = rocket.getMotorConfigurationIDs(); String[] motorIds = rocket.getMotorConfigurationIDs();
List<Simulation> simulations = rocketDocument.getSimulations(); List<Simulation> simulations = rocketDocument.getSimulations();
for (int j = 0; j < motorIds.length; j++) { for (int j = 0; j < motorIds.length; j++) {
String motorId = motorIds[j]; String motorId = motorIds[j];
if (motorId != null) { if (motorId != null) {
@ -233,7 +233,7 @@ public class DesignReport {
if (j > 1) { if (j > 1) {
leading = 25; leading = 25;
} }
FlightData flight = findSimulation(motorId, simulations); FlightData flight = findSimulation(motorId, simulations);
addFlightData(flight, rocket, motorId, parent, leading); addFlightData(flight, rocket, motorId, parent, leading);
addMotorData(rocket, motorId, parent); addMotorData(rocket, motorId, parent);
document.add(parent); document.add(parent);
@ -243,8 +243,8 @@ public class DesignReport {
log.error("Could not modify document.", e); log.error("Could not modify document.", e);
} }
} }
/** /**
* Paint a diagram of the rocket into the PDF document. * Paint a diagram of the rocket into the PDF document.
* *
@ -258,14 +258,14 @@ public class DesignReport {
* @return the scale of the diagram * @return the scale of the diagram
*/ */
private double paintRocketDiagram(final int thePageImageableWidth, final int thePageImageableHeight, private double paintRocketDiagram(final int thePageImageableWidth, final int thePageImageableHeight,
final PdfContentByte theCanvas, final PrintFigure theFigure, final PdfContentByte theCanvas, final PrintFigure theFigure,
final FigureElement theCp, final FigureElement theCg) { final FigureElement theCp, final FigureElement theCg) {
theFigure.clearAbsoluteExtra(); theFigure.clearAbsoluteExtra();
theFigure.clearRelativeExtra(); theFigure.clearRelativeExtra();
theFigure.addRelativeExtra(theCp); theFigure.addRelativeExtra(theCp);
theFigure.addRelativeExtra(theCg); theFigure.addRelativeExtra(theCg);
theFigure.updateFigure(); theFigure.updateFigure();
double scale = double scale =
(thePageImageableWidth * 2.2) / theFigure.getFigureWidth(); (thePageImageableWidth * 2.2) / theFigure.getFigureWidth();
theFigure.setScale(scale); theFigure.setScale(scale);
@ -274,24 +274,24 @@ public class DesignReport {
*/ */
theFigure.setSize(thePageImageableWidth, thePageImageableHeight); theFigure.setSize(thePageImageableWidth, thePageImageableHeight);
theFigure.updateFigure(); theFigure.updateFigure();
final DefaultFontMapper mapper = new DefaultFontMapper(); final DefaultFontMapper mapper = new DefaultFontMapper();
Graphics2D g2d = theCanvas.createGraphics(thePageImageableWidth, thePageImageableHeight * 2, mapper); Graphics2D g2d = theCanvas.createGraphics(thePageImageableWidth, thePageImageableHeight * 2, mapper);
final double halfFigureHeight = SCALE_FUDGE_FACTOR * theFigure.getFigureHeightPx()/2; final double halfFigureHeight = SCALE_FUDGE_FACTOR * theFigure.getFigureHeightPx() / 2;
int y = PrintUnit.POINTS_PER_INCH; int y = PrintUnit.POINTS_PER_INCH;
//If the y dimension is negative, then it will potentially be drawn off the top of the page. Move the origin //If the y dimension is negative, then it will potentially be drawn off the top of the page. Move the origin
//to allow for this. //to allow for this.
if (theFigure.getDimensions().getY() < 0.0d) { if (theFigure.getDimensions().getY() < 0.0d) {
y += (int)halfFigureHeight; y += (int) halfFigureHeight;
} }
g2d.translate(20, y); g2d.translate(20, y);
g2d.scale(SCALE_FUDGE_FACTOR, SCALE_FUDGE_FACTOR); g2d.scale(SCALE_FUDGE_FACTOR, SCALE_FUDGE_FACTOR);
theFigure.paint(g2d); theFigure.paint(g2d);
g2d.dispose(); g2d.dispose();
return scale; return scale;
} }
/** /**
* Add the motor data for a motor configuration to the table. * Add the motor data for a motor configuration to the table.
* *
@ -300,11 +300,11 @@ public class DesignReport {
* @param parent the parent to which the motor data will be added * @param parent the parent to which the motor data will be added
*/ */
private void addMotorData(Rocket rocket, String motorId, final PdfPTable parent) { private void addMotorData(Rocket rocket, String motorId, final PdfPTable parent) {
PdfPTable motorTable = new PdfPTable(8); PdfPTable motorTable = new PdfPTable(8);
motorTable.setWidthPercentage(68); motorTable.setWidthPercentage(68);
motorTable.setHorizontalAlignment(Element.ALIGN_LEFT); motorTable.setHorizontalAlignment(Element.ALIGN_LEFT);
final PdfPCell motorCell = ITextHelper.createCell(MOTOR, PdfPCell.BOTTOM, PrintUtilities.SMALL); final PdfPCell motorCell = ITextHelper.createCell(MOTOR, PdfPCell.BOTTOM, PrintUtilities.SMALL);
final int mPad = 10; final int mPad = 10;
motorCell.setPaddingLeft(mPad); motorCell.setPaddingLeft(mPad);
@ -316,25 +316,25 @@ public class DesignReport {
motorTable.addCell(ITextHelper.createCell(THRUST_TO_WT, PdfPCell.BOTTOM, PrintUtilities.SMALL)); motorTable.addCell(ITextHelper.createCell(THRUST_TO_WT, PdfPCell.BOTTOM, PrintUtilities.SMALL));
motorTable.addCell(ITextHelper.createCell(PROPELLANT_WT, PdfPCell.BOTTOM, PrintUtilities.SMALL)); motorTable.addCell(ITextHelper.createCell(PROPELLANT_WT, PdfPCell.BOTTOM, PrintUtilities.SMALL));
motorTable.addCell(ITextHelper.createCell(SIZE, PdfPCell.BOTTOM, PrintUtilities.SMALL)); motorTable.addCell(ITextHelper.createCell(SIZE, PdfPCell.BOTTOM, PrintUtilities.SMALL));
DecimalFormat ttwFormat = new DecimalFormat("0.00"); DecimalFormat ttwFormat = new DecimalFormat("0.00");
MassCalculator massCalc = new BasicMassCalculator(); MassCalculator massCalc = new BasicMassCalculator();
Configuration config = new Configuration(rocket); Configuration config = new Configuration(rocket);
config.setMotorConfigurationID(motorId); config.setMotorConfigurationID(motorId);
int totalMotorCount = 0; int totalMotorCount = 0;
double totalPropMass = 0; double totalPropMass = 0;
double totalImpulse = 0; double totalImpulse = 0;
double totalTTW = 0; double totalTTW = 0;
int stage = 0; int stage = 0;
double stageMass = 0; double stageMass = 0;
boolean topBorder = false; boolean topBorder = false;
for (RocketComponent c : rocket) { for (RocketComponent c : rocket) {
if (c instanceof Stage) { if (c instanceof Stage) {
config.setToStage(stage); config.setToStage(stage);
stage++; stage++;
@ -343,26 +343,26 @@ public class DesignReport {
totalTTW = 0; totalTTW = 0;
topBorder = true; topBorder = true;
} }
if (c instanceof MotorMount && ((MotorMount) c).isMotorMount()) { if (c instanceof MotorMount && ((MotorMount) c).isMotorMount()) {
MotorMount mount = (MotorMount) c; MotorMount mount = (MotorMount) c;
if (mount.isMotorMount() && mount.getMotor(motorId) != null) { if (mount.isMotorMount() && mount.getMotor(motorId) != null) {
Motor motor = mount.getMotor(motorId); Motor motor = mount.getMotor(motorId);
int motorCount = c.toAbsolute(Coordinate.NUL).length; int motorCount = c.toAbsolute(Coordinate.NUL).length;
int border = Rectangle.NO_BORDER; int border = Rectangle.NO_BORDER;
if (topBorder) { if (topBorder) {
border = Rectangle.TOP; border = Rectangle.TOP;
topBorder = false; topBorder = false;
} }
String name = motor.getDesignation(); String name = motor.getDesignation();
if (motorCount > 1) { if (motorCount > 1) {
name += " (" + Chars.TIMES + motorCount + ")"; name += " (" + Chars.TIMES + motorCount + ")";
} }
final PdfPCell motorVCell = ITextHelper.createCell(name, border); final PdfPCell motorVCell = ITextHelper.createCell(name, border);
motorVCell.setPaddingLeft(mPad); motorVCell.setPaddingLeft(mPad);
motorTable.addCell(motorVCell); motorTable.addCell(motorVCell);
@ -374,21 +374,21 @@ public class DesignReport {
UnitGroup.UNITS_FORCE.getDefaultUnit().toStringUnit(motor.getMaxThrustEstimate()), border)); UnitGroup.UNITS_FORCE.getDefaultUnit().toStringUnit(motor.getMaxThrustEstimate()), border));
motorTable.addCell(ITextHelper.createCell( motorTable.addCell(ITextHelper.createCell(
UnitGroup.UNITS_IMPULSE.getDefaultUnit().toStringUnit(motor.getTotalImpulseEstimate()), border)); UnitGroup.UNITS_IMPULSE.getDefaultUnit().toStringUnit(motor.getTotalImpulseEstimate()), border));
double ttw = motor.getAverageThrustEstimate() / (stageMass * GRAVITY_CONSTANT); double ttw = motor.getAverageThrustEstimate() / (stageMass * GRAVITY_CONSTANT);
motorTable.addCell(ITextHelper.createCell( motorTable.addCell(ITextHelper.createCell(
ttwFormat.format(ttw) + ":1", border)); ttwFormat.format(ttw) + ":1", border));
double propMass = (motor.getLaunchCG().weight - motor.getEmptyCG().weight); double propMass = (motor.getLaunchCG().weight - motor.getEmptyCG().weight);
motorTable.addCell(ITextHelper.createCell( motorTable.addCell(ITextHelper.createCell(
UnitGroup.UNITS_MASS.getDefaultUnit().toStringUnit(propMass), border)); UnitGroup.UNITS_MASS.getDefaultUnit().toStringUnit(propMass), border));
final Unit motorUnit = UnitGroup.UNITS_MOTOR_DIMENSIONS.getDefaultUnit(); final Unit motorUnit = UnitGroup.UNITS_MOTOR_DIMENSIONS.getDefaultUnit();
motorTable.addCell(ITextHelper.createCell(motorUnit.toString(motor.getDiameter()) + motorTable.addCell(ITextHelper.createCell(motorUnit.toString(motor.getDiameter()) +
"/" + "/" +
motorUnit.toString(motor.getLength()) + " " + motorUnit.toString(motor.getLength()) + " " +
motorUnit.toString(), border)); motorUnit.toString(), border));
// Sum up total count // Sum up total count
totalMotorCount += motorCount; totalMotorCount += motorCount;
totalPropMass += propMass * motorCount; totalPropMass += propMass * motorCount;
@ -397,7 +397,7 @@ public class DesignReport {
} }
} }
} }
if (totalMotorCount > 1) { if (totalMotorCount > 1) {
int border = Rectangle.TOP; int border = Rectangle.TOP;
final PdfPCell motorVCell = ITextHelper.createCell("Total:", border); final PdfPCell motorVCell = ITextHelper.createCell("Total:", border);
@ -407,73 +407,73 @@ public class DesignReport {
motorTable.addCell(ITextHelper.createCell("", border)); motorTable.addCell(ITextHelper.createCell("", border));
motorTable.addCell(ITextHelper.createCell("", border)); motorTable.addCell(ITextHelper.createCell("", border));
motorTable.addCell(ITextHelper.createCell( motorTable.addCell(ITextHelper.createCell(
UnitGroup.UNITS_IMPULSE.getDefaultUnit().toStringUnit(totalImpulse), border)); UnitGroup.UNITS_IMPULSE.getDefaultUnit().toStringUnit(totalImpulse), border));
motorTable.addCell(ITextHelper.createCell( motorTable.addCell(ITextHelper.createCell(
ttwFormat.format(totalTTW) + ":1", border)); ttwFormat.format(totalTTW) + ":1", border));
motorTable.addCell(ITextHelper.createCell( motorTable.addCell(ITextHelper.createCell(
UnitGroup.UNITS_MASS.getDefaultUnit().toStringUnit(totalPropMass), border)); UnitGroup.UNITS_MASS.getDefaultUnit().toStringUnit(totalPropMass), border));
motorTable.addCell(ITextHelper.createCell("", border)); motorTable.addCell(ITextHelper.createCell("", border));
} }
PdfPCell c = new PdfPCell(motorTable); PdfPCell c = new PdfPCell(motorTable);
c.setBorder(PdfPCell.LEFT); c.setBorder(PdfPCell.LEFT);
c.setBorderWidthTop(0f); c.setBorderWidthTop(0f);
parent.addCell(c); parent.addCell(c);
} }
/** /**
* Add the flight data for a simulation configuration to the table. * Add the flight data for a simulation configuration to the table.
* *
* @param flight the flight data for a single simulation * @param flight the flight data for a single simulation
* @param theRocket the rocket * @param theRocket the rocket
* @param motorId a motor configuration id * @param motorId a motor configuration id
* @param parent the parent to which the simulation flight data will be added * @param parent the parent to which the simulation flight data will be added
* @param leading the number of points for the leading * @param leading the number of points for the leading
*/ */
private void addFlightData(final FlightData flight, final Rocket theRocket, final String motorId, final PdfPTable parent, int leading) { private void addFlightData(final FlightData flight, final Rocket theRocket, final String motorId, final PdfPTable parent, int leading) {
// Output the flight data // Output the flight data
if (flight != null) { if (flight != null) {
try { try {
final Unit distanceUnit = UnitGroup.UNITS_DISTANCE.getDefaultUnit(); final Unit distanceUnit = UnitGroup.UNITS_DISTANCE.getDefaultUnit();
final Unit velocityUnit = UnitGroup.UNITS_VELOCITY.getDefaultUnit(); final Unit velocityUnit = UnitGroup.UNITS_VELOCITY.getDefaultUnit();
final Unit flightTimeUnit = UnitGroup.UNITS_FLIGHT_TIME.getDefaultUnit(); final Unit flightTimeUnit = UnitGroup.UNITS_FLIGHT_TIME.getDefaultUnit();
PdfPTable labelTable = new PdfPTable(2); PdfPTable labelTable = new PdfPTable(2);
labelTable.setWidths(new int[] { 3, 2 }); labelTable.setWidths(new int[] { 3, 2 });
final Paragraph chunk = ITextHelper.createParagraph(stripBrackets( final Paragraph chunk = ITextHelper.createParagraph(stripBrackets(
theRocket.getMotorConfigurationNameOrDescription(motorId)), PrintUtilities.BOLD); theRocket.getMotorConfigurationNameOrDescription(motorId)), PrintUtilities.BOLD);
chunk.setLeading(leading); chunk.setLeading(leading);
chunk.setSpacingAfter(3f); chunk.setSpacingAfter(3f);
document.add(chunk); document.add(chunk);
final PdfPCell cell = ITextHelper.createCell(ALTITUDE, 2, 2); final PdfPCell cell = ITextHelper.createCell(ALTITUDE, 2, 2);
cell.setUseBorderPadding(false); cell.setUseBorderPadding(false);
cell.setBorderWidthTop(0f); cell.setBorderWidthTop(0f);
labelTable.addCell(cell); labelTable.addCell(cell);
labelTable.addCell(ITextHelper.createCell(distanceUnit.toStringUnit(flight.getMaxAltitude()), 2, 2)); labelTable.addCell(ITextHelper.createCell(distanceUnit.toStringUnit(flight.getMaxAltitude()), 2, 2));
labelTable.addCell(ITextHelper.createCell(FLIGHT_TIME, 2, 2)); labelTable.addCell(ITextHelper.createCell(FLIGHT_TIME, 2, 2));
labelTable.addCell(ITextHelper.createCell(flightTimeUnit.toStringUnit(flight.getFlightTime()), 2, 2)); labelTable.addCell(ITextHelper.createCell(flightTimeUnit.toStringUnit(flight.getFlightTime()), 2, 2));
labelTable.addCell(ITextHelper.createCell(TIME_TO_APOGEE, 2, 2)); labelTable.addCell(ITextHelper.createCell(TIME_TO_APOGEE, 2, 2));
labelTable.addCell(ITextHelper.createCell(flightTimeUnit.toStringUnit(flight.getTimeToApogee()), 2, 2)); labelTable.addCell(ITextHelper.createCell(flightTimeUnit.toStringUnit(flight.getTimeToApogee()), 2, 2));
labelTable.addCell(ITextHelper.createCell(VELOCITY_OFF_PAD, 2, 2)); labelTable.addCell(ITextHelper.createCell(VELOCITY_OFF_PAD, 2, 2));
labelTable.addCell(ITextHelper.createCell(velocityUnit.toStringUnit(flight.getLaunchRodVelocity()), 2, 2)); labelTable.addCell(ITextHelper.createCell(velocityUnit.toStringUnit(flight.getLaunchRodVelocity()), 2, 2));
labelTable.addCell(ITextHelper.createCell(MAX_VELOCITY, 2, 2)); labelTable.addCell(ITextHelper.createCell(MAX_VELOCITY, 2, 2));
labelTable.addCell(ITextHelper.createCell(velocityUnit.toStringUnit(flight.getMaxVelocity()), 2, 2)); labelTable.addCell(ITextHelper.createCell(velocityUnit.toStringUnit(flight.getMaxVelocity()), 2, 2));
labelTable.addCell(ITextHelper.createCell(DEPLOYMENT_VELOCITY, 2,2)); labelTable.addCell(ITextHelper.createCell(DEPLOYMENT_VELOCITY, 2, 2));
labelTable.addCell(ITextHelper.createCell(velocityUnit.toStringUnit(flight.getDeploymentVelocity()),2,2)); labelTable.addCell(ITextHelper.createCell(velocityUnit.toStringUnit(flight.getDeploymentVelocity()), 2, 2));
labelTable.addCell(ITextHelper.createCell(LANDING_VELOCITY, 2, 2)); labelTable.addCell(ITextHelper.createCell(LANDING_VELOCITY, 2, 2));
labelTable.addCell(ITextHelper.createCell(velocityUnit.toStringUnit(flight.getGroundHitVelocity()), 2, 2)); labelTable.addCell(ITextHelper.createCell(velocityUnit.toStringUnit(flight.getGroundHitVelocity()), 2, 2));
//Add the table to the parent; have to wrap it in a cell //Add the table to the parent; have to wrap it in a cell
PdfPCell c = new PdfPCell(labelTable); PdfPCell c = new PdfPCell(labelTable);
c.setBorder(PdfPCell.RIGHT); c.setBorder(PdfPCell.RIGHT);
@ -485,36 +485,36 @@ public class DesignReport {
} }
} }
} }
/** /**
* Locate the simulation based on the motor id. Copy the simulation and execute it, then return the resulting * Locate the simulation based on the motor id. Copy the simulation and execute it, then return the resulting
* flight data. * flight data.
* *
* @param motorId the motor id corresponding to the simulation to find * @param motorId the motor id corresponding to the simulation to find
* @param simulations the list of simulations currently associated with the rocket * @param simulations the list of simulations currently associated with the rocket
* *
* @return the flight data from the simulation for the specified motor id, or null if not found * @return the flight data from the simulation for the specified motor id, or null if not found
*/ */
private FlightData findSimulation(final String motorId, List<Simulation> simulations) { private FlightData findSimulation(final String motorId, List<Simulation> simulations) {
// Perform flight simulation // Perform flight simulation
FlightData flight = null; FlightData flight = null;
try { try {
for (int i = 0; i < simulations.size(); i++) { for (int i = 0; i < simulations.size(); i++) {
Simulation simulation = simulations.get(i); Simulation simulation = simulations.get(i);
if (simulation.getOptions().getMotorConfigurationID().equals(motorId)) { if (Utils.equals(simulation.getOptions().getMotorConfigurationID(), motorId)) {
simulation = simulation.copy(); simulation = simulation.copy();
simulation.simulate(); simulation.simulate();
flight = simulation.getSimulatedData(); flight = simulation.getSimulatedData();
break; break;
} }
} }
} catch (SimulationException e1) { } catch (SimulationException e1) {
// Ignore // Ignore
} }
return flight; return flight;
} }
/** /**
* Strip [] brackets from a string. * Strip [] brackets from a string.
* *
* @param target the original string * @param target the original string
@ -524,7 +524,7 @@ public class DesignReport {
private String stripBrackets(String target) { private String stripBrackets(String target) {
return stripLeftBracket(stripRightBracket(target)); return stripLeftBracket(stripRightBracket(target));
} }
/** /**
* Strip [ from a string. * Strip [ from a string.
* *
@ -535,7 +535,7 @@ public class DesignReport {
private String stripLeftBracket(String target) { private String stripLeftBracket(String target) {
return target.replace("[", ""); return target.replace("[", "");
} }
/** /**
* Strip ] from a string. * Strip ] from a string.
* *
@ -546,5 +546,5 @@ public class DesignReport {
private String stripRightBracket(String target) { private String stripRightBracket(String target) {
return target.replace("]", ""); return target.replace("]", "");
} }
} }