MayaPythonの備忘録的なものです。
自分用のメモですので、なんだか見難くて申し訳ありません。
gooブログでもシンタックスハイライトとか出来ればいいのに・・・
Python_ネイティブ機能メモ
#選択したオブジェクトのリスト化
lSelectObj = cmds.ls( selection = True )
if len( lSelectObj ) == 0:
print ("-- not selection")
sys.exit()
#選択の解除
cmds.select( clear =True )
#タイムラインの間分モーションをベイクする
oMinTime = cmds.playbackOptions( query = True , minTime = True )
oMaxTime = cmds.playbackOptions( query = True , maxTime = True )
cmds.bakeResults( lOutLocator , time =(oMinTime,oMaxTime), sampleBy=1, simulation = True )
#カレントフレーム数を取得
maya.cmds.currentTime( query =True )
#名前の変更
cmds.rename( "curveInfo1", "_SplineIK_curveInfo" )
#追加アトリビュート作成
#文字列型
cmds.addAttr( "ObjName", longName = "addAttrName", dataType = "string")
cmds.setAttr( "ObjName.addAttrName", "SetText", type= "string" )
#浮動小数点数型
cmds.addAttr( "ObjName", longName = "addAttrName", attributeType ="float")
cmds.setAttr( "ObjName.BodySizeRatioa", 753 )
#ロケータ作成
if not cmds.objExists( "LocatorName" ):
cmds.spaceLocator( name = "LocatorName" )
#トランスフォームノード作成
cmds.createNode( "transform", name = "Pos" )
#Xフォーム取得
cmds.xform( vSauce, worldSpace = True, translation = True, q = True )#[rotation,scale]
#ピボットのみを位置合わせする
cmds.matchTransform( "locator1", "locator2", pivots = True )
#親子付け
cmds.parent( oControllerName, "rig_root" )
#親子付けを外す(:Root直下の子にする)
cmds.parent( oControllerName, world=True )
#親を取得
oParent = cmds.listRelatives( lRigList[0], parent =True, path =True )[0]
#子を取得
lChildren = cmds.listRelatives( lSelectObj, children =True )
#シェイプを取得
oShape = cmds.listRelatives( lSelectObj, shapes =True )[0]
#シーン直下にあるノードを取得
lRoots = cmds.ls( assemblies = True )
#エクスプレッション作成
cmds.expression( string = "pSphere2.shearXY = decomposeMatrix1.outputShearX", name ="expression_" )
#接続されているコンストレインノードを取得
oScaleConstraint = list( set( cmds.listConnections( oItem, source =True, destination =False, type = "scaleConstraint" ) ))[0]#一度set型にしてリスト内重複を消す力技
#指定のオブジェクトの存在を確認
if not cmds.objExists( "etc" ):
#ノードタイプを取得
cmds.nodeType( cmds.ls( selection = True )[0] )
#追加アトリビュートを取得
lUserAttr = cmds.listAttr( oMirrName +"_UP_cont", userDefined =True )
#リファレンスの内容を取得
cmds.referenceQuery( "RefObjRN", nodes =True )
#ファイルパスを取得
cmds.file( sceneName =True, query =True )
#シーン名を取得
cmds.file( sceneName =True, shortName =True, query =True )
#バウンディングボックスサイズを取得
#ローカル
cmds.xform( "pSphere1", boundingBox =True, query =True, relative =True )
#ワールド
cmds.exactWorldBoundingBox( "pSphere1" )
#フィルターイクスパンドによる取得
cmds.filterExpand( selectionMask = 12 )#ポリゴン
#接続されたマテリアルを取得
def fGetMaterials( vMesh ):
oSP = cmds.listRelatives( vMesh, shapes =True)
oSE = cmds.listConnections( oSP, source =False, type ="shadingEngine")
return cmds.ls( cmds.listConnections( oSE[0], source =True ), materials =True )
#リフレッシュ(再描画)
cmds.refresh( force =True )
#描画の更新を止める
cmds.refresh( suspend =True )
cmds.refresh( suspend =False )#Offにする事で再開
#MELの実行
import maya.mel as mel
mel.eval('HypergraphHierarchyWindow;')
#アニメーション
#アニメーションカーブのオフセット
cmds.selectKey( "root_rotateZ", addTo =True, keyframe =True )
cmds.keyframe( animation ="keys", relative =True, valueChange = -90 )
#UI
#テキストボックス作成
cmds.textField( "tTF_Name" ,text= "Text_Strings")
#テキストボックス内の情報を取得
oGetText = cmds.textField( "tTextBoxName", query = True, text = True )
#数値専用テキストボックス作成(フロートフィールド)
cmds.floatField( "tControllerSize" ,value= 1, precision =1,)
#数値専用テキストボックス内の情報を取得
oSize = cmds.floatField( "tControllerSize", query = True, value = True )
#ダイアログアイコン
「question」、「information」、「warning」、「critical」
#長文表示用ウィンドウ
oLS_Window = cmds.window( title="paneLayout", iconName='Short Name', widthHeight=(400, 300) )
cmds.paneLayout()
cmds.scrollField( editable=False, wordWrap=True, text= "長文\n長い文章を表示させたい場合の窓\nスクロールバーにも対応" )
cmds.showWindow( oLS_Window )
#ネームスペース
#ネームスペースの有無を確認
if not cmds.namespace( exists ="NS" ):
#ネームスペースを作成
cmds.namespace( addNamespace ="NS" )
#カレントネームスペースにセットする
cmds.namespace( setNamespace =":NS" )
#※ネームスペース有でFBXを読み込むには、対象のネームスペースをカレントにする必要がある
#カレントネームスペースを直下(Root)にする
cmds.namespace( setNamespace = ":" )
#※ネームスペースのセットは基本子にしか出来ないが":"を指定すると直下を設定出来る
#ネームスペースを削除する
cmds.namespace( removeNamespace = "NS" )
#ビューポート(モデルパネル)
#アクティブビューポートを取得(こんな泥臭い事しないと解らないのか?)
def fActivePanel():
for oMP in cmds.getPanel( type='modelPanel' ):
if cmds.modelEditor( oMP, activeView =True, query =True ):
return oMP
#ライティング・フラットライト
cmds.modelEditor( fActivePanel(), edit =True, displayLights ="flat", displayTextures =True, displayAppearance ="smoothShaded" )
#パネル・カメラを変更
cmds.modelEditor( fActivePanel(), edit =True, camera ="L_front" )
#レンダラ・ポリゴンのみ表示
cmds.modelEditor( fActivePanel(), edit =True, polymeshes =True, nurbsCurves =False, joints =False, ikHandles =False, locators =False )
#ファイル
#インポート
cmds.file( oPath, i =True, force =True, ignoreVersion =True, options ="v=0" )
#エクスポートセレクテッド
cmds.file( oPath, exportSelected =True, type ="mayaAscii", options ="v=0;", preserveReferences =True )
#保存
cmds.file( rename = "D:/" )#別名保存をするには先にシーン名を変更してから保存する
cmds.file( save =True, force =True, ignoreVersion =True, options ="v=0" )
#リファレンスモデルとして読み込み
cmds.file( "D:/Replacement.ma", reference =True, ignoreVersion =True, mergeNamespacesOnClash =True, namespace =":", options ="v=0;" )
#リファレンスモデルの入れ替え
cmds.file( "D:/Replacement.ma", loadReference ="TargetRN", options ="v=0;" )
#スタンドアロン アプリケーション
#Mayaを立ち上げずに処理を行う事が出来ます
import maya.standalone
maya.standalone.initialize()
#二つのオブジェクト間の距離を求める
def fFindDistance( vStart, vEnd ):
lSP = cmds.xform(vStart,worldSpace=True,translation=True,q=True)
lEP = cmds.xform(vEnd,worldSpace=True,translation=True,q=True)
oDistance = (lSP[0]-lEP[0])**2+(lSP[1]-lEP[1])**2+(lSP[2]-lEP[2])**2
return oDistance ** 0.5
fFindDistance( "locator1", "locator2" )
#ウィンドウを開く
cmds.PreferencesWindow()#プリファレンス
cmds.HypergraphHierarchyWindow()#ハイパーグラフ
cmds.NodeEditorWindow()#ノード エディタ
cmds.GraphEditor()#グラフ エディタ
cmds.TimeEditorWindow()#タイム エディタ
#初期シェーディング グループのロックを解除する
cmds.lockNode( "initialShadingGroup", lock =False, lockUnpublished =False )
#ポリゴンを作成しても表示されないエラーの対処
関連-------------------------------------
Python_ネイティブ機能メモ
Python_エラーメモ
Python_xlrd機能メモ
バッチ作成メモ
Python_MAYA_ちょっとしたツール集
MAYA Python どっ基礎講座
編集