2017/12/12

maya : 選択しているチャンネルボックスで、グラフエディタのFCurve表示

0 comment
リアクション: 
こっちのほうが、使いやすいかも。
UIいらんな…。


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

import pymel.core as pm

# グラフエディタを取得。カスタムグラフエディタ対応で複数のエディタを見に行く
for ge in pm.getPanel(scriptType="graphEditor"):
    # グラフエディタ内アウトライナの選択を一度解除
    pm.selectionConnection(ge.name()+"FromOutliner",e=1,clr=1)
    for obj in pm.selected():
        for a in pm.channelBox("mainChannelBox",q=1,sma=1):
            # 各アトリビュートのFCurveを表示
            pm.selectionConnection(ge.name()+"FromOutliner",e=1,s=obj.attr(a))


2017/12/05

maya : 骨にヘアを揺れ物シミュレーションするツール YURAYURA.py

0 comment
リアクション: 

髪の毛などの数珠繋ぎ階層にヘアシミュレーションをかける揺れ物ツールです。

ダウンロード

使い方:

このスクリプトを、そのままシェルフ登録に出来ます。

プラグインとして使用する場合は、mayaのscriptsフォルダに
このファイルを入れます。
C:\Users\[user]\Documents\maya\scripts
もしくは、PYTHON_PATHが設定してある場所でもOKです。

実行コマンド
import YURAYURA;YURAYURA.YURAYURA()

ツールを実行するとUIが立ち上がります。

GENERATE:
髪の毛のルートを選択して、GENERATEボタンを押すと
YURAYURAシミュレーションセットが作られます。
複数選択でき、一度作成した後でも追加で使用できます。

MODIFY:
SETTING欄の数値を変更して、下にあるMODIFY SETTING ( REFRESH )
ボタンで適用できます。

COLLIDE:
コリジョンをセットしたい場合は、コリジョンオブジェクトを選択して
ADD COLLIDEボタンを押します。

BAKE:
シミュレーション結果が良さそうであれば、BAKEボタンを押すと
元に選択していた階層すべてのRotateにBake Simulationをかけます。
YURAYURAシミュレーションセットは消去され、UIも閉じます。


動画の途中で、ikHandleのInherits Transformをカチカチっとやってますが
ikHandleのリフレッシュがうまく行われず、なんらかのアトリビュートを
いじれば、ちゃんとした結果になるようです・・・。
自分のセットアップが悪いのかも知れませんが・・・。
解決法があれば、教えていただきたいです。


2017/11/29

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

0 comment
リアクション: 


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

YAMATANI.py

2017/11/15

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

0 comment
リアクション: 
いくつかやり方があるけれど、これが一番シンプルかなー。

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 : 関数のデフォルト引数

0 comment
リアクション: 
今日はじめて知ったんですが、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フレずつ消す

0 comment
リアクション: 
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 : 選択しているオブジェクトのコンストレイントをすべて削除

0 comment
リアクション: 
コードが短すぎて、逆に不安…。
デフォルトでつけておいて欲しい。

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

2017/10/27

maya : 選択したオブジェクトのFCurve表示をフィルタリング

0 comment
リアクション: 
複数選択したオブジェクトにアニメがついていて、全部translateXだけ表示したい!
ってときが、結構ありますけど、標準だとどうやるか分からないので書きました。

FCurveSelector.py

maya : 最上位のDAGオブジェクトのリスト取得

0 comment
リアクション: 
ユーザーが作ったもののみ

import pymel.core as pm
print [obj for obj in pm.ls(assemblies=1) if not obj.name() in ["persp","top","front","side"]]

もっとスマートに出来る?
しかも、assembliesってなんだよ…。分かりにくいな…。

2017/10/26

maya : NurbsCurveのこの辺のParametric Length値を知りたい

0 comment
リアクション: 
あらかじめcurve1とlocator1を用意してから実行。
次のコードは、locator1からcurve1に一番近いポイントのParametric Length値を取得します。



import pymel.core as pm
import maya.api.OpenMaya as om

lct = pm.PyNode("locator1")
pt = om.MPoint(lct.getTranslation())

sel = om.MSelectionList()
sel.add("curve1")
path = sel.getDagPath(0)
crv = om.MFnNurbsCurve(path)

p,pl = crv.closestPoint(pt)

print pl

Attach to Motion Pathで、Parametric Lengthにチェックを入れて出てきた値を入れるとそこにコンストできます。
しかし、コードが長いなぁ…。

maya : pymelで選択している階層すべてのコンストレイント取得

0 comment
リアクション: 
import pymel.core as pm

# 選択している階層すべてのコンストレイント取得
pm.listRelatives(pm.selected(),ad=1,typ="constraint")

2017/10/20

maya : pymelでResetTransformationsとCenter Pivot

0 comment
リアクション: 
すぐ忘れるのでメモ
両方選択無し。

import pymel.core as pm

# null1をResetTransformations
obj = pm.PyNode("null1")
pm.makeIdentity(obj)

# pSphere1をCenter Pivot
obj = pm.PyNode("pSphere1")
pm.xform(obj,cp=True)