Sette key på alle kontrollere

Max scripts

Moderatorer: Super Moderatorer, Admins


Trådstarter
danielodland
Innlegg: 985
Registrert: tor 21 mai, 2009

Sette key på alle kontrollere

Legg innav danielodland » ons 11 mai, 2011

Har lenge hatt planer om å få kontroll på scripting en vakker dag, særlig siden
jeg tror det ville hjelpe mye i forbindelse med rigging. Men, som så mye annet, blir
det utsatt til fordel for skolearbeid og andre ting jeg vil lære meg.

Er det noen av dere som alt har kontroll på maxscript som kunne hjulpet
meg med et enkelt lite script?

Trenger bare at den selecter alle kontrollobjekter ( f eks i et selection set eller layer)
og at den setter en key på de. Altså, et script for å sette en key på alle
objekter i et selection set eller et layer (eller en annen metode om du kommer på noe
lurere).

Hadde vært storveis =)

Brukeravatar

Misfortune
Innlegg: 2171
Registrert: man 02 apr, 2007
Sted: Norge, Kolbotn

Legg innav Misfortune » tor 12 mai, 2011

lagre selection(s) og trykke på k? Med auto key eller set key mode på.

Brukeravatar

havards
Innlegg: 211
Registrert: ons 13 des, 2006

Legg innav havards » tor 12 mai, 2011

Hva med

Kode: Velg alt

rollout rolSelSetKeySet "Sel.set set key."
(
   dropDownList dDLTransformMode "Choose mode"
      items:#("Transform", "Position", "Rotate", "Scale")
   dropDownList dDLSelSets "Choose selection set"
      items:(for i = 1 to getNumNamedSelSets() collect getNamedSelSetName i)
   button btnSetKey "Set key" align:#right
   
   on btnSetKey pressed do
   (
      if dDLSelSets.selection != 0 do
      (
         for i in selectionSets[dDLSelSets.selection] do
         (
            case dDLTransformMode.selection of
            (
               1: addNewKey i.transform.controller slidertime
               2: addNewKey i.position.controller slidertime
               3: addNewKey i.rotation.controller slidertime
               4: addNewKey i.scale.controller slidertime
            )
         )
      )
   )
)
createDialog rolSelSetKeySet

?

Jeg fikk misfurtone til å teste den, og hun mente den fungerer som den skal i autokey mode.
02:14 Misfortune • hun skjuler så jævlig mye i smutthølet
http://folk.ntnu.no/havardsc/site/wordpress/

Brukeravatar

Misfortune
Innlegg: 2171
Registrert: man 02 apr, 2007
Sted: Norge, Kolbotn

Legg innav Misfortune » tor 12 mai, 2011

Han.. >_>

Brukeravatar

Tormem
Innlegg: 885
Registrert: fre 02 nov, 2007
Sted: Olso
Kontakt:

Legg innav Tormem » tor 12 mai, 2011

lols :D/


Trådstarter
danielodland
Innlegg: 985
Registrert: tor 21 mai, 2009

Legg innav danielodland » tor 12 mai, 2011

Hahaha hun =)

Takker så mye for scriptet. Er det sånn at "transform" blir det samme som både position, rotate og scale? Kunne like godt vært kalt "all", bare for å få det på det rene?

Funker det sånn at jeg må få opp den menyen hver gang jeg skal sette key, eller kan jeg lage en shortcut slik at jeg kan bare klikke shift-K eller noe for å sette key på alle objekter i selectionsettet uten å få opp noen meny for hver gang?

Har et noobespørsmål til; hvordan kan jeg lage en keyboard shortcut til den? Jeg har laget et nytt panel, lagt scriptet til der og kan klikke på den for å få opp verktøyet du har laget. Men finner ikke noen måte å spore dette opp inne i shortcut menyen.

Igjen, tusen takk for hjelp.

Brukeravatar

havards
Innlegg: 211
Registrert: ons 13 des, 2006

Legg innav havards » tor 12 mai, 2011

Transform er alle de tre ja.

For å assigne hotkeys til scripts så må du kjøre scriptet som et macroscript først. Macroscripts er helt vanlige scripts bare innpakket med macroinfo rundt. F.eks

