STK和Python连接
这部分介绍使用基于stk api二次开发的环境配置,以及桌面stk和python环境的连接
1.软件和环境
STK版本:12.2
python版本:3.10
开发环境:anaconda+jupyternotebook
2.首次连接环境配置
Python与STK的连接采用Object Model形式(通过COM组件方式),不同于C#连接STK(所有的dll已自动安装在bin目录下),Python所需的连接库文件需要在首次连接STK时创建。
首次连接完成后,最终在Anaconda的安装目录下的comtypes包内生成gen文件夹,具体路径为:[Anaconda3的地址]\Lib\site-packages\comtypes\gen
2.1安装comtypes库
pip install comtypes
# 导入com相关模块
import comtypes
from comtypes.client import CreateObject
2.2首次连接生成python开发所需要的库
# 打开STK桌面软件,创建STK实例
app=CreateObject("STK12.Application")
# 显示STK GUI界面
app.Visible = True
print('app的类型为:',type(app))
# 获取Object Model的根对象:IAgStkObjectRoot
# 此接口为Object Model中的最顶层接口,由此接口可创建场景、地面站、卫星等
root = app.Personality2
print('root的类型为:',type(root))
# 创建Astrogator相关的模块:AgStkGatorLib
# 如果报错[WinError -2147319779] 库没有注册。修改为FEAEF02E-48CE-42AE-B99B-FB9871A69E4B
comtypes.client.GetModule((comtypes.GUID("{090D317C-31A7-4AF7-89CD-25FE18F4017C}") ,1,0))
print('python 首次连接STK完成!')
print('STK Object Model API 的python模块已在comtypes\gen目录下创建!')
print('请关闭已打开的STK!')
如果报错[WinError -2147319779] 库没没有注册的话,就修改为
comtypes.client.GetModule((comtypes.GUID("{FEAEF02E-48CE-42AE-B99B-FB9871A69E4B}") ,1,0))
2.3 安装 agi 库
打开STK的安装路径,一般为XXX:\AGI\STK12\XX
找到X:\XXXXXXXX\AGI\STK 12\bin\AgPythonAPI文件夹,能够看到里面有whl格式的文件。whl文件(WHL file)也称为轮子(wheel),这是用于python分发(distribution)的标准内置包格式(standard built-package format),它包含安装所需的所有文件和元数据(metadata)。
打开anaconda promot,进入开发环境
activate <你的开发环境名称>
通过pip进行安装,输入whl的绝对路径
pip install "<STK 路径>/bin/AgPythonAPI/agi.stk12-12.4.0-py3-none-any.whl"
安装成功后,能看到提示
我们能够在环境的site-package中看到需要的依赖文件
2.4 导入二次开发需要的库
后续进行开发时可以首先将agi提供的库进行导入
from agi.stk12.stkdesktop import STKDesktop
from agi.stk12.stkobjects import *
from agi.stk12.stkutil import *
from agi.stk12.vgt import *
import os
import warnings
warnings.filterwarnings("ignore")
import pandas as pd
import numpy as np
import matplotlib as mpl
import matplotlib.pyplot as plt
import sys
names = locals()
2.5 通过access获取STK12桌面应用
stk = STKDesktop.StartApplication(visible=True) #using optional visible argument
root = stk.Root
print(type(root))
等待几秒钟会跳出STK的界面
选择场景的位置,打开场景(这个场景是之前自己保存的)
获取当前场景
# Get reference to running STK instance using comtypes
from comtypes.client import GetActiveObject
uiApplication = GetActiveObject('STK12.Application')
uiApplication.Visible = True
root = stk.Personality2
#获取现在的场景
scenario = root.CurrentScenario
打印之后能够看到,成功获得了现在的场景
也可以通过以下的语句创建新的场景
# IAgStkObjectRoot root: STK Object Model Root
root.NewScenario('场景名称Scenario')