private void MoveGears(ref movementCase oC, int Notches) { gears.InnerGear Inner = new gears.InnerGear(); gears.BaseGear LastbaseG = new gears.BaseGear(); gears.InnerGear LastInnerG = new gears.InnerGear(); foreach (gears.BaseGear baseG in oC.baseGears) { String GearType = baseG.GetType().ToString(); switch (GearType) { case "Watch.gears.BaseGear": { baseG.BaseMove(LastbaseG, LastInnerG, Notches); LastbaseG = baseG; break; } case "Watch.gears.InnerGear": { Inner = (gears.InnerGear)baseG; Inner.InnerMove(LastbaseG, LastInnerG, Notches); LastInnerG = Inner; break; } } } return; }
public Watch.gears.BaseGear BaseMove(Watch.gears.BaseGear previousbaseGear, gears.InnerGear previousInnerGear, int Notches) { int OnceOnly = 0; // for trouble shooting purposes, if entry into more than 1 routine, there is a bug Watch.movement.supporting oSupport = new Watch.movement.supporting(); EffectiveRatioBaseDrive = 1; // calculate intra-gear ratio if ((!BaseTeethDrivenBy) && (BaseTeethDriving)) { BaseTeethNotchesTraversed = BaseTeethNotchesTraversed + (double)Notches; OnceOnly++; } if ((BaseTeethDrivenBy) && (previousbaseGear.BaseTeethDriving)) { if (BaseTeethDrivenByGearID.Equals(previousbaseGear.GearID)) { if (previousbaseGear.BaseTeethDrivingGearID.Equals(GearID)) { BaseTeethNotchesTraversed = previousbaseGear.BaseTeethNotchesTraversed; Rotation = oSupport.GetNxtRotation(previousbaseGear.Rotation); OnceOnly++; } } } if ((BaseTeethDrivenBy) && (previousInnerGear.BaseTeethDriving)) { if (BaseTeethDrivenByGearID.Equals(previousInnerGear.GearID)) { if (previousInnerGear.BaseTeethDrivingGearID.Equals(GearID)) { BaseTeethNotchesTraversed = previousInnerGear.BaseTeethNotchesTraversed; Rotation = oSupport.GetNxtRotation(previousInnerGear.Rotation); OnceOnly++; } } } if ((BaseTeethDrivenBy) && (previousInnerGear.InnerTeethDriving)) { if (BaseTeethDrivenByGearID.Equals(previousInnerGear.GearID)) { if (previousInnerGear.InnerTeethDrivingGearID.Equals(GearID)) { BaseTeethNotchesTraversed = previousInnerGear.InnerTeethNotchesTraversed; Rotation = oSupport.GetNxtRotation(previousInnerGear.Rotation); OnceOnly++; } } } if (!OnceOnly.Equals(1)) { throw new Exception("Base Teeth, entered " + OnceOnly.ToString() + " times!"); } BaseGearRevolutions = BaseTeethNotchesTraversed / BaseTeeth; return(this); }
public Watch.gears.InnerGear InnerMove(Watch.gears.BaseGear previousbaseGear, gears.InnerGear previousInnerGear, int Notches) { int OnceOnly = 0; Watch.movement.supporting oSupport = new Watch.movement.supporting(); // calculate intra-gear ratios EffectiveRatioBaseDrive = (Double)BaseTeeth / InnerTeeth; EffectiveRatioInnerDrive = (Double)InnerTeeth / BaseTeeth; if (GearID.Equals(1)) { if (((!BaseTeethDrivenBy) && (InnerTeethDriving)) || ((BaseTeethDriving) && (!InnerTeethDriving))) { BaseTeethNotchesTraversed = BaseTeethNotchesTraversed + (double)Notches; InnerTeethNotchesTraversed = BaseTeethNotchesTraversed * EffectiveRatioInnerDrive; OnceOnly++; } } else { if ((InnerTeethDrivenBy) && (previousbaseGear.BaseTeethDriving)) { if (InnerTeethDrivenByGearID.Equals(previousbaseGear.GearID)) { if (previousbaseGear.BaseTeethDrivingGearID.Equals(GearID)) { InnerTeethNotchesTraversed = previousbaseGear.BaseTeethNotchesTraversed; BaseTeethNotchesTraversed = InnerTeethNotchesTraversed * EffectiveRatioBaseDrive; Rotation = oSupport.GetNxtRotation(previousbaseGear.Rotation); OnceOnly++; } } } if ((BaseTeethDrivenBy) && (previousbaseGear.BaseTeethDriving)) { if (BaseTeethDrivenByGearID.Equals(previousbaseGear.GearID)) { if (previousbaseGear.BaseTeethDrivingGearID.Equals(GearID)) { BaseTeethNotchesTraversed = previousbaseGear.BaseTeethNotchesTraversed; InnerTeethNotchesTraversed = EffectiveRatioInnerDrive * BaseTeethNotchesTraversed; Rotation = oSupport.GetNxtRotation(previousbaseGear.Rotation); OnceOnly++; } } } if ((BaseTeethDrivenBy) && (previousInnerGear.BaseTeethDriving)) { if (BaseTeethDrivenByGearID.Equals(previousInnerGear.GearID)) { if (previousInnerGear.BaseTeethDrivingGearID.Equals(GearID)) { BaseTeethNotchesTraversed = previousInnerGear.BaseTeethNotchesTraversed; InnerTeethNotchesTraversed = BaseTeethNotchesTraversed * EffectiveRatioInnerDrive; Rotation = oSupport.GetNxtRotation(previousInnerGear.Rotation); OnceOnly++; } } } if ((BaseTeethDrivenBy) && (previousInnerGear.InnerTeethDriving)) { if (BaseTeethDrivenByGearID.Equals(previousInnerGear.GearID)) { if (previousInnerGear.InnerTeethDrivingGearID.Equals(GearID)) { BaseTeethNotchesTraversed = previousInnerGear.InnerTeethNotchesTraversed; InnerTeethNotchesTraversed = BaseTeethNotchesTraversed * EffectiveRatioInnerDrive; Rotation = oSupport.GetNxtRotation(previousInnerGear.Rotation); OnceOnly++; } } } } if (!OnceOnly.Equals(1)) { throw new Exception("Inner Teeth, entered " + OnceOnly.ToString() + " times!"); } BaseGearRevolutions = Math.Round(BaseTeethNotchesTraversed / BaseTeeth, 10); InnerGearRevolutions = Math.Round(InnerTeethNotchesTraversed / InnerTeeth, 10); if (!BaseGearRevolutions.Equals(InnerGearRevolutions)) { throw new Exception("Inner and Base teeth revs do not match!"); } return(this); }