Render.ru

Не могу понять... в чем проблема.

#1
Есть скрипт. который нихуха не работает.... ПАМАГИТЕ!!!!!!!!!!!!!! Работа горит!!!!! не успеваю сдать!!!!!! ПАМАГИТЕ!!!!
вот он:

global proc string uniqueName(string $name){

string $resultName;
int $i=1;
if (`objExists $name`){
while (`objExists ($name+$i)`)
$i++;
return ($name+$i);
}
else
return $name;
};


global proc string makeLocator(float $x, float $y, float $z, string $name ) {
string $nName=uniqueName($name);
string $nameLocator[]=`spaceLocator -n ($nName)`;
move -a ($x) ($y) ($z);
setAttr -e -keyable false ("|"+$nameLocator[0]+".rx");
setAttr -e -keyable false ("|"+$nameLocator[0]+".ry");
setAttr -e -keyable false ("|"+$nameLocator[0]+".rz");
setAttr -e -keyable false ("|"+$nameLocator[0]+".sx");
setAttr -e -keyable false ("|"+$nameLocator[0]+".sy");
setAttr -e -keyable false ("|"+$nameLocator[0]+".sz");
return $nameLocator[0];
};

//collision with one plane

global proc pseudoCollisionA(){

string $originName=makeLocator(0,5,0,"originL");
string $mainName=makeLocator(0,0,0,"mainL");

string $aName=makeLocator(4,-1,-1,"aL");
string $bName=makeLocator(-1,4,-1,"bL");
string $cName=makeLocator(-1,-1,4,"cL");

addAttr -at "float" -k 1 -ln length ("|"+$mainName);

addAttr -ln origin -at compound -nc 3 ("|"+$mainName);
addAttr -ln orx -at double -p origin ("|"+$mainName);
addAttr -ln ory -at double -p origin ("|"+$mainName);
addAttr -ln orz -at double -p origin ("|"+$mainName);

addAttr -ln pa -at compound -nc 3 ("|"+$mainName);
addAttr -ln pax -at double -p pa ("|"+$mainName);
addAttr -ln pay -at double -p pa ("|"+$mainName);
addAttr -ln paz-at double -p pa ("|"+$mainName);

addAttr -ln pb -at compound -nc 3 ("|"+$mainName);
addAttr -ln pbx -at double -p pb ("|"+$mainName);
addAttr -ln pby -at double -p pb ("|"+$mainName);
addAttr -ln pbz -at double -p pb ("|"+$mainName);

addAttr -ln pc -at compound -nc 3 ("|"+$mainName);
addAttr -ln pcx -at double -p pc ("|"+$mainName);
addAttr -ln pcy -at double -p pc ("|"+$mainName);
addAttr -ln pcz -at double -p pc ("|"+$mainName);


connectAttr -f ($originName+".translate") ($mainName+".origin");
connectAttr -f ($aName+".translate") ($mainName+".pa");
connectAttr -f ($bName+".translate") ($mainName+".pb");
connectAttr -f ($cName+".translate") ($mainName+".pc");

setAttr ($mainName+".length") 5;

string $uName;
$uName=uniqueName("collPlaneA");
string $plane[]=`polyCreateFacet -ch false -p 0 0 0 -p 0 0 0 -p 0 0 0 -n ($uName)`;
setAttr -lock true ($plane[0]+".translate");
setAttr -lock true ($plane[0]+".rotate");
setAttr -lock true ($plane[0]+".scale");

connectAttr ($aName+".translate") ($plane[0]+".pnts[0]");
connectAttr ($bName+".translate") ($plane[0]+".pnts[1]");
connectAttr ($cName+".translate") ($plane[0]+".pnts[2]");

string $line=`curve -d 1 -p 0 0 0 -p 0 1 0 `;
pointConstraint -w 1 ($originName) ($line);
aimConstraint -w 1 -aim 0 1 0 ($mainName) ($line);
connectAttr ($mainName+".length") ($line+".scaleY");


expression -s ("vector\t$interY,$interN,$onPlane;\r\n"+
"\r\n"+
"vector\t$a=<<pax,pay,paz>>;\r\n"+
"vector\t$b=<<pbx,pby,pbz>>;\r\n"+
"vector\t$c=<<pcx,pcy,pcz>>;\r\n"+
"vector\t$origin=<<orx,ory,orz>>;\r\n"+
"vector\t$normal;\r\n"+
"$normal=unit(cross(($c-$a),($b-$a)));\r\n"+
"\r\n"+
"if (dot($normal,($origin - $a))*dot($normal,($origin - <<0,length,0>> - $a))>0) {\r\n"+
"\ttx=orx;\r\n"+
"\tty=ory-length;\r\n"+
"\ttz=orz;\r\n\t}\r\n"+
"else\t{\r\n"+
"\t$interY=<<orx,pay-($normal.x*(orx-pax)+$normal.z*(orz-paz))/$normal.y,orz>>;\r\n"+
"\t$interN=$origin - (dot($normal,($origin-$a)))*$normal; \r\n"+
"\t$onPlane=$interN+sqrt(length*length - pow(mag($origin - $interN),2))*unit($interY-$interN);\r\n"+
"\ttx=$onPlane.x;\r\n\tty=$onPlane.y;\r\n"+
"\ttz=$onPlane.z;\r\n"+
"\t};") -o ("|"+$mainName) -n "collisionExp" -ae 1 -uc all ;
$uName=uniqueName("pseudoCollisionA");
string $groupName=`group -n ($uName) ($originName) ($mainName) ($aName) ($bName) ($cName) ($line) ($plane[0])`;
setAttr -e -lock true -k false ("|"+$groupName+".tx");
setAttr -e -lock true -k false ("|"+$groupName+".ty");
setAttr -e -lock true -k false ("|"+$groupName+".tz");

setAttr -e -lock true -k false ("|"+$groupName+".rx");
setAttr -e -lock true -k false ("|"+$groupName+".ry");
setAttr -e -lock true -k false ("|"+$groupName+".rz");

setAttr -e -lock true -k false ("|"+$groupName+".sx");
setAttr -e -lock true -k false ("|"+$groupName+".sy");
setAttr -e -lock true -k false ("|"+$groupName+".sz");


addAttr -ln length -k true -at "float" ("|"+$groupName);
setAttr ($groupName+".length") 5;
connectAttr -f ($groupName+".length") ($mainName+".length");

addAttr -k true -ln showComponent -at bool ("|"+$groupName);

setAttr ($groupName+".showComponent") true;
connectAttr -f ($groupName+".showComponent") ($line+".visibility");
connectAttr -f ($groupName+".showComponent") ($plane[0]+".visibility");
connectAttr -f ($groupName+".showComponent") ($originName+".visibility");
connectAttr -f ($groupName+".showComponent") ($mainName+".visibility");
connectAttr -f ($groupName+".showComponent") ($aName+".visibility");
connectAttr -f ($groupName+".showComponent") ($bName+".visibility");
connectAttr -f ($groupName+".showComponent") ($cName+".visibility");
};

//coliision with two plane

global proc pseudoCollisionB();{

string $originName=makeLocator(0,5,0,"originL");
string $mainName=makeLocator(0,0,0,"mainL");

string $aName=makeLocator(-5,0,0,"aL");
string $bName=makeLocator(5,0,0,"bL");
string $cName=makeLocator(0,3,2,"cL");

string $dName=makeLocator(-5,0,0,"dL");
string $eName=makeLocator(5,0,0,"eL");
string $fName=makeLocator(0,3,-2,"fL");


addAttr -at "float" -k 1 -ln length ("|"+$mainName);

addAttr -ln origin -at compound -nc 3 ("|"+$mainName);
addAttr -ln orx -at double -p origin ("|"+$mainName);
addAttr -ln ory -at double -p origin ("|"+$mainName);
addAttr -ln orz -at double -p origin ("|"+$mainName);

addAttr -ln pa -at compound -nc 3 ("|"+$mainName);
addAttr -ln pax -at double -p pa ("|"+$mainName);
addAttr -ln pay -at double -p pa ("|"+$mainName);
addAttr -ln paz-at double -p pa ("|"+$mainName);

addAttr -ln pb -at compound -nc 3 ("|"+$mainName);
addAttr -ln pbx -at double -p pb ("|"+$mainName);
addAttr -ln pby -at double -p pb ("|"+$mainName);
addAttr -ln pbz -at double -p pb ("|"+$mainName);

addAttr -ln pc -at compound -nc 3 ("|"+$mainName);
addAttr -ln pcx -at double -p pc ("|"+$mainName);
addAttr -ln pcy -at double -p pc ("|"+$mainName);
addAttr -ln pcz -at double -p pc ("|"+$mainName);

addAttr -ln pd -at compound -nc 3 ("|"+$mainName);
addAttr -ln pdx -at double -p pd ("|"+$mainName);
addAttr -ln pdy -at double -p pd ("|"+$mainName);
addAttr -ln pdz -at double -p pd ("|"+$mainName);

addAttr -ln pe -at compound -nc 3 ("|"+$mainName);
addAttr -ln pex -at double -p pe ("|"+$mainName);
addAttr -ln pey -at double -p pe ("|"+$mainName);
addAttr -ln pez -at double -p pe ("|"+$mainName);

addAttr -ln pf -at compound -nc 3 ("|"+$mainName);
addAttr -ln pfx -at double -p pf("|"+$mainName);
addAttr -ln pfy -at double -p pf("|"+$mainName);
addAttr -ln pfz -at double -p pf ("|"+$mainName);

connectAttr -f ($originName+".translate") ($mainName+".origin");
connectAttr -f ($aName+".translate") ($mainName+".pa");
connectAttr -f ($bName+".translate") ($mainName+".pb");
connectAttr -f ($cName+".translate") ($mainName+".pc");
connectAttr -f ($dName+".translate") ($mainName+".pd");
connectAttr -f ($eName+".translate") ($mainName+".pe");
connectAttr -f ($fName+".translate") ($mainName+".pf");

setAttr ($mainName+".length") 5;
string $uName;
$uName=uniqueName("collPlaneA");
string $planeA[]=`polyCreateFacet -ch false -p 0 0 0 -p 0 0 0 -p 0 0 0 -n ($uName)`;
setAttr -lock true ($planeA[0]+".translate");
setAttr -lock true ($planeA[0]+".rotate");
setAttr -lock true ($planeA[0]+".scale");

connectAttr ($aName+".translate") ($planeA[0]+".pnts[0]");
connectAttr ($bName+".translate") ($planeA[0]+".pnts[1]");
connectAttr ($cName+".translate") ($planeA[0]+".pnts[2]");
$uName=uniqueName("collPlaneB");
string $planeB[]=`polyCreateFacet -ch false -p 0 0 0 -p 0 0 0 -p 0 0 0 -n ($uName)`;
setAttr -lock true ($planeB[0]+".translate");
setAttr -lock true ($planeB[0]+".rotate");
setAttr -lock true ($planeB[0]+".scale");

connectAttr ($dName+".translate") ($planeB[0]+".pnts[0]");
connectAttr ($eName+".translate") ($planeB[0]+".pnts[1]");
connectAttr ($fName+".translate") ($planeB[0]+".pnts[2]");

string $line=`curve -d 1 -p 0 0 0 -p 0 1 0 `;
pointConstraint -w 1 ($originName) ($line);
aimConstraint -w 1 -aim 0 1 0 ($mainName) ($line);
connectAttr ($mainName+".length") ($line+".scaleY");

expression -s ( "vector\t$a=<<mainL.pax,mainL.pay,mainL.paz>>;\r\n"+
"vector\t$b=<<mainL.pbx,mainL.pby,mainL.pbz>>;\r\n"+
"vector\t$c=<<mainL.pcx,mainL.pcy,mainL.pcz>>;\r\n"+
"vector\t$d=<<mainL.pdx,mainL.pdy,mainL.pdz>>;\r\n"+
"vector\t$e=<<mainL.pex,mainL.pey,mainL.pez>>;\r\n"+
"vector\t$ff=<<mainL.pfx,mainL.pfy,mainL.pfz>>;\r\n"+
"\r\n"+
"vector\t$origin=<<mainL.orx,mainL.ory,mainL.orz>>;\r\n"+
"vector\t$normalA,$normalB;\r\n"+
"\r\n"+
"$normalA=unit(cross(($c-$a),($b-$a)));\r\n"+
"$normalB=unit(cross(($ff-$d),($e-$d)));\r\n"+
"vector\t$interY,$interN;\r\n"+
"vector\t$onPlaneA,$onPlaneB, $onLine;\r\n"+
"//collision with first plane\r\n"+
"if (dot($normalA,($origin - $a))*dot($normalA,($origin - <<0,mainL.length,0>> - $a))>0) {\r\n"+
"\t$onPlaneA=<<mainL.orx,mainL.ory-mainL.length,mainL.orz>>;\r\n"+
"\t}\r\n"+
"else\t{\r\n"+
"\t$interY=<<mainL.orx,mainL.pay-($normalA.x*(mainL.orx-mainL.pax)+$normalA.z*(mainL.orz-mainL.paz))/$normalA.y,mainL.orz>>;\r\n"+
"\t$interN=$origin - (dot($normalA,($origin-$a)))*$normalA; \r\n"+
"\t$onPlaneA=$interN+sqrt(mainL.length*mainL.length - pow(mag($origin - $interN),2))*unit($interY-$interN);\r\n"+
"\t};\r\n"+
"//collisuin with second plane\r\n"+
"if (dot($normalB,($origin - $d))*dot($normalB,($origin - <<0,mainL.length,0>> - $d))>0) {\r\n"+
"\t$onPlaneB=<<mainL.orx,mainL.ory-mainL.length,mainL.orz>>;\r\n"+
"\t}\r\n"+
"else\t{\r\n"+
"\t$interY=<<mainL.orx,mainL.pdy-($normalB.x*(mainL.orx-mainL.pdx)+$normalB.z*(mainL.orz-mainL.pdz))/$normalB.y,mainL.orz>>;\r\n"+
"\t$interN=$origin - (dot($normalB,($origin-$d)))*$normalB; \r\n"+
"\t$onPlaneB=$interN+sqrt(mainL.length*mainL.length - pow(mag($origin - $interN),2))*unit($interY-$interN);\r\n"+
"\t};\r\n"+
"\r\n"+
"//if first collision point over second plane \r\n"+
"if (dot($normalB,($origin - $d))*dot($normalB,($onPlaneA - $d))>0){\r\n"+
"\ttx=$onPlaneA.x;\r\n"+
"\tty=$onPlaneA.y;\r\n"+
"\ttz=$onPlaneA.z;\r\n"+
"\t}\r\n"+
"//if second collision point over first plane\r\n"+
"else{\r\n"+
"\ttx=$onPlaneB.x;\r\n"+
"\tty=$onPlaneB.y;\r\n"+
"\ttz=$onPlaneB.z;\r\n"+
"\t};\r\n"+
"//if first collision point under second plane and second collision point under first plane\r\n"+
"if ( (dot($normalB,($origin - $d))*dot($normalB,($onPlaneA - $d))<0)&&(dot($normalA,($origin - $a))*dot($normalA,($onPlaneB - $a))<0)){\r\n"+
"\tvector $line,$x,$y;\r\n"+
"\t$line=unit(cross($normalA,$normalB));\r\n"+
"\tif ($line.y>0)\r\n"+
"\t\t$line=-$line;\r\n"+
"\tfloat $delta=$normalA.x*$normalB.z-$normalA.z*$normalB.x;\r\n"+
"\tfloat $deltaX=dot($normalA,$a)*$normalB.z - dot($normalB,$d)*$normalA.z;\r\n"+
"\tfloat $deltaZ=dot($normalB,$d)*$normalA.x - dot($normalA,$a)*$normalB.x;\r\n"+
"\t$x=<<($deltaX/$delta),0,($deltaZ/$delta)>>;\r\n"+
"\t$y=$x+dot(($origin -$x),$line)*$line;\r\n"+
"\t$onLine=$y+sqrt(length*length-pow(mag($origin-$y),2) )*$line;\r\n"+
"\t\r\n"+
"\ttx=$onLine.x;\r\n"+
"\tty=$onLine.y;\r\n"+
"\ttz=$onLine.z;\r\n"+
"\t};\r\n") -o ("|"+$mainName) -n "collisionBExp" -ae 1 -uc all ;

$uName=uniqueName("pseudoCollisionB");
string $groupName=`group -n ($uName) ($originName) ($mainName) ($aName) ($bName) ($cName)
($dName) ($eName) ($fName) ($line) ($planeA[0]) ($planeB[0])`;
setAttr -e -lock true -k false ("|"+$groupName+".tx");
setAttr -e -lock true -k false ("|"+$groupName+".ty");
setAttr -e -lock true -k false ("|"+$groupName+".tz");

setAttr -e -lock true -k false ("|"+$groupName+".rx");
setAttr -e -lock true -k false ("|"+$groupName+".ry");
setAttr -e -lock true -k false ("|"+$groupName+".rz");

setAttr -e -lock true -k false ("|"+$groupName+".sx");
setAttr -e -lock true -k false ("|"+$groupName+".sy");
setAttr -e -lock true -k false ("|"+$groupName+".sz");


addAttr -ln length -k true -at "float" ("|"+$groupName);
setAttr ($groupName+".length") 5;
connectAttr -f ($groupName+".length") ($mainName+".length");

addAttr -k true -ln showComponent -at bool ("|"+$groupName);

setAttr ($groupName+".showComponent") true;
connectAttr -f ($groupName+".showComponent") ($line+".visibility");
connectAttr -f ($groupName+".showComponent") ($planeA[0]+".visibility");
connectAttr -f ($groupName+".showComponent") ($planeB[0]+".visibility");
connectAttr -f ($groupName+".showComponent") ($originName+".visibility");
connectAttr -f ($groupName+".showComponent") ($mainName+".visibility");
connectAttr -f ($groupName+".showComponent") ($aName+".visibility");
connectAttr -f ($groupName+".showComponent") ($bName+".visibility");
connectAttr -f ($groupName+".showComponent") ($cName+".visibility");
connectAttr -f ($groupName+".showComponent") ($dName+".visibility");
connectAttr -f ($groupName+".showComponent") ($eName+".visibility");
connectAttr -f ($groupName+".showComponent") ($fName+".visibility");
};

