jsからMaxのUI系のオブジェクトの値を直接取得する

  • 10
    いいね
  • 0
    コメント
この記事は最終更新日から1年以上が経過しています。

たまに、jsから直接MaxのナンバーボックスやマルチスライダーなどのUI系のオブジェクトの値を取りたいと思うことがあります。

ドキュメントやExampleパッチを調べたり、ググったりしてもなかなか見つからなかったので、案外知らない人もいるんじゃないかと思ったので書きます。

Maxobj#getvaluof()
を使えばいけるようです。

こんなパッチのとき、

main.png

各UIオブジェクトにはインスペクタからScriptingNameを設定しておき、jsにてgetnamedメソッドでMaxobjを取得して使います。

autowatch = 1;


//flonum
var num = null;
//function
var func = null;
//matrix
var mat = null;
//multislider
var mult = null;

function loadbang () {
    num = patcher.getnamed("testnum");
    func = patcher.getnamed("testfunc");
    mat = patcher.getnamed("testmatrix");
    mult = patcher.getnamed("testmult");
}

function getnum () {
    var f = num.getvalueof();
    post(f, "\n");
}

function getfunc() {
    post("function value---------\n");
    var v = func.getvalueof();
    v.forEach(function (el) { post(el, "\n"); });
    post("end-------------------\n");
}

function getmult() {
    post("multislider value---------\n");
    var v = mult.getvalueof();
    post(v, "\n");
    v.forEach(function(el){ post(el, "\n") });
    post("end-------------------\n");
}

function getmatrix() {
    post("matrix value---------\n");
    var v = mat.getvalueof();
    post(v, "\n");
    v.forEach(function(el){ post(el, "\n") });
    post("end-------------------\n");   
}

全部のUIオブジェクトで試してないのでなんとも言えませんが、live系も含め主要なUI系のオブジェクトはできると思います。

ただ、やはりブラウザのUIのように、イベントリスナーを登録してUIをいじったタイミングでの値を取得したくなるのですが、そのような方法が今のところ見つからないので、使い勝手的には微妙で、それなら普通に直接インレットに繋げてつかうわ・・という感じです。

一応GitHubにもExampleをアップしておきました。

https://github.com/okupara/AdventCalendar1211Example

os10.10.1 Max7.0.1 64bit
os10.10.1 Max6.1.7 32bit
で確認してますが、
自分の環境でしか試したことがないので、何か問題などあればお知らせいただけると・・