/// <summary>
        /// Method to initialize all the Axes involved in the wheel assembly.Called only once during 1st time initialization which happenes using <see cref="SetupChangeDatabase()"/> construction
        /// </summary>
        /// <param name="scm">Object of the SuspensionCoordinateMaster Class</param>
        public void InitializePointsAndVectors(SetupChange_CornerVariables sccv, SuspensionCoordinatesMaster scm, Dictionary <string, AdjustmentTools> adjToolDictionary)
        {
            ///<summary>Creating a vector out the Spindle End Coordinates so that I can use the Mathnet.Euclidean functions to calcualate its angles with respect to space</summary>
            WheelSpindle = new Custom3DGeometry(new Point3D(scm.K1x, scm.K1y, scm.K1z), new Point3D(scm.L1x, scm.L1y, scm.L1z));

            ///<summary>Creating the contact patch point</summary>
            ContactPatch = new ChildPoint_VariablePoint(new Point3D(scm.W1x, scm.W1y, scm.W1z));

            ///<summary>Creatng the Ball Joints</summary>
            LBJ            = new Point3D(scm.E1x, scm.E1y, scm.E1z);
            UBJ            = new Point3D(scm.F1x, scm.F1y, scm.F1z);
            ToeLinkUpright = new Point3D(scm.M1x, scm.M1y, scm.M1z);

            ///<summary>Initializing axes passing through the wheel centre. These will be used to initialize other axes</summary>
            WheelCentreAxis = new StandardAxesLines(new Point3D(scm.K1x, scm.K1y, scm.K1z), new Point3D(scm.K1x, scm.K1y, scm.K1z + 100),
                                                    new Point3D(scm.K1x, scm.K1y, scm.K1z), new Point3D(scm.K1x + 100, scm.K1y, scm.K1z),
                                                    new Point3D(scm.K1x, scm.K1y, scm.K1z), new Point3D(scm.K1x, scm.K1y + 100, scm.K1z));

            ///<summary>
            ///Initializing the SteeringAxis Vector
            ///</summary>
            ///<remarks>Initialization of the Steering Axis</remarks>
            SteeringAxis = new Custom3DGeometry(LBJ, UBJ);
            InitializeAuxillaries(0);

            UprightTriangle.Add(new Triangle(/*new Point3D(UBJ.X, UBJ.Y, UBJ.Z),*/ UBJ, /*new Point3D(LBJ.X, LBJ.Y, LBJ.Z)*/ LBJ, /* new Point3D(ToeLinkUpright.X, ToeLinkUpright.Y, ToeLinkUpright.Z)*/ ToeLinkUpright));

            ///<summary>Initializing the <see cref="LBJToToeLink"/> Vector</summary>
            LBJToToeLink = new Custom3DGeometry(LBJ, ToeLinkUpright);
            ///<summary>Initializing the <see cref="UBJToToeLink"/> Vector</summary>
            UBJToToeLink = new Custom3DGeometry(UBJ, ToeLinkUpright);

            ///<summary></summary>
            AdjOptions = new AdjustmentOptions(scm, this, adjToolDictionary, sccv);
        }
 /// <summary>
 /// Method to assign the KPI Master Adjuster
 /// </summary>
 /// <param name="_adjToolDictionary">tionary which is initialized with all the <see cref="AdjustmentTools"/> the user has selected for each Setup Change</param>
 private void AssignKPIAdjuster(SetupChange_CornerVariables _sccv, Dictionary <string, AdjustmentTools> _adjToolDictionary, SetupChangeDatabase _scd)
 {
     if (_sccv.kpiAdjustmentTool == AdjustmentTools.TopFrontArm || _sccv.kpiAdjustmentTool == AdjustmentTools.DirectValue)
     {
         _adjToolDictionary["KPIChange"] = _sccv.kpiAdjustmentTool;
         MKPIAdjusterLine   = TopFrontArm;
         MKPIAdjusterVector = TopFrontVector;
         AxisRotation_KPI   = _scd.LBJToToeLink.Line.DeltaLine;
         UprightIndexForKPI = 0;
     }
     else if (_sccv.kpiAdjustmentTool == AdjustmentTools.TopRearArm)
     {
         _adjToolDictionary["KPIChange"] = _sccv.kpiAdjustmentTool;
         MKPIAdjusterLine   = TopRearArm;
         MKPIAdjusterVector = TopRearVector;
         AxisRotation_KPI   = _scd.LBJToToeLink.Line.DeltaLine;
         UprightIndexForKPI = 0;
     }
     else if (_sccv.kpiAdjustmentTool == AdjustmentTools.BottomFrontArm)
     {
         _adjToolDictionary["KPIChange"] = _sccv.kpiAdjustmentTool;
         MKPIAdjusterLine   = BottomFrontArm;
         MKPIAdjusterVector = BottomFrontArmVector;
         AxisRotation_KPI   = _scd.UBJToToeLink.Line.DeltaLine;
         UprightIndexForKPI = 1;
     }
     else if (_sccv.kpiAdjustmentTool == AdjustmentTools.BottomRearArm)
     {
         _adjToolDictionary["KPIChange"] = _sccv.kpiAdjustmentTool;
         MKPIAdjusterLine   = BottomRearArm;
         MKPIAdjusterVector = BottomRearArmVector;
         AxisRotation_KPI   = _scd.UBJToToeLink.Line.DeltaLine;
         UprightIndexForKPI = 1;
     }
 }
Exemplo n.º 3
0
        /// <summary>
        /// <para>Method to Modify the <see cref="SetupChange_CornerVariables"/> objects of this</para>
        /// <para>This method is called immediately as a change is made in the <see cref="XUC_SetupChange_Children"/></para>
        /// </summary>
        /// <param name="_setupChangeGUI">GUI Object of <see cref="SetupChange_GUI"/></param>
        /// <param name="_setupChange_CV_Master_GUI"><see cref="SetupChange_CornerVariables"/> object of the <see cref="SetupChange_GUI"/> class which is going to be passed onto the <see cref="SetupChange_CornerVariables"/>
        /// object of this class</param>
        /// <param name="identifier"></param>
        public void InitOrEditDeltas(SetupChange_GUI _setupChangeGUI, SetupChange_CornerVariables _setupChange_CV_Master_GUI, int identifier)
        {
            setupChangeGUI = _setupChangeGUI;

            setupChange_CV_Master = new SetupChange_CornerVariables();

            setupChange_CV_Master = _setupChange_CV_Master_GUI;

            if (identifier == 1)
            {
                setupChange_CV_FL = null;
                setupChange_CV_FL = setupChange_CV_Master;
            }
            else if (identifier == 2)
            {
                setupChange_CV_FR = null;
                setupChange_CV_FR = setupChange_CV_Master;
            }
            else if (identifier == 3)
            {
                setupChange_CV_RL = null;
                setupChange_CV_RL = setupChange_CV_Master;
            }
            else if (identifier == 4)
            {
                setupChange_CV_RR = null;
                setupChange_CV_RR = setupChange_CV_Master;
            }
        }
Exemplo n.º 4
0
        internal void DisplayOutputs(SetupChange_Outputs setup_OP_FL, SetupChange_CornerVariables cvFL, SetupChange_Outputs setup_OP_FR, SetupChange_CornerVariables cvFR,
                                     SetupChange_Outputs setup_OP_RL, SetupChange_CornerVariables cvRL, SetupChange_Outputs setup_OP_RR, SetupChange_CornerVariables cvRR)
        {
            bool Converged = true;


            ///<summary>Setting the Front Left Outputs</summary>
            SetupChangeFL_Results.DisplayIndividualOutputs(OC_FL, setup_OP_FL, cvFL, SetupChangeFL_Results, SetupChangeFL_Results.vGridControl1, ref Converged);
            ///<summary>Plotting the User's and Calculated Bump Steer Curve. If they are not requested, their count will be zero and it will be taken care of </summary>
            SetupChangeFL_Results.PlotBumpSteerGraph(setup_OP_FL, cvFL, SetupChangeFL_Results);

            ///<summary>Setting the Front Right Outputs</summary>
            SetupChangeFR_Results.DisplayIndividualOutputs(OC_FR, setup_OP_FR, cvFR, SetupChangeFR_Results, SetupChangeFR_Results.vGridControl1, ref Converged);
            ///<summary>Plotting the User's and Calculated Bump Steer Curve. If they are not requested, their count will be zero and it will be taken care of </summary>
            SetupChangeFR_Results.PlotBumpSteerGraph(setup_OP_FR, cvFR, SetupChangeFR_Results);

            ///<summary>Setting the Rear Left Outputs</summary>
            SetupChangeRL_Results.DisplayIndividualOutputs(OC_RL, setup_OP_RL, cvRL, SetupChangeRL_Results, SetupChangeRL_Results.vGridControl1, ref Converged);
            ///<summary>Plotting the User's and Calculated Bump Steer Curve. If they are not requested, their count will be zero and it will be taken care of </summary>
            SetupChangeFR_Results.PlotBumpSteerGraph(setup_OP_RL, cvRL, SetupChangeRL_Results);

            ///<summary>Setting the Rear Right Outputs</summary>
            SetupChangeRR_Results.DisplayIndividualOutputs(OC_RR, setup_OP_RR, cvRR, SetupChangeRR_Results, SetupChangeRR_Results.vGridControl1, ref Converged);
            ///<summary>Plotting the User's and Calculated Bump Steer Curve. If they are not requested, their count will be zero and it will be taken care of </summary>
            SetupChangeRR_Results.PlotBumpSteerGraph(setup_OP_RR, cvRR, SetupChangeRR_Results);

            ///<summary>Displaying the Results Panel in a Floating Style</summary>
            FloatOutputDockPanel();
        }
        /// <summary>
        /// Method to initialize the Parent Data of the Bump Steer Chart
        /// ---IMP---This is used only for the Input section of the Setup Change and not the Output Section
        /// </summary>
        /// <param name="_setupCV"></param>
        public void GetParentObjectData(SetupChange_CornerVariables _setupCV)
        {
            Setup_CV = _setupCV;

            Setup_CV.BS_Params = BumpSteerParms;

            AddPointToChart(chartControl1, 0, 0, 0, false);
        }
