public MultiSegmentSpring(AnimatTools.Framework.DataObject doParent)
            : base(doParent)
        {
            m_thDataTypes.DataTypes.Clear();

            m_thDataTypes.DataTypes.Add(new AnimatTools.DataObjects.DataType("Tension", "Tension", "Newtons", "N", 0, 1000));
            m_thDataTypes.DataTypes.Add(new AnimatTools.DataObjects.DataType("SpringTension", "Spring Tension", "Newtons", "N", 0, 1000));
            m_thDataTypes.DataTypes.Add(new AnimatTools.DataObjects.DataType("DampingTension", "Damping Tension", "Newtons", "N", 0, 1000));
            m_thDataTypes.DataTypes.Add(new AnimatTools.DataObjects.DataType("SpringLength", "Spring Length", "Meters", "m", 0, 1));
            m_thDataTypes.DataTypes.Add(new AnimatTools.DataObjects.DataType("Vspring", "Spring Velocity", "m/s", "m/s", -3, 3));
            m_thDataTypes.DataTypes.Add(new AnimatTools.DataObjects.DataType("Displacement", "Muscle Displacement", "Meters", "m", 0, 1));
            m_thDataTypes.DataTypes.Add(new AnimatTools.DataObjects.DataType("DisplacementRatio", "Muscle Displacement Ratio", "", "", -1, 1));
            m_thDataTypes.DataTypes.Add(new AnimatTools.DataObjects.DataType("Enable", "Enable", "", "", 0, 1));
            m_thDataTypes.DataTypes.Add(new AnimatTools.DataObjects.DataType("Aspring", "Acceleration", "m/s^2", "m/s^2", -100, 100));
            m_thDataTypes.DataTypes.Add(new AnimatTools.DataObjects.DataType("PotEnergy", "Potential Energy", "J", "J", -10, 10));
            m_thDataTypes.ID = "Tension";

            //Holdover stuff from using the muscle base class
            m_StimTension = new AnimatTools.DataObjects.Gains.MuscleGains.StimulusTension(this);
            m_LengthTension = new AnimatTools.DataObjects.Gains.MuscleGains.LengthTension(this);
            m_LengthTension.ShowLcePercentage = false;

            m_snNaturalLength = new AnimatTools.Framework.ScaledNumber(this, "NaturalLength", 1, AnimatTools.Framework.ScaledNumber.enumNumericScale.None, "meters", "m");
            m_snStiffness = new AnimatTools.Framework.ScaledNumber(this, "Stiffness", 50, AnimatTools.Framework.ScaledNumber.enumNumericScale.Kilo, "N/m", "N/m");
            m_snDamping = new AnimatTools.Framework.ScaledNumber(this, "Damping", 1, AnimatTools.Framework.ScaledNumber.enumNumericScale.Kilo, "g/s", "g/s");

            m_thIncomingDataType = new AnimatTools.DataObjects.DataType("Enabled", "Enabled", "", "", 0, 1, ScaledNumber.enumNumericScale.None, ScaledNumber.enumNumericScale.None);
        }
        public LinearHillMuscle(AnimatTools.Framework.DataObject doParent)
            : base(doParent)
        {
            m_thDataTypes.DataTypes.Clear();

            m_thDataTypes.DataTypes.Add(new AnimatTools.DataObjects.DataType("Tension", "Tension", "Newtons", "N", 0, 1000));
            m_thDataTypes.DataTypes.Add(new AnimatTools.DataObjects.DataType("Tdot", "Change in Tension", "Newtons per second", "N/s", 0, 1000));
            m_thDataTypes.DataTypes.Add(new AnimatTools.DataObjects.DataType("MuscleLength", "Muscle Length", "Meters", "m", 0, 1));
            m_thDataTypes.DataTypes.Add(new AnimatTools.DataObjects.DataType("SeLength", "Se Length", "Meters", "m", 0, 1));
            m_thDataTypes.DataTypes.Add(new AnimatTools.DataObjects.DataType("SeDisplacement", "Se Displacement", "Meters", "m", 0, 1));
            m_thDataTypes.DataTypes.Add(new AnimatTools.DataObjects.DataType("PeLength", "Pe Length", "Meters", "m", 0, 1));
            m_thDataTypes.DataTypes.Add(new AnimatTools.DataObjects.DataType("A", "A", "Newtons", "N", 0, 1000));
            m_thDataTypes.DataTypes.Add(new AnimatTools.DataObjects.DataType("Activation", "Activation", "", "", 0, 1000));
            m_thDataTypes.DataTypes.Add(new AnimatTools.DataObjects.DataType("Vmuscle", "Muscle Velocity", "m/s", "m/s", -3, 3));
            m_thDataTypes.DataTypes.Add(new AnimatTools.DataObjects.DataType("Vse", "Se Velocity", "m/s", "m/s", -3, 3));
            m_thDataTypes.DataTypes.Add(new AnimatTools.DataObjects.DataType("Vpe", "Pe Velocity", "m/s", "m/s", -3, 3));
            m_thDataTypes.DataTypes.Add(new AnimatTools.DataObjects.DataType("AvgVmuscle", "Averaged Muscle Velocity", "m/s", "m/s", -3, 3));
            m_thDataTypes.DataTypes.Add(new AnimatTools.DataObjects.DataType("MembraneVoltage", "Membrane Voltage", "Volts", "V", -100, 100, ScaledNumber.enumNumericScale.milli, ScaledNumber.enumNumericScale.milli));
            m_thDataTypes.DataTypes.Add(new AnimatTools.DataObjects.DataType("Displacement", "Muscle Displacement", "Meters", "m", 0, 1));
            m_thDataTypes.DataTypes.Add(new AnimatTools.DataObjects.DataType("DisplacementRatio", "Muscle Displacement Ratio", "", "", -1, 1));
            m_thDataTypes.DataTypes.Add(new AnimatTools.DataObjects.DataType("Enable", "Enable", "", "", 0, 1));
            m_thDataTypes.DataTypes.Add(new AnimatTools.DataObjects.DataType("Ib", "Ib Discharge Rate", "Spikes/s", "Spikes/s", 0, 1000));
            m_thDataTypes.DataTypes.Add(new AnimatTools.DataObjects.DataType("Tl", "Tension-Length Percentage", "%", "%", 0, 1000));
            m_thDataTypes.ID = "Tension";

            m_thIncomingDataType = new AnimatTools.DataObjects.DataType("MembraneVoltage", "Membrane Voltage", "Volts", "V", -100, 100, ScaledNumber.enumNumericScale.milli, ScaledNumber.enumNumericScale.milli);

            m_StimTension = new AnimatTools.DataObjects.Gains.MuscleGains.StimulusTension(this);
            m_LengthTension = new AnimatTools.DataObjects.Gains.MuscleGains.LengthTension(this);
            m_LengthTension.ShowLcePercentage = false;

            m_snMaxTension = new AnimatTools.Framework.ScaledNumber(this, "MaxTension", 100, AnimatTools.Framework.ScaledNumber.enumNumericScale.None, "Newtons", "N");
            m_snMuscleLength = new AnimatTools.Framework.ScaledNumber(this, "MuscleLength", 0, AnimatTools.Framework.ScaledNumber.enumNumericScale.None, "Meters", "m");
            m_snKse = new AnimatTools.Framework.ScaledNumber(this, "Kse", 10, AnimatTools.Framework.ScaledNumber.enumNumericScale.None, "Newtons per meter", "N/m");
            m_snKpe = new AnimatTools.Framework.ScaledNumber(this, "Kpe", 1, AnimatTools.Framework.ScaledNumber.enumNumericScale.None, "Newtons per meter", "N/m");
            m_snB = new AnimatTools.Framework.ScaledNumber(this, "B", 1, AnimatTools.Framework.ScaledNumber.enumNumericScale.None, "Newton-seconds per meter", "Ns/m");

            m_snPeLengthPercentage = new AnimatTools.Framework.ScaledNumber(this, "PeLengthPercentage", 90, AnimatTools.Framework.ScaledNumber.enumNumericScale.None, "%", "%");
            m_snMinPeLengthPercentage = new AnimatTools.Framework.ScaledNumber(this, "MinPeLengthPercentage", 5, AnimatTools.Framework.ScaledNumber.enumNumericScale.None, "%", "%");

            m_snIbDischargeConstant = new AnimatTools.Framework.ScaledNumber(this, "Ib Discharge Constant", 100, AnimatTools.Framework.ScaledNumber.enumNumericScale.None, "Spikes/sN", "Spikes/sN");
        }