最後の旅を始めよう

-黒の英雄譚・零-

MAYA Python どっ基礎講座‗02 『処理の順番』

2023年01月02日 | MAYA_Pyhon...
前項
「MAYA Pythonの構造」はご理解頂けたでしょうか。

頂けた方、素晴らしい!アナタにはプログラマーの素質があります!

良く解らなかったよ…という方もご安心下さい。
どんな素人でも以下の「3つの基礎」さえ押さえれば
プログラムはノープロブレムです。


 1・処理の順番
 2・条件分岐
 3・繰り返し



ちなみにこの3つは、
MAYA Python以外の言語でも共通した基礎となりますので
将来、他のスクリプトを触る事に成っても使える知識です。
覚えておいて損はありません。


ここでは、まず「処理の順番」から解説していきます。
処理の順番を理解する事はプログラムのアルゴリズムを構築する上で
必要不可欠な概念となります。

こんな風にカタカナ言葉を羅列されると
アレルギー反応を起こす人も居るかも知れませんが
実際には誰でも理解出来る簡単な内容ですので今しばらくお付き合い下さい。


それでは、Mayaで以下のコードを走らせてみましょう。

#---------------------------------------------------------------------------------------------------
import maya.cmds as cmds

cmds.window( title ="MyUI", width = 200 )
cmds.columnLayout( adjustableColumn =True )
cmds.button( label ="ボタン A", command ="" )
cmds.button( label ="ボタン B", command ="" )

cmds.button( label ="ボタン Y", command ="" )
cmds.showWindow()

#---------------------------------------------------------------------------------------------------


3つのボタンの付いたUIが生成されれば成功です。




このスクリプトでは
window」コマンドで、ウィンドウを作成
columnLayout」コマンドで、カラム(縦列)のレイアウトを組む様に設定
button」コマンドで、ボタンを作成(複数作る事でボタンが縦に並ぶ)
showWindow」コマンドで、作成したウィンドウを表示させる
という事をしております。


次に"ボタン B"と"ボタン Y"の空いているところに
以下の"ボタン X"の命令を挿入して実行してみます。

cmds.button( label ="ボタン X", command ="" )


すると、今度はBとYの間にXボタンのあるUIが生成されます。



この様に、基本的にプログラムの命令は上から順に実行されます
つまり、プログラムでアルゴリズムを構築する為には
処理を行いたい順番に、上から書いていけば良い訳です。

ね、簡単でしょ?

ちなみに、
この挙動には「逐次処理」「順次処理」「シリアル処理」等の呼び名があります。

逆に、

・条件分岐で別の命令まで飛ばす
・繰り返し処理で同じ命令を複数回実行する

といった、上から順の法則から外れたアルゴリズムを組む事も出来ます。
(むしろ、そちらの方が頭を使うので大変だったりします)
つまり「3つの基礎」とは
アルゴリズムを組み立てる為に必要な知識という訳です。



ちなみに、
このUI、折角ボタンを作ったのなら
それを押した際に、何か命令を実行して欲しくなりますよね。

そんなときは
command =""」フラグの ""内に引数として命令を書けば
ボタンを押した際に実行してくれる様になります。

一例として、
試しにcommand フラグの引数として「ボタン生成コマンド」を入れると
以下の様に「生成ボタン」を押す度にボタンが増えるヘンテコなUIを作れます。

#---------------------------------------------------------------------------------------------------
import maya.cmds as cmds

cmds.window( title ="MyUI", width = 200 )
cmds.columnLayout( adjustableColumn =True )
cmds.button( label ="生成ボタン", command ="cmds.button( label ='Newボタン' )" )
cmds.showWindow()

#---------------------------------------------------------------------------------------------------



次項 → 03_MELのログをPythonに翻訳
前項 → 01_二行で解る、MAYA Pythonの構造
一覧へ

関連-------------------------------------
Python_MAYA機能メモ
Python_MAYA_ちょっとしたツール集
Python_エラーメモ
編集
コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

MAYA Python どっ基礎講座‗はじめに

2023年01月01日 | MAYA_Pyhon...
はじめに

この講座は、
プログラミング知識を1㎜も知らないのデザイナーに向けたものです。
デザイナーにとって、スクリプトは非常にとっつき難い分野でもありますが、
逆に、使える様に成ればワークフロー効率を劇的に上げられる可能性も秘めています。

ここでは、
デザイナー脳でもMAYA Pythonスクリプトを
楽しく使いこなせる事を目指して解説していきます。



Pythonを使うメリット

ちなみに、ここでMELは一切やりませんのでご了承下さい。
(まあ、今更MELを勉強する気にならないというのが一番なのですけどね…)

