miauu's Mini Transform Type-In

4 votes
Version: 
1.2
Date Updated: 
07/30/2019

 

 

Script for 3dsMax 2009+ that changes the default Transform Type-In dialog to mini TTI. The miniTTI is placed over the title bar of the default TTI. The script file can be placed in maxroot/scripts/startup folder so when you run 3dsMax the default TTI will be automatically transformed to mini TTI and will be placed at the last used position of the TTI(default and mini).

In the video you can see how to use the script.

Special thanks to Denis Trofimov for his help.

Version Requirement: 
3dsMax 2009+
Video URL: 
AttachmentSize
miauuminitti_startup_10.ms6.44 KB
macro_miauuminitti_secondruncloseui.mcr6.71 KB
macro_miauuminitti_secondruncloseui_chinise.ms6.68 KB
miauuminitti_startup_chinise_10.ms6.42 KB
miauuminitti_12.mcr6.63 KB

Comments

Comment viewing options

Select your preferred way to display the comments and click "Save settings" to activate your changes.
myfrankie's picture

Error after use

Hello
Error after use

miauu's picture

.

The scripts are updated and uploaded. Please, test them. If there are any problems just open the scripts in MaxScriptEditor and replace the "Move Transform Type-In" with "变换输入", save and reinstall the scripts.

myfrankie's picture

The language of the need to support

Chinese simplified
变换输入

miauu's picture

.

This is the regular Transform Type In dialog in 3ds Max. Only the spinners are rearanged and the size of the rollout is smaller. How it works is not affected by my script.
Which langauge do you want to be supported?

myfrankie's picture

Consult

Hello, thank you. But there are two small questions to ask:
After selecting the object and executing the command, it will automatically jump to the mobile transformation mode.
Can you keep the current mode, whether it's a command execution or a post execution command?
In addition, can it only be used in the English version? If it is other language version, it will be wrong.

miauu's picture

.

Tested on 3ds Max 2014 and there are no errors at all.

myfrankie's picture

error

hwnd = dotnetobject "IntPtr" hwndMove[1]

max2014 error!!

vikirecon's picture

thanks

hi Miauu,

thank you so so so much.

you are my superstar

thanks

miauu's picture

.

