AMDlabの森山です。
あっさりとした内容です。いくつかGHPythonで、調べるほどでもないけど知っておくと便利なTipsを共有しようとおもいます。
Componentの下のメッセージをつける
画像のようにComponentの下の方にメッセージを付ける方法です。
1 2 |
msg = "Running" ghenv.Component.Message = msg |
これだけでOkです。例えば、これをIf文で分岐させてみれば
1 2 3 4 5 |
if Run: msg = "Running" else: msg = "NotRunning" ghenv.Component.Message = msg |
として各処理を入れてあげればわかりやすくなります。
Input / Outputに説明を付ける2通りのやり方
まずは簡単なやり方です。一番最初にPythonをおくと、以下のようなデフォルトコードが与えられていると思います。
1 2 3 4 5 6 |
"""Provides a scripting component. Inputs: x: The x script variable y: The y script variable Output: a: The a output variable""" |
まさにこれが説明文です。PythonコンポーネントのInput名を合わせて、同じ形式で書いていくことで、説明を追加することができます。
ModeをSDKModeにするとわかりすが、実際にはdef RunScript(self, x, y):の関数の中身となっています。
1 2 3 4 5 6 7 8 9 |
"""Provides a scripting component. """Provides a scripting component. Inputs: first_number: The first Num second_number: The second Num Output: Result: The a output variable""" result = first_number + second_number |
もう一つ方法があります。Python側からInputにアクセスする方法です。
1 2 3 4 |
ghenv.Component.Params.Input[0].Description = "First input." ghenv.Component.Params.Input[1].Description = "Second input." ghenv.Component.Params.Output[1].Description = "Result." result = first_number + second_number |
このようにすることで同様の効果を得ることができます。この方法のいいところはInput / Outputの名前が変わっても対応しなくていいことです。
また、めったにお目にかかることはありませんが、Outputを内部から増やすということができます。動的にPythonのOutputを増やすようなときですね。
そういう時には数も名前も不定なのでこの方法で対応する必要があります。せっかくなのでOutputを動的に増やしていく方法についても見てみましょう。
Outputを動的に増やす
これを使うことはめったにないのですがせっかく話に出てきたので紹介しておきます
まずはボタンを押したら新しいパラメーターが増えていくようにしてみましょう。
1 2 3 4 5 6 7 8 9 |
def AddOutput(name): param = kernel.Parameters.Param_String() param.NickName = name param.Name = name param.Description = "This is a dynamics parameter" param.Access = kernel.GH_ParamAccess.list index = ghenv.Component.Params.Output.Count ghenv.Component.Params.RegisterOutputParam(param,index) ghenv.Component.Params.OnParametersChanged() |
これを利用すればNumberSliderで動的に操作することが可能になります。
実際に使用する際には以下のような形で引数には名前を取ることが多いです。
その方法に関しては、いずれ機会があったら紹介したいと思います。原理的には同じなのでやってみてください。
メニューに項目を追加する
さて、最後にメニューに項目を追加する方法についてやっていきます。これは結構便利なので覚えておくといいでしょう。
便利ですがかなりハッキーな方法です。
詳しい関数の説明はこちらを参照してください。
SDKModeをオンにしてから書いていきます。
1 2 3 4 5 6 7 8 9 10 11 |
def AppendAdditionalComponentMenuItems(self, menu): item = Grasshopper.Kernel.GH_Component.Menu_AppendGenericMenuItem( menu, "This is an Additonal Menu!!", self.OnClicked, self.Icon_24x24, None, True, False); item.ToolTipText = "Additonal Menu"; def OnClicked(self, obj, args): try: System.Windows.Forms.MessageBox.Show("success") except Exception, ex: System.Windows.Forms.MessageBox.Show(str(ex)) |
こうすることでMenuに追加することができます。いちいちボタンのためのInputを作らなくていいのと、説明文をそのまま加えられるのでユーザー的にも楽になると思います。
アイコンも同じく設定すればわかりやすいですね。今回はそのままSelfにしてしまいました。
Onclickedを消すと右クリックできなくなるので注意してください。
今回紹介できなかった小ネタも多くありますが、なんとなく痒い所について書いていきました。
ニッチなネタですが、このように使うユーザーのことを考えてカスタマイズすることは重要なことです。
私はGUIのUI/UXを考えることが結構好きなので、ハンズオンなどでもこのようなことについて喋ることが多いです。
是非皆さんも遊んでみてくさい。
COMMENTS