From e914b780529fa4b06515855ddac5fe6b30c580e8 Mon Sep 17 00:00:00 2001 From: Robert Sammelson Date: Sun, 26 Sep 2021 03:20:54 -0400 Subject: [PATCH] Use correct zero point for CoG calculation When center of gravity position is overrided, the zero point is the front of component, not the old center of gravity or the front of the parent. --- core/src/net/sf/openrocket/masscalc/MassCalculation.java | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/core/src/net/sf/openrocket/masscalc/MassCalculation.java b/core/src/net/sf/openrocket/masscalc/MassCalculation.java index 3d4242dc8..877147ff7 100644 --- a/core/src/net/sf/openrocket/masscalc/MassCalculation.java +++ b/core/src/net/sf/openrocket/masscalc/MassCalculation.java @@ -343,6 +343,10 @@ public class MassCalculation { // mass data for *this component only* in the rocket-frame compCM = parentTransform.transform( compCM.add(component.getPosition()) ); + + // setting zero as the CG position means the top of the component, which is component.getPosition() + final Coordinate compZero = parentTransform.transform( component.getPosition() ); + if (component.getOverrideSubcomponents()) { if( component.isMassive() ){ // if this component mass, merge it in before overriding: @@ -352,14 +356,13 @@ public class MassCalculation { this.setCM( this.getCM().setWeight(component.getOverrideMass()) ); } if (component.isCGOverridden()) { - this.setCM( this.getCM().setX( compCM.x + component.getOverrideCGX())); + this.setCM( this.getCM().setX( compZero.x + component.getOverrideCGX())); } }else { if (component.isMassOverridden()) { compCM = compCM.setWeight( component.getOverrideMass() ); } if (component.isCGOverridden()) { - final Coordinate compZero = parentTransform.transform( Coordinate.ZERO ); compCM = compCM.setX( compZero.x + component.getOverrideCGX() ); } this.addMass( compCM );