最終更新: rt_3dcg_tips 2020年05月03日(日) 00:45:54履歴
アイコン |
MAYAは法線方向の移動やTransComponentで膨らませることはデフォルトでできるんですが、毎回決まった値で膨らませたかったのです。
Softimageや3dsMAXではPush DeformerとかPush Modifierとか言われている機能です多分。雑ですがGUI付きです。
MEL版とPython版がありますのでお好きな方をお使いください。
Gumroadからもダウンロードできるようになりました!
KMJ INFLATE -Gumroadページ-
実行するとこんな感じです。
/* kmjInflate.mel 入力された数値分法線方向に移動するMelです。頂点数が多過ぎると重くなります。 2016/04/15 作成 */ //実行部 global proc kmjInflateExec() { ConvertSelectionToVertices; //選択を頂点に変換 string $vtxList[] = `ls -sl -fl`; //選択頂点配列を個別に取得 int $listSize = `size $vtxList`; //頂点数の取得 string $str = ""; //空の文字列作成 float $inflateValue = `floatField -query -value FLOAT_FIELD1`; //フロートフィールド1を$inflateValueに代入 for ( $i = 0; $i < $listSize; $i++){ $str = $str + " -n " + $inflateValue; //頂点数分”-n 数値”を追加 } eval("moveVertexAlongDirection" + $str ); //法線移動(moveVertexAlongDirection)実行 } //UI作成 global proc kmjInflate() { if((`window -ex kmjInflateWindow`) == true ) deleteUI kmjInflateWindow; window -t "kmjInflate" kmjInflateWindow; rowLayout -numberOfColumns 3; text -label "Inflate Value:"; floatField -w 100 FLOAT_FIELD1; //フロートフィールド1 button -l "Inflate" -w 100 -c "kmjInflateExec()"; //実行ボタン showWindow; }
- スクリプト本文をコピーしてkmjInflate.pyというファイル名で保存
- mayaのscriptsフォルダに置く
- スクリプトエディターにて
import kmjInflate kmjInflate.main()と入力して実行
# -*- coding: utf-8 -*- import maya.cmds as cmds """ #選択したコンポーネントを任意の数値で法線方向に膨らませるスクリプトです。 #スクリプトエディターのPythonタブに下記をコピーして実行するか、シェルフに登録してください。 import kmjInflate kmjInflate.main() """ class KMJ_InflateWindow(object): def __init__(self): self.window = 'kmjInflateWindow' self.title = 'kmjInflate' self.size = (350, 95) def create(self): if cmds.window('kmjInflateWindow', exists=True): cmds.deleteUI('kmjInflateWindow', window=True) self.window = cmds.window( self.window, t=self.title, widthHeight=self.size ) self.layout() cmds.showWindow() def layout(self): self.rowLayout = cmds.rowLayout(numberOfColumns=3) self.textLabel = cmds.text( label='Inflate Value:' ) self.field_value = cmds.floatField(v=0.1) self.button = cmds.button(l='Inflate', c=self.buttonCmd) def buttonCmd(self, *args): inflate_value = cmds.floatField(self.field_value, q=True, v=True) inflate_value_string = [] tmp_vertex = cmds.ls(sl=True) select_vertex = cmds.polyListComponentConversion(tmp_vertex, tv=True) cmds.select(select_vertex) select_vertex = cmds.ls(sl=True, fl=True) for i in select_vertex: inflate_value_string.append(inflate_value) cmds.moveVertexAlongDirection(n= inflate_value_string) print("Inflate Value:" + str(inflate_value)) def main(): kmjInflateWindow = KMJ_InflateWindow() kmjInflateWindow.create()
タグ
コメントをかく