Kode: Velg alt

macroscript SelSetSetKey category:"Håvard er så grei og snill"  icon:#("MAXScript", 1)
(
-- Din kode her
)

Da finner du igjen dette scriptet under Customize->Customize User Interface->Keyboard/Toolbars/Quads/Menus-tab/Category->Håvard er så grei og snill.
Da er det bare å velge f.eks keyboard-tabben, velge kategori og velg script, og så assigne en hotkey til det. Sikkert lurt å endre kategorinavn også : D

Hvis du ikke vil at menyen skal dukke opp så er det mye mindre kode, men det finnes ingen rett frem måte å finne ut hvilket selectionset som currently er selected via maxscript. Så du må ta til takke med at den arbeider bare på den current selection. Dvs. at du må huske å velge selection set selv før du setter key. En annen ting er at du må lage 3 forskjellige scripts, en for hver type transform du vil ha; position, rotation og scale. Å sette key for alle disse er som Misfortune sa "K"-knappen. Legger ved koden for setKey for scale. Hvis du vil ha en for position og rotation så bytter du bare ut scale med f.eks rotation i "i.scale.controller". Du må også huske å bytte navnet på macroscriptet; SelSetScaleKey -> SelSetRotationKey.

Kode: Velg alt

macroscript SelSetScaleKey category:"Håvard er så grei og snill"  icon:#("MAXScript", 1)
(
   for i in selection do
      addNewKey i.scale.controller sliderTime
)

Da skal du få noe àla dette:
Bilde
02:14 Misfortune • hun skjuler så jævlig mye i smutthølet

http://folk.ntnu.no/havardsc/site/wordpress/


Trådstarter
danielodland
Innlegg: 985
Registrert: tor 21 mai, 2009

Legg innav danielodland » tor 12 mai, 2011

havards skrev:Hvis du ikke vil at menyen skal dukke opp så er det mye mindre kode, men det finnes ingen rett frem måte å finne ut hvilket selectionset som currently er selected via maxscript.


Ok, du sier "som currently er selected", men må det være selected? hva med å forhåndsdefinere
hvilket selectionset jeg vil jobbe med? Vet ikke hva jeg snakker om her, men poenget er at hvis
jeg må inn i en meny hver gang, er det litt lite poeng med det i denne sammenhengen. Det jeg
ønsker å slippe er å velge alle controllers hver gang jeg skal sette en key, så hvis jeg uansett
må klikke i menyer kunne jeg like gjerne bare klikket på selection setet og klikket "k". U see?
Eller går jeg glipp av et poeng kanskje?=) Langt fra umulig=)

Brukeravatar

havards
Innlegg: 211
Registrert: ons 13 des, 2006

Legg innav havards » tor 12 mai, 2011

Nei, du har rett. Er like så greit å bare bruke k-knappen.

Men du kan som du sier forhåndsdefinere selectionsettet du vil bruke.
F.eks:

Kode: Velg alt

macroscript SelSetTransformSetKey category:"Håvard er så grei og snill"  icon:#("MAXScript", 1)
(
   global currentSelectionSet
   
   rollout rolSelectionSetPicker "Select sel. set"
   (
      dropDownList dDLSelSets "Choose selection set"
         items:(for i = 1 to getNumNamedSelSets() collect getNamedSelSetName i)
      button btnSelect "Select"
      
      on btnSelect pressed do
      (
         currentSelectionSet = dDLSelSets.selection
         destroyDialog rolSelectionSetPicker
      )
   )
   
   if currentSelectionSet == undefined then
      createDialog rolSelectionSetPicker
   else
      for i in selectionSets[currentSelectionSet] do
         addNewKey i.transform.controller sliderTime
)

Første gangen du kjører det scriptet så vil du promtes på hvilket selection set du vil bruke, når du kjører scriptet på nytt så vil den sette keys på det selection sette du valgte.
02:14 Misfortune • hun skjuler så jævlig mye i smutthølet

http://folk.ntnu.no/havardsc/site/wordpress/


Trådstarter
danielodland
Innlegg: 985
Registrert: tor 21 mai, 2009

