diff -urN rt_v38/ax.py rt_v39/ax.py --- rt_v38/ax.py 2018-04-26 00:47:41.000000000 +0900 +++ rt_v39/ax.py 2018-05-19 17:56:58.000000000 +0900 @@ -57,6 +57,8 @@ return new(p_, vs_) e.rev = rev + e.str = lambda : 'p:{}, vs:{}'.format(e.p, e.vs) + return e one = new( mt.zero, vecs.one ) diff -urN rt_v38/cg.py rt_v39/cg.py --- rt_v38/cg.py 2018-05-16 23:42:46.000000000 +0900 +++ rt_v39/cg.py 2018-05-17 11:49:32.000000000 +0900 @@ -58,6 +58,7 @@ img.cli_vwt.add_img() if 'no_show' not in sys.argv: wsec = max( cnt.wait_sec(), 0 ) + wsec = ut.arg_f('show_sec', wsec) fn_img = val.cli.get_prop('saved_fn_img') img.show(fn_img, '', wsec, zm) img.cli_vwt.close() diff -urN rt_v38/cross.c rt_v39/cross.c --- rt_v38/cross.c 2018-05-16 23:42:46.000000000 +0900 +++ rt_v39/cross.c 2018-05-19 14:02:39.000000000 +0900 @@ -218,7 +218,7 @@ } int -cross_cross_one(int kind_idx, struct ax *l2g, int eq_d, struct line *l_g, struct cross_ret *ret) +cross_cross_one(int kind_idx, struct lstx *l2g, int eq_d, struct line *l_g, struct cross_ret *ret) { switch(kind_idx){ case KIND_SQUARE: @@ -231,7 +231,7 @@ break; } - ax_tr_line(l2g, G2L, l_g, &ret->l); + lstx_tr_line(l2g, G2L, l_g, &ret->l); switch(kind_idx){ case KIND_SQUARE: @@ -253,7 +253,7 @@ } void -cross_get_nv(int kind_idx, struct ax *l2g, struct line *l_g, struct cross_ret *ret) +cross_get_nv(int kind_idx, struct lstx *l2g, struct line *l_g, struct cross_ret *ret) { double nv[3]; struct line l_nv; @@ -288,19 +288,13 @@ } line_new(&l_nv, ret->p, nv); - ax_tr_line(l2g, L2G, &l_nv, &ret->l_nv_g); + lstx_tr_line(l2g, L2G, &l_nv, &ret->l_nv_g); unit(ret->l_nv_g.v, ret->nv); unit(l_g->v, ret->eyev); ret->ang_nv_eyev = dot( ret->nv, ret->eyev ); } -struct ax * -get_ax_ptr(struct lstx *lx) -{ - return lx->n == 0 ? &ax_one : &lx->lst[0].ax; -} - void cross_cross(struct line *l_g, int prev_idx, struct cross_ret *ret) { @@ -313,7 +307,7 @@ for(i=0; in; i++){ struct data_one *d = &data->lst[i]; - if( !cross_cross_one( d->kind, get_ax_ptr(&d->l2g), prev_idx == i, l_g, &ret_ ) ){ + if( !cross_cross_one( d->kind, &d->l2g, prev_idx == i, l_g, &ret_ ) ){ continue; } if( idx < 0 || ret_.t < ret->t ){ @@ -323,7 +317,7 @@ } if( idx >= 0 ){ struct data_one *d = &data->lst[idx]; - cross_get_nv( d->kind, get_ax_ptr(&d->l2g), l_g, ret ); + cross_get_nv( d->kind, &d->l2g, l_g, ret ); } ret->idx = idx; } diff -urN rt_v38/cross.h rt_v39/cross.h --- rt_v38/cross.h 2018-05-01 23:19:45.000000000 +0900 +++ rt_v39/cross.h 2018-05-19 14:02:39.000000000 +0900 @@ -31,8 +31,8 @@ int pipe_side(int eq_d, struct cross_ret *ret); int cone_side(int eq_d, struct cross_ret *ret); -int cross_cross_one(int kind_idx, struct ax *l2g, int eq_d, struct line *l_g, struct cross_ret *ret); -void cross_get_nv(int kind_idx, struct ax *l2g, struct line *l_g, struct cross_ret *ret); +int cross_cross_one(int kind_idx, struct lstx *l2g, int eq_d, struct line *l_g, struct cross_ret *ret); +void cross_get_nv(int kind_idx, struct lstx *l2g, struct line *l_g, struct cross_ret *ret); void cross_cross(struct line *l_g, int prev_idx, struct cross_ret *ret); diff -urN rt_v38/dat.py rt_v39/dat.py --- rt_v38/dat.py 2018-05-16 23:42:46.000000000 +0900 +++ rt_v39/dat.py 2018-05-20 09:58:26.000000000 +0900 @@ -258,6 +258,38 @@ 'm2g': [ ax.zoom_all(2) ], } ] +export_test = [ { + 'kind': 'export', + 'export': 'copen', + 'm2g': [ ax.zoom_all(0.5), ax.slide([-60,-60,0]) ], + 'rxs': [ + ( 'm2g', 'append', 3, [ ax.slide_x(60) ] ), + ( 'm2g', 'append', 3, [ ax.slide_y(60) ] ), + ], +} ] + +export_test2 = [ { + 'kind': 'export', + 'export': 'copen', + 'm2g': [ ax.zoom_all(0.5), ax.slide([-60,-60,0]) ], + 'rxs': [ + ( 'm2g', 'append', 3, [ ax.slide_x(60) ] ), + ( 'm2g', 'append', 3, [ ax.slide_y(60) ] ), + ], + 'maps': [ { 'fn': 'IMG_3999_3.mov', 'fn_r': 'IMG_3999_4.mov', 't2m': [ ax.zoom_all(100) ] } ], +} ] + +export_test3 = [ { + 'kind': 'export', + 'export': 'copen', + 'l2m': [ ax.zoom_all(0.5), ax.slide([-60,-60,0]) ], + 'rxs': [ + ( 'l2m', 'append', 3, [ ax.slide_x(60) ] ), + ( 'l2m', 'append', 3, [ ax.slide_y(60) ] ), + ], + 'maps': [ { 'fn': 'IMG_3999_3.mov', 'fn_r': 'IMG_3999_4.mov', 't2m': [ ax.zoom_all(500) ] } ], +} ] + lights = [ { 'p': mt.arr( [1,-1,-1] ) * 30, 'e': 2.5 }, { 'p': mt.arr( [-1,1,1] ) * 30, 'e': 2.5 }, @@ -276,6 +308,8 @@ v = val.cli.geti(v) d[k] = v +ds_copy = lambda ds: ut.map_lst( lambda d: d.copy(), ds ) + def m_setup(d, m): # 'fn' in d @@ -508,7 +542,7 @@ d_ = d.copy() d_['rxs'] = rxs[:] # ! d_[targ_k] = targ[:] - d_['maps'] = ut.map_lst( lambda m: m.copy(), d.get('maps') ) # ! + d_['maps'] = ds_copy( d.get('maps', [] ) ) ds.append(d_) targ = lx + targ if i_a == 'insert' else targ + lx return sum( map( d_setup, ds ), [] ) @@ -533,6 +567,24 @@ for k in def_rtd.keys(): if k not in rtd: rtd[k] = def_rtd.get(k) + ### + + if kind == 'export' and 'export' in d: + data = eval( d.get('export') ) + + # copy ! + data = ds_copy(data) + for d_ in data: + d_['maps'] = ds_copy( d_.get('maps', []) ) + + ds = [] + for d_ in data: + d_['m2g'] = d_.get('m2g', []) + d.get('l2g') + ds += d_setup(d_) + for d_ in ds: + d_['maps'] = d_.get('maps', []) + d.get('maps', []) + return ds + ### kinds = [ 'square', 'circle', 'triangle', 'ball', 'pipe_side', 'cone_side' ] if not val.cli.has_prop('kinds'): @@ -551,6 +603,7 @@ data_name = ut.arg_s('data_name', 'copen') data = eval( data_name ) data = sum( map( d_setup, data ), [] ) + #print('data={}'.format(data)) val.cli.set_prop('data', typ_data, data) val.cli.set_prop('lights', '[ltd]', lights) # EOF diff -urN rt_v38/rt.py rt_v39/rt.py --- rt_v38/rt.py 2018-05-17 00:10:25.000000000 +0900 +++ rt_v39/rt.py 2018-05-18 21:28:17.000000000 +0900 @@ -116,8 +116,7 @@ if nest_rate < 0.01: return [] - #(idx, l_nv_g, nv, eyev, ang_nv_eyev) = cross.cross_(l_g, prev_idx) - (idx, l_nv_g, nv, eyev, ang_nv_eyev) = cross.cli.cross_(l_g, prev_idx) + (idx, l_nv_g, nv, eyev, ang_nv_eyev) = cross.cross_(l_g, prev_idx) if idx < 0: return [] @@ -129,14 +128,12 @@ rev = ang_nv_eyev_nega < 0 col = map_col( idx, l_nv_g, rev, sec ) - #col = cli.map_col( idx, l_nv_g, rev, sec ) col = mt.arr(col) base = rtd.get('base', 0.3) diff = calc_diff(idx, crsp, nv, ang_nv_eyev) - #diff = cli.calc_diff(idx, crsp, nv, ang_nv_eyev) col = col * (base + diff) col_ = reflect_col(rtd, crsp, nv, eyev, ang_nv_eyev, sec, nest_rate, idx) @@ -157,7 +154,7 @@ p = lstx.tr_p( wh2g, 'l2g', mt.arr( [ix,iy,-d_] ) ) l_g = line.new_p2(eyep, p) - col = cli.get_col(l_g, sec, 1.0, -1) + col = get_col(l_g, sec, 1.0, -1) if col != []: col = np.fmin( col, 255 ) diff -urN rt_v38/ut.py rt_v39/ut.py --- rt_v38/ut.py 2018-05-16 23:42:46.000000000 +0900 +++ rt_v39/ut.py 2018-05-19 17:55:01.000000000 +0900 @@ -39,6 +39,7 @@ dic_cache_pop = lambda d, k, def_val=None: d.pop(k) if k in d else def_val if_not_set = lambda d, k, v: dic_cache(d, k, lambda : v) +pop_if_in = lambda d, k: d.pop(k) if k in d else None in_range = lambda i, n: 0<=i and i