Edited at
MAXDay 11

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

More than 3 years have passed since last update.

たまに、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

で確認してますが、

自分の環境でしか試したことがないので、何か問題などあればお知らせいただけると・・