Exemplo n.º 6
0
        /// <summary>
        /// Method to edit the actual Setup Change class' object
        /// </summary>
        /// <param name="setupChangeMaster"></param>
        /// <param name="identifier"></param>
        public void EditSetupChangeDeltas(SetupChange_CornerVariables setupChangeMaster, int identifier)
        {
            R1 = Kinematics_Software_New.AssignFormVariable();

            int indexSetup = R1.navBarGroupSetupChange.SelectedLinkIndex;

            SetupChange.List_SetupChange[indexSetup].InitOrEditDeltas(this, setupChangeMaster, identifier);
        }
        /// <summary>
        /// Method to Assign the Master Adjusters based on the <see cref="AdjustmentTools"/> which the user has selected for each SetupChange
        /// </summary>
        /// <param name="adjToolDictionary">tionary which is initialized with all the <see cref="AdjustmentTools"/> the user has selected for each Setup Change</param>
        internal void AssignMasterAdjusters(SetupChange_CornerVariables sccv, Dictionary <string, AdjustmentTools> adjToolDictionary, SetupChangeDatabase scd)
        {
            AssignCamberAdjust(sccv, adjToolDictionary, scd);

            AssignToeAdjuster(scd);

            AssignCasterAdjuster(sccv, adjToolDictionary, scd);

            AssignKPIAdjuster(sccv, adjToolDictionary, scd);

            AssignRideHeightAdjuster(adjToolDictionary);
        }
 /// <summary>
 /// Method to assing the Camber Master Adjuster
 /// </summary>
 /// <param name="_adjToolDictionary">tionary which is initialized with all the <see cref="AdjustmentTools"/> the user has selected for each Setup Change</param>
 private void AssignCamberAdjust(SetupChange_CornerVariables _sccv, Dictionary <string, AdjustmentTools> _adjToolDictionary, SetupChangeDatabase _scd)
 {
     if (_sccv.camberAdjustmentTool == AdjustmentTools.TopCamberMount || _sccv.camberAdjustmentTool == AdjustmentTools.DirectValue)
     {
         MCamberAdjusterLine   = TopCamberShimsLine;
         MCamberAdjusterVector = TopCamberShimsVector;
         AxisRotation_Camber   = _scd.LBJToToeLink.Line.DeltaLine;
         _sccv.AdjToolsDictionary["CamberChange"] = _sccv.camberAdjustmentTool;
         UprightIndexForCamber = 0;
     }
     else if (_sccv.camberAdjustmentTool == AdjustmentTools.BottomCamberMount)
     {
         MCamberAdjusterLine   = BottomCamberShimsLine;
         MCamberAdjusterVector = BottomCamberShimsVector;
         AxisRotation_Camber   = _scd.UBJToToeLink.Line.DeltaLine;
         _sccv.AdjToolsDictionary["CamberChange"] = _sccv.camberAdjustmentTool;
         UprightIndexForCamber = 1;
     }
 }
        public void PlotBumpSteerGraph(SetupChange_Outputs _setupOP, SetupChange_CornerVariables _cv, XUC_SetupChangeResults _resultsGUI)
        {
            for (int i = 0; i < _resultsGUI.bumpSteerCurve1.chartControl1.Series.Count; i++)
            {
                _resultsGUI.bumpSteerCurve1.chartControl1.Series[i].Points.Clear();
            }

            if (_cv.monitorBumpSteer || _cv.BumpSteerChangeRequested)
            {
                ///<summary>
                ///Ensuring that the <see cref="SetupChange_Outputs.Calc_BumpSteerChart"/> is not null
                ///Basically this ensures that the if the user Ran a simulation with Bump Steer Change but didn't create a BS Chart the software doesnt't fail
                /// </summary>
                if (_setupOP.Calc_BumpSteerChart != null)
                {
                    ///<summary>If the Bump Steer Change is requested then setting the Enaled status to true so that the user can scroll and zoom the Bump Steer Contro </summary>
                    _resultsGUI.bumpSteerCurve1.Enabled = true;

                    _resultsGUI.bumpSteerCurve1.chartControl1.Series[0].Points.Clear();

                    ///<summary>Setting the <see cref="BumpSteerCurve.IsOutputChart"/> value to true to teach the CHart that the Output is calling it.
                    ///---IMPORTANT--- This is an important step so that the accidentally clicking the control doesn;t create a series point
                    /// </summary>
                    _resultsGUI.bumpSteerCurve1.IsOutputChart = true;

                    for (int i = 0; i < _setupOP.Req_BumpSteerChart.Count; i++)
                    {
                        _resultsGUI.bumpSteerCurve1.AddPointToChart(_resultsGUI.bumpSteerCurve1.chartControl1, _cv.BS_Params.WheelDeflections[_cv.BS_Params.HighestBumpindex + i], _setupOP.Req_BumpSteerChart[i].Degrees, 0, true);
                    }

                    _resultsGUI.bumpSteerCurve1.AddSeriesToChart(_resultsGUI.bumpSteerCurve1.chartControl1);

                    ///<summary>Plotting the Computed Bump Steer Chart</summary>
                    for (int i = 0; i < _setupOP.Calc_BumpSteerChart.Count; i++)
                    {
                        _resultsGUI.bumpSteerCurve1.AddPointToChart(_resultsGUI.bumpSteerCurve1.chartControl1, _cv.BS_Params.WheelDeflections[_cv.BS_Params.HighestBumpindex + i], _setupOP.Calc_BumpSteerChart[i].Degrees, 1, true);
                    }


                    _resultsGUI.bumpSteerCurve1.Enabled = true;
                }
            }
        }
        /// <summary>
        /// Enumeration to decide which the Parent Change is. That is, the Entry point of the Setup Change Closed Loop Solver
        /// </summary>



        /// <summary>
        /// Overloaded constructor to <see cref="SolverMasterClass"/> and <see cref="OutputClass"/> and <see cref="SetupChange_CornerVariables"/> along with lists
        /// </summary>
        /// <param name="_sMC"></param>
        /// <param name="_oC"></param>
        /// <param name="_setupChange_DB_Dictionary"></param>
        public SetupChange_ClosedLoopSolver(SolverMasterClass _sMC, List <OutputClass> _oC, ref Dictionary <string, double> _setupChange_DB_Dictionary, Angle _finalCamber, Angle _finalToe, Angle _finalCaster, Angle _finalKPI)
        {
            ///<summary>Assining the object of the <see cref="SolverMasterClass"/></summary>
            SMC = _sMC;

            ///<summary>Assining the object of the <see cref="OutputClass"/></summary>
            OC = _oC;

            ///<summary>Assining the object of the <see cref="SetupChange_CornerVariables"/></summary>
            SetupChange_CV_Base = new SetupChange_CornerVariables();
            SetupChange_CV_Base = OC[0].sccvOP;

            ///<summary>Assining the object of the <see cref="SetupChangeDatabase"/></summary>
            SetupChange_DB = SMC.SetupChange_DB_Master;
            ///<remarks>---OBSELETE---</remarks>
            SetupChange_DB_Dictionary = _setupChange_DB_Dictionary;

            ///<summary>Initializing all the Lists of this class which will be used for the Setup Change Verificating and History maintainance</summary>
            InitializeLists();

            ///<summary>Creating delegates which will be stored in a master Multicast Delegate. This master delegate will the Invocation list and will call the methods according to that lsit </summary>
            invokeCamberClosedLoop     = new MethodInvocationOrderDecider(ClosedLoop_ChangeCamber_Invoker);
            invokeToeClosedLoop        = new MethodInvocationOrderDecider(ClosedLoop_ChangeToe_Invoker);
            invokeCasterClosedLoop     = new MethodInvocationOrderDecider(ClosedLoop_ChangeCaster_Invoker);
            invokeKPIClosedLoop        = new MethodInvocationOrderDecider(ClosedLoop_ChangeKPI_Invoker);
            invokeLinkLengthClosedLoop = new MethodInvocationOrderDecider(ClosedLoop_ChangeLinkLengths_Invoker);
            ///<summary>Dumping all the above delegates into the Multicast delegate. This will be sorted eventually based on the entry point to the closed loop </summary>
            AssignMulticastDelegate();

            FinalCamber = _finalCamber;

            FinalToe = _finalToe;

            FinalCaster = _finalCaster;

            FinalKPI = _finalKPI;
        }