//main procedure

global proc pseudoCollision(){

waitCursor -state on;
string $window = "pseudoCollisionWindow";
if (!`window -exists $window`)
makePseudoCollisionWindow($window);

showWindow $window;
waitCursor -state off;
};


// GUI window

global proc makePseudoCollisionWindow(string $window){

window -title "Pseudo Collision Window"
-titleBar true
-minimizeButton true
-maximizeButton false
-sizeable true
$window;

columnLayout -rs 5 -adjustableColumn true;
radioButtonGrp -nrb 2 -cw3 200 50 50 -l "Number of collision plane " -la2 "1" "2" -sl 1 numberOfCollisionPlanesStr;
separator;
rowLayout -numberOfColumns 2
-adj 1
-columnAlign2 "center" "center"
-columnAttach2 "both" "both";
button
-l "Create "
-c "doPseudoCollision";
button
-l "Close"
-c ("window -e -vis 0 " + $window);
};

//------------------------------------------------------
global proc doPseudoCollision(){
int $numberOfCollisionPlane=`radioButtonGrp -q -sl numberOfCollisionPlanesStr`;
if ($numberOfCollisionPlane==1)
pseudoCollisionA;
else
pseudoCollisionB;
};
 
#2
Причем с Володей Забелиным долго тестировали отдельные куски поотдельности - все работает. Только соединяем все вместе - "национальная индейская изба" - ФИГ ВАМ!

:(((

Может в Реалтайм напрямую обратиться с Цыпцыным еще разглядеть его через лупу повнимательнее?
 
#3
Может вместо
global proc pseudoCollisionB();{
надо писать
global proc pseudoCollisionB(){

????
 
#4
правда непонятно какая работа может гореть из-за этого скрипта?
Псевдоколлижн - это конечно интересно, но только с теоретической стороны.На практике - Майа достаточно быстро своей динамикой отрабатывает такие вещи чтобы не заморачиваться на длинные скрипты.
Мне кажется...

Алексей
 
Рейтинг
64
#5
Ты явно не туда пришел 8))

По мелким скриптам есть конечно люди, но на такое как у тебя заморачивается только Забелин и Джосс. Если ты писал скрипт вместе с Забелиным и ничего не вышло, то кроме Птица тебе никто не поможет
 
#6
Fusion по-моему не врубился что тема-то уже закрыта и ответ получен... :)
 
Сверху