import maya.cmds as cmds items = cmds.ls(sl=True) cmds.keyingGroup(items, name='testKG') cmds.keyingGroup(items, edit=True, activator='testKG')キーンググループは親子付けできるけどキーンググループ同士の親子付けだけだと子が消えた時に親も一緒に消えてしまうのでなんらかのキー設定オブジェクトを紐づけておいた方が良さそう
__kissiylog__()
MayaやSoftimageやpythonのことをほそぼそと。
2018/03/27
[Maya]相互にキーを打てるようにするキーンググループ
2017/07/30
[Maya][Python]FaceVertexごとのカラーの取得
時間たっちゃったけど引き続きopenMayaを使ってポリゴンから情報を抽出。
faceVertex毎のカラーを取得。
faceVertex毎のカラーを取得。
import maya.OpenMaya as om import maya.api.OpenMaya as om2 sels = om.MSelectionList() om.MGlobal.getActiveSelectionList(sels) node = om.MDagPath() sels.getDagPath(0, node) #vertIter = om.MItMeshVertex(node) fvertIter = om.MItMeshFaceVertex(node) faceIter = om.MItMeshPolygon(node) intArr = om.MIntArray() color = om.MColor() colors = [] for i in range(faceIter.count()): faceIter.getVertices(intArr) for j in intArr: if not fvertIter.hasColor(): continue fvertIter.getColor(color) colors.append([color.r, color.g, color.b, color.a]) fvertIter.next() faceIter.next() print colors
2017/07/01
[Maya][Python]MItMeshPolygon (api1.0)
会社ではMaya2015もサポートしなきゃいけないのでapi1.0で書く必要が。。。
なんでこんなにめんどくさいの。。。
選択オブジェクトのフェース面積を表示するサンプル
なんでこんなにめんどくさいの。。。
選択オブジェクトのフェース面積を表示するサンプル
import maya.OpenMaya as om import maya.api.OpenMaya as om2 sels = om.MSelectionList() om.MGlobal.getActiveSelectionList(sels) node = om.MDagPath() sels.getDagPath(0, node) poly = om.MItMeshPolygon(node) mesh = om.MFnMesh(node) areaParam = om.MScriptUtil() areaParam.createFromDouble(0.0) areaPtr = areaParam.asDoublePtr() faceid = 0 area = [] for i in range(poly.count()): poly.getArea(areaPtr) poly.next() area = om.MScriptUtil(areaPtr).asDouble() print area
2016/09/04
[Maya][Python]デコレータでmayaバージョンごとに処理分け
pythonドキュメントにpropertyデコレータの挙動を解説するために同じ処理を再現したクラスが載っていてすごく勉強になりました。
で、mayaのバージョンごとに処理を変える方法ないかなーと思っていたので↑を参考にデコレータで実装してみました。
最後の行でdoSomething関数を実行していますが、同じ関数名でもmayaのバージョンによって処理が変わります。
で、mayaのバージョンごとに処理を変える方法ないかなーと思っていたので↑を参考にデコレータで実装してみました。
最後の行でdoSomething関数を実行していますが、同じ関数名でもmayaのバージョンによって処理が変わります。
import maya.cmds as cmds maya_version = cmds.about(version=1) # mayaのバージョン ## バージョンごとに関数(メソッド)の処理を変えるデコレータ class DoOnVertion(object): ## 初期化 def __init__(self, func): self.func = func ## 関数のように呼び出された時の処理 # self.funcを実行する def __call__(self, *args, **kwargs): return self.func(*args, **kwargs) ## 指定されたバージョンとmayaバージョンが合っていれば関数(メソッド)を置き換える def version(self, version): print 'Replace funcition if version is [{0}].'.format(version) def new_func(func): if maya_version == version: rtn = func else: rtn = self.func return type(self)(rtn) return new_func # 指定バージョン以外のときの処理 @DoOnVertion def doSomething(name=None): print 'do something with argument [{0}].'.format(name) # バージョン2015で実行したときの処理 @doSomething.version('2015') def doSomething(name='cube'): cmds.polyCube(name=name) # バージョン2016で実行したときの処理 @doSomething.version('2016') def doSomething(name='joint'): cmds.createNode('joint', name=name) # バージョン2017で実行したときの処理 @doSomething.version('2017') def doSomething(name='transform'): cmds.createNode('transform', name=name) # doSomething関数の実行 # 実行するmayaのバージョンによって処理が変わる doSomething()
2016/09/02
2016/08/28
[Maya]OpenMayaでNurbsCurve作成2
api1.0使用
ポイント位置のリストを受け取りカーブを作成
選択がTransformを継承しているオブジェクトだったらその下に、そうでなければ新しいオブジェクトを作ってその下にカーブシェイプを作る
ポイント位置のリストを受け取りカーブを作成
選択がTransformを継承しているオブジェクトだったらその下に、そうでなければ新しいオブジェクトを作ってその下にカーブシェイプを作る
import maya.OpenMaya as om pntPoss = [ (0, 0, -1.0), (-1, 0, 0.5), (1, -0, 0.5), (0, 0, -1.0), ] def getMPoints(pntPoss): pnts = om.MPointArray() for pntPos in pntPoss: pnts.append(om.MPoint(*pntPos)) return pnts def getSelection(): sl = om.MSelectionList() om.MGlobal.getActiveSelectionList(sl) if not sl.length(): return dagPath = om.MDagPath() sl.getDagPath(0, dagPath) if not dagPath.hasFn(om.MFn.kTransform): return node = dagPath.node() return node def createCurve(pntPoss): crv = om.MFnNurbsCurve() pnts = getMPoints(pntPoss) deg = 1 span = pnts.length() - deg knotCnt = span + 2 * deg -1 knots = om.MDoubleArray() for i in range(knotCnt): knots.append(i) sl = getSelection() if not sl: sl = om.MObject() crv.create(pnts, knots, deg, om.MFnNurbsCurve.kOpen, False, False, sl) createCurve(pntPoss)
2016/08/24
登録:
投稿 (Atom)