快捷导航

[MaxScripts] 浅谈MaxScript与Max SDK的区别

  [复制链接]
2013-8-5 12:24 / 查看: 15903 / 回复: 62
V5CG提示您:本文由凌波微步发表,如需商业用途或转载请与凌波微步联系授权,谢谢配合!
凌波微步
积分:12
最新注册
浅谈MaxScript与Max SDK的区别
  3ds Max 脚本编程与3ds Max SDK编程有很大的区别,时常有些功能用maxscript 可以一两句命令完成,相比之下使用max sdk就复杂多了,所有的一切都要你自己去做,我的意思是说你必须处理控件消息响应,你还必须理解3ds max管道线,索引消息架构,Windows API使用,熟悉C++,只有在效率上要求非常高时才建议采用max sdk进行二次开发。

  下面我举一个简单例子,功能就是禁用当前所选对象的修改器,我分别用maxScript和max SDK来实现,我希望大家能明白我所说的MaxScript与Max SDK二次开发的区别,至于你要做max 二次开发时选用哪一种,完全依赖于项目的性能,开发时间限制等等,打个比方用MaxScript脚本能一周内完成的任务,改用Max SDK实现也许需要一个多月时间,下面是我写的一段maxScript和max SDK实现相同功能的代码,有兴趣的话可以读一读cgsir好久以前写的小文章。

-------------------------------------------------------
MaxScript实现:
-------------------------------------------------------
  1. --checkbox控件的响应
  2. on chkDisableMod changed var do
  3. (
  4.   if checkboxEnableMod.state ==true then
  5.   (
  6.     $.modifiers[1].enabled = false
  7.   )
  8.   else
  9.   (
  10.     $.modifiers[1].enabled = true
  11.   )
  12. )
复制代码
-------------------------------------------------------
如果用Max SDK实现:
-------------------------------------------------------
  1. // 窗口过程消息处理
  2. BOOL polyReduceDlgProc::DlgProc(TimeValue t,IParamMap *map,HWND hWnd,UINT msg,WPARAM wParam,LPARAM lParam)
  3. {
  4.   switch (msg) {
  5.   case WM_INITDIALOG:
  6.     thePolyReduce.OnInitDlg(hWnd);
  7.     break;
  8.     
  9.   case WM_DESTROY:
  10.     thePolyReduce.OnDestroyDlg(hWnd);
  11.     break;
  12.     
  13.   case WM_COMMAND:
  14.     switch (LOWORD(wParam)) {
  15.     case IDOK:
  16.       break;
  17.       // 关闭修改器
  18.     case IDC_DISABLE_MOD: {
  19.       if (IsDlgButtonChecked(hWnd, IDC_DISABLE_MOD))
  20.       {
  21.         thePolyReduce.IsDisableMod(IS_DISABLE);
  22.       }
  23.       else
  24.       {
  25.         thePolyReduce.IsDisableMod(IS_ENABLE);
  26.       }
  27.       }
  28.     }
  29.     break;
  30.     default:
  31.       return FALSE;
  32.   }
  33.   return TRUE;
  34. }

  35. // 禁用修改器
  36. void PolyReduceMod::IsDisableMod(bool bDisable = IS_DISABLE)
  37. {
  38.   // 根据选择的节点,获得修改器的指针
  39.   INode *pNode = ip->GetSelNode(0);
  40.   Object *pObj = pNode->GetObjectRef();
  41.   IDerivedObject *pDerObj = NULL;
  42.   Modifier *pMod = NULL;
  43.   
  44.   if(pObj == NULL)
  45.   {
  46.     MessageBox(GetCOREInterface()->GetMAXHWnd(), "没有获得对象的索引", "提示信息", MB_OK | MB_ICONINFORMATION);
  47.   }
  48.   
  49.   if(pObj->SuperClassID()== GEN_DERIVOB_CLASS_ID)
  50.   {
  51.     pDerObj = (IDerivedObject *) pObj;
  52.     for(int i=0; i< pDerObj->NumModifiers(); i++)
  53.     {
  54.       pMod = pDerObj ->GetModifier(i);
  55.     }
  56.   }
  57.   
  58.   if(pMod !=NULL)
  59.   {
  60.     if(bDisable == IS_DISABLE && pMod->IsEnabled() )
  61.       pMod->DisableMod();
  62.     else
  63.       pMod->EnableMod();
  64.     
  65.     pDerObj->NotifyDependents(FOREVER,PART_ALL,REFMSG_CHANGE);
  66.     pMod->NotifyDependents(FOREVER,PART_ALL,REFMSG_CHANGE);
  67.     pNode->NotifyDependents(FOREVER,PART_ALL,REFMSG_CHANGE);
  68.     pNode->NotifyDependents(FOREVER,0,REFMSG_SUBANIM_STRUCTURE_CHANGED);
  69.     ip->ExecuteMAXCommand(MAXCOM_MODIFY_MODE);
  70.     ip->ForceCompleteRedraw();
  71.   }
  72. }
