3ds Max 使用自己集成的.NET assembly 加载器在运行期间加载在3ds Max的安装目录\bin\assemblies 里全部有效并且实现了3ds Max plug-in的.Net assembly,3ds Max SDK有很多不同的DLL库,提供必要的API给 .NET plug-ins来使用。
  1. Autodesk.max.dll 提供了一个混合库包装起来了几乎所有的3ds Max C++ SDK特性。
  2. UiViewModel.dll 包含所有需要创建用户行为给CUI的类,介绍下CUI,源自百度百科:CUI:指冯诺依曼体系机构。在电子技术领域表示为Command User Interface,命令行用户交互。是和GUI(图形界面(Graphical User Interface,简称 GUI,又称图形用户接口))相对应的一种说法。这里是指应用命令行和电脑交互,从而达到控制和利用电脑的目的。现在一般说UI其实,这是不科学的,大多数人喜欢拿UI和GUI比较,认为UI就是命令交互,其实UI是包含了CUI和GUI的。这种现象在dos时代很盛行,就算到了现在这种交互的方式并不是被GUI打败了,现在依然有一些爱好者更喜欢用命令和电脑交互,因为这样的系统一般比较小运行起来方便。比如dos和linux内核。
要写.Net plug-ins,需要创建新的C#类库,创建好后根据功能需要从3ds Max安装目录导入引用UiViewModel.dll和Autodesk.Max.dll。
.Net Action plug-ins 用 UiViewModel.dll
创建 .NET Action plug-in 要用到UiViewModel.dll ,plug-in类必须实现CuiActionCommandAdapter接口。你可以在VS里用C#自动的实现一个抽象类,只要右键点击类名选择Implement Abstract Class即可,这样CuiActionCommandAdapter接口会自动创建需要的4个属性变量和1个函数。属性变量提供关于你的CUI Action plug-in的基础信息,名为Execute()函数需要在你的plug-in里实现。在3ds Max任何extend CuiActionCommandAdapter接口的类都是独立编译加载的。
 .Net plug-ins 用 Autodesk.max.dll
类似于C++ plug-in插件  extend  3ds Max base class,开发者可以使用定义在Autodesk.max.dll的接口去实现自己想要的任何插件类型。在3ds Max C++ SDK 类和 Autodesk.Max.dll接口变量之间一 一对应。创建好utility plug-in会有2个函数供你自定义实现:BeginEditParams() and EndEditParams()
.Net plug-in也需要类的描述符 class descriptors,这点类似于C++ plug-ins的非托管代码。 class descriptors作用是启动写的plug-ins,你可以自定义class descriptor extend Autodesk.Max.Plugins.ClassDesc2。class descriptor返回一个Create()函数创建的object给你的plug-ins。同上你可以右键选择描述符 Implement Abstract Class 创建并完成你想实现的函数。你不需要给插件明确地定义构造函数,因为你可以调用Descriptor::Create()这个不带任何参数的函数。整个插件工程会在调用该函数时被编译,但是3ds Max此时仍然没有意识到该插件,需要在3ds max installation folder]\bin\assemblies替换.dll文件,重启3ds Max,3ds Max才会识别到。要被.NET Assembly Loader解释,需要注册你的3ds Max插件,暴露出并实现一个public static 的函数名称AssemblyMain()。可以在插件的命名空间内实现该函数,其中包括 main plug-in class 和 class descriptor。清晰起见,我们创建一个新的public class 去实现这个函数和其他assembly function函数。和AssemblyMain()函数相似的是,public static AssemblyShutdown() 函数可以在任何需要的时刻终结你的插件。
public static class AssemblyFunctions  {  public static void AssemblyMain()  {  var g = Autodesk.Max.GlobalInterface.Instance;  var i = g.COREInterface13;  i.AddClass(new Descriptor(g));  }  public static void AssemblyShutdown()  {  }  }

Interfaces instead of Classes, Properties instead of Functions

3ds Max包括一个句柄指向它的统一查询接口BeginEditParams()。我们可以通过调用PushPrompt()函数得到这个句柄。同时我们也可以声明接口global来得到BeginEditParams()。
IGlobal global = Autodesk.Max.GlobalInterface.Instance;
Interface13 Interface = global.COREInterface13;
global.PushPrompt("...");

等价的C++代码是:

Interface* ip =GetCOREInterface();ip->PushPrompt("...")

