頂点にボックスを配置するスクリプトをpythonで書いてみた!!
頂点に配置するスクリプトです。
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)
勉強中ですので、修正した方が良い箇所などございましたら、コメントいただけると助かります。
あと、出来れば赤ライン上にあるボックスのように、その他のボックスも回転を揃えたいのですが、現状のスクリプトでは上手くいっておりません。。。(法線情報でいけると思ったんだけどな。。。)
こっちの解決策も教えていただけると助かります。
maya Pythonに関しての質問です
選択した頂点の法線情報をpythonを使って取得したいのですが、どのようにしたら出来ますか?
maya Python メモ (エッジスムージング強度)
エッジにスムージング強度を設定する
import maya.cmds as mc;
mc.polyCrease(v=1.0);
v・・・エッジに影響
vv・・・頂点に影響
rv・・・頂点、エッジ双方に影響
maya Python メモ
エッジを基準に頂点をマージする
import maya.cmds as mc;
mc.polyCollapseEdge(ch=True);
頂点を選択した場合
エッジを選択した場合
フェイスを選択した場合
フェイスを基準に頂点をマージする
import maya.cmds as mc;
mc.polyCollapseFacet(ch=True);
頂点を選択した場合
エッジを選択した場合
フェイスを選択した場合
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を使ってフェイスを選択する
import maya.cmds as mc;
mc.select('オブジェクト名.f[フェイス番号]');
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=(始点頂点番号,終点頂点番号));