/// <summary>
        /// Attempt a cast from generic object.
        /// </summary>
        /// <param name="source"> Reference to source of cast. </param>
        /// <returns> True on success, false on failure. </returns>
        public override bool CastFrom(object source)
        {
            if (source == null)
            {
                return(false);
            }

            //Cast from Aboslute Joint Movement
            if (typeof(AbsoluteJointMovement).IsAssignableFrom(source.GetType()))
            {
                Value = source as AbsoluteJointMovement;
                return(true);
            }

            //Cast from Aboslute Joint Movement Goo
            if (typeof(GH_AbsoluteJointMovement).IsAssignableFrom(source.GetType()))
            {
                GH_AbsoluteJointMovement absoluteJointMovementGoo = source as GH_AbsoluteJointMovement;
                Value = absoluteJointMovementGoo.Value;
                return(true);
            }

            //Cast from Action
            if (typeof(RobotComponents.Actions.Action).IsAssignableFrom(source.GetType()))
            {
                if (source is AbsoluteJointMovement action)
                {
                    Value = action;
                    return(true);
                }
            }

            //Cast from Action Goo
            if (typeof(GH_Action).IsAssignableFrom(source.GetType()))
            {
                GH_Action actionGoo = source as GH_Action;
                if (actionGoo.Value is AbsoluteJointMovement action)
                {
                    Value = action;
                    return(true);
                }
            }

            return(false);
        }
        /// <summary>
        /// Attempt a cast from generic object.
        /// </summary>
        /// <param name="source"> Reference to source of cast. </param>
        /// <returns> True on success, false on failure. </returns>
        public override bool CastFrom(object source)
        {
            if (source == null)
            {
                return(false);
            }

            //Cast from Auto Axis Config
            if (typeof(AutoAxisConfig).IsAssignableFrom(source.GetType()))
            {
                Value = source as AutoAxisConfig;
                return(true);
            }

            //Cast from Boolean
            if (typeof(GH_Boolean).IsAssignableFrom(source.GetType()))
            {
                GH_Boolean ghBoolean = source as GH_Boolean;
                Value = new AutoAxisConfig(ghBoolean.Value);
                return(true);
            }

            //Cast from Action
            if (typeof(RobotComponents.Actions.Action).IsAssignableFrom(source.GetType()))
            {
                if (source is AutoAxisConfig action)
                {
                    Value = action;
                    return(true);
                }
            }

            //Cast from Action Goo
            if (typeof(GH_Action).IsAssignableFrom(source.GetType()))
            {
                GH_Action actionGoo = source as GH_Action;
                if (actionGoo.Value is AutoAxisConfig action)
                {
                    Value = action;
                    return(true);
                }
            }

            //Cast from Instruction
            if (typeof(IInstruction).IsAssignableFrom(source.GetType()))
            {
                if (source is AutoAxisConfig instruction)
                {
                    Value = instruction;
                    return(true);
                }
            }

            //Cast from Instruction Goo
            if (typeof(GH_Instruction).IsAssignableFrom(source.GetType()))
            {
                GH_Instruction instructionGoo = source as GH_Instruction;
                if (instructionGoo.Value is AutoAxisConfig instruction)
                {
                    Value = instruction;
                    return(true);
                }
            }
            return(false);
        }