今天教大家如何将max插件开发与C#结合起来,以弹出框为例。
这种开发方式的三大优点
1.开发过程中不需要关闭MAX
2.可以引用三方组件
3.开发过程可以调试
1.新建类库,命名:TestPlugin
2.右键属性,修改项目输出路径
我的路径为:E:\Program Files\Autodesk\3ds Max Design 2015\plugins\TestPlugin
3.新建MAX脚本
4.编写一些基础代码
global m_hand = undefined
rollout form "演示插件"
(
button btnTest "测试按钮" pos:[60,60] width:180 height:25
/*窗体打开事件*/
on form open do
(
local assembly = dotNetClass "System.Reflection.Assembly"
local rootpath = getdir #maxroot
local maxcorepath = rootpath + "\\plugins\\TestPlugin\\TestPlugin.dll"
local ass = assembly.Load ((dotnetClass "System.IO.File").ReadAllBytes maxcorepath)
local types = ass.ExportedTypes
for type in types do
(
if type.name == "Hand" do
(
m_hand = (dotNetClass "System.Activator").CreateInstance type
break
)
)
if m_hand == undefined do messagebox "核心组件初始化失败! "
)
on btnTest pressed do
(
m_hand.ShowMSG 0
)
)
createdialog form 300 300
5.运行(Ctrl+E),点击测试按钮
6.添加Hand类,代码实现如下
public class Hand
{
public static string Startup { get; private set; }
#region 加载依赖
static Hand()
{
AppDomain domain = AppDomain.CurrentDomain;
Hand.Startup = Path.Combine(domain.BaseDirectory, "plugins", "TestPlugin");
domain.AssemblyResolve += CurrentDomain_AssemblyResolve;
}
static Assembly CurrentDomain_AssemblyResolve(object sender, ResolveEventArgs args)
{
string strName = args.Name.Substring(0, args.Name.IndexOf(",")) + ".dll";
if (!File.Exists(Path.Combine(Hand.Startup, strName))) return null;
return Assembly.LoadFrom(Path.Combine(Hand.Startup, strName));
}
#endregion
public void ShowMSG(int val)
{
MessageBox.Show("C# ShowMSG");
}
}
7.运行(Ctrl+E),点击测试按钮
8.可以在类库设计UI,添加Form
修改ShowMSG的实现
public void ShowMSG(int val)
{
TestForm tf = new TestForm();
tf.ShowDialog();
}
8.运行(Ctrl+E),点击测试按钮
引用其他三方类库,当然也是没有问题的,这里就不做演示了,有兴趣的可以自己引用,然后在ShowMSG中调用试试。
10.调试
在vs的调试菜单下,找到“附加到进程”,搜索MAX引用程序,点击附加即可。
11.附加完毕之后,在需要调试的地方加断点,然后在MAX中运行插件,点击相应功能,vs就会进入调试,停在断点处。
12.至于如何直接使用MAXScript开发脚本,不做详细解释(因为我也是野路子)。
不知到以上方法是否对大家有所帮助,这是我之前研究的时候走的另外一条路,虽然遇到了诸多坎坷,最终还是搞定了。早期发过另外一篇文章,当时写的也比较加单,但也是MAX二开的另外一条路径。
https://blog.csdn.net/yang_sen_/article/details/56279936
这篇文章的思路源于欧特克的所有产品的框架,做过Revit二次开发的同仁或许理解的更深一点,这里就不做详细说明了。
喜欢我博客的朋友可以关注一下,有问题需要帮忙解决的也可以整理好发我邮箱,有时间就会去解答(前提是会的情况下^.^)。
邮箱:ys0309@126.com
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/34930.html