【3DMAX脚本】用MAXscript防止在3ds Max中阻塞UI

28 八月, 2014
231
0

3DMAXjiaoben

在3dsMAX中执行复杂的命令或者脚本的时候UI是卡住的,或者会出现假死的状态。

比如打开MAXscript执行 下面代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
(    
    clearlistener()
    delete geometry
    
    assembly=dotnet.loadAssembly“Autodesk.Max”
    g=(dotnetClass“Autodesk.Max.GlobalInterface”).Instance
    MaxSDK=g.MaxSDK
    messageFilter=maxsdk.WindowsMessageFilter.Create()
    
    fn checkMessages=
    (        
        messageFilter.RunNonBlockingMessageLoop()
        notmessageFilter.Aborted
    )
    
    hwnd=windows.getMAXHWND()
    messageFilter.AddUnfilteredWindow(dotnetObject“System.IntPtr”hwnd)
    
    radius=10
    forx=1to50do
    (
        fory=1to10do
        (
            checkMessages()
            obj=Sphere radius:radius pos:[x*radius*2,y*radius*2,0]wirecolor:gray
        )
    )
    
    arrObj=geometry asarray
    
    forobj inarrObj do
    (
        checkMessages()
        obj.material  =StandardMaterial diffuse:(color(random0255)(random0255)(random0255))
        obj.pos.z+=random0100
        redrawViews()
    )
    
    messageFilter.ClearUnfilteredWindowList()
)

你能看到的效果是,MAX在执行的时候UI界面是不可以操作的

而加上windows.processPostedMessages()后就变得不一样了。

在学习MAXscript的时候我喜欢打开官方的脚本帮助文档去查我不知道的代码,里面有详细的注释帮助理解

现在执行下面的代码 你会发现MAX在执行下面代码的时候你是可以对MAX执行别的操作的。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
(    
    clearlistener()
    delete geometry
    
    radius=10
    forx=1to50do
    (
        fory=1to10do
        (
            windows.processPostedMessages()
            obj=Sphere radius:radius pos:[x*radius*2,y*radius*2,0]wirecolor:gray
        )
    )
    
    arrObj=geometry asarray
    
    forobj inarrObj do
    (
        windows.processPostedMessages()
        obj.material  =StandardMaterial diffuse:(color(random0255)(random0255)(random0255))
        obj.pos.z+=random0100
        redrawViews()
    )
)

所以以后我们在编写脚本的时候 可以加入windows.processPostedMessages() 防止我们的UI阻塞

 

 

学习MAXscript 三个多月了,对自己工作方面还是有了不少的帮助,有时间我会分享更多的MAXscript小知识的,希望与喜欢MAXscript的朋友一起学习交流