diff -urN wf-/data.c wf/data.c --- wf-/data.c 2016-01-08 02:00:00.000000000 +0900 +++ wf/data.c 2016-01-10 00:00:00.000000000 +0900 @@ -27,6 +27,7 @@ CASE_RET(type_slice); CASE_RET(type_slide); CASE_RET(type_zoom); + CASE_RET(type_zoom_all); CASE_RET(type_zoom_and_slide); CASE_RET(type_rot); CASE_RET(type_point_symmetry); @@ -36,6 +37,9 @@ CASE_RET(type_rdiv); CASE_RET(type_slide_way); CASE_RET(type_slide_way_liss); + CASE_RET(type_zoom_way); + CASE_RET(type_zoom_way_liss); + CASE_RET(type_zoom_all_way); CASE_RET(type_rot_way); CASE_RET(type_rdiv_way); CASE_RET(type_rail_way); @@ -485,6 +489,14 @@ } static void +op_data_zoom_all(double *v, data_t *data, prm_t *prm) +{ + d3_t zoom = { *v, *v, *v }; + data_t op = { type_zoom, &zoom }; + op_data_draw(&op, data, prm); +} + +static void op_data_zoom_and_slide(d3_t *d3, data_t *data, prm_t *prm) { affin_t af; @@ -569,6 +581,42 @@ } static void +op_data_zoom_way(struct way *zw, data_t *data, prm_t *prm) +{ + struct way way = *zw; + d3_t zoom; + data_t op = { type_zoom, &zoom }; + + way_get(&way, prm->sec); + zoom = way.ret_p; + op_data_draw(&op, data, prm); +} + +static void +op_data_zoom_way_liss(struct zoom_way_liss *zwl, data_t *data, prm_t *prm) +{ + struct way_liss wl; + d3_t zoom; + data_t op = { type_zoom, &zoom }; + + way_liss_init(&wl, &zwl->zs, &zwl->ze, &zwl->sec, &zwl->init_sec); + way_liss_get(&wl, prm->sec, &zoom); + op_data_draw(&op, data, prm); +} + +static void +op_data_zoom_all_way(struct way *zaw, data_t *data, prm_t *prm) +{ + struct way way = *zaw; + double zoom; + data_t op = { type_zoom_all, &zoom }; + + way_get(&way, prm->sec); + zoom = way.ret_v; + op_data_draw(&op, data, prm); +} + +static void op_data_rot_way(struct rot_way *rw, data_t *data, prm_t *prm) { struct way way = rw->deg_way; @@ -744,6 +792,9 @@ case type_zoom: op_data_zoom(op->p, data, prm); break; + case type_zoom_all: + op_data_zoom_all(op->p, data, prm); + break; case type_zoom_and_slide: op_data_zoom_and_slide(op->p, data, prm); break; @@ -772,6 +823,15 @@ case type_slide_way_liss: op_data_slide_way_liss(op->p, data, prm); break; + case type_zoom_way: + op_data_zoom_way(op->p, data, prm); + break; + case type_zoom_way_liss: + op_data_zoom_way_liss(op->p, data, prm); + break; + case type_zoom_all_way: + op_data_zoom_all_way(op->p, data, prm); + break; case type_rot_way: op_data_rot_way(op->p, data, prm); break; diff -urN wf-/data.h wf/data.h --- wf-/data.h 2016-01-08 02:00:00.000000000 +0900 +++ wf/data.h 2016-01-10 00:00:00.000000000 +0900 @@ -32,6 +32,7 @@ #define type_slide 100 #define type_zoom 101 +#define type_zoom_all 140 #define type_zoom_and_slide 102 #define type_rot 103 #define type_point_symmetry 104 @@ -42,6 +43,9 @@ #define type_slide_way 120 #define type_slide_way_liss 121 +#define type_zoom_way 150 +#define type_zoom_way_liss 151 +#define type_zoom_all_way 152 #define type_rot_way 130 #define type_rdiv_way 131 #define type_rail_way 132 @@ -102,6 +106,11 @@ d3_t sec, init_sec; }; +struct zoom_way_liss{ + d3_t zs, ze; + d3_t sec, init_sec; +}; + struct rot{ line_t l; double deg; diff -urN wf-/wf_ex.c wf/wf_ex.c --- wf-/wf_ex.c 2016-01-08 02:00:00.000000000 +0900 +++ wf/wf_ex.c 2016-01-10 00:00:00.000000000 +0900 @@ -208,10 +208,14 @@ .data = &(data_t){ type_cube } }}; data_t *cube = &(data_t){ type_op_data_set, &(struct op_data_set){ - .op = &(data_t){ type_slide_way, &(struct way){ - .n = 4, .vs = NULL, - .ps = (pos_t[]){{0,0,0},{0,10,0},{10,10,0},{10,0,0}}, - .ts = (double[]){3,2,1,2}, .dg = 1 }}, + .op = &(data_t){ type_arr, (data_t[]){ + { type_slide_way, &(struct way){ + .n = 4, .vs = NULL, + .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){ + .zs=D3_ALL(0.8), .ze=D3_ALL(1.2), .sec={0.7,0.8,0.9}, .init_sec=D3_O }}, + { type_end } }}, .data = &(data_t){ type_cube } }}; data_t *cube2 = &(data_t){ type_op_data_set, &(struct op_data_set){ @@ -312,6 +316,7 @@ .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){ .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 = &(data_t){ type_circle, &(struct circle){ .r=1,.n=10*4 } } }}; @@ -328,7 +333,7 @@ data_t spin = { type_arr, (data_t[]){ spin1, spin2, {type_end} }}; data_t *half_pipe = &(data_t){ type_op_data_set, &(struct op_data_set){ - .op = &(data_t){ type_zoom_and_slide, (d3_t[]){{0.1,0.1,0.1},{-30,-30,-10}} }, + .op = &(data_t){ type_zoom_and_slide, (d3_t[]){D3_ALL(0.1),{-30,-30,-10}} }, .data = &(data_t){ type_arr, (data_t[]){ { type_circle, &(struct circle){ .r=r*3, .n=360/10 } }, { type_circle, &(struct circle){ .r=r*5, .n=360/10 } }, @@ -412,12 +417,12 @@ { type_slide, &(d3_t){20,20,20} }, { type_recursive, &(struct recursive){ .op = &(data_t){ type_arr, (data_t[]){ - { type_zoom, &(d3_t)D3_ALL(0.8) }, + { 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 } }}, .n=20, .cnt=0 }}, { type_rdiv, &(struct rdiv){ .n=8, .rate=0.3 } }, - { type_zoom, &(d3_t)D3_ALL(20) }, + { type_zoom_all, (double[]){10} }, { type_end } }}, .data = &(data_t){ type_octahedron } }}; @@ -456,7 +461,7 @@ .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},.vs=NULL,.dg=3 }}, - { type_zoom, &(d3_t)D3_ALL(0.5) }, + { 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},.ps=NULL,.dg=3}}, { type_end } }}, .data = &(data_t){ type_octahedron } }};