CGらぼ

広く浅くCGを勉強していきます。

maya Python メモ

エッジを基準に頂点をマージする

import maya.cmds as mc;
mc.polyCollapseEdge(ch=True);

頂点を選択した場合

f:id:foreverLab:20151106143824j:plain

f:id:foreverLab:20151106143837j:plain

エッジを選択した場合

f:id:foreverLab:20151106142547j:plain

f:id:foreverLab:20151106142558j:plain

フェイスを選択した場合

f:id:foreverLab:20151106144024j:plain

f:id:foreverLab:20151106144036j:plain

 

 フェイスを基準に頂点をマージする

import maya.cmds as mc;
mc.polyCollapseFacet(ch=True);

頂点を選択した場合

f:id:foreverLab:20151106145105j:plain

f:id:foreverLab:20151106145116j:plain

エッジを選択した場合

f:id:foreverLab:20151106145129j:plain

f:id:foreverLab:20151106145139j:plain

フェイスを選択した場合

f:id:foreverLab:20151106145148j:plain

f:id:foreverLab:20151106145158j:plain

maya Pythonを使って頂点を選択する

任意の頂点を選択

import maya.cmds as mc;

mc.select('オブジェクト名.vtx[頂点番号]')

 

 ランダムに30個選択

import maya.cmds as mc;
import random;

vtxNum = mc.polyEvaluate(v=True);

vtxList = range(0,vtxNum);
vtxRanNum = random.sample(vtxList,30);
vtxRanStr = map(str,vtxRanNum);

for a in vtxRanStr:
    A1 = 'pSphere1.vtx[000]'
    A2 = A1.replace("000",a)
    mc.select(A2,add=True); 

maya Pythonを使ってエッジを選択する

polySelect

 

edgeBorder (eb)

境界になってるエッジを選択する。

※境界になっているエッジを指定しなくてはならい

引数型 unit

import maya.cmds as mc;

mc.polySelect('オブジェクト名',eb=エッジ番号);

 

edgeBorderPath (ebp)

境界エッジのを選択する

※始点エッジと終点エッジを指定しなくてはならない

引数型 [int,int]

import maya.cmds as mc;

mc.polySelect('オブジェクト名',ebp=(始点エッジ番号,終点エッジ番号));

 

edgeBorderPattern (bpt)

境界エッジを等間隔で選択する

エッジを2本選択しなくいてはならない

import maya.cmds as mc;

mc.polySelect('オブジェクト名',bpt=(エッジ番号(1),終点エッジ番号(2)));

 

edgeRing (er)

エッジをリング選択する

import maya.cmds as mc ;

mc.polySelect('オブジェクト名',er=エッジ番号);

 

edgeRingPath (erp)

エッジ間を最短距離リング選択する

※始点エッジと終点エッジを指定しなくてはならない

import maya.cmds as mc;
mc.polySelect('オブジェクト名',erp=(始点エッジ番号,終点エッジ番号));

 

edgeRingPattern (rpt)

エッジを等間隔リング選択する

エッジを2本選択しなくいてはならない

import maya.cmds as mc;
mc.polySelect('オブジェクト名',rpt=(エッジ番号(1),エッジ番号(2)));

 

edgeLoop (el);

エッジをループ選択する

import maya.cmds as mc;
mc.polySelect('オブジェクト名',el=エッジ番号);

 

edgeLoopPath (elp)

エッジ間を最短距離ループ選択する

※始点エッジと終点エッジを指定しなくてはならない

import maya.cmds as mc;

mc.polySelect('オブジェクト名',elp=(始点エッジ番号,終点エッジ番号));

 

edgeLoopPattern (lpt)

エッジを等間隔ループ選択する

エッジを2本選択しなくいてはならない

import maya.cmds as mc;

mc.polySelect('オブジェクト名',lpt=(エッジ番号(1),エッジ番号(2)));

 

edgeLoopOrBorder (elb)

エッジが境界上に関係なくループ選択する

import maya.cmds as mc;

mc.polySelect('オブジェクト名',elb=エッジ番号);

 

edgeLoopOrBorderPattern (lbp)

エッジが境界上に関係なく等間隔でループ選択する

※始点エッジと終点エッジを指定しなくてはならない

import maya.cmds as mc;

mc.polySelect('オブジェクト名',lbp=(始点エッジ番号,終点エッジ番号));

 

shortestEdgePath (sep)

頂点間のエッジを最短距離で選択する

import maya.cmds as mc;

mc.polySelect('オブジェクト名',sep=(始点頂点番号,終点頂点番号));

 

選択頂点の位置を取得

オブジェクトの頂点にボックスを配置したい!!

どうしたら出来るんだろう?

1)頂点を選択

2)頂点の位置情報取得

3)ボックスを頂点数分作成

4)それぞれのボックスを配置

 

頂点を選択

 

選択頂点の位置を取得

xfotm

# WorldSpace

WSvtxPos = cmds.xform(q=True , ws=True , t=True);
print WSvtxPos;

 

#ObjectSpace
OSvtxPos = cmds.xform(q=True , os=True , t=True);
print OSvtxPos; 

 このままだと頂点を複数選択していた場合、一つのリストとして取り扱われてしまうので、(x,y,z)に分けていく必要がある

zip(*[iter(S)]*n)

S・・・分割したいリスト

n・・・n個ずつ分割

# WorldSpace
WSvtxPos = cmds.xform(q=True , ws=True , t=True);
list = zip(*[iter(WSvtxPos)]*3);
print list; 

 リスト内の要素数を調べる

len

 # WorldSpace
WSvtxPos = cmds.xform(q=True , ws=True , t=True);
list = zip(*[iter(WSvtxPos)]*3);
print list;
print len(list);