Forums > Dev

how can i import an array instead of lists?

April 9, 2013 | 1:04 pm

Hello again :)

After a lot of searching, i achieved to pass an amount of lists and put them to an array in programm.
Now i would like to know how to pass an array directly,without passing the lists of atoms..
Any idea?

#include "ext.h"
#include "ext_obex.h"

typedef struct _fingertips {
t_object p_ob;
Atom f_value;
void *f_outlet;
} t_fingertips;

short image[1000][1000];
short perimeter[1000];
long points[5][2];
long imageWidth;
long imageHeight;

void fingertips_bang(t_fingertips *x);
void fingertips_list(t_fingertips *x, t_symbol *s, short argc, t_atom*argv);
void fingertips_perimeter(t_fingertips *x);
void fingertips_points(t_fingertips *x);
void fingertips_clear(t_fingertips *x);
void *fingertips_new();

t_class *fingertips_class;

int main(void) {
t_class *c;

c = class_new("fingertips", (method) fingertips_new, (method) NULL,
sizeof(t_fingertips), 0L, A_GIMME, 0);

class_addmethod(c, (method) fingertips_bang, "bang", 0);
class_addmethod(c, (method) fingertips_list, "list", A_GIMME, 0);
class_addmethod(c, (method) fingertips_clear, "clear", 0);

class_register(CLASS_BOX, c);
fingertips_class = c;

post("fingertips object loaded…", 0);
return 0;
}

void *fingertips_new() {

long i, j;
t_fingertips *x;

x = (t_fingertips *) object_alloc(fingertips_class);
x->f_outlet = intout(x);

for (i = 0; i < 1000; i++) {
perimeter[i] = 0;
for (j = 0; j < 1000; j++) {
if (i == 0)
image[i][j] = 1;
else
image[i][j] = 0;

}
}
for (i = 0; i < 5; i++) {
points[i][0] = 0;
points[i][1] = 0;
}
imageHeight = 0;
imageWidth = 0;

post(" new fingertips object instance added to patch…", 0);
return (x);
}

void fingertips_bang(t_fingertips *x) {

Atom argv[15];

atom_setlong(argv, points[0][0]);
atom_setsym(argv + 1, gensym(","));
atom_setlong(argv + 2, points[0][1]);
atom_setlong(argv + 3, points[1][0]);
atom_setsym(argv + 4, gensym(","));
atom_setlong(argv + 5, points[1][1]);
atom_setlong(argv + 6, points[2][0]);
atom_setsym(argv + 7, gensym(","));
atom_setlong(argv + 8, points[2][1]);
atom_setlong(argv + 9, points[3][0]);
atom_setsym(argv + 10, gensym(","));
atom_setlong(argv + 11, points[3][1]);
atom_setlong(argv + 12, points[4][0]);
atom_setsym(argv + 13, gensym(","));
atom_setlong(argv + 14, points[4][1]);

outlet_anything(x->f_outlet, gensym("list"), 15, argv);
}

void fingertips_list(t_fingertips *x, t_symbol *s, short ac, t_atom*av) {

if (s->s_name == "clear") {
fingertips_bang(x);
} else {
if (ac == 3) {
image[av[1].a_w.w_long][av[0].a_w.w_long] = av[2].a_w.w_long;
if (imageWidth < av[0].a_w.w_long + 1)
imageWidth = av[0].a_w.w_long + 1;
if (imageHeight < av[1].a_w.w_long + 1)
imageHeight = av[1].a_w.w_long + 1;
}
fingertips_perimeter(x);
}
}

void fingertips_clear(t_fingertips *x) {

fingertips_bang(fingertips_new());
}

void fingertips_perimeter(t_fingertips *x) {

long i, j;

for (i = 0; i < imageWidth; i++) {
for (j = 0; j < imageHeight; j++) {
if (image[j][i] != 0)
perimeter[i] = j;
}
}
fingertips_points(x);
}

void fingertips_points(t_fingertips *x) {

long i, j = -1, stop = 0, sum = 1, tempSum = 0;

for (i = 1; i < imageWidth; i++) {
if (perimeter[i] < perimeter[i - 1] && stop == 0) {
j++;
points[j][0] = i – 1;
points[j][1] = perimeter[i - 1];
stop = -1;
if (sum % 2 != 0)
tempSum = (sum + 1) / 2;
else
tempSum = sum / 2;
points[j][0] = (i – 1) – tempSum;
points[j][1] = perimeter[i - 1];
sum = 0;
tempSum = 0;
} else if (perimeter[i] > perimeter[i - 1] && stop == -1) {
stop = 0;
}
if (perimeter[i] == perimeter[i - 1]) {
sum++;
} else {
sum = 0;
}
fingertips_bang(x);
}
}


April 9, 2013 | 3:21 pm

There are a few things that are very bad in your code ;-)

#1 you should declare this in your object structure otherwise those variable are shared by all the instances in your patch:

short image[1000][1000];
short perimeter[1000];
long points[5][2];
long imageWidth;
long imageHeight;

