最近有个需求要求对STK做二次开发,要用自己写的界面但又要嵌入STK的3D/2D控件展示,后台调用STK引擎做计算。官方文档语焉不详,网上的资料要么太多重复(到处抄来抄去),要么有诸多错漏之处,找了很久,python、C++(qt)、C#相关的资料都找了很多,最后终于用C#的winform技术实现了,写个博客记录一下,我也不敢保证自己百分百正确,权当做个参考,也希望能够帮助到后来者。
本文主要参考了C#对STK11.4二次开发的Hello World_c# usim stk-CSDN博客和Visual Studio 2019 STK11.6 C#(WPF)二次开发_stk11.6与c#互联-CSDN博客。
STK 11.6,vs2022。
首先打开vs新建winform工程,这里注意要选.NET Framework的,不要选.NET Core的,.NET Framework版本我这里选的是4.8。
新建完工程后,首先右键点击项目,修改属性,在其中“生成”下面选择目标平台,确保和所安装的STK一样,64位的选64位,32位的选32位。
然后还是右键点击项目->添加->引用,打开引用管理器
首先选择COM一栏,选中“AGI STK Objects 11”
之后进入浏览选择“AGI.STKX.Interop.dll”和“AGI.STKX.Controls.Interop.dll”。如果这里没有的话可以选择右下角浏览,找到 你的STK安装目录/bin/Primary Interop Assemblies/ 这个目录下面找到相应的文件添加。
之后点击确定,可以看到引用中多了我们刚才所添加的内容以及一些依赖。
之后右键点击其中“AGI.STKX.Interop”,选择属性,将“嵌入互操作类型”改为False。
然后找到工具箱,在其中右键新建选项卡,命名为agi,右键agi这个选项卡,选择“选择项”,在出现的“选择工具箱项”界面中点击“浏览”,在本地找到你之前添加的“AGI.STKX.Controls.Interop.dll”文件,加入,然后点击确定,得到新的控件,其中VOCntrl是3D控件,2DCntrl是2D控件。
到这里,基本上准备工作就做完了,然后就是愉快的拖控件环节了!
将3D控件和2D控件拖到窗口中,再加个按钮。
双击按钮,添加按钮的响应代码
var root = new AgStkObjectRoot();
root.NewScenario("Test");
其中“Test”是新场景的名字,可以起个自己喜欢的。
然后运行程序,点击按钮,就会发现控件内容刷新了,呈现出了想要的3D和2D场景!