QT-STK二次开发实例

  • QT-STK二次开发实例
  • 1 环境依赖
  • 2 QT编程
  • 3 创建STK功能类QSTKEarth
  • 4 主界面设置和运行结果

版本
STK 9
Qt 5
Qt编译器 MSVC

STK是由美国Analytical Graphics公司开发的一款在航天领域处于领先地位的商业分析软件。

QT的一套跨平台的C++图形用户界面库,上手简单,功能强大,是目前GUI开发者广泛使用的C++图形库。这篇文章主要介绍使用QT进行STK二次开发过程中的STK接口的配置实例。STK是由美国Analytical Graphics公司开发的一款航天商业分析软件,本身支持C,C++,Java,Matlab等多种语言的二次开发。下面介绍在QT Creator中利用axWidgets显示STK三维场景简单例子,因为在整个二次开发中STK的类实例只能有一个,所以下面的例子中STK类是一个单例模式。

1 环境依赖

需要计算机首先正确安装STK(我安装的版本是STK9,其他版本应该类似),打开STK安装目录C:\Program Files (x86)\AGI\STK 9\CodeSamples\CommonFiles其中文件夹CppIncludes就是我们需要包含到自己的程序中的文件。

2 QT编程

在QT项目中添加STK.h和STK.cpp(当然,你也可以改成其他名字,我这里就简单设置为STK.h和STK.cpp了),其中STK.h中包含CppIncludes目录中的AgStkUtil.tlh、AgVGT.tlh、AgStkObjects.tlh、STKX.tlh,注意需要引用相应的命名空间:
STK.h

#include "AgStkUtil.tlh"
using namespace STKUtil;//引用相应命名空间
#include "AgVGT.tlh"
#include "AgStkObjects.tlh"
using namespace STKObjects;
#include "STKX.tlh"
using namespace STKXLib;

STK.cpp

#include "STK.h"
#include "AgStkUtil.tli"
#include "AgStkObjects.tli"
#include "STKX.tli"

3 创建STK功能类QSTKEarth

QSTKEarth.h

#ifndef QSTKEARTH_H
#define QSTKEARTH_H#include "STK.h"
#include <QWidget>
#include <ActiveQt/QAxWidget>
#include <QDebug>class QSTKEarth: public QWidget
{Q_OBJECT
public:static QSTKEarth &getInstance(){if(instance==NULL){QMutexLocker locker(&mutex);if(NULL==instance)instance=new QSTKEarth;}return *instance;}bool enableControl;~QSTKEarth();
private:static QMutex mutex;static QAtomicPointer<QSTKEarth> instance;QSTKEarth(const QSTKEarth &);QSTKEarth(QWidget *parent = 0);IAgStkObjectRootPtr  m_pRoot;IAgSTKXApplicationPtr m_app;public:void PauseSTK();void StartSTK();void FasterSTK();void SlowerSTK();void ResetSTK();void NewScenario();void LoadScenario();void UnloadStkScence();
};#endif // QSTKEARTH_H

QSTKEarth.cpp

#include "QSTKEarth.h"
#include <QMessageBox>
#include <QDebug>
#include <QVBoxLayout>
#include <QFileDialog>QMutex QSTKEarth::mutex;
QAtomicPointer<QSTKEarth> QSTKEarth::instance=0;QSTKEarth::QSTKEarth(QWidget *parent) : QWidget(parent)
{::CoInitialize();//必须加上// Create a new instance of Automation Object Model Root ObjectHRESULT ha=m_app.CreateInstance(__uuidof(AgSTKXApplication));if(FAILED(ha)){QMessageBox::warning(this,QString::fromLocal8Bit("系统提示"),QString::fromLocal8Bit("创建程序对象失败!"));}HRESULT hr = m_pRoot.CreateInstance(__uuidof(AgStkObjectRoot));if(FAILED(hr)){QMessageBox::warning(this,QString::fromLocal8Bit("系统提示"),QString::fromLocal8Bit("创建程序对象失败!"));}enableControl=false;
}
QSTKEarth::~QSTKEarth()
{m_pRoot.Release();m_app.Release();//::CoUninitialize();
}
void QSTKEarth::NewScenario()
{Q_ASSERT(m_app!=NULL);STKXLib::IAgSTKXApplicationPtr pSTKXapp(m_app);pSTKXapp->ExecuteCommand("Unload / *");pSTKXapp->ExecuteCommand("New / Scenario ScenOne");enableControl=true;
}
void QSTKEarth::LoadScenario()//加载场景
{Q_ASSERT(m_pRoot!=NULL);m_pRoot->CloseScenario();m_pRoot->LoadScenario(_bstr_t("..\\data\\Scenario1.sc"));enableControl=true;
}
void QSTKEarth::PauseSTK()
{if(enableControl){Q_ASSERT(m_app != NULL);STKXLib::IAgSTKXApplicationPtr pSTKXapp(m_app);pSTKXapp->ExecuteCommand("Animate * Pause");//    pSTKXapp->Pause();//也可以直接调用类成员函数}
}
void QSTKEarth::FasterSTK()
{if(enableControl){Q_ASSERT(m_app != NULL);STKXLib::IAgSTKXApplicationPtr pSTKXapp(m_app);pSTKXapp->ExecuteCommand("Animate * Faster");}
}
void QSTKEarth::SlowerSTK()
{if(enableControl){Q_ASSERT(m_app != NULL);STKXLib::IAgSTKXApplicationPtr pSTKXapp(m_app);pSTKXapp->ExecuteCommand("Animate * Slower");}
}
void QSTKEarth::ResetSTK()
{if(enableControl){Q_ASSERT(m_pRoot != NULL);STKObjects::IAgAnimationPtr pAnimation( m_pRoot );pAnimation->Rewind();}
}
void QSTKEarth::UnloadStkScence()//卸载场景
{Q_ASSERT(m_app!=NULL);STKXLib::IAgSTKXApplicationPtr pSTKXapp(m_app);pSTKXapp->ExecuteCommand("UnloadMulti / */Satellite/*");pSTKXapp->ExecuteCommand("UnloadMulti / */Missile/*");pSTKXapp->ExecuteCommand("Unload / *");enableControl=false;
}

主界面程序

#include "QT_STK.h"
#include "ui_QT_STK.h"QT_STK::QT_STK(QWidget *parent) :QWidget(parent),ui(new Ui::QT_STK)
{ui->setupUi(this);
}QT_STK::~QT_STK()
{delete ui;
}void QT_STK::on_pushButton_clicked()
{QSTKEarth *m_stkEarth=&QSTKEarth::getInstance();m_stkEarth->NewScenario();
}

4 主界面设置和运行结果

QT5-STK二次开发实例相关推荐

  1. solidworks api二次开发实例详解_Solidworks开发语言对比及分析

    很多初学Solidworks二次开发的同学,也许都会纠结使用何种语言进行二次开发.对于Solidworks二次开发的语言,官方有VBA,VB.NET,C#以及C++,四种语言. 用户通常会有如下疑问, ...

  2. python对abaqus本构二次开发_基于Python的Abaqus二次开发实例讲解

    第 1 页 共 11 页 基于 Python 的 Abaqus 二次开发实例讲解 ( asian58 2013.6.26 ) 基于 Python 的 Abaqus 的二次开发便捷之处在于: 1 .所有 ...

  3. oa java 二次开发_泛微OA ecology 二次开发实例 开发完整.doc

    泛微OA ecology 二次开发实例 开发完整 二次开发培训文档 ECOLOGY系统框架结构 主要的程序结构 Ecology Classbean 存放编译后的CLASS文件 js 系统中使用的JAV ...

  4. OpenSees二次开发实例02

    一个记录器的二次开发过程 前言 过程 结语 前言 本文介绍了一个源代码中附带的记录器的二次开发过程,记录器的h和cpp文件是源代码自带的.这次花费了我3天的时间,才实现了记录器的添加. 过程 本记录器 ...

  5. Python 语言 SAP2000 二次开发 实例

    目 录 Blog Links Remarks Example Blog Links DalNur | 博客总目录 Python语言 SAP2000 二次开发 -- 概述 Python语言 SAP200 ...

  6. lisp 圆柱螺旋线_Auto LISP对AutoCAD2002进行二次开发实例——绘制二维函数曲线

    Auto LISP 对 AutoCAD 2002 进行二次开发实例 ---绘制二维函数曲线Ξ李旭荣 ,任奕玲 ,梁秀英 ,刘梅英 (华中农业大学 工程技术学院 ,湖南 武汉 430070) 摘 要:主 ...

  7. 基于python的abaqus二次开发_基于PYTHON的ABAQUS二次开发实例讲解

    第 1 页 共 11 页 基于 Python 的 Abaqus 二次开发实例讲解 ( asian58 2013.6.26 ) 基于 Python 的 Abaqus 的二次开发便捷之处在于: 1 .所有 ...

  8. objectarx用户交互_AutoCAD2010二次开发实例教程(附光盘ObjectARX)

    导语 AutoCAD软件二次开发牵涉的面非常广,不可能在一本书中将其完全论述.王文波和邹清源等编著的<AutoCAD2010二次开发实例教程>把AutoCAD软件二次开发的内容归为实体对象 ...

  9. arcgis python实例_arcgis二次开发_arcgis二次开发python_arcgis二次开发实例

    [1.rar] - QQ连连看的源码.单消秒杀挂机等功能喜欢的朋友请拿去研究 [qqCHAR.rar] - qq 验证码识别程序 可以叫准确的识别出qq登陆前的验证码 [1.rar] - 本书以Vis ...

  10. C#进行AutoCAD二次开发实例之倒角功能实现原理介绍

    内容提要:         今天又是周五,到了双休的日子,比较兴奋,看了一晚上的<最强大脑>,顿时赶脚智商成了硬伤...刚才躺下打算睡觉,觉得还是应该写写CAD二次开发的相关一些内容,原因 ...

最新文章

  1. python语法大全-python语法大全,python语法手册
  2. SpringBoot启动项目时提示:Error:(3, 32) java: 程序包org.springframework.boot不存在
  3. 宝宝树携手网易云信打造母婴咨询沟通新体验
  4. scala 样例类(case class) + 模式匹配代码示例
  5. jquery.form.js插件中ajaxSubmit提交在jquery1.4版本中的应用
  6. 人类基因组计划20周年!中科院付巧妹团队登Science特刊,从古DNA中一窥人类演化...
  7. 跨平台的报表生成器控件Stimulsoft Reports.Fx for Flex
  8. 贝壳“进社区”,让商业向文明靠拢
  9. AndroidStudio_从Eclipse到AndroidStudio开发工具_认识使用AndroidStudio_导入用eclipse开发的工程---Android原生开发工作笔记69
  10. 华为自研操作系统最快秋季面市;马化腾谈华为事件;微信支付回应遭封禁 | 极客头条...
  11. matlab空间球与空间圆求解,基于MATLAB的球管相贯空间曲线焊缝的数学模型
  12. ibmx系列服务器装系统,IBM X系列服务器 系统安装指南.pdf
  13. 50个常用mysql语句_常用的Mysql语句你知道多少?
  14. c语言快速学习,怎么才能正确快速的学习c语言
  15. 2013总结-2014计划
  16. 中国与印度的GDP深层剖析
  17. oracle 百万级数据查询优化,数据库SQL优化大总结之 百万级数据库优化方案
  18. 你想要的宏基因组-微生物组知识全在这(1906)
  19. cvReleaseCapture函数说明
  20. 基于以太坊的区块链浏览器搭建

热门文章

  1. wps android 特色功能,WPS Office手机版
  2. PLC与伺服电机连接
  3. 20170919_C++面试问题记录
  4. Android移动客户端性能测试浅谈——电量
  5. 服装管理解决方案丨汇信
  6. Selenium +Python项目实践(注册流程)
  7. 2021第十四届“认证杯”数学建模网络挑战赛C题
  8. 【MFC】测边网平差计算
  9. OverflowError: Python int too large to convert to C long
  10. 织梦dedecms怎么改模板