Render.ru

Полезные скрипты

Рейтинг
40
#1
Делюсь разными скриптами. Может кому-то пригодится. Поделитесь и вы, если знаете что-то интересное.

Вызвать UV Editor, или свернуть уже открытый:
(у меня назначено на Alt + F3)
Код:
if (`window -ex polyTexturePlacementPanel1Window` == 1 && `window -q -i polyTexturePlacementPanel1Window` == 0)
window -e -i 1 polyTexturePlacementPanel1Window;
else if (`window -ex polyTexturePlacementPanel1Window` == 0)
TextureViewWindow;
else
window -e -i 0 polyTexturePlacementPanel1Window;
textureWindow -e -imageUnfiltered 1 polyTexturePlacementPanel1;

Вызвать Hypershade, или свернуть уже открытый:
(у меня назначено на Alt + F2)
Код:
if (`window -ex hyperShadePanel1Window` == 1 && `window -q -i hyperShadePanel1Window` == 0)
window -e -i 1 hyperShadePanel1Window;
else if (`window -ex hyperShadePanel1Window` == 0)
HypershadeWindow;
else
window -e -i 0 hyperShadePanel1Window;

Режим Wireframe:
(у меня назначено на 8)
Из скрипт эдитора не работает, только из полки или хоткея
Код:
$currentPanel = `getPanel -withFocus`;
$wosState = `modelEditor -q -wos $currentPanel`;
if ($wosState == 0)
{
modelEditor -edit -wos 1 $currentPanel;
}
else
{
modelEditor -edit -wos 0 $currentPanel;
};

Полоска с названием программы вкл/выкл
Код:
if (`window -q -titleBar $gMainWindow`) {
window -e -titleBar 0 $gMainWindow;
}
else {
window -e -titleBar 1 $gMainWindow;
}

Панель Status Line вкл/выкл:
Код:
toggleUIComponentVisibility "Status Line";

Панель Time Slider вкл/выкл:
Код:
toggleUIComponentVisibility "Time Slider";
toggleUIComponentVisibility "Range Slider";

Таймер выполнения скрипта, пишет результат в секундах:
Код:
$startTime = `timerX`;

// тут ваш скрипт

$elaspedTime = `timerX -startTime $startTime`;
print ("Time: "+$elaspedTime + " seconds");

Блокировка удаления истории для выделенного объекта (питон)
(для разблокировки lock=1 заменить на lock=0)
Код:
import pymel.core as pm

meshes = pm.selected()
for mesh in meshes:
shape = pm.listRelatives(mesh, shapes=1)[0]
pm.setAttr("%s.inMesh" % shape, lock=1)

import sys
sys.stdout.write('History Locked')

