kagula
2021-10-23
内容概要
这里分析由3dsmax Wizard建立的Utility类型插件,空项目,它的结构,空项目指的是没有在向导自动生成的代码基础上添加一条有效代码。本文假设你已经在Win10上成功搭建3dsmax2022插件开发环境。具体如何搭建3dsmax2022插件开发环境,参考我的上一篇文章。
正文
新建空项目
在Visual Studio 2017中使用3dsmax Wizard新建Utility类型的插件,假设控件名称为maxEmptyProject,Category取kagula(你也可以随便取个其它名字)。
在项目中排除QtPluginRollup.h、QtPluginRollup.cpp这两个文件,这两个文件对我们Build&Run空插件一点作用都没有。
Build&Run所需要的文件有八个resouce.h、maxEmptyProject.rc、maxEmptyProject.def,DllEntry.cpp,plugin_form.ui,maxEmptyProject.h,maxEmptyProject.cpp及3dsmaxsdk_preinclude.h文件。
- maxEmptyProject.def定义了导出函数,详细信息请查阅Win32编程手册。
- DllEntry.cpp定义入口代码。
- plugin_form.ui是由QT Designer生成的模板,Compile这个文件后自动产生ui_plugin_form.h文件,这个文件中的PluginRollup类,是我们的代码hook视图模板的关键。
- maxEmptyProject的h和cpp文件,是我们空项目的核心。
- 3dsmaxsdk_preinclude.h文件,定义了向Output窗口输出信息的宏,DllEntry.cpp用到了这些宏。
- resource.h、maxEmptyProject.rc定义了字符串资源,没有rc文件虽然也能通过build,但是就不能正常显示字符串了。
启动顺序(只列出重要部分)
- 第一步:DllEntry.cpp,LibClassDesc函数,返回给3dsmax类描述:static maxEmptyProjectClassDesc 。告诉3dsmax需要实例化的class,maxEmptyProject。
- 第二步:3dsmax实例化maxEmptyProject类,这个类会链接由QT Designer制作的模板,并把前端视图加入到3dsmax Utility控制面板中。
源代码结构
图一 代码结构
整个项目以maxEmptyProject类为核心:
- BeginEditParams,控件视图被初始化的时候,会被3dsmax调用。
- EndEditParams,控件视图被撤销的时候,会被3dsmax调用。
- Init、Destroy,是控件被启动或销毁的时候调用。
- GetInstance,返回静态单实例。
- DoSomething, 一个Qt Click事件如何链接的例子。
参考资料
【1】《Creating a Qt-based plug-in》
https://help.autodesk.com/view/MAXDEV/2022/ENU/?guid=Max_Developer_Help_writing_plug_ins_using_qt_with_3ds_max_plug_ins_creating_a_qt_based_plug_in_html