Exemplo n.º 11
0
        /// <summary>
        /// Overloaded Constructor
        /// </summary>
        /// <param name="_setupChangeName">Name of the Setup Change</param>
        /// <param name="_setupChangeID">ID of the Setup Change </param>
        public SetupChange_GUI(string _setupChangeName, int _setupChangeID)
        {
            R1 = Kinematics_Software_New.AssignFormVariable();

            ///<summary>Assinging the Name</summary>
            _SetupChangeName = _setupChangeName + _setupChangeID;

            ///<summary>Assinging the ID</summary>
            _SetupChangeID = _setupChangeID;

            ///<summary>Initializing the <see cref="SetupChange_CornerVariables"/>objects</summary>
            setupChangeFL_GUI = new SetupChange_CornerVariables();
            setupChangeFR_GUI = new SetupChange_CornerVariables();
            setupChangeRL_GUI = new SetupChange_CornerVariables();
            setupChangeRR_GUI = new SetupChange_CornerVariables();

            XUC_SetupChange = new XUC_SetupChange();

            ///<summary>Initializing the <see cref="NavBarItem"/> Object</summary>
            navBarItemSetupChange = new CusNavBarItem(_setupChangeName, _setupChangeID, this);

            ///<summary>Initialzing the <see cref="CustomXtraTabPage"/> object</summary>
            TabPage_SetupChangeGUI = CustomXtraTabPage.CreateNewTabPage_ForInputs(_setupChangeName, _setupChangeID);
        }
        /// <summary>
        /// Method to Initialize all the Adjustment tools and decide which the Master Adjusters are going to be
        /// </summary>
        /// <param name="scm"></param>
        /// <param name="scd"></param>
        /// <param name="adjToolDictionary">Dictionary which is initialized with all the <see cref="AdjustmentTools"/> the user has selected for each Setup Change</param>
        public AdjustmentOptions(SuspensionCoordinatesMaster scm, SetupChangeDatabase scd, Dictionary <string, AdjustmentTools> adjToolDictionary, SetupChange_CornerVariables sccv)
        {
            TopWishbonePlane = new Plane(new Point3D(scm.F1x, scm.F1y, scm.F1z), new Point3D(scm.A1x, scm.A1y, scm.A1z), new Point3D(scm.B1x, scm.B1y, scm.B1z));

            TopFrontArm.Add(new Line(new Point3D(scm.A1x, scm.A1y, scm.A1z), new Point3D(scm.F1x, scm.F1y, scm.F1z) /*scd.UBJ*/));

            TopFrontVector.Add(new Vector3D(TopFrontArm[TopFrontArm.Count - 1].StartPoint, TopFrontArm[TopFrontArm.Count - 1].EndPoint));

            TopRearArm.Add(new Line(new Point3D(scm.B1x, scm.B1y, scm.B1z), new Point3D(scm.F1x, scm.F1y, scm.F1z) /*scd.UBJ*/));

            TopRearVector.Add(new Vector3D(TopRearArm[TopRearArm.Count - 1].StartPoint, TopRearArm[TopRearArm.Count - 1].EndPoint));

            BottomWishbonePlane = new Plane(new Point3D(scm.E1x, scm.E1y, scm.E1z), new Point3D(scm.D1x, scm.D1y, scm.D1z), new Point3D(scm.C1x, scm.C1y, scm.C1z));

            BottomFrontArm.Add(new Line(new Point3D(scm.D1x, scm.D1y, scm.D1z), new Point3D(scm.E1x, scm.E1y, scm.E1z) /*scd.LBJ*/));

            BottomFrontArmVector.Add(new Vector3D(BottomFrontArm[BottomFrontArm.Count - 1].StartPoint, BottomFrontArm[BottomFrontArm.Count - 1].EndPoint));

            BottomRearArm.Add(new Line(new Point3D(scm.C1x, scm.C1y, scm.C1z), new Point3D(scm.E1x, scm.E1y, scm.E1z) /*scd.LBJ*/));

            BottomRearArmVector.Add(new Vector3D(BottomRearArm[BottomRearArm.Count - 1].StartPoint, BottomRearArm[BottomRearArm.Count - 1].EndPoint));

            MToeAdjusterLine.Add(new Line(new Point3D(scm.N1x, scm.N1y, scm.N1z), new Point3D(scm.M1x, scm.M1y, scm.M1z) /*scd.ToeLinkUpright*/));

            MToeAdjusterVector.Add(new Vector3D(MToeAdjusterLine[MToeAdjusterLine.Count - 1].StartPoint, MToeAdjusterLine[MToeAdjusterLine.Count - 1].EndPoint));

            PushrodLine.Add(new Line(new Point3D(scm.J1x, scm.J1y, scm.J1z), new Point3D(scm.G1x, scm.G1y, scm.G1z)));

            PushrodVector.Add(new Vector3D(PushrodLine[PushrodLine.Count - 1].StartPoint, PushrodLine[PushrodLine.Count - 1].EndPoint));

            InitializeShimsGeometry(scm, scd, TopCamberShimsLine, TopCamberShimsVector, TopWishbonePlane, scd.UBJ);

            InitializeShimsGeometry(scm, scd, BottomCamberShimsLine, BottomCamberShimsVector, BottomWishbonePlane, scd.LBJ);

            //InitUprightBasedOnAdjustmentTool(adjToolDictionary, scd);

            AssignMasterAdjusters(sccv, adjToolDictionary, scd);
        }
Exemplo n.º 13
0
        public SetupChange_CornerVariables Clone()
        {
            SetupChange_CornerVariables tempCV = new SetupChange_CornerVariables();

            tempCV.deltaKPI           = this.deltaKPI;
            tempCV.KPIChangeRequested = this.KPIChangeRequested;
            tempCV.deltaTopFrontArm   = this.deltaTopFrontArm;
            tempCV.deltaTopRearArm    = this.deltaTopRearArm;


            tempCV.deltaCamber                 = this.deltaCamber;
            tempCV.CamberChangeRequested       = this.CamberChangeRequested;
            tempCV.deltaCamberShims            = this.deltaCamberShims;
            tempCV.camberShimThickness         = this.camberShimThickness;
            tempCV.deltaCamberShimVectorLength = this.deltaCamberShimVectorLength;

            tempCV.deltaCaster           = this.deltaCaster;
            tempCV.CasterChangeRequested = this.CasterChangeRequested;
            tempCV.deltaBottmFrontArm    = this.deltaBottmFrontArm;
            tempCV.deltaBottomRearArm    = this.deltaBottomRearArm;


            tempCV.deltaToe           = this.deltaToe;
            tempCV.ToeChangeRequested = this.ToeChangeRequested;
            tempCV.deltaToeLinkLength = this.deltaToeLinkLength;
            tempCV.deltaToeShims      = this.deltaToeShims;
            tempCV.ToeShimThickness   = this.ToeShimThickness;


            tempCV.deltaRideHeight    = this.deltaRideHeight;
            tempCV.RHIChangeRequested = this.RHIChangeRequested;
            tempCV.deltaPushrod       = this.deltaPushrod;
            tempCV.RideHeightChanged  = this.RideHeightChanged;

            tempCV.BumpSteerChangeRequested = this.BumpSteerChangeRequested;


            tempCV.constKPI        = this.constKPI;
            tempCV.constCamber     = this.constCamber;
            tempCV.constCaster     = this.constCaster;
            tempCV.constToe        = this.constToe;
            tempCV.constRideHeight = this.constRideHeight;

            tempCV.monitorBumpSteer = this.monitorBumpSteer;



            tempCV.iterationsCamber     = this.iterationsCamber;
            tempCV.iterationsCaster     = this.iterationsCaster;
            tempCV.iterationsKPI        = this.iterationsKPI;
            tempCV.iterationsToe        = this.iterationsToe;
            tempCV.iterationsLinkLength = this.iterationsLinkLength;

            tempCV.LinkLengthChanged = tempCV.LinkLengthChanged;

            tempCV.LinkLengthsWhichHaveNotChanged = tempCV.LinkLengthsWhichHaveNotChanged;

            tempCV.cornerName = this.cornerName;


            tempCV.camberAdjustmentType = this.camberAdjustmentType;
            tempCV.camberAdjustmentTool = this.camberAdjustmentTool;

            tempCV.OverrideRandomSelectorForKPI = this.OverrideRandomSelectorForKPI;

            tempCV.toeAdjustmentType    = this.toeAdjustmentType;
            tempCV.toeAdjustmentTool    = this.toeAdjustmentTool;
            tempCV.casterAdjustmentType = this.casterAdjustmentType;

            tempCV.OverrideRandomSelectorForCaster = this.OverrideRandomSelectorForCaster;

            tempCV.casterAdjustmentTool     = this.casterAdjustmentTool;
            tempCV.kpiAdjustmentType        = this.kpiAdjustmentType;
            tempCV.kpiAdjustmentTool        = this.kpiAdjustmentTool;
            tempCV.rideheightAdjustmentType = this.rideheightAdjustmentType;
            tempCV.rideheightAdjustmentTool = this.rideheightAdjustmentTool;
            tempCV.AdjToolsDictionary       = this.AdjToolsDictionary;


            tempCV.Caster_KPI_Adj = this.Caster_KPI_Adj;
            tempCV.Camber_Adj     = this.Camber_Adj;
            tempCV.Toe_Adj        = this.Toe_Adj;
            tempCV.BumpSteer_Adj  = this.BumpSteer_Adj;
            tempCV.BS_Params      = this.BS_Params;


            tempCV.Master_Adj = this.Master_Adj;

            return(tempCV);
        }
        /// <summary>
        /// Method to display the Outputs of Each Setup Change. If a particular param is not requested the initial value is shown
        /// </summary>
        /// <param name="_oc"></param>
        /// <param name="_setupOP"></param>
        /// <param name="_cv"></param>
        /// <param name="_resultsGUI"></param>
        /// <param name="_resultsGrid"></param>
        /// <param name="_converged"></param>
        public void DisplayIndividualOutputs(OutputClass _oc, SetupChange_Outputs _setupOP, SetupChange_CornerVariables _cv, XUC_SetupChangeResults _resultsGUI, VGridControl _resultsGrid, ref bool _converged)
        {
            string test = _cv.kpiAdjustmentTool.ToString();

            ///<summary>Assining the KPI Outputs</summary>
            _resultsGrid.SetCellValue(_resultsGUI.rowKPIAngle, 1, Convert.ToString(Math.Round(Angle.FromRadians(_oc.KPI).Degrees, 2)) + " | " + Convert.ToString(Math.Round(_setupOP.Calc_KPI.Degrees, 2)));
            if (_cv.KPIChangeRequested || _cv.constKPI || _cv.CasterChangeRequested || _cv.constCaster)
            {
                if (_cv.Master_Adj["Caster/KPI"].ContainsKey(AdjustmentTools.TopFrontArm.ToString()))
                {
                    _resultsGrid.SetCellValue(_resultsGUI.rowTopFrontAdj, 1, Convert.ToString(Math.Round(_setupOP.TopFrontLength, 3)));
                    _resultsGUI.rowTopFrontAdj.Visible = true;
                }
                else
                {
                    _resultsGUI.rowTopFrontAdj.Visible = false;
                }
                if (_cv.Master_Adj["Caster/KPI"].ContainsKey(AdjustmentTools.TopRearArm.ToString()))
                {
                    _resultsGrid.SetCellValue(_resultsGUI.rowTopRearAdj, 1, Convert.ToString(Math.Round(_setupOP.TopRearLength, 3)));
                    _resultsGUI.rowTopRearAdj.Visible = true;
                }
                else
                {
                    _resultsGUI.rowTopRearAdj.Visible = false;
                }
                if (_cv.Master_Adj["Caster/KPI"].ContainsKey(AdjustmentTools.BottomFrontArm.ToString()))
                {
                    _resultsGrid.SetCellValue(_resultsGUI.rowBottomFrontAdj, 1, Convert.ToString(Math.Round(_setupOP.BottomFrontLength, 3)));
                    _resultsGUI.rowBottomFrontAdj.Visible = true;
                }
                else
                {
                    _resultsGUI.rowBottomFrontAdj.Visible = false;
                }
                if (_cv.Master_Adj["Caster/KPI"].ContainsKey(AdjustmentTools.BottomRearArm.ToString()))
                {
                    _resultsGrid.SetCellValue(_resultsGUI.rowBottomRearAdj, 1, Convert.ToString(Math.Round(_setupOP.BottomRearLength, 3)));
                    _resultsGUI.rowBottomRearAdj.Visible = true;
                }
                else
                {
                    _resultsGUI.rowBottomRearAdj.Visible = false;
                }
            }
            else
            {
                _resultsGUI.rowTopFrontAdj.Visible    = false;
                _resultsGUI.rowTopRearAdj.Visible     = false;
                _resultsGUI.rowBottomFrontAdj.Visible = false;
                _resultsGUI.rowBottomRearAdj.Visible  = false;
            }
            _resultsGrid.SetCellValue(_resultsGUI.rowKPIConvergance, 1, _setupOP.KPI_Conv.ConvergenceStatus);


            ///<summary>Assingint the Caster Outputs</summary>
            _resultsGrid.SetCellValue(_resultsGUI.rowCasterAngle, 1, Convert.ToString(Math.Round(Angle.FromRadians(_oc.Caster).Degrees, 2)) + " | " + Convert.ToString(Math.Round(_setupOP.Calc_Caster.Degrees, 2)));
            _resultsGrid.SetCellValue(_resultsGUI.rowCasterConvergance, 1, _setupOP.Caster_Conv.ConvergenceStatus);


            ///<summary>Assining the Camber Outputs</summary>
            _resultsGrid.SetCellValue(_resultsGUI.rowCamberAngle, 1, Convert.ToString(Math.Round(Angle.FromRadians(_oc.waOP.StaticCamber).Degrees, 3)) + " | " + Convert.ToString(Math.Round(_setupOP.Calc_Camber.Degrees, 3)));
            if (_cv.CamberChangeRequested || _cv.constCamber)
            {
                if (_cv.Master_Adj["Camber"].ContainsKey(AdjustmentTools.TopCamberMount.ToString()))
                {
                    _resultsGrid.SetCellValue(_resultsGUI.rowTopCamberMount, 1, Convert.ToString(Math.Round(_setupOP.TopCamberShimsLength, 3)));
                    _resultsGrid.SetCellValue(_resultsGUI.rowShimsTopCamberMount, 1, Convert.ToString(Math.Round(_setupOP.TopCamberShimsNo, 3)));
                    _resultsGUI.rowTopCamberMount.Visible = true;
                }
                else
                {
                    _resultsGUI.rowTopCamberMount.Visible = false;
                }
                if (_cv.Master_Adj["Camber"].ContainsKey(AdjustmentTools.BottomCamberMount.ToString()))
                {
                    _resultsGrid.SetCellValue(_resultsGUI.rowBottomCamberMount, 1, Convert.ToString(Math.Round(_setupOP.BottomCamberShimsLength, 3)));
                    _resultsGrid.SetCellValue(_resultsGUI.rowShimsBottomCamberMount, 1, Convert.ToString(Math.Round(_setupOP.BottomCamberShimsNo, 3)));
                    _resultsGUI.rowBottomCamberMount.Visible = true;
                }
                else
                {
                    _resultsGUI.rowBottomCamberMount.Visible = false;
                }
            }
            else
            {
                _resultsGUI.rowTopCamberMount.Visible    = false;
                _resultsGUI.rowBottomCamberMount.Visible = false;
            }
            _resultsGrid.SetCellValue(_resultsGUI.rowCamberConvergance, 1, _setupOP.Camber_Conv.ConvergenceStatus);


            ///<summary>Assigning the Toe Outputs</summary>
            _resultsGrid.SetCellValue(_resultsGUI.rowToeAngle, 1, Convert.ToString(Math.Round(Angle.FromRadians(_oc.waOP.StaticToe).Degrees, 3)) + " | " + Convert.ToString(Math.Round(_setupOP.Calc_Toe.Degrees, 3)));
            if (_cv.ToeChangeRequested || _cv.constToe)
            {
                if (_cv.Master_Adj["Toe"].ContainsKey(AdjustmentTools.ToeLinkLength.ToString()))
                {
                    _resultsGrid.SetCellValue(_resultsGUI.rowToeLink, 1, Convert.ToString(Math.Round(_setupOP.ToeLinklength, 3)));
                    _resultsGUI.rowToeLink.Visible = true;
                }
                else
                {
                    _resultsGUI.rowToeLink.Visible = false;
                }
            }
            else
            {
                _resultsGUI.rowToeLink.Visible = false;
            }
            _resultsGrid.SetCellValue(_resultsGUI.rowToeConvergance, 1, _setupOP.Toe_Conv.ConvergenceStatus);


            ///<summary>Assigning the Ride Height</summary>
            _resultsGrid.SetCellValue(_resultsGUI.rowRideHeight, 1, _setupOP.Calc_RideHeight);
            _resultsGrid.SetCellValue(_resultsGUI.rowLinkRHName, 1, _cv.rideheightAdjustmentTool.ToString());
            _resultsGrid.SetCellValue(rowLinkRHDelta, 1, Convert.ToString(Math.Round(_setupOP.PushrodLength, 3)));
            _resultsGrid.SetCellValue(_resultsGUI.rowRHConvergance, 1, _setupOP.RideHeight_Conv.ConvergenceStatus);


            ///<summary>Setting the results of the Bump Steer</summary>
            if (_cv.BumpSteerChangeRequested)
            {
                _resultsGrid.SetCellValue(rowToeLinkInboard_x, 1, Convert.ToString(Math.Round(_setupOP.ToeLinkInboard.X, 3)));
                _resultsGUI.rowToeLinkInboard_x.Visible = true;
                _resultsGrid.SetCellValue(rowToeLinkInboard_y, 1, Convert.ToString(Math.Round(_setupOP.ToeLinkInboard.Y, 3)));
                _resultsGUI.rowToeLinkInboard_y.Visible = true;
                _resultsGrid.SetCellValue(rowToeLinkInboard_z, 1, Convert.ToString(Math.Round(_setupOP.ToeLinkInboard.Z, 3)));
                _resultsGUI.rowToeLinkInboard_z.Visible = true;
            }
            else
            {
                _resultsGUI.rowToeLinkInboard_x.Visible = false;
                _resultsGUI.rowToeLinkInboard_y.Visible = false;
                _resultsGUI.rowToeLinkInboard_z.Visible = false;
            }

            _resultsGrid.SetCellValue(rowBSConvergence, 1, _setupOP.BumpSteer_Conv.ConvergenceStatus);
        }