复制代码
加入土豪吧,爽!
悠然自得 -2013-8-7 23:26:27 | 显示全部楼层
楼主的工具在哪呢?
群§舞佳人 -2013-8-31 20:36:28 | 显示全部楼层
期待好工具,帮助我们提高效率,谢谢咯
情迷布拉格 -2013-9-4 21:52:45 | 显示全部楼层
感恩无私的分享与奉献 :)
雨夜故客 -2013-9-13 13:39:56 | 显示全部楼层
简洁,明了,然后执行效率还很高。这样的代码就是我们应该追求的吧?我估计
傷惢☆無淚 -2013-9-19 11:11:02 | 显示全部楼层
写脚本的工具还有个叫Sublime的是不是?好像在哪见过介绍。
Pisces -2013-9-26 19:21:15 | 显示全部楼层
我要学习了,不错
蝇木花盗 -2013-9-27 13:47:29 | 显示全部楼层
泡一壶清茶,等着楼主再来
纷乱的节奏 -2013-9-27 13:59:27 | 显示全部楼层
我楼主朋友,我就是特地来顶楼主的!,嘿嘿
人品太次郎 -2013-9-27 14:23:25 | 显示全部楼层
我就是来这里看看有没有好工具下载一个,谢谢了。
CgMan -2013-9-27 14:28:29 | 显示全部楼层
我要好好学习去了,先不理你
kobe菲菲 -2013-9-27 15:12:49 | 显示全部楼层
很有用的东西,谢了
萍水相逢 -2013-9-27 15:27:21 | 显示全部楼层
找到榜样了~
fswdnr -2013-9-27 15:48:17 | 显示全部楼层
请教下楼主,这个是用什么做的啊?
飞腾小子 -2013-9-27 16:07:29 | 显示全部楼层
学习了,谢谢分享、、、
の伱.啲諎 -2013-9-27 16:16:12 | 显示全部楼层
帮帮顶顶!!
流.浪.豬 -2013-9-27 18:13:24 | 显示全部楼层
看到这个,我和我的小伙伴们都惊呆了...
小南宫 -2013-9-27 18:15:58 | 显示全部楼层
我是来刷分的,嘿嘿
喜多多 -2013-9-27 20:12:16 | 显示全部楼层
现在的程序越来越狂了。
小雪 -2013-9-27 20:35:20 | 显示全部楼层
我也来试试看
yzwj2004 -2013-9-27 20:52:27 | 显示全部楼层
好帖留名,如烟飘过~
海龟 -2013-9-27 20:54:07 | 显示全部楼层
看帖回帖是美德!:lol
边缘人 -2013-9-27 20:55:11 | 显示全部楼层
看帖回帖是美德!:lol
bjghzly -2013-9-27 22:17:21 | 显示全部楼层
不错不错,楼主您辛苦了。。。
Edit -2013-9-30 08:45:30 | 显示全部楼层
不错啊,强烈支持楼主ing……
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则