Destroyer Napisano 9 Czerwiec 2009 Napisano 9 Czerwiec 2009 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? 1
beny Napisano 10 Czerwiec 2009 Napisano 10 Czerwiec 2009 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?
Destroyer Napisano 10 Czerwiec 2009 Autor Napisano 10 Czerwiec 2009 (edytowane) 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 2009 przez Destroyer
beny Napisano 15 Czerwiec 2009 Napisano 15 Czerwiec 2009 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
Destroyer Napisano 20 Czerwiec 2009 Autor Napisano 20 Czerwiec 2009 dzięki beny! rozjaśniłeś mi to trochę :) jesteś the best! :P thx!
Destroyer Napisano 23 Czerwiec 2009 Autor Napisano 23 Czerwiec 2009 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ć?
beny Napisano 23 Czerwiec 2009 Napisano 23 Czerwiec 2009 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
Destroyer Napisano 23 Czerwiec 2009 Autor Napisano 23 Czerwiec 2009 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! :)
beny Napisano 23 Czerwiec 2009 Napisano 23 Czerwiec 2009 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; }
Destroyer Napisano 24 Czerwiec 2009 Autor Napisano 24 Czerwiec 2009 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" ;)
beny Napisano 25 Czerwiec 2009 Napisano 25 Czerwiec 2009 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?
Destroyer Napisano 25 Czerwiec 2009 Autor Napisano 25 Czerwiec 2009 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? :)
Kroopson Napisano 25 Czerwiec 2009 Napisano 25 Czerwiec 2009 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
Destroyer Napisano 25 Czerwiec 2009 Autor Napisano 25 Czerwiec 2009 kosmos! :D Kroopson nauczaj mnie mistrzu :D ale pytanie pozostaje: czemu jeden array drugiemu nierówny? ;) czy to może ja coś pomylisłem? :)
beny Napisano 25 Czerwiec 2009 Napisano 25 Czerwiec 2009 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! :)
Kroopson Napisano 25 Czerwiec 2009 Napisano 25 Czerwiec 2009 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.
beny Napisano 25 Czerwiec 2009 Napisano 25 Czerwiec 2009 z bolem serca musze powiedziec ze ... ja tez na pythona przechodze ... zwlaszcza przez API ... cholerni developerzy MELa ... lenie!
Destroyer Napisano 25 Czerwiec 2009 Autor Napisano 25 Czerwiec 2009 (edytowane) 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 2009 przez Destroyer
beny Napisano 25 Czerwiec 2009 Napisano 25 Czerwiec 2009 moze lepiej tak: float $array[] = {3,2,1,4}; $array = `sort $array`; print $array[0]; czytelniejsze jest to raczej :)
Destroyer Napisano 25 Czerwiec 2009 Autor Napisano 25 Czerwiec 2009 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? :)
beny Napisano 25 Czerwiec 2009 Napisano 25 Czerwiec 2009 float $array[] = {3,2,1,4}; $array = `sort $array`; $lastElement = size($array)-1; print $array[$lastElement ]; :)
Kroopson Napisano 26 Czerwiec 2009 Napisano 26 Czerwiec 2009 a nie możnaby tak pięknie jak w pythonie array[-1] ?
Destroyer Napisano 2 Lipiec 2009 Autor Napisano 2 Lipiec 2009 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? :)
bartolomeo Napisano 2 Lipiec 2009 Napisano 2 Lipiec 2009 beny na urlopie, pewnie jak wróci to odpisze ;)
Kroopson Napisano 2 Lipiec 2009 Napisano 2 Lipiec 2009 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
Destroyer Napisano 2 Lipiec 2009 Autor Napisano 2 Lipiec 2009 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? :)
Kroopson Napisano 3 Lipiec 2009 Napisano 3 Lipiec 2009 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.
Destroyer Napisano 6 Lipiec 2009 Autor Napisano 6 Lipiec 2009 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 :)
ptaszek Napisano 6 Lipiec 2009 Napisano 6 Lipiec 2009 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 :)
Destroyer Napisano 6 Lipiec 2009 Autor Napisano 6 Lipiec 2009 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 :)
ptaszek Napisano 6 Lipiec 2009 Napisano 6 Lipiec 2009 OOOOOOOO mamusiu! U ARE MY MASTER! edit: niech no tylko podladuje reputacje :)
Destroyer Napisano 9 Lipiec 2009 Autor Napisano 9 Lipiec 2009 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 :)
beny Napisano 10 Lipiec 2009 Napisano 10 Lipiec 2009 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ć :)
Kroopson Napisano 10 Lipiec 2009 Napisano 10 Lipiec 2009 (edytowane) { 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 2009 przez Kroopson
Kroopson Napisano 10 Lipiec 2009 Napisano 10 Lipiec 2009 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)
beny Napisano 10 Lipiec 2009 Napisano 10 Lipiec 2009 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 :)
Destroyer Napisano 10 Lipiec 2009 Autor Napisano 10 Lipiec 2009 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 ?
beny Napisano 11 Lipiec 2009 Napisano 11 Lipiec 2009 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 :)
Destroyer Napisano 11 Lipiec 2009 Autor Napisano 11 Lipiec 2009 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
Destroyer Napisano 13 Lipiec 2009 Autor Napisano 13 Lipiec 2009 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
beny Napisano 14 Lipiec 2009 Napisano 14 Lipiec 2009 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.
Kroopson Napisano 14 Lipiec 2009 Napisano 14 Lipiec 2009 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
beny Napisano 14 Lipiec 2009 Napisano 14 Lipiec 2009 Metoda Krupsonowa zdecydowanie lepsza! ... jak zwykle zreszta :D
Destroyer Napisano 19 Lipiec 2009 Autor Napisano 19 Lipiec 2009 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
beny Napisano 19 Lipiec 2009 Napisano 19 Lipiec 2009 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! :)
Destroyer Napisano 19 Lipiec 2009 Autor Napisano 19 Lipiec 2009 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! :)
Rekomendowane odpowiedzi
Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto
Jedynie zarejestrowani użytkownicy mogą komentować zawartość tej strony.
Zarejestruj nowe konto
Załóż nowe konto. To bardzo proste!
Zarejestruj sięZaloguj się
Posiadasz już konto? Zaloguj się poniżej.
Zaloguj się