Visual Studio 2019 STK11.6 C#(WPF)二次开发

  • 概述
  • 环境
  • 软件效果
  • 工程创建
  • 添加引用文件
  • 主要代码
    • 1.创建场景
    • 2.创建飞机
    • 3.创建站点
    • 4.创建传感器
    • 5.创建传雷达

概述

介绍了使用 C#(WPF)方式进行STK的 二次开发,包括环境配置,STK场景构建,飞机、传感器、站点、雷达等模型的使用。

环境

  1. STK11.6
  2. Visual Studio2019

软件效果

工程创建

1.打开Visual Studio2019,创建WPF工程。输入Project Name,其余可保持默认,也可根据自己需要自行设置(.Net Framework 版本设置为4以上),如下图:

2.点击“Create”,即可完成Project创建,如下图:

添加引用文件

1.右键References→Add Reference,如下图:

2.进入添加引用界面,如下图:

3.选择Assemblies→Framework,在“System.Windows.Forms”和“WindowsFormsIntegration”前面打勾✔,如下图:

4.选择COM,在“AGI STK Objects 11”和“AGI STK X 11”前面打勾✔,如下图:

5.点击Browser”,浏览到文件路径(STK安装目录\bin\Primary Interop Assemblies),选择程序集“AGI.STKX.Interop.dll”和“AxAGI.STKX.Interop.dll”,然后点击“Add”,如下图:

6.点击“OK”,引用添加完毕,如下图:

主要代码

1.创建场景

             AgStkObjectRoot stkRoot = new AgStkObjectRoot();            stkRoot.NewScenario(NewScenarioDialog.ScenarioName.Text);stkRoot.UnitPreferences.SetCurrentUnit("DistanceUnit", "km");stkRoot.UnitPreferences.SetCurrentUnit("DateFormat", "UTCG");stkRoot.UnitPreferences.SetCurrentUnit("TimeUnit", "sec");stkRoot.UnitPreferences.SetCurrentUnit("AngleUnit", "deg");stkRoot.UnitPreferences.SetCurrentUnit("LongitudeUnit", "deg");stkRoot.UnitPreferences.SetCurrentUnit("LatitudeUnit", "deg");stkRoot.UnitPreferences.SetCurrentUnit("PRFUnit", "MHz");stkRoot.UnitPreferences.SetCurrentUnit("PowerUnit", "dBW");stkRoot.UnitPreferences.SetCurrentUnit("FrequencyUnit", "GHz");IAgStkObject IAgObjectScenario = stkRoot.CurrentScenario;IAgScenario IScenario = IAgObjectScenario as IAgScenario;string StartTime = NewScenarioDialog.StartTime.Value.AddHours(-8).ToString("dd MMM yyyy HH:mm:ss.fff", CultureInfo.CreateSpecificCulture("en-GB"));string StopTime = NewScenarioDialog.StopTime.Value.AddHours(-8).ToString("dd MMM yyyy HH:mm:ss.fff", CultureInfo.CreateSpecificCulture("en-GB"));IScenario.SetTimePeriod(StartTime, StopTime);IScenario.Epoch = StartTime;IScenario.Animation.StartTime = StartTime;IScenario.Animation.AnimStepValue = (double)NewScenarioDialog.StepLength.Value;//仿真步长IScenario.Animation.RefreshDelta = (double)NewScenarioDialog.UpdateEverySeconds.Value;//每几秒更新IScenario.Animation.EnableAnimCycleTime = true;IScenario.Animation.AnimCycleType = AgEScEndLoopType.eLoopAtTime;IScenario.Animation.AnimCycleTime = IScenario.StopTime;IAgObjectScenario.LongDescription = NewScenarioDialog.ScenarioDescription.Text;IAgStkGraphicsSceneManager manager = IScenario.SceneManager;IAgStkGraphicsScene currentSence = manager.Scenes[0] as IAgStkGraphicsScene;currentSence.CentralBodies.Earth.Imagery.AddUriString(@"C:\Users\DELL\Desktop\China.jp2");/*添加地形文件*/IAgCentralBodyTerrainCollection terrainCollection = IScenario.Terrain;IAgTerrainCollection elementCollection = terrainCollection["Earth"].TerrainCollection;IAgTerrain terrain = elementCollection.Add(@"C:\Users\DELL\Desktop\StHelens_Training.pdtt", AgETerrainFileType.ePDTTTerrainFile);terrain.UseTerrain = true;stkRoot.Rewind();

2.创建飞机

