当前位置: 首页 > news >正文

使用C#(winform)调用STK并展示其3D/2D控件

最近有个需求要求对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场景!

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 【前缀异或和】力扣2588. 统计美丽子数组数目
  • 【脚本说明撰写markdown】如何基于VScode 撰写使用说明文档,及格式转换.md、.html、.pdf格式
  • LVS--DR模式
  • 游戏盾是什么,如何保护网络游戏的安全
  • 大模型日报 2024-08-07
  • 用录制好的视频文件模拟PC电脑摄像头进行无人值守直播/抖音直播/视频号直播/快手直播
  • 将本地微服务发布到docker镜像二:
  • Linux下安装Go语言环境的详细指南
  • 给本地设备搭建一个云端语音助手
  • Rider中修改默认文件关联,自定义打开方式
  • opencascade TopoDS_Builder 源码学习
  • Apache Doris + Iceberg 快速搭建指南|Lakehouse 使用手册(三)
  • Openwrt常用说明
  • (四)activit5.23.0修复跟踪高亮显示BUG
  • 【Linux】:环境变量
  • [译]Python中的类属性与实例属性的区别
  • eclipse的离线汉化
  • java第三方包学习之lombok
  • PaddlePaddle-GitHub的正确打开姿势
  • 仿天猫超市收藏抛物线动画工具库
  • 猴子数据域名防封接口降低小说被封的风险
  • 机器学习学习笔记一
  • 前嗅ForeSpider采集配置界面介绍
  • 使用parted解决大于2T的磁盘分区
  • 小程序、APP Store 需要的 SSL 证书是个什么东西?
  • 学习笔记:对象,原型和继承(1)
  • 原生js练习题---第五课
  • Prometheus VS InfluxDB
  • 阿里云移动端播放器高级功能介绍
  • 交换综合实验一
  • 组复制官方翻译九、Group Replication Technical Details
  • ​决定德拉瓦州地区版图的关键历史事件
  • # 睡眠3秒_床上这样睡觉的人,睡眠质量多半不好
  • # 透过事物看本质的能力怎么培养?
  • #C++ 智能指针 std::unique_ptr 、std::shared_ptr 和 std::weak_ptr
  • (CVPRW,2024)可学习的提示:遥感领域小样本语义分割
  • (简单有案例)前端实现主题切换、动态换肤的两种简单方式
  • (原創) 如何讓IE7按第二次Ctrl + Tab時,回到原來的索引標籤? (Web) (IE) (OS) (Windows)...
  • (转)h264中avc和flv数据的解析
  • (转)德国人的记事本
  • *算法训练(leetcode)第三十九天 | 115. 不同的子序列、583. 两个字符串的删除操作、72. 编辑距离
  • .bat批处理(六):替换字符串中匹配的子串
  • .Net Redis的秒杀Dome和异步执行
  • .NET 跨平台图形库 SkiaSharp 基础应用
  • .NET 中 GetProcess 相关方法的性能
  • .NET开发人员必知的八个网站
  • .Net面试题4
  • .net用HTML开发怎么调试,如何使用ASP.NET MVC在调试中查看控制器生成的html?
  • @ComponentScan比较
  • @Controller和@RestController的区别?
  • @requestBody写与不写的情况
  • @Responsebody与@RequestBody
  • [ C++ ] 类和对象( 下 )
  • [ vulhub漏洞复现篇 ] JBOSS AS 4.x以下反序列化远程代码执行漏洞CVE-2017-7504
  • [ 隧道技术 ] 反弹shell的集中常见方式(四)python反弹shell