Sorry it took so long. The .NET based control library for 3dsmax has now been recompiled to work with 3dsmax 2017.
Download mmMaxControls v1.10 (13k)
Fashionably late (well, at least according to my initial plans :)), I’m proud to present an all new release of VFB+. A lot of effort has gone into this release, both in terms of new features added, and the number of bugs fixes.
The image processing engine has been completely rewritten to better leverage SIMD optimizations.
New features like image filters, composition guides, view-dependent CC settings and overall stability improvements make sure that you get the most out of the tool, and the greatest improvement to your workflow.
Needless to say, the upgrade is free for existing users!
Be sure to check out the full change log for a comprehensive list.
Thanks to everyone for the continuous feedback and the overall support!
An update has been released fixing the following bugs:
A big thanks to Shawn Olson for letting me know about all of these bugs, and my sincere apology to those who have already taken the time to download v2.4.
Towards this end, I’ve written a collection of some commonly used controls that imitate the 3dsmax look and feel to the pixel, thus maintaining uniformity in your scripted or compiled interface, but giving you the high level of control that DotNet offers.
The package is called mmMaxControls, and is freely available for personal or commercial use. It targets version 2.0 of the DotNet framework, which should make is backwards compatible many versions (the earliest I’ve tested is 3dsmax 2009, theoretically it may work on as far back as 3dsmax 9).
Download mmMaxControls v1.02 (12k)
Below is the code used for creating the MAXScript rollout at the top of this post.
dotnet.loadAssembly @"C:\mmMaxControls.dll" try(destroyDialog mmMaxControls)catch() rollout mmMaxControls "mmMaxControls" width:235 ( groupBox grpBtn "Button" width:225 height:55 pos:[5,5] dotNetControl mmBtn1 "mmMaxControls.Button" width:62 height:25 pos:[15,25] dotNetControl mmBtn2 "mmMaxControls.Button" width:60 height:25 pos:[80,25] dotNetControl mmBtn3 "mmMaxControls.Button" width:25 height:25 pos:[143,25] dotNetControl mmBtn4 "mmMaxControls.Button" width:50 height:25 pos:[171,25] groupBox grpChk "CheckButton" width:225 height:55 pos:[5,65] dotNetControl mmChk1 "mmMaxControls.CheckButton" width:25 height:25 pos:[15,85] dotNetControl mmChk2 "mmMaxControls.CheckButton" width:70 height:25 pos:[45,85] dotNetControl mmChk3 "mmMaxControls.CheckButton" width:72 height:25 pos:[120,85] dotNetControl mmChk4 "mmMaxControls.CheckButton" width:25 height:25 pos:[195,85] groupBox grpFlyBtn "FlyoutButton" width:110 height:60 pos:[5,125] dotNetControl mmFlyBtn "mmMaxControls.FlyoutButton" width:32 height:32 pos:[43,145] groupBox grpFlyChk "FlyoutCheckButton" width:110 height:60 pos:[120,125] dotNetControl mmFlyChk "mmMaxControls.FlyoutCheckButton" width:32 height:32 pos:[157,145] groupBox grpDrop "DropDownList" width:225 height:50 pos:[5,190] dotNetControl mmDrop "mmMaxControls.DropDownList" width:200 height:21 pos:[15,210] groupBox grpTxt "TextBox" width:225 height:120 pos:[5,245] dotNetControl mmText1 "mmMaxControls.TextBox" width:200 height:21 pos:[15,265] dotNetControl mmText2 "mmMaxControls.TextBox" width:200 height:63 pos:[15,290] groupBox grpSpn "Spinner" width:225 height:65 pos:[5,370] label mmSpn1Lab "That's draggable" pos:[15,390] dotNetControl mmSpn1 "mmMaxControls.Spinner" width:80 height:16 pos:[140,390] label mmSpn2Lab "And screen-wrapping" pos:[15,412] dotNetControl mmSpn2 "mmMaxControls.Spinner" width:80 height:16 pos:[140,412] on mmMaxControls open do ( local logoImg = dotnetObject "System.Drawing.Bitmap" @"C:\logo.png" local blueImg = dotnetObject "System.Drawing.Bitmap" @"C:\logoBlue.png" local flyoutStrip = dotnetObject "System.Drawing.Bitmap" @"C:\imageStrip.png" mmBtn1.text = "DotNet" mmBtn1.image = logoImg mmBtn1.imageAlign = mmBtn1.imageAlign.MiddleLeft mmBtn1.TextAlign = mmBtn1.textAlign.MiddleRight mmBtn2.text = "Controls" mmBtn3.image = logoImg mmBtn3.ShowFocusFrame = off mmBtn4.text = "With" mmBtn4.FrameOnMouseOverOnly = on mmChk1.text = "A" mmChk2.text = "3dsmax" mmChk2.image = blueImg mmChk2.imageAlign = mmChk1.imageAlign.MiddleLeft mmChk2.TextAlign = mmChk1.textAlign.MiddleRight mmChk2.ShowFocusFrame = off mmChk3.text = "Look" mmChk3.ShowFocusFrame = off mmChk3.FrameOnMouseOverOnly = on mmChk4.image = blueImg mmChk4.ShowFocusFrame = off mmChk4.FrameOnMouseOverOnly = on mmText2.multiLine = on mmSpn1.minimum = 0.1 mmSpn1.maximum = 1 mmSpn1.increment = .001 mmspn1.value = mmspn1.defaultValue = 0.5 mmSpn1.decimalPlaces = 3 mmSpn2.increment = 1 mmSpn2.maximum = 10000 mmSpn2.value = mmSpn2.defaultValue = 100 mmSpn2.decimalPlaces = 0 mmDrop.items.addRange #("A", "DropDownList", "control", "that", "inherits", "from", "Combobox") mmDrop.selectedIndex = 0 mmFlyBtn.setImageStrip flyoutStrip 4 mmFlyBtn.toolTips = #("Easily", "Set", "Button", "Tooltips") mmFlyChk.setImageStrip flyoutStrip 4 mmFlyChk.toolTips = #("Same", "Thing", "But", "Checkable") mmFlyChk.flyoutTime = 100 ) ) createDialog mmMaxControls
These are the bitmaps used in the example code:
I’ve updated the library to v1.01, fixing a few bugs and adding a few small methods.
Thanks to DenisT from CGTalk for catching most of these bugs.
I’ve fixed some more bugs and inaccuracies:
VFB+ user and architect Maxim Borisov has recently suggested a script to help make his transform-intensive work easier:
This tiny MacroScript does exactly this. When executed, it opens the 3dsmax Transform Type-In dialog exactly where the mouse cursor is and sets keyboard focus to spinners. This allows rapid manipulation of scene objects for those users who rely on a fast-paced scene workflow.
edit (01/19/15) – the tool now takes the current axis constraints into consideration and focuses the relevant text field in the dialog.
Lately I’ve been seeing several requests on forums for a way to easily ‘save’ coordinates of regions in a 3dsmax scene. mmRegions is a small free script which does just that. It can store the current render region, restore previously saved regions, and even batch render several regions with one button.
All coordinates are saved as percentages, so they scale linearly with the image size. The regions can also be given a descriptive name are are visualized inside the tool. They are saved automatically inside the scene.
To use it:
UPDATE: Fixed a bug which would cause the Mental Ray VFB controls window to go blank after batch-rendering multiple regions. Thanks to Spacefrog for the report!
UPDATE #2: Updated to v1.1! New features: