Пример #1
0
        private IAgCrdnAngle CreateAngle(IAgStkObject stkObject, string name, IAgCrdnVector fromVector, IAgCrdnVector toVector)
        {
            IAgCrdnAngleFactory factory = stkObject.Vgt.Angles.Factory;

            // Check if component exists.
            CheckExistingVgtComponent(stkObject.Vgt.Angles, name);

            IAgCrdnAngleBetweenVectors angle = factory.Create(name, "", AgECrdnAngleType.eCrdnAngleTypeBetweenVectors) as IAgCrdnAngleBetweenVectors;

            angle.FromVector.SetVector(fromVector);
            angle.ToVector.SetVector(toVector);

            return(angle as IAgCrdnAngle);
        }
        private void Calculate_Click(object sender, EventArgs e)
        {
            int check = FieldCheck();

            if (check == 0)
            {
                IAgStkObject obj = null;
                IAgStkObject tar = null;
                foreach (var observer in CommonData.SelectedObservers)
                {
                    foreach (var target in CommonData.SelectedTargets)
                    {
                        if (observer != target)
                        {
                            if (TargetType.SelectedIndex == 0)
                            {
                                tar = CommonData.StkRoot.GetObjectFromPath("Satellite/" + target);
                            }
                            else if (TargetType.SelectedIndex == 1)
                            {
                                tar = CommonData.StkRoot.GetObjectFromPath("Missile/" + target);
                            }
                            else if (TargetType.SelectedIndex == 2)
                            {
                                tar = CommonData.StkRoot.GetObjectFromPath("Aircraft/" + target);
                            }

                            if (ObserverType.SelectedIndex == 0)
                            {
                                obj = CommonData.StkRoot.GetObjectFromPath("Satellite/" + observer);
                            }
                            else if (ObserverType.SelectedIndex == 1)
                            {
                                obj = CommonData.StkRoot.GetObjectFromPath("Facility/" + observer);
                            }
                            else
                            {
                                IAgExecCmdResult result = CommonData.StkRoot.ExecuteCommand("ShowNames * Class Sensor");
                                if (result[0] != "None")
                                {
                                    string[] sensorArray = result[0].Split(null);
                                    foreach (var item in sensorArray)
                                    {
                                        if (item.Contains(observer))
                                        {
                                            int scenarioPos          = item.LastIndexOf("/Scenario/");
                                            int scenarioNameSlashPos = item.IndexOf("/", scenarioPos + 10);
                                            item.Remove(0, scenarioNameSlashPos);
                                            obj = CommonData.StkRoot.GetObjectFromPath(item);
                                        }
                                    }
                                }
                            }
                            IAgCrdnProvider            objVgtPrv  = obj.Vgt;
                            IAgCrdnProvider            tarVgt     = tar.Vgt;
                            IAgCrdnAngleBetweenVectors angle      = null;
                            IAgCrdnVectorDisplacement  dispVector = AWBFunctions.GetCreateDisplacementVector(objVgtPrv, objVgtPrv.Points["Center"], tarVgt.Points["Center"], "To_" + target);

                            //Create either solar phase or beta angle depending on user specified selection
                            string angleName = null;
                            if (AngleType.SelectedIndex == 0)
                            {
                                angleName = "To_" + target + "BetaAngle";
                                angle     = AWBFunctions.GetCreateAngleBetweenVectors(objVgtPrv, dispVector as IAgCrdnVector, objVgtPrv.Vectors["Sun"], angleName, "");
                            }
                            else if (AngleType.SelectedIndex == 1)
                            {
                                angleName = "To_" + target + "SolarPhaseAngle";
                                angle     = AWBFunctions.GetCreateAngleBetweenVectors(objVgtPrv, dispVector as IAgCrdnVector, tarVgt.Vectors["Sun"], angleName, "");
                            }
                            //Create Calc Scalar of angle
                            IAgCrdnCalcScalarAngle cScalar = AWBFunctions.GetCreateAngleCalcScalar(objVgtPrv, angle as IAgCrdnAngle, angleName);

                            //If a conditional is requested, then create it here
                            if (EnableConstraint.Checked)
                            {
                                IAgCrdnConditionScalarBounds condition = AWBFunctions.GetCreateConditionScalarBounds(objVgtPrv, cScalar as IAgCrdnCalcScalar, angleName + "_Condition", AgECrdnConditionThresholdOption.eCrdnConditionThresholdOptionInsideMinMax);
                                AWBFunctions.SetAngleConditionScalarBounds(condition, Double.Parse(ConstraintMin.Text), Double.Parse(ConstraintMax.Text));
                            }
                        }
                    }
                }
                MessageBox.Show("Component Creation Completed");
            }
        }