Дублирует объекты по поверхности (Аналог Scatter 3ds max)
Код:
#########################################################################################
###                           randomDuplicator_v01.00                                 ###
###                    Copyright (C) 2013   Ying Ying, Sun                            ###
###                                 2013/01/07                                        ###
###                           sunyingying@livemail.tw                                 ###
#########################################################################################
import maya.cmds as mc
import random, re
class randomDuplicator():
    #UI
    def __init__(self):
        if mc.window("randSelection", exists=True): mc.deleteUI("randSelection")
        mc.window("randSelection", t="randomDuplicator", w=405)
        mc.rowColumnLayout(nc=3,cal=[(1,"right")], cw=[(1,100),(2,200),(3,105)])
        mc.text(l="instanced objects ")
        mc.textField("sourceObj")
        mc.button("sourceButton", l="select", c=self.selSource)
        mc.text(l="target obj/Vertices ")
        mc.textField("targetObj")
        mc.button("targetButton", l="select", c=self.selTarget)
        mc.text(l="")
        mc.checkBox("orientation", l="oriented with target surface")
        mc.text(l="")
        mc.setParent("..")
        mc.rowColumnLayout(w=405)       
        mc.intSliderGrp("copyAmt", l="copyAmount ", v=10, cw3=[95,100,195], max=1000, fmx=1000, f=True)
        mc.floatFieldGrp("rotationCtrl", l="rotation", nf=3, v1=30, v2=30, v3=30, cw4=[95,100,100,100])
        mc.floatFieldGrp("scaleCtrl", l="scale", nf=3, v1=0, v2=0, v3=0, cw4=[95,100,100,100])
        mc.button("excute", l="duplicate", c=self.duplicate, w=390, al="right")
        mc.showWindow("randSelection")
    
    #select instancers, can be more than one
    def selSource(self,*args):
        self.sourceObjs= mc.ls(sl=True, tr=True)
        if len(self.sourceObjs) >= 1:
            txS=','.join(self.sourceObjs)
            mc.textField("sourceObj", tx=txS, edit=True)           
        else:
            mc.textField("sourceObj", tx="please select an object", edit=True)
    
    #target can be an obj or multiple vertices
    def selTarget(self,*args):
        self.targetObj = mc.ls(sl=True, tr=True)
        self.targetVertices = mc.ls(sl=True, type="float3")
        #when the user select an object
        if len(self.targetObj) == 1:
            self.txT= self.targetObj[0]           
            actVertics= mc.polyEvaluate(v=True)
            returnText=self.txT+"("+str(actVertics)+")"
            mc.textField("targetObj", edit=True, tx=returnText)
            self.vtxList=[v for v in range(actVertics)]
        #when the user select a vertic or vertices
        elif len(self.targetVertices)>= 1:
            self.txT= re.findall(r'(\w+)+\.*', self.targetVertices[0])[0]
            self.vtxList =[]
            for vtx in self.targetVertices:
                if re.search(r'\w+\.\w+\[(\d+):(\d+)\]', vtx):
                    match= re.findall(r'\w+\.\w+\[(\d+):(\d+)\]', vtx)[0]
                    for i in range(int(match[0]),int(match[1])+1 ):
                        self.vtxList.append(i)
                elif re.search(r'\w+\.\w+\[(\d+)\]', vtx):
                    match= re.findall(r'\w+\.\w+\[(\d+)\]', vtx)[0]
                    self.vtxList.append(int(match[0]))
            mc.textField("targetObj", edit=True, tx="%d vertics are selected"%len(self.vtxList))         
        #erro, when nothing was selected
        else:
            mc.textField("targetObj", tx="please select an object or vertices", edit=True)
    
    #duplicate and give random values to rotation/scale
    def duplicate(self,*args):
        rotateX, rotateY, rotateZ = mc.floatFieldGrp("rotationCtrl", v=True, q=True)
        scaleX, scaleY, scaleZ = mc.floatFieldGrp("scaleCtrl", v=True, q=True)       
        copyAmt= mc.intSliderGrp("copyAmt", v=True, q=True)
        groupList=[]
        if copyAmt > len(self.vtxList):
            copyAmt=len(self.vtxList)
        randList= random.sample(self.vtxList,copyAmt)
        for copy in range(copyAmt):
            orientationcheck= mc.checkBox("orientation", v=True, q=True)
            copyFrom= random.sample(self.sourceObjs,1)[0]
            newObj= mc.duplicate(copyFrom, n="%s_replica"%copyFrom, rr=True)[0]
            rotatePivot= mc.xform(newObj, rp=True, q=True)
            if orientationcheck == 1:
                mc.normalConstraint(self.txT, newObj, aim=(1,0,0), u=(0,1,0), wut="vector", wu=(0,1,0))       
            newP= mc.pointPosition("%s.vtx[%d]"%(self.txT,randList[copy]))
            setP=[newP[0]-rotatePivot[0],newP[1]-rotatePivot[1],newP[2]-rotatePivot[2]]
            mc.xform(newObj, a=True, t=tuple(setP))
            if orientationcheck == 1:
                mc.delete(newObj, constraints=True)
            orgRX, orgRY, orgRZ = mc.xform(newObj, ro=True, q=True)
            orgSX, orgSY, orgSZ = mc.getAttr(newObj+".scaleX"), mc.getAttr(newObj+".scaleY"), mc.getAttr(newObj+".scaleZ")
            newRX=random.uniform(orgRX-rotateX/2,orgRX+rotateX/2)
            newRY=random.uniform(orgRY-rotateY/2,orgRY+rotateY/2)
            newRZ=random.uniform(orgRZ-rotateZ/2,orgRZ+rotateZ/2)
            newSX=random.uniform(orgSX-scaleX/2,orgSX+scaleX/2)
            newSY=random.uniform(orgSY-scaleY/2,orgSY+scaleY/2)
            newSZ=random.uniform(orgSZ-scaleZ/2,orgSZ+scaleZ/2)           
            mc.xform(newObj, a=True, ro=(newRX, newRY, newRZ))
            mc.xform(newObj, a=True, s=(newSX, newSY, newSZ))
            groupList.append(newObj)
        mc.group(groupList,n="replicaGrp")
        
randomDuplicator()

Простое окно с кнопками, на его основе можно сделать свое меню:
Код:
if (`window -exists TUT`) deleteUI TUT;
window TUT;
columnLayout ;

button -w 200 -h 40 -l "hi" -c "AAA";
button -w 200 -h 40 -l "pi" -c "BBB";
button -w 200 -h 40 -l "pe" -c "CCC";


showWindow TUT;


proc AAA (){
    
   // you script 1 button;
   print ("hello");
    
}

proc BBB (){
    
    // you script 2 button;
    print ("biba");

}

proc CCC (){
    
    // you script 2 button;
    print ("peka");

}

Shaker объекта (рандом тряска для анимации)
Код:
/* This file downloaded from Highend3d.com
'' 
''  Highend3d.com File Information:
'' 
''    Script Name: SHaker
''    Author: greyskull
''    Last Updated: Sep 04, 2008
''    Update/Change this file at:
''    http://Highend3d.com/maya/downloads/mel_scripts/animation/2406.html
'' 
''  Please do not alter any information above this line
''  it is generated dynamically by Highend3d.com and will
''  be changed automatically on any updates.
*/
global proc string shGroupAndParent(string $child) {
    string $output;

    $output = `group -em -n ($child + "Shaker#")`;

    float $trans[] = `xform -q -ws -t $child`;
    float $rot[] = `xform -q -ws -ro $child`;

    setAttr ($output + ".translate") -type double3 $trans[0] $trans[1] $trans[2];
    setAttr ($output + ".rotate") -type double3 $rot[0] $rot[1] $rot[2];

    clear $trans;
    clear $rot;

    addAttr -ln "shaker"  -at "enum" -en "attributes:" $output;
    setAttr -e-keyable true ($output + ".shaker");
    setAttr -lock true ($output + ".shaker");

    addAttr -ln "magnitude"  -at double  -min 0 -dv 0 $output;
    setAttr -e-keyable true ($output + ".magnitude");

    addAttr -ln "frequency"  -at double3 $output;
    addAttr -ln "frequencyX"  -at double -p frequency $output;
    addAttr -ln "frequencyY"  -at double -p frequency $output;
    addAttr -ln "frequencyZ"  -at double -p frequency $output;
    setAttr -type double3 ($output + ".frequency") .5 2 1.333;
    setAttr -e-keyable true ($output + ".frequency");
    setAttr -e-keyable true ($output + ".frequencyX");
    setAttr -e-keyable true ($output + ".frequencyY");
    setAttr -e-keyable true ($output + ".frequencyZ");

    addAttr -ln "offset"  -at double3  $output;
    addAttr -ln "offsetX"  -at double -p offset $output;
    addAttr -ln "offsetY"  -at double -p offset $output;
    addAttr -ln "offsetZ"  -at double -p offset $output;
    setAttr -type double3 ($output + ".offset") 0 100 375;
    setAttr -e-keyable true ($output + ".offset");
    setAttr -e-keyable true ($output + ".offsetX");
    setAttr -e-keyable true ($output + ".offsetY");
    setAttr -e-keyable true ($output + ".offsetZ");

    parent $child $output;

    select $output;
    CenterPivot;

    return $output;
}

global proc int[] shTestAttrVector(string $child, string $attribute) {
// 0: attribute is good to go
// 1: attribute not found
// 2: attribute is locked
// 3: has an incoming connection already

    int $output[];
    string $tempCon[];
    string $attr[] = { ($attribute + "X"), ($attribute + "Y"), ($attribute + "Z") };

    if (`attributeExists $attr[0] $child` && `attributeExists $attr[1] $child` && `attributeExists $attr[2] $child`) {
        int $i;
        for ($i = 0; $i < 3; $i++) {
            if (`getAttr -l ($child + "." + $attr[$i])`) {
                $output[$i] = 2;
            } else {
                $tempCon = `listConnections ($child + "." + $attr[$i])`;

                if (size($tempCon) > 0) {
                    $output[$i] = 3;
                } else {
                    $output[$i] = 0;
                }

                clear $tempCon;
            }
        }
    } else {
        $output[0] = 1;
        $output[1] = 1;
        $output[2] = 1;
    }

    return $output;
    clear $output;
    clear $attr;
}

global proc shShaker() {
    string $sel[] = `ls -sl`;

    if (size($sel) < 1) {
        warning ("Select something!");
    } else {
        string $child = $sel[0];
        int $test[] = `shTestAttrVector $child "translate"`;

        int $check = $test[0] + $test[1] + $test[2];

        if ($check > 0) {
            warning ("Shaker has detected a problem with the translate attributes of " + $child + ". Missing, Locked or already Driven?");
        } else {
            string $shaker = `shGroupAndParent $child`;

            string $exp = "";
            string $expName = ($shaker + "EXP");
            expression -s "//" -o $shaker -n $expName -ae 1 -uc all;
            expression -e -s ("float $mag = " +  $shaker + ".magnitude;\r\nvector $freq = <<" + $shaker + ".frequencyX, " + $shaker + ".frequencyY, " + $shaker + ".frequencyZ>> * 2;\r\nvector $offs = <<" + $shaker + ".offsetX, " + $shaker + ".offsetY, " + $shaker + ".offsetZ>>;\r\n\r\nvector $shaker = $mag * <<noise(time * $freq.x + $offs.x), noise(time * $freq.y + $offs.y), noise(time * $freq.z + $offs.z)>>;\r\n\r\n" + $child + ".translateX = $shaker.x;\r\n" + $child + ".translateY = $shaker.y;\r\n" + $child + ".translateZ = $shaker.z;") -o $shaker -ae 1 -uc all $expName;
        }
    }

    clear $sel;
}

shShaker;
 
Г

Григорий Филипов

Guest
#2
Спасибо! класс!
вообще-то все находится в поиске, но ладно
/* This file downloaded from Highend3d.com
''
'' Highend3d.com File Information:
''
'' Script Name: follicle constraint
'' Author:
'' Last Updated: May 20, 2009
'' Update/Change this file at:
'' http://Highend3d.com/maya/downloads/mel_scripts/modeling/misc/5330.html
''
'' Please do not alter any information above this line
'' it is generated dynamically by Highend3d.com and will
'' be changed automatically on any updates.
*/
//////////////////////////////////////////////////////////////////////
//
// created by: Michael Paixao
//
// usefull for adding things like buttons and what-not,
// good in cloth sim objects, follicles follow normal angles!
//
// how-to:
// // polygons //
// select a vertex,UV,edge or face, or a couple
// run the tool... done!
// kinda...
// select the object you want to move and follow
// then connect any way you like (parent constraint etc..
//
// // NURBS //
// select either surface point or surface UV
// run the tool, same steps as polygons from here
//
//
// things that can cause problems are UV's on top of
// eachother
//
// questions, comments, or tool requests can be sent to:
//
// info@simpletofind.ca
//
//////////////////////////////////////////////////////////////////////
{
string $sel[];
string $buffer[];
int $token;
string $face[];
float $uvPos[];
ConvertSelectionToUVs;
$sel = `ls -sl -fl`;

// checks the if the group exists, then creates it if no, cleans it up as well //
if ( `objExists "follicleGroup"` == 0 )
{
select -cl;
group -em -n "follicleGroup";
setAttr -lock true -keyable false "follicleGroup.tx";
setAttr -lock true -keyable false "follicleGroup.ty";
setAttr -lock true -keyable false "follicleGroup.tz";
setAttr -lock true -keyable false "follicleGroup.rx";
setAttr -lock true -keyable false "follicleGroup.ry";
setAttr -lock true -keyable false "follicleGroup.rz";
setAttr -lock true -keyable false "follicleGroup.sx";
setAttr -lock true -keyable false "follicleGroup.sy";
setAttr -lock true -keyable false "follicleGroup.sz";
}
for ( $uv in $sel )
{

// finds the source obj for the UV and its current UV map //
$token = `tokenize $uv "." $buffer`;
select -r $buffer[0];
pickWalk -d down;
$inObj = `ls -sl`;
$foll = `createNode follicle`;
select -r $foll;
pickWalk -d up;
$follTop = `ls -sl`;

// makes the necessary connections for the follicle to follow the mesh //

// nurbs vs poly //
if ( `attributeExists "outMesh" $inObj[0]`)
{
eval("connectAttr -f "+$inObj[0]+".outMesh "+$foll+".inputMesh\;");
select -r $uv;
$uvPos = `polyEditUV -q`;
}

if ( `attributeExists "local" $inObj[0]`)
{
eval("connectAttr -f "+$inObj[0]+".local "+$foll+".inputSurface\;");
select -r $uv;
$uvPos = `nurbsEditUV -q`;
$size = `size $uvPos`;
if($size == 0)
{
int $token, $token2;
string $buffer[], $buffer2[];
$token = `tokenize $uv "[]" $buffer`;

$uMa = `ls -sl -o`;
select -r ($uMa[0] + ".u[99999999]");
string $uMax[] = `ls -sl`;
$token2 = `tokenize $uMax[0] "[]" $buffer2`;
float $uFloat = $buffer2[$token2-1];
$uFloat = $uFloat;

$vMa = `ls -sl -o`;
select -r ($vMa[0] + ".v[99999999]");
string $vMax[] = `ls -sl`;
$token2 = `tokenize $vMax[0] "[]" $buffer2`;
float $vFloat = $buffer2[$token2-1];
$vFloat = $vFloat;

float $uLoc = $buffer[$token-2];
float $vLoc = $buffer[$token-1];

print ($uLoc / $uFloat);print "\n";
print ($vLoc / $vFloat);print "\n";
$uvPos[0] = $uLoc / $uFloat;
$uvPos[1] = $vLoc / $vFloat;

}
}

eval("connectAttr -f "+$inObj[0]+".worldMatrix "+$foll+".inputWorldMatrix\;");
eval("connectAttr -f "+$foll+".outTranslate "+$follTop[0]+".translate\;");
eval("connectAttr -f "+$foll+".outRotate "+$follTop[0]+".rotate\;");


setAttr ($foll+".parameterU") $uvPos[0];
setAttr ($foll+".parameterV") $uvPos[1];


// parents the follicle into the follicleGroup //
select -r $follTop[0];
select -tgl "follicleGroup";
parent;
}
select -r $sel;
}

///////////////////////////////////////////
// BRUTE FORCE TRAIL 1.3 //
// --------------------------------------//
// + vertex trail //
// + selected timerage //
// + empty selection check //
///////////////////////////////////////////

global string $BF_selected[];
global string $lssl[];
global string $AmountOfValues[];
global int $Obj_vs_Vertex;
global int $currentLeft;
global int $currentRight;

if(`objExists "BF_trail"`) {delete BF_trail;}
if(`objExists "*locatorForTrail*"`) {delete "*locatorForTrail*";}
if(`objExists "*locatorForTrail_update*"`) {delete "*locatorForTrail_update*";}

//time range
global string $gPlayBackSlider;
int $currentLeft, $currentRight;

float $Range[] = `timeControl -q -ra $gPlayBackSlider`;
$RangeStart = $Range[1] - $Range[0];

if($RangeStart == 1)
{$currentLeft = `playbackOptions -q -min`;$currentRight = `playbackOptions -q -max`;}
else
{$currentLeft = $Range[0]; $currentRight = $Range[1];}

//empty selection check
$lssl = `ls -sl`;
$SelectionAmount = size($lssl);
if ($SelectionAmount >= 1) {$BF_selected[0] = $lssl[0]; BF_trail_init;}

//vertex/object selection check
proc BF_trail_init()
{
global string $BF_selected[];
global string $lssl[];
global int $Obj_vs_Vertex;

print $BF_selected[0];
string $AmountOfValues[];
int $Obj_vs_Vertex = `tokenize $lssl[0] "[" $AmountOfValues`;
BF_trail_delete;
if ($Obj_vs_Vertex == 2)
{
//create locator
spaceLocator -n locatorForTrail_vertex;
setAttr "locatorForTrail_vertex.visibility" 0;
select -r $BF_selected[0] locatorForTrail_vertex;
doCreatePointOnPolyConstraintArgList 1 { "0","0","0","1","","1" }; $BF_selected[0] = "locatorForTrail_vertex"; toggleSelMode;
BF_trail;
}
if ($Obj_vs_Vertex == 1) {BF_trail;}
}



//delete
proc BF_trail_delete()
{
if(`objExists "BF_trail"`) {delete BF_trail;}
if(`objExists "locatorForTrail*"`) {delete "locatorForTrail*";}
}

//delete_panel
proc BF_trail_delete_panel()
{
if(`objExists "BF_trail"`) {delete BF_trail;}

if ((`window -ex BF_Trail`)==true)
deleteUI BF_Trail;
}


//////////////////////////////////_____BRUTE FORCE TRAIL______/////////////////////////////////////
global proc BF_trail()
{
global string $BF_selected[];
global int $currentLeft;
global int $currentRight;
BF_trail_panel;
string $currentPanel = `getPanel -wf`;

// create null
spaceLocator -n locatorForTrail;

// create null for update
spaceLocator -n locatorForTrail_update;
select -r $BF_selected[0] locatorForTrail_update;
pointConstraint -n BFtrailConstrain_update -offset 0 0 0 -weight 1;

//hide nulls
setAttr "locatorForTrail.visibility" 0;
setAttr "locatorForTrail_update.visibility" 0;

//select null and object
select -r $BF_selected[0] locatorForTrail;
pointConstraint -n BFtrailConstrain -offset 0 0 0 -weight 1;

//isolate
string $panelAr[]=`getPanel -type modelPanel`;
for($i=0;$i<size($panelAr);$i++)
{isolateSelect -state 1 $panelAr[$i];}

bakeResults
-simulation true
-t ($currentRight+":"+$currentLeft)
-sampleBy 1
-disableImplicitControl true
-preserveOutsideKeys true
-sparseAnimCurveBake false
-removeBakedAttributeFromLayer
false -bakeOnOverrideLayer false
-minimizeRotation true
-at "tx"
-at "ty"
-at "tz"
locatorForTrail;

//unisolate
string $panelAr[]=`getPanel -type modelPanel`;
for($i=0;$i<size($panelAr);$i++)
{isolateSelect -state 0 $panelAr[$i];}

//// select null
select -r locatorForTrail;

//unhide motiontrails
string $currentPanel = `getPanel -wf`;
if ($currentPanel != "graphEditor1" && $currentPanel != "outlinerPanel1" && $currentPanel != "scriptEditorPanel1") {modelEditor -e -motionTrails 1 $currentPanel;}

// motion trail
snapshot -name "BruteForceTrail" -motionTrail 1 -increment 1 -startTime $currentLeft -endTime $currentRight;

//create group
if(`objExists "locatorForTrail_vertex"`) {select -r locatorForTrail locatorForTrail_update BruteForceTrailHandle locatorForTrail_vertex; group -n BF_trail;}

else {select -r locatorForTrail locatorForTrail_update BruteForceTrailHandle; group -n BF_trail;}

// trail options
setAttr "BruteForceTrailHandleShape.trailColor" -type double3 0.509804 0.101961 0.130053 ;
setAttr "BruteForceTrailHandleShape.keyframeColor" -type double3 1 1 1 ;
setAttr "BruteForceTrailHandleShape.pinned" 1;
setAttr "BruteForceTrailHandleShape.showFrames" 1;
setAttr "BruteForceTrailHandleShape.xrayDraw" 1;
setAttr "BruteForceTrailHandleShape.showFrameMarkers" 0;
setAttr "BruteForceTrailHandleShape.showFrameMarkerFrames" 0;
setAttr "BruteForceTrailHandleShape.showInTangent" 0;
setAttr "BruteForceTrailHandleShape.showOutTangent" 0;
setAttr "BruteForceTrailHandleShape.showInBead" 0;
setAttr "BruteForceTrailHandleShape.showOutBead" 0;
setAttr "BruteForceTrailHandleShape.modifyKeys" 0;

select -r $BF_selected[0];
}


//Create panel
proc BF_trail_panel()
{
if ((`window -ex BF_Trail`)==true)
deleteUI BF_Trail;
string $window = `window -toolbox 1 -t "BFtrail v1.3" -wh 100 100 -s 1 BF_Trail`;
rowColumnLayout;
rowLayout -nc 2 -cw 30 30 ;
setParent..;
columnLayout -adj 1;
rowColumnLayout -nc 2;
button -l "Update" -command "BF_update_button" -bgc .8 .8 .8 -w 80 -h 50;
button -l "Delete" -c "BF_trail_delete_panel" -h 40 -w 80 -bgc .22 .22 .22;
setParent..;
setParent..;
setParent..;
showWindow BF_Trail;
scriptJob -p BF_Trail -cu true -e "idle" "BF_trail_update";
}

//Update_button
global proc BF_update_button()
{
string $TempSelect[]=`ls -sl`;
global string $lssl[];
global string $BF_selected[];
global int $Obj_vs_Vertex;
BF_trail_delete_panel;
if ($Obj_vs_Vertex==2){$BF_selected[0] = $lssl[0]; select -r $lssl[0]; toggleSelMode; BF_trail_init; select -r $TempSelect;}
if ($Obj_vs_Vertex==1){select -r $lssl[0]; BF_trail_init; select -r $TempSelect;}
}

//update_proc
proc BF_trail_update()
{
float $WorldTr[];
$WorldTr = `xform -q -ws -t locatorForTrail_update`;
setAttr "locatorForTrail.translateX" $WorldTr[0];
setAttr "locatorForTrail.translateY" $WorldTr[1];
setAttr "locatorForTrail.translateZ" $WorldTr[2];
}
Поддержу ТС_а

// Copyright (C) 2000-2001 Michael Bazhutkin - Copyright (C) 2000 studio Klassika
// www.geocites.com/bazhutkin
// bazhutkin@mail.ru
//
// Rivet (button) 1.0
// Script File
// MODIFY THIS AT YOUR OWN RISK
//
// Creation Date: April 13, 2001
//
//
// Description:
// Use "Rivet" to constrain locator to polygon or NURBS surfaces
// Select two edges on polygon object
// or select one point on NURBS surface and call rivet
// Parent your rivets and buttons to this locator

global proc string rivet ( )
{

string $nameObject;
string $namePOSI;

string $parts[];
string $list[] = `filterExpand -sm 32`;
int $size = size($list);
if ($size > 0)
{
if ($size != 2)
{ error("No two edges selected");
return "";
}

tokenize($list[0],".",$parts);
$nameObject = $parts[0];
tokenize($list[0],"[]",$parts);
float $e1 = $parts[1];
tokenize($list[1],"[]",$parts);
float $e2 = $parts[1];

string $nameCFME1 = `createNode curveFromMeshEdge -n "rivetCurveFromMeshEdge1"`;
setAttr ".ihi" 1;
setAttr ".ei[0]" $e1;
string $nameCFME2 = `createNode curveFromMeshEdge -n "rivetCurveFromMeshEdge2"`;
setAttr ".ihi" 1;
setAttr ".ei[0]" $e2;
string $nameLoft = `createNode loft -n "rivetLoft1"`;
setAttr -s 2 ".ic";
setAttr ".u" yes;
setAttr ".rsn" yes;

$namePOSI = `createNode pointOnSurfaceInfo -n "rivetPointOnSurfaceInfo1"`;
setAttr ".turnOnPercentage" 1;
setAttr ".parameterU" 0.5;
setAttr ".parameterV" 0.5;

connectAttr -f ($nameLoft + ".os") ($namePOSI + ".is");
connectAttr ($nameCFME1 + ".oc") ($nameLoft + ".ic[0]");
connectAttr ($nameCFME2 + ".oc") ($nameLoft + ".ic[1]");
connectAttr ($nameObject + ".w") ($nameCFME1 + ".im");
connectAttr ($nameObject + ".w") ($nameCFME2 + ".im");
}
else
{ $list = `filterExpand -sm 41`;
$size = size($list);

if ($size > 0)
{
if ($size != 1)
{ error("No one point selected");
return "";
}
tokenize($list[0],".",$parts);
$nameObject = $parts[0];
tokenize($list[0],"[]",$parts);
float $u = $parts[1];
float $v = $parts[2];
$namePOSI = `createNode pointOnSurfaceInfo -n "rivetPointOnSurfaceInfo1"`;
setAttr ".turnOnPercentage" 0;
setAttr ".parameterU" $u;
setAttr ".parameterV" $v;
connectAttr -f ($nameObject + ".ws") ($namePOSI + ".is");
}
else
{ error("No edges or point selected");
return "";
}
}

string $nameLocator = `createNode transform -n "rivet1"`;
createNode locator -n ($nameLocator + "Shape") -p $nameLocator;

string $nameAC = `createNode aimConstraint -p $nameLocator -n ($nameLocator + "_rivetAimConstraint1")`;
setAttr ".tg[0].tw" 1;
setAttr ".a" -type "double3" 0 1 0;
setAttr ".u" -type "double3" 0 0 1;
setAttr -k off ".v";
setAttr -k off ".tx";
setAttr -k off ".ty";
setAttr -k off ".tz";
setAttr -k off ".rx";
setAttr -k off ".ry";
setAttr -k off ".rz";
setAttr -k off ".sx";
setAttr -k off ".sy";
setAttr -k off ".sz";

connectAttr ($namePOSI + ".position") ($nameLocator + ".translate");
connectAttr ($namePOSI + ".n") ($nameAC + ".tg[0].tt");
connectAttr ($namePOSI + ".tv") ($nameAC + ".wu");
connectAttr ($nameAC + ".crx") ($nameLocator + ".rx");
connectAttr ($nameAC + ".cry") ($nameLocator + ".ry");
connectAttr ($nameAC + ".crz") ($nameLocator + ".rz");

select -r $nameLocator;
return ($nameLocator);

}