3ds Max插件开发(八)编写.Net Plug-ins相关推荐

  1. 3ds Max插件开发(二)官网上的Sample utility plug-in

    通过上节的步骤可以确保SDK满足开发3ds Max plug-ins的条件. File > New:Projects > Visual C++ Projects >设置插件类型为ut ...

  2. 3ds Max 实验八 使用可编辑多边形实战

  3. 3ds max sdk导出插件编写的心得

    3ds max sdk导出插件编写的心得 作者:yhchinabest 来自:CG先生-3D图形插件开发网http://www.cgsir.com 写在前面 为什么要写这个心得?去年11月份的时候我写 ...

  4. 3D MAX导出插件编写

    文章版权归博客园 BigCoder所有,转载请于明显位置标明原文作者及出处,以示尊重!! 原文出处:http://www.cnblogs.com/csyisong/archive/2009/09/01 ...

  5. 3ds Max 2014 SDK配置开发环境以及遇到的问题

    领导让研究一下Max插件,于是从一个坑立刻跳到另一个坑中!目前SDK已经更新到了2018,真是一年一个版本... 环境 机器:Win7 旗舰 64+SP1 IDE : VS2010(由于使用3ds M ...

  6. HoloLens增强现实: Vuforia + Unity3D + SolidWorks + 3ds Max 的一个例子 (网络摄像头也可以)

    增强现实: Vuforia + Unity3D + SolidWorks + 3ds Max 的一个例子 (网络摄像头也可以)## 标题 一.Vuforia 参见: ①Unity Vuforia AR ...

  7. 3ds Max 2017

    Autodesk公司新推出的3ds Max 2017版对之前存在的一些瑕疵进行了增强和改进,提供了迄今为止最强大的多样化工具集,内置高效的新工具.加速性能和简化的工作流程,可帮助我们大大的提高处理复杂 ...

  8. Autodesk 3ds Max 2011中文版下载

    Autodesk 3ds Max 2011中文版下载 2011年02月16日 3ds Max 2011功能与特性[b]高效建模,轻松制作动画,在更短的时间内呈现令人赞叹的作品[/b] 人生如此,知识在 ...

  9. 房子场景模型如何建造?看3D建模教程:3ds max、zbrush制作房子

    使用工具:Photoshop,3ds max ,zbrush 开始 我想创造一个完整的场景,包括背面,然后我有可能做一个转盘,并在以后加以利用. 步骤一:创建基础网格 我在3ds Max中用标准基本体 ...

  10. 3ds Max人物女性角色模型建模教程

    3ds Max人物女性角色模型建模教程 软件使用:3ds Max, Photoshop, V-Ray 对于本系列我将使用3ds Max, V-Ray 和 Photoshop ,你也可以使用其他的方式以 ...

最新文章

  1. Freemarker详细解释
  2. 知乎联合清华:开放国内最大个性化推荐实际交互数据集
  3. Nature综述:进化病毒毒力的系统发育基因组学
  4. 是第一个成功设计微型计算机的人,()是第一个成功设计微型计算机的人。
  5. iOS 版 Skype支持群组语音聊天
  6. 【跃迁之路】【428天】程序员高效学习方法论探索系列(实验阶段185-2018.04.09)...
  7. mysql 远程load data,PyMySQL将(文件)数据加载到远程MySQL实例时发生错误/异常
  8. 如何解决Office 2010安装报错1907,没有足够权限注册字体?
  9. android 清除activity栈
  10. 百度文库的内容怎么复制粘贴下来呢,look
  11. echarts:中国地图-省市区二级联动
  12. 全国计算机四级数据库工程师考试真题及答案(Word版)
  13. 关闭Win10自动更新
  14. GEE:批量下载数据,按月合成,不同景,全实验区域,一键执行
  15. abort()has been called问题
  16. linux 重启nginx命令
  17. Linux平台C++ 实现毫秒/微妙级时间获取或者延时
  18. 顶级的程序员是怎么样的?
  19. 尤雨溪回应:为什么 Vue 在国际上越来越没影响力?
  20. 达内python培训6,达内北京IT培训班:Python就业6道面试题分享!

热门文章

  1. 慕课网_《一起来做价值百万的Apple Watch App:分歧终端机》学习总结
  2. Spark RDD案例(四)IP和地理位置映射统计
  3. pytorch模型可复现设置(cudnn.benchmark 加速卷积运算 cudnn.deterministic)(随机种子seed)(torch.backends)
  4. AssertionError:` base_name` argument not specified...... a not have a` .queryset` attribute.
  5. 「瘦身潮人」产后也想做辣妈?学会这几招帮你重塑好身材!
  6. 右手和左手坐标系的区别
  7. ubuntu出现“xxx is not in the sudoers file. This incident will be reported“解决方法
  8. nlp--使用NLTK进行简单文本分析
  9. oracle 数据装载方式汇总
  10. 绪言(写在前面的话)