public override void LoadData(ref AnimatTools.DataObjects.Simulation dsSim, ref AnimatTools.DataObjects.Physical.PhysicalStructure doStructure, ref AnimatTools.Interfaces.StdXml oXml)
        {
            base.LoadData (ref dsSim, ref doStructure, ref oXml);

            oXml.IntoElem();

            oXml.IntoChildElement("Constraint");
            m_fltMinAngle = oXml.GetAttribFloat("Low");
            m_fltMaxAngle = oXml.GetAttribFloat("High");
            oXml.OutOfElem(); //out of Constraint

            m_snMinAngle.SetFromValue(Util.RadiansToDegrees(m_fltMinAngle), AnimatTools.Framework.ScaledNumber.enumNumericScale.None);
            m_snMaxAngle.SetFromValue(Util.RadiansToDegrees(m_fltMaxAngle), AnimatTools.Framework.ScaledNumber.enumNumericScale.None);

            m_bEnableMotor = oXml.GetChildBool("EnableMotor");
            m_bServoMotor = oXml.GetChildBool("ServoMotor", m_bServoMotor);
            m_fltServoGain = oXml.GetChildFloat("ServoGain", m_fltServoGain);

            //based on whether this is a servo motor or not the incoming data type will change.
            if(m_bServoMotor)
                m_thIncomingDataType = new AnimatTools.DataObjects.DataType("Position", "Position", "rad", "rad", -3.142, 3.142, ScaledNumber.enumNumericScale.None, ScaledNumber.enumNumericScale.None);
            else
                m_thIncomingDataType = new AnimatTools.DataObjects.DataType("DesiredVelocity", "Desired Velocity", "m/s", "m/s", -5, 5, ScaledNumber.enumNumericScale.None, ScaledNumber.enumNumericScale.None);

            if(oXml.FindChildElement("MaxTorque", false))
                m_snMaxTorque.LoadData(ref oXml, "MaxTorque");

            if(oXml.FindChildElement("MaxVelocity", false))
                m_snMaxTorque.LoadData(ref oXml, "MaxVelocity");

            //			if(oXml.FindChildElement("RotationAxis", false))
            //			{
            //				Vec3d vTmp = Util.LoadVec3d(ref oXml, "RotationAxis", this);
            //				m_v3Axis = new Vector3((float)vTmp.X, (float)vTmp.Y, (float)vTmp.Z);
            //			}

            m_v3Axis = new Vector3(0,0,1);
            oXml.OutOfElem(); //out of body
        }
        public override void LoadData(ref AnimatTools.DataObjects.Simulation dsSim, ref AnimatTools.DataObjects.Physical.PhysicalStructure doStructure, ref AnimatTools.Interfaces.StdXml oXml)
        {
            base.LoadData (ref dsSim, ref doStructure, ref oXml);

            oXml.IntoElem();

            if(oXml.FindChildElement("Constraint", false))
            {
                oXml.IntoChildElement("Constraint");
                m_fltMinMovement = oXml.GetAttribFloat("Low");
                m_fltMaxMovement = oXml.GetAttribFloat("High");
                oXml.OutOfElem(); //out of Constraint
            }

            m_fltLength = oXml.GetChildFloat("Length", m_fltLength);
            m_bEnableMotor = oXml.GetChildBool("EnableMotor", false);
            m_bServoMotor = oXml.GetChildBool("ServoMotor", m_bServoMotor);
            m_fltServoGain = oXml.GetChildFloat("ServoGain", m_fltServoGain);

            if(oXml.FindChildElement("MaxForce", false))
                m_snMaxForce.LoadData(ref oXml, "MaxForce");

            if(oXml.FindChildElement("MaxVelocity", false))
                m_snMaxVelocity.LoadData(ref oXml, "MaxVelocity");

            oXml.OutOfElem(); //out of body
        }