Skocz do zawartości

Rekomendowane odpowiedzi

Napisano

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?

  • Like 1
  • Odpowiedzi 80
  • Created
  • Ostatniej odpowiedzi

Top Posters In This Topic

Napisano

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 (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 przez Destroyer
Napisano

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
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

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

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

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

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

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

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

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

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 (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 przez Destroyer
Napisano

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

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

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

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

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

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

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

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

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
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 (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 przez Kroopson
Napisano

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
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

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

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

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

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

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

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

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

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

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

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ę



×
×
  • Dodaj nową pozycję...

Powiadomienie o plikach cookie

Wykorzystujemy cookies. Przeczytaj więcej Polityka prywatności