5hut0こんにちは、首藤です。最近はBRDG#6にむけて、新ライブパッチをコツコツ作っています。GUIエクスターナルを色々と書いてみてわかったことをメモっていきます。面倒なのでサンプルは作りませんのが、気になった人はいろんなことを試しながらオリジナルGUIを作ってみると良いと思います。独自GUIを書きたいMaxには、標準でいろんな種類のGUIオブジェクトが含まれています。一つのGUIで複数の要素を個別にコントロールしたい標準GUIの見た目が思うようにカスタマイズできない標準オブジェクトの組み合わせだと冗長なプロセスが増える等、汎用的に設計されている分、それだけでは実現が無理or面倒なケースもあるかと思います。1.に関しては、できるだけパッチを1画面完結させたい僕にとっては重要でした。どんなものを書いているか複数の機能を一つのGUIにまとめる複数ノブ、テキスト表示、ランダマイズ機能をひとまとめに(修飾キー+ドラッグで個別コントロール)複数のエンベロープをひとまとめに(ポイント追加削除機能を省いて、カーブを直接操作できるように)トリガー、アクセント、ボリュームシーケンスをひとまとめに標準オブジェクトでは実現が無理or面倒エンベロープの各ポイントの時間と値に、ランダマイズ機能を追加したいビート単位で分解能を可変にしたいどうやって書くかまずはサンプルソースを動かしてみるCycling’74からダウンロードできるSDKに、GUIオブジェクトのサンプルが入っていますので、まずはそれらをチェック。“max7-sdk/source/ui/uisimp”に、その名の通りシンプルなGUI例が含まれています。“hogehoge_paint”となっている関数が、描画関数なので、ここを書き換えてビルドすると、描画内容を確認できます。描画周りのAPIを見てみるダウンロードしたSDKフォルダ直下に、”MaxAPI-7.0.3.html”のようなHTMLファイルがあるかと思います。これをブラウザで開くと、いろんなAPIのドキュメントが一覧できます。GUIオブジェクトで特に重要になってくるのが、JGraphicsモジュールで、Max5以降、cairoをベースにしたベクトル描画ライブラリが採用されています。JGraphicsのドキュメントが追加されたのは割と最近で、あまり読みやすいわけではないので、”max7-sdk/source/c74support/max-includes/jgraphics.h”を直接見ながら試すほうが良いかもしれません。Maxのlcdオブジェクトや、HTML5のcanvas、opengl等で何かしらの描画を経験した人には、馴染みやすい記法で描画プログラムを書けると思います。使いそうな描画API色指定jgraphics_set_source_jrgba座標移動・パス作成jgraphics_move_tojgraphics_line_tojgraphics_curve_to図形jgraphics_rectanglejgraphics_rectangle_roundedjgraphics_ellipsejgraphics_ovaljgraphics_arc線描画jgraphics_set_line_widthjgraphics_strokeパス・図形の塗りつぶしjgraphics_fill_preserve高速描画jgraphics_line_draw_fastjgraphics_rectangle_fill_fastjgraphics_rectangle_draw_fastひとまずこのあたりを試してみると、大抵の図形描画はできるようになると思います。“jgraphics.h”に、各APIに渡す引数のコメントもありますので、引数の型を更に追っていくと、実際の使い方もイメージしやすくなるかと思います。patcherview_get_jgraphics(patcherview);こんな感じで描画コンテキストが作られているかと思いますので、これに対して描画処理を投げていきます。&x->u_outline);のような感じで描画色をコンテキストに対して設定します。描画用パスを作るjgraphics_move_to、jgraphics_line_to、jgraphics_curve_to等でポチポチパスを追加していくか、jgraphics_rectangle、jgraphics_oval等で、コンテキストにパスを追加します。パスを塗りつぶすコンテキストに登録されているパスは、そのままだとパス情報しか持っていませんので、jgraphics_set_line_width、jgraphics_strokeでパスに線を描画するか、jgraphics_fill_preserveでパスを塗りつぶします。ここまでで、オブジェクトの初期描画状態を作れるようになったと思いますが、これだけでは操作することも描画内容を更新することもできません。実際のGUIオブジェクトとして機能させる際には以下のような追加実装が必要です。修飾キーでの操作分岐プリセット、pattrstorage対応このへんはまた次回触れたいと思います。コメントをキャンセルコメントを入力してください。以下に詳細を記入するか、アイコンをクリックしてログインしてください。アカウントを使ってコメントしています。アカウントを使ってコメントしています。アカウントを使ってコメントしています。アカウントを使ってコメントしています。新しいコメントがついたらメールで通知。新しい投稿をメールで受け取るDUB-Russellでビート鳴らしています。使用に同意したとみなされます。ポリシー%d人のブロガーが「いいね」をつけました。