Legg innav danielodland » tor 12 mai, 2011

Det hørtes mye mer nyttig ut! Gjør meg ingenting å måtte omdefinere den hver gang jeg har et nytt prosjekt.

Neat, takker så mye!

Må virkelig få kontroll på scripting selv..

Brukeravatar

havards
Innlegg: 211
Registrert: ons 13 des, 2006

Legg innav havards » tor 12 mai, 2011

Må kanskje nevnes at for å endre hvilket selectionset du vil ha så må man resette en global verdi. Det kan man gjøre ved å skrive "currentSelectionSet = undefined" i listener eller du kan mekke et script med en egen hotkey:

Kode: Velg alt

macroscript SelSetTransformSetKeyReset category:"Håvard er så grei og snill"  icon:#("MAXScript", 1)
(
   currentSelectionSet = undefined
)


Så f.eks om man har shift+k på det første scriptet, så kan man ha shift+trl+k på det nye for å resette. Når man da trykker shift+k igjen så vil man bli prompta for et nytt selectionset.

Nice resources for å lære seg maxscript er help-fila og å se på andre sine script, f.eks så du finner mange på scriptspot.com samt å henge på maxscript-seksjonen på cgtalk, der er det mye snæks!
02:14 Misfortune • hun skjuler så jævlig mye i smutthølet

http://folk.ntnu.no/havardsc/site/wordpress/


Trådstarter
danielodland
Innlegg: 985
Registrert: tor 21 mai, 2009

Legg innav danielodland » tor 12 mai, 2011

Takk for tips.

Har en del tutorials om maxscript og mel, har bare ikke kommet så langt ennå. Har prøvd å dissekere scripts på egen hånd, og mye gir mening for meg. Må bare ha tid til å jobbe litt systematisk med å komme inn i det=)


Trådstarter
danielodland
Innlegg: 985
Registrert: tor 21 mai, 2009

Legg innav danielodland » man 16 mai, 2011

Oppdaget akkurat at Maya har noe som hadde løst dette problemet; er det riktig at Character Sets i Maya gjør nettopp dette, altså keyer alle controllerne på karakteren hver gang du setter en key på en av kontrollerne? Har max noe tilsvarende?

Brukeravatar

havards
Innlegg: 211
Registrert: ons 13 des, 2006

Legg innav havards » man 16 mai, 2011

Fant ut at man likevell kan finne ut hvilket selectionSet et objekt hører til, og hvordan man keyer alle objektene i det settet:

Kode: Velg alt

macroscript SelSetTransformSetKey category:"Håvard er så grei og snill"  icon:#("MAXScript", 1)
(
   local obj = selection[1]
   local found = false
   
   for i = 1 to getNumNamedSelSets() where not found do
      for j = 1 to getNamedSelSetItemCount i where getNamedSelSetItem i j == obj do exit with
      (
         for k in selectionSets[i] do
            addNewKey k.transform.controller sliderTime
         found = true
      )
      
   if not found do
      messageBox "Object is not in a selection set!"
)


Hvis du selekterer et objekt nå og kjører scriptet/trykker på hotkey/etc så vil den keye alle objektene i samme selectionSet.
Ikke heeelt i samme gate som spørsmålet ditt though, men nå kan du i hvert fall keye alle objektene i et selectionSet uten å måtte velge et set først.

En måte å automatisk sette key på alle objektene i et set når et av medlemmene får assignet en key av max ville vært å bruke callbacks. Men jeg tittet i manualen nå, og det var ingen exposed callbacks til keysetting, og ellers overraskende få exposed callbacks til animasjon generelt!

Så da vil dette scriptet være det nærmeste man kommer, slik jeg ser det.
02:14 Misfortune • hun skjuler så jævlig mye i smutthølet

http://folk.ntnu.no/havardsc/site/wordpress/


Trådstarter
danielodland
Innlegg: 985
Registrert: tor 21 mai, 2009

Legg innav danielodland » man 16 mai, 2011

Helt konge, Håvard! Takker!


Gå tilbake til «Max scripts»

Hvem er online

Brukere i dette forumet: Ingen registrerte brukere og 1 gjest

cron