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); }
//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); }
//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); }
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); }