1. Пользоваться форумом на планшетах и телефонах стало удобнее благодаря Tapatalk

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

Тема в разделе "Maya", создана пользователем -, 23 июл 2003.

Модераторы: Dark™, Skif
  1. Guest

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

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

    Причем с Володей Забелиным долго тестировали отдельные куски поотдельности - все работает. Только соединяем все вместе - "национальная индейская изба" - ФИГ ВАМ!

    :(((

    Может в Реалтайм напрямую обратиться с Цыпцыным еще разглядеть его через лупу повнимательнее?
     
  3. Guest

    Может вместо
    global proc pseudoCollisionB();{
    надо писать
    global proc pseudoCollisionB(){

    ????
     
  4. Guest

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

    Алексей
     
  5. Fusion||Mind 215

    Fusion||Mind 215 Знаток

    С нами с:
    10.06.2000
    Сообщения:
    449
    Симпатии:
    0
    Баллы:
    64
    Ты явно не туда пришел 8))

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

    Fusion по-моему не врубился что тема-то уже закрыта и ответ получен... :)
     
  7. Guest

    Гусев - 5 баллов :)))
     
  8. Fusion||Mind 215

    Fusion||Mind 215 Знаток

    С нами с:
    10.06.2000
    Сообщения:
    449
    Симпатии:
    0
    Баллы:
    64
    Сорри, действительно неврубился 8).
     
  9. Guest

    Бывает...
     
Модераторы: Dark™, Skif

Поделиться этой страницей