diff --git a/swing/src/net/sf/openrocket/gui/rocketfigure/MassObjectShapes.java b/swing/src/net/sf/openrocket/gui/rocketfigure/MassObjectShapes.java index fbf20809e..804aaf034 100644 --- a/swing/src/net/sf/openrocket/gui/rocketfigure/MassObjectShapes.java +++ b/swing/src/net/sf/openrocket/gui/rocketfigure/MassObjectShapes.java @@ -53,6 +53,8 @@ public class MassObjectShapes extends RocketComponentShapes { break; case BATTERY: s = addBatterySymbol(s); + break; + case MASSCOMPONENT: } return s; @@ -75,12 +77,14 @@ public class MassObjectShapes extends RocketComponentShapes { } private static Shape[] addAltimeterSymbol(Shape[] baseShape){ + int offset=baseShape.length; Shape[] newShape = new Shape[baseShape.length+1]; + System.arraycopy(baseShape, 0, newShape, 0, baseShape.length); + Rectangle2D bounds = baseShape[0].getBounds2D(); Double vMargin = bounds.getHeight()/8.0; Double hMargin = bounds.getWidth()/2.25; Double halfArrowWidth=MathUtil.min(hMargin, vMargin); - newShape[0]=baseShape[0]; Path2D.Double symbol = new Path2D.Double(); symbol.moveTo(bounds.getCenterX(), bounds.getY()+vMargin); @@ -89,13 +93,15 @@ public class MassObjectShapes extends RocketComponentShapes { symbol.lineTo(bounds.getCenterX()+halfArrowWidth, bounds.getY()+6*vMargin); symbol.lineTo(bounds.getCenterX(), bounds.getY()+7*vMargin); - newShape[1]= symbol; + newShape[offset]= symbol; return newShape; } private static Shape[] addFlightComputerSymbol(Shape[] baseShape){ int pins=12; + int offset=baseShape.length; Shape[] newShape = new Shape[baseShape.length+1+pins]; + System.arraycopy(baseShape, 0, newShape, 0, baseShape.length); Rectangle2D bounds = baseShape[0].getBounds2D(); @@ -105,11 +111,10 @@ public class MassObjectShapes extends RocketComponentShapes { Double pinHeight=vMargin; Double pinSpacing=(bounds.getWidth()-2*hMargin)/(pins+1); Double pinWidth=pinSpacing/2; - newShape[0]=baseShape[0]; - newShape[1]=new Rectangle2D.Double(bounds.getX()+hMargin, bounds.getY()+2*vMargin, 4*hMargin,4*vMargin); + newShape[offset]=new Rectangle2D.Double(bounds.getX()+hMargin, bounds.getY()+2*vMargin, 4*hMargin,4*vMargin); for(int i=0; i<(pins/2); i++){ - newShape[i+2]=new Rectangle2D.Double(bounds.getX()+hMargin+2*i*pinSpacing+pinSpacing, bounds.getY()+6*vMargin, pinWidth, pinHeight); - newShape[i+pins/2+2]=new Rectangle2D.Double(bounds.getX()+hMargin+2*i*pinSpacing+pinSpacing, bounds.getY()+vMargin, pinWidth, pinHeight); + newShape[i+1+offset]=new Rectangle2D.Double(bounds.getX()+hMargin+2*i*pinSpacing+pinSpacing, bounds.getY()+6*vMargin, pinWidth, pinHeight); + newShape[i+pins/2+1+offset]=new Rectangle2D.Double(bounds.getX()+hMargin+2*i*pinSpacing+pinSpacing, bounds.getY()+vMargin, pinWidth, pinHeight); } //newShape[1]=symbol; return newShape; @@ -117,13 +122,14 @@ public class MassObjectShapes extends RocketComponentShapes { private static Shape[] addTrackerSymbol(Shape[] baseShape){ Shape[] newShape = new Shape[baseShape.length+7]; + int offset=baseShape.length; + System.arraycopy(baseShape, 0, newShape, 0, baseShape.length); Rectangle2D bounds = baseShape[0].getBounds2D(); Double vMargin=bounds.getWidth()/10; Double xCenter=bounds.getCenterX(); Double yCenter=bounds.getCenterY(); - newShape[0]=baseShape[0]; Double arcExtent = 60.0; Double arcStart1 = 360-arcExtent/2; @@ -132,43 +138,47 @@ public class MassObjectShapes extends RocketComponentShapes { if(3*vMargin*Math.sin(Math.toRadians(arcExtent/2))>0.9*bounds.getHeight()/2){ vMargin=0.9*bounds.getHeight()/(6*Math.sin(Math.toRadians(arcExtent/2))); } - newShape[1]= new Ellipse2D.Double(xCenter-vMargin/2, yCenter-vMargin/2,vMargin,vMargin); + newShape[offset]= new Ellipse2D.Double(xCenter-vMargin/2, yCenter-vMargin/2,vMargin,vMargin); for(int i=1; i<4; i++){ - newShape[i+1]= new Arc2D.Double(xCenter-i*vMargin, yCenter-i*vMargin, 2*i*vMargin, 2*i*vMargin, arcStart1,arcExtent,Arc2D.OPEN); - newShape[i+4]= new Arc2D.Double(xCenter-i*vMargin, yCenter-i*vMargin, 2*i*vMargin, 2*i*vMargin, arcStart2,arcExtent,Arc2D.OPEN); + newShape[i+offset]= new Arc2D.Double(xCenter-i*vMargin, yCenter-i*vMargin, 2*i*vMargin, 2*i*vMargin, arcStart1,arcExtent,Arc2D.OPEN); + newShape[i+3+offset]= new Arc2D.Double(xCenter-i*vMargin, yCenter-i*vMargin, 2*i*vMargin, 2*i*vMargin, arcStart2,arcExtent,Arc2D.OPEN); } return newShape; } private static Shape[] addPayloadSymbol(Shape[] baseShape){ Shape[] newShape = new Shape[baseShape.length+1]; - newShape[0]=baseShape[0]; + int offset=baseShape.length; + System.arraycopy(baseShape, 0, newShape, 0, baseShape.length); + Rectangle2D bounds = baseShape[0].getBounds2D(); Double vMargin=bounds.getHeight()/10; Double hMargin=bounds.getWidth()/10; - newShape[1]= new Ellipse2D.Double(bounds.getX()+hMargin, bounds.getY()+vMargin,bounds.getWidth()-2*hMargin,bounds.getHeight()-2*vMargin); + newShape[offset]= new Ellipse2D.Double(bounds.getX()+hMargin, bounds.getY()+vMargin,bounds.getWidth()-2*hMargin,bounds.getHeight()-2*vMargin); return newShape; } private static Shape[] addRecoveryHardwareSymbol(Shape[] baseShape){ Shape[] newShape = new Shape[baseShape.length+3]; - newShape[0]=baseShape[0]; + int offset=baseShape.length; + System.arraycopy(baseShape, 0, newShape, 0, baseShape.length); Rectangle2D bounds = baseShape[0].getBounds2D(); Double vMargin=bounds.getHeight()/8; Double hMargin=bounds.getWidth()/8; - newShape[1]= new RoundRectangle2D.Double(bounds.getX()+hMargin, bounds.getY()+vMargin,bounds.getWidth()-2*hMargin,bounds.getHeight()-2*vMargin, 15, 5); - newShape[2]= new RoundRectangle2D.Double(bounds.getX()+hMargin+vMargin, bounds.getY()+2*vMargin,bounds.getWidth()-2*hMargin-2*vMargin,bounds.getHeight()-4*vMargin, 15, 5); - newShape[3]= new Rectangle2D.Double(bounds.getCenterX()-1.5*hMargin, bounds.getCenterY()+1.5*vMargin, 3*hMargin, 2*vMargin); + newShape[offset]= new RoundRectangle2D.Double(bounds.getX()+hMargin, bounds.getY()+vMargin,bounds.getWidth()-2*hMargin,bounds.getHeight()-2*vMargin, 15, 5); + newShape[offset+1]= new RoundRectangle2D.Double(bounds.getX()+hMargin+vMargin, bounds.getY()+2*vMargin,bounds.getWidth()-2*hMargin-2*vMargin,bounds.getHeight()-4*vMargin, 15, 5); + newShape[offset+2]= new Rectangle2D.Double(bounds.getCenterX()-1.5*hMargin, bounds.getCenterY()+1.5*vMargin, 3*hMargin, 2*vMargin); return newShape; } private static Shape[] addDeploymentChargeSymbol(Shape[] baseShape){ int rays=15; - Shape[] newShape = new Shape[baseShape.length+rays]; - newShape[0]=baseShape[0]; + Shape[] newShape = new Shape[baseShape.length+2]; + int offset=baseShape.length; + System.arraycopy(baseShape, 0, newShape, 0, baseShape.length); Rectangle2D bounds = baseShape[0].getBounds2D(); @@ -177,13 +187,16 @@ public class MassObjectShapes extends RocketComponentShapes { Double yCenter=bounds.getCenterY(); Random rand = new Random(); - newShape[1]= new Arc2D.Double(xCenter-2*vMargin, yCenter-2*vMargin,4*vMargin,4*vMargin, 55.0, 180.0, Arc2D.OPEN); + newShape[offset]= new Arc2D.Double(xCenter-2*vMargin, yCenter-2*vMargin,4*vMargin,4*vMargin, 55.0, 180.0, Arc2D.CHORD); + + Path2D.Double explosion = new Path2D.Double(); + newShape[offset+1]=explosion; + for(int i=1; i