一、前言
之前用maxscript写了一些功能,小文件情况下还好,文件越大时间越久,大文件 5G以上的max文件时,卡死,慢死。
因为3dmax有.net/c++的二次开发,接下来打算边学习边整理资料。
最终目的,自动模型简化。
之前处理Revit的模型还好,一个模型一个模型的,命名也有规律。
后来处理SmartPlant3D模型,通过navisworks把vue转换成fbx文件,结果到3dmax里面一看,全混杂在一起了,删除个螺丝都要自己去把面选中再删。数量好超级多.....
不行,得想办法写工具自动处理。
二、学习资料
找3dmax sdk资料,b站上有很多各种教程,max sdk的就一个,官方的 2012年的:https://www.bilibili.com/video/BV1dJ411t7iq?p=2。
官网地址:https://www.autodesk.com/developer-network/platform-technologies/3ds-max,下面有这个视频的下载版本,10个视频,一个视频1小时,英文没字幕,wmv格式,不大,讲ppt加演示。ppt,源码都有能下载的。
10个视频够我啃一周的了.....
Unit01: 介绍,ADN(Autodesk Develop Network),自定义UI,MaxScript,MaxSDK
Unit02:3dsmax Plugin Wizard
后面的看了几个视频,感觉和上课一样,看着看着睡着了,主要时我想先过一遍,后续再练习。
对了,视频没字幕,英语不行,看着好累。最后上传视频到Youtube上,它会自动生成字幕的,基本准确的,不是马上生成的,上传后过段时间后生成的。
看到第8个,没练习,只是有点概念,关键是它讲了很多的概念内容.......
三、Wizard
我的VS是2019,readme.txt里面没有,搜索了一下,需要改成VsWizard.VsWizardEngine.16.0,有个文章写的很详细:http://creativescratchpad.blogspot.com/2019/07/3ds-Max-SDK-Introduction.html
我最早碰到的问题是c++里面找不到,后来发现可以用搜索找到,也可以直接 所有语言&所有平台&所有项目类型 言里面找
然后是设置3dmax地址,要到userDefaults.js里设置
改成
可以查询
不设置的话,就是原始的
而不是教程里那样的
--------------------------------------------------------------------------
后来安装了vs2017,找不到vcprojects文件夹,不如说找到了一个。
按readme.txt,应该是 C:\Program Files(x86)\Microsoft Visual Studio 14.0\VC\VCProjects
我的电脑上有个 D:\Program Files(x86)\Microsoft Visual Studio 14.0\VC\VCProjects,拷贝进去没有效果。
而且我这次是安装在c盘的,这个怀疑是以前安装在d盘时留下的。
最后拷贝到C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\Common7\IDE\VC\VCProjects 可以了
vs2017当然是Wizard=VsWizard.VsWizardEngine.15.0,这个没问题。
-------------------------------------------------------------------------------------------------------
还要设置3dsmaxPluginWizard文件夹为可写的。
有个视频写的很详细:https://www.youtube.com/watch?v=Wt_v3LL6ug4&list=PLLkzsiaXzCpa9pYxDQVyCfdUB70E79RJ3&index=2&t=1s
四、生成问题
1.对路径xxx的访问被拒绝
要用管理员方式打开vs
2.cannot open include file 'afxres.h'
c++和windows sdk安装问题。
用vs2019打开视频练习项目,在项目旁边还是有Visual Studio2017的内容。
这些项目原本应该时vs2010创建的。
生成出现这个问题,具体怎么解决的其实也不知道,折腾来折腾去,把vs2019和vs2017还有一些c++组件都安装了,windowsSDK也是安装了几个。
反正最后就是用vs2017打开项目。
3.无法打开文件“bmm.lib”
参考:https://forums.cgsociety.org/t/sdk-plugin-type/1685238/2
这个链接路径倒是好设置,关键是要修改当前配置为Release和x64,这个折腾了我半天。
使用wizard生成的项目主要就是要切换一些Release。
而视频练习项目则需要修改项目内容,如下
4.打开视频练习源码文件
主要是需要替换项目文件的内容:
$(ADSK_3DSMAX_SDK_2013) -> $(ADSK_3DSMAX_SDK_2020)
$(ADSK_3DSMAX_SDK_2016) -> $(ADSK_3DSMAX_SDK_2020)
$(ADSK_3DSMAX_SDK_2020)\maxsdk -> $(ADSK_3DSMAX_SDK_2020) 环境变量中已经有maxsdk了
x64\lib -> lib\x64\Release 我的完整路径是 C:\Program Files\Autodesk\3ds Max 2020 SDK\maxsdk\lib\x64\Release
$(ADSK_3DSMAX_x86_2013) -> $(ADSK_3DSMAX_x64_2020)
$(ADSK_3DSMAX_x64_2013) -> $(ADSK_3DSMAX_x64_2020)
$(ADSK_3DSMAX_x64_2020)\plugins< -> $(ADSK_3DSMAX_x64_2020)\plugins\<
x64\$(Configuration)\ -> $(ProjectDir)\obj\$(MaxPlatform)\$(MaxConfiguration)\
我的环境变量:
这个改好了bmm.lib问题就没了,然后出现下面的问题。
-------------------------
发现启动3dsmax调试还要修改一下,上面都改掉了调试里面的路径还是没改。
5.RunMUIRCT.exe
"C:\Program Files\Autodesk\3ds Max 2020 SDK\maxsdk\tools\RunMUIRCT.exe" -o "C:\Program Files\Autodesk\3ds Max 2020\plugins\\" -f exercise04.dlu -t "C:\Program Files (x86)\Microsoft Visual Studio\2019\Enterprise\Common7\IDE\x64\ReleaseUnicode\\"
"$([System.IO.Path]::GetFullPath('$(MaxSdkDir)/tools/RunMUIRCT.exe'))" -o "$([System.IO.Path]::GetFullPath('$(TargetDir)'))\" -f $(TargetFileName) -t "$([System.IO.Path]::GetFullPath('$(IntDir)'))\"
用wizard生成的项目里面也有这个,生成没有问题的。
发现两则的IntDir是不一样的,修改项目文件
x64\$(Configuration)\ -> $(ProjectDir)\obj\$(MaxPlatform)\$(MaxConfiguration)\
可以了,生成成功了。
6.无法创建目录C:\Program Files\Autodesk\3ds Max 2020 SDK\maxsdk\\obj\x64\Release\maxProject6
查了一下,这个是临时目录,不知道为什么创建到3dsmax的sdk路径里面去了。
解决方法就是和上面的一样,设置C:\Program Files\Autodesk\3ds Max 2020 SDK\maxsdk\obj的权限为可写的。
生成不成功时就看一下现在是不是管理员方式启动的
上面问题处理好了,基本就生成成功了,生成后plugins文件夹中就有插件文件了,运行vs,会自动启动3dsmax。
加断点,能够进去,有时候不能进去....