import maya.mel
gGuiStartupTime = maya.mel.eval("$temp = $gGuiStartupTime")
t = pm.timerX(startTime=gGuiStartupTime)
print ('Maya使用時間 '+str(t/3600)+'時間 '+str(t/60%60)+'分')
for f in dir(pymel.core):
if 'get' in f:
print f
for i in range(1,11):
pm.importFile("X:/maya/tmp"+str(i)+".obj")
pm.renameFile('test.ma')
pm.saveFile(type='mayaAscii')
任意のディレクトリ(フォルダ)に保存する場合。
pm.renameFile('X:/tmp/test.mb')
pm.saveFile()
s='-p -1 0 -1 -p 1 0 -1 -p 1 0 1 -p -1 0 1 -p -1 0 -1' p = [float(x) for x in s.split() if x != '-p'] print [p[3*i:3*i+3] for i in range(len(p)/3)]このスクリプトをスクリプトエディタで実行すると [[-1.0, 0.0, -1.0], [1.0, 0.0, -1.0], [1.0, 0.0, 1.0], [-1.0, 0.0, 1.0], [-1.0, 0.0, -1.0]] という文字列がヒストリペインに表示される。
pm.sphere() pm.refresh() pm.pause(sec=5) pm.cone()
パーティクル Dynamics/Solvers__Create_Particle_Disk_Cache_.html
import pymel.core as pm
sp = pm.spaceLocator(p=(0, 0, 0))
lname = pm.PyNode(sp)
sname = pm.sphere()
pm.move([1, 2, 3])
sph = pm.listRelatives(sname[0], s=True)
cpm = pm.createNode('closestPointOnSurface')
sph[0].ws >> cpm.inputSurface
lname.t >> cpm.inPosition
p = cpm.p.get()
pm.move(lname, p)
import pymel.all as all all.optionVar['tmpVar'] = 3.5tmpVar を参照。
for f in pm.selected():
if 'default' in f.name():
print f
以下のtobjにはpymel.core.nodetypes.Transformのオブジェクトが入っているとする。
obj, obj1, obj2などはpymel.core.nodetypesのオブジェクトである。
for s in pm.selected():
if s.type() == 'joint':
print s + ' is joint'
または
for s in pm.selected():
if s.nodeType() == 'joint':
print s + ' is joint'
または
for s in pm.selected():
if pymel.core.nodetypes.Joint == type(s):
print s + ' is joint'
def newObjExists(name):
return pm.objExists(name) | pm.objExists('*:' + name)
ネームスペース付も含めてオブジェクトのリストを返すコマンド。
import pymel.core as pm sel = pm.selected() sl = sel[1].getShape() pm.parent(sl, sel[0], s=True, add=True) pm.delete(sel[1])
以下のtobjにはpymel.core.nodetypes.Transformのオブジェクトが入っているとする。
obj, obj1, obj2などはpymel.core.nodetypesのオブジェクトである。
import pymel.core as pm
def limitTranslateValue(v):
objs = []
for n in pm.selected(tr=True):
t = n.t.get()
xyz = ['tx', 'ty', 'tz']
t = [(xyz[i],a) for i,a in enumerate(t) if a > v]
objs.append((n.name(), t))
return objs
print limitTranslateValue(1)
[(u'pSphere1', [('tx', 4.688991273300879)]), (u'nurbsSphere1', [('ty', 2.0), ('tz', 3.0)]), (u'nurbsSphere2', [('ty', 2.0), ('tz', 3.0)]), (u'nParticle1', []), (u'nucleus1', [])]
import pymel.core.datatypes as dt
s = pm.PyNode('nurbsSphere1')
p = dt.Point((1, 2, 3))
s.setCV(2, 3, p)
import pymel.core.datatypes as dt
c = pm.PyNode('curve1')
p = dt.Point((1, 2, 3))
c.setCV(1, p, space='world')
from random import uniform
import pymel.core as pm
def rand3(min, max):
return [uniform(min, max) for i in range(3)]
s,m = pm.cylinder()
for cv in s.cv:
pm.move(cv, rand3(-0.3, 0.3), r=True)
import pymel.core.datatypes as dt
p1= pm.PyNode('pSphere1')
p = dt.Point((1, 2, 3))
p1.setPoint(2, p)
normals = []
for f in pm.polyInfo(obj.f, faceNormals=True):
normals.append([float(i) for i in f.split()[-3:]])
def findNPolygon1(n=3):
ps = pm.selected()
return [f for f in ps[0].f if len(f.getEdges()) == n]
def findNPolygon2(n=3):
ps = pm.selected()
return [f for f in ps[0].f if len(f.getEdges()) > n]
def splitNPolygonFace(n):
for f in findNPolygon2(n):
pm.setToolTo('polySplitContext')
pm.select(f)
pm.viewFit('persp')
return
p,m = pm.polySphere(sx=7, sy=7, r=3)
for f in p.f:
pm.polyExtrudeFacet(f)
n = f.getNormal()
pm.move(f, n, r=True)
ref = obj.referenceFile()
if ref: # リファレンスでなければNone
print ref.path
with pm.window():
with pm.autoLayout():
mp = pm.modelPanel(camera='top')
mp.setCamera('front')
パネルの名前がわかっている場合は以下のコマンド。
import pymel.core as pm
p1 = pm.xform('joint1', q=True, ws=True, t=True)
p2 = pm.xform('joint2', q=True, ws=True, t=True)
dname = pm.distanceDimension(sp=p1, ep=p2)
print dname.dist.get()
ベクトルを使う方法
import pymel.core.datatypes as dt
p1 = pm.xform('joint1', q=True, ws=True, t=True)
p2 = pm.xform('joint2', q=True, ws=True, t=True)
v1 = dt.Vector(p1)
v2 = dt.Vector(p2)
print v1.distanceTo(v2)
lambert1 = pm.PyNode('lambert1')
lambert1.color.set(1, 0, 0)
import pymel.core as pm
sname = pm.sphere()
shname = pm.shadingNode('blinn', asShader=True)
sgname = pm.sets(renderable=True, noSurfaceShader=True, empty=True)
pm.connectAttr(shname + '.outColor', sgname + '.surfaceShader', f=True)
pm.select(sname[0])
pm.sets(sgname, e=True, forceElement=True)
mentalrayのmia_materialをアサインするスクリプト。
import pymel.core as pm
sname = pm.sphere()
shname = pm.shadingNode('mia_material', asShader=True)
sgname = pm.sets(renderable=True, noSurfaceShader=True, empty=True)
pm.connectAttr(shname + '.diffuse', sgname + '.surfaceShader', f=True)
pm.select(sname[0])
pm.sets(sgname, e=True, forceElement=True)
name = pm.ls(sl=True, type='file')
fn = [n.fileTextureName.get() for n in name]
os.chdir('C:/Program Files/Adobe/Adobe Photoshop CC 2015');
fn = [f.replace('/', '\\') for f in fn]
fn = ' '.join(fn)
os.system('start Photoshop ' + fn)
| 画像フォーマット | 番号 |
|---|---|
| GIF | 0 |
| SI | 1 |
| RLA | 2 |
| Tiff | 3 |
| Tiff16 | 4 |
| SGI | 5 |
| Alias | 6 |
| IFF | 7 |
| JPEG | 8 |
| EPS | 9 |
| IFF16 | 10 |
| Cineon | 11 |
| Quantel | 12 |
| SGI16 | 13 |
| TARGA | 19 |
| BMP | 20 |
| SGIMV | 21 |
| QT | 22 |
| AVI | 23 |
| MACPAINT | 30 |
| PHOTOSHOP | 31 |
| PNG | 32 |
| QUICKDRAW | 33 |
| QTIMAGE | 34 |
| DDS | 35 |
| DDS | 36 |
| IMFplugin | 50 |
| Custom | 51 |
| SWF | 60 |
| AI | 61 |
| SVG | 62 |
| SWFT | 63 |
drg = pm.PyNode('defaultRenderGlobals')
drg.animation.set(1)
drg.putFrameBeforeExt.set(1)
drg.periodInExt.set(1)
if drg.outFormatControl.get() == 1:
drg.outFormatControl.set(0)
drg.extensionPadding.set(4)
drg.startFrame.set(1)
drg.endFrame.set(300)
def makeMyWindow():
name = 'myWindow'
if pm.window(name, ex=True):
pm.deleteUI(name)
with pm.window(name):
with pm.autoLayout():
pm.button()
makeMyWindow()
import pymel.core as pm
with pm.window() as win:
with pm.autoLayout():
pm.button()
pm.showSelectionInTitle(win)
import pymel.core as pm
with pm.window() as win:
with pm.autoLayout():
pm.text(label='Window1')
with pm.window():
with pm.autoLayout():
pm.button(label='Window1の表示・非表示', command=pm.Callback(pm.toggleWindowVisibility, win))
for w in pm.lsUI(windows=True):
pm.window(w, e=True, tlc=(100, 100))
位置をずらしながら並べるバージョン
import pymel.core as pm
def moveAllWindows():
x = 100
y = 100
for w in pm.lsUI(windows=True):
pm.window(w, e=True, tlc=(x, y))
x += 50
y += 50
moveAllWindows()
import pymel.core as pm
names = pm.resourceManager(nameFilter='*.png')
with pm.window(w=1024, h=768):
with pm.scrollLayout():
for i in range(30):
with pm.horizontalLayout():
for j in range(50):
pm.iconTextButton(w=32, h=32, i=names[50*i+j])
違うバージョン
import pymel.core as pm
def dispPngName(tf, img):
tf.setText(img)
names = pm.resourceManager(nameFilter='*.png')
with pm.window():
with pm.columnLayout(adj=True):
tf = pm.textField()
with pm.scrollLayout():
size = len(names)
it = iter(names)
for i in range(size/50+1):
with pm.horizontalLayout():
for j in range(50):
try:
p = it.next()
except:
break
pm.iconTextButton(w=32, h=32, i=p, c=pm.Callback(dispPngName, tf, p))
import pymel.core as pm
with pm.window():
with pm.autoLayout():
op = pm.outlinerPanel()
oe = op.getOutlinerEditor()
pm.outlinerEditor(oe, edit=True, showShapes=True)
import pymel.core as pm
win = pm.window()
with win:
layout = pm.horizontalLayout()
with layout:
pm.button()
pm.button()
pm.button()
import pymel.core as pm
with pm.window():
with pm.columnLayout():
with pm.horizontalLayout():
pm.button()
pm.button()
pm.button()
with pm.horizontalLayout():
pm.button()
pm.button()
pm.button()
import pymel.core as pm
def test1(str):
print str
with pm.window():
with pm.columnLayout():
pm.button(command=pm.Callback(test1, 'name'))
import pymel.core as pm
with pm.window():
with pm.formLayout() as form:
pic1 = pm.picture(image='X:/tmp/madras.png')
i1 = pm.iconTextButton(w=33, h=33, style='iconOnly', image1='sphere.xpm')
pm.formLayout(form, edit=True,
attachForm=((pic1, 'top', 0),
(pic1, 'left', 0),
(i1, 'top', 50),
(i1, 'left', 50)),
attachNone=((pic1, 'bottom'),
(pic1, 'right'),
(i1, 'bottom'),
(i1, 'right')))
import pymel.core as pm
def changeMinValue():
v = pm.floatField('myMinField', q=True, value=True)
pm.floatField('myInputField', e=True, min=v)
def changeMinValueByButton():
v = pm.floatField('myInputField', q=True, value=True)
pm.floatField('myMinField', e=True, value=v)
pm.floatField('myInputField', e=True, min=v)
with pm.window():
with pm.horizontalLayout():
pm.floatField('myMinField', cc=pm.Callback(changeMinValue))
pm.button(label=' < ', c=pm.Callback(changeMinValueByButton))
pm.floatField('myInputField', min=0)
スクリプトの実行結果
import os
import pymel.core as pm
def optionMenuSample1(location):
num = pm.optionMenu('brushesOptionMenu', q=True, ni=True)
fname = pm.optionMenu('foldersOptionMenu', q=True, v=True)
names = pm.getFileList(fld=location + fname + '/', fs='*.mel')
for i,n in enumerate(names):
if i < num:
pm.menuItem('brushesMenuItem' + str(i), e=True, label=n)
else:
pm.menuItem('brushesMenuItem' + str(i), p='brushesOptionMenu', label=n)
for j in range(i, num):
pm.deleteUI('brushesMenuItem' + str(i))
with pm.window():
with pm.autoLayout():
location = os.environ.get('MAYA_LOCATION')
location += '/brushes/'
pm.optionMenu('foldersOptionMenu', label='Folders', cc=pm.Callback(optionMenuSample1, location))
names = pm.getFileList(fld=location, fs='*')
for n in names:
pm.menuItem(label=n)
pm.optionMenu('brushesOptionMenu', label='Brushes')
names = pm.getFileList(fld=location + names[0] + '/', fs='*.mel')
for i,n in enumerate(names):
pm.menuItem('brushesMenuItem' + str(i), label=n)
import pymel.core as pm
with pm.window():
with pm.autoLayout():
colorPalette = pm.palettePort(dimensions=(16, 2),
width=16 * 20,
height=2 * 20,
transparent=0,
topDown=True,
colorEditable=False)
for i in range(1, 32):
col = pm.colorIndex(i, query=True)
pm.palettePort(colorPalette, edit=True, rgbValue=(i, col[0], col[1], col[2]))
import pymel.core as pm
with pm.window():
with pm.autoLayout():
pm.button(bgc=(1.0, 0.0, 0.0))
pm.button(bgc=(0.0, 1.0, 0.0))
pm.button(bgc=(0.0, 0.0, 1.0))
import pymel.core as pm
def makeButton1(dragControl, dropControl, msgs, x, y, type):
com = msgs[0]
pm.setParent(dropLayout)
eval(com);
pm.setParent('..')
def dragButton1(dragControl, x, y, mods):
msgs = []
msgs.append('pm.button()')
return msgs
with pm.window():
with pm.columnLayout(dpc=makeButton1) as dropLayout:
pass
with pm.window():
with pm.columnLayout():
pm.button(dgc=dragButton1)
下図では、window2 の button32から window1 にドラッグアンドドロップして window1 に新たにボタンが作成されている。
import pymel.core as pm
with pm.window() as myWindow:
with pm.autoLayout() as myLayout:
pm.button('myButton')
print pm.objectTypeUI(myWindow)
import pymel.core as pm
with pm.window() as myWindow:
with pm.autoLayout() as myLayout:
pm.button('myButton')
print pm.layout(myLayout, q=True, childArray=True)
import pymel.core as pm
with pm.window() as myWindow:
with pm.autoLayout() as myLayout:
pm.button('myButton')
print pm.layout(myLayout, q=True, ex=True)
import pymel.core as pm
def displayCurrentFrame():
return pm.currentTime(q=True)
pm.headsUpDisplay('HUDDisplayCurrentFrame',
section=5,
block=1,
blockSize='medium',
label='Frame',
command=displayCurrentFrame,
event='timeChanged')
with pm.window():
with pm.formLayout() as form:
b1 = pm.button(label='button')
pm.formLayout(form, edit=True,
attachForm=((b1,'top', 0),
(b1, 'bottom', 0),
(b1, 'right', 10)),
attachOppositeForm=(b1, 'left', -100))