Skip to content

Instantly share code, notes, and snippets.

@taikomatsu
taikomatsu / evaluate_tcl_expression2.py
Last active September 12, 2015 15:07
Evaluate Tcl Expression 2
# ReadのfileでTcl書式のExpressionが使われていた場合に
# パスを展開して取り出す方法 改良版
# ※この方法だと%04dとかも一緒に展開される模様
import nuke
for o in nuke.selectedNodes('Read'):
filepath = o['file'].evaluate()
print(filepath)
@taikomatsu
taikomatsu / evaluate_tcl_expression.py
Last active August 6, 2019 09:30
Evaluate Tcl Expression
# ReadのfileでTcl書式のExpressionが使われていた場合に
# パスを展開して取り出す方法
import nuke
reads = [o for o in nuke.selectedNodes() if o.Class() == 'Read']
for o in reads:
filepath = o.knob('file').getValue()
print nuke.tcl('subst', filepath)
@taikomatsu
taikomatsu / get_angle_difference_from_z_to_selected_edge.py
Last active August 29, 2015 14:25
get angle(degree) difference from z axis to selected edge.
from pymel.core import *
# 確実にエッジを取得したいのでfilterExpandを使用。
e = filterExpand(sm=32)[0]
# 更にfilterExpandを使用するとls -flをした時と同様に要素が1つずつ確実に返ってくる。
# edgeの両端のvertexの場合、頂点番号がつながっているとそのまま1まとまりで返されたりする。
# なので念のため再度filterExpandに渡してデータにエラーがないようにしている。
# filterExpandでは文字列を返してくるため最後にPyNodeを使ってpymelオブジェクトに変換。
v = [PyNode(v) for v in filterExpand(polyListComponentConversion(e, fromEdge=True, toVertex=True), sm=31)]
space = 'world'
# normal()はnormalizeされたデータのコピーを返す。
@taikomatsu
taikomatsu / gist:193b371c1670d2ca8264
Created July 4, 2015 18:54
Copy all textures in current scene
from pymel.core import *
import shutil
copydir = r'z:\path\to\copy'
for o in ls(type='file'):
path = o.fileTextureName.get()
shutil.copy(path, copydir)
print('# Done')
@taikomatsu
taikomatsu / compare_pymel_openmaya.py
Created July 3, 2015 09:03
pymel vs OpenMaya speed test
# this test executed on 80,000 vertices sphere and 6 faces box
from pymel.core import *
from time import time
from maya import OpenMaya
def calc_time(f):
def fn(*args, **kwargs):
s = time()
r = f(*args, **kwargs)
@taikomatsu
taikomatsu / gist:944e3a62ce638509f6fc
Created July 2, 2015 15:05
Get all (readable) attributes value and set it to another (only settable)
from pymel.core import *
# get all (readable) attributes value
o = selected()[0]
attrs = {}
for a in listAttr(o):
try:
v = o.attr(a).get()
attrs[a] = v
except Exception, e:
print e
@taikomatsu
taikomatsu / gist:f599afaa1edf0dfc70af
Last active August 29, 2015 14:23
Copy a playbast movie file from tmp directory
# Playblastをした後にその動画が保存したくなった場合にblast_nameに動画の名前(名前のみでOK)を入力すると
# TMPから勝手に引っ張ってきてcurrent_project/moviesにコピーします
# ムービーの名前はPlayblastが終わった直後、パスが表示されるのでそれを見て手動で入力してください
# UIあるととても便利でしたね(放置中)
# copy blast from tmp
from pymel.core import *
import os
import os.path
import shutil
@taikomatsu
taikomatsu / gist:6fd0a4700098829acc19
Created June 24, 2015 16:33
Generate batch render commands
# レンダリング用コマンドライン自動生成
# render_nodesを複数にするとフレームを分割してコマンドをprintする
# フレームの分割がたまにミスるのはご愛嬌(放置中)
from pymel.core import *
# settings
tmpl = '"%(render_path)s" -r %(renderer)s %(frame_range)s -proj "%(proj)s" "%(scene)s"'
render_path = r'C:\Program Files\Autodesk\Maya2014\bin\Render'
renderer = 'mr'
platform = 'win'
@taikomatsu
taikomatsu / gist:98f77bf067bb9bfd4ffd
Last active August 29, 2015 14:23
Render sequence on Render View
# 何らかの理由でbatchレンダリングがうまくいかない、Maya HWだと何故かレンダリングが遅い、みたいなときに便利なスクリプト
# 連番をRender View上でレンダリングします
# Progress window付きでキャンセルすることが可能ですが、なぜかRender Viewの下に隠れてしまうので上手いことやらないとキャンセル出来ないので要注意
from pymel.core import *
from maya import mel
import math
preroll_start = None
s = int(playbackOptions(q=True, min=True)) # start frame
e = int(playbackOptions(q=True, max=True)) # end frame
@taikomatsu
taikomatsu / gist:99d34488eebe0225510f
Created June 22, 2015 07:25
Stick to closest uv
from maya import OpenMaya
from pymel.core import *
import math
class UvCoord(object):
def __init__(self, u, v):
self.u = u
self.v = v
def dist(self, uv):