Criar Campo de Texto com MAXScript

Por: Alvaro  

Em: 20/06/2014 02:03

hehehehe
que vontade de assistir tin tin cara!

eim, voltando ao assunto. Seria legal se o rollout fechasse assim que eu clicasse em salvar.

encontrei a expressão CloseRolloutFloater mas não consigo utilizá-la.

Fiz um testezinho aqui onde ao clicar no botão ele não salva nada, só fecha a janela.
pensei em algo tipo

on saveP pressed do
(
closeRolloutFloater RnDSaver
)

mas não rolou.

tem alguma ideia?
Alvaro Moreira Particle Skull PSkull.com
Consegui com a expressão DestroyDialog :) (a proposito, o nome disso é expressão?)

Adicionei simplesmente ao final da área do On Stuff Pressed Do...
Alvaro Moreira Particle Skull PSkull.com
Só pra deixar o script ainda melhor... p:
Sabe como adicionar uma função do teclado nele? tipo, se apertar Enter o botão salvar é pressionado?
Alvaro Moreira Particle Skull PSkull.com
Então, acho q com aquele seu esquema lá de salvar o proximo, daria pra vc deixar o script sem janelinha nenhuma, aí vc configuraria o script só pra um botão (naquele esquema de arrastar ele) aí dá pra vc por uma tecla de atalho pra ele, acho q isso é naquele \'customize user interface\' do max e tal..



Sobre qual seria o melhor termo pra chamar as coisas talvez eu não seja uma referencia muito boa.. Mas por exemplo, quando é uma \'frase\' ou \'calculo matemático\' ou uma sequencia muito grande eu chamo de \"expressão\" (por exemplo (MyProject+(VerNum as string) eu chamaria de expressão, etc..), e quando é um \'comando\' eu chamo de \'função\'..

De maneira similar, um \'array\' é um conjunto de coisas (pode ser um conjunto de numeros, um conjunto de palavras, de arquivos, de qualquer coisa..) e \'booleana\' é uma situação onde tem apenas duas alternativas (geralmente verdadeiro ou falso).. tem uns outros nomezinhos desses aí mas não lembro agora e tal..

Por exemplo vc recortaria todo o parêntese do \'Do\' no \"On button pressed...do (...)\" e poderia por uma função sua no lugar..

Por exemplo:

fn SaveMyProject = (saveMaxFile (MyProject+(VerNum as string)))