rivet;
как я понял, он все равно быстрее модного из 20 майки, кажется быстрее работает если скрыть финальные объекты. А вот ривету из меню без разницы скрыто или нет. могу ошибаться
 
Последнее редактирование:
Рейтинг
40
#3
Инструмент создания шлангов, проводов. (Обзор на ютубе)
После установки не забыть включить в Plug-in менеджере, называется wire.py
Появится тут: Create - Wire Tools
Выделяем кривую, применяем вире тулз.
 

Вложения

Рейтинг
40
#4
Для того чтобы Output Window не открывался при запуске Maya, допишите
-hideConsole в ярлыке программы, в поле объект, выглядит строка примерно так:
"C:\Program Files\Autodesk\Maya2018\bin\maya.exe" -hideConsole
Screenshot_1.jpg
 
Рейтинг
40
#5
Назначил удаление истории на Alt+2 и сброс выделения на Alt+1
Пользуюсь второй месяц, очень удобно, рекомендую.
 
Г

Григорий Филипов

Guest
#6
а я удаляю историю кнопочкой мышкой. так у меня тактильная уверенность в том что она удалилась.
у людей скорость высокая не из-за кнопочек, все дело в том, что они не ошибаются
 
Рейтинг
40
#8
Настройка отображения сглаженной модели (когда моделим под сабдив и нажимаем "1" или "3")
Скрипт открывает окно с тремя кнопками — lvl2, lvl3, lvl4
Код:
if (`window -exists TUTs`) deleteUI LVL;
window LVL;
columnLayout ;

button -w 200 -h 40 -l "lvl 2" -c "AAA";
button -w 200 -h 40 -l "lvl 3" -c "BBB";
button -w 200 -h 40 -l "lvl 4" -c "CCC";

showWindow LVL;




proc AAA (){
   // you script 1 button;

string $sel[]=`ls -sl`;
for ($each in $sel)
{ setAttr ($each+".smoothLevel") 2;}
    print ("lvl 2");
}




proc BBB (){
  // you script 2 button;

string $sel[]=`ls -sl`;
for ($each in $sel)
{ setAttr ($each+".smoothLevel") 3;}
    print ("lvl 3");
}




proc CCC (){
    // you script 2 button;

string $sel[]=`ls -sl`;
for ($each in $sel)
{ setAttr ($each+".smoothLevel") 4;}
    print ("lvl 4");

}
 
Сверху