OpenSceneGraph in ActiveX by ActiveQt

OpenSceneGraph in ActiveX by ActiveQt

[email protected]

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

时间: 2024-08-10 12:11:47

OpenSceneGraph in ActiveX by ActiveQt的相关文章

Qt 插件综合编程-基于插件的OpenStreetMap瓦片查看器client(5) 小结

经过不断试用与改动,这个查看器终于还是完毕了设计.实现.查看器,顾名思义,没有编辑功能:说的白一点,仅仅是一个以OpenStreetMap为底图的显示装置罢了.和专业GIS相比,这款基于插件的OpenStreetMap瓦片查看器client显得单薄.和消费类GIS(如面向浏览器的地图API)相比,它是本地的.似乎和Native应用更加合拍. 事实上一直以来想利用业余时间做这样一个工具,使得非计算机专业的project师们能够拥有一款支持漫游.标图.动画效果的轻量级地理信息插件,特别是掌握C++.

在Qt中使用ActiveX控件

Qt的windows商业版本提供了ActiveQt这个framework,使用这个组件我们可以在Qt中使用ActiveX控件,并且也开发基于Qt的ActiveX控件.ActiveQt包含了两个组件QAxContainer和QAxServer. l         QAxContainer允许我们使用COM对象,并且可以将将ActiveX控件嵌入到Qt程序中去. l         QAxServer可以将我们写的Qt控件导出为COM对象或者是ActiveX控件. 第一个例子我们来演示一下在Qt中

c# Activex开发之HelloWorld

最近需要在Web上使用WinFrom程序,所以要用到Activex技术将WinFrom程序变成插件在Web运行 一.创建用户控件 1.1 新建用户控件项目 1.2 在界面上拉一个label,Text赋值为“HelloWorld” 1.3 加上guid using System; using System.Windows.Forms; using System.Runtime.InteropServices; using System.Diagnostics; namespace HelloWor

A Complete ActiveX Web Control Tutorial

? Introduction ActiveX is a Microsoft technology developed in the mid 90's, that allows for the creation of applet-like applications that can be downloaded and run within Microsoft's Web browser. This article is intended for Visual C++ developers who

ActiveX控件(ATL篇)

目录 第1章 VC++6.0创建    2 1.1 目标    2 1.2 创建项目    2 1.3 增加COM类    4 1.4 属性    7 1.5 事件    8 1.6 实现连接点    9 1.7 编码    11 1.7.1 增加成员变量    11 1.7.2 初始化成员变量    11 1.7.3 完成属性赋值代码    11 1.7.4 完成控件绘制代码    11 1.7.5 响应鼠标左键按下消息    13 1.7.6 修改DllUnregisterServer   

ActiveX控件(MFC篇)

目录 第1章 VC++6.0创建控件    1 1.1 目标    1 1.1.1 方法    1 1.1.2 属性    1 1.1.3 事件    1 1.2 创建项目    2 1.3 项目结构    6 1.3.1 COM接口    6 1.3.2 COM类    7 1.3.3 属性页    7 1.3.4 应用程序类    8 1.3.5 注册与注销    8 1.4 方法    9 1.4.1 增加    9 1.4.2 删除    11 1.5 属性    12 1.5.1 Te

16.COM组件技术应用之一:ActiveX控件

一.ActiveX控件(COM组件技术的应用之一) flash.ocx 1. 概念 1.1 ActiveX控件的概念 基于COM组件技术,可以被任何支持COM标准的计算机程序的项目使用. 可是采用拖拽的方式创建,使用向一般控件一样方便.文件的后缀是ocx,有时称ocx控件. 1.2 COM组件的概念 Component Object Model,组件对象模型.可以改善项目的架构,使得项目可维护性和可复用性更好. COM组件是一些小的可以执行的二进制文件,以接口的方式为其他的程序.系统和组件提供服

Google Chrome Frame 自定义渲染方式,调用ActiveX

通过meta段的设置可以控制浏览器的渲染行为,但在一些特殊情况下,meta段的设置无效,我们需要额外的操作以达到目的. 模式1:页面A(IE)iFrame引用页面B(Chrome Frame) 问题描述在IE渲染的页面A中,使用iframe引用的页面B即使添加了meta信息也不会使用Chrome Frame渲染.解决方法CFInstance.js(见文档附件)同样是由Google提供的开源源代码,帮助我们更灵活的使用Chrome Frame.在页面A中引入CFInstance.js,页面加载完毕

通过VLC的ActiveX进行二次开发,实现一个多媒体播放器 2011-04-10 00:57:23

http://blog.chinaunix.net/xmlrpc.php?r=blog/article&uid=25498312&id=218294 通过VLC的ActiveX进行二次开发,实现一个多媒体播放器 2011-04-10 00:57:23 分类: 系统运维 首先要注册VLC的ActiveX控件. 拷贝vlc-0.8.6e\activex目录下面的axvlc.dll文件到c:\windows目录下面,然后运行命令提示符cmd.在命令提示符中输入如下命令注册该控件 REGSVR32