投稿

ラベル(UI)が付いた投稿を表示しています

modoのスクリプトをKit化する

イメージ
modoのKitとは modoにはKitと呼ばれる仕組みがあります。機能を拡張するためのパッケージング方法です。Kitを使う利点はたくさんありますが、主なものを挙げると以下のようになります。 他への依存が少ない KitをOn/Offする仕組みがある 配布が容易 modoの機能を拡張するためにスクリプトやフォームの編集があることは以前にも書きましたが、これらは色々な場所にスクリプトやコンフィグファイルが散らばってしまいます。もしかしたら同じファイル名のスクリプトがあるかもしれません。このような状態で利用者が間違いなくセットアップするのは大分難しいことです。また、Kitはメッシュなどのアセットも一緒に配ることができます。 このような点から、拡張機能を配布するのにはうってつけなのです。 今回のアプリケーションにもKitは大きな存在です。インストールするときに所定のフォルダに保存するだけなので、仕組みもとてもシンプルになります。アプリケーションを開発し始めたころはKitの存在を知らなかったので、どのようにインストールしたらいいのか悩んでいたのです。 しかしながら、世の中に配布されている拡張機能はKit化されていないものも多いのです。そこで、ある公開されているスクリプトをKit化させていただきました。 窓を配置するスクリプト 以前、 modo UserGroup Tokyo の 勉強会 に参加させていただきました。その勉強会の中で、柳村さんが窓のメッシュを効率的に配置するスクリプトを利用されていたのです。非常に便利なスクリプトです。Kit化の承認を柳村さんに快諾いただいたので、早速Kit化してみました。 Kitの仕様 Kit化に当たっては 基本タブにスクリプトを実行するボタンを追加 プリセットにアセットを追加 を実現します。また、キット名は「Set Window P」とします。 スクリプトのほかに窓のメッシュファイルもあるので、プリセットブラウザに表示するように設定を行います。 フォルダ構成 次のような配置としました。 SET WINDOW P ├─ index.cfg … Kit設定 ├─ ui.cfg … ユ...

wxPythonでのモーダルダイアログ作成

モーダルダイアログ Webアプリケーションでダイアログを表現するにはなかなか難しいところなのですが、ネイティブアプリケーションでは モーダルダイアログ を作成することができます。wxPythonでもモーダルダイアログを作成できるようです。 wxPythonコーディング # -*- coding: utf-8 -*- import wx class DetailDialog(wx.Dialog): def __init__(self, parent): wx.Dialog.__init__(self, parent, title="modal window") button = wx.Button(self, wx.ID_ANY, "Close") button.Bind(wx.EVT_BUTTON, self.button_close_click) text = wx.TextCtrl(self, wx.ID_ANY) layout = wx.BoxSizer(wx.VERTICAL) layout.Add(text) layout.Add(button) self.SetSizer(layout) self.Layout() self.Center(wx.BOTH) def button_close_click(self, event): yesno_dialog = wx.MessageDialog(self, "close window?", "message", wx.YES_NO | wx.ICON_QUESTION) try: if yesno_dialog.ShowModal() == wx.ID_YES: self.Close() finally: yesno_dialog.Destroy() return Tr...

wxPythonを利用する

イメージ
Webアプリケーションとネイティブアプリケーション さて、それではwxFormBuilderを利用してGUIを作っていきます。DelphiやVisualBasicなどでWindowsアプリケーションを作られた経験のある方なら、同じような感覚でGUIをデザインすることができると思います。 このように、 WYSIWYG でGUIをデザインしていくというのは昔からある取り組みですが、すぐにさわることができるということは非常に強力で、直観的です。この仕組み(フレームワークと呼んでも差し支えないでしょう)は、プログラミングを習得していくのに、とてもとっつきやすいと思います。 気を使うべきなのは、レイアウトシステムです。Layoutのパレットにいくつかのコンポーネント(wxPythonではウィジェットと呼びます)が見つかると思いますが、これらの動きを把握することができれば、思い通りのGUIを作っていくことができると思います。 また、HTMLでのデザインと同じ感覚でやっていこうとするとなかなかなじめないように思います。HTMLでは画面がスクロールするということ前提で、デザインをすることができますが、ネイティブアプリケーションではそのようなものはあまり見かけることはありません。お手本にするべきは、WindowsやMacのネイティブアプリケーションだと思います。 wxFormBuilderでGUIを作るときに気を付けること wxFormBuilderではデザインやイベントの定義を行うことはできますが、操作した時のコードを記述することができません。wxFormBuilderにはデザインしたものをPythonのコードとして出力する機能(ショートカットはF8)が備わっていますが、出力されたコードを編集したとして、その後にGUIの修正をする必要が出た場合、編集したコードは上書きされて消えてしまいます。 これを上手く解決するために、「継承」を利用します。出力されたコードを見てみるとよくわかりますが、デザインしたフォームがクラスとして宣言されています。これを継承して実際の画面を作りこんでいきます。wxFormBuilderはさらにそれを助けてくれます。上記のクラスを継承したスタブクラスを出力してくれる機能(ショートカットはF6)があります。 その...