Aircraft = stkRoot.CurrentScenario.Children.New(AgESTKObjectType.eAircraft, NewAircraftDialog.AircraftName.Text) as AgAircraft;//添加模型String ModelFileName = NewAircraftDialog.Model.Text;IAgVOModelFile modelFile = Aircraft.VO.Model.ModelData as IAgVOModelFile;modelFile.Filename = ModelFileName;//不从场景集成RCS,设置飞机RCSAircraft.RadarCrossSection.Inherit = false;IAgRadarCrossSectionModel rcs = Aircraft.RadarCrossSection.Model as IAgRadarCrossSectionModel;//此处飞机RCS设为定值,也可制定RCS文件,这样更真实rcs.FrequencyBands[0].SetComputeStrategy("Constant Value");IAgRadarCrossSectionComputeStrategyConstantValue constValRcs = rcs.FrequencyBands[0].ComputeStrategy as IAgRadarCrossSectionComputeStrategyConstantValue;constValRcs.ConstantValue = 0.5; //dBsm//添加航迹Aircraft.SetRouteType(AgEVePropagatorType.ePropagatorGreatArc);IAgVePropagatorGreatArc propagator = Aircraft.Route as IAgVePropagatorGreatArc;propagator.ArcGranularity = 50;propagator.DefaultTurnRadius = 20;propagator.SetAltitudeRefType(AgEVeAltitudeRef.eWayPtAltRefTerrain);IAgVeWayPtAltitudeRefTerrain altRef = propagator.AltitudeRef as IAgVeWayPtAltitudeRefTerrain;altRef.Granularity = 50;altRef.InterpMethod = AgEVeWayPtInterpMethod.eWayPtEllipsoidHeight;propagator.Method = AgEVeWayPtCompMethod.eDetermineTimeAccFromVel;String WaypointsFileName = NewAircraftDialog.Waypoints.Text;List<double[]> ListDoubleArrayWaypoints = FileToListDoubleArray(WaypointsFileName);foreach (var DoubleArrayWaypoints in ListDoubleArrayWaypoints){IAgVeWaypointsElement point = propagator.Waypoints.Add();point.Latitude = DoubleArrayWaypoints[0];point.Longitude = DoubleArrayWaypoints[1];point.Altitude = DoubleArrayWaypoints[2];point.Speed = DoubleArrayWaypoints[3];}propagator.Propagate();//飞机描述Aircraft.LongDescription = NewAircraftDialog.Description.Text;//渲染IAgStkGraphicsSceneManager manager = ((IAgScenario)stkRoot.CurrentScenario).SceneManager;manager.Render();

3.创建站点

                 Facility = this.stkRoot.CurrentScenario.Children.New(AgESTKObjectType.eFacility, NewFacilityDialog.FacilitytName.Text) as AgFacility;Facility.UseTerrain = (bool)NewFacilityDialog.useTerrain.IsChecked;Facility.HeightAboveGround = (double)NewFacilityDialog.HeightAboveGround.Value;Facility.Position.AssignPlanetodetic(NewFacilityDialog.Latitude.Value, NewFacilityDialog.Longtitude.Value, (double)NewFacilityDialog.Altitude.Value);Facility.LongDescription = NewFacilityDialog.Description.Text;

4.创建传感器

             Sensor = ISTKObject.Children.New(AgESTKObjectType.eSensor, NewSensorDialog.SensortName.Text) as AgSensor;Sensor.SetPatternType(AgESnPattern.eSnSimpleConic);IAgSnSimpleConicPattern simpleConic = (IAgSnSimpleConicPattern)Sensor.Pattern;//设置锥半角simpleConic.ConeAngle = NewSensorDialog.ConeHalfAngle.Value;Sensor.SetPointingType(AgESnPointing.eSnPtTargeted);Sensor.LongDescription = NewSensorDialog.Description.Text;

5.创建传雷达

             Radar = ISTKObject.Children.New(AgESTKObjectType.eRadar, NewRadarDialog.RadarName.Text) as AgRadar;//设置雷达为单基地雷达Radar.SetModel("Monostatic");IAgRadarModelMonostatic monostaticModel = Radar.Model as IAgRadarModelMonostatic;//设置雷达为搜索追踪模式monostaticModel.SetMode("Search Track");IAgRadarModeMonostaticSearchTrack searchTrackMode = monostaticModel.Mode as IAgRadarModeMonostaticSearchTrack;//设置雷达模型参数SetRadarProperty(monostaticModel, searchTrackMode, NewRadarDialog);

Visual Studio 2019 STK11.6 C#(WPF)二次开发相关推荐

  1. 使用.NET Core 3.0 预览版,Web API和Visual Studio 2019进行ASP.NET Core Blazor游戏开发

    目录 介绍 使用ASP.NET核心Blazor创建这个奇怪的图像输出应用程序应该知道什么? 背景 先决条件 Visual Studio 2019 .NET Core 3.0 Preview SDK B ...

  2. Visual Studio 2017 C# 对 AutoCad2014 的二次开发设置

    Visual Studio 2017 C# 对 AutoCad2014 的二次开发设置 开发平台:vs2017,win10,CAD2014 建立类库,引用文件 建立类库 从AutoCAD安装目录下添加 ...

  3. 微软 Visual Studio 2019 16.5 发布:.NET 移动开发、生产力

    微软最新发布了 Visual Studio 2019 16.5 版本,下面来看看主要更新内容: .NET 移动开发 首先要讨论的特性是 XAML Hot Reload for Xamarin.Form ...

  4. C/C++实战——基于Qt框架和visual studio的海康相机SDK二次开发

    最近在进行机器视觉系统的搭建,积累了经验,想和大家讨论.互相学习.相机是图像的来源.为了搭建视觉系统,完成图像分析.机器视觉任务,需要编程控制相机按工作所需的曝光.增益和帧率同步采集和存储图像.工业相 ...

  5. 【译】Visual Studio 2019 中 WPF UWP 的 XAML 开发工具新特性

    原文 | Dmitry 翻译 | 郑子铭 自Visual Studio 2019推出以来,我们为使用WPF或UWP桌面应用程序的XAML开发人员发布了许多新功能.在本周的 Visual Studio ...

  6. (C# WPF Blend for Visual Studio 2019)设计一个刀剑神域风格的云盘客户端

    "这虽然是游戏,但可不是闹着玩儿的" 前言 效果预览 WPF Blend入门之新建工程并修改为自定义窗口 控件样式模板 C#连接服务器端 前言 首先在这里先自己庆祝一下,历时接近一 ...

  7. [翻译] 使用 Visual Studio 2019 来提高每个开发人员的工作效率

    原文: Making every developer more productive with Visual Studio 2019 今天,在 Microsoft Connect(); 2018 的主 ...

  8. Revit二次开发环境配置(Revit 2020 +Visual Studio 2019)

    Revit 2019开sql教程发环境java基础教程的搭建,需要python基础教程安装的c#教程内容如下: Revit 2019(主要vb.net教程的开发环境) Visual Studio 20 ...

  9. Revit二次开发环境搭建(Revit 2020+Visual Studio 2019)

    目录 Revit二次开发环境搭建(Revit 2020+Visual Studio 2019)准备内容 安装 Revit 2020 的安装 Visual Studio 2019 的安装 Revit S ...

最新文章

  1. php 字符串数组转数组对象_php怎么将数组转成对象?
  2. 监控告警满飞天,运维在家睡到自然醒...
  3. Kotlin特色之object、let、with、run、apply、also函数的使用
  4. appium+python自动化40-adb offline(5037端口被占)
  5. java线程池返回线程状态_Java线程的不同状态
  6. linux的进程pcd,LINUX下查看点云图————point cloud(.ply .vtk .pcd)
  7. image to pdf
  8. 子网掩码+ip地址_C ++程序使用位掩码查找唯一编号
  9. mysql outfile raw_解决 Mysql outfile 的报错问题!
  10. C语言字母的压缩,C语言字符串快速压缩算法代码
  11. [技术] 谈谈编程思想
  12. 高性能tornado框架简单实现restful接口及运维开发实例
  13. 电脑蓝屏后你该做的几桩要事
  14. MFC:应用程序无法正常启动(0xc0150002)
  15. “我爱淘”冲刺阶段Scrum站立会议10
  16. html640设计稿,移动设备分辨率(终于弄懂了为什么移动端设计稿总是640px和750px)...
  17. CSS 滚动快照 Scroll Snap
  18. Javascript笔记大全02
  19. 2018年蓝桥杯A组C/C++决赛题解
  20. 【Codeforces 1157F】 Maximum Balanced Circle | 思维、dp、二分

热门文章

  1. ubuntu20安装其他版本的make工具
  2. UIPATH Orchestrator配置
  3. [转]提问的智慧(富格式图文版)
  4. ADDS:使用 PowerShell 创建 OU 结构
  5. matlab fft谱分析实验报告,基于matlab的fft频谱分析及应用实验报告.docx
  6. 源代码与二进制文件SCA检测原理
  7. 路由器、交换机、集线器三剑客有什么区别?分别是用来干什么的?
  8. hqchartPy2数据对接教程7-指标引用
  9. SPI、I2C、I2S、UART、GPIO、SDIO、CAN、JTAG的区别
  10. hardware用u盘起动_Mac 老设备如何利用U盘启动 Apple Hardware Test (AHT) 硬件检测工具...