Introduction
The following code snippets demonstrate tasks that are commonly
encountered when working with the STK Object Model.
How do I ...
Initialization
STK Objects
Connect
Camera
Graphics
Graphics
Analysis Workbench
Scenario
Start STK and get a reference
to IAgStkObjectRoot
[Python] |
Copy
Code
|
# Get reference to running STK instance
uiApplication = win32com.client.Dispatch('STK11.Application')
uiApplication.Visible = True
# Get our IAgStkObjectRoot interface
root = uiApplication.Personality2
|
|
Add a Exclusion Zone access
constraint
[Python] |
Copy
Code
|
# IAgAccessConstraintCollection accessConstraints: Access Constraint collection
excludeZone = accessConstraints.AddNamedConstraint('ExclusionZone')
excludeZone.MaxLat = 45
excludeZone.MinLat = 15
excludeZone.MinLon = -75
excludeZone.MaxLon = -35
|
|
Add and configure a lighting
condition access constraint
[Python] |
Copy
Code
|
# IAgAccessConstraintCollection accessConstraints: Access Constraint collection
# Condition constraint
light = accessConstraints.AddConstraint(25) # eCstrLighting
light.Condition = 0 # eDirectSun
|
|
Add and configure a LOS sun
exclusion access constraint
[Python] |
Copy
Code
|
# IAgAccessConstraintCollection accessConstraints: Access Constraint collection
# Angle constraint
cnstrAngle = accessConstraints.AddConstraint(29) # eCstrLOSSunExclusion
cnstrAngle.Angle = 176.0
|
|
Add and configure a lunar
elevation angle access constraint
[Python] |
Copy
Code
|
# IAgAccessConstraintCollection accessConstraints: Access Constraint collection
minmax = accessConstraints.AddConstraint(30) # eCstrLunarElevationAngle
minmax.EnableMin = True
minmax.Min = 11.1
minmax.EnableMax = True
minmax.Max = 88.8
|
|
Add and configure a third body
obstruction access constraint
[Python] |
Copy
Code
|
# IAgAccessConstraintCollection accessconstraints: Access Constraint collection
# Get IAgAccessCnstrThirdBody interface
thirdBodyConstraint = accessConstraints.AddConstraint(61) # eCstrThirdBodyObstruction
# AvailableObstructions returns a one dimensional array of obstruction paths
availableArray = thirdBodyConstraint.AvailableObstructions
# In this example add all available obstructions
print('Available obstructions')
for i in range(0,len(availableArray)):
print(availableArray[i])
thirdBodyConstraint.AddObstruction(availableArray[i])
# AssignedObstructions returns a one dimensional array of obstruction paths
assignedArray = thirdBodyConstraint.AssignedObstructions
print('Assigned obstructions')
for i in range(0,len(assignedArray)):
print(assignedArray[i])
|
|
Add and configure an altitude
access constraint
[Python] |
Copy
Code
|
# IAgAccessConstraintCollection accessConstraints: Access Constraint collection
# Attitude constraint
altitude = accessConstraints.AddConstraint(2) # eCstrAltitude
altitude.EnableMin = True
altitude.Min = 20.5 # km
|
|
Add multiple access constraints
of the same type to an STK Object
[Python] |
Copy
Code
|
# IAgAccessConstraintCollection accessConstraints: Access Constraint collection
# Add constraints
# Only the eCstrApparentTime (4), eCstrDuration (13), eCstrGMT (16), eCstrIntervals (22), eCstrLocalTime (27) constraint
# types can be added multiple times to the constraint collection.
time1 = accessConstraints.AddConstraint(27) # eCstrLocalTime
time1.Min = '00:00:00.000'
time1.Max = '23:00:00.000'
|
|
Compute Access with Advanced
Settings
[Python] |
Copy
Code
|
# IAgStkAccess access: Access object
access.Advanced.EnableLightTimeDelay = True
access.Advanced.TimeLightDelayConvergence = .00005
access.Advanced.AberrationType = 1 # eAberrationAnnual
access.Advanced.UseDefaultClockHostAndSignalSense = False
access.Advanced.ClockHost = 0 # eIvBase
access.Advanced.SignalSenseOfClockHost = 0 # eIvTransmit
access.ComputeAccess()
|
|
Compute an access between two
STK Objects (using IAgStkObject interface)
[Python] |
Copy
Code
|
# IAgSatellite satellite: Satellite object
# IAgFacility facility: Facility object
# Get access by STK Object
access = satellite.GetAccessToObject(facility)
# Compute access
access.ComputeAccess()
|
|
Compute an access between two
STK Objects (using object path)
[Python] |
Copy
Code
|
# IAgSatellite satellite: Satellite object
# Get access by object path
access = satellite.GetAccess('Facility/MyFacility')
# Compute access
access.ComputeAccess()
|
|
Compute an access for one
point
[Python] |
Copy
Code
|
# IAgStkObject facility: Facility object
onePtAccess = facility.CreateOnePointAccess('Satellite/MySatellite')
# Configure properties (if necessary)
onePtAccess.StartTime = root.CurrentScenario.StartTime
onePtAccess.StopTime = root.CurrentScenario.StopTime
onePtAccess.StepSize = 600
onePtAccess.SummaryOption = 0 # eOnePtAccessSummaryDetailed
# Compute results
results = onePtAccess.Compute()
# Print results
for i in range(0,results.Count):
result = results.Item(i)
print('Time: #s HasAccess: #s' # (result.Time, str(result.AccessSatisfied)))
for j in range(0,result.Constraints.Count)
constraint = result.Constraints.Item(j)
print('Constraint: #s Object: #s Status: #s Value:#s' # (constraint.Constraint, constraint.ObjectPath, constraint.Status, str(constraint.Value())))
|
|
Compute and extract access
interval times
[Python] |
Copy
Code
|
# IAgStkAccess access: Access calculation
# Get and display the Computed Access Intervals
intervalCollection = access.ComputedAccessIntervalTimes
# Set the intervals to use to the Computed Access Intervals
computedIntervals = intervalCollection.ToArray(0, -1)
access.SpecifyAccessIntervals(computedIntervals)
|
|
Configure the access interval
to the availability time span of the object where access is being
computed to.
[Python] |
Copy
Code
|
# IAgStkObjectRoot root: STK Object Model root
satellite = root.GetObjectFromPath('/Satellite/MySatellite')
facility = root.GetObjectFromPath('/Facility/MyFacility')
access = satellite.GetAccessToObject(facility)
access.AccessTimePeriod = 2 # eUserSpecAccessTime
accessTimePeriod = access.AccessTimePeriodData
if (satellite.Vgt.EventIntervals.Contains('AvailabilityTimeSpan')):
availabilityTimeSpan = satellite.Vgt.EventIntervals.Item('AvailabilityTimeSpan')
accessTimePeriod.AccessInterval.SetImplicitInterval(availabilityTimeSpan)
|
|
Get handle to the object
access constraints
[Python] |
Copy
Code
|
# IAgSatellite satellite: Satellite object
accessConstraints = satellite.AccessConstraints
|
|
GetAccessBetweenObjectsByPath
using the output of GetExistingAccesses
[Python] |
Copy
Code
|
# IAgStkObjectRoot root: STK Object Model root
scenario = root.CurrentScenario
accesses = scenario.GetExistingAccesses()
size = len(accesses) # number of accesses
object1 = accesses[0][0] # e.g. "Satellite/MySatellite"
object2 = accesses[0][1] # e.g. "Facility/MyFacility"
computed = accesses[0][2] # e.g. True (if access has been computed)
access = scenario.GetAccessBetweenObjectsByPath(object1, object2)
|
|
Remove all access constraints
except for LOS
[Python] |
Copy
Code
|
# IAgAccessConstraintCollection accessConstraints: Access Constraint collection
for i in range(accessConstraints.Count-1,0,-1):
constraint = accessConstraints.Item(i).ConstraintName
if (constraint == 'LineOfSight') == False:
if (constraint == 'ThirdBodyObstruction'):
thirdBodyConstraint = accessConstraints.GetActiveNamedConstraint('ThirdBodyObstruction')
assignedArray = thirdBodyConstraint.AssignedObstructions
for j in range (0,len(assignedArray)):
thirdBodyConstraint.RemoveObstruction(assignedArray[j])
end
elif (constraint == 'ExclusionZone'):
accessConstraints.GetActiveNamedConstraint('ExclusionZone').RemoveAll()
else:
accessConstraints.RemoveNamedConstraint(constraint)
|
|
Create a New AdvCAT
Object
[Python] |
Copy
Code
|
# IAgScenario scenario: Scenario object
advCAT = scenario.Children.New(0,0); # eAdvCAT, AdvCAT
|
|
Add Array of Waypoints to
Aircraft
[Python] |
Copy
Code
|
# IAgAircraft aircraft: Aircraft object
route = aircraft.Route
ptsArray = [[37.5378,14.2207,3.0480,0.0772,2][47.2602,30.5517,3.0480,0.0772,2]]
route.SetPointsSmoothRateAndPropagate(ptsArray)
#Propagate the route
route.Propagate()
|
|
Create a New Aircraft (on the
current scenario central body)
[Python] |
Copy
Code
|
# IAgStkObjectRoot root: STK Object Model root
aircraft = root.CurrentScenario.Children.New(1, 'MyAircraft') # eAircraft
|
|
Set Great Arc Propagator and
Add Individual Waypoints to Aircraft
[Python] |
Copy
Code
|
# IAgAircraft aircraft: Aircraft object
# Set route to great arc, method and altitude reference
aircraft.SetRouteType(9) # ePropagatorGreatArc
route = aircraft.Route;
route.Method = 0; # eDetermineTimeAccFromVel
route.SetAltitudeRefType(0) # eWayPtAltRefMSL
# Add first point
waypoint = route.Waypoints.Add()
waypoint.Latitude = 37.5378
waypoint.Longitude = 14.2207
waypoint.Altitude = 5 # km
waypoint.Speed = .1 # km/sec
# Add second point
waypoint2 = route.Waypoints.Add()
waypoint2.Latitude = 47.2602
waypoint2.Longitude = 30.5517
waypoint2.Altitude = 5 # km
waypoint2.Speed = .1 # km/sec
#Propagate the route
route.Propagate()
|
|
Set the Attitude of the
Aircraft
[Python] |
Copy
Code
|
# IAgAircraft aircraft: Aircraft object
aircraft.Attitude.Basic.SetProfileType(24) # eCoordinatedTurn
|
|
Create an area target (on the
current scenario central body)
[Python] |
Copy
Code
|
#IAgStkObjectRoot root: STK Object Model Root
# Create the AreaTarget on the current scenario central body (use
# NewOnCentralBody to specify explicitly the central body)
areaTarget = root.CurrentScenario.Children.New(2, 'MyAreaTarget') # eAreaTarget
|
|
Define area target boundary
and position from list of lat/lon/alt
[Python] |
Copy
Code
|
# IAgStkObjectRoot root: STK Object Model Root
# IAgAreaTarget areaTarget: AreaTarget object
# By using the fine grained interfaces,
# BeginUpdate/EndUpdate prevent intermediate redraws
root.BeginUpdate()
areaTarget.AreaType = 1 # ePattern
patterns = areaTarget.AreaTypeData
patterns.Add(48.897, 18.637)
patterns.Add(46.534, 13.919)
patterns.Add(44.173, 21.476)
root.EndUpdate()
areaTarget.AutoCentroid = True
|
|
Define area target boundary
and position from list of lat/lon/alt (using common tasks)
[Python] |
Copy
Code
|
# IAgStkObjectRoot root: STK Object Model Root
# IAgAreaTarget areaTarget: AreaTarget object
# Remove all points in the area target
areaTarget.AreaTypeData.RemoveAll()
# By using the CommonTasks interface,
# make an array of lattitude and longitude boundary points
boundary = [[29, -12],[29, 34],[6, 34],[6, -12]]
# SetAreaTypePattern expects a two dimensional array of latitude and longitude values
areaTarget.CommonTasks.SetAreaTypePattern(boundary)
|
|
List all points in an area
target
[Python] |
Copy
Code
|
# IAgAreaTarget areaTarget: AreaTarget object
if (areaTarget.AreaType == 1) # ePattern
# Get IAgAreaTypePatternCollection interface from AreaTypeData
patternPoints = areaTarget.AreaTypeData
# ToArray returns a two dimensional array of latitude and longitude points
areaTargetPoints = patternPoints.ToArray()
print ('All points in Area Target')
for i in range(0,len(areaTargetPoints)):
print('Latitude #s Longitude: #s' # (str(areaTargetPoints[i][0]), str(areaTargetPoints[i][1])))
|
|
Set an elliptical area
target
[Python] |
Copy
Code
|
# IAgStkObjectRoot root: STK Object Model Root
# IAgAreaTarget areaTarget: AreaTarget object
# By using the fine grained interfaces,
# BeginUpdate/EndUpdate prevent intermediate redraws
root.BeginUpdate()
areaTarget.AreaType = 0 # eEllipse
ellipse = areaTarget.AreaTypeData
ellipse.SemiMajorAxis = 85.25 # in km (distance dimension)
ellipse.SemiMinorAxis = 80.75 # in km (distance dimension)
ellipse.Bearing = 44 # in deg (angle dimension)
root.EndUpdate()
|
|
Set an elliptical area target
(using common tasks)
[Python] |
Copy
Code
|
# IAgStkObjectRoot root: STK Object Model Root
# IAgAreaTarget areaTarget: AreaTarget object
# By using the CommonTasks interface
areaTarget.CommonTasks.SetAreaTypeEllipse(85.25, 80.75, 44)
|
|
Create a chain (on the current
scenario central body)
[Python] |
Copy
Code
|
# IAgStkObjectRoot root: STK Object Model Root
# Create the Chain on the current scenario central body (use
# NewOnCentralBody to specify explicitly the central body)
chain = root.CurrentScenario.Children.New(4, 'MyChain') # eChain
|
|
Define and compute a chain
(advance)
[Python] |
Copy
Code
|
# IAgChain chain: Chain object
# IAgSatellite satellite: Satellite object
# Remove all previous accesses
chain.ClearAccess()
# Add some objects to chain
chain.Objects.Add('Facility/MyFacility');
chain.Objects.AddObject(satellite);
# Configure chain parameters
chain.AutoRecompute = False
chain.EnableLightTimeDelay = False
chain.TimeConvergence = 0.001;
chain.DataSaveMode = 2 # eSaveAccesses
# Specify our own time period
chain.SetTimePeriodType(2) # eUserSpecifiedTimePeriod
# Get chain time period interface
chainUserTimePeriod = chain.TimePeriod
chainUserTimePeriod.SetTimePeriod(root.CurrentScenario.StartTime, root.CurrentScenario.StopTime) # Set to scenario period
# Compute the chain
chain.ComputeAccess()
|
|
Define and compute a chain
(basic)
[Python] |
Copy
Code
|
# IAgChain chain: Chain object
# Add some objects to chain (using STK path)
chain.Objects.Add('Facility/MyFacility')
chain.Objects.Add('Satellite/MySatellite')
# Compute the chain
chain.ComputeAccess()
|
|
Prints the strand intervals of
chain object
[Python] |
Copy
Code
|
# IAgChain chain: Chain Object
# Compute the chain access if not done already.
chain.ComputeAccess()
# Considered Start and Stop time
print('Chain considered start time: #s' # chain.Vgt.Events.Item('ConsideredStartTime').FindOccurrence().Epoch)
print('Chain considered stop time: #s' # chain.Vgt.Events.Item('ConsideredStopTime').FindOccurrence().Epoch)
objectParticipationIntervals = chain.Vgt.EventIntervalCollections.Item('StrandAccessIntervals')
intervalListResult = objectParticipationIntervals.FindIntervalCollection()
for i in range(0,intervalListResult.IntervalCollections.Count):
if intervalListResult.IsValid:
print('Link Name: #s' # objectParticipationIntervals.Labels(i+1))
print('--------------')
for j in range(0,intervalListResult.IntervalCollections.Item(i).Count):
startTime = intervalListResult.IntervalCollections.Item(i).Item(j).Start
stopTime = intervalListResult.IntervalCollections.Item(i).Item(j).Stop
print('Start: #s Stop: #s' # (startTime, stopTime))
|
|
Create a New Antenna
Object
[Python] |
Copy
Code
|
# IAgSTKObject satellite: STK object
antenna = satellite.Children.New(31, 'MyAntenna') # eAntenna
|
|
Modify Antenna Graphics
[Python] |
Copy
Code
|
# IAgAntenna antenna: Antenna object
contours = antenna.Graphics.ContourGraphics
contours.SetContourType(0) # eAntennaContourTypeGain
contours.Show = True
for i in range(-30,30,5):
contours.Contour.Levels.Add(i)
antenna.VO.ShowContours = True
antenna.VO.VolumeGraphics.Show = True
|
|
Modify Antenna Model Type
[Python] |
Copy
Code
|
# IAgAntenna antenna: Antenna object
antenna.SetModel('Dipole')
antennaModel = antenna.Model
antennaModel.DesignFrequency = 15 # GHz
antennaModel.Length = 1.5 # m
antennaModel.LengthToWavelengthRatio = 45
antennaModel.Efficiency = 85; # Percent
|
|
Modify Antenna Orientation and
Position
[Python] |
Copy
Code
|
# IAgAntenna antenna: Antenna object
antOrientation = antenna.Orientation
antOrientation.AssignAzEl(0,-90,1) # 1 represents Rotate About Boresight
antOrientation.PositionOffset.X = 0.0 # m
antOrientation.PositionOffset.Y = 1 # m
antOrientation.PositionOffset.Z = 0.25 # m
|
|
Modify Antenna Refraction
[Python] |
Copy
Code
|
# IAgAntenna antenna: Antenna object
antenna.UseRefractionInAccess = True
antenna.Refraction = 3 # eITU_R_P834_4
refraction = antenna.RefractionModel
refraction.Ceiling = 5000 # m
refraction.AtmosAltitude = 10000 # m
refraction.KneeBendFactor = 0.2
|
|
Create a New Receiver
Object
[Python] |
Copy
Code
|
# IAgSTKObject satellite: STK object
receiver = satellite.Children.New(17, 'MyReceiver') # eReceiver
|
|
Modify Receiver Demodulator
Properties
[Python] |
Copy
Code
|
# IAgReceiver receiver: Receiver object
recModel = receiver.Model
recModel.AutoSelectDemodulator = False
recModel.SetDemodulator('16PSK')
|
|
Modify Receiver Embedded
Antenna
[Python] |
Copy
Code
|
# IAgReceiver receiver: Receiver object
recModel = receiver.Model
antennaControl = recModel.AntennaControl
antennaControl.SetEmbeddedModel('Hemispherical')
antennaControl.EmbeddedModel.Efficiency = 85 # Percent
|
|
Modify Receiver Filter
Properties
[Python] |
Copy
Code
|
# IAgReceiver receiver: Receiver object
recModel = receiver.Model
recModel.EnableFilter = True
recModel.SetFilter('Bessel')
recFilter = recModel.Filter
recFilter.LowerBandwidthLimit = -20
recFilter.UpperBandwidthLimit = 20
recFilter.CutoffFrequency = 10
|
|
Modify Receiver Model
Type
[Python] |
Copy
Code
|
# IAgReceiver receiver: Receiver object
receiver.SetModel('Complex Receiver Model')
recModel = receiver.Model
recModel.AutoTrackFrequency = False
recModel.Frequency = 11.81
|
|
Modify Receiver Polarization
Properties
[Python] |
Copy
Code
|
# IAgReceiver receiver: Receiver object
recModel = receiver.Model
recModel.EnablePolarization = True
recModel.SetPolarizationType(3) # ePolarizationTypeLinear
polarization = recModel.Polarization
polarization.ReferenceAxis = 2 # ePolarizationReferenceAxisZ
polarization.CrossPolLeakage = -60 # dB
|
|
Modify Receiver System Noise
Temperature
[Python] |
Copy
Code
|
# IAgReceiver receiver: Receiver object
recModel = receiver.Model
recModel.SystemNoiseTemperature.ConstantNoiseTemperature = 280 # K
|
|
Receiver Additonal Gain
[Python] |
Copy
Code
|
# IAgReceiver receiver: Receiver object
recModel = receiver.Model
gain = recModel.PreReceiveGainsLosses.Add(5) # dB
gain.Identifier = 'Example Gain'
|
|
Create a New Transmitter
Object
[Python] |
Copy
Code
|
# IAgSTKObject satellite: STK object
transmitter = satellite.Children.New(24, 'MyTransmitter') # eTransmitter
|
|
Modify Transmitter Embedded
Antenna
[Python] |
Copy
Code
|
# IAgTransmitter transmitter: Transmitter object
txModel = transmitter.Model
antennaControl = txModel.AntennaControl
antennaControl.SetEmbeddedModel('Isotropic')
antennaControl.EmbeddedModel.Efficiency = 85 # Percent
|
|
Modify Transmitter Filter
[Python] |
Copy
Code
|
# IAgTransmitter transmitter: Transmitter object
txModel = transmitter.Model
txModel.EnableFilter = True
txModel.SetFilter('Butterworth')
recFilter = txModel.Filter
recFilter.LowerBandwidthLimit = -20
recFilter.UpperBandwidthLimit = 20
recFilter.CutoffFrequency = 10
|
|
Modify Transmitter Model
Type
[Python] |
Copy
Code
|
# IAgTransmitter transmitter: Transmitter object
transmitter.SetModel('Complex Transmitter Model')
txModel = transmitter.Model
txModel.Frequency = 14 # GHz
txModel.Power = 25 # dBW
txModel.DataRate = 15 # Mb/sec
|
|
Modify Transmitter Modulator
Properties
[Python] |
Copy
Code
|
# IAgTransmitter transmitter: Transmitter object
txModel = transmitter.Model
txModel.SetModulator('BPSK')
txModel.Modulator.AutoScaleBandwidth = True
|
|
Modify Transmitter Orientation
and Position
[Python] |
Copy
Code
|
# IAgTransmitter transmitter: Transmitter object
txModel = transmitter.Model
antennaControl = txModel.AntennaControl
antOrientation = antennaControl.EmbeddedModelOrientation
antOrientation.AssignAzEl(0, 90, 1) # 1 represents Rotate About Boresight
antOrientation.PositionOffset.X = 0.0 # m
antOrientation.PositionOffset.Y = 1 # m
antOrientation.PositionOffset.Z = 0.25 # m
|
|
Modify Transmitter
Polarization Properties
[Python] |
Copy
Code
|
# IAgTransmitter transmitter: Transmitter object
txModel = transmitter.Model
txModel.EnablePolarization = True
recModel.SetPolarizationType(3) # ePolarizationTypeLinear
polarization = txModel.Polarization
polarization.ReferenceAxis = 1 # ePolarizationReferenceAxisY
polarization.TiltAngle = 15 # deg
|
|
Transmitter Additonal
Gain
[Python] |
Copy
Code
|
# IAgTransmitter transmitter: Transmitter object
txModel = transmitter.Model
gain = txModel.PostTransmitGainsLosses.Add(-5) # dB
gain.Identifier = 'Example Loss'
|
|
Define a constellation
[Python] |
Copy
Code
|
# IAgStkObjectRoot root: STK Object Model Root
constellation = root.CurrentScenario.Children.New(6,'MyConstellation') # eConstellation
constellation.Objects.AddObject(satellite)
constellation.Objects.Add('*/Facility/MyFacility')
|
|
Compute Coverage
[Python] |
Copy
Code
|
# IAgCoverageDefinition coverage: Coverage object
coverage.ComputeAccesses()
|
|
Create a New
CoverageDefinition (on the current scenario central body)
[Python] |
Copy
Code
|
# IAgScenario scenario: Scenario object
#Create new Coverage Defintion and set the Bounds to an area target
coverage = scenario.Children.New(7, 'MyCoverage')
coverage.Grid.BoundsType = 0 # eBoundsCustomRegions
covGrid = coverage.Grid
bounds = covGrid.Bounds
bounds.AreaTargets.Add('AreaTarget/MyAreaTarget')
#Define the Grid Resolution
Res = covGrid.Resolution
Res.LatLon = .5 #deg
#Set the satellite as the Asset
coverage.AssetList.Add('Satellite/MySatellite')
# Turn off Show Grid Points
coverage.Graphics.Static.IsPointsVisible = False
|
|
Set Advanced Settings for
Coverage
[Python] |
Copy
Code
|
# IAgCoverageDefinition coverage: Coverage object
advanced = coverage.Advanced
advanced.AutoRecompute = False
advanced.DataRetention = 0 # eAllData
advanced.SaveMode = 2 # eSaveAccesses
|
|
Extracting Elements from Data
Providers with Groups
[Python] |
Copy
Code
|
# IAgStkObjectRoot root: STK Object Model root
# IAgSatellite satellite: Satellite object
# IAgScenario scenario: Scenario object
#Change DateFormat dimension to epoch seconds to make the data easier to handle in
#Python
root.UnitPreferences.Item('DateFormat').SetCurrentUnit('EpSec')
satPosDP = satellite.DataProviders.Item('Cartesian Position').Group.Item('ICRF').Exec(scenario.StartTime,scenario.StopTime,60)
satx = satPosDP.DataSets.GetDataSetByName('x').GetValues
saty = satPosDP.DataSets.GetDataSetByName('y').GetValues
satz = satPosDP.DataSets.GetDataSetByName('z').GetValues
satVelDP = satellite.DataProviders.GetDataPrvTimeVarFromPath('Cartesian Velocity/ICRF').Exec(scenario.StartTime,scenario.StopTime,60)
#There are 4 Methods to get DP From a Path depending on the kind of DP:
# GetDataPrvTimeVarFromPath
# GetDataPrvIntervalFromPath
# GetDataPrvInfoFromPath
# GetDataPrvFixedFromPath
satvx = satVelDP.DataSets.GetDataSetByName('x').GetValues
satvy = satVelDP.DataSets.GetDataSetByName('y').GetValues
satvz = satVelDP.DataSets.GetDataSetByName('z').GetValues
|
|
Extracting Elements from Data
Providers with PreData
[Python] |
Copy
Code
|
# IAgStkObjectRoot root: STK Object Model root
# IAgFacility facility: Facility object
# IAgScenario scenario: Scenario object
#Change DateFormat dimension to epoch seconds to make the data easier to handle in
#Python
root.UnitPreferences.Item('DateFormat').SetCurrentUnit('EpSec')
facChooseDP = facility.DataProviders.Item('Points Choose System')
dataProvCenter = facChooseDP.Group.Item('Center')
#Choose the referense system you want to report the Center point in
dataProvCenter.PreData = 'CentralBody/Earth TOD'
rptElems = [['Time'],['x'],['y'],['z']]
results = dataProvCenter.ExecElements(scenario.StartTime, scenario.StopTime, 60, rptElems)
datasets = results.DataSets
Time = datasets.GetDataSetByName('Time').GetValues
facTODx = datasets.GetDataSetByName('x').GetValues
facTODy = datasets.GetDataSetByName('y').GetValues
facTODz = datasets.GetDataSetByName('z').GetValues
|
|
Getting Data for a Single
Point in Time
[Python] |
Copy
Code
|
# IAgStkObjectRoot root: STK Object Model root
# IAgSatellite satellite: Satellite object
#Change DateFormat dimension to epoch seconds to make the data easier to handle in
#Python
root.UnitPreferences.Item('DateFormat').SetCurrentUnit('EpSec');
satPassDP = satellite.DataProviders.Item('Precision Passes').ExecSingle(2600)
pass = satPassDP.DataSets.GetDataSetByName('Precision Pass Number').GetValues
|
|
Getting Data for Specific
Points and Elements
[Python] |
Copy
Code
|
# IAgStkObjectRoot root: STK Object Model root
# IAgSatellite satellite: Satellite object
#Change DateFormat dimension to epoch seconds to make the data easier to handle in
#Python
root.UnitPreferences.Item('DateFormat').SetCurrentUnit('EpSec')
times = [[0],[15000],[20000],[55000]]
elems = [['Time'],['Precision Pass Number']]
satPassesDP = satellite.DataProviders.Item('Precision Passes').ExecSingleElementsArray(times,elems)
passes = satPassesDP.GetArray(1)
|
|
Using an interval Data
Provider
[Python] |
Copy
Code
|
# IAgStkObjectRoot root: STK Object Model root
# IAgSatellite satellite: Satellite object
# IAgFacility facility: Facility object
#Change DateFormat dimension to epoch seconds to make the data easier to handle in
#Python
root.UnitPreferences.Item('DateFormat').SetCurrentUnit('EpSec')
#Get the current scenario
scenario = root.CurrentScenario
#Set up the access object
access = satellite.GetAccessToObject(facility)
access.ComputeAccess()
#Get the Access AER Data Provider
accessDP = access.DataProviders.Item('Access Data').Exec(scenario.StartTime, scenario.StopTime)
accessStartTimes = accessDP.DataSets.GetDataSetByName('Start Time').GetValues
accessStopTimes = accessDP.DataSets.GetDataSetByName('Stop Time').GetValues
|
|
Using an Time Dependent Data
Provider and requesting only specified elements
[Python] |
Copy
Code
|
# IAgStkObjectRoot root: STK Object Model root
# IAgSatellite satellite: Satellite object
# IAgScenario scenario: Scenario object
#Change DateFormat dimension to epoch seconds to make the data easier to handle in
#Python
root.UnitPreferences.Item('DateFormat').SetCurrentUnit('EpSec')
elems = [['Time'],['q1'],['q2'],['q3'],['q4']]
satDP = satellite.DataProviders.Item('Attitude Quaternions').ExecElements(scenario.StartTime, scenario.StopTime, 60, elems)
#Whenever you pass an index to an array, you need to cast it to a long
#equivalent (int32)
satTime = satDP.DataSets.Item(0).GetValues
satq1 = satDP.DataSets.Item(1).GetValues
satq2 = satDP.DataSets.Item(2).GetValues
satq3 = satDP.DataSets.Item(3).GetValues
satq4 = satDP.DataSets.Item(4).GetValues
|
|
Add a AzEl Mask to a
Facility
[Python] |
Copy
Code
|
# IAgFacility facility: Facility Object
facility.SetAzElMask(1,0) # eTerrainData
|
|
Create a facility (on the
current scenario central body)
[Python] |
Copy
Code
|
# IAgStkObjectRoot root: STK Object Model Root
facility = root.CurrentScenario.Children.New(8, 'MyFacility') # eFacility
|
|
Set the geodetic position of
the facility
[Python] |
Copy
Code
|
# IAgFacility facility: Facility Object
facility.Position.AssignGeodetic(41.9849,21.4039,0) # Latitude, Longitude, Altitude
# Set altitude to height of terrain
facility.UseTerrain = True
# Set altitude to a distance above the ground
facility.HeightAboveGround = .05; # km
|
|
Display the AzElMask in
2D/3D
[Python] |
Copy
Code
|
# IAgFacility facility: Facility Object
azelMask = facility.Graphics.AzElMask
azelMask.RangeVisible = True
azelMask.NumberOfRangeSteps = 10
azelMask.DisplayRangeMinimum = 0 # km
azelMask.DisplayRangeMaximum = 100 # km
azelMask.RangeColorVisible = True
azelMask.RangeColor = 16776960 # cyan
|
|
Configure the Contours of the
FOM and define a color ramp
[Python] |
Copy
Code
|
# IAgCoverageDefinition coverage: Coverage object
# IAgFigureOfMerit fom: Figure Of Merit object
satisfaction = coverage.Graphics.Static
satisfaction.IsRegionVisible = False
Animation = fom.VO.Animation
Animation.IsVisible = False
VOcontours = fom.VO.Static
VOcontours.IsVisible = True
contours = fom.Graphics.Static.Contours
contours.IsVisible = True
contours.ContourType = 1 # eSmoothFill
contours.ColorMethod = 0 # eColorRamp
contours.LevelAttributes.RemoveAll()
contours.LevelAttributes.AddLevelRange(590, 660, 10) #Start, Start, Step
contours.RampColor.StartColor = 255 #Red
contours.RampColor.EndColor = 16711680 #Blue
|
|
Create a new Figure of Merit
of type Access Duration
[Python] |
Copy
Code
|
# IAgCoverageDefinition coverage: Coverage object
fom = coverage.Children.New(25, 'AccessDuration') # eFigureOfMerit
fom.SetDefinitionType(1) # eFmAccessDuration
fom.Definition.SetComputeType(1) # eMaximum
|
|
Add Array of Waypoints to
Ground Vehicle and Interpolate over Terrain
[Python] |
Copy
Code
|
# IAgGroundVehicle grndVehicle: Ground Vehicle object
route = grndVehicle.Route
ptsArray = [[41.97766217,21.44863761,0,0.026,.5],[41.97422351,21.39956154,0,0.026,.5],[41.99173299,21.40796942,0,0.026,.5]]
route.SetPointsSmoothRateAndPropagate(ptsArray)
route.SetAltitudeRefType(1) # eWayPtAltRefTerrain
route.AltitudeRef.Granularity = .001
route.altitudeRef.InterpMethod = 1 # eWayPtTerrainHeight
#Propagate the route
route.Propagate()
|
|
Create a New Ground Vehicle
(on the current scenario central body)
[Python] |
Copy
Code
|
# IAgScenario scenario: Scenario object
grndVehicle = scenario.Children.New(9,'MyVehicle') # eGroundVehicle
grndVehicle.SetRouteType(9) # ePropagatorGreatArc
|
|
Set Great Arc Propagator and
Add Individual Waypoints to Ground Vehicle
[Python] |
Copy
Code
|
# IAgGroundVehicle grndVehicle: Ground Vehicle object
# Set route to great arc, method and altitude reference
grndVehicle.SetRouteType(9) # ePropagatorGreatArc
route = grndVehicle.Route
route.Method = 0 # eDetermineTimeAccFromVel
route.SetAltitudeRefType(2) # eWayPtAltRefWGS84
# Add first point
waypoint = route.Waypoints.Add()
waypoint.Latitude = 56.18
waypoint.Longitude = 40.91
waypoint.Altitude = 0 # km
waypoint.Speed = .026 # km/sec
# Add second point
waypoint2 = route.Waypoints.Add()
waypoint2.Latitude = 50.22
waypoint2.Longitude = 11.05
waypoint2.Altitude = 0 # km
waypoint2.Speed = .026 # km/sec
#Propagate the route
route.Propagate()
|
|
Create a New LineTarget (on
the current scenario central body)
[Python] |
Copy
Code
|
#IAgScenario scenario: Scenario object
lineTarget = scenario.Children.New(11,'MyLineTarget') # eLineTarget
point1 = lineTarget.Points.Add(34.72, -118.34)
point2 = lineTarget.Points.Add(30.83, -82.67)
|
|
Create a New Missile (on the
current scenario central body)
[Python] |
Copy
Code
|
# IAgScenario scenario: Scenario object
missile = scenario.Children.New(13,'MyMissile') # eMissile
missile.SetTrajectoryType(10) # ePropagatorBallistic
trajectory = missile.Trajectory
trajectory.StartTime = 0
trajectory.Launch.Lat = 29
trajectory.Launch.Lon = -81
trajectory.ImpactLocation.Impact.Lat = 27
trajectory.ImpactLocation.Impact.Lon = -43
trajectory.ImpactLocation.SetLaunchControlType(0) # eLaunchControlFixedApogeeAlt
trajectory.impactLocation.LaunchControl.ApogeeAlt = 1200 # km
trajectory.Propagate()
|
|
Create a New MTO (on the
current scenario central body)
[Python] |
Copy
Code
|
# IAgScenario scenario: Scenario object
mto = scenario.Children.New(12,'MyMTO') # eMTO
mtoTimes = [[0],[7200]]
mtoLats = [[36.77],[34.80]]
mtoLons = [[-77.25],[-78.37]]
mtoAlts = [[5],[5]]
track1 = mto.Tracks.AddTrack(1,mtoTimes,mtoLats,mtoLons,mtoAlts)
track1.Interpolate = True
# Change the color of the track
mto.Graphics.Tracks.GetTrackFromId(1).Color = 255
|
|
Load MTO track points from
file
[Python] |
Copy
Code
|
# LoadPoints expects the path an Ephemeris file path
# IAgMto mto: MTO Object
track2 = mto.Tracks.Add(2)
track2.Points.LoadPoints(r'C:\Program Files\AGI\STK 11\Help\stktraining\text\EphemerisLLATimePosVel_Example.e')
track2.Interpolate = True
|
|
Compute Object Coverage
[Python] |
Copy
Code
|
# IAgAircraft aircraft: Aircraft object
objCoverage = aircraft.ObjectCoverage
objCoverage.Assets.RemoveAll
objCoverage.Assets.Add('Satellite/MySatellite')
objCoverage.UseObjectTimes = True
objCoverage.Compute()
objCoverageFOM = objCoverage.FOM
objCoverageFOM.SetDefinitionType(3) # eFmCoverageTime
objCoverageFOM.Definition.SetComputeType(16) # eTotal
|
|
Create a New Planet
[Python] |
Copy
Code
|
# IAgScenario scenario: Scenario object
planet = scenario.Children.New(15,'Mars') # ePlanet
planet.CommonTasks.SetPositionSourceCentralBody('Mars',4) # eEphemJPLDE
|
|
Modify Planet 2D
Properties
[Python] |
Copy
Code
|
# IAgPlanet planet: Planet object
planet2D = planet.Graphics
planet2D.Color = 255 # Red
planet2D.Inherit = False
planet2D.OrbitVisible = True
planet2D.SubPlanetPointVisible = False
planet2D.SubPlanetLabelVisible = False
|
|
Create a satellite (on the
current scenario central body)
[Python] |
Copy
Code
|
# IAgStkObjectRoot root: STK Object Model Root
satellite = root.CurrentScenario.Children.New(18, 'MySatellite') # eSatellite
|
|
Set initial state of satellite
and propagate
[Python] |
Copy
Code
|
# IAgSatellite satellite: Satellite object
keplerian = satellite.Propagator.InitialState.Representation.ConvertTo(1) # eOrbitStateClassical, Use the Classical Element interface
keplerian.SizeShapeType = 0 # eSizeShapeAltitude, Changes from Ecc/Inc to Perigee/Apogee Altitude
keplerian.LocationType = 5 # eLocationTrueAnomaly, Makes sure True Anomaly is being used
keplerian.Orientation.AscNodeType = 0 # eAscNodeLAN, Use LAN instead of RAAN for data entry
# Assign the perigee and apogee altitude values:
keplerian.SizeShape.PerigeeAltitude = 500 # km
keplerian.SizeShape.ApogeeAltitude = 600 # km
# Assign the other desired orbital parameters:
keplerian.Orientation.Inclination = 90 # deg
keplerian.Orientation.ArgOfPerigee = 12 # deg
keplerian.Orientation.AscNode.Value = 24 # deg
keplerian.Location.Value = 180 # deg
# Apply the changes made to the satellite's state and propagate:
satellite.Propagator.InitialState.Representation.Assign(keplerian)
satellite.Propagator.Propagate()
|
|
Set satellite attitude basic
spinning
[Python] |
Copy
Code
|
# IAgSatellite satellite: Satellite object
basic = satellite.Attitude.Basic
basic.SetProfileType(16) # eProfileSpinning
basic.Profile.Body.AssignXYZ(0,0,1)
basic.Profile.Inertial.AssignXYZ(0,1,0)
basic.Profile.Rate = 6 # rev/sec
|
|
Set satellite attitude
external
[Python] |
Copy
Code
|
# IAgSatellite satellite: Satellite object
satellite.Attitude.External.Load(r'C:\Program Files\AGI\STK 11\Help\stktraining\text\AttitudeTimeEulerAngles_Example.a')
|
|
Set satellite attitude
targeting
[Python] |
Copy
Code
|
# IAgSatellite satellite: Satellite object
attitudePointing = satellite.Attitude.Pointing
attitudePointing.UseTargetPointing = 1
attitudePointing.Targets.RemoveAll()
attitudePointing.Targets.Add('AreaTarget/MyAreaTarget')
attitudePointing.TargetTimes.UseAccessTimes = True
|
|
Set satellite propagator to
Astrogator and clear segments
[Python] |
Copy
Code
|
# IAgSatellite satellite: Satellite object
satellite.SetPropagatorType(12) # ePropagatorAstrogator
driver = satellite.Propagator
#Clear all segments from the MCS
driver.MainSequence.RemoveAll()
|
|
Set satellite propagator to
HPOP and set force model properties
[Python] |
Copy
Code
|
# IAgSatellite satellite: Satellite object
satellite.SetPropagatorType(0) # ePropagatorHPOP
satellite.Propagator.Step = 60
satellite.Propagator.InitialState.Representation.AssignCartesian(2,6406.92,-1787.59,-506.422,2.10185,6.48871,3.64041) # eCoordinateSystemFixed
forceModel = satellite.Propagator.ForceModel
forceModel.CentralBodyGravity.File = r'C:\Program Files\AGI\STK 11\STKData\CentralBodies\Earth\WGS84_EGM96.grv'
forceModel.CentralBodyGravity.MaxDegree = 21
forceModel.CentralBodyGravity.MaxOrder = 21
forceModel.Drag.Use=1
forceModel.Drag.DragModel.Cd=0.01
forceModel.Drag.DragModel.AreaMassRatio=0.01
forceModel.SolarRadiationPressure.Use=0
integrator = satellite.Propagator.Integrator
integrator.DoNotPropagateBelowAlt=-1e6
integrator.IntegrationModel=3
integrator.StepSizeControl.Method=1
integrator.StepSizeControl.ErrorTolerance=1e-13
integrator.StepSizeControl.MinStepSize=0.1
integrator.StepSizeControl.MaxStepSize=30
integrator.Interpolation.Method=1
integrator.Interpolation.Order=7
satellite.Propagator.Propagate()
|
|
Set satellite propagator to J4
and assign cartesian position
[Python] |
Copy
Code
|
# IAgSatellite satellite: Satellite object
satellite.SetPropagatorType(2) # ePropagatorJ4Perturbation
propagator = satellite.Propagator
propagator.InitialState.Representation.AssignCartesian(11,6678.14,0,0,0,6.78953,3.68641) # eCoordinateSystemICRF
propagator.Propagate()
|
|
Set satellite propagator to
SGP4 and propagate
[Python] |
Copy
Code
|
# IAgSatellite satellite: Satellite object
satellite.SetPropagatorType(4) # ePropagatorSGP4
propagator = satellite.Propagator
propagator.UseScenarioAnalysisTime
propagator.CommonTasks.AddSegsFromOnlineSource('25544') # International Space Station
propagator.AutoUpdateEnabled = True
propagator.Propagate()
|
|
Set satellite propagator to
SPICE and propagate
[Python] |
Copy
Code
|
# IAgSatellite satellite: Satellite object
# IAgStkObjectRoot root: STK Object Model Root
satellite.SetPropagatorType(5) # ePropagatorSPICE
propagator = satellite.propagator
propagator.Spice = r'C:\Program Files\AGI\STK 11\STKData\Spice\planets.bsp'; # Make sure this is a valid path
propagator.BodyName = 'MARS'
propagator.StartTime = root.CurrentScenario.StartTime # Set to scenario start time
propagator.StopTime = root.CurrentScenario.StopTime# # Set to scenario stop time
propagator.Step = 60.0
propagator.Propagate()
|
|
Run the Astrogator MCS
[Python] |
Copy
Code
|
# IAgVADriverMCS driver: MCS driver interface
driver.RunMCS()
|
|
Add a Data Display to the 3D
Window
[Python] |
Copy
Code
|
# IAgSatellite satellite: Satellite object
#Remove all data displays so you can easily pick one that may already be in
#the list
satellite.VO.DataDisplay.RemoveAll()
#Add LLA data display and change size/title
datadisplay = satellite.VO.DataDisplay.Add('LLA Position')
datadisplay.IsVisible = True
datadisplay.FontSize = 1 # eMedium
datadisplay.TitleText = 'My Data Display';
datadisplay.IsShowNameEnabled = False
|
|
Add a Vector to display in
3D
[Python] |
Copy
Code
|
# IAgSatellite satellite: Satellite object
vector = satellite.VO.Vector
angVel = vector.RefCrdns.Add(0, 'Satellite/MySatellite AngVelocity')
angVel.LabelVisible = True
|
|
Add Fixed System Orbit System
in 3D Display
[Python] |
Copy
Code
|
# IAgSatellite satellite: Satellite object
orbitsystems = satellite.VO.OrbitSystems
orbitsystems.FixedByWindow.IsVisible = True
orbitsystems.FixedByWindow.Inherit = False
orbitsystems.FixedByWindow.Color = 65535 #yellow
|
|
Change the 3D Model and marker
properties
[Python] |
Copy
Code
|
# IAgSatellite satellite: Satellite object
model = satellite.VO.Model
model.ModelData.Filename = 'STKData\VO\Models\Space\dsp.mdl'
orbitmarker = model.OrbitMarker
orbitmarker.SetMarkerImageFile(r'C:\Program Files\AGI\STK 11\STKData\VO\Markers\Satellite.ppm')
orbitmarker.MarkerData.IsTransparent = True
orbitmarker.PixelSize = 18
orbitmarker.OrientationMode = 2 # eVOMarkerOrientationFollowDirection
|
|
Change the Display Label of
the vehicle
[Python] |
Copy
Code
|
# IAgSatellite satellite: Satellite object
satellite.Graphics.UseInstNameLabel = False
satellite.Graphics.LabelName = 'Python Satellite'
|
|
Change the graphics resolution
of the orbit for a smooth path
[Python] |
Copy
Code
|
# IAgSatellite satellite: Satellite object
resolution = satellite.Graphics.Resolution
resolution.Orbit = 60
|
|
Display droplines in 3D
Window
[Python] |
Copy
Code
|
# IAgSatellite satellite: Satellite object
orbitDroplines = satellite.VO.DropLines.Orbit
wgs84 = orbitDroplines.Item(0) # Droplines to WGS84 surface
wgs84.IsVisible = True
wgs84.LineWidth = 1
wgs84.Use2DColor = False
wgs84.Color = 255 #red
|
|
Modify the Detail Thresholds
Levels
[Python] |
Copy
Code
|
# IAgSatellite satellite: Satellite object
details = satellite.VO.Model.DetailThreshold
details.EnableDetailThreshold = True
details.All = 1 # km
details.ModelLabel = 2 # km
details.MarkerLabel = 40000 # km
details.Marker = 500000 # km
details.Point = 500000 # km
|
|
Set 2D Display times to Custom
and add intervals
[Python] |
Copy
Code
|
# IAgStkObjectRoot root: STK Object Model root
# IAgSatellite satellite: Satellite object
root.UnitPreferences.Item('DateFormat').SetCurrentUnit('EpSec')
graphics = satellite.Graphics
graphics.SetAttributesType(2) # eAttributesCustom
graphics.Attributes.Default.IsVisible = False
interval1 = graphics.Attributes.Intervals.Add(0,3600)
interval1.GfxAttributes.IsVisible = True
interval1.GfxAttributes.Inherit = False
interval1.GfxAttributes.Line.Width = 1
interval1.GfxAttributes.Line.Style = 16 # eLongDash
interval1.GfxAttributes.Color = 16711935
interval1.GfxAttributes.MarkerStyle = 'X'
interval2 = satellite.Graphics.Attributes.Intervals.Add(7200,86400)
interval2.GfxAttributes.IsVisible = True
interval2.GfxAttributes.Inherit = False
interval2.GfxAttributes.Line.Width = 1
interval2.GfxAttributes.Line.Style = 1 # eDashed
interval2.GfxAttributes.Color = 65280
interval2.GfxAttributes.MarkerStyle = 'Point'
|
|
Set 2D Graphics display
properties
[Python] |
Copy
Code
|
# IAgStkObjectRoot root: STK Object Model root
# IAgSatellite satellite: Satellite object
#Change the line width, style, color and marker
graphics = satellite.Graphics
graphics.SetAttributesType(1) # eAttributesBasic
attributes = graphics.Attributes
attributes.Inherit = False
attributes.Line.Width = 3
attributes.Line.Style = 16 # eLongDash
attributes.Color = 65280
attributes.MarkerStyle = r'C:\Program Files\AGI\STK 11\STKData\Pixmaps\MarkersWin\m010Satellite.bmp'
|
|
Set 2D Swath
[Python] |
Copy
Code
|
# IAgSatellite satellite: Satellite object
#Set swath in the 2D properties
swath = satellite.Graphics.Swath
swath.SetElevationType(0) # eElevationGroundElevation
swath.Elevation.Angle = 30 # deg
satellite.Graphics.Swath.Options = 0 # eOptionsEdgeLimits
|
|
Set 2D/3D Elevation
Contours
[Python] |
Copy
Code
|
# IAgSatellite satellite: Satellite object
#Set the contours in the 2D properties
contours = satellite.Graphics.ElevContours
contours.IsVisible = True
contours.NumOfDecimalDigits = 0
contours.Elevations.AddLevelRange(0,90,10) # Min, Max, Step
#Turn the contours on in the 3D properties
satellite.VO.ElevContours.IsVisible = True
|
|
Set 2D/3D Pass Display
Properties
[Python] |
Copy
Code
|
# IAgSatellite satellite: Satellite object
#Display one pass for ground track and orbit on 2D
passdata = satellite.Graphics.PassData
groundTrack = passdata.GroundTrack
groundTrack.SetLeadDataType(5) # eDataOnePass
groundTrack.SetTrailSameAsLead
orbit = passdata.Orbit
orbit.SetLeadDataType(5) # eDataOnePass
orbit.SetTrailSameAsLead
#Display one orbit pass and no ground track on 3D
passdata3D = satellite.VO.Pass.TrackData.PassData
groundTrack3D = passdata3D.GroundTrack
groundTrack3D.SetLeadDataType(0) # eDataNone
groundTrack3D.SetTrailSameAsLead
orbit3D = passdata3D.Orbit
orbit3D.SetLeadDataType(5) # eDataOnePass
orbit3D.SetTrailSameAsLead
|
|
Set 2D/3D Range Contours
[Python] |
Copy
Code
|
# IAgSatellite satellite: Satellite object
#Set a contour level in the 2D properties
rangeContours = satellite.Graphics.RangeContours
rangeContours.IsVisible = True
rangeLevel = rangeContours.LevelAttributes.AddLevel(2000) # km
rangeLevel.Color = 16711935
rangeLevel.LineWidth = 4
rangeLevel.LabelAngle = 90
rangeLevel.UserTextVisible = True
rangeLevel.UserText = 'Range'
#Turn the contours on in the 3D properties
satellite.VO.RangeContours.IsVisible = True
|
|
Set Vehicle Lighting
Properties
[Python] |
Copy
Code
|
# IAgSatellite satellite: Satellite object
lighting = satellite.Graphics.Lighting
#Settings for vehicle in sunlight
sunlight = lighting.Sunlight
sunlight.Visible = True
sunlight.Color = 65535 #yellow
sunlight.LineWidth = 3
#Settings for vehicle in penumbra
penumbra = lighting.Penumbra
penumbra.Visible = True
penumbra.Color = 42495 #orange
penumbra.LineWidth = 2
#Settings for vehicle in umbra
umbra = lighting.Umbra
umbra.Visible = True
umbra.Color = 255 #red
umbra.LineWidth = 1
|
|
Attach a Sensor Object to a
Vehicle
[Python] |
Copy
Code
|
# IAgSatellite satellite: Satellite object
sensor = satellite.Children.New(20,'MySensor') # eSensor
|
|
Sensor Body Mask
[Python] |
Copy
Code
|
# IAgSensor sensor: Sensor object
sensor.SetAzElMaskFile(r'C:\Program Files\AGI\STK 11\Help\stktraining\text\BodyMask_hga.bmsk')
|
|
Set Sensor Properties
[Python] |
Copy
Code
|
# IAgSensor sensor: Sensor object
# Change pattern and set
sensor.CommonTasks.SetPatternRectangular(20,25);
# Change pointing and set
sensor.CommonTasks.SetPointingFixedAzEl(90,60,1) # eAzElAboutBoresightRotate
# Change location and set
sensor.SetLocationType(0) # eSnFixed
sensor.LocationData.AssignCartesian(-.0004,-.0004,.004)
|
|
Sensor Persistence
[Python] |
Copy
Code
|
# IAgSensor sensor: Sensor object
projection = sensor.Graphics.Projection
projection.Persistence = 7200 # sec
projection.ForwardPersistence = True
projection.FillPersistence = True
sensor.Graphics.FillVisible = True
sensor.Graphics.PercentTranslucency = 50
|
|
Execute Connect command
[Python] |
Copy
Code
|
root.ExecuteCommand('New / */Target MyTarget')
|
|
Execute multiple Connect
commands
[Python] |
Copy
Code
|
commandList = [['New / */Place MyPlace'],['SetPosition */Place/MyPlace Geodetic 37.9 -75.5 0.0']]
root.ExecuteMultipleCommands(commandList,2) # eExceptionOnError
|
|
Extract data from Connect
result
[Python] |
Copy
Code
|
result = root.ExecuteCommand('Report_RM */Place/MyPlace Style "Cartesian Position"')
for i in range(0,result.Count):
cmdRes = result.Item(i)
print(' #s ' # cmdRes)
|
|
Change camera reference
frame
[Python] |
Copy
Code
|
# IAgScenario scenario: Scenario object
# IAgStkObjectRoot root: STK Object Model Root
manager = scenario.SceneManager
manager.Scenes.Item(0).Camera.ViewCentralBody('Earth', root.CentralBodies.Earth.Vgt.Axes.Item('Fixed'))
manager.Render()
|
|
Change camera view to Imagery
Extents
[Python] |
Copy
Code
|
# IAgScenario scenario: Scenario object
# IAgStkGraphicsAGIProcessedImageGlobeOverlay imageryTile: Image Overlay object
manager = scenario.SceneManager
extent = imageryTile.Extent
# Change extent in the default 3D window
manager.Scenes.Item(0).Camera.ViewExtent('Earth', extent)
manager.Render()
|
|
Add Imagery and Terrain to
the Scene
[Python] |
Copy
Code
|
# IAgScenario scenario: Scenario object
# Retrieve the boundaries of the imported files
manager = scenario.SceneManager
# Add Terrain
terrainTile = manager.Scenes.Item(0).CentralBodies.Earth.Terrain.AddUriString(r'C:\Program Files\AGI\STK 11\Help\stktraining\samples\SRTM_Skopje.pdtt')
extentTerrain = terrainTile.Extent
print('Terrain boundaries: LatMin: #s LatMax: #s LonMin: #s LonMax: #s' # (str(extentTerrain[0]),str(extentTerrain[2]),str(extentTerrain[1]) ,str(extentTerrain[3])))
# Add Imagery
imageryTile = manager.Scenes.Item(0).CentralBodies.Earth.Imagery.AddUriString(r'C:\Program Files\AGI\STK 11\Help\stktraining\imagery\NPS_OrganPipeCactus_Map.pdttx')
extentImagery = imageryTile.Extent
print('Imagery boundaries: LatMin: #s LatMax: #s LonMin: #s LonMax: #s' # (str(extentImagery[0]),str(extentImagery[2]),str(extentImagery[1]),str(extentImagery[3])))
|
|
Control Display of Stars and
Water Texture
[Python] |
Copy
Code
|
# IAgScenario scenario: Scenario object
# Turn off the stars and water texture
manager = scenario.SceneManager
manager.Scenes.Item(0).ShowStars = False
manager.Scenes.Item(0).ShowWaterSurface = False
|
|
Control the Lighting of the
3D scene
[Python] |
Copy
Code
|
# IAgScenario scenario: Scenario object
# Modify the lighting levels
manager = scenario.SceneManager
lighting = manager.Scenes.Item(0).Lighting
lighting.AmbientIntensity = .20 #Percent
lighting.DiffuseIntensity = 4 #Percent
lighting.NightLightsIntensity = 5 #Percent
|
|
Create a Bounding Sphere
[Python] |
Copy
Code
|
# IAgScenario scenario: Scenario object
manager = scenario.SceneManager
sphere = manager.Initializers.BoundingSphere.Initialize([[-1061.22],[-5773.98],[4456.04]],100)
|
|
Display a Primitive During an
Interval
[Python] |
Copy
Code
|
# IAgScenario scenario: Scenario object
# IAgStkGraphicsModelPrimitive model: Graphics Primitive
manager = scenario.SceneManager
composite = manager.Initializers.CompositeDisplayCondition.Initialize()
start = root.ConversionUtility.NewDate('EpSec', str(scenario.StartTime))
stop = root.ConversionUtility.NewDate('EpSec', str(scenario.StartTime + 600))
timeInterval = manager.Initializers.TimeIntervalDisplayCondition.InitializeWithTimes(start, stop)
composite.Add(timeInterval)
model.DisplayCondition = composite
|
|
Draw a new Surface Extent
Triangulator
[Python] |
Copy
Code
|
# IAgScenario scenario: Scenario object
manager = scenario.SceneManager
texture = manager.Textures.LoadFromStringUri(r'C:\Program Files\AGI\STK 11\CodeSamples\CustomApplications\Data\HowTo\Textures\agi_logo_transparent.png')
mesh = manager.Initializers.SurfaceMeshPrimitive.Initialize()
mesh.Texture = texture
mesh.Translucency = 0
cartographicExtent = [[-55],[10],[-24],[30]]
triangles = manager.Initializers.SurfaceExtentTriangulator.ComputeSimple('Earth', cartographicExtent)
mesh.Set(triangles)
mesh.Translucency = .25
c0 = [[10],[-55]]
c1 = [[30],[-55]]
c2 = [[30],[-24]]
c3 = [[10],[-24]]
mesh.TextureMatrix = manager.Initializers.TextureMatrix.InitializeWithRectangles(c0,c1,c2,c3)
mesh.TransparentTextureBorder = True
manager.Primitives.Add(mesh)
manager.Render()
|
|
Draw a new Surface Mesh
[Python] |
Copy
Code
|
# IAgScenario scenario: Scenario object
manager = scenario.SceneManager
cartesianPts = [[6030.721052],[1956.627139],[-692.397578],[5568.375825],[2993.600713],[-841.076362],[5680.743568],[2490.379622],[-1480.882721]] # X,Y,Z (km)
triangles = manager.Initializers.SurfacePolygonTriangulator.Compute('Earth',cartesianPts)
surfaceMesh = manager.Initializers.SurfaceMeshPrimitive.Initialize()
surfaceMesh.Color = 255 # red
surfaceMesh.Set(triangles)
manager.Primitives.Add(surfaceMesh)
manager.Render()
|
|
Draw a Point Primitive and
set properties
[Python] |
Copy
Code
|
# IAgScenario scenario: Scenario object
manager = scenario.SceneManager
point = manager.Initializers.PointBatchPrimitive.Initialize()
ptPosition = [[0],[-1],[0]] #Lat,Lon,Alt
point.SetCartographic('Earth',ptPosition)
point.PixelSize = 15
point.Color = 65280
point.DisplayOutline = True
point.OutlineWidth = 5
point.OutlineColor = 255
manager.Primitives.Add(point)
#Render the Scene
manager.Render()
|
|
GreatArcInterpolator
Primitives
[Python] |
Copy
Code
|
# IAgScenario scenario: Scenario object
# Create a array of LLA values and interoplate them over the specified
# central body
positionArray = [[35.017],[-118.540],[0],[44.570],[-96.474],[ 0],[ 31.101],[-82.619],[0]]
manager = scenario.SceneManager
# Interpolate points over great arc
interpolator = manager.Initializers.GreatArcInterpolator.InitializeWithCentralBody('Earth')
interpolator.Granularity = .1
result = interpolator.Interpolate(positionArray)
|
|
Create a Data Element
Scalar
[Python] |
Copy
Code
|
# IAgCrdnProvider vgtSat: Vector Geometry Tool Interface
calcFactory = vgtSat.CalcScalars.Factory
trueAnom = calcFactory.Create('TrueAnomaly','',3) # eCrdnCalcScalarTypeDataElement
trueAnom.SetWithGroup('Classical Elements','ICRF','True Anomaly')
|
|
Create a new Aligned and
Constrained Axes
[Python] |
Copy
Code
|
# IAgCrdnProvider vgtSat: Vector Geometry Tool Interface
# IAgCrdnVectorDisplacement Sat2EarthCenter: vector component
# IAgCrdnVectorFixedInAxes bodyYSat: vector component
AxesFactory = vgtSat.Axes.Factory
AlignConstain = AxesFactory.Create('AlignConstrain','Aligned to displacement vector and constrained to Body Y',7) # eCrdnAxesTypeAlignedAndConstrained
AlignConstain.AlignmentReferenceVector.SetVector(Sat2EarthCenter)
AlignConstain.AlignmentDirection.AssignXYZ(1,0,0)
AlignConstain.ConstraintReferenceVector.SetVector(bodyYSat)
AlignConstain.constraintDirection.AssignXYZ(0,0,1)
|
|
Create a new Assembled
System
[Python] |
Copy
Code
|
# IAgCrdnProvider vgtSat: Vector Geometry Tool Interface
# IAgCrdnPointFixedInSystem fixedPt: point component
# IAgCrdnAxes bodyAxes: axes component
SysFactory = vgtSat.Systems.Factory
assemSys = SysFactory.Create('FixedPtSystem','System with origin at the new point',0) # eCrdnSystemTypeAssembled
assemSys.OriginPoint.SetPoint(fixedPt)
assemSys.ReferenceAxes.SetAxes(bodyAxes)
|
|
Create a new Attitude
Parameter Set
[Python] |
Copy
Code
|
# IAgCrdnProvider vgtSat: Vector Geometry Tool Interface
# IAgCrdnAxes bodyAxes: axes component
# IAgCrdnAxes icrfAxes: axes component
paraFactory = vgtSat.ParameterSets.Factory
paraSet = paraFactory.Create('attitudeICRF','Attitude Set',0) # eCrdnParameterSetTypeAttitude
paraSet.Axes = bodyAxes
paraSet.ReferenceAxes = icrfAxes
|
|
Create a new Between Vectors
Angle
[Python] |
Copy
Code
|
# IAgCrdnProvider vgtSat: Vector Geometry Tool Interface
# IAgCrdnVectorDisplacement Sat2EarthCenter: vector component
3 IAgCrdnVectorFixedInAxes bodyYSat: vector component
AngFactory = vgtSat.Angles.Factory
betwVect = AngFactory.Create('SatEarth2Y','Displacement Vector to Sat Body Y',0) # eCrdnAngleTypeBetweenVectors
betwVect.FromVector.SetVector(Sat2EarthCenter)
betwVect.ToVector.SetVector(bodyYSat)
|
|
Create a new Collection of
Interval List
[Python] |
Copy
Code
|
# IAgCrdnProvider vgtSat: Vector Geometry Tool Interface
# IAgCrdnPoint centerPtSat: point component
timeCollListFactory = vgtSat.EventIntervalCollections.Factory
timeColl = timeCollListFactory.CreateEventIntervalCollectionLighting('LightingList','Collection of lighting intervals')
timeColl.UseObjectEclipsingBodies = True
timeColl.Location = centerPtSat
|
|
Create a new Cross Product
Vector
[Python] |
Copy
Code
|
# IAgCrdnProvider vgtSat: Vector Geometry Tool Interface
# IAgCrdnVectorDisplacement Sat2EarthCenter: vector component
# IAgCrdnVectorDisplacement fixedAxesVector: vector component
VectFactory = vgtSat.Vectors.Factory
lineOfNodesVector = VectFactory.CreateCrossProductVector('CrossProduct',Sat2EarthCenter,fixedAxesVector)
|
|
Create a new Custom Script
Vector
[Python] |
Copy
Code
|
# IAgCrdnProvider vgtSat: Vector Geometry Tool Interface
VectFactory = vgtSat.Vectors.Factory
customScript = VectFactory.Create('Script','Description',6) # eCrdnVectorTypeCustomScript
# Initialization script if needed
# customScript.InitializationScriptFile = ''
customScript.ScriptFile = r'C:\Program Files\AGI\STK 11\CodeSamples\Extend\PluginScripts\VB_CustomVector.vbs'
if customScript.IsValid == False:
print('Script component not valid!')
print('Copy vbs file from C:\Program Files\AGI\STK 11\CodeSamples\Extend\PluginScripts\VB_CustomVector.vbs to C:\Users\#s\Documents\STK 11\Config\Scripting\VectorTool' # getenv('USERNAME'))
|
|
Create a new Displacement
Vector
[Python] |
Copy
Code
|
# IAgCrdnProvider vgtSat: Vector Geometry Tool Interface
# IAgCrdnPoint centerPtSat: point component
# IAgCrdnPoint centerPtEarth: point component
VectFactory = vgtSat.Vectors.Factory
Sat2EarthCenter = VectFactory.CreateDisplacementVector('Sat2EarthCenter',centerPtSat,centerPtEarth)
|
|
Create a new Fixed at Time
Instant Point
[Python] |
Copy
Code
|
# IAgCrdnProvider vgtSat: Vector Geometry Tool Interface
# IAgCrdnSystemAssembled icrf: system component
PtFactory = vgtSat.Points.Factory
timeInstantPt = PtFactory.Create('AtTimePt','Point at time instant',13) # eCrdnPointTypeAtTimeInstant
timeInstantPt.SourcePoint = vgtSat.Points.Item('Center')
timeInstantPt.ReferenceSystem = icrf
timeInstantPt.ReferenceTimeInstant = vgtSat.Events.Item('AvailabilityStartTime')
|
|
Create a new Fixed in Axes
Vector
[Python] |
Copy
Code
|
# IAgCrdnProvider vgtSat: Vector Geometry Tool Interface
# IAgCrdnAxes bodyAxes: axes component
VectFactory = vgtSat.Vectors.Factory
fixedAxesVector = VectFactory.Create('FixedInAxes','',10) # eCrdnVectorTypeFixedInAxes'
fixedAxesVector.ReferenceAxes.SetAxes(bodyAxes)
fixedAxesVector.Direction.AssignXYZ(0,0,1)
|
|
Create a new Fixed in System
Point
[Python] |
Copy
Code
|
# IAgCrdnProvider vgtSat: Vector Geometry Tool Interface
PtFactory = vgtSat.Points.Factory
fixedPt = PtFactory.Create('FixedPt','Point offest from Center',4) # 'eCrdnPointTypeFixedInSystem
fixedPt.FixedPoint.AssignCartesian(.005,0,.005)
|
|
Create a new Model Attachment
Point
[Python] |
Copy
Code
|
# IAgCrdnProvider vgtSat: Vector Geometry Tool Interface
PtFactory = vgtSat.Points.Factory
modelPt = PtFactory.Create('ModelPt','Attach point defined in model',7) # eCrdnPointTypeModelAttachment
modelPt.PointableElementName = 'MainSensor-000000'
|
|
Create a new Orbit Parameter
Set
[Python] |
Copy
Code
|
# IAgCrdnProvider vgtSat: Vector Geometry Tool Interface
paraFactory = vgtSat.ParameterSets.Factory
paraSetOribit = paraFactory.Create('orbitSun','Orbit',3) # eCrdnParameterSetTypeOrbit
paraSetOribit.OrbitingPoint = vgtSat.Points.Item('Center')
paraSetOribit.CentralBody = 'Sun'
paraSetOribit.UseCentralBodyGravitationalParameter = False
paraSetOribit.GravitationalParameter = 398600 # km^3/sec^2
|
|
Create a new Projection
Vector
[Python] |
Copy
Code
|
# IAgCrdnProvider vgtSat: Vector Geometry Tool Interface
# IAgCrdnVectorDisplacement Sat2EarthCenter: vector component
VectFactory = vgtSat.Vectors.Factory
projectionVector = VectFactory.Create('Projection','',18) # eCrdnVectorTypeProjection
projectionVector.Source.SetVector(Sat2EarthCenter)
horizontalPlane = vgtSat.Planes.Item('LocalHorizontal')
projectionVector.ReferencePlane.SetPlane(horizontalPlane)
|
|
Create a new Time
Instant
[Python] |
Copy
Code
|
# IAgStkObjectRoot root: STK Object Model Root
# IAgCrdnProvider vgtSat: Vector Geometry Tool Interface
# Change DateFormat dimension to epoch seconds to make the time easier to handle in
# Python
root.UnitPreferences.Item('DateFormat').SetCurrentUnit('EpSec')
timeInstFactory = vgtSat.Events.Factory
timeEpoch = timeInstFactory.CreateEventEpoch('FixedTime','Fixed Epoch Time')
timeEpoch.Epoch = 3600
|
|
Create a new Time
Interval
[Python] |
Copy
Code
|
# IAgStkObjectRoot root: STK Object Model Root
# IAgCrdnProvider vgtSat: Vector Geometry Tool Interface
# Change DateFormat dimension to epoch seconds to make the time easier to handle in
# Python
root.UnitPreferences.Item('DateFormat').SetCurrentUnit('EpSec')
timeIntFactory = vgtSat.EventIntervals.Factory
timeInterval = timeIntFactory.CreateEventIntervalFixed('TimeInterval','Fixed time interval')
timeInterval.SetInterval(60,120)
|
|
Create a new Vector Magnitude
Scalar
[Python] |
Copy
Code
|
# IAgCrdnProvider vgtSat: Vector Geometry Tool Interface
# IAgCrdnVectorDisplacement Sat2EarthCenter: vector component
calcFactory = vgtSat.CalcScalars.Factory
displScalar = calcFactory.CreateCalcScalarVectorMagnitude('VectorDisplacement','Vector Magnitude of Displacement Vector')
displScalar.InputVector = Sat2EarthCenter
|
|
Get a Scalar component and
evaluate at a time
[Python] |
Copy
Code
|
# IAgCrdnProvider vgtSat: Vector Geometry Tool Interface
# IAgScenario scenario: Scenario object
deticLatitude = vgtSat.CalcScalars.Item('GroundTrajectory.Detic.LLA.Latitude')
result = deticLatitude.Evaluate(scenario.StartTime)
print('The value of detic latitude is #s' # result.Value)
|
|
Get Center point and Inertial
System of Earth CB
[Python] |
Copy
Code
|
# IAgStkObjectRoot root: STK Object Model root
centerPtEarth = root.CentralBodies.Earth.Vgt.Points.Item('Center')
icrf = root.CentralBodies.Earth.Vgt.Systems.Item('ICRF')
|
|
Get default VGT component on
vehicle
[Python] |
Copy
Code
|
# IAgSatellite satellite: Satellite object
vgtSat = satellite.vgt
# Get handle to the Center point on the satellite
centerPtSat = vgtSat.Points.Item('Center')
# Get handle to the Body Y Vector
bodyYSat = vgtSat.Vectors.Item('Body.Y')
# Get handle to the Body Axes
bodyAxes = vgtSat.Axes.Item('Body')
icrfAxes = vgtSat.Axes.Item('ICRF')
|
|
Get Times From Defined Time
Instant and create an cell array
[Python] |
Copy
Code
|
# IAgStkObjectRoot root: STK Object Model Root
# IAgCrdnProvider vgtSat: Vector Geometry Tool Interface
# Change DateFormat dimension to epoch seconds to make the time easier to handle in
# Python
root.UnitPreferences.Item('DateFormat').SetCurrentUnit('EpSec')
satStart= vgtSat.Events.Item('AvailabilityStartTime')
start = satStart.FindOccurrence().Epoch
satStop= vgtSat.Events.Item('AvailabilityStopTime')
stop = satStop.FindOccurrence().Epoch
interval = [[start],[540],[600],[stop]] #EpSec
|
|
Change animation mode
[Python] |
Copy
Code
|
# IAgStkObjectRoot root: STK Object Model Root
scenario = root.CurrentScenario
root.AnimationOptions = 2 # eAniOptionStop
root.Mode = 32 # eAniXRealtime
scenario.Animation.AnimStepValue = 1 # second
scenario.Animation.RefreshDelta = .03 #second
|
|
Change scenario font
[Python] |
Copy
Code
|
# IAgStkObjectRoot root: STK Object Model Root
scenario = root.CurrentScenario
scenario.VO.MediumFont.Name = 'Arial'
scenario.VO.MediumFont.PtSize = 18
scenario.VO.MediumFont.Bold = True
scenario.VO.MediumFont.Italic = False
|
|
Close an open Scenario
[Python] |
Copy
Code
|
# IAgStkObjectRoot root: STK Object Model Root
root.CloseScenario
|
|
Close STK
[Python] |
Copy
Code
|
# AgUiApplication uiApplication: STK Application
uiApplication.Quit
clear uiApplication root
|
|
Create a new Scenario
[Python] |
Copy
Code
|
# IAgStkObjectRoot root: STK Object Model Root
root.NewScenario('Example_Scenario')
|
|
Open a VDF
[Python] |
Copy
Code
|
# IAgStkObjectRoot root: STK Object Model Root
root.LoadVDF(r'C:\Program Files\AGI\STK 11\Data\ExampleScenarios\Intro_STK_Space_Systems.vdf','')
|
|
Reset the scenario time
[Python] |
Copy
Code
|
# IAgStkObjectRoot root: STK Object Model Root
root.Rewind
|
|
Set unit preferences for
Object Model
[Python] |
Copy
Code
|
# IAgStkObjectRoot root: STK Object Model Root
root.UnitPreferences.Item('DateFormat').SetCurrentUnit('UTCG')
root.UnitPreferences.Item('Distance').SetCurrentUnit('km')
|
|