Napisano 9 Czerwiec 200915 l Hej! tu będę Was męczył drobnymi pytaniami na które sam mimo ogromnych wysiłków nie znalazłem odpowiedzi :) 1. Mam zdefiniowaną zmienną vector np $vtr czy da się ten wektor przypisać do np transformacji przez setAtt? i czy da się wydobyć tylko jedną liczbę z tego vectora? 2. Jaką komendą utworzyć w oknie skryptu pole w którym będzie się wyświetlała aktualna wartość jakiegoś parametru ale bez możliwości jego zmiany?
Napisano 10 Czerwiec 200915 l Ad. 1. $pierwszaZmienna = $vtr.x $drugaZmienna = $vtr.y $trzeciaZmienna = $vtr.z przez setAttr mozesz podpinac wektor jako array 3-ech elementow. Ad. 2. Wyjasnij dokladniej - gdzie i jak ma sie ta zmienna pojawiac. Jakim oknie skryptu? Wlasnym oknie czy zdefiniowanym juz przez Maya Script Editor?
Napisano 10 Czerwiec 200915 l Autor beny dzieki za odpowiedź 1 dzięki diała :) dziwne bo robiłem to samo ale nie chiało mi wchodzić :/ może coś się pomyliłem bo byłem zmęczony... :) 2 chodzi mi o okno które tworzy się ze skryptu if ( `window -exists DoIt` ) { deleteUI DoIt; } justDoIt;) showWindow DoIt; --edit-- dobra zamotałem się :D zmieniam pytanie, dlaczego nie mogę podpiąć np translacjiX boxa przez attrFieldGrp -attribute a attrFieldSliderGrp -attribute działa bez problemu? i kolejne pytanie czy attrFieldSliderGrp może wyświetlać zmienną a nie atrybut? albo czy jest coś co będzie tak dzialać i aktualizować się wraz ze zmianą zmiennej? Edytowane 11 Czerwiec 200915 l przez Destroyer
Napisano 15 Czerwiec 200915 l Darek, attrFieldGrp to jest kombo skladajace sie z 3-ech zmiennych, to sa tak na prawde 3 textboxy i jeden label tylko ze czesto tego sie uzywa wiec zrobili takie o kombo dla nas uzytkownikow. Wymaga ono jednak podania wektora (np. atrybutu Translate, scale lub rotate), a translateX jest pojedyncza zmienna floatem. Wiec dlaetgo nie zadziala. attrFieldSliderGrp natomiast dziala w druga strone - podajesz mu floata, czyli np. translateX i dlatego dziala. Jak nie chcesz podpinac atrybutu tylko zmienna to uzywasz floatSliderGrp a nie attrFieldSliderGrp. Pozdroofki, Beny
Napisano 20 Czerwiec 200915 l Autor dzięki beny! rozjaśniłeś mi to trochę :) jesteś the best! :P thx!
Napisano 23 Czerwiec 200915 l Autor hej kolejne pytanie mam pętlę która tworzy jakieś obiekty jak dodać te obiekty zaraz po utworzeniu np do arraya żeby móc się potem do nich łatwo odwołać?
Napisano 23 Czerwiec 200915 l string $AllObjects[] = {""}; int $iloscObiektow = 10; for($i=0; $i { $newlyCreatedOne = `polySphere`; appendStringArray($AllObjects, $newlyCreatedOne, 1); } print $AllObjects; Prosze bardzo. Jak chcesz sie dobrac do shejpow tych obiektow rowniez to zamiast "1" w loopie wpisz 2. Pozdrawiam, Beny
Napisano 23 Czerwiec 200915 l Autor fajnie, działa super tylko jak chcę zaznaczyć cały array przez: select $AllObjects; to wywala mi błąd // Error: No object matches name: // przy normalnym arrayu dziala ok czy ten array jest jakiś inny? :) wielkie dzięki za pomoc! :)
Napisano 23 Czerwiec 200915 l select $AllObjects Ci nie zadziała w Maya, w Max Scrypcie tak , ale niestety MEL troche kuleje w stosunku do Max Scripta :(( (chodzi o forme oczywiscie) i tutaj musisz zaznaczac obiekty pojedynczo. Zeby zaznaczyc wszystkie obiekty z arraya powyzej odpal taki skrypcik: select -clear; for ($object in $AllObjects) { select -add $object; }
Napisano 24 Czerwiec 200915 l Autor tak tylko że jak zrobisz recznie array i dodasz do niego kilka obiektów to za pomocą select $array; możesz go zaznaczyć bez problemu, gdzieś nawet w książce o mel-u to wyczytałem i na necie, ale ten array utworzony za pomocą tego kodu nie chce współpracować a co dziwne jestem niemal przekonany(ale teraz już trochę mniej) że raz udało mi się ten array zaznaczyć właśnie w ten sposób maya czasami nie działa "coherent" ;)
Napisano 25 Czerwiec 200915 l Spoko, jak Ci sie uda to napisz jak to zrobiles, bo z tego co wiem "select" dziala tylko na DAG obiektach a nie na zmiennych, ale jezeli cos sie zmienilo to by bylo super! Bo generalnie select musialby byc przeciazony i sprawdzac co jest DAG obiektem a co nie a to mogloby byc dosc skomplikowane, ale fakt ze fajnie by bylo zeby to dzialalo jak w Maxie, ale tam nie ma struktury DG tylko wszystko jest w formie wodospadowej, wiec maja zadanie ulatwione. ps. Moze z Maxem Ci sie pomylilo?
Napisano 25 Czerwiec 200915 l Autor z maxa nie korzystam więc nie mogo mi się pomylić :P czytaj tu: klik if the array string &bill_nodes[] defined above had contained all the nodes in ... you can select these nodes with the comand select $bill_nodes; zrób sobie polysphere i skopiuj 3 razy potem ręczenie robisz array string $array[] = {"pSphere1", "pSphere2", "pSphere3", "pSphere4"}; print $array; select $array; i select $array; zaznacza wszystkie kulki ale ten array utworzony z Twojego kodu jakoś się opiera tej komendzie :) ale pytanie pozostaje: whyyyy? :)
Napisano 25 Czerwiec 200915 l to teraz rozwali wam czachy: { string $AllObjects[]; int $iloscObiektow = 10; for($i=0; $i{ $newlyCreatedOne = `polySphere`; appendStringArray($AllObjects, $newlyCreatedOne, 1); } select $AllObjects; } I działa - dziwne nie? :D
Napisano 25 Czerwiec 200915 l Autor kosmos! :D Kroopson nauczaj mnie mistrzu :D ale pytanie pozostaje: czemu jeden array drugiemu nierówny? ;) czy to może ja coś pomylisłem? :)
Napisano 25 Czerwiec 200915 l WOW!! Zajebiscie!! No fakt!!! Jak predefiniujesz arraya wczesniej, to wie ze to tablica stringow i moze wtedy z nij skorzystac do zaznaczenia .... ze tez na to nie wpadlem! Krupsonie, jestes wielki! :)
Napisano 25 Czerwiec 200915 l Już wiele razy sie nacinałem na to że w MEL'u niby nie trzeba tak dokładnie deklarować zmiennych a jak przychodzi co do czego to się wykrzacza. Ale też ciekawostką jest fakt że to może nie działać jak nie zamkniesz kodu w klamrach. Ogólnie to od jakiegoś czasu uskuteczniam pythona jednak w Maya.
Napisano 25 Czerwiec 200915 l z bolem serca musze powiedziec ze ... ja tez na pythona przechodze ... zwlaszcza przez API ... cholerni developerzy MELa ... lenie!
Napisano 25 Czerwiec 200915 l Autor aj Panowie Wy się bawicie Phytonami a ja nawet mel-em nie potrafię :) i kolejne pytanie :) mam array floatów jak z niech wybrać najmniejszą/ najwiekszą? -Edit- ok już sobie poradziłem ^^ // max value float $array[] = {1,2,3,4}; float $test = 0; for($value in $array) { if ($value > $test) { $test = $value; } }; print $test; Edytowane 25 Czerwiec 200915 l przez Destroyer
Napisano 25 Czerwiec 200915 l moze lepiej tak: float $array[] = {3,2,1,4}; $array = `sort $array`; print $array[0]; czytelniejsze jest to raczej :)
Napisano 25 Czerwiec 200915 l Autor heh można i tak :) btw a jak to będzie dla max value :) tzn ciekawy jestem czy jest jakiś kod który sprawdza ile jest obiektów w arrayu żeby wybrać ostatni bo ja bym to zrobił pewnie naokoło znowu :D można sortować w descending order albo flipnąć arraya? :)
Napisano 25 Czerwiec 200915 l float $array[] = {3,2,1,4}; $array = `sort $array`; $lastElement = size($array)-1; print $array[$lastElement ]; :)
Napisano 2 Lipiec 200915 l Autor oki mam kolejny problem tworzę onko dodaję części do usuwania okna jesli okno istnieje itd. if ( `window -exists pfxx` ) { deleteUI pfxx; // delete window when it exists } ; wszystko cacy tylko jak zmnieniam height/ width to okno się nie aktualizuje!? zmieniam nazwę okna i dziala, o co chodzi?! jak zaktualizować okno? nawet po zresetowaniu majki pozostają te same wartości sprzed resetu!? jaka szalona logika za tym stoi? :)
Napisano 2 Lipiec 200915 l if ( `window -exists pfxx` ) deleteUI pfxx; // delete window when it exists if (`windowPref -exists pfxx`) windowPref -remove pfxx; Ciekawostka - jak masz komendę warunkową if to nie musisz stawiać klamerek jeżeli chcesz w niej wykonać tylko jedną komendę. Pozdro
Napisano 2 Lipiec 200915 l Autor Dzięki wielkie Kroopson! ale dziwi mnie to że nawet po zresetowaniu majki okno nadal miało stare ustawienia, jak to się dzieje, gdzie to się zapisuje i jaka za tym stoi zasada? :) w sumie drobiaz ale nie daje mi to spokoju i chciałbym wiedzieć jaki mechanizm za tym stoi :) bartolomeo na szczęście Kroopson czuwa ;) i przy okazji proste pytanie mam dwie kule jedna w grupie druga nie jak próbuję zaznaczyć kulkę po nazwie wywala błąd select pSphere1; // Error: More than one object matches name: pSphere1 // żeby zaznaczyć kulke w grupie wystarczy dać select group1|pSphere1; a moje pytanie brzmi jak wybrać tą kulkę która nie jest w grupie tylko siedzi sobie spokojnie w scenie? :)
Napisano 3 Lipiec 200915 l select |Sphere1; A co do ustawień okienek to Maya zapamiętuje ich ustawienia. To co ci napisałem to sobie wrzucam na początek każdego skryptu który ma mieć GUI.
Napisano 6 Lipiec 200915 l Autor dzięki Kroopson! że też sam na to nie wpadłem :P i mam kolejne pytanie, a własciwie kilka :) 1. przy tworzeniu okna z przyciskami sliderami i takimi tam czy da się ustawić jakoś globalnie kolor tła 2. czy da się w kolorze tła -bgc uzyc vectora? bo jak próbuję color.x color.y color.z to mi nie wchodzi ale jak zorbię pojedyncze floaty z tylmi wartościami float $kolorR = color.x; itd. to działa. a chciałbym zrobic to tak żeby było mniej kodu. teraz mi przeszło przez myśl że mozna zrobić arraya to bedzie tylko jedna linijka a nie 4 ale może da się prościej :) 3. Zrobiłem sobie expresję do przełączania metriałów za pomocą: if (global_move_scale.Material ==0) sets -forceElement ball_SG ball_geo ; else if (global_move_scale.Material ==1) sets -forceElement crossSG ball_geo ; ale geometria do której materaił jest przypisywany ma parent constarit i dotaję warna: // Warning: Cannot add the following items to the set since the set has restrictions on membership: ball_geo_parentConstraint1 // da się jakoś to obejść żeby nie wieć ostrzeżenia, albo czy jest jakaś inna metoda na przypisane materiału do obiektu? próbowałem hypershade -assign ale to wymaga seleckcji, i jak się powróci do selekcji sprzed wykoana expresii to już jest za dużo kodu :) na razie tyle :)
Napisano 6 Lipiec 200915 l Ja tu raczej nic nie pomoge, ale moge sie o cos zapytac :) Da sie jakos zrobic zeby jakims skrotem klawiszowym albo chociaz na shelfie mozna bylo przelaczac przesuwanie np vertexow "World/Normals average"? -najlepiej tab'em :P Pozdrawiam :)
Napisano 6 Lipiec 200915 l Autor mpta tak na szybko machnięty, pewnie można łatwiej ale działa :) int $mode = `manipMoveContext -q -mode Move`; if ($mode == 2) manipMoveContext -e -mode 9 Move; else if ($mode == 9) manipMoveContext -e -mode 2 Move; else manipMoveContext -e -mode 2 Move; możesz rzucić na shelfa, markingmenu albo przypiąc do klawisza jadnakoż nie wiem czy do tab-u się da najpewniej nie :)
Napisano 6 Lipiec 200915 l OOOOOOOO mamusiu! U ARE MY MASTER! edit: niech no tylko podladuje reputacje :)
Napisano 9 Lipiec 200915 l Autor hej mam kolejne pytanie: jak sprawdzić jaki materiał ma zaznaczony obiekt? próbowałem jakoś przez pickWalk, listconection itd ale i tak się nie udało :/ Pytania z #28 nadal aktualne :)
Napisano 10 Lipiec 200915 l hej mam kolejne pytanie: jak sprawdzić jaki materiał ma zaznaczony obiekt? próbowałem jakoś przez pickWalk, listconection itd ale i tak się nie udało :/ To nie jest juz takie "Drobne pytanie" :)) Ogolnie to nie ma czegos takiego jak przypisanie Materialu do Obiektu jak to dziala w Maxie i mimo ze to tak wyglada, to tak na prawde przypisujesz obiekt do shading grupy do ktorej sa podpiete shadery. Dlaczego tak glupio teoretyzuje? Poniewaz dzieki temu mozesz sprawdzic "Jaki jest material na obiekcie?". Tutaj masz kodzik ktory Ci wypluje shading grupy do ktorych podpiete sa komponenty danego obiektu (poszczegolne facy moga byc gdzie indziej popodpinane): string $allOutputs[] = (`listHistory -f true pSphere1` ); string $node = ""; for ($node in $allOutputs){ if(`nodeType $node` == "shadingEngine") print ($node + "\n"); } Majac juz dostep do $node bez problemu mozesz sprawdzic co jest popodpinane w shading grupach na inputach przez co znajdziesz swojego Świetego Grala :)) ps. Jak ktos (Krupson? :) ) zna szybszy sposob, prosze niech sie podzieli, bo ja od lat stosuje powyzsza metode i nie chcialbym jakis archaizmów szerzyć :)
Napisano 10 Lipiec 200915 l { for ($selected in (`ls -sl`)) for ($child in (`listRelatives -c -s $selected`)) for ($SG in (`listConnections -t "shadingEngine" $child`)) print `listConnections -d 0 -s 1 ($SG + ".ss")`; } hmmm - u mnie dziala, moze u was tez zadziala. Listuje materialy przypisane do obiektu. Jak obiekt ma poprzypisywane rozne materialy do face'ow to sie kwasi i kilka razy listuje ten sam shader. Edytowane 10 Lipiec 200915 l przez Kroopson
Napisano 10 Lipiec 200915 l for ($selected in (`ls -sl`)){ for ($child in (`listRelatives -c -s $selected`)){ $sets = `listSets -t 1 -o $child`; for ($SG in $sets) print `listConnections -d 1 -s 1 ($SG + ".ss")`; } } Ok - inne podejscie, nie tak zgrabnie chociaz by sie dalo ale mi sie nie chce. To mi listowalo wszystkie materialy przypisane do obiektu. pozdroweczki. Kroops (jade na urlopas)
Napisano 10 Lipiec 200915 l for ($selected in (`ls -sl`)) for ($child in (`listRelatives -c -s $selected`)) for ($SG in (`listSets -t 1 -o $child`)) print `listConnections -d 1 -s 1 ($SG + ".ss")`; Wyczyscilem :)) Milego urlopu :)
Napisano 10 Lipiec 200915 l Autor Dzięki panowie za pomoc :) ale znalazłem szybszy sposób ;) hyperShade -shaderNetworksSelectMaterialNodes krócej się już nie da, no może poza :) hyperShade -smn ha! i sam to znalażłem :D a do SG to sam też dotarłem ale trochę naokoło :D #28 ?
Napisano 11 Lipiec 200915 l Hmmm ale to Ci nie zwraca materialu tylko pokazuje go w oknie hypershade :) w sensie nie mozesz go sobie do zmiennej teraz wczytac i uzyc pozniej, a myslelismy ze to o to Ci chodzi :)
Napisano 11 Lipiec 200915 l Autor To prawda że nie moge w ten sposób wczytać materiałów do zmiennej ale ta " comanda" ;) zaznacza materiały przypisane do obiektu i żeby dodać je do zmniennej to już prosta droga :) hyperShade -shaderNetworksSelectMaterialNodes $test = `ls -sl`; print $test
Napisano 13 Lipiec 200915 l Autor Dwa pytania: 1. czy mogę dodawać do arraya jakieś wartości tj floaty/ int w taki sposów jak za pomocą appendstringarray przy stringach? :) 2. czy da się za pomocą buttona w oknie zmienić kolor tła i/lub logo w tymże oknie interaktywnie i bez przeładowania okna? :) nie interaktywnie i z przeładowaniem też nie wiem jak zrobić :D
Napisano 14 Lipiec 200915 l 1. Dobre pytanie, sam bym sie dowiedzial. Napisalem sobie kiedys taka funkcje i zawsze z niej korzystam, bo dziala, ale jezeli jest jakas funkcja MELowa to by bylo fajnie :) proc float[] appendFloatArrays(float $masterArray[], float $arrayToAdd[]) { int $i = 0; int $counter = 0; for($i = size($masterArray), $counter = 0; $counter return $masterArray; } 2. Odswiezanie okien w Maya mocno kuleje. Czasami musze stosowac glupie tricki, jak wysuniecie okna poza ekran i jego powrot spowrotem w to samo miejsce zeby sie odswiezylo (zdaje egzamin ale to dosc malo eleganckie rozwiazanie), ale z bgc okna Ci nie pomoge. To jest jakis bug i tyle.
Napisano 14 Lipiec 200915 l funkcji chyba nie ma - wymyslilem cos takiego { //definiowanie array'ow - arrS: z niego bedziemy kopiowac // arrD - on jest celem kopiowania int $arrS[] = {1, 2, 3, 4, 5}; int $arrD[] = {6,7,8,9,10}; // kopiowanie z jednego w drugiego for ($Sors in $arrS) $arrD[size($arrD)] = $Sors; print $arrD; } Dzieki temu nie trzeba pisac dodatkowej funkcji. Pozdrowka
Napisano 19 Lipiec 200915 l Autor Dzięki wielkie chłopaki za pomoc! :) świetny sposób ale ... mam kolejny problem: jeeezus fucken christ! powiedzcie czy mam tu coś źle bo nie mogę zaznaczyć w żaden sposób tego arraya? przez select nie mogę, przez jedną i drugą pętle for też nie wchodzi wywalając error: // Error: No object matches name: // wyprinowanie całego array nie jest problemem i zaznaczenie pojedyńczego elementu też dziala, ale w petli nie widzi zmiennej tak jak prze select mimo, że array został zdefiniowany wczesniej?! wtf? gdzie jest błąd? global string $all[]; clear$all; string $allPFXBrushes[] = `ls -type brush`; for ($obj in $allPFXBrushes) { $objtrans =`listConnections -d 1 -s 0 $obj `; appendStringArray($all, $objtrans, 1 ); } print $all; int $x = size ($all); select -clear; for ($i=0; $i { select -add $all[$i]; } ------------------------------------------------------------ i przy okazji co zrobić kiedy hurotowo łączę coś z czymś ale kilka obiektów już jest połączonych w dokładnie ten sposób jaki chcę połączyć i wywala mi błąd: Warning: 'ramp1.outColor' is already connected to 'Tubes1.color1'. // czy jest jakaś prosta opcja ignorowanai tego i kontynowania pętli czy tylko przez if..? -------------------------------------------- i ostatnie mam floatSliderGrp mogę sobie zmienić długośc lebela i fielda ale czemu slider nie daje się zmienić? i btw czy mel to momentami taka nieprzewidywalna padaka czy mi się wydaje? :D
Napisano 19 Lipiec 200915 l Pewnie nie zwrociles uwagi ale print $all printuje Ci najpierw pusty znak, poniewaz zdefiniowales $all na poczatku z pustym znakiem na czele. Append Ci go nie nadpisal i zaczal dodawac na kolejne pozycje stringi pozostawiajac Twoj index "0" jako null. Print sobie z tym poradzi ale select juz nie. Zmien sobie $i =0 na $i=1 i po sprawie, albo rozwiaz sobie na swoje potrzeby ten problem zgodnie z tym co napisalem powyzej. Co do warningow i "expected errors" uzywaj catch lub catchQuiet. Co do floatSliderGroup HGW, ja robie zawsze swoje grupy, chyba ze na szybko cos buduje, wiec tu Ci nie pomoge :( Tak, MEL czasami is a bitch i trzeba miec do niego cierpliwosc. Ogolnie unikaj zmiennych i funkcji globalnych, usuwaj wszystko co stworzyles a juz nie bedziesz korzystal, czysc kontrolowanie arraye to wiekszosc problemow Cie ominie. Pozdrawiam! :)
Napisano 19 Lipiec 200915 l Autor super beny! dzięki wielkie! :) myślałem że clear array[] czyści array tak że nic nie ma w środku a tu zonk :/ bo bez clear array były dwa puste znaki :) dzięki za rady! :)
Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto