Max 5: Am I in a poly~, get the instance number?

johnpitcairn's icon

Given a patcher, I need to determine if that patcher is an instance in a poly~, and if so, get the instance number.

From the docs, I thought I'd do something like this, but I'm not getting anything returned for object_attr_getobj(patcher, gensym("parentclass")):

if(t_object *obj = object_attr_getobj(patcher, gensym("parentclass"))) {
// but obj is always null
    if(object_classname(obj) == gensym("poly~")) {
        // and if I get this far, how do I get the instance number?
    }
}

Mattijs's icon

Dear Cycling '74,

We are currently working on a Max 5 version of the oo objects, we received several requests from the community for this.

As for the specific idea of finding the instance number that belongs to a patcher loaded in a poly~, I'd say that could typically be done with a special utility method like the others that are defined in jpatcher_api.h. Does this method already exist? If not, are you planning to add such a method in the future?

Until then, would it be possible to directly access struct members of jpatcher or jbox to do this?

Thanks,
Mattijs

johnpitcairn's icon

Bump again - any chance of someone throwing us a bone on this one, then we can get the oo objects out for testing? The objects do need to work in a poly~

The patcher-delete query/notification in my other question is less crucial, we cleanup at quit anyway so we'll just hold onto more memory than strictly necessary as the session continues and oo-patchers are deleted.

Mattijs's icon

I think I got it, this code seems to do the job:

t_object *jp;
t_max_err err;
t_object *target;
method m;
long index = -1;

Max Patch
Copy patch and select New From Clipboard in Max.

err = object_obex_lookup(x, gensym("

object_method(jp, gensym("getassoc"), &target);
if (target) {
    post("found %s", object_classname(target)->s_name);

    long voices = object_attr_getlong(target, gensym("voices"));
    post("total amount of voices: %ld", voices);

    if(m = zgetfn(target, gensym("getindex"))) index = (long)(*m)(target, jp);
    post("index: %ld", index);
}

Cycling, let us know if there is something very scary about this.. ;)

Best,
Mattijs