2016年07月27日

modo10のスクリプトについて調べてみた その4

前回に引き続き「コマンドプラグインキット」で生成した「コマンドプラグイン」のテンプレートについて調べてみたい。

前回は「__init__()」に

self.dyna_Add(name, type)

name:コマンド引数の内部名称
type:引数のタイプ

を書き込むことでコマンドに引数を追加出来るというところまで調べた。

この「dyna_Add()」をコマンドに必要なら引数の数だけ「__init__()」に追加するだけでコマンドに引数が追加される。

そして追加された引数は「BasicCommand」クラス内では0から始まる追加順の通し番号で管理される。

例えば下のようになっていた場合、「myBoolean」は0番、「myDistance」は1番といった具合だ。

def __init__(self):
lxu.command.BasicCommand.__init__(self) self.dyna_Add ("myBoolean", lx.symbol.sTYPE_BOOLEAN) self.dyna_Add ("myDistance", lx.symbol.sTYPE_DISTANCE) self.dyna_Add ("myAngle", lx.symbol.sTYPE_ANGLE)

入力された引数から値を読み込むにはその番号を使って、

myBoolean = self.dyna_Bool (0, False)
myDistance = self.dyna_Float (1, 0.0)
myAngle = self.dyna_Float(2, 0.0)

のようにすればいい。値の取得には下の4つのメソッドが使える。indexが登録時の通し番号で、valueはデフォルト値だ。

fig01

引数のタイプはいろいろあったけど、実際記録されるのはInt(整数)、Float(実数)、String(文字列)になる。読み込む時は型にあわせたメソッドを選択する必要がある(ブーリアンは整数として記録されるけど、専用メソッドがあるので、IntとしてもBoolとしても読み込める)。

例えば以前にやった「cmd_cloneItem.py」の2つのメソッドを以下のように書き換えて、

def __init__(self):
   lxu.command.BasicCommand.__init__(self)
	self.dyna_Add("newName", lx.symbol.sTYPE_STRING)

def basic_Execute(self, msg, flags):
   reload(myPythonModule)
	newname=self.dyna_String(0,"")
   myPythonModule.cloneSelectedItems(newname)

「__init__.py」を以下のように書き換えれば、

import modo

def cloneSelectedItems(newname):
	scene = modo.Scene()
	for item in scene.selected:
		duplicate = scene.duplicateItem(item)
	if newname=="":
		duplicate.name = '%s_copy' % item.name
	else:
		duplicate.name = newname

コピーしたアイテムにつける名前を引数に設定出来るようになる。

このように引数をつけてコマンドを呼び出せば、

fig02

コピーされたアイテムの名前を直接指定できる。

fig03

引数を何もつけないで起動すると引数の値を聞くダイアログボックスが出る。

fig04

何も入力しないで「OK」を押すと従来通りアイテムに「_copy」が付いた名前のコピーが出来る。

fig05

このように引数がありながらコマンド起動時に与えない場合、自動的にダイアログボックスが出ちゃうんだけど、下のように引数0番に対して「fCMDARG_OPTIONAL」を設定してやれば、ダイアログを抑制して何も指定が無ければデフォルトの値を使うようにする事も出来る。

def __init__(self):
	lxu.command.BasicCommand.__init__(self)
	self.dyna_Add("newName", lx.symbol.sTYPE_STRING)
	self.basic_SetFlags (0, lx.symbol.fCMDARG_OPTIONAL)

このように何も引数をつけないで起動すると、

fig06

従来通り「_copy」を付けたアイテムが生成される。

fig07

続きはまた次回。

modo10ブログ目次



take_z_ultima at 11:30│Comments(0)TrackBack(0)modo | CG

トラックバックURL

この記事にコメントする

名前:
URL:
  情報を記憶: 評価: 顔   
 
 
 

Archives