Case4:Matlab与STK联调
之前我们对STK的使用方法进行了一些简单的介绍,不难看出STK作为仿真软件的功能还是非常强大的,内置的一些功能和特点让我们在仿真时能够快速的搭建场景,非常便利。但是相应的,高度集成使得STK在灵活性方面做出了许多牺牲。例如在仿真结果的可视化处理方面,STK只有一些内置的样式和坐标样式,如果想要的图像没有内置,单凭STK可能就无法实现了。因此,STK也提供了方法能够与我们常用的编程语言进行交互,包括C#、python、Matlab等。这次主要对Matlab与STK联合仿真进行简单的介绍。

交互方法
STK提供了两种与Matlab进行交互的方法。一种是通过Matlab Connector组件的方法,这种方法需要比较复杂的环境配置,STK官方已经逐渐不采用这种方法了。另外一种则是通过COM(对象模型组件)进行交互,是一种相对Connector来说更加便利的方式。因此这次也主要介绍这种互联方式。

STK对象模型
STK仿真软件整体建立在一个概念上,也就是STK对象模型。STK对象模型是是一个COM库,包含了所有的STK对象,同时也包含了整个应用程序所有的类型、接口、事件以及类结构等,通过STK对象模型以及各种组件能够方便的实现自定义解决方案。基于这种思想,STK的用户界面本身就是基于STK对象模型进行设计的,而通过编程语言来与STK交互,也是在STK对象模型的基础上进行的。因此这里有一个非常重要的概念:当我们设计交互程序时,STK软件本身的用户界面就是一个非常好的指南。
这次的文档,目的主要是对如何进行Matlab与STK联合仿真进行介绍,而非着重于实现某个具体的实例,尽管也会通过实例进行举例,但是更多的语法、属性、方法等实际的实现需要具体的参照STK所提供的核心编程库,并且这个库也并不是非常完备,很多类、对象的内部实现是无法访问的,所以参考用户界面进行编程才非常重要。
那么基于这个思想,我们终于可以开始进行实际编程了。

如何参考用户界面
假如现在场景中存在一个Facility对象,同时我们想要更改这个对象在图形窗口中的标签,应该如何进行操作?首先,查询STK给出的核心代码库,搜索Facility,找到IAgFacility,可以看到Facility对象的结构如下:

点击Graphics标签页,可以看到包含了以下属性:

那么LabelName属性就是我们需要修改的目标属性。点进LabelName也可以看到这是一个可读写属性。那么转化为编程语言应该是:
但这样的语句实际执行起来将会报错,编译器会提示你:
这个时候我们可以打开STK,在用户界面进行查看。在用户界面里如果想编辑标签显示,应该在下面这个界面进行操作:

可以看到Label上方还有一个勾选框,勾选之后将会绑定使用对象实例的名称作为标签,因此这时候Label属性是一个只读属性了。所以我们还需要对这个属性进行修改。不难看出这个属性应该是UseInstNameLabel,转化为编程语言应该是:

实例介绍
接下来我们可以进行一个简单实例的实现来进行练习。通过这个实例,可以将仿真编程推广到任何你想要的场景,并且能够在面对大量仿真任务时进行自动实现。