クライアント考察 その3

wxPythonを使う modo ディスカッショングループ で相談したところ、どうやらmodoにはカスタマイズ可能なスプレッドシートが用意されていないようです。方針を変更してwxPythonでGUIを作っていきたいと思います。 modoにはwxPythonのモジュールはインストールされていないので、wxPythonでGUIを作成したとしても、そのまま利用することはできません。そこで、py2exe(py2app)を使ってアプリケーション化し、それをmodoのスクリプトで呼び出すことにします。 今回作成するものは、modoとはリアルタイムで情報をやり取りするわけではなく、インストール場所の情報をもらえればいいので、どうやらこれでうまくいきそうです。 とりあえず、簡単なアプリケーションを作成してみて、実際にmodoから呼び出せるのかどうかを試してみなければなりません。wxPythonが利用できるかの判断はそこまで保留です。 なぜwxPythonなのか? ネイティブアプリケーションを作る方法は他にもいくつもあるため、他にも選択肢は考えられます。また、データのやり取りはJSONを介して行うので、JSONをパースすることができれば何でもいいのです。 ですが、ここで一つ注意する点があります。modoはWindowsとMac両方で動作するということです。ですから、今回作成するものも当然クロスプラットフォームが望まれます。それぞれの環境でネイティブアプリケーションを作るという方法もありますが、サーバーからクライアントまで言語を統一したいのでwxPythonを使うことにします。 wxPythonのセットアップ wxPythonのホームページ に行ってライブラリをダウンロードしてきます。インストーラーが配布されていますので、自分のプラットフォームにあったものを選びます。 GUIのデザインを行うにあたって、wxFormBuilderがあるとデザインが容易になります。コントロールのパレットから必要なものを選んでGUIを作っていくのは、DelphiやC++Builder、Windows Formを思い出させます。wxPythonは画面を作るのに比較的少なめのコーディング量で済みますが、それでもコーディングからデザインまでの時間が短ければ、時間を節約する...

クライアント考察 その2

引き続きクライアントを作っています スクリプトを作成していると、自分の考えをどのように実現したらいいのか悩む時がたくさんあります。幸い、modoのコミュニティには多くの優れた方たちがいらっしゃいます。先人のお力をお借りしながら前に進んでいきます。 前回の投稿でフォームの編集を行うことができることがわかりました。フォームやスクリプトは3Dモデリングとは直接関係がないからか、特に情報を見つけるのに苦労します。 Takumiさんのページ( modo mode ) Luxologyのアセットシェア( luxology.com ) を参考にさせていただいて、フォームの編集やスクリプトの勉強を進めます。とにかく、たくさんのスクリプトに触れて、そのバリエーションを自分の中にため込んでいくしかありません。 スプレッドシート形式のインターフェイス WebからJSON形式で情報を取得して、modo側でそれを表示します。HTMLのテーブルやExcelのスプレッドシートのように表示したいと考えています。当初、modoにはスプレッドシートのようなインターフェイスがあるので、それを使っていけばいいと考えていましたが、フォーム編集の画面からではどうにもあのようなインターフェイスを実現できません。標準で用意されているインターフェイスを載せることはできるのですが、それらはあくまでも標準のインターフェイスであって、それをカスタマイズすることはできそうにないのです。あまりにも煮詰まってしまったので、 modo ディスカッショングループ に投稿してみました。いい返事が来るといいです。 実現できないことも考えて対策を考えておく必要はあります。今考えているのは、PythonのGUIライブラリである wxPython を利用することです。こちらはスプレッドシートのようなインターフェイスを利用できるようです。 現時点では回答が出ないので、他の作業をすることにします。

クライアント考察 その1

イメージ
modoのユーザーインターフェイス modoでは、自由度の高いインターフェイスを作ることができます。色々な方のスクリプトやプラグインをダウンロードしてきては中身を見ているのですが、XMLを記述することで、インターフェイスを実現しているということがわかりました。はじめはテキストエディタでポチポチとフォームを作成していくのだろうか?と思っていたのですが、さすがにそんな状態ではなく、modoにはインターフェイスを WYSIWYG で作成することができる、「フォーム編集(Form Editor)」という機能が付いていました。 modoのメニューバーの[システム] - [フォーム編集]を選択することで、modoに登録されているフォームの一覧が出てくるので、ここに新たにフォームを追加していくのです。 ここまでの説明も含めて、以下のページを参考にしました。ムービーで丁寧に説明くださっているので、とても分かりやすいです。 http://www.toroman.de/modo/tutorials/creating-a-kit-precision-scale/