本文简要介绍使用Windows WPF(C#)方式进行STK Engine的二次开发,如何添加AGI Global Control和AGI Map Control控件到用户软件界面,以及如何初始化STK场景。

WinForm与WPF方式

在使用STK Engine进行二次开发客户端软件的时候,通常使用的是Windows Form的形式,在这种开发模式下,我们使用STK 3D、2D控件的时候,是直接从控件栏将3D、2D控件直接拖到面板上实现的。这种方式简单,方便。

本文阐述使用Windows WPF方式使用STK Engine进行二次开发客户端软件的前期设置。使用WPF方式开发时,其软件GUI界面使用类似XML语言的方式,不清楚的可以自行搜索一下WPF,这里就不过多阐述了。相比WinForm方式,WPF开发方式有以下两个优点:

  1. 当STK Engine为64位时,在使用Visual Studio开发时,控件栏里是添加不了STK 3D/2D的控件的,也就是说无法使用鼠标直接拖拽的方式将控件添加到界面上,只能通过原始代码的方式自行添加,非常繁琐;

  2. 使用WPF方式,采用XML语言的方式,可以直接将3D、2D控件直接嵌入软件界面,同时可以使用WPF的样式等丰富自己的软件界面。

STK Engine API

对于.Net方式的STK Engine二次开发,本质是调用其提供的API,API以程序集(DLL)的方式存放在STK软件的安装目录下(STK安装目录\bin\Primary Interop Assemblies)。

既然是程序集DLL文件形式,那么我们使用它和任何其他第三方的DLL都是一样的过程。一是在工程中引用相关的DLL文件,二是通过Using命名空间的方式来使用相关类。

新建Visual Studio WPF工程

打开Visual Studio,新建Wpf工程项目(文件-新建-项目-Visual C#-WPF应用程序)。选择.Net FrameWork 4作为工程配置,项目名称(可任意设置):TestEngineWpf。新创建的工程如下图。

添加引用文件

为项目添加STK Engine API引用。右键“引用”-添加引用打开引用管理器,分别按照以下操作,添加几个dll程序集。

  • 点击“程序集”,选择(前面打√)“System.Windows.Forms”和“WindowsFormsIntegration”,这两个程序集是wpf程序里安装winform控件所需要的;
  • 点击“COM”,选择“AGI STK Objects 11”、“AGI STK X 11”;
  • 点击“浏览”,导航到文件路径(STK安装目录\bin\Primary Interop Assemblies),选择程序集“AxAGI.STKX.Interop.dll”,然后点击“确定”。

    添加引用完成后,即可在引用栏里看到添加的引用,其中AGI.STKUtil和AGI.STKVgt两个程序是AGI.STKObjects所依赖的,系统自动帮我们添加了。
    注意,由于此工程项目为示范项目,所以涉及到的程序集较少;如果STK Engine二次开发项目涉及较多程序集的话,应该添加其他相应的程序集(DLL),比如如果涉及到STK桌面软件相关操作,则应添加“AGI UI Application 11”等程序集。

主窗口添加控件

项目中,MainWindow.xaml为程序主窗口GUI,双击后,显示两个编辑界面:GUI窗口和XAML窗口。XAML窗口使用xml语言的方式添加控件,GUI窗口及时显示效果。

XAML窗口中,首先添加对STK程序集的命名空间引用,然后添加STK 3D、2D控件及三个按钮,整个XAML代码如下:

<Window x:Class="TestEngineWpf.MainWindow"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:stkEng="clr-namespace:AxAGI.STKX;assembly=AxAGI.STKX.Interop" Title="MainWindow" Height="350" Width="525"><Grid><StackPanel><!--此面板包含STK 3D/2D控件,高度、宽度可根据需要自行设置,或者自动适应--><StackPanel Orientation="Horizontal"><WindowsFormsHost Height="280" Width="250"><stkEng:AxAgUiAxVOCntrl></stkEng:AxAgUiAxVOCntrl>                    </WindowsFormsHost><WindowsFormsHost Height="280" Width="250"><stkEng:AxAgUiAx2DCntrl></stkEng:AxAgUiAx2DCntrl></WindowsFormsHost></StackPanel><!--此面板设置简单的功能按钮--><StackPanel Orientation="Horizontal"><Button Name="NewScenario" Width="100" Click="NewScenario_Click">新建场景</Button><Button Name="NewSatellite" Width="100" Click="NewSatellite_Click">新建卫星</Button><Button Name="SaveScenario" Width="100" Click="SaveScenario_Click">保存场景</Button>                </StackPanel></StackPanel>               </Grid>
</Window>

注意,上述代码中,添加xml命名空间的引用时,写入"xmlns:stkEng="时,则会自动弹出命名空间,见下图,此时查找选择"AxAGI.STKX(AxAGI.STKX.Interop)"即可。
其中,stkEng是命名空间名称,可自己任意设定。

编译后,按F5,可以看到程序启动后的主窗口如下:看到了熟悉的3D/2D控件。

添加响应函数

上面创建了控件,我们没有使用一行代码。下面开始为按钮创建响应函数。

在解决方案资源管理器中,右键“MainWindow.xaml”,点击“查看代码”,则其代码窗口(MainWindow.xaml.cs)打开。在其中添加相应的响应函数代码,具体含义见其中注释。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;//  引用命名空间,目前此文件内相关类仅涉及到此命名空间,
//  如果需要,还需要添加对其他命名空间的应用。
using AGI.STKObjects;namespace TestEngineWpf
{/// <summary>/// MainWindow.xaml 的交互逻辑/// </summary>public partial class MainWindow : Window{//*********//  此为STK Engine的根,控制整个STK场景AgStkObjectRoot stkRoot;public MainWindow(){InitializeComponent();//  初始化stkRoot = new AgStkObjectRoot();}//  新建STK场景,场景名为Testprivate void NewScenario_Click(object sender, RoutedEventArgs e){                        stkRoot.NewScenario("Test");}//  新建卫星private void NewSatellite_Click(object sender, RoutedEventArgs e){// Create the Satellite IAgSatellite satellite = stkRoot.CurrentScenario.Children.New(AgESTKObjectType.eSatellite, "MySatellite") as IAgSatellite;// Set propagator to J2 Perturbation satellite.SetPropagatorType(AgEVePropagatorType.ePropagatorJ2Perturbation);// Get the J2 Perturbation propagator IAgVePropagatorJ2Perturbation propagator = satellite.Propagator as IAgVePropagatorJ2Perturbation;//  轨道积分(相当于STK软件中的Apply按钮)propagator.Propagate();}//  保存场景private void SaveScenario_Click(object sender, RoutedEventArgs e){            stkRoot.SaveAs(@"D:\Test");//  也可保存在具体的文件内,如D:\MySTK\Test,但要确保MySTK文件夹存在。//  Test为场景名称,也可改为其他名称,则自动将之前设定的场景名称更改。//stkRoot.SaveAs(@"D:\MySTK\Test");}}
}

编译后,按F5,分别点击:“新建场景”、“新建卫星”和“保存场景”。软件界面如下:

保存后的场景可在D:\下看到,可以看出,这与使用STK桌面软件创建场景后保存的文件是一样的。

小结

采用WPF方式,添加STK 3D/2D控件是非常方便的,且不受64位的限制。

STK 二次开发创建的场景文件(以及其中的卫星等对象),与STK桌面软件创建是一样的。STK 桌面软件是通过GUI界面鼠标操作,STK二次开发是通过类和相关函数进行操作(代替鼠标)而已,内核都是同一个。

本文中,STK Engine二次开发使用.Net C#代码,采用STK Object Model形式调用相关类(如创建卫星等),当然也可以使用Connect指令的模式,此处就不在详述了。

诸如新建场景、新建卫星等等此类的代码,初学者可以参考STK帮助文档(STK Programming Interface)中的Using Core Libraries-STK Object Model-C# Code Snippets。
这个Snippets里面将大部分的功能都以代码例子的形式给出了,供参考。

STK Engine二次开发-WPF方式相关推荐

  1. 【Vue基本指令】一.什么是Vue;二.Vue开发的方式;三.Vue的基本指令(重点)

    目录 一.什么是Vue 1.前端技术的发展(html.CSS.JavaScript) (1)JQuery:是对JavaScript进行了封装,使得操作DOM.事件处理.动画处理.Ajax交互变得非常简 ...

  2. 【ArcGIS Engine二次开发】入门基础(2):ArcGIS开发方式(VBA、DLL、Add-in、Engine)对比

    文章目录 2.1 使用VBA进行桌面软件开发 2.1.1 VBA开发方式 2.1.1 VBA代码的安全性 2.2 使用DLL进行桌面软件开发 2.2.1 DLL开发方式 2.2.2 DLL功能的应用部 ...

  3. arcgis engine二次开发python-使用C#配合ArcGIS Engine进行地理信息系统开发

    简单的地图读取.展示终于到暑假了...开始认真整理整理相关学习的心得体会咯~ 先把很久之前挖的关于C# 二次开发的坑给填上好了~ 这次先计划用一个月把C# ArcEngine 10.0相关开发的学习心 ...

  4. 利用Arcgis Engine 二次开发的使用和总结

    Arcgis Engine 初体验 先放一张第一版系统的图,由于公司机密不能提供源码,但是各个小功能提供源码,为需要的同仁提供些许帮助. 接下来进入正题,将逐一展示利用Arcgis Engine开发的 ...

  5. 【转载】利用ArcGIS Engine 二次开发的使用和总结

    文章目录 ArcGIS Engine 初体验 一.较完全编辑功能GIS程序 二.字段搜索要素和空间搜索要素GIS程序 三.图层重叠搜索GIS程序 四.要素合并.裁剪及检测要素重叠GIS程序 五.自定义 ...

  6. 【ArcGIS Engine二次开发】入门基础(1):ArcGIS Engine简介及开发环境搭建

    文章目录 ArcGIS Engine概述 ArcGIS Engine与ArcObjects的关系 ArcGIS Engine下载及安装 ArcGIS Engine概述 ArcGIS Engine简介 ...

  7. Arcgis Engine二次开发(一)AE开发总览

    参加工作两年多,打算将两年来的AE(Arcgis Engine,本系列后面统一简称AE)开发经验分享出来.打算把AE的开发做成一个系列,原因主要有两个:一个是AE开发网上资源比较少,让从事开发的码农接 ...

  8. ArcGIS Engine二次开发

    目录 1 安装环境配置 2 参考资料 3 面向对象基础 3.1 接口 3.2 类 3.3 对象 3.4 面向对象的三大特性 4 对象模型图和ArcGIS Engine开发帮助 4.1 对象模型图(OM ...

  9. Revit 二次开发 HOF 方式调用transaction

    再看<C#函数式编程>一书的时候看到HOF的概念,感觉在日常开发的过程中可以使用此方式整理一个拓展方法,实现程序的快速调用. Transaction函数继承自IDisposable 我们平 ...

最新文章

  1. eclipse中启动tomcat出现错误的解决方法
  2. SpringBoot+zxing+Vue实现前端请求后台二维码图片
  3. 树莓派+神经计算棒2实时人脸检测
  4. android 相机和相册,[转载][转载] android调用相机和相册
  5. ms2005 SQL Server设置改为SQL Server身份验证
  6. (转)向SDE库中写入栅格和矢量数据
  7. iOS开发——高级篇——iOS开发之网络安全密码学
  8. 一次性定时器 setTimeout
  9. 二、Swift网络请求回来的数据我这样取
  10. C++ 2022常见知识点
  11. 0024-CENTOS6.5安装CDH5.12.1(一)
  12. VC连接SQL2005
  13. sir节点matlab模型,SIR模型实现(matlab)
  14. 模拟电路中晶体管阵列的性能感知公共质心布局和布线 ALIGN
  15. 深度总结,带你玩转 NVIDIA GPU
  16. 网络协议抓包分析与爬虫入门
  17. Easyrecovery激活码生成器分享
  18. ConcurrentHashMap的使用场景
  19. Win11电脑系统使用U盘安装的方法分享
  20. 【QNX Hypervisor 2.2 用户手册】1.3 QNX hypervisor架构

热门文章

  1. 2、使用Xcode9创建第一个IOS界面
  2. 高等数学(第七版)同济大学 总习题三(前10题) 个人解答
  3. 安装微软官方提供的win 10 PE 系统到U盘
  4. 主流WEB漏洞扫描器种类及其指纹特征分析
  5. 青龙面板的使用方法最新版
  6. GOM引擎传奇调整音量设置一次关闭音量和逐渐降低设置方法
  7. execl(知道每个商品单价,且知道总价,计算每个商品的数量)
  8. 软件测试之---车载简历编写
  9. 游戏指标ACU PCU APA ARPU
  10. 6.S081 lab4: traps