OpenSceneGraph in ActiveX by ActiveQt
OpenSceneGraph in ActiveX by ActiveQt
Abstract. Qt’s ActiveX and COM support allows Qt for Windows developers to access and use ActiveX controls and COM objects provided by any ActiveX server in their Qt applications. Make their Qt application available as COM servers, with any number of Qt objects and widgets as COM objects and ActiveX controls. Make OpenSceneGraph to ActiveX controls then you can use it in other place, like IE.
Key Words. OpenSceneGraph, ActiveX, COM, ActiveQt
1.Introduction
ActiveX是一个开放的集成平台,为开发人员、用户和Web生产商提供了一个快速而简便的在Internet 和Intranet创建程序集成和内容的方法。使用AcitveX可以轻松方便地在Web页面中插入多媒体效果、交互式对象及复杂程序。编写的ActiveX控件可以在不同的程序上运行,如Internet Explorer, Visual Basic, MFC- and ATL-based containters等等。
本文尝试使用Qt的ActiveQt模块将OpenSceneGraph封装成ActiveX控件,并在Internet Explorer中显示出三维模型。
2.ActiveQt
习惯了用Qt封装的对象,用着舒服。Qt的Windows商业版本和开源版本都提供了ActiveQt框架,使用这个组件我们可以在Qt中使用ActiveX控件,并且也可以开发基于Qt的ActiveX控件。ActiveQt包含了两个组件QAxContainter和QAxServer:
v QAxContainer允许我们使用COM对象,像使用Excel的COM对象,就可以对Excel进行读写了;
v QAxServer可以将我们写的Qt控件导出为COM对象或者ActiveX控件。
使用ActiveQt来编写ActiveX控件还是要简单很多的。
3.OpenSceneGraph
OpenSceneGraph是对OpenGL面向对象的封装,使用OpenSceneGraph可以方便地对三维场景进行处理,可以用于三维可视化,仿真等领域。因为也是纯C++开发,所以产生了将OpenSceneGraph编写成ActiveX控件的想法,这样就可以在Web上来操作三维场景了。
4.Example
首先在Visual Studio中创建一个ActiveQt Server项目,如下图所示:
![]()
接下来使用osgQt模块来在Qt中使用OpenSceneGraph,只需要增加一个初始化函数,代码如下所示:
void osgActiveX::init()
{
osgQt::initQtWindowingSystem(); myRootNode = new osg::PositionAttitudeTransform(); myRootNode->addChild(osgDB::readNodeFile("d:/test.stl")); myViewer = new osgViewer::Viewer();
myViewer->addEventHandler(new osgGA::StateSetManipulator(myViewer->getCamera()->getOrCreateStateSet()));
myViewer->addEventHandler(new osgViewer::StatsHandler());
myViewer->setCameraManipulator(new osgGA::TrackballManipulator());
myViewer->setSceneData(myRootNode); osgQt::setViewer(myViewer); myOsgWidget = new osgQt::GLWidget(this);
myGraphicsContext = new osgQt::GraphicsWindowQt(myOsgWidget); myViewer->getCamera()->setViewport(0, 0, myOsgWidget->width(), myOsgWidget->height());
myViewer->getCamera()->setProjectionMatrixAsPerspective( 30.0f, static_cast<double>(myOsgWidget->width())/static_cast<double>(myOsgWidget->height()), 1.0f, 10000.0f );
myViewer->getCamera()->setGraphicsContext(myGraphicsContext); setCentralWidget(myOsgWidget);
}
编译生成一个ActiveX控件后,再写一个HTML文件来测试生成的结果,其中HTML文件中的主要内容如下:
<object ID="OsgActiveX" CLASSID="CLSID:450B2B35-9AC6-4FCD-A883-2ACF0FA19A16">
[Object not available! Did you forget to build and register the server?]
</object>
其中CLASSID就是用QAXFACTORY_DEFAULT宏定义注册时的GUID。程序运行结果如下图所示:
![]()
5.Conclusion
使用ActiveQt将OpenSceneGraph封装成ActiveX控件,这样的控件就可以在多个程序中使用,如IE,Visual Basic等等。
等熟练理解ActiveQt后,可以对OSG的ActiveX控件进行扩展,使其有更强大的三维交互功能。
6.References
1. Qt’s ActiveX Framework
2. https://zh.wikipedia.org/wiki/ActiveX
PDF Version: OpenSceneGraph in ActiveX by ActiveQt
OpenSceneGraph in ActiveX by ActiveQt的更多相关文章
- Qt 插件综合编程-基于插件的OpenStreetMap瓦片查看器client(5) 小结
经过不断试用与改动,这个查看器终于还是完毕了设计.实现.查看器,顾名思义,没有编辑功能:说的白一点,仅仅是一个以OpenStreetMap为底图的显示装置罢了.和专业GIS相比,这款基于插件的Open ...
- ActiveQt框架 禁止弹出ActiveX控件交互提示
重点重写QAxBindable的createAggregate() 参考Qt例子: qtactiveqt\activeqt\opengl\glbox.cpp
- Qt写Activex插件 总结
最近写的插件功能基本完成,也遇到了一些坑,在这里记录一下. 我写的这个插件的js接口是仿造google earth的js接口,尽可能的达到与它的api一致.先从最简单的说起: 1. 导出接口中的flo ...
- 如何用ActiveQt写导出类
如何用ActiveQt写导出类 最近一直在用ActiveQt框架来写ActiveX插件, 由于项目需要提示类的导出, 所以上午捣鼓了一下, 现在记录记录.其实内容主要是把Qt手册里自己用到的部分整理一 ...
- 在Qt中使用ActiveX控件
Qt的windows商业版本提供了ActiveQt这个framework,使用这个组件我们可以在Qt中使用ActiveX控件,并且也开发基于Qt的ActiveX控件.ActiveQt包含了两个组件QA ...
- Qt create 如何构建 ActiveX 控件?
ActiveX.pro #------------------------------------------------- # # Project created by QtCreator 2018 ...
- Qt中使用ActiveX控件
(转自:http://blog.csdn.net/tingsking18/article/details/5403038) 在Qt中使用ActiveX控件 Qt的windows商业版本提供了Activ ...
- Qt开发Activex笔记(一):环境搭建、基础开发流程和演示Demo
前言 使用C#开发动画,绘图性能跟不上,更换方案使用Qt开发Qt的控件制作成OCX以供C#调用,而activex则是ocx的更高级形式. QtCreator是没有Active控件项目的,所有需要 ...
- Qt开发Activex笔记(二):Qt调用Qt开发的Activex控件
若该文为原创文章,转载请注明原文出处本文章博客地址:https://blog.csdn.net/qq21497936/article/details/113789693 长期持续带来更多项目与技术分享 ...
随机推荐
- NodeJs之OS
OS Node.js提供了一些基本的底层操作系统的模块OS. API var os = require('os'); console.log('[arch] 操作系统CPU架构'+os.arch()) ...
- ASP.NET Aries 入门开发教程5:自定义列表页工具栏区
前言: 抓紧时间,继续写教程,因为发现用户期待的内容,都在业务处理那一块. 不得不继续勤劳了. 这节主要介绍工具栏区的玩法. 工具栏的默认介绍: 工具栏默认包括5个按钮,根据不同的权限决定显示: 添加 ...
- JavaScript中fn()和return fn()
看博客时,注意到return的重要性 参考:http://www.cnblogs.com/raoyunxiao/p/5644032.html 看似反常的例子: var i = 0; function ...
- 07.LoT.UI 前后台通用框架分解系列之——轻巧的文本编辑器
LoT.UI汇总:http://www.cnblogs.com/dunitian/p/4822808.html#lotui 上次说的是强大的百度编辑器 http://www.cnblogs.com/d ...
- Bootstrap-Select 动态加载数据的小记
关于前端框架系列的可以参考我我刚学Bootstrap时候写的LoT.UI http://www.cnblogs.com/dunitian/p/4822808.html#lotui bootstrap- ...
- C# 多种方式发送邮件(附帮助类)
因项目业务需要,需要做一个发送邮件功能,查了下资料,整了整,汇总如下,亲测可用- QQ邮箱发送邮件 #region 发送邮箱 try { MailMessage mail = new MailMess ...
- 【开源】.Net Aop(静态织入)框架 BSF.Aop
BSF.Aop .Net 免费开源,静态Aop织入(直接修改IL中间语言)框架,类似PostSharp(收费): 实现前后Aop切面和INotifyPropertyChanged注入方式. 开源地址: ...
- javascript设计模式:策略模式
前言 策略模式有效利用组合.委托.多态等技术和思想,可以有效避免多重条件选择语句. 策略模式对开放-封闭原则提供了很好的支持,将算法封装在strategy中,使得他们易于切换.理解.扩展. 策略模式中 ...
- cesium核心类Viewer简介
1.简单描述Viewer Viewer类是cesium的核心类,是地图可视化展示的主窗口,cesium程序应用的切入口,扮演必不可少的核心角色. 官网的英文解析如下: A base widget fo ...
- 【转】Android开发中让你省时省力的方法、类、接口
转载 http://www.toutiao.com/i6362292864885457410/?tt_from=mobile_qq&utm_campaign=client_share& ...