CGらぼ

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

頂点にボックスを配置するスクリプトをpythonで書いてみた!!

頂点に配置するスクリプトです。

f:id:foreverLab:20151108182202j:plain

 

import maya.cmds as mc;
import random;

mc.polySphere(r=3,sx=16,sy=16);

vtxNum = mc.polyEvaluate(v=True);

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

for a in vtxRanStr:
    A1 = 'pSphere1.vtx[000]'
    A2 = A1.replace("000",a)
    for b in A2:
        ver = mc.select(A2)
        tvf = mc.polyListComponentConversion(ver,fv=True,tvf=True)
        mc.filterExpand(tvf,sm=70,ex=True)
        normal = mc.polyNormalPerVertex(q=True,xyz=1)
        position = mc.xform(q=True,ws=True,t=True)
    
        box = mc.polyCube(ax=[normal[0],normal[1],normal[2]],w=0.1,h=0.1,d=0.1)
        mc.move(position[0],position[1],position[2],box)
        mc.rotate(normal[0],normal[1],normal[2],box,ws=True) 

 

勉強中ですので、修正した方が良い箇所などございましたら、コメントいただけると助かります。

 

あと、出来れば赤ライン上にあるボックスのように、その他のボックスも回転を揃えたいのですが、現状のスクリプトでは上手くいっておりません。。。(法線情報でいけると思ったんだけどな。。。)

こっちの解決策も教えていただけると助かります。

f:id:foreverLab:20151108182510j:plain

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=(始点頂点番号,終点頂点番号));