引用静态类,使用: dotnetClass “命名空间.类”
dnPath = dotnetClass "System.IO.Path" show dnPath -- 显示属性 showmethods dnPath -- 显示方法 showevents dnPath -- 显示事件
myFileInfo = dotnetObject "System.IO.FileInfo" (@"c:\aaa\aaa\myFile.ms") show myFileInfo -- 显示属性 showmethods myFileInfo -- 显示方法 showevents myFileInfo -- 显示事件
不同的3dsMax版本对DotNet版本的支持,
Max20 (2018)Max19 (2017)Max18 (2016)Max17 (2015) -> dotnet: 4.5 +Max16 (2014)Max15 (2013)Max14 (2012)Max13 (2011) -> dotnet: 3.5 +Max12 (2010)Max11 (2009)Max10 (2008)Max9 -> dotnet: 2.0 +
根据3dsMax版本对应能支持的DotNet版本,调整DotNet版本
C#例子
using System;namespace TestLibraryX { public class TestObject { private string Name; public TestObject(string thisName) { Name = thisName; } public string GetLongName() { return( "You can call me " + Name + "!" ); } } }
在Maxscript 中调用
--读取Dll dotnet.loadAssembly ("C:\TestLibraryX.dll") -- 引用类 ThisTestObject = dotNetObject "TestLibraryX.TestObject" "Hello" -- 调用类中函数 print (ThisTestObject.GetLongName())
一般在Rollout中,可以使用一些简单的winform控件,例如 button,listView, treeView, 等等, 网上很多例子
但是对于一些第3方的控件,Maxscript不一定支持,可以尝试使用System.Windows.Forms.ContainerControl
来解决这个问题
-- 先加载第3方窗口控件的Dll,加载成功之后才能下一步 -- 例如我这里使用了 ImageListView.dlldll_ImageListView = myDllPath + (@"\ImageListView.dll") dotnet.loadAssembly dll_ImageListView rollout rltMaxLibrary "TMaxLibrary" ( -- 声明一个DotnetContainer dotnetControl dnUIContainer "System.Windows.Forms.ContainerControl" -- 在Open事件中 on rltMaxLibrary open do ( -- 把外部的DotNet控件,添加进来 dnUIContainer.controls.add dnMaxLibraryImageListView ) )
使用C#编写DotNet的类库
通过Maxscript加载,并且构建一个引用,直接使用Maxscript来创建C#写的类
-- 示例类struct MaxKit ( -- 声明一个成员,做构造函数的引用 File , on Create do( )) -- 加载DotnetDll库 dotnet.loadAssembly @"c:\MyKit\GenericLibrary.dll" -- 将此成员声明成一个函数,其中返回DotNet的类,这里即指定了函数又声明了函数 MaxKit.File = fn AssetFile file = ( return dotnetObject "GenericLibrary.AssetManagement.AssetFile" file )
使用Maxscript来构造一个DotNet的类
myFile = MaxKit.File @"c:\aaa\asasas"showmethods myFile
DotNet的Event事件与 Maxscript配合是个特别麻烦的事情,这里给出一个例子
主要是Maxscript没有自身的类定义,使用Struct来模拟类的写法,难以获得自身的实例引用
struct formHolder ( form, size = [200,270], pos = [900,150], title = "The Form", fn open = (if iskindof form dotnetobject do form.Showmodeless()), fn close = (if iskindof form dotnetobject do form.Close()), -- dotnet的事件 fn onShown sender arg = ( format "%\n" (sender.WindowState.toString()) ), -- dotnet的事件 fn onMove sender arg = ( -- 这里访问了存储在tag中的引用 format "default:% %\n" sender.tag.value.pos (sender.Location.toString()) ), on create do ( form = dotNetObject "MaxCustomControls.MaxForm" -- 将当前类的实例引用存储 在Dotnet-Form中的Tag 上 form.tag = dotnetmxsvalue this form.size = dotNetObject "System.Drawing.Size" size.x size.y form.Location = dotNetObject "System.Drawing.Point" pos.x pos.y form.StartPosition = form.StartPosition.Manual form.text = title dotnet.addEventHandler form "Shown" onShown dotnet.addEventHandler form "Move" onMove ) ) -- 创建实例 w = formHolder() w.open()
作者:TAZORN
著作权归作者所有
【相关阅读】:
Maxscript_基础_回调函数:http://tk.v5cg.com/help/246.html
Maxscript_基础_材质处理:http://tk.v5cg.com/help/247.html
Maxscript_基础_修改器操作:http://tk.v5cg.com/help/248.html
Maxscript_基础_创建窗口:http://tk.v5cg.com/help/249.html
Maxscript_基础_遍历与递归:http://tk.v5cg.com/help/250.html
Maxscript_与DotNet交互:http://tk.v5cg.com/help/251.html
【上传发布插件】:
编写3DMAX插件到发布上线全流程:http://tk.v5cg.com/help/147.html
代码上传与工具发布:http://tk.v5cg.com/help/99.html
代码发布,部署实例参考:http://tk.v5cg.com/help/140.html
PS【动作库】代码部署指南:http://tk.v5cg.com/help/141.html
CG云盘 - 开发者使用说明:http://tk.v5cg.com/help/34.html