Maya Script Pymel 2013

以前2013でpymelを使うとマテリアルが取得できない、ということを書いたかと思います。
インストールミスか何かだろう。と余りきにせずにいたのですが、新たな環境で再び2013を入れると、再び同じ症状が、、
2012も入っていたので、エラーが出ている箇所を見比べてみました。
少し違う。
なので、それを入れ替えてみました。
問題の箇所は、
C:\Program Files\Autodesk\Maya2013\Python\Lib\site-packages\pymel\internal\apicache.py
にあります。
それの69行目から、84行目をコメントアウト、もしくは削除し、
次のコードを挟みます。

    try:
        try :
            obj = dgMod.createNode ( mayaType )
        except RuntimeError:
            # DagNode
            obj = dagMod.createNode ( mayaType, parent )
            _logger.debug( "Made ghost DAG node of type '%s'" % mayaType )
        else:
            # DependNode
            _logger.debug( "Made ghost DG node of type '%s'" % mayaType )
    except Exception:
        obj = None

    if api.isValidMObject(obj) :
        return obj
    else :
        _logger.debug("Error trying to create ghost node for '%s'" %  mayaType)
        return None

2012のコードです。
すると問題なくマテリアルが取得出来ます。
で、色々と気づいたのですが、2013でウェイトエディタを使うと思ったように数値を丸めてくれない。
これを調べると、どうやらそれ以前のバージョンであったバグの回避用にしていた箇所が問題のようでした。
まったくもう、、

 

それとついでに、gknPoseLoadSaveを修正しました。
バグフィックスです。
これできちんと起動出来ます。
自分の環境ではすでに必要な物があるので、問題なく起動していましたが、そうでない場合恐らく初回起動ができない。
要するに使えない。
酷いバグだ。
ついでにalembicのインポート機能も加えました。
ただしMaya2013であることが前提です。それ以外では機能しません。
起動方法も変わったのでご注意ください。
abcファイルを選択し、「ImportFile」を行えばインポートできます。
で、エクスポートは、

import pymel.core as pm
import os,os.path

def abc_export():
	meshs = pm.ls(sl=1)
	if meshs and meshs[0].type() == "transform":
		name = meshs[0].name()
		path = pm.Env().sceneName().rsplit("/",1)[0]
		name = name.rsplit("|",1)[-1]
		path = os.path.join(path,name).replace("\\","/")
		pm.AbcExport( -j "-frameRange 1 24 -uvWrite -worldSpace -root {0:} -file {1:}.abc".format(name,path))
abc_export()

で、できます。
オブジェクトを選択し、実行すると、開いているシーンと同じディレクトリに保存されます。
ファイル名はオブジェクトの名前が付いているかと思います。
gknPoseLoadSaveの「Reload」を押すとリストに現れるかと思います。
他のツールで編集し、UVがアイランドであるにも関わらず、切れてしまっている場合は、

import pymel.core as pm

def clean_mesh() :
	sel = pm.ls(sl=1,o=1)
	if not sel:
		return
	for s in sel :
		pm.select( s, r= 1 )
		pm.polyMergeUV(d=0.001)
		pm.delete( s, ch= 1 )
	pm.select(sel)
clean_mesh()

オブジェクトを選択し、上記のスクリプトを実行すると綺麗に繋がります。

コメントする

post date*

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)

トラックバックする

トラックバック用URL:

アニメーションが親切に解説されております

レンダリング、ライティングの基本が分かります

図版が見やすい美術解剖書です