Пример #1
0
        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);
        }
Пример #2
0
        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);
        }