#2 your’re calling outlet_anything on an inlet declared with intout

#3 the signature of your fingertips_new is wrong, as you declared the object as an A_GIMME (in your class_new call). It should be something like

void *fingertips_new(t_symbol *s, long argc, t_atom *argv)

April 9, 2013 | 3:37 pm

I undersatnt that thare are some errors but my main concern is how to pass a matrix directly without passing lists of atoms…
This would be quite useful :)


April 9, 2013 | 11:09 pm

The problem with the provided code is that i dont know what i have to put in my first struct and the main functions in the start and i believe that these parts are standards…
But now i think that your answer will be useful from here and on :)


April 10, 2013 | 12:51 pm

Hi i tryed your code but i get this error undefined reference to `__imp___jit_sym_class_jit_matrix’


April 10, 2013 | 2:29 pm

1. I did include "jit-includes".
2. I dont understand what you mean by: ( Do not forget to link against the "JitterAPI.framework").
3. I use MaxSDK-6.0.4.
4. I pasted the code in flopMatrix.c into my code


April 10, 2013 | 4:04 pm

I changed my SDK to SDK 5.1.7
but i still get errors


April 11, 2013 | 9:37 am

Hello again ;)

After trying hard i cannot resolve these spesific errors :( Any idea?? I really need help…

Description Resource Path Location
Symbol ‘mode’ could not be resolved max.jit.iter.c /My_Proj2 line 47
Symbol ‘JIT_ATTR_SET_USURP_LOW’ could not be resolved max.jit.iter.c /My_Proj2 line 44
Symbol ‘JIT_ATTR_GET_DEFER_LOW’ could not be resolved max.jit.iter.c /My_Proj2 line 44
Symbol ‘obex’ could not be resolved max.jit.iter.c /My_Proj2 line 39
Symbol ‘JIT_MATRIX_MAX_DIMCOUNT’ could not be resolved max.jit.iter.c /My_Proj2 line 70
Symbol ‘A_CANT’ could not be resolved max.jit.iter.c /My_Proj2 line 56
Symbol ‘JIT_MATRIX_MAX_PLANECOUNT’ could not be resolved max.jit.iter.c /My_Proj2 line 109
Symbol ‘A_GIMME’ could not be resolved max.jit.iter.c /My_Proj2 line 42
Symbol ‘A_GIMME’ could not be resolved max.jit.iter.c /My_Proj2 line 37
Symbol ‘JIT_MATRIX_MAX_DIMCOUNT’ could not be resolved max.jit.iter.c /My_Proj2 line 66
undefined reference to `__imp___jit_sym_list’
undefined reference to `__imp___jit_sym_char’
undefined reference to `__imp___jit_sym_err_calculate’
undefined reference to `__imp___jit_sym_lock’
undefined reference to `__imp___jit_sym_list’
undefined reference to `__imp___jit_sym_list’
undefined reference to `__imp___jit_sym_long’
undefined reference to `__imp___jit_sym_list’
undefined reference to `__imp___jit_sym_lock’
undefined reference to `__imp___jit_sym_class_jit_matrix’
undefined reference to `__imp___jit_sym_symbol’
undefined reference to `__imp___jit_sym_symbol’
undefined reference to `__imp___jit_sym_lock’
undefined reference to `__imp___jit_sym_err_calculate’
undefined reference to `__imp___jit_sym_getdata’
undefined reference to `__imp___jit_sym_getinfo’
undefined reference to `__imp___jit_sym_list’
undefined reference to `__imp___jit_sym_list’
undefined reference to `__imp___jit_sym_list’
undefined reference to `__imp___jit_sym_long’
undefined reference to `__imp___jit_sym_list’
undefined reference to `__imp___jit_sym_float64′
undefined reference to `__imp___jit_sym_float32′
undefined reference to `__imp___jit_sym_list’
undefined reference to `__imp___jit_sym_list’
undefined reference to `__imp___jit_sym_float64′
undefined reference to `__imp___jit_sym_float32′
undefined reference to `__imp___jit_sym_list’
undefined reference to `__imp___jit_sym_char’
undefined reference to `__imp___jit_sym_list’
undefined reference to `__imp___jit_sym_list’
undefined reference to `__imp___jit_sym_list’
undefined reference to `__imp___jit_sym_list’
undefined reference to `__imp___jit_sym_list’
undefined reference to `__imp___jit_sym_char’
undefined reference to `__imp___jit_sym_jit_attr_offset’
undefined reference to `__imp___jit_sym_symbol’
undefined reference to `__imp___jit_sym_symbol’
undefined reference to `__imp___jit_sym_long’


April 11, 2013 | 10:47 am

I wanna add that i m working with eclipse and not with XCode :)


April 11, 2013 | 3:03 pm

the mistakes have decrased the main problem is not your code but libraries…
I think that the problem is the linker and that i dont know how to use XCode…

I would like to say that you have been very helpful and thank you a lot for your interest…
I m tottaly new in max development and cannot find information easily :(


Viewing 10 posts - 1 through 10 (of 10 total)