(
	--FUNCTIONS
	fn createAssembly =
	(
		str="using System;\n"
		str+="using System.Runtime.InteropServices;\n"
		str+="namespace Win32Helper\n"
		str+="{\n"
		str+=" class Win32HelperClass\n"
		str+=" {\n"
		str+=" [DllImport(\"user32.dll\")]\n"
		str+=" [return: MarshalAs(UnmanagedType.Bool)]\n"
		str+=" public static extern bool SetWindowPos(IntPtr hWnd, int hWndInsertAfter, int X, int Y, int cx, int cy, uint uFlags);\n"
		str+=" [DllImport(\"user32.dll\")]\n"
		str+=" public static extern IntPtr SetFocus(IntPtr hWnd);\n"
		str+=" }\n"
		str+="}\n"
 
		local csharpProvider = dotnetobject "Microsoft.CSharp.CSharpCodeProvider"
		local compilerParams = dotnetobject "System.CodeDom.Compiler.CompilerParameters"
		compilerParams.ReferencedAssemblies.addRange #("System.dll")
		compilerParams.GenerateInMemory = on
		local compilerResults = csharpProvider.CompileAssemblyFromSource compilerParams #(str)
 
		for er = 0 to compilerResults.errors.count-1 do print (compilerResults.errors.item[er].tostring())
		return compilerResults.CompiledAssembly.createInstance "Win32Helper.Win32HelperClass"
	)
 
	local win32Helper = createAssembly()
 
	fn verifyTransformCommandMode =
	(
		local validCommandModes = #(#move, #Rotate, #scale, #nuscale, #uscale, #squash)
		if findItem validCommandModes toolmode.commandMode == 0 do
		(
			toolMode.commandMode = #move
		)
	)
 
	fn getInputString =
	(
 
		/*case toolMode.commandMode of
		(
		#Rotate: (str += "{TAB}{TAB}{TAB}{TAB}{TAB}{TAB}")
		default: (str += "{TAB}{TAB}{TAB}{TAB}")
		)*/
		local tabs = case toolMode.axisConstraints of
		(
		#x:4
		#y:5
		#z:6
		#xy:4
		#yz:5
		#zx:4
		)
		local str = ""
		for i = 1 to tabs do str += "{TAB}"
		str
	)
 
	fn showTTI =
	(
		max tti
		local hWnd = (for w in windows.GetChildrenHwnd 0 parent:#max where w[4] == "#32770" and \
		matchPattern w[5] pattern:"*ransform Type-In" collect w[1])[1]
		local hWndIntPtr = dotNetObject "System.IntPtr" hWnd
		local pos = mouse.screenPos
		win32Helper.setWindowPos hWndIntPtr 0 pos[1] pos[2] 0 0 1
		win32Helper.SetFocus hWndIntPtr
		(dotnetClass "SendKeys").sendWait (getInputString())
	)
 
	on execute do
	(
		verifyTransformCommandMode()
		hwndMove = (for w in windows.GetChildrenHwnd 0 parent:#max where w[4] == "#32770" and matchPattern w[5] pattern:"*ransform Type-In" collect w[1])
		if hwndMove[1] == undefined then
			showTTI()
		else
			windows.sendMessage hwndMove[1] 0x0010 0 0
	)
)
vikirecon's picture

close the dialogue box with the same shortcut key

hi miauu

thanks for the newer version

Could you Please do this for this script

thanks for your time again

this is the script

(
--FUNCTIONS
fn createAssembly =
(
str="using System;\n"
str+="using System.Runtime.InteropServices;\n"
str+="namespace Win32Helper\n"
str+="{\n"
str+=" class Win32HelperClass\n"
str+=" {\n"
str+=" [DllImport(\"user32.dll\")]\n"
str+=" [return: MarshalAs(UnmanagedType.Bool)]\n"
str+=" public static extern bool SetWindowPos(IntPtr hWnd, int hWndInsertAfter, int X, int Y, int cx, int cy, uint uFlags);\n"
str+=" [DllImport(\"user32.dll\")]\n"
str+=" public static extern IntPtr SetFocus(IntPtr hWnd);\n"
str+=" }\n"
str+="}\n"

local csharpProvider = dotnetobject "Microsoft.CSharp.CSharpCodeProvider"
local compilerParams = dotnetobject "System.CodeDom.Compiler.CompilerParameters"
compilerParams.ReferencedAssemblies.addRange #("System.dll")
compilerParams.GenerateInMemory = on
local compilerResults = csharpProvider.CompileAssemblyFromSource compilerParams #(str)

for er = 0 to compilerResults.errors.count-1 do print (compilerResults.errors.item[er].tostring())
return compilerResults.CompiledAssembly.createInstance "Win32Helper.Win32HelperClass"
)

local win32Helper = createAssembly()

fn verifyTransformCommandMode =
(
local validCommandModes = #(#move, #Rotate, #scale, #nuscale, #uscale, #squash)
if findItem validCommandModes toolmode.commandMode == 0 do
(
toolMode.commandMode = #move
)
)

fn getInputString =
(

/*case toolMode.commandMode of
(
#Rotate: (str += "{TAB}{TAB}{TAB}{TAB}{TAB}{TAB}")
default: (str += "{TAB}{TAB}{TAB}{TAB}")
)*/
local tabs = case toolMode.axisConstraints of
(
#x:4
#y:5
#z:6
#xy:4
#yz:5
#zx:4
)
local str = ""
for i = 1 to tabs do str += "{TAB}"
str
)

fn showTTI =
(
max tti
local hWnd = (for w in windows.GetChildrenHwnd 0 parent:#max where w[4] == "#32770" and \
matchPattern w[5] pattern:"*ransform Type-In" collect w[1])[1]
local hWndIntPtr = dotNetObject "System.IntPtr" hWnd
local pos = mouse.screenPos
win32Helper.setWindowPos hWndIntPtr 0 pos[1] pos[2] 0 0 1
win32Helper.SetFocus hWndIntPtr
(dotnetClass "SendKeys").sendWait (getInputString())
)

on execute do
(
verifyTransformCommandMode()
showTTI()
)
)

Comment viewing options

Select your preferred way to display the comments and click "Save settings" to activate your changes.