最後の旅を始めよう

-黒の英雄譚・零-

Python_ネイティブ機能メモ

2019年12月10日 | MAYA_Pyhon...
Pythonの備忘録的なものです。(Pythonオリジナル機能ですのでMaya以外でも使えるハズ)
自分用のメモですので、視認性に欠けるのはご容赦下さい。
gooブログでもシンタックスハイライトとか出来ればいいのに・・・

Python_MAYA機能メモ

#ユニコードにする
# -- coding: utf-8 --

#参照フォルダの拡張
import sys
sys.path.append( "D:\py\MAYA_tool" )

#グローバル変数
global oVariable

#繰り返し
#ループ処理から抜け出す
break

#以下の処理を行わず次のループに移行する
continue

#関数の値を返す
return

#処理を終了する
import sys
sys.exit()

#条件分岐
#文字列が含まれていた場合
if( "_R" in oItem ) == True:  
    oMirr = oItem.replace("_R", "_L")

#複数の対象と照会する
if oRider not in ["no.1", "no.2"]:
    print( "unknown" )


#文字列の始め/終わりを確認
oType.startswith(("FK", "IK", "ChainIK"))
oType.endswith(("FK", "IK", "ChainIK"))


#文字列
#文字列の入れ替え
oItem.replace("_R", "_L")

#文字列の分割(リスト化される)
oItem.split("_")
oItem.split("_", 2)

#リスト
#リスト追加
lMylist.append("D")
lMylist += ["D"]

#逆順に並べ替え
lSelect.reverse()

#リスト内全結合
"".join(lList)

#リストから削除
lList.remove("aSet")

#リスト内の重複を削除(一度set型にして消すという力技)
list(set( lConnectList ))

#リスト内から一番短い文字数の文字列を取得(maxで最大も取得可能)
min( ["BLACK","RX"], key = len )

#リスト内から一番数小さい数値を取得(maxで最大も取得可能)
min( [ 1,2,3,4,5 ] )

#二つのリストを結合
lList.extend(["SUN"])

#変数の中身を入れ替える
x, y = y, x

#数値型
int  #整数
long #長整数
float #浮動小数点数

#まるめ
round( 123.4567, 3 )#第二引数(右の数字)で小数点以下の桁を決める

#ランダム数を生成
import random
oRandom = random.uniform( 1, 2 )#1~2の間でランダム数を生成

#エスケープシーケンス
\n  #改行
\t  #水平タブ
\'  #「'」をプリント


#ファイル系
import os

#フォルダ内データをリスト化
lFileList = os.listdir( "D:/")

#フォルダを作成する
os.makedirs("D://TheFIRST/TheNEXT")

#存在確認
os.path.isdir( "D://TheFIRST/TheNEXT" )#フォルダ
os.path.isfile( "D://TheFIRST/TheNEXT" )#ファイル
os.path.exists( "D://TheFIRST/TheNEXT" )#両方いける

#フォルダ・ファイルを開く
import subprocess
subprocess.Popen(["start", oPath], shell=True)#"start"は既定のアプリでファイルを開く

os.startfile( "D:/testFile.txt" )#osモジュールでいけた。こっちの方が短文で楽で更に軽い

#メモ帳に書き込む(.txtファイルに記入)
oFile = open("D:/WriteTest.txt", "w")#該当ファイルが存在しなければ新規作成
oFile.writelines( "これは特に意味も無い文章の羅列です" )
oFile.close()

#メモ帳から情報を取得(.txtファイル読み込み)
oFile = open("D:/WriteTest.txt, "r" )
lLines = oFile.readlines()
oFile.close()

#その他
#XYZで繰り返す
for oAxs in [ "X", "Y", "Z" ]:

#文字列を連続でprintする
print("-"*75)


関連-------------------------------------
Python_MAYA機能メモ
編集
コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

Python_MAYA機能メモ

2019年12月09日 | MAYA_Pyhon...
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 どっ基礎講座
編集
コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする