ON-BLOG

CGのこと、あれこれ書いてます。

【覚書】maya python入門 其の七

今回は昔作った勉強用のスクリプトがあったので
それを紐解いていきたいと思います。

内容は、スライダーで設定された値を持って
球を作成するというモノになります。
こんな感じです。↓
f:id:tommy_on:20150708114857g:plain

では早速コード

import maya.cmds as cmds

if cmds.window("Obj_EditWindow",exists=True):
	cmds.deleteUI(Set_Window)

Set_Window = cmds.window("Obj_EditWindow",t="Edit_Radius",w=300,h=300)
cmds.columnLayout(adj = True)
cmds.text("Input RadiusValue")

SetRadius = cmds.intSliderGrp( l = "Radius_Value", min = 0.01 , max = 100 , f = True)

cmds.button( l = "Create_Sphere",c="Create_Sphere()")
cmds.showWindow(Set_Window)


def Create_Sphere():
	GetRadius = cmds.intSliderGrp(SetRadius, q=True , v=True)
	C_Sphere = cmds.polySphere(r=GetRadius, n="Sphere_SetRadius")

とても簡単なツールなんで、行も少ないですね。
細かい説明は今度するとして、もう一個スクリプトがあったので
こちらも貼ってみたいと思います。

Aimコンストを行うスクリプト?(マクロ)です。
実行するとこんな感じ。↓
f:id:tommy_on:20150708114935g:plain

コード。

import maya.cmds as cmds
oSel = cmds.ls(orderedSelection=True)
if len( oSel ) >= 2:
	target = oSel[0]
	oSel.remove( target )
	for i in oSel:
		cmds.aimConstraint(target,i,aimVector=[0,1,0])
else:
	print 'plase two selection!'

こちらも特に説明がなくてもいい気がしますね。

最後にもう一個。
これは今でも偶に観ています。
ってかHELPに全く同じやつが載ってるはずです・・・

こんなやつです。↓
f:id:tommy_on:20150708115002g:plain


コード↓

mods = cmds.getModifiers()
print 'Modifiers are:'
if (mods & 1) > 0:
	print ' Shift'
if (mods & 2) > 0:
	print ' CapsLock'
if (mods & 4) > 0:
	print ' Ctrl'
if (mods & 8) > 0:
	print ' Alt'


これが本当によく使うコードなので
覚えておきたいんですが、すぐ忘れるんですよね・・・。



とまぁ今回はこの辺りで。

以上。

【覚書】maya python入門 其の六

続いて少しだけ数学をしたいと思います。
やっぱりスクリプトやるとなると、この辺り補っていかないと
後々苦労したり、無駄が増えてしまうので…

と書きつつ詳しい事は説明しません。
※できません汗

なので、コード見つつこんな事ができるんだ…。
程度で進めていければ、幸いです。

ってことでまずは、三角関数を使って
球を円状に配置したいと思います。
コード

import maya.cmds as cmds
import math
num = 60
radius = 6

for i in range(num):
    Cir = 2.0 * math.pi * i / num
    x = radius * math.sin(Cir)
    z = radius * math.cos(Cir)
    cmds.polySphere(r=0.5)
    cmds.move(x,0.0,z)

f:id:tommy_on:20150630151612p:plain

こんな感じになります。
「num」が球の総数で、
radius」が半径ですね。

円を描いているところは
実質この部分

 Cir = 2.0 * math.pi * i / num
    x = radius * math.sin(Cir)
    z = radius * math.cos(Cir)

一行目で、円周と総数を割って、一個辺りの角度を求め
2,3行目で縦、横の長さ(比率)を取得し、その値でXYに値を代入しています。

原理が分かれば、超簡単なんですが、高校数学を挫折していた人間からすると
相当悩みました。
今でもまだ理解仕切ってません。

ただ、そういうものだ。と思えばとりあえずはいいじゃないでしょうか?
原理が分かれば、多種多様に使えるので覚えた方がいいですが・・・・


さておき、次は上記2Dだったので、3Dにしてみようかと思います。
なので、少しだけいじって螺旋をしてみました。

import maya.cmds as cmds
import math
num = 60
radius = 6

for i in range(num):
    Cir = 2.0 * math.pi * i / num
    x = radius * math.sin(Cir)
    z = radius * math.cos(Cir)
    y = i
    cmds.polySphere(r=0.5)
    cmds.move(x,y,z)

f:id:tommy_on:20150630151722p:plain

ほとんど上と変わってないです。
Y(高さ)の値に1ずつ増える値を入れているだけです。
少しの違いで結構な差がでるのは、触ってて面白いですよね。



さて次は折角三角関数を使ってるので、それをエクスプレッションに仕込んでみたいと思います。
ちょうどWEBに似たような奴があったので、簡単にカスタムしてみました。

import maya.cmds

num = 10
for i in range(0, num):
    name = maya.cmds.polySphere()
    maya.cmds.move(i * 2, i * 2, 0)
    val = i * 0.5
    maya.cmds.expression(object=name[0], string=('ty = 3 * sin(time + ' + str(val) + ');'))

f:id:tommy_on:20150630151811g:plain
ほとんど変えてませんw
コピペだけはしてませんが。

思ったですが、エクスプレッションMAYAは、編集し易いですね。。。
めちゃくちゃびっくりしました。


では、軽く説明。

maya.cmds.expression(object=name[0], string=('ty = 3 * sin(time + ' + str(val) + ');'))

作成した、オブジェクトに対して、「トランスYにサインカーブ」のエクスプレッション仕込む。
という内容ですね。
特に難しい事はないかな?と思います。

そいや、謎というか、MAYAの仕様というか
エクスプレッション自体はMELで記述しなければいけません。
※微妙にPythonの書き方とは違いますよね?

なので、基本MEL文法になるように、且つ仕込む場合は文字列として記載しなければならないので
「string=()」でMEL記述を文字列にしております。
この辺り少しややこしいので、注意が必要です。
仕込まれたデータを見るとこんな感じですね。
f:id:tommy_on:20150630151918p:plain

うん。MELですねw
ちなみにエクスプレッションのエディタは、アトリビュートのトランスフォーム(挿入されているノード)
で右クリックで、出ますね。



では続けてもう一個。
2個目のスクリプトをエクスプレッションにしたものですね。

import maya.cmds as cmds
import math
num = 150
radius = 3

for i in range(num):
    Cir = 2.0 * math.pi * i / num
    x = radius * math.sin(Cir)
    z = radius * math.cos(Cir)
    y = i
    oObj = cmds.polySphere(r=0.5)
    cmds.expression(s=(oObj[0]+'.tx = '+ str(radius) +' * cos(time + ' + str(Cir) + ');'))
    cmds.expression(s=(oObj[0]+'.ty = time + ' + str(y) + ';'))
    cmds.expression(s=(oObj[0]+'.tz = '+ str(radius) +' * sin(time + ' + str(Cir) + ');'))

f:id:tommy_on:20150630152021g:plain

螺旋みたいな、龍みたいな。
今回はエクスプレッションののターゲットを直で指定しています。

cmds.expression(s=(oObj[0]+'.tx = '+ str(radius) +' * cos(time + ' + str(Cir) + ');'))

この方が兎に角楽です。。。。



あ、そいやさっきも使ってましたが、エクスプレッションに「time」を仕込むことで
タイムラインに沿った動きが可能となります。
詳しい事はこちらに譲ります。


最後にタンジェントも使ってみたかったので、こちらも
f:id:tommy_on:20150630152156g:plain
意図したものと少し離れてしまいましたが、まぁよしとします…
こんな感じで、色々出来たりします。
ちなみにグーグルさんで色々なカーブが見れるので参考に実行してみると
面白いかもですね笑




こんな感じでエクスプレッションも簡単にスクリプトから実行できるので
リグとかも使えそうですね。
ただ、内容がMELなのはイケテナイっす。
まぁ仕方ないですが・・


以上です。

【覚書】maya python入門 其の五

間はさみましたが、続けてキーのコピー、ペーストの方を見て行きたいと思います。
全体的にアニメーターよりの内容になっていきますが、概念は同じなのでご了承下さい。

まずはコードから。

import maya.cmds as cmds

oCube = cmds.polyCube(n='Cube_KeyEdit')
oTime = cmds.currentTime(q=True)
oCurrent = float(oTime)
print oCurrent

cmds.setKeyframe( oCube[0], t=0 ,v=5, at='translateZ')
cmds.setKeyframe( oCube[0], t=10 ,v=-5, at='translateZ')
cmds.setKeyframe( oCube[0], t=20 ,v=5, at='translateZ')
cmds.setKeyframe( oCube[0], t=30 ,v=-5, at='translateZ')
cmds.setKeyframe( oCube[0], t=40 ,v=5, at='translateZ')

f:id:tommy_on:20150630151234p:plain

内容は簡単で立方体を作成して、キーを打ってるだけです。
上部の変数は後ほど使う物ですね。
これを元に、キーのコピーだったりペーストをやってみたいと思います。
内容的には再度上記の状態を作成して、それに対して
キーをコピーカレントフレームにペーストし、サイクル処理を行う。
というところまでやってみたいと思います。

コード

import maya.cmds as cmds

oCube = cmds.polyCube(n='Cube_KeyEdit')
oTime = cmds.currentTime(q=True)
oCurrent = float(oTime)
print oCurrent

cmds.setKeyframe( oCube[0], t=0 ,v=5, at='translateZ')
cmds.setKeyframe( oCube[0], t=10 ,v=-5, at='translateZ')
cmds.setKeyframe( oCube[0], t=20 ,v=5, at='translateZ')
cmds.setKeyframe( oCube[0], t=30 ,v=-5, at='translateZ')
cmds.setKeyframe( oCube[0], t=40 ,v=5, at='translateZ')

cmds.selectKey( oCube[0], attribute='translateZ' )
cmds.copyKey(oCube[0])
cmds.pasteKey(oCube[0],time=(oCurrent,oCurrent),attribute='translateZ')
cmds.setInfinity( pri='cycle',poi="cycle")

f:id:tommy_on:20150630151304p:plain

こんな感じです。
特に難しい処理は行なっておりませんが、SIと違って
Fカーブエディタ(グラフエディタ)の扱いが超絶楽ですね。

さすがにこれだけだと寂しいので、一個簡単なスクリプトを。
SIでよく使っていた、カーブのタンジェントを頭のキーと、お尻のキーを合わせるものです。
今回は難しい事はしたくないので、単純にお尻のキータンジェント
頭のキータンジェントにコピーしたいと思います。
ではコード

import maya.cmds as cmds
cmds.select()
oSel = cmds.ls(sl=True)
oKeys = cmds.keyTangent(oSel,q=True,outAngle=True)
oTan = oKeys[-1]
oTime = cmds.keyTangent(oSel,e=True,index=(0,0),inAngle=oTan)

f:id:tommy_on:20150630151328p:plain

こんな感じです。
ゲームアニメーションとか作ってると、これを多用します。
アウトアングルを配列でGETして、その最後の要素をoTan = oKeys[-1]の「[-1]」で取得。
それを、「cmds.keyTangent(oSel,e=True,index=(0,0),inAngle=oTan)」で頭のキー(index=(0,0))で
キーを指定して、タンジェントにペーストしてます。
これをベースに処理軽減だったり、複数化を仕込むと仕事で使えそうですね。


と今回この辺りで…。

次回はエクスプレッションかランダムについて進めていきたいと思います。


以上。

【覚書】maya python入門 其の四

肝心なことを書き忘れていたので、書いていきたいと思います。

色々書いてもあれなので、まずはコードを書いてみたいと思います。

import maya.cmds as cmds
oCube = cmds.polyCube(w=1,h=1,n="Cube_Make")
cmds.polyCube(oCube[0],e=True,sx=1,sy=2,sz=3)
oSx = cmds.polyCube(oCube[0],q=True,sx=True)
oSy = cmds.polyCube(oCube[0],q=True,sy=True)
oSz = cmds.polyCube(oCube[0],q=True,sz=True)
print oSx
print oSy
print oSz

f:id:tommy_on:20150629103846p:plain

立方体を作成して、サブディビジョンの値をを変えて、それをログに出しているだけです。
これで言わないといけない部分が

cmds.polyCube(oCube[0],e=True,sx=1,sy=2,sz=3)

この文の「e=True」という部分です。

前回は「getAttr」「setAttr」を使用して値を取得していましたが
MAYAは基本フラグを使用して
値を編集、取得できます。


それが上記文に書いている「e=True」これは「edit=True」の略語です。
文字通り「edit」なので、編集ができます。

参照(取得)は「q=True」「query=True」
上記スクリプトでいう

oSx = cmds.polyCube(oCube[0],q=True,sx=True)
oSy = cmds.polyCube(oCube[0],q=True,sy=True)
oSz = cmds.polyCube(oCube[0],q=True,sz=True)

の部分です。
queryの後にサブディビジョンの値を参照(取得)してます。
※サブディビジョンの値一気に取得できる方法ないのかな…


こんな感じでHELPをみて「E」「Q」マークがある物については
フラグの指定で値を編集、参照できたりします。
f:id:tommy_on:20150629103857p:plain

逆にその指定が無いフラグ、且つ取得編集ができるものについては
「getAttr」「setAttr」を使用して値をいじるわけですね。
あと、これもハマる部分なんですが、MAYAPythonって少数点の扱いがキチンとされていたりしますね。
なので、これで計算すると、四捨五入されてしまいます。

oNumber = 100/15
print oNumber

きちんと指定するとこんな感じ。
ただ、小数点を記載しただけです。

oNumber = 100.0/15.0
print oNumber

f:id:tommy_on:20150629103956p:plain
地味にハマる所ですよね。


こんな感じでフラグによる参照、編集のお話でした。
とこのまま終わると説明だけですげぇつまんない感じになりそうなので
一個だけ簡単なスクリプトを。
まずはコード。

import maya.cmds as cmds

cmds.window(title="Anather_Window",widthHeight=(720, 480))
cmds.paneLayout()
cmds.modelPanel()
cmds.showWindow()

SIでいう、オブジェクトビュー的な感じを作成するものです。
f:id:tommy_on:20150629104005p:plain

アニメーションする時によく使うので(SIで)。。

ただ、これHELPに載っていた内容なので、探ればまだまだ色々できそうです。


以上です。

【覚書】maya python入門 其の三

では続き。

前回はSET側のコードで移動させたり、KEYを打ったりしてました。
今回はGET側をやってます。

まず初めに前回の環境を作成します。

import maya.cmds as cmds
cmds.polyCube( n='Cube_Move' )
cmds.move( 5, 1, 1 )
cmds.setKeyframe( at='translateX',v=10 ,time=30 )

f:id:tommy_on:20150621014003p:plain

これで画像みたいな環境ができたと思います。
ここから値を取得して、編集してみたいと思います。

始めに移動値の値を取得します。
値を取るには「getAttr」を使用するみたいです。
※これ以外にもあるのかな??

import maya.cmds as cmds
maya.cmds.select('Cube_Move') 
tx = maya.cmds.getAttr('.tx') 
print tx

f:id:tommy_on:20150621013029p:plain
これで取得できました。
getAttr('.tx') この部分の引数を変えてあげると色々取得できますね。
引数についてはこちらを
http://me.autodesk.jp/wam/maya/docs/Maya2009/CommandsPython/getAttr.html
ちなみに「tx」はトランスXです。
もちろん「translateX」と書くことも可能です。
他にも
「ty」「tz」トランスY、トランスZ
「rx」「ry」「rz」ロットXYZ
「sx」「sy」「sz」スケールXYZ
と書きます。
全体を取得したい時は
「translate」「rotation」「scale」と記述して下さい。
それぞれ「X,Y,Z」として取得できます。

では続いてはキーフレームを取得します。
ここについてはやり方が少し分からなかった(他にももっとあると思います)
ので、HELPで引っ掛かった「findKeyframe」を使用してみます。

import maya.cmds as cmds
maya.cmds.select('Cube_Move') 
tx = cmds.findKeyframe( 'Cube_Move',timeSlider=True, which='first' )

f:id:tommy_on:20150621013305p:plain

※画像は値が「which='next'」となってますが「which='first'」の間違いです。。。
とりあえずこれで取得できました。
findKeyframeについてはこちらを参照。
findKeyframe command

これ以外だとこんな感じ?

import maya.cmds as cmds
maya.cmds.select('Cube_Move') 
tx = cmds.keyframe('Cube_Move.translateX',index=(0,0),query=True);
print tx

※結果は上の画像と全く同じです。

ただこれだと一番初めのキーしか取得できない。
一応逆に最後だけ調節すには、こんな感じで記述します。

import maya.cmds as cmds
maya.cmds.select('Cube_Move') 
tx = cmds.keyframe( query=True, lsl=True, timeChange=True )

f:id:tommy_on:20150621013340p:plain

もしくはこんな感じ。

import maya.cmds as cmds
last = cmds.findKeyframe(timeSlider=True, which='last') 
print lastKey

※結果は上の画像と全く同じです。

GetKeyinfo的なものは「findKeyframe」が一番近いですね。
これを使っていきます。

これで取得できました。
次に値の変更をしてみます。
今上の画像をみると「30Fと66F」にキーフレームがあります。
これを30Fを0Fに、66Fを70Fにした後に、その値を「0」にしてみましょう。
考察すると、頭のキーフレームとお尻のキーフレームが取れれば
なんとかなりそうですね。
って事でコード。
まずは先頭のキーを「0F」にしてみます。

import maya.cmds as cmds
maya.cmds.select('Cube_Move') 
tx = cmds.keyframe(index=(0,0),timeChange=0)

f:id:tommy_on:20150621014622p:plain

これで先頭は変わりました。
続いてお尻のキーを移動、値変更してみます。
ラストキーフレームはどうやって取得したらいいのか?
全くわからなかったんで、indexで無理やり取得してみました。
値はtimeChange同様にChangevalueで変更できそうです。

import maya.cmds as cmds
maya.cmds.select('Cube_Move') 
cmds.keyframe('Cube_Move',index=(0,0),timeChange=0)
cmds.keyframe('Cube_Move',index=(1,1), timeChange=70, valueChange=0 )

f:id:tommy_on:20150621013559p:plain

うーん。。
すごく最終フレームの処理が汚いですね。
indexがあるんだからlastはあってよ…と思いますが。。
他にもTIMEで指定する方法もあったりしますが
どちらにしても汚いっすね。

import maya.cmds as cmds
maya.cmds.select('Cube_Move') 
cmds.keyframe('Cube_Move',index=(0,0),timeChange=0)
cmds.keyframe('Cube_Move',t=(66,66), timeChange=70, valueChange=0 )

※結果は上の画像と全く同じです。

こんな感じで「とりあえず」キーの取得ができました。
ここから拡張するとなると、折角値を取れたんで
キーを全体的にずらす方法を書いてみようと思います。

import maya.cmds as cmds
def Time_Offset():
    Offset_Number = cmds.textField( "Time_Offset", q=True, tx=True )
    selected_object = cmds.ls( type=['animCurveTL','animCurveTU','animCurveTA','animCurveTT'])
    cmds.keyframe(selected_object,edit=True,relative=True,timeChange=Offset_Number)

cmds.window(title="offset")
cmds.columnLayout()
cmds.textField( "Time_Offset" )
cmds.button( l="Offset", command="Time_Offset()" )
cmds.setParent( '..' )
cmds.showWindow()

f:id:tommy_on:20150621015703g:plain


こんなかんじで選択した物を、入力された値全体的にずらします。
内容は関数とか使ってますが、めちゃくちゃ簡単です。

def Time_Offset():
    Offset_Number = cmds.textField( "Time_Offset", q=True, tx=True )
    selected_object = cmds.ls( type=['animCurveTL','animCurveTU','animCurveTA','animCurveTT'])
    cmds.keyframe(selected_object,edit=True,relative=True,timeChange=Offset_Number)

関数部分です。
一行目で関数宣言し、二行目でインプットボックスを作成
三行目で選択した物をフィルタリング。
この時アニメーションしてるものだけに篩をかけております。
四行目はさっきのコマンドに、入力された値をいれているだけです。

cmds.window(title="offset")
cmds.columnLayout()
cmds.textField( "Time_Offset" )
cmds.button( l="Offset", command="Time_Offset()" )
cmds.setParent( '..' )
cmds.showWindow()

この部分はウィンドウ生成部分ですね。
詳しくは省きますが、WEBに腐るほど資料がありますよ…
PySide含めて…

…っと
長くなったので、今回はこの辺りで。
次回はアニメーションされたキーフレームのコピペをベースに行きたいと思います。
以上です。

【覚書】maya python入門 其の二

続いて値の設定について書いていきたいと思います。
SIと同じで、アトリビュートのGET,SETValueがあるみたいなんですが
値の設定だけならもっと簡単にできそうです。
今回はまず、SET側からみていきましょう。

import maya.cmds as cmds
cmds.polyCube( n='Cube_Move' )
cmds.move( 5, 1, 1 )

f:id:tommy_on:20150614162941p:plain

とてもシンプルな内容ですね。
立方体を作成して、移動しているだけです。
ただこれSIと少し違ってトランスフォームについて書くわけではなく
「move」と大きく括って書くんですね。
※もちろんトランスフォーム指定して、移動させることも可能です。
とてもシンプルに思いました。
ではここからカスタムしていきたいと思います。

初めに移動したので、キーを打ってみたいと思います。
コードはこんな感じ。

import maya.cmds as cmds
cmds.polyCube( n='Cube_Move' )
cmds.move( 5, 1, 1 )
cmds.setKeyframe()

f:id:tommy_on:20150614163235p:plain

すごくシンプルにキーが打てます。

setKeyframe()

これがキーを打つコマンドになります。
ただ、正直個人的には、パラメータ全体にキーが打たれますよね。
これだと、Fカーブエディタ(グラフエディタ)が汚くなります。
個人的に超絶これが嫌いなので、このままだと使うきすらありません笑

私みたいに、「必要なパラメータだけ打ちたい!」
こんな時はフラグを色々触るといいです。
setKeyframe コマンド

結構ありますね。。
個人的に、見ていって「レイヤー指定」ができるのは少し楽しみかも。



では、今回は移動のXパラメータを指定してみましょう。
こんな感じ。

import maya.cmds as cmds
cmds.polyCube( n='Cube_Move' )
cmds.move( 5, 1, 1 )
cmds.setKeyframe( at='translateX' )

f:id:tommy_on:20150614163331p:plain

はい。
「setKeyframe( at='translateX' )」
ここでアトリビュートをトランスXに指定しているわけです。
とても簡単。
ちなみに、時間や値もsetKeyframe側で変更できますね。

import maya.cmds as cmds
cmds.polyCube( n='Cube_Move' )
cmds.move( 5, 1, 1 )
cmds.setKeyframe( at='translateX',v=10 ,time=30 )

f:id:tommy_on:20150614163402p:plain

こんな感じで値をセットできます。
では次はSETでは無く、GETしてみたいと思います。

以上。

【覚書】maya python入門

一から説明用にmayaMelではなく、mayaPythonの資料を書く必要があったので
メモに残して行こうかと思います。

まずはSIでも同じだが、色々なサイトをめぐりました。



SIからの移行に関しても色々書いて頂いているダイキンさんのサイト

http://www.comtec.daikin.co.jp/DC/UsersNotes/index.html



MELで大変お世話になったサイト

http://www.not-enough.org/abe/manual/maya-python/introduction-python.html



上記のサイトは非常に分かりやすいので
それに沿って、簡易なものを一個一個実行して覚えていくスタイルにしてみます。

あ、あとは英語ですがデジタルチューターズもいい感じですね。


さて前置きはこの程度にしておいて
さっそくコード書いていきます。
今回Python自体の説明については省ける所は
ガンガン省いていきます。
※時間が無いので…


ではまずは選択からですね。
これが無いと始まりませんネ。

import maya.cmds as cmds
cmds.select()
oSel = cmds.ls(sl=True)
print oSel

非常に簡単なコードです。
選択した物をリストにして、プリントしているだけですね。
f:id:tommy_on:20150607000508p:plain



SI的な感覚だと

import maya.cmds as cmds
oSel = cmds.select()
print oSel(0)

とかでできねぇのかよ!!!
とか思うんですが、MAYAさんは一度リストで取得する必要があるみたいです。
「oSel = cmds.ls(sl=True)」
ここですね。「ls」リストに「sl」選択を格納

としないとダメなんですね…
ちなみに
「Select」の引数については公式にやたらと羅列されておりますね。

http://help.autodesk.com/cloudhelp/2016/JPN/Maya-Tech-Docs/CommandsPython/select.html





ダイキンさんのサイトでも紹介してましたが、階層以下ノード全て(トランス、シェイプ含む)

選択するにはこんな感じにすればいいみたいです。

import maya.cmds as cmds
cmds.select(hierarchy=True)
oSel = cmds.ls(sl=True)
print oSel

f:id:tommy_on:20150607000603p:plain

Selectの引数に「Hierarchy」(階層)の引数をONにするだけですね。

これは便利ですね。


ただこれだと全て選ばれるので、微妙に不便です。

なので、引数のところに色々条件を加えてみました。


トランスフォームノードだけ

import maya.cmds as cmds
cmds.select(cmds.ls(selection=True, dagObjects=True, type='transform'))
oSel = cmds.ls(sl=True)
print oSel

f:id:tommy_on:20150607000642p:plain

シェイプノードだけ

import maya.cmds as cmds
cmds.select(cmds.ls(selection=True, dagObjects=True, type='shape'))
oSel = cmds.ls(sl=True)
print oSel

f:id:tommy_on:20150607000703p:plain

単純にSelectの引数にDagフラグを立て、タイプを絞っただけです。
こんな形でSIのフィルタや、Typeに近い感じで選択の取得ができます。

ふぅ。。

第一回目はとりあえずここまで。
次は特に考えてないので、お題が出れば作成してみたいと思います。

以上です。