QT5-STK二次开发实例
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二次开发实例相关推荐
- solidworks api二次开发实例详解_Solidworks开发语言对比及分析
很多初学Solidworks二次开发的同学,也许都会纠结使用何种语言进行二次开发.对于Solidworks二次开发的语言,官方有VBA,VB.NET,C#以及C++,四种语言. 用户通常会有如下疑问, ...
- python对abaqus本构二次开发_基于Python的Abaqus二次开发实例讲解
第 1 页 共 11 页 基于 Python 的 Abaqus 二次开发实例讲解 ( asian58 2013.6.26 ) 基于 Python 的 Abaqus 的二次开发便捷之处在于: 1 .所有 ...
- oa java 二次开发_泛微OA ecology 二次开发实例 开发完整.doc
泛微OA ecology 二次开发实例 开发完整 二次开发培训文档 ECOLOGY系统框架结构 主要的程序结构 Ecology Classbean 存放编译后的CLASS文件 js 系统中使用的JAV ...
- OpenSees二次开发实例02
一个记录器的二次开发过程 前言 过程 结语 前言 本文介绍了一个源代码中附带的记录器的二次开发过程,记录器的h和cpp文件是源代码自带的.这次花费了我3天的时间,才实现了记录器的添加. 过程 本记录器 ...
- Python 语言 SAP2000 二次开发 实例
目 录 Blog Links Remarks Example Blog Links DalNur | 博客总目录 Python语言 SAP2000 二次开发 -- 概述 Python语言 SAP200 ...
- lisp 圆柱螺旋线_Auto LISP对AutoCAD2002进行二次开发实例——绘制二维函数曲线
Auto LISP 对 AutoCAD 2002 进行二次开发实例 ---绘制二维函数曲线Ξ李旭荣 ,任奕玲 ,梁秀英 ,刘梅英 (华中农业大学 工程技术学院 ,湖南 武汉 430070) 摘 要:主 ...
- 基于python的abaqus二次开发_基于PYTHON的ABAQUS二次开发实例讲解
第 1 页 共 11 页 基于 Python 的 Abaqus 二次开发实例讲解 ( asian58 2013.6.26 ) 基于 Python 的 Abaqus 的二次开发便捷之处在于: 1 .所有 ...
- objectarx用户交互_AutoCAD2010二次开发实例教程(附光盘ObjectARX)
导语 AutoCAD软件二次开发牵涉的面非常广,不可能在一本书中将其完全论述.王文波和邹清源等编著的<AutoCAD2010二次开发实例教程>把AutoCAD软件二次开发的内容归为实体对象 ...
- arcgis python实例_arcgis二次开发_arcgis二次开发python_arcgis二次开发实例
[1.rar] - QQ连连看的源码.单消秒杀挂机等功能喜欢的朋友请拿去研究 [qqCHAR.rar] - qq 验证码识别程序 可以叫准确的识别出qq登陆前的验证码 [1.rar] - 本书以Vis ...
- C#进行AutoCAD二次开发实例之倒角功能实现原理介绍
内容提要: 今天又是周五,到了双休的日子,比较兴奋,看了一晚上的<最强大脑>,顿时赶脚智商成了硬伤...刚才躺下打算睡觉,觉得还是应该写写CAD二次开发的相关一些内容,原因 ...
最新文章
- python语法大全-python语法大全,python语法手册
- SpringBoot启动项目时提示:Error:(3, 32) java: 程序包org.springframework.boot不存在
- 宝宝树携手网易云信打造母婴咨询沟通新体验
- scala 样例类(case class) + 模式匹配代码示例
- jquery.form.js插件中ajaxSubmit提交在jquery1.4版本中的应用
- 人类基因组计划20周年!中科院付巧妹团队登Science特刊,从古DNA中一窥人类演化...
- 跨平台的报表生成器控件Stimulsoft Reports.Fx for Flex
- 贝壳“进社区”,让商业向文明靠拢
- AndroidStudio_从Eclipse到AndroidStudio开发工具_认识使用AndroidStudio_导入用eclipse开发的工程---Android原生开发工作笔记69
- 华为自研操作系统最快秋季面市;马化腾谈华为事件;微信支付回应遭封禁 | 极客头条...
- matlab空间球与空间圆求解,基于MATLAB的球管相贯空间曲线焊缝的数学模型
- ibmx系列服务器装系统,IBM X系列服务器 系统安装指南.pdf
- 50个常用mysql语句_常用的Mysql语句你知道多少?
- c语言快速学习,怎么才能正确快速的学习c语言
- 2013总结-2014计划
- 中国与印度的GDP深层剖析
- oracle 百万级数据查询优化,数据库SQL优化大总结之 百万级数据库优化方案
- 你想要的宏基因组-微生物组知识全在这(1906)
- cvReleaseCapture函数说明
- 基于以太坊的区块链浏览器搭建