Aí então, tanto pro apertar do botão, quanto em se pressionando a tecla enter, seria chamada essa função (fn é pra vc criar uma \'função\' sua.. um comando seu digamos assim, que é uma sequencia de comandos proprios do MAXScript.. vc pode fazer isso pra tornar o codigo menos longo, de maneira a q vc pode declarar a sua função e depois chamar ela varias vezes.. Essa função de exemplo é bem curtinha mas podem ter funções muito grandes e tal.. aí nessas seria mais evidente essa questão de resumir o código.. usar esse tipo de recurso torna o codigo mais leve e também mais facil de entender e corrigir (se precisar, vc vai corrigir a função declarada, aí vai corrigir todas onde ela foi referenciada posteriormente no código, etc..)

Tendo declarado essa função sua \'SaveMyProject\', ela seria chamada tanto em se apertando o botão enter, quanto no caso de se apertar o botão:


fn SaveMyProject =
(
MakeDir (DirCol[DirSel.selection] as string+edt1.text)
MyProject = (DirCol[DirSel.selection] as string+edt1.text+\"\\\"+edt1.text)
If (doesfileexist (Myproject+\".max\") == true) then (messagebox \"Version Already Exists\")
else
(
SaveMaxFile MyProject
DestroyDialog sfsaver
)
)

on botão pressed do SaveMyProject
if (getKBValue (ENTER)) == true do SaveMyProject


Aí por exemplo, dando pra chamar mais facilmente essa função mais elaborada, fica mais facil vc usar ela em varias ocasiões diferentes.. Esse getKBValue eu nunca usei, aí dá umas testadinhas nele.. Faz um script pelado pra testar ele pra entender direito q esses comandos (\'essas funções\' xd) sempre são meio esquisitos de entender na primeira vez xd..

Vê essa pagina aqui do help do maxscript q fala sobre essa questão.. talvez seja isso, mas né, esse help é extremamente ruim mesmo e tal.. C vai ver q quase todo mundo diz isso sobre esse help hehehe..

http://docs.autodesk.com/3DSMAX/15/ENU/MAXScript-Help/index.html?url=files/GUID-423269A5-B395-4A90-8058-F96C0A24115F.htm,topicNumber=d30e169175







@edit: Orra véio esse floater aí eu tinha procurado bastante e nunca achava.. Bem legal essa função aí véio vish.. Essa função aí é bem pra se fazer com os \'plugins\' (quando vc põe o script como \'nativo\' do max (ele fica como um criador, como um modifier ou outras coisas, etc.. vc chama de \'plugin\' parece.. parece q se usa essa terminologia ou algo bem parecido xd..) é bem diferente e chato a questão dos rollouts, então é esse \'Rollout Floater\' q tem q usar =D.. Pra ficar com as abinhas expansíveis q nem nos menus do 3ds mesmo =D..

Olha q legal a User Interface q o \'Rollout Floater\' produz:

--------------------------------


rollout grin \"Grin Control\"
(
slider happy \"Happy\" orient:#vertical across:5
slider sad \"Sad\" orient:#vertical
slider oo \"OO\" orient:#vertical
slider ee \"EE\" orient:#vertical
slider oh \"OH\" orient:#vertical
/*
Peguei do help do maxscript na pagina de Rollout Floater =D
*/
)
theNewFloater = newRolloutFloater \"Grinning\" 300 220
addRollout grin theNewFloater


---------------------------------

(aí dá pra controlar um rig =D (teria uma abinha pra cada conjunto de qualidades dos movimentos e tal))


(to falando da abinha expansível... pcê ver.. procurei isso uma vez e não achei nem a pau aí vc procurando outra coisa acha essa função heuheuhueuhe =D)


A Beleza está entre a Ética e a Razão!..
Cara, acho que não consigo ver isso até o final de semana.
Vou deixar em stand by e assim que possível volto :) valeu

Ah, eu criei um botão diferente pra salvar a cópia. Com ctz muito mais interessante (e ridiculamente facil hehe)

Abraço
Alvaro Moreira Particle Skull PSkull.com
É então, sempre tem um geito mais simples né XD..


Antes de eu saber essa paradas de \'array\', eu tava criando um \'fazedor de armas\' (armas brancas, era de uma coleção de peças de armas japonesas (espadas, naginatas e lanças), o criador de armas juntava as peças certinho conforme o usuario escolhia as peças) e nesse já tinha todas as texturas de todas as peças e então tava tendo q criar um material e nesse material tinha q criar um mapa do tipo composite com todas as texturas das laminas num submaterial, todas as texturas dos cabos num outro mapa composite de outro submaterial, etc..).. Aí então eu tava lá digitando q nem um mongol, referenciando um a um todos os arquivos, todas as texturas, pra fazer isso...

Só q, evidentemente, só iria funcionar no meu micro, naqueles diretórios e com aqueles nomes de arquivo..

Aí então passei o nervoso típico de se mexer com script e tal.. E isso com uma certa intensidade, pra eufemizar.. :) .. E eu tava com um camarada, aí ele ficava falando pra eu parar de proceder daquela maneira mas eu meio q recusava uma vez q ele não manja de 3d e tal (mas manja de programação XD), aí eu falei pra ele q se ele era o \'pica-das-galáxia\' mesmo então pra fazer essa parada aí.. Aí então ele foi fazendo com a minha ajuda na questão dos termos do 3ds, e realmente né.. Fica milhares de vezes menor o código, e alem disso, funcionando em qualquer computador e com quaisquer nomes de arquivo e tal, etc.. =D.. Depois criei monstros pra um jogo dele como desculpa por ter falado rudemente e tal..





Acho que articulando uma somatória com uma questão dinâmica, dá pra fazer a questão da acumulação que só tem no Joystick, ou seja, emular a acumulação q só tem no joystick (no padrão do Motion Capture do 3ds), só q usando o teclado ou um controle MIDI (ou até o mouse, apesar de que seria um tanto estranho, pode ser uma coisa interessante até né.. etc..)..


Fiquei brizando numas paradinhas de User Interface.. Q eu queria saber criar um script pra controlar um rig meu e tal.. Aí chegou 3 da manhã XDD..


Olha essa UI aqui q eu fiz praquele rig de estudo lá.. Aí no artiguinho vou explicar o script tbm =D..



(rig user interface.. só a user interface mesmo por enquanto (não tá fazendo nada ainda))




----------------------------------------------

rollout Sobre \"About\" width:330 height:152
(
label lbl2 \" Por umas imagens e texto aqui =D\" pos:[35,17] width:233 height:57
label lbl4 \"By ScreamingFox\" pos:[123,76] width:86 height:17
)
rollout General \"General Controls\" width:330 height:151
(
slider Rhythm \"Maximum Speed Correction\" pos:[1,13] width:190 height:44 orient:#horizontal
slider YposSec \"Y.Position Seconds\" pos:[1,59] width:190 height:44 orient:#horizontal
button RhythmKframe \"Key\" pos:[191,30] width:60 height:20
button RhythmClearKframe \"Clear Keys\" pos:[256,30] width:60 height:20
button YPosSecKframe \"Key\" pos:[191,78] width:60 height:20
button YPosSecClearKframe \"Clear Keys\" pos:[256,78] width:60 height:20
)
rollout Presets \"Presets\" width:330 height:152
(
dropdownList Presetddl \"Presets\" pos:[5,5] width:180 height:40
button Kframe \"Key\" pos:[191,23] width:60 height:20
button ClearKframe \"Clear Keys\" pos:[256,23] width:60 height:20

)
rollout Speeder \"Speed\" width:330 height:134
(
checkbox chk1 \"Wire Step Width to Speed\" pos:[7,4] width:180 height:15
slider Gain \"Speed\" pos:[1,23] width:190 height:44 orient:#horizontal
button GainKframe \"Key\" pos:[191,41] width:60 height:20
button GainClearKframe \"Clear Keys\" pos:[256,41] width:60 height:20
)
rollout Directer \"Direction\" width:330 height:307
(
checkbox chk2 \"Wire Walking Spline Rotation to Direction\" pos:[7,4] width:180 height:15
slider direction \"Direction\" pos:[1,23] width:190 height:44 orient:#horizontal
slider LLegRot \"Left Walking Spline Rotation\" pos:[1,72] width:190 height:44 orient:#horizontal
slider RLegRot \"Right Walking Spline Rotation\" pos:[1,123] width:190 height:44 orient:#horizontal
slider LLegRotRet \"Left Leg Spline Rotation Return Time\" pos:[1,182] width:190 height:44 enabled:false orient:#horizontal
slider RLegRotRet \"Right Leg Spline Rotation Return Time\" pos:[1,242] width:190 height:44 enabled:false orient:#horizontal
button DirectionKframe \"Key\" pos:[191,34] width:60 height:20
button DirectionClearKframe \"Clear Keys\" pos:[256,35] width:60 height:20
button LLegRotKframe \"Key\" pos:[191,83] width:60 height:20
button LLegRotClearKframe \"Clear Keys\" pos:[256,83] width:60 height:20
button RLegRotKframe \"Key\" pos:[191,136] width:60 height:20
button RLegRotClearKframe \"Clear Keys\" pos:[256,253] width:60 height:20
button LLegRotRetKframe \"Key\" pos:[191,191] width:60 height:20
button LLegRotRetClearKframe \"Clear Keys\" pos:[256,136] width:60 height:20
button RLegRotRetKframe \"Key\" pos:[191,253] width:60 height:20
button RLegRotRetClearKframe \"Clear Keys\" pos:[256,191] width:60 height:20

on chk2 changed state do
(
If LLegRotRet.enabled == false then
(
LLegRotRet.enabled = true
RLegRotRet.enabled = true
)
Else
(
LLegRotRet.enabled = false
RLegRotRet.enabled = false
)
If LLegRot.enabled == true then
(
LLegRot.enabled = false
RLegRot.enabled = false
)
Else
(
LLegRot.enabled = true
RLegRot.enabled = true
)
)
)
rollout Legs \"Leg Controls\" width:330 height:392
(
slider LFExpress \"Left Foot Expression\" pos:[1,12] width:190 height:44 orient:#horizontal range:[0,100,0]
button LFExKframe \"Key\" pos:[191,30] width:60 height:20
button LFExClearKframe \"Clear Keys\" pos:[256,30] width:60 height:20
slider RFExpress \"Right Foot Expression\" pos:[1,58] width:190 height:44 orient:#horizontal range:[0,100,0]
button RFExKframe \"Key\" pos:[191,78] width:60 height:20
button RFExClearKframe \"Clear Keys\" pos:[256,78] width:60 height:20
slider StepWid \"Step Width\" pos:[1,151] width:190 height:44 orient:#horizontal range:[0,100,0]
button StepWidKframe \"Key\" pos:[191,167] width:60 height:20
button StepWidClearKframe \"Clear Keys\" pos:[257,167] width:60 height:20
slider StepHi \"Step Height\" pos:[1,102] width:190 height:44 orient:#horizontal range:[0,100,0]
button StepHiKframe \"Key\" pos:[191,120] width:60 height:20
button StepHiClearKframe \"Clear Keys\" pos:[256,120] width:60 height:20
slider Dolly \"Dolly\" pos:[1,195] width:190 height:44 orient:#horizontal range:[0,100,0]
button DollyKframe \"Key\" pos:[191,210] width:60 height:20
button DollyClearKframe \"Clear Keys\" pos:[256,210] width:60 height:20
slider LFOff \"Left Foot Offset\" pos:[1,244] width:190 height:44 orient:#horizontal range:[0,100,0]
button LFOffKframe \"Key\" pos:[191,259] width:60 height:20
button LFOffClearKframe \"Clear Keys\" pos:[256,259] width:60 height:20
slider RFOff \"Right Foot Offset\" pos:[1,295] width:190 height:44 orient:#horizontal range:[0,100,0]
button RFOffKframe \"Key\" pos:[191,309] width:60 height:20
button RFOffClearKframe \"Clear Keys\" pos:[256,309] width:60 height:20
)
rollout Waist \"Waist Controls\" width:330 height:900
(
slider WExpress \"Waist Expression\" pos:[1,12] width:190 height:44 range:[0,100,0] orient:#horizontal
button WExKframe \"Key\" pos:[191,30] width:60 height:20
button WExClearKframe \"Clear Keys\" pos:[256,30] width:60 height:20
slider HMax \"Horizontal Maximum Speed\" pos:[1,58] width:190 height:44 range:[0,100,0] orient:#horizontal
button HMaxKframe \"Key\" pos:[191,78] width:60 height:20
button HMaxClearKframe \"Clear Keys\" pos:[256,78] width:60 height:20
slider HFloat \"Horizontal Float\" pos:[1,151] width:190 height:44 range:[0,100,0] orient:#horizontal
button HFloatKframe \"Key\" pos:[191,167] width:60 height:20
button HFloatClearKframe \"Clear Keys\" pos:[257,167] width:60 height:20
slider HFloatD \"Horizontal Float Delay\" pos:[1,102] width:190 height:44 range:[0,100,0] orient:#horizontal
button HFloatDKframe \"Key\" pos:[191,120] width:60 height:20
button HFloatDClearKframe \"Clear Keys\" pos:[256,120] width:60 height:20
slider VMax \"Vertical Maximum Speed\" pos:[1,195] width:190 height:44 range:[0,100,0] orient:#horizontal
button VMaxKframe \"Key\" pos:[191,210] width:60 height:20
button VMaxClearKframe \"Clear Keys\" pos:[256,210] width:60 height:20
slider VBounce \"Vertical Bounce\" pos:[1,244] width:190 height:44 range:[0,100,0] orient:#horizontal
button VBounceKframe \"Key\" pos:[191,255] width:60 height:20
button VBounceClearKframe \"Clear Keys\" pos:[256,255] width:60 height:20
slider VBounceD \"Vertical Bounce Delay\" pos:[1,344] width:190 height:44 range:[0,100,0] orient:#horizontal
button VBounceDKframe \"Key\" pos:[191,357] width:60 height:20
button VBounceDClearKframe \"Clear Keys\" pos:[256,357] width:60 height:20
slider WVFloat \"Vertical Float\" pos:[1,294] width:190 height:44 range:[0,100,0] orient:#horizontal
button WVFloatKframe \"Key\" pos:[191,306] width:60 height:20
button WVFloatClearKframe \"Clear Keys\" pos:[256,306] width:60 height:20
slider WVFloatD \"Vertical Float Delay\" pos:[1,395] width:190 height:44 range:[0,100,0] orient:#horizontal
button WVFloatDKframe \"Key\" pos:[191,408] width:60 height:20
button WVFloatDClearKframe \"Clear Keys\" pos:[256,408] width:60 height:20
slider VOFF \"Vertical Offset\" pos:[1,444] width:190 height:44 range:[0,100,0] orient:#horizontal
button VOFFKframe \"Key\" pos:[191,454] width:60 height:20
button VOFFClearKframe \"Clear Keys\" pos:[256,454] width:60 height:20
slider PMax \"Perpendicular Maximum Speed\" pos:[1,501] width:190 height:44 range:[0,100,0] orient:#horizontal
button PMaxKframe \"Key\" pos:[191,512] width:60 height:20
button PMaxClearKframe \"Clear Keys\" pos:[256,512] width:60 height:20
slider PFloat \"Perpendicular Float\" pos:[1,599] width:190 height:44 range:[0,100,0] orient:#horizontal
button PFloatKframe \"Key\" pos:[191,614] width:60 height:20
button PFloatClearKframe \"Clear Keys\" pos:[256,614] width:60 height:20
slider PFloatD \"Perpendicular Float Delay\" pos:[1,694] width:190 height:44 range:[0,100,0] orient:#horizontal
button PFloatDKframe \"Key\" pos:[191,708] width:60 height:20
button PFloatDClearKframe \"Clear Keys\" pos:[256,707] width:60 height:20
slider PBounce \"Perpendicular Bounce\" pos:[1,550] width:190 height:44 range:[0,100,0] orient:#horizontal
button PBounceKframe \"Key\" pos:[191,563] width:60 height:20
button PBounceClearKframe \"Clear Keys\" pos:[256,563] width:60 height:20
slider PBounceD \"Perpendicular Bounce Delay\" pos:[1,647] width:190 height:44 range:[0,100,0] orient:#horizontal
button PBounceDKframe \"Key\" pos:[191,660] width:60 height:20
button PBounceDClearKframe \"Clear Keys\" pos:[256,660] width:60 height:20
slider POff \"Perpendicular Offset\" pos:[1,749] width:190 height:44 range:[0,100,0] orient:#horizontal
button POffKframe \"Key\" pos:[191,761] width:60 height:20
button POffClearKframe \"Clear Keys\" pos:[256,761] width:60 height:20
)
rollout Arms \"Arm Controls\" width:330 height:392
(
slider WExpress \"Left Arm Expression\" pos:[1,12] width:190 height:44 range:[0,100,0] orient:#horizontal
button WExKframe \"Key\" pos:[191,30] width:60 height:20
button WExClearKframe \"Clear Keys\" pos:[256,30] width:60 height:20
slider HMax \"Left Arm X Float\" pos:[1,58] width:190 height:44 range:[0,100,0] orient:#horizontal
button HMaxKframe \"Key\" pos:[191,78] width:60 height:20
button HMaxClearKframe \"Clear Keys\" pos:[256,78] width:60 height:20
slider HFloat \"Left Arm Z Float\" pos:[1,151] width:190 height:44 range:[0,100,0] orient:#horizontal
button HFloatKframe \"Key\" pos:[191,167] width:60 height:20
button HFloatClearKframe \"Clear Keys\" pos:[257,167] width:60 height:20
slider HFloatD \"Left Arm X Float Offset\" pos:[1,102] width:190 height:44 range:[0,100,0] orient:#horizontal
button HFloatDKframe \"Key\" pos:[191,120] width:60 height:20
button HFloatDClearKframe \"Clear Keys\" pos:[256,120] width:60 height:20
slider VMax \"Left Arm Z Float Offset\" pos:[1,195] width:190 height:44 range:[0,100,0] orient:#horizontal
button VMaxKframe \"Key\" pos:[191,210] width:60 height:20
button VMaxClearKframe \"Clear Keys\" pos:[256,210] width:60 height:20
slider VBounce \"Right Arm Expression\" pos:[1,244] width:190 height:44 range:[0,100,0] orient:#horizontal
button VBounceKframe \"Key\" pos:[191,255] width:60 height:20
button VBounceClearKframe \"Clear Keys\" pos:[256,255] width:60 height:20
slider VBounceD \"Right Arm X Float Offset\" pos:[1,344] width:190 height:44 range:[0,100,0] orient:#horizontal
button VBounceDKframe \"Key\" pos:[191,357] width:60 height:20
button VBounceDClearKframe \"Clear Keys\" pos:[256,357] width:60 height:20
slider WVFloat \"Right Arm X Float\" pos:[1,294] width:190 height:44 range:[0,100,0] orient:#horizontal
button WVFloatKframe \"Key\" pos:[191,306] width:60 height:20
button WVFloatClearKframe \"Clear Keys\" pos:[256,306] width:60 height:20
slider WVFloatD \"Right Arm Z Float\" pos:[1,395] width:190 height:44 range:[0,100,0] orient:#horizontal
button WVFloatDKframe \"Key\" pos:[191,408] width:60 height:20
button WVFloatDClearKframe \"Clear Keys\" pos:[256,408] width:60 height:20
slider VOFF \"Right Arm Z Float Offset\" pos:[1,444] width:190 height:44 range:[0,100,0] orient:#horizontal
button VOFFKframe \"Key\" pos:[191,454] width:60 height:20
button VOFFClearKframe \"Clear Keys\" pos:[256,454] width:60 height:20

)
theNewFloater = newRolloutFloater \"Blue Simplistic Walking Man Controls\" 332 640
addRollout Sobre theNewFloater
addRollout Presets theNewFloater
addRollout Speeder theNewFloater
addRollout Directer theNewFloater
addRollout General theNewFloater
addRollout Legs theNewFloater
addRollout Waist theNewFloater
addRollout Arms theNewFloater






-------------------------------------------------------------------


Testa aí tbm, talvez seja bom pra vc estudar esse aí pra tbm criar os seus depois.. Dá pra por imagens no lugar dos textos nos botões, etc, etc.. :)..









@edit: O forum comeu uns espaços mas funciona XD..









A Beleza está entre a Ética e a Razão!..
Quanto texto cara! Deve ser muito bom fluir assim. Eu ainda to numa fase muito básica mas até que to me virando legal. Ontem resolvi postar uma pergunta no forum do CGTalk, da uma olhada:
http://forums.cgsociety.org/showthread.php?p=7844794#post7844794

Infinitas respostas!

Eu tava tentando descobrir um jeito de selecionar apenas alguns keyframes da cena e mudar seu valor.
Ainda não testei o que eles mandaram mas parece tranquilo.
Alvaro Moreira Particle Skull PSkull.com

Faça o login para poder comentar

Usuários conectados

Total de mensagens publicadas pelos membros da comunidade: 710606.

Total de membros registrados: 138068

Últimos membros registrados: cavalcantesuetam, oxyscrema, ennecopro, bodybloom, NutrimRezensionDE, Suvasha026, wrinkless, waltereastmood.

Usuário(s) on-line na última hora: 680, sendo 26 membro(s) e 654 visitante(s).

Membro(s) on-line na última hora: rafaelgmarotta, Carlos E. Nogueira, rafa.carvalho, cavalcantesuetam, Danielreis, Henrique Ribeiro, Eduardo Ramos, Antonio, Sergio1987, renaz, Luis Antonio, Lucas Reis, Duda, th3one, mastermax, Ale Marques, Renatto, TadeuB79, Daniel Monteiro, Esdras, nandao, claro_lima, Rodrigo, Nuno, Thiago, Marco Rocha.

Legenda: Administrador, Especial, Moderador, Parceiro .

3D1 © Três D1 © 1999-2024. Todos direitos reservados.