2017/11/29

maya : 選択しているFCurveをリダクション



自分でも書いてみました。
キャプチャエディットしてると使いたくなります。
やっぱり便利です。

YAMATANI.py


# -*- coding: cp932 -*-
# YAMATANI.py

import pymel.core as pm

# FCurveノード名を取得
lfcv = pm.keyframe(q=1,n=1)
for fcv in lfcv:
    ld = [] # 消去するキーのインデックスリスト
    # FCurveの時間、値のリスト取得
    lv = pm.keyframe(fcv,q=1,tc=1,vc=1)
   
    # 最初と最後のキー以外を調査
    for i in range(1,len(lv)-1):
        # キーが上り坂なら消すリストにインデックスを追加
        if lv[i-1][1] < lv[i][1] and lv[i][1] < lv[i+1][1]:
            ld.append([i])
        # キーが下り坂なら消すリストにインデックスを追加
        elif lv[i-1][1] > lv[i][1] and lv[i][1] > lv[i+1][1]:
            ld.append([i])
    if ld:
        # インデックスを使ってキーを消去
        pm.cutKey(fcv,index=ld)
        # 一度すべてのキータンジェントをAutoにする
        pm.keyTangent(fcv,itt="auto",ott="auto")
        # 最初のキータンジェントをSplineにする
        pm.keyTangent(fcv,t=lv[0][0],itt="spline",ott="spline")
        # 最後のキータンジェントをSplineにする
        pm.keyTangent(fcv,t=lv[-1][0],itt="spline",ott="spline")

2017/11/15

maya : タイムレンジのゲットセット

いくつかやり方があるけれど、これが一番シンプルかなー。

import pymel.core as pm

# タイムレンジの内側のゲットセット
pm.Env().minTime = 100
print pm.Env().minTime

pm.Env().maxTime = 500
print pm.Env().maxTime

# タイムレンジの外側のゲットセット
pm.Env().animStartTime = 0
print pm.Env().animStartTime

pm.Env().animEndTime = 600
print pm.Env().animEndTime

2017/11/08

python : 関数のデフォルト引数

今日はじめて知ったんですが、pythonの関数のデフォルト引数の挙動

>>> def b(l=[]):
... l.append(1)
... return l
...
>>> print b()
[1]
>>> print b()
[1, 1]
>>> print b()
[1, 1, 1]
>>>

あらららららららららら・・・・???

調べてみると、デフォルト引数は、関数が作成されるときに一度だけセットされるみたいです。
回避するには

>>> def c(l=None):
... if l is None:
... l=[]
... l.append(1)
... return l
...
>>> c()
[1]
>>> c()
[1]
>>> c([1])
[1, 1]
>>>

とかやるみたいです。
完全に間違ってました・・・orz

2017/11/02

maya : 選択しているオブジェクトのアニメーションキーを前後5フレずつ消す

k の値をお好きに変えてどうぞ。
いままで、手動でやってたのを後悔するわ…。


# -*- coding: cp932 -*-
# RemoveNeighboringKeys.py

import pymel.core as pm

k = 5 # 前後の消すフレームの値
c = pm.currentTime()
pm.cutKey(pm.selected(),time=(c-k,c-1))
pm.cutKey(pm.selected(),time=(c+1,c+k))

2017/11/01

maya : 選択しているオブジェクトのコンストレイントをすべて削除

コードが短すぎて、逆に不安…。
デフォルトでつけておいて欲しい。

import pymel.core as pm
pm.delete(pm.listRelatives(pm.selected(),typ="constraint"))

Perforce: 複数のワークスペースを更新するバッチ

batを叩けば全部更新。 @echo off set P4PORT=x.x.x.x:xxxx set P4USER=user set P4PASSWD=password echo %P4PORT% echo %P4USER% echo %P4PASSWD% echo %P4PAS...