MAYAのエッジやフェースをMELスクリプトでカットするには
[polySplit]コマンドのエッジは [-edgepoint] 、フェースは[-facepoint] フラグを使います。
しかし、Pythonでこの2つのフラグの使用は推奨されてません。
本記事では、MAYAのメッシュオブジェクトのエッジやフェースをPythonスクリプトでカットする方法を紹介します。
|
Pythonスクリプトでエッジをカットする
MELと同様にPythonでエッジをカットする場合もコマンドは
polySplit
そしてフラグには
insertpoint(ip)
を使います。
insertpoint(ip)フラグで、挿入する頂点の位置を指定する方法は、
ip=[(エッジのインデックス, エッジに挿入する頂点位置のパーセンテージ)]
インデックス[2]のエッジの中間地点[0.5]に新しい頂点を追加するには次のように書きます。
import maya.cmds as cmds
cmds.polySplit( ip=[(2, 0.5)] )
オブジェクトを選択してスクリプトを実行すると、インデックス[2]のエッジの中間地点に頂点が追加されました。
選択したエッジを中央でカットする
エッジのインデックスについてもう少し詳しく解説すると、
insertpoint(ip) フラグの第1引数に指定するエッジのインデックスは、オブジェクトのエッジを選択して次のコードを実行
import maya.cmds as cmds
select_edge = cmds.ls(sl=True)
print(select_edge[0])
返されたエッジ名に付いてる [3] がインデックス番号を指します。
pCube2.e[3]
ポリゴンオブジェクト「pCube2」の選択したエッジの名前が「pCube2.e[3]」
例えば、選択したエッジの中間地点に頂点を追加するコードを書くとしたら次のようになります。
import maya.cmds as cmds
import re
select_edge = cmds.ls(sl=True)
#エッジ「pCube2.e[3]」から正規表現を使ってエッジのインデックス番号 3 を取り出す
select_edge_name = select_edge[0]
RE_EDGE_INDEX = re.compile(r'\[(?P<select_edge_name>[\d]+)\]')
match_edge_index = RE_EDGE_INDEX.search(select_edge_name)
edge_index = int(match_edge_index.group('select_edge_name'))
cmds.polySplit( ip=[(edge_index, 0.5)] )
ポリゴンオブジェクト「pCube2」のエッジを選択して、上記のコードを実行すると、選択したエッジの中間地点に頂点が追加されました。
エッジを7:3でカットする
頂点を追加する位置を中間地点以外の位置にするには、insertpoint(ip) フラグの第2引数に指定する値を変更します。
中間地点の「0.5」を「0.7」又は「0.3」にすると7:3の位置に頂点が追加されます。
※「0.7」と「0.3」のどちらが7:3になるのかはメッシュが生成される順番・並びで変わります。
import maya.cmds as cmds
import re
select_edge = cmds.ls(sl=True)
select_edge_name = select_edge[0]
RE_EDGE_INDEX = re.compile(r'\[(?P<select_edge_name>[\d]+)\]')
match_edge_index = RE_EDGE_INDEX.search(select_edge_name)
edge_index = int(match_edge_index.group('select_edge_name'))
cmds.polySplit( ip=[(edge_index, 0.7)] )
エッジを選択して上記のコードを実行すると、7:3の位置に頂点が追加されました。
フェースをカットする(エッジを挿入する)
フェースをカットする場合も
polySplitコマンドとinsertpoint(ip)フラグを使います。
insertpoint(ip)フラグに指定するエッジのインデックスと頂点位置のパーセンテージを続けて指定すると、追加した頂点に跨るエッジで繋がります。
エッジのインデックス[2]と[3]を中間地点てカットする場合は次のようになコードになります。
import maya.cmds as cmds
cmds.polySplit( ip=[(2, 0.5),(3, 0.5)] )
メッシュオブジェクトを選択して、上記のコードを実行すると、フェースを上下で分ける中間地点にエッジが挿入されました。
フェースに複数の頂点を追加してカットする
insertpoint(ip)フラグには2つの以上のインデックスとパーセンテージの値を指定できます。
例えば、追加する頂点の値を4つ指定して実行すると
import maya.cmds as cmds
cmds.polySplit( ip=[(3, 0.1), (1, 0.5), (2, 0.7), (0, 0.3)] )
フェースの4辺のエッジに1つずつ頂点が追加され、それぞれの頂点で繋がるエッジが挿入されました。
フェースに頂点を追加する
フェースに頂点を追加するには、insertpoint(ip)フラグに4つの引数を指定します。
ip=[(フェースのインデックス, ローカル座標X, ローカル座標Y, ローカル座標Z)]
注意しなければならないのは、フェースに頂点を追加する場合は、その前後に頂点を指定する必要がある事。
ip=[(エッジのインデックス, 頂点位置のパーセンテージ),(フェースのインデックス, ローカル座標X, Y, Z),(エッジのインデックス, 頂点位置のパーセンテージ)]
5つ追加する頂点の4つ目に、インデックス[0]のフェースのローカル座標XYZに[0.3, -0.5, 0.0]を指定。
import maya.cmds as cmds
cmds.polySplit( ip=[(3, 0.1), (1, 0.5), (2, 0.7), (0, 0.3, -0.5, 0.0),(0, 0.3)] )
実行すると、フェースに4つ目の頂点が追加されました。
フェース面から外れた位置に頂点を追加する
XYZの値を変更すればフェースの平面上から外れた位置に頂点を追加することも出来ます。
cmds.polySplit( ip=[(3, 0.1), (1, 0.5), (2, 0.7), (0, 0.3, -0.5, 1.0),(0, 0.3)] )
Z値を[1.0]にすると、ローカル座標1.0の位置に頂点が追加されます。
|
豊富なカスタマイズメニューで、あなた好みの1台が購入できます。
人気の秘密は何と言ってもコスパの高さ。
最新のCPU・GPUパーツを搭載したモデルを驚きの価格で提供。
山口県の自社工場で組み立てられ徹底した試験・検査後に出荷。
無償修理サービスもありサポート体制も安心。
コスパに徹底的にこだわる方は公式サイトへ >> 【FRONTIER】
|
|
|
BTOパソコンの草分け的ブランドFRONTIER(フロンティア) 3DCG/動画編集/ゲーム用途に合わせてCPUやGPUなどパーツを自由に選べてコスパにもこだわる方にオススメ。 |
|
|
|
|
|