VAPS XT入门教程15.04:CodedObject机制
系列索引:VAPS XT入门教程索引
上一篇:VAPS XT入门教程15.03:UserIntegration机制
本文介绍VAPS XT工程加载VAPS XT编译生成的动态链接库,动态链接库的功能比较简单,使用OpenGL绘制一个彩色三角形,VAPS XT可以加载此dll并显示(OpenGL的开发不在此文中,具体见OpenGL入门教程索引)。
首先创建一个根工程(root project/vrpj),本文工程名为Triangle。
空白工程为:
空白类
先创建一个用于生成dll的类。新建类:
创建完成后会出现属性设置界面:
设置Affects Drawing值为ExtentAndDraw。
然后生成VS2013工程代码(默认的):
生成的代码如下:
修改代码
VAPS XT类默认生成VS2013的工程,我们打开(一些头文件和库由VAPS XT自动配置生成)。
打开后如下:
因为需要使用OpenGL的函数,所以需要添加Windows Kit的include路径。
我们修改vxtClsOpenGLTriangle.cpp文件中的内容。
这里简单介绍一下几个函数:
名称 | 功能 |
---|---|
vxtClsOpenGLTriangle | 构造函数 |
vDraw | 绘图函数 |
pGetSelectedObject | 绘制的对象是否可以选择/选中 |
vCalculateExtent | 对象缩放 |
CanRotate | 对象是否可以旋转 |
vRotate | 对象旋转角度 |
包含头文件:
1 |
|
我们在vDraw()函数中添加代码
VS2013工程除了标准的Release/Debug外还包括StaticOGL等配置。
下表是对应关系。
VS类型 | VAPS XT 类型 |
---|---|
StaticOGL | wogl |
StaticOGLDebug | wogl_d |
StaticOGLDebugWithExports | wogl_multi_dll_d |
StaticOGLWithExports | wogl_multi_dll |
编译生成结果是DLL,DLL所绘制的图像是由vDraw()函数中的标准OpenGL函数绘制的。
结果为:
CodedObject是dll源码文件夹,lib文件夹是VS2013编译生成的VAPS XT需要的obj文件,temp是VS2013编译临时文件夹。
加载DLL
先新建一个Coded Implementation
设置名称,在DLL Path字段打开dll所在的文件位置。
点击Ok之后,就会在之前的class内部新建一个Imp。
如果双击打开的话什么都没有。
显示
新建一个Format
将OpenGLTriangle拖拽到Format的内部,然后就会在预览窗口立刻显示OpenGLTriangle中用OpenGL写的多色三角形。
扩展
将OpenGLTriangle控件拖拽到窗口后自动显示控件内容,你想到了什么?官方提供的点线圆等控件也是这种操作。我们打开官方控件所在的文件目录(VAPS XT入门教程09:程序目录说明中介绍过)。
可以看到每个控件都对应着一个dll文件,我们打开WideText.cimp文件
1 |
|
可以看到就是使用CodedObjects方法。
也就是说VAPS XT编辑器的实时效果预览功能就是靠CodedObjects特性。
这个机制由VS编译出DLL,所以此机制只支持Windows,而官方的编辑器也是使用这种机制,所以官方编辑器只支持Windows。
扩展2
群友提出的问题,如果VAPS XT的dll里面调用了另一个dll怎么办?
经过测试,VAPS XT dll依赖的dll需要放置于环境变量目录中,否则会找不到依赖,提示dll加载错误。
说明
- 不同软件版本,操作可能不同
- 可以看到,在VAPS XT入门教程15.05:DrawingIntegration机制和VAPS XT入门教程15.05.01:Qt动态加载VAPS XT so中有加载动态链接库的方法,此方法称为DrawingIntegration(DI)方法,本文方法称为CodedObject方法。
- CodedObject方法是无法加载DI方法编译生成的DLL的,这个我是问过原厂工程师。
- 完整工程地址:VAPS_XT
技术交流群,欢迎加入讨论。这个圈子很小,大佬可能没兴趣加这些群聊社区之类的。所以只能带你入门,当然,欢迎大佬指导