LoginSignup
10
10

More than 5 years have passed since last update.

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

Last updated at Posted at 2014-12-11

たまに、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
で確認してますが、
自分の環境でしか試したことがないので、何か問題などあればお知らせいただけると・・

10
10
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
10
10