- Рейтинг
- 40
Делюсь разными скриптами. Может кому-то пригодится. Поделитесь и вы, если знаете что-то интересное.
Вызвать UV Editor, или свернуть уже открытый:
(у меня назначено на Alt + F3)
Вызвать Hypershade, или свернуть уже открытый:
(у меня назначено на Alt + F2)
Режим Wireframe:
(у меня назначено на 8)
Полоска с названием программы вкл/выкл
Панель Status Line вкл/выкл:
Панель Time Slider вкл/выкл:
Таймер выполнения скрипта, пишет результат в секундах:
Блокировка удаления истории для выделенного объекта (питон)
(для разблокировки lock=1 заменить на lock=0)
Дублирует объекты по поверхности (Аналог Scatter 3ds max)
Простое окно с кнопками, на его основе можно сделать свое меню:
Shaker объекта (рандом тряска для анимации)
Вызвать 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;