3ds Max 2014的Maxscript中使用正则表达式


Maxscript里创建一个函数


--Function:Regex

--@param expression - 正则表达式字符串
--@return 返回.NET下的正则表达式对象

fn Regex expression=(rgx = dotNetObject "System.Text.RegularExpressions.Regex" expression;return rgx)


--使用方法举例

R1 = Regex "^(LG){0,1}([YnNnTtLl]||YP)(\d{1,})\S{0,}_(\d{1,})$" 
bResult = R1.isMatch("LGY01_001")


返回的结果是bResult=true


实现非常简单,就是借用.NET里的Regex类对象,利用Maxscript对于.NET命名空间的映射Reflection,创建一个.NET下的正则表达式对象。返回的正则表达式对象的方法和属性访问和.NET下的用法相同。


心路历程:

手头项目中需要编写3ds Max的脚本插件检查Max建模场景中的某些类型的物体名称是否符合某一种命名规则,并且需要标记出不符合命名规则的物体。

虽然之前曾经使用过Python中的Re模块来做命名检查这件事,但是由于插件还需要对VRay插件的参数做访问和设定,Chaos Group的官方目前没有给VRay编写Python的sdk,因此如果需要完整的用Python写完这个插件,必须要给Maxscript里对于Vray的访问语句做很多Eval的包装,并且插件的UI需要使用PySide来创建,并没有Visual Maxscript的界面设计的功能,所以最后决定还是直接使用maxscript来创建界面并且完成整个插件。

但是Maxscript归根结底不支持正则表达式的,如果使用C++的SDK可以通过引入外部的正则表达式模块,但是这一过程对于很多对于我这类C++编程不熟悉的童鞋来说太过于麻烦,所以我继续翻阅Maxscript的文档,发觉了它有对于.NET的Reflection,即.NET框架下能够使用的命名空间,能够访问到了类,能够创建的类对象,在Maxscript里也能够做到,因此我又查找了.NET(4.0)下是否有正则表达式相关的类和函数,一查果然有!

Autodesk 3Ds Max的插件系统还是比较强大的,C++, .NET 还有Python 这三种编程方式与 Maxscript 都可以互相访问,甚至可以达到三种语言混编的可能,对于功能的扩展无疑增加的更多的可能。



  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值