もし Maya が、今は亡き Softimage の様に切り捨てられてしまったら
Mayaでしか動かないMELの知識は全て無駄になってしまいます。
その点、Pythonであれば、3dsMAX、Blender、Motionbulder といった
ほかのソフトでも応用が効くので、スキルが無駄になりません。
コーディングに慣れておくなら
断然 Python の方が、将来性は高いでしょう。


初心者にMayaPythonはオススメ

Mayaは自分でツールを作る事が前提だけあって
ネットには、それ関連記事が沢山あります。
初心者が勉強する為の恵まれた環境が他のDCCツールよりも
断然、整っております。

ここで基礎さえ押さえておけば、いくらでも勉強出来ますので
自分だけにチューニングされたオリジナルツールを作れる様になるでしょう。


次項 → 01_二行で解るMAYA Pythonの構造
一覧へ

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

MAYA Python どっ基礎講座_info

2023年01月01日 | MAYA_Pyhon...

ここでは、デザイナー思考の人でもMAYA Pythonプログラムを
使える様になる事を目指して基礎から解説していきたいと思います


はじめに(←特に読まなくても大丈夫です)
01_二行で解るMAYA Pythonの構造
02_処理の順番
03_MELのログをPythonに翻訳
04_コマンドリファレンスの使い方
05_条件分岐
06_インデント
07_繰り返し処理
08_リスト
09_関数
10_ChatGPTの活用
11_UIテンプレート





関連-------------------------------------
Python_MAYA機能メモ
Python_MAYA_ちょっとしたツール集
編集

コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

MAYA Python どっ基礎講座‗01 『二行で解る、MAYA Pythonの構造』

2023年01月01日 | MAYA_Pyhon...


まずは、
さっそくMayaで以下のコードを走らせてみましょう。

#------------------------------------------------------------------------------------------------------------------------------
import maya.cmds as cmds
cmds.confirmDialog(title="MayaPython",message="Pythonスクリプトを始めますか?",button=["Yes","OK"],icon="question")

#------------------------------------------------------------------------------------------------------------------------------




#手順

①スクリプトエディタを開きます。




②「Python」タブを開きます。




③タブ内に上記のコードをコピーして、ツールバーの「すべて実行」アイコンを押します。








いかがでしたか?
無事、スクリプトは走りましたか?




もし、上手くいかなくても
「やっぱり俺なんかにスクリプトが理解出来る訳ねぇんだっ!」なんて悲観する事はありません。
手順を再確認して、原因を考え、走るまで何度でもトライし続ければ
いつか成功する…ハズです!





MAYA Pythonの構造
それでは、先ほどのダイアログボックスを出すスクリプトで
MAYA Python の基本的な構造をご説明致します。






maya.cmdsモジュールをインポート

MAYA Python は、この「import」から入る事となります。
Python は基本機能以外に、モジュールをインポートする事で機能を拡張する事が出来ます。
このコードの場合「maya.cmds」というモジュールを読み込む事で
Mayaを制御するコマンドが使える様になります。

ちなみに「as cmds」は、以降のスクリプト内で
「maya.cmds」を呼び出す際に略称の「cmds」でも呼べる様にしています。



②「confirmDialog」コマンド

これは、ダイアログボックスを出す為のコマンドです。
MAYAに何かをしてもらう為には、この「コマンド」を使います。
コマンドが何かを平たく言うと、
ドラクエでいうところのAボタンを押した際に出てくる
「はなす」や「じゅもん」といったアレです。
アレを選択ではなく、文面(コード)で命令しているのがスクリプトという訳です。


たとえば…
トンヌラの持っている薬草を捨てたい場合は、
#---------------------------------------------
DQモジュール.どうぐ( すてる = "やくそう", なかま = "トンヌラ" )
#---------------------------------------------

という感じです。


ゲレゲレに魔獣の牙を装備させたい場合は、
#---------------------------------------------
DQモジュール.どうぐ( そうび = "まじゅうのきば", なかま = "ゲレゲレ" )
#---------------------------------------------

という感じになります。


一周回って解り難くなっている気もしますが…まあ、そんな感じです。
この場合は以下の様な役割名が割り振られております。

 「どうぐ」  ・・・  コマンド
 「すてる」  ・・・  フラグ
 「やくそう」 ・・・  引数


厳密には、こう書いた方が正しいですかね?
#---------------------------------------------
DQモジュール.どうぐ( "やくそう", すてる = True, なかま = "トンヌラ" )
#---------------------------------------------

・・・どうでも良いですかね。。。

いまひとつピンと来ていない人も大丈夫です。
やっているうちに解ってくるので、このタイミングで全て覚える必要はありません。
とりあえず「そういうルールがあるんだなぁ」くらいの認識で結構です。


ちなみに、
先ほどのダイアログボックスも、引数であるテキストを書き換えれば
表示される文章を変更出来ます。


