public static IAgStkObject AttachFacilityRadar(IAgStkObject parent, string radarName, RadarParams rParams)
        {
            IAgStkObject sensorObj = CreatorFunctions.GetCreateSensor(parent, radarName);
            IAgSensor    sensor    = sensorObj as IAgSensor;

            sensor.Graphics.IsObjectGraphicsVisible = false;
            IAgSnSimpleConicPattern pattern = sensor.Pattern as IAgSnSimpleConicPattern;

            pattern.ConeAngle = Double.Parse(rParams.HalfAngle);
            IAgSnPtFixed pointing = sensor.Pointing as IAgSnPtFixed;

            pointing.Orientation.AssignAzEl(Double.Parse(rParams.Az), Double.Parse(rParams.El), AGI.STKUtil.AgEAzElAboutBoresight.eAzElAboutBoresightRotate);

            IAgAccessConstraintCollection constraints = sensor.AccessConstraints;
            IAgAccessCnstrMinMax          elConstraint;
            IAgAccessCnstrMinMax          azConstraint;
            IAgAccessCnstrMinMax          rangeConstraint;
            IAgAccessCnstrAngle           solarExConstraint;

            elConstraint = CreatorFunctions.GetElCnst(constraints);
            CreatorFunctions.SetCnstMinMax(elConstraint, Double.Parse(rParams.MinEl), Double.Parse(rParams.MaxEl));
            azConstraint = CreatorFunctions.GetAzCnst(constraints);
            CreatorFunctions.SetCnstMinMax(azConstraint, Double.Parse(rParams.MinAz), Double.Parse(rParams.MaxAz));
            rangeConstraint = CreatorFunctions.GetRangeCnst(constraints);
            CreatorFunctions.SetCnstMinMax(rangeConstraint, Double.Parse(rParams.MinRange), Double.Parse(rParams.MaxRange));
            solarExConstraint       = CreatorFunctions.GetSunExCnst(constraints);
            solarExConstraint.Angle = rParams.SolarExAngle;

            SetRadarGraphics(sensor);

            return(sensorObj);
        }
        public static IAgStkObject AttachFacilityOptical(IAgStkObject parent, string radarName, OpticalParams rParams)
        {
            IAgStkObject sensorObj = CreatorFunctions.GetCreateSensor(parent, radarName);
            IAgSensor    sensor    = sensorObj as IAgSensor;

            sensor.Graphics.IsObjectGraphicsVisible = false;
            IAgSnSimpleConicPattern pattern = sensor.Pattern as IAgSnSimpleConicPattern;

            pattern.ConeAngle = Double.Parse(rParams.HalfAngle);

            IAgAccessConstraintCollection constraints = sensor.AccessConstraints;
            IAgAccessCnstrMinMax          elConstraint;
            IAgAccessCnstrMinMax          azConstraint;
            IAgAccessCnstrMinMax          rangeConstraint;
            IAgAccessCnstrMinMax          sunElConstraint;
            IAgAccessCnstrAngle           lunExConstraint;

            elConstraint = CreatorFunctions.GetElCnst(constraints);
            CreatorFunctions.SetCnstMinMax(elConstraint, Double.Parse(rParams.MinEl), Double.Parse(rParams.MaxEl));
            azConstraint = CreatorFunctions.GetAzCnst(constraints);
            CreatorFunctions.SetCnstMinMax(azConstraint, Double.Parse(rParams.MinAz), Double.Parse(rParams.MaxAz));

            sunElConstraint = CreatorFunctions.GetSunElCnst(constraints);
            CreatorFunctions.SetCnstMinMax(sunElConstraint, -90, Double.Parse(rParams.SunElAngle));

            rangeConstraint = CreatorFunctions.GetRangeCnst(constraints);
            CreatorFunctions.SetCnstMinMax(rangeConstraint, Double.Parse(rParams.MinRange), Double.Parse(rParams.MaxRange));

            lunExConstraint       = CreatorFunctions.GetLunExCnst(constraints);
            lunExConstraint.Angle = rParams.LunarExAngle;

            SetOpticalGraphics(sensor);

            return(sensorObj);
        }
Esempio n. 3
0
        //generate sensor with pointertype being provided
        private IAgSensor generate_sensor(string missionname, string constellation_name, int coneangle, AgESnPointing pttype)
        {
            IAgSensor sensorptr;

            //create a new sensor for the current sat IAgSnSimpleConicPattern
            sensorptr = (IAgSensor)m_oApplication.CurrentScenario.Children[missionname].Children.New(AgESTKObjectType.eSensor, missionname + "_sensor");
            sensorptr.SetPointingType(pttype);

            if (sensorptr.PointingType == AgESnPointing.eSnPtTargeted)
            {
                IAgSnPtTargeted localtargetPTtype = (IAgSnPtTargeted)sensorptr.Pointing;
                localtargetPTtype.Targets.Add("/Constellation/" + constellation_name);
            }

            /*
             * else if (sensorptr.PointingType == AgESnPointing.eSnPtFixed)
             * {
             *  IAgSnPtFixed localfixPtType = (IAgSnPtFixed)sensorptr.Pointing;
             *  IAgOrientation localorientation =(IAgOrientation)localfixPtType.Orientation;
             *  localorientation.
             *
             *
             * }*/
            IAgSnSimpleConicPattern simpleConic = (IAgSnSimpleConicPattern)sensorptr.Pattern;

            //set a 2deg half cone angle for pointing at an object
            simpleConic.ConeAngle = coneangle;
            return(sensorptr);
        }
        private void SetWindowFOV(int intVertPixels)
        {
            double dblVertHalfAngle = 0.0;
            double dblHorzHalfAngle = 0.0;

            IAgStkObject sensorObj           = (IAgStkObject)sensor;
            IAgStkObject parent              = sensorObj.Parent;
            string       truncatedSensorPath = parent.ClassName + "/" + parent.InstanceName + "/" + sensorObj.ClassName + "/" + sensorObj.InstanceName;

            if (sensor.PatternType == AgESnPattern.eSnSimpleConic)
            {
                IAgSnSimpleConicPattern sensorPattern = (IAgSnSimpleConicPattern)sensor.Pattern;
                dblVertHalfAngle = (double)sensorPattern.ConeAngle;
                dblHorzHalfAngle = (double)sensorPattern.ConeAngle;
                //Turn Sensor Graphics ON in the view window to see the Sensor Footprint
                m_root.ExecuteCommand("VO * ObjectStateInWin Show On Object " + truncatedSensorPath + " WindowId " + strWinID);
            }
            else if (sensor.PatternType == AgESnPattern.eSnRectangular)
            {
                IAgSnRectangularPattern sensorPattern = (IAgSnRectangularPattern)sensor.Pattern;
                dblVertHalfAngle = (double)sensorPattern.VerticalHalfAngle;
                dblHorzHalfAngle = (double)sensorPattern.HorizontalHalfAngle;
                //Turn Sensor Graphics OFF in the view window to not see the outline of the Sensor Footprint
                m_root.ExecuteCommand("VO * ObjectStateInWin Show Off Object " + truncatedSensorPath + " WindowId " + strWinID);
            }

            string strUpVector;
            double winFOV;
            int    intHorzPixels;

            if (dblVertHalfAngle > dblHorzHalfAngle)
            {
                winFOV        = 2.0 * dblVertHalfAngle;
                strUpVector   = "X";
                intHorzPixels = (int)(dblVertHalfAngle / dblHorzHalfAngle * intVertPixels);
            }
            else
            {
                winFOV        = 2.0 * dblHorzHalfAngle;
                strUpVector   = "-Y";
                intHorzPixels = (int)(dblHorzHalfAngle / dblVertHalfAngle * intVertPixels);
            }
            string strWinFOV = winFOV.ToString();


            m_root.ExecuteCommand("VO * ViewFromTo Parameters UpVector " + strUpVector + " UseUpVector On Distance From 0.0 WindowID " + strWinID);
            m_root.ExecuteCommand("VO * ViewFromTo Normal From \"" + truncatedSensorPath + " Body Axes\" To ZOutward WindowID " + strWinID);

            m_root.ExecuteCommand("Window3D * Float " + strWinID);
            m_root.ExecuteCommand("Window3D * Raise " + strWinID);

            m_root.ExecuteCommand("Window3D * InnerSize " + intHorzPixels + " " + intVertPixels + " " + strWinID);
            m_root.ExecuteCommand("Window3D * ViewVolume FieldOfView " + strWinFOV + " WindowID " + strWinID);
            m_root.ExecuteCommand("VO * ObjectStateInWin Show Off Object " + parent.ClassName + "/" + parent.InstanceName + " WindowId " + strWinID);
        }
Esempio n. 5
0
        //generate target sensor at provided coneangle
        private IAgSensor generate_sensor(string missionname, string constellation_name, int coneangle)
        {
            IAgSensor sensorptr;

            //create a new sensor for the current sat IAgSnSimpleConicPattern
            sensorptr = (IAgSensor)m_oApplication.CurrentScenario.Children[missionname].Children.New(AgESTKObjectType.eSensor, missionname + "_sensor");
            sensorptr.SetPointingType(AgESnPointing.eSnPtTargeted);

            IAgSnPtTargeted test12 = (IAgSnPtTargeted)sensorptr.Pointing;

            test12.Targets.Add("/Constellation/" + constellation_name);

            IAgSnSimpleConicPattern simpleConic = (IAgSnSimpleConicPattern)sensorptr.Pattern;

            //set a 2deg half cone angle for pointing at an object
            simpleConic.ConeAngle = coneangle;
            return(sensorptr);
        }
Esempio n. 6
0
        private int DetermineNumPasses(SwathWidthType swathType, double swathParameter, double altitude, double regionWidth, IAgAircraft aircraft)
        {
            int    numPasses;
            double swathWidth;

            switch (swathType)
            {
            case SwathWidthType.NumberOfPasses:
                numPasses = (int)swathParameter;
                break;

            case SwathWidthType.SensorFOV:
                swathWidth = altitude * Math.Tan((Math.PI / 180.0) * swathParameter) * 1000 * 2 * .9;
                if (aircraft != null)
                {
                    IAgSensor sensor = ((IAgStkObject)aircraft).Children.New(AgESTKObjectType.eSensor, "Sensor") as IAgSensor;
                    sensor.SetPatternType(AgESnPattern.eSnSimpleConic);
                    IAgSnSimpleConicPattern simplecone = sensor.Pattern as IAgSnSimpleConicPattern;
                    simplecone.ConeAngle = swathParameter;
                }
                numPasses = (int)(regionWidth / swathWidth);
                break;

            case SwathWidthType.GroundElev:
                swathWidth = altitude / Math.Tan((Math.PI / 180.0) * swathParameter) * 1000 * 2 * .9;
                numPasses  = (int)(regionWidth / swathWidth);

                break;

            case SwathWidthType.SlantRange:
                swathWidth = Math.Sqrt((swathParameter * swathParameter) - (altitude * altitude)) * 1000 * 2 * .9;
                numPasses  = (int)(regionWidth / swathWidth);

                break;

            default:
                numPasses = 10;
                break;
            }

            return(numPasses);
        }