diff -urN wf-/data.h wf/data.h --- wf-/data.h Mon Jan 25 00:00:00 2016 +++ wf/data.h Wed Jan 27 00:00:00 2016 @@ -45,6 +45,7 @@ #define type_rdiv 110 #define type_slide_way 120 +#define type_way type_slide_way #define type_slide_way_liss 121 #define type_zoom_way 150 #define type_zoom_way_liss 151 @@ -225,6 +226,8 @@ #define ALLOC_WF(wf) do{ ALLOC_N_D3((wf).t, (wf).n); ALLOC_N_D3((wf).v, (wf).n); }while(0) +#define DEND { type_end } +#define DTYPE_REC(name) type_##name, &(struct name) void prm_set_eye_update(prm_t *prm, eye_t *eye); void data_draw(data_t *data, prm_t *prm); diff -urN wf-/wf_ex.c wf/wf_ex.c --- wf-/wf_ex.c Tue Jan 26 00:00:00 2016 +++ wf/wf_ex.c Wed Jan 27 00:00:00 2016 @@ -180,22 +180,22 @@ if(opt_idx("-demo", ac, av) > 0){ data_t *ax = &(data_t){ type_arr, (data_t[]){ - { type_op_data_set, &(struct op_data_set){ - .op = { type_copy, &(struct copy){ + { DTYPE_REC(op_data_set){ + .op = { DTYPE_REC(copy){ .n = {200,1,1}, .init = {-100,0,0}, .step = {1,0,0} }}, .data = { type_bar, (pos_t[]){{0,0,0},{0,1,0}} } }}, { type_bar, (pos_t[]){{-100,0,0},{100,0,0}} }, - { type_end } }}; + DEND }}; - data_t *axyz = &(data_t){ type_op_data_set, &(struct op_data_set){ - .op = { type_copy_rot, &(struct copy_rot){ + data_t *axyz = &(data_t){ DTYPE_REC(op_data_set){ + .op = { DTYPE_REC(copy_rot){ .n = 3, .l = {{0,0,0},{1,1,1}}, .init_deg = 0, .step_deg = 120 }}, .data = *ax }}; - data_t *cross = &(data_t){ type_op_data_set, &(struct op_data_set){ - .op = { type_copy, &(struct copy){ + data_t *cross = &(data_t){ DTYPE_REC(op_data_set){ + .op = { DTYPE_REC(copy){ .n = {5*2+1,4*2+1,2*2+1}, .init = {-20*5,-30*4,-40*2}, .step = {20,30,40} }}, - .data = { type_slice, &(struct slice){ + .data = { DTYPE_REC(slice){ .n=6, .ds = (data_t[]){ { type_cross, (pos_t[]){{-4,0,0},{4,0,0}} }, { type_none }, @@ -205,124 +205,124 @@ { type_square } }, .ts = (double[]){5, 0.05, 0.05, 0.05, 0.5, 5} }} }}; - data_t *rcube = &(data_t){ type_op_data_set, &(struct op_data_set){ - .op = { type_rdiv_way, &(struct rdiv_way){ + data_t *rcube = &(data_t){ DTYPE_REC(op_data_set){ + .op = { DTYPE_REC(rdiv_way){ .n=4, .rate_way=WAY_V2(-0.5,1.0, 3,3, 3) } }, .data = { type_cube } }}; - data_t *cube = &(data_t){ type_op_data_set, &(struct op_data_set){ + data_t *cube = &(data_t){ DTYPE_REC(op_data_set){ .op = { type_arr, (data_t[]){ - { type_slide_way, &(struct way){ + { DTYPE_REC(way){ .n = 4, .ps = (pos_t[]){{0,0,0},{0,10,0},{10,10,0},{10,0,0}}, .ts = (double[]){3,2,1,2}, .dg = 1 }}, - { type_zoom_way_liss, &(struct zoom_way_liss){ + { DTYPE_REC(zoom_way_liss){ .zs=D3_ALL(0.8), .ze=D3_ALL(1.2), .sec={0.7,0.8,0.9}, .init_sec=D3_O }}, - { type_end } }}, + DEND }}, .data = { type_cube } }}; - data_t *cube2 = &(data_t){ type_op_data_set, &(struct op_data_set){ - .op = { type_slide_way, &(struct way){ + data_t *cube2 = &(data_t){ DTYPE_REC(op_data_set){ + .op = { DTYPE_REC(way){ .n = 4, .ps = (pos_t[]){{0,0,0},{0,10,0},{10,10,0},{10,0,0}}, .ts = (double[]){1,1,1,1}, .dg = 3 }}, .data = *rcube }}; - data_t *cube3 = &(data_t){ type_op_data_set, &(struct op_data_set){ - .op = { type_copy_timeshift, &(struct copy_timeshift){ + data_t *cube3 = &(data_t){ DTYPE_REC(op_data_set){ + .op = { DTYPE_REC(copy_timeshift){ .n = 3, .init_sec = 0, .step_sec = -0.3, .init = {0,0,0}, .step = {0,0,0} } }, .data = *cube2 }}; - data_t *cup = &(data_t){ type_op_data_set, &(struct op_data_set){ + data_t *cup = &(data_t){ DTYPE_REC(op_data_set){ .op = { type_arr, (data_t[]){ { type_slide, &(d3_t){20,20,0} }, - { type_copy_rot, &(struct copy_rot){ .n=4, .l=LINE_Z, .init_deg=0, .step_deg=90 } }, - { type_rot_way, &(struct rot_way){ + { DTYPE_REC(copy_rot){ .n=4, .l=LINE_Z, .init_deg=0, .step_deg=90 } }, + { DTYPE_REC(rot_way){ .l=LINE_Z, .deg_way=WAY_V2(0,360*4, 15,15, 3) } }, { type_slide, &(d3_t){5,0,0} }, - { type_rot_way, &(struct rot_way){ + { DTYPE_REC(rot_way){ .l=LINE_Z, .deg_way=WAY_V2(0,360*2, 4,4, 3) } }, - { type_copy, &(struct copy){ .n={2,1,1}, .init={-2,0,0}, .step={4,0,0} } }, - { type_end } + { DTYPE_REC(copy){ .n={2,1,1}, .init={-2,0,0}, .step={4,0,0} } }, + DEND }}, .data = { type_cube } }}; - data_t *ferris_wheel = &(data_t){ type_op_data_set, &(struct op_data_set){ + data_t *ferris_wheel = &(data_t){ DTYPE_REC(op_data_set){ .op = { type_arr, (data_t[]){ { type_slide, &(d3_t){20,20,-10} }, - { type_copy_timeshift, &(struct copy_timeshift){ + { DTYPE_REC(copy_timeshift){ .n=12, .init_sec=0, .step_sec=10.0/12, .init={0,0,0}, .step={0,0,0} } }, - { type_rot_way, &(struct rot_way){ + { DTYPE_REC(rot_way){ .l=LINE_Y, .deg_way=WAY_V2(0,-360, 10,0, 1) } }, - { type_end } }}, + DEND }}, .data = { type_arr, (data_t[]){ - { type_op_data_set, &(struct op_data_set){ + { DTYPE_REC(op_data_set){ .op = { type_zoom_and_slide, (d3_t[]){{3,1,1},{10-3,0,0}} }, .data = { type_square } }}, - { type_op_data_set, &(struct op_data_set){ + { DTYPE_REC(op_data_set){ .op = { type_arr, (data_t[]){ { type_slide, &(d3_t){10,0,0} }, - { type_rot_way, &(struct rot_way){ + { DTYPE_REC(rot_way){ .l=LINE_Y, .deg_way=WAY_V2(0,360, 10,0, 1) }}, { type_slide, &(d3_t){0,0,-1} }, - { type_end } }}, + DEND }}, .data = { type_cube } }}, - { type_end } + DEND }} }}; - data_t *merry_go_round = &(data_t){ type_op_data_set, &(struct op_data_set){ + data_t *merry_go_round = &(data_t){ DTYPE_REC(op_data_set){ .op = { type_arr, (data_t[]){ { type_slide, &(d3_t){-20,20,0} }, - { type_copy_rot, &(struct copy_rot){ .n=8, .l=LINE_Z, .init_deg=0, .step_deg=45 } }, - { type_rot_way, &(struct rot_way){ + { DTYPE_REC(copy_rot){ .n=8, .l=LINE_Z, .init_deg=0, .step_deg=45 } }, + { DTYPE_REC(rot_way){ .l=LINE_Z, .deg_way=WAY_V2(0,360, 10,0, 1) } }, - { type_copy_timeshift, &(struct copy_timeshift){ + { DTYPE_REC(copy_timeshift){ .n=3, .init_sec=0, .step_sec=2.0/3, .init={10+-3,-3,0}, .step={3,3,0} } }, - { type_slide_way, &(struct way)WAY_P2(0,0,0, 0,0,3, 2,2, 3) }, - { type_end } }}, + { DTYPE_REC(way)WAY_P2(0,0,0, 0,0,3, 2,2, 3) }, + DEND }}, .data = { type_cube } }}; - data_t *ship = &(data_t){ type_op_data_set, &(struct op_data_set){ + data_t *ship = &(data_t){ DTYPE_REC(op_data_set){ .op = { type_arr, (data_t[]){ { type_slide, &(d3_t){-20,20,-10} }, - { type_rot_way, &(struct rot_way){ + { DTYPE_REC(rot_way){ .l=LINE_Y, .deg_way=WAY_V2(-90,90, 5,5, 3) } }, - { type_copy_rot, &(struct copy_rot){ .n=6, .l=LINE_Y, .init_deg=-45, .step_deg=(45.0-(-45))/(6-1) } }, - { type_copy, &(struct copy){ .n={1,4,1}, .init={0,0,-10}, .step={0,3,0} }}, - { type_end } }}, + { DTYPE_REC(copy_rot){ .n=6, .l=LINE_Y, .init_deg=-45, .step_deg=(45.0-(-45))/(6-1) } }, + { DTYPE_REC(copy){ .n={1,4,1}, .init={0,0,-10}, .step={0,3,0} }}, + DEND }}, .data = { type_cube } }}; - data_t *exile = &(data_t){ type_op_data_set, &(struct op_data_set){ + data_t *exile = &(data_t){ DTYPE_REC(op_data_set){ .op = { type_arr, (data_t[]){ - { type_copy_timeshift, &(struct copy_timeshift){ + { DTYPE_REC(copy_timeshift){ .n=10, .init_sec=0, .step_sec=-0.3, .init={-20,10,10}, .step={0,1,0} } }, - { type_rot_way, &(struct rot_way){ + { DTYPE_REC(rot_way){ .l=LINE_Y, .deg_way=WAY_V2(0,360, 2,0, 3) } }, { type_slide, &(d3_t){0,0,2} }, - { type_rot_way, &(struct rot_way){ + { DTYPE_REC(rot_way){ .l=LINE_Y, .deg_way=WAY_V2(0,-360, 2,0, 3) } }, - { type_rot, &(struct rot){ .l=LINE_X, .deg=90 } }, - { type_end } }}, + { DTYPE_REC(rot){ .l=LINE_X, .deg=90 } }, + DEND }}, .data = { type_square } }}; - data_t *lissajours = &(data_t){ type_op_data_set, &(struct op_data_set){ + data_t *lissajours = &(data_t){ DTYPE_REC(op_data_set){ .op = { type_arr, (data_t[]){ - { type_copy_timeshift, &(struct copy_timeshift){ + { DTYPE_REC(copy_timeshift){ .n=10, .init_sec=0, .step_sec=-0.3, .init=D3_O, .step=D3_O } }, - { type_slide_way_liss, &(struct slide_way_liss){ + { DTYPE_REC(slide_way_liss){ .ps={-20,-20,-20},.pe={20,20,20},.sec={5*2,4.5*2,3*2},.init_sec={0,0,0}} }, - { type_rot_way, &(struct rot_way){ + { DTYPE_REC(rot_way){ .l={D3_O,D3_I}, .deg_way=WAY_V2(0,360*2, 1,1, 3) } }, { type_zoom_all_way, &(struct way)WAY_V2(0,2, 3,3, 3) }, - { type_end } }}, - .data = { type_circle, &(struct circle){ .r=1,.n=10*4 } } + DEND }}, + .data = { DTYPE_REC(circle){ .r=1,.n=10*4 } } }}; double r = 30; @@ -332,65 +332,65 @@ double *spin_vs = (double[]){0, 0, 0, 360*3, 0, 0, 0}; double *spin_ts = (double[]){sky_sec+pipe_sec*2, 0, sky_sec, sky_sec, 0, pipe_sec*2+sky_sec}; struct way spin_way = {.n=6,.vs=spin_vs,.ts=spin_ts,.dg=3}; - data_t spin1 = { type_rot_way, &(struct rot_way){.l={D3_O,D3_I},.deg_way=spin_way} }; - data_t spin2 = { type_rot_way, &(struct rot_way){.l=LINE_Z,.deg_way=spin_way} }; - data_t spin = { type_arr, (data_t[]){ spin1, spin2, {type_end} }}; + data_t spin1 = { DTYPE_REC(rot_way){.l={D3_O,D3_I},.deg_way=spin_way} }; + data_t spin2 = { DTYPE_REC(rot_way){.l=LINE_Z,.deg_way=spin_way} }; + data_t spin = { type_arr, (data_t[]){ spin1, spin2, DEND }}; - data_t *half_pipe = &(data_t){ type_op_data_set, &(struct op_data_set){ + data_t *half_pipe = &(data_t){ DTYPE_REC(op_data_set){ .op = { type_zoom_and_slide, (d3_t[]){D3_ALL(0.1),{-30,-30,-10}} }, .data = { type_arr, (data_t[]){ - { type_circle, &(struct circle){ .r=r*3, .n=360/10 } }, - { type_circle, &(struct circle){ .r=r*5, .n=360/10 } }, - { type_op_data_set, &(struct op_data_set){ + { DTYPE_REC(circle){ .r=r*3, .n=360/10 } }, + { DTYPE_REC(circle){ .r=r*5, .n=360/10 } }, + { DTYPE_REC(op_data_set){ .op = { type_arr, (data_t[]){ - { type_copy_rot, &(struct copy_rot){ .n=360/10, .l=LINE_Z, .init_deg=0, .step_deg=10 } }, + { DTYPE_REC(copy_rot){ .n=360/10, .l=LINE_Z, .init_deg=0, .step_deg=10 } }, { type_slide, &(d3_t){r*4,0,0} }, - { type_copy_rot, &(struct copy_rot){ .n=5, .l=LINE_Y, .init_deg=-90+30, .step_deg=30 } }, - { type_end } }}, + { DTYPE_REC(copy_rot){ .n=5, .l=LINE_Y, .init_deg=-90+30, .step_deg=30 } }, + DEND }}, .data = { type_cross, (pos_t[]){{-1,0,-r},{1,0,-r}} } }}, - { type_op_data_set, &(struct op_data_set){ + { DTYPE_REC(op_data_set){ .op = { type_arr, (data_t[]){ - { type_copy_timeshift, &(struct copy_timeshift){ + { DTYPE_REC(copy_timeshift){ .n=40, .init_sec=0, .step_sec=-1, .init=D3_O, .step=D3_O }}, - { type_rot_way, &(struct rot_way){ + { DTYPE_REC(rot_way){ .l=LINE_Z, .deg_way=WAY_V2(0,360, 60,0, 1) }}, { type_slide, &(d3_t){r*4,0,0} }, - { type_rot_way, &(struct rot_way){ + { DTYPE_REC(rot_way){ .l=LINE_Y, .deg_way=WAY_V2(-90-sky_deg,90+sky_deg, half_sec,half_sec, 3) }}, { type_slide, &(d3_t){0,0,-r} }, - { type_slice, &(struct slice){ + { DTYPE_REC(slice){ .n=3, .ds=(data_t[]){ { type_none }, spin, { type_none } }, .ts=(double[]){ sky_sec+pipe_sec*2, sky_sec*2, pipe_sec*2+sky_sec} }}, - { type_end } }}, + DEND }}, .data = { type_square } }}, - { type_end } }} }}; + DEND }} }}; - data_t *spin_ball = &(data_t){ type_op_data_set, &(struct op_data_set){ + data_t *spin_ball = &(data_t){ DTYPE_REC(op_data_set){ .op = { type_arr, (data_t[]){ - { type_rot_way, &(struct rot_way){.l=LINE_Y,.deg_way=WAY_V2(0,360, 1.3,0, 1) }}, - { type_rot_way, &(struct rot_way){.l=LINE_X,.deg_way=WAY_V2(0,360, 1,0, 1) }}, - { type_end } }}, - .data = { type_circle, &(struct circle){.r=1, .n=3} } }}; + { DTYPE_REC(rot_way){.l=LINE_Y,.deg_way=WAY_V2(0,360, 1.3,0, 1) }}, + { DTYPE_REC(rot_way){.l=LINE_X,.deg_way=WAY_V2(0,360, 1,0, 1) }}, + DEND }}, + .data = { DTYPE_REC(circle){.r=1, .n=3} } }}; - data_t *fireworks = &(data_t){ type_op_data_set, &(struct op_data_set){ + data_t *fireworks = &(data_t){ DTYPE_REC(op_data_set){ .op = { type_arr, (data_t[]){ - { type_copy_timeshift_rot, &(struct copy_timeshift_rot){ + { DTYPE_REC(copy_timeshift_rot){ .n=3, .init_sec=0, .step_sec=2, .l=LINE_Z, .init_deg=0, .step_deg=360/3 }}, - { type_copy_timeshift, &(struct copy_timeshift){ + { DTYPE_REC(copy_timeshift){ .n=3, .init_sec=0, .step_sec=-1, .init={200,0,0}, .step=D3_O }}, - { type_slide_way, &(struct way){ + { DTYPE_REC(way){ .n=4, .ps=(d3_t[]){D3_O,{0,0,100},D3_O, D3_O}, .ts=(double[]){3+1.5, 1.5+4, 3, 0} }}, - { type_copy_rot, &(struct copy_rot){ + { DTYPE_REC(copy_rot){ .n=10, .l={D3_O,D3_I}, .init_deg=0, .step_deg=360/10 } }, - { type_copy_rot, &(struct copy_rot){ + { DTYPE_REC(copy_rot){ .n=10, .l=LINE_Y, .init_deg=0, .step_deg=180.0/10 } }, - { type_slide_way, &(struct way){ + { DTYPE_REC(way){ .n=7, .ps=(d3_t[]){D3_O,D3_O,D3_O,{50,0,0},{50,0,0},D3_O,D3_O}, .ts=(double[]){3, 0, 3, 4, 0, 3, 0}, .dg=3 }}, - { type_end } }}, + DEND }}, .data = *spin_ball }}; double a = 20, b = a; @@ -404,163 +404,196 @@ .ts=(double[]){ 2,3,2,3,3, 1,1.5,1,1.5,1.5, 1,1.5,1,1.5,1.5, 2,3,2,3,3 }, .dg=3 }; - data_t *train = &(data_t){ type_op_data_set, &(struct op_data_set){ + data_t *train = &(data_t){ DTYPE_REC(op_data_set){ .op = { type_arr, (data_t[]){ - { type_copy_timeshift, &(struct copy_timeshift){ + { DTYPE_REC(copy_timeshift){ .n=3, .init_sec=0, .step_sec=1, .init=D3_O, .step={0,0,-a*0.5} }}, - { type_copy_timeshift, &(struct copy_timeshift){ + { DTYPE_REC(copy_timeshift){ .n=2, .init_sec=0, .step_sec=8, .init=D3_O, .step=D3_O }}, { type_slide, &(d3_t){0,-4*a,0} }, - { type_train_way, &(struct train_way){.n=6, .len=4, .len2=8, .way=*rail} }, + { DTYPE_REC(train_way){.n=6, .len=4, .len2=8, .way=*rail} }, { type_zoom_and_slide, (d3_t[]){ {1,6,1},{0,-2,0} } }, - { type_end } }}, + DEND }}, .data = { type_cube } }}; - data_t *rail1 = &(data_t){ type_op_data_set, &(struct op_data_set){ + data_t *rail1 = &(data_t){ DTYPE_REC(op_data_set){ .op = { type_slide, &(d3_t){0,-4*a,0} }, - .data = { type_curve, &(struct curve){.n=rail->n,.ps=rail->ps,.closed=1,.div_n=10} } }}; + .data = { DTYPE_REC(curve){.n=rail->n,.ps=rail->ps,.closed=1,.div_n=10} } }}; - data_t *rail2 = &(data_t){ type_op_data_set, &(struct op_data_set){ + data_t *rail2 = &(data_t){ DTYPE_REC(op_data_set){ .op = { type_slide, &(d3_t){0,-4*a,-a*0.5} }, - .data = { type_curve, &(struct curve){.n=rail->n,.ps=rail->ps,.closed=1,.div_n=0} } }}; + .data = { DTYPE_REC(curve){.n=rail->n,.ps=rail->ps,.closed=1,.div_n=0} } }}; - data_t *rail3 = &(data_t){ type_op_data_set, &(struct op_data_set){ + data_t *rail3 = &(data_t){ DTYPE_REC(op_data_set){ .op = { type_arr, (data_t[]){ { type_slide, &(d3_t){0,-4*a,-a} }, - { type_copy_domino, &(struct copy_domino){ + { DTYPE_REC(copy_domino){ .n=100, .curve={.n=rail->n,.ps=rail->ps,.closed=1,.div_n=0}, 0, 5 }}, { type_zoom_all, (double[]){2} }, - { type_rot, &(struct rot){ .l=LINE_X, .deg=90 } }, - { type_end } }}, + { DTYPE_REC(rot){ .l=LINE_X, .deg=90 } }, + DEND }}, .data = { type_square } }}; - data_t *matryoshka = &(data_t){ type_op_data_set, &(struct op_data_set){ + data_t *matryoshka = &(data_t){ DTYPE_REC(op_data_set){ .op = { type_arr, (data_t[]){ { type_slide, &(d3_t){20,20,20} }, - { type_recursive, &(struct recursive){ + { DTYPE_REC(recursive){ .op = { type_arr, (data_t[]){ { type_zoom_all, (double[]){0.8} }, - { type_rot_way, &(struct rot_way){.l=LINE_Z,.deg_way=WAY_V2(0,90, 3,3, 3) }}, - { type_end } }}, + { DTYPE_REC(rot_way){.l=LINE_Z,.deg_way=WAY_V2(0,90, 3,3, 3) }}, + DEND }}, .n=20 }}, - { type_rdiv, &(struct rdiv){ .n=8, .rate=0.3 } }, + { DTYPE_REC(rdiv){ .n=8, .rate=0.3 } }, { type_zoom_all, (double[]){10} }, - { type_end } }}, + DEND }}, .data = { type_octahedron } }}; - data_t *clock_frm1 = &(data_t){ type_wire_frame, &(struct wire_frame){ + data_t *clock_frm1 = &(data_t){ DTYPE_REC(wire_frame){ .n=5, .p=(pos_t[]){{-1,0,-1},{1,0,-1},{1,0,1},{0,0,2},{-1,0,1}}, .odr=(int[]){0,1,2,3,4,0,-1, -1} }}; data_t *clock_house = &(data_t){ type_arr, (data_t[]){ - { type_op_data_set, &(struct op_data_set){ - .op = { type_copy, &(struct copy){ .n={1,2,1}, .init=D3_O, .step={0,2,0} } }, + { DTYPE_REC(op_data_set){ + .op = { DTYPE_REC(copy){ .n={1,2,1}, .init=D3_O, .step={0,2,0} } }, .data = *clock_frm1 }}, { type_bars, (pos_t[]){ {-1,0,-1},{-1,2,-1},{1,0,-1},{1,2,-1},{1,0,1},{1,2,1}, {0,0,2},{0,2,2},{-1,0,1},{-1,2,1}, D3_O,D3_O }}, - { type_end } }}; + DEND }}; data_t *clock_circle = &(data_t){ type_arr, (data_t[]){ { type_circle_y, &(struct circle){.r=0.8,.n=36} }, - { type_op_data_set, &(struct op_data_set){ - .op = { type_rot_way, &(struct rot_way){ .l=LINE_Y, .deg_way=WAY_V2(0,360, 60,0, 1) }}, + { DTYPE_REC(op_data_set){ + .op = { DTYPE_REC(rot_way){ .l=LINE_Y, .deg_way=WAY_V2(0,360, 60,0, 1) }}, .data = { type_bar, (pos_t[]){ D3_O,{0,0,0.7} }} }}, - { type_end } }}; + DEND }}; - data_t *clock_door = &(data_t){ type_op_data_set, &(struct op_data_set){ - .op = { type_rot_way, &(struct rot_way){ + data_t *clock_door = &(data_t){ DTYPE_REC(op_data_set){ + .op = { DTYPE_REC(rot_way){ .l={{-1,0,0},D3_Z}, .deg_way={.n=4,.vs=(double[]){0,-90,-90,0},.ts=(double[]){0.5,1+1+1,0.5,56},.dg=1} }}, .data = { type_arr, (data_t[]){ *clock_frm1, *clock_circle, - { type_end } }} }}; + DEND }} }}; - data_t *clock_bird = &(data_t){ type_op_data_set, &(struct op_data_set){ + data_t *clock_bird = &(data_t){ DTYPE_REC(op_data_set){ .op = { type_arr, (data_t[]){ - { type_copy_timeshift, &(struct copy_timeshift){.n=5,.init_sec=0,.step_sec=-0.1,.init=D3_O,.step=D3_O} }, - { type_slide_way, &(struct way){ + { DTYPE_REC(copy_timeshift){.n=5,.init_sec=0,.step_sec=-0.1,.init=D3_O,.step=D3_O} }, + { DTYPE_REC(way){ .n=9, .ps=(pos_t[]){ {0,1,0},{0,1,0},{0,-2,0},{0,1,0},{0,-2,0},{0,1,0},{0,-2,0},{0,1,0},{0,1,0} }, .ts=(double[]){0.5, 0.5,0.5, 0.5,0.5, 0.5,0.5, 0.5, 56},.dg=3 }}, { type_zoom_all_way, &(struct way){.n=6,.vs=(double[]){0.5,0.5,0,0,0,0},.ts=(double[]){4,1,0,54,0,1},.dg=3}}, - { type_end } }}, + DEND }}, .data = { type_octahedron } }}; - data_t *clock = &(data_t){ type_op_data_set, &(struct op_data_set){ + data_t *clock = &(data_t){ DTYPE_REC(op_data_set){ .op = { type_arr, (data_t[]){ - { type_timeshift, &(struct timeshift){ .sec=-5, .slide=D3_O } }, + { DTYPE_REC(timeshift){ .sec=-5, .slide=D3_O } }, { type_zoom_and_slide, (d3_t[]){ D3_ALL(2),{-20,-20,20} } }, - { type_end } }}, + DEND }}, .data = { type_arr, (data_t[]){ *clock_house, *clock_door, *clock_bird, - { type_end } }} }}; + DEND }} }}; - data_t *ripple = &(data_t){ type_op_data_set, &(struct op_data_set){ + data_t *ripple = &(data_t){ DTYPE_REC(op_data_set){ .op = { type_arr, (data_t[]){ { type_zoom_and_slide, (d3_t[]){D3_ALL(0.2),{-10,-10,0}} }, - { type_copy_timeshift_zoom_slide, &(struct copy_timeshift_zoom_slide){ + { DTYPE_REC(copy_timeshift_zoom_slide){ .n=20,.init_sec=0,.step_sec=-0.4,.init_zs={D3_I,D3_O},.step_zs={{2,2,0},D3_O} }}, - { type_slide_way, &(struct way)WAY_P2(0,0,-1, 0,0,1, 2,2, 3) }, - { type_end } }}, - .data = { type_circle, &(struct circle){.r=1, .n=100} } }}; + { DTYPE_REC(way)WAY_P2(0,0,-1, 0,0,1, 2,2, 3) }, + DEND }}, + .data = { DTYPE_REC(circle){.r=1, .n=100} } }}; - data_t *wave = &(data_t){ type_op_data_set, &(struct op_data_set){ + data_t *wave = &(data_t){ DTYPE_REC(op_data_set){ .op = { type_arr, (data_t[]){ { type_zoom_and_slide, (d3_t[]){D3_ALL(2),{0,0,120}} }, - { type_copy_timeshift_rot, &(struct copy_timeshift_rot){ + { DTYPE_REC(copy_timeshift_rot){ .n=30,.init_sec=0,.step_sec=-0.2,.l=LINE_Z,.init_deg=0,.step_deg=180.0/30 }}, - { type_copy_timeshift, &(struct copy_timeshift){ + { DTYPE_REC(copy_timeshift){ .n=20,.init_sec=0,.step_sec=-0.2,.init={0,50,0},.step={0,3,0}} }, - { type_rot_way, &(struct rot_way){.l=LINE_X_NEG,.deg_way=WAY_V2(0,360, 4,0, 1)} }, - { type_end } }}, + { DTYPE_REC(rot_way){.l=LINE_X_NEG,.deg_way=WAY_V2(0,360, 4,0, 1)} }, + DEND }}, .data = { type_cross, (pos_t[]){{-1,0,10},{1,0,10}} } }}; - data_t *wave2 = &(data_t){ type_op_data_set, &(struct op_data_set){ + data_t *wave2 = &(data_t){ DTYPE_REC(op_data_set){ .op = { type_arr, (data_t[]){ { type_zoom_and_slide, (d3_t[]){D3_ALL(0.1),{-20,-20,30}} }, - { type_slide_way, &(struct way)WAY_P2(0,0,-100*0.5, 0,0,-20*0.5, 13,13, 3) }, - { type_copy_timeshift_rot, &(struct copy_timeshift_rot){ + { DTYPE_REC(way)WAY_P2(0,0,-100*0.5, 0,0,-20*0.5, 13,13, 3) }, + { DTYPE_REC(copy_timeshift_rot){ .n=20,.init_sec=-0.1*10,.step_sec=0.1,.l=LINE_Y,.init_deg=-45,.step_deg=90.0/20 }}, - { type_copy_timeshift_rot, &(struct copy_timeshift_rot){ + { DTYPE_REC(copy_timeshift_rot){ .n=20,.init_sec=-0.2*10,.step_sec=0.2,.l=LINE_X,.init_deg=-45,.step_deg=90.0/20 }}, - { type_slide_way, &(struct way)WAY_P2(0,0,100, 0,0,20, 13,13, 3) }, - { type_rot_way, &(struct rot_way){.l=LINE_X,.deg_way=WAY_V2(0,360, 3,0, 1)} }, - { type_slide_way, &(struct way)WAY_P2(0,0,0, 0,0,10, 20,20, 3) }, - { type_end } }}, + { DTYPE_REC(way)WAY_P2(0,0,100, 0,0,20, 13,13, 3) }, + { DTYPE_REC(rot_way){.l=LINE_X,.deg_way=WAY_V2(0,360, 3,0, 1)} }, + { DTYPE_REC(way)WAY_P2(0,0,0, 0,0,10, 20,20, 3) }, + DEND }}, .data = { type_cross, (pos_t[]){{-1,0,0},{1,0,0}} } }}; - data_t *fan = &(data_t){ type_op_data_set, &(struct op_data_set){ + data_t *fan = &(data_t){ DTYPE_REC(op_data_set){ .op = { type_arr, (data_t[]){ { type_zoom_and_slide, (d3_t[]){D3_ALL(4),{0,0,0}} }, - { type_copy_rot, &(struct copy_rot){.n=5, .l=LINE_Y,.step_deg=360.0/5} }, + { DTYPE_REC(copy_rot){.n=5, .l=LINE_Y,.step_deg=360.0/5} }, { type_slide, &(d3_t){0,0,2} }, - { type_rot_way, &(struct rot_way){.l=LINE_Y,.deg_way=WAY_V2(0,360.0/5*20*20, 20,20, 3)} }, - { type_copy_rot, &(struct copy_rot){.n=5,.l=LINE_Y,.step_deg=360.0/5} }, - { type_end } }}, + { DTYPE_REC(rot_way){.l=LINE_Y,.deg_way=WAY_V2(0,360.0/5*20*20, 20,20, 3)} }, + { DTYPE_REC(copy_rot){.n=5,.l=LINE_Y,.step_deg=360.0/5} }, + DEND }}, .data = { type_bar, (pos_t[]){ {0.2,0,0}, D3_X } } }}; + double t1 = 0.8, r1 = 10; + data_t *gallop = &(data_t){ DTYPE_REC(op_data_set) { + .op = { type_arr, (data_t[]){ + { DTYPE_REC(copy_timeshift){.n=3,.step_sec=-t1*r1*0.2} }, + { DTYPE_REC(rot_way){.l=LINE_Z,.deg_way=WAY_V2(0,360, t1*r1*2,0, 1) }}, + { type_slide, &(d3_t){0,r1,0} }, + DEND }}, + .data = { type_arr, (data_t[]){ + { DTYPE_REC(op_data_set){ + .op = { type_arr, (data_t[]){ + { DTYPE_REC(copy){.n={1,1,2},.init={0,0,-0.25},.step={0,0,0.5}} }, + { type_zoom, &(d3_t){1,0.5,1} }, + DEND }}, + .data = { type_square } }}, + { DTYPE_REC(op_data_set){ + .op = { type_arr, (data_t[]){ + { DTYPE_REC(copy_timeshift){.n=2,.step_sec=-0.3,.init={-1,0,0},.step={2,0,0}} }, + { DTYPE_REC(copy_timeshift){.n=2,.step_sec=-0.4,.init={0,-0.5,0},.step={0,1,0}} }, + { DTYPE_REC(way)WAY_P2(0,0,-0.25, 0,0,0.25, t1*1.5, t1*1.5, 3) }, + { DTYPE_REC(rot_way){ + .l=LINE_Y,.deg_way={.n=3,.vs=(double[]){-30,30,60},.ts=(double[]){t1,t1,t1},.dg=3} }}, + { type_slide, &(d3_t){0,0,-1} }, + DEND }}, + .data = { type_arr, (data_t[]){ + { type_bar, (pos_t[]){ D3_O, D3_Z } }, + { DTYPE_REC(op_data_set){ + .op = { DTYPE_REC(rot_way){ + .l=LINE_Y,.deg_way={.n=3,.vs=(double[]){-30,0,60},.ts=(double[]){t1,t1,t1},.dg=3} }}, + .data = { type_bar, (pos_t[]){ D3_O, D3_X } } }}, + DEND }} }}, + DEND }} }}; + struct{ char *key; data_t *data; }demos[] = { - { "-demo", (data_t[]){ *axyz, { type_end } } }, - { "-cross", (data_t[]){ *cross, { type_end } } }, - { "-cube", (data_t[]){ *cube, *cube3, { type_end } } }, - { "-park", (data_t[]){ *cup, *ferris_wheel, *merry_go_round, *ship, *exile, *lissajours, { type_end } } }, - { "-half_pipe", (data_t[]){ *half_pipe, { type_end } } }, - { "-fireworks", (data_t[]){ *fireworks, { type_end } } }, - { "-train", (data_t[]){ *train, { type_end } } }, - { "-rail", (data_t[]){ *rail1, *rail2, *rail3, { type_end } } }, - { "-matryoshka", (data_t[]){ *matryoshka, { type_end } } }, - { "-clock", (data_t[]){ *clock, { type_end } } }, - { "-ripple", (data_t[]){ *ripple, { type_end } } }, - { "-wave", (data_t[]){ *wave, { type_end } } }, - { "-wave2", (data_t[]){ *wave2, { type_end } } }, - { "-fan", (data_t[]){ *fan, { type_end } } }, - { NULL, (data_t[]){ { type_end } } } + { "-demo", (data_t[]){ *axyz, DEND } }, + { "-cross", (data_t[]){ *cross, DEND } }, + { "-cube", (data_t[]){ *cube, *cube3, DEND } }, + { "-park", (data_t[]){ *cup, *ferris_wheel, *merry_go_round, *ship, *exile, *lissajours, DEND } }, + { "-half_pipe", (data_t[]){ *half_pipe, DEND } }, + { "-fireworks", (data_t[]){ *fireworks, DEND } }, + { "-train", (data_t[]){ *train, DEND } }, + { "-rail", (data_t[]){ *rail1, *rail2, *rail3, DEND } }, + { "-matryoshka", (data_t[]){ *matryoshka, DEND } }, + { "-clock", (data_t[]){ *clock, DEND } }, + { "-ripple", (data_t[]){ *ripple, DEND } }, + { "-wave", (data_t[]){ *wave, DEND } }, + { "-wave2", (data_t[]){ *wave2, DEND } }, + { "-fan", (data_t[]){ *fan, DEND } }, + { "-gallop", (data_t[]){ *gallop, DEND } }, + { NULL, (data_t[]){ DEND } } }, *dp = demos; for(; dp->key; dp++){