VAPS XT入门系列12:加载VAPS XT CodedObject DLL

系列索引:VAPS XT4.2.1入门系列索引

Qt动态加载VAPS XT编译生成的DLL文件Linux下编译生成VAPSXT动态链接库.so文件并动态加载中介绍了使用Qt动态加载VAPS XT编译生成的动态链接库。

本文介绍VAPS XT工程加载VAPS XT编译生成的动态链接库,动态链接库的功能比较简单,使用OpenGL绘制一个彩色三角形,VAPS XT可以加载此dll并显示(OpenGL的开发不在此文中,具体见OpenGL开发入门系列教程索引)。

首先创建一个根工程(root project/vrpj),本文工程名为Triangle。

空白工程为:

empty

空白类

先创建一个用于生成dll的类。新建类:

new class

创建完成后会出现属性设置界面:

property

设置Affects Drawing值为ExtentAndDraw。

然后生成VS2013工程代码(默认的):

code

生成的代码如下:

vs

修改代码

VAPS XT类默认生成VS2013的工程,我们打开(一些头文件和库由VAPS XT自动配置生成)。

打开后如下:

detail

因为需要使用OpenGL的函数,所以需要添加Windows Kit的include路径。

include

我们修改vxtClsOpenGLTriangle.cpp文件中的内容。

这里简单介绍一下几个函数:

名称功能
vxtClsOpenGLTriangle构造函数
vDraw绘图函数
pGetSelectedObject绘制的对象是否可以选择/选中
vCalculateExtent对象缩放
CanRotate对象是否可以旋转
vRotate对象旋转角度

包含头文件:

1
#include "vxtRTDrawMode.h"

我们在vDraw()函数中添加代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
a_rMode.rGetGraphics().vBeginDirectGLCalls();
glShadeModel(GL_SMOOTH);
glTranslatef(0, 0, 0);
glRotated(0, 0, 0, 0);
glBegin(GL_TRIANGLES);
glColor3f(1.0f, 0.0f, 0.0f);
glVertex3f(0.0f, 100, 0.0f);

glColor3f(0.0f, 1.0f, 0.0f);
glVertex3f(-100, -100, 0.0f);

glColor3f(0.0f, 0.0f, 1.0f);
glVertex3f(100, -100, 0.0f);
glEnd();
a_rMode.rGetGraphics().vEndDirectGLCalls();

代码分为两部分:

一个是VAPS XT固定的:

1
2
3
a_rMode.rGetGraphics().vBeginDirectGLCalls();
...
a_rMode.rGetGraphics().vEndDirectGLCalls();

另一部分是OpenGL的标准实现:

1
2
3
4
5
6
7
8
9
10
11
12
13
glShadeModel(GL_SMOOTH);
glTranslatef(0, 0, 0);
glRotated(0, 0, 0, 0);
glBegin(GL_TRIANGLES);
glColor3f(1.0f, 0.0f, 0.0f);
glVertex3f(0.0f, 100, 0.0f);

glColor3f(0.0f, 1.0f, 0.0f);
glVertex3f(-100, -100, 0.0f);

glColor3f(0.0f, 0.0f, 1.0f);
glVertex3f(100, -100, 0.0f);
glEnd();

有三个顶点,每个顶点对应不同颜色,不做过多介绍。

使用release版本编译生成dll,使用StaticOGL编译生成VAPS XT编译程序需要的obj文件。

build

结果为:

result

CodedObject是dll源码文件夹,lib文件夹是VS2013编译生成的VAPS XT需要的obj文件,temp是VS2013编译临时文件夹。

加载DLL

先新建一个Coded Implementation

imp

设置名称,在DLL Path字段打开dll所在的文件位置。

点击Ok之后,就会在之前的class内部新建一个Imp。

result

如果双击打开的话什么都没有。

显示

新建一个Format

format

将OpenGLTriangle拖拽到Format的内部,然后就会在预览窗口立刻显示OpenGLTriangle中用OpenGL写的多色三角形。

result

说明

可以看到,在Windows下Qt动态加载VAPS XT编译生成的DLL文件Linux下编译生成VAPSXT动态链接库.so文件并使用Qt动态加载中有加载DLL,此方法称为DrawingIntegration(DI)方法,本文方法称为CodedObject方法。

CodedObject方法是无法加载DI方法编译生成的DLL的,这个我是问过原厂工程师。

完整工程地址:VAPS_XT