Пример #3
0
        private void Calculate_Click(object sender, EventArgs e)
        {
            IAgStkObject obj = null;
            IAgStkObject tar = null;

            foreach (var observer in CommonData.SelectedObservers)
            {
                foreach (var target in CommonData.SelectedTargets)
                {
                    if (observer != target)
                    {
                        if (TargetType.SelectedIndex == 0)
                        {
                            tar = CommonData.StkRoot.GetObjectFromPath("Satellite/" + target);
                        }
                        else if (TargetType.SelectedIndex == 1)
                        {
                            tar = CommonData.StkRoot.GetObjectFromPath("Missile/" + target);
                        }
                        else if (TargetType.SelectedIndex == 2)
                        {
                            tar = CommonData.StkRoot.GetObjectFromPath("Aircraft/" + target);
                        }

                        if (ObserverType.SelectedIndex == 0)
                        {
                            obj = CommonData.StkRoot.GetObjectFromPath("Satellite/" + observer);
                        }
                        else if (ObserverType.SelectedIndex == 1)
                        {
                            obj = CommonData.StkRoot.GetObjectFromPath("Facility/" + observer);
                        }
                        else
                        {
                            IAgExecCmdResult result = CommonData.StkRoot.ExecuteCommand("ShowNames * Class Sensor");
                            if (result[0] != "None")
                            {
                                string[] sensorArray = result[0].Split(null);
                                foreach (var item in sensorArray)
                                {
                                    if (item.Contains(observer))
                                    {
                                        int scenarioPos          = item.LastIndexOf("/Scenario/");
                                        int scenarioNameSlashPos = item.IndexOf("/", scenarioPos + 10);
                                        item.Remove(0, scenarioNameSlashPos);
                                        obj = CommonData.StkRoot.GetObjectFromPath(item);
                                    }
                                }
                            }
                        }
                        IAgCrdnProvider           objVgtPrv = obj.Vgt;
                        IAgCrdnProvider           tarVgt    = tar.Vgt;
                        IAgCrdnVectorDisplacement dispVector;
                        if (objVgtPrv.Vectors.Contains("To_" + target))
                        {
                            dispVector = objVgtPrv.Vectors["To_" + target] as IAgCrdnVectorDisplacement;
                        }
                        else
                        {
                            dispVector = objVgtPrv.Vectors.Factory.CreateDisplacementVector("To_" + target, objVgtPrv.Points["Center"], tarVgt.Points["Center"]);
                        }
                        if (!objVgtPrv.Angles.Contains("To_" + target + "SolarPhaseAngle"))
                        {
                            IAgCrdnAngleBetweenVectors angle = (IAgCrdnAngleBetweenVectors)objVgtPrv.Angles.Factory.Create("To_" + target + "SolarPhaseAngle", "", AgECrdnAngleType.eCrdnAngleTypeBetweenVectors);
                            angle.FromVector.SetVector(dispVector as IAgCrdnVector);
                            angle.ToVector.SetVector(objVgtPrv.Vectors["Sun"]);
                        }
                    }
                }
            }
        }