Python Code Snippets

Introduction

The following code snippets demonstrate tasks that are commonly encountered when working with the STK Object Model.

How do I ...

Initialization

STK Objects

Access

AdvCAT

Aircraft

Area Target

Chain

Communications

Antenna

Receiver

Transmitter

Constellation

Coverage Definition

Data Providers

Facility

Graphics

Figure Of Merit

Ground Vehicle

Line Target

Missile

MTO

Object Coverage

Planet

Graphics

Satellite

Astrogator

Graphics

Sensor

Graphics

Connect

Camera

Graphics

GlobeOverlays

Graphics

Analysis Workbench

Scenario

Scenario Management

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')


STK 11.2.1 Programming Interface