icon(アイコン) も
"question"以外に、"information"、"warning"、"critical"があり変更可能です。




試しに、色々なところを書き換えて遊んでみて下さい。
ありものコードの中身を変えて反応を観察する事はスクリプトの理解に有用です。





コメントアウト
勘の良い人は、もうお気付きかも知れませんが、念の為のオマケ的な解説です。
Pythonでは「#」以降の文字列はコードの命令文として扱わなくなります。
この様な機能を「コメントアウト」と言います。
コメントアウトを活用する事でコードを整理して視認性や可読性を上げる事が出来ます。



次項 → 02_処理の順番
一覧へ

関連-------------------------------------
Python_MAYA機能メモ
スクリプトエディタ(Adobe公式マニュアル)
編集

コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

Python_xlrd機能メモ

2021年09月22日 | MAYA_Pyhon...
MayaPythonの備忘録的なものです。
自分用のメモですので、見難くて申し訳ありません。
gooブログでもシンタックスハイライトとか出来ればいいのに・・・


#Excelリードモジュールのインポート
#※基本モジュールインポートと同じ読み込み方
import sys
sys.path.append( "Excelリードモジュールのパス" ) )
import xlrd


#Excelファイルの指定
oBook = xlrd.open_workbook( oBookPass +"/"+ oBookName )
oSheet = oBook.sheet_by_name( oSheetName )

#Excelファイルの参照
#Excelの行・列の数を取得
oRowsLimit = oSheet.nrows #行
oRowsLimit = oSheet.ncols #列

#セル内の値を取得
oValue0_1 = oSheet.cell_value(0, 1) #(列,行)


#繰り返し処理でリストから情報を取得
iRowsLimit = oSheet.nrows #行
iColsLimit = oSheet.ncols #列

for iC in range( iColsLimit ):    
    print "------------------------------------"    
    for iR in range( 1, iRowsLimit ):
        if oSheet.cell_value(iR, iC) == "":
            continue        
        print oSheet.cell_value(iR, iC)



関連-------------------------------------
Python_ネイティブ機能メモ
Python_MAYA機能メモ
note.nkmk.me
編集
コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

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でシェアする

MAYA_Pyhon_ワールド(グローバル)移動値の一致ツール

2016年11月28日 | MAYA_Pyhon...
どこかに無いかなと思い探してみたのですが…
全然見つからなかったので自分で作りました。。。

コピペでシェルフに置けば、そのまま使えるツール

※なお、このツールの使用により万が一、損害を受けられたとしても
補償はしかねますので、使用は自己責任でお願い致します。


ワールド(グローバル)移動値の一致ツール
-------------------------------------------------------------------------
import maya.cmds as cmds
lSelectObj = cmds.ls( selection = True )
if len(lSelectObj) < 2:
   print "-- not selection"
else:
   #移動値の一致
   lSource = cmds.xform( lSelectObj[0], worldSpace = True, translation = True, q = True )
   cmds.xform( lSelectObj[1], worldSpace = True, translation = lSource )
------------------------------------------------------------------------- </font>





チェックボックスで移動値・回転値・スケール値を切り替えられる
-------------------------------------------------------------------------
import sys
import maya.cmds as cmds

#UIチェックボックス
cmds.window( title = "Match Global", width = 250 )
cmds.columnLayout( adjustableColumn = True )
oTranslationChek = cmds.checkBox( label = "translation", value = True )
oRotationChek = cmds.checkBox( label = "rotation", value = True )
oScaleChek = cmds.checkBox( label = "scale", value = True )
cmds.button( label = "Match", command = "fMatchGlobal()" )
cmds.setParent( '..' )
cmds.showWindow()

def fMatchGlobal():
   lSelectObj = cmds.ls( selection = True )
   if len( lSelectObj ) < 2:
      print "-- not selection"
      sys.exit()
   #移動値の一致
   if cmds.checkBox( oTranslationChek, q = True, value = True ):
      lSource = cmds.xform( lSelectObj[0], worldSpace = True, translation = True, q = True )
      cmds.xform( lSelectObj[1], worldSpace = True, translation = lSource )
   #回転値の一致
   if cmds.checkBox( oRotationChek, q = True, value = True ):
      lSource = cmds.xform( lSelectObj[0], worldSpace = True, rotation = True, q = True )
      cmds.xform( lSelectObj[1], worldSpace = True, rotation = lSource )
   #スケール値の一致
   if cmds.checkBox( oScaleChek, q = True, value = True ):
      lSource = cmds.xform( lSelectObj[0], worldSpace = True, scale = True, q = True )
      cmds.xform( lSelectObj[1], worldSpace = True, scale = lSource )

-------------------------------------------------------------------------</font>


コメント (1)
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする