diff -urN rt_v39/dat.py rt_v40/dat.py --- rt_v39/dat.py 2018-05-20 09:58:26.000000000 +0900 +++ rt_v40/dat.py 2018-05-22 09:48:59.000000000 +0900 @@ -290,6 +290,44 @@ 'maps': [ { 'fn': 'IMG_3999_3.mov', 'fn_r': 'IMG_3999_4.mov', 't2m': [ ax.zoom_all(500) ] } ], } ] +colosseum_base = [ { + 'kind': 'cube', + 'rtd': rtd, + 'm2g': [ ax.zoom_z(10), ax.slide_x(20) ], + 'rxs': [ ( 'm2g', 'append', 16, [ ax.rot_z(360.0/16) ] ) ], +} ] + +colosseum = [ { + 'kind': 'export', + 'export': 'colosseum_base', +},{ + 'kind': 'ball', + 'rtd': { 'diff': 0.3 }, + 'maps': [ + { 'fn': 'IMG_3999_3.mov', 'fn_r': 'IMG_3999_3.mov', 't2m': [ ax.zoom_all(2), ax.rot_x(90) ] }, + { 'fn': 'IMG_3999_4.mov', 'fn_r': 'IMG_3999_4.mov', 't2m': [ ax.zoom_all(2), ax.rot_x(90), ax.rot_z(180) ] }, + ], + 'm2g': [ ax.zoom_all(500) ], +} ] + +colosseum2 = [ { + 'kind': 'export', + 'export': 'colosseum_base', + 'm2g': [ ax.slide_z(-20) ], + 'rxs': [ + ( 'm2g', 'append', 3, [ ax.zoom_all(1.5) ] ), + ( 'm2g', 'append', 3, [ ax.zoom_all(0.8), ax.slide_z(20) ] ), + ], +},{ + 'kind': 'ball', + 'rtd': { 'diff': 0.3 }, + 'maps': [ + { 'fn': 'IMG_3999_4.mov', 'fn_r': 'IMG_3999_4.mov', 't2m': [ ax.zoom_all(2), ax.rot_x(90) ] }, + { 'fn': 'IMG_3999_4.mov', 'fn_r': 'IMG_3999_4.mov', 't2m': [ ax.zoom_all(2), ax.rot_x(90), ax.rot_z(180) ] }, + ], + 'm2g': [ 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 }, @@ -310,6 +348,20 @@ ds_copy = lambda ds: ut.map_lst( lambda d: d.copy(), ds ) +def ds_copy_k(d, k): + if k in d: + d[k] = ds_copy( d.get(k, []) ) + +def lst_copy_k(d, k): + if k in d: + d[k] = d.get(k, [])[:] + +def d_copy(d): + d = d.copy() + ds_copy_k(d, 'maps') + lst_copy_k(d, 'rxs') + return d + def m_setup(d, m): # 'fn' in d @@ -348,7 +400,7 @@ b = math.sin(rad) def poly_n_f(i): - d_ = d.copy() + d_ = d_copy(d) d_['kind'] = 'triangle' d_['l2m'] = [ ax.slide_y(-1), ax.zoom([b,h,1]), ax.rot_z(deg*i) ] + d_.get( 'l2m', [] ) return d_setup( d_ ) @@ -357,7 +409,7 @@ if kind == 'cube': def cube_f(l, deg): - d_ = d.copy() + d_ = d_copy(d) d_['kind'] = 'square' d_['l2m'] = [ ax.slide_z(1), ax.rot(l, deg) ] + d_.get( 'l2m', [] ) return d_setup( d_ ) @@ -368,30 +420,30 @@ return sum( ut.map_up( cube_f, rots ), [] ) if kind == 'tri_prism_side': - d0 = d.copy() + d0 = d_copy(d) d0['kind'] = 'square' d0['l2m'] = [ ax.rot_x(90) ] + d0.get( 'l2m', [] ) - d1 = d.copy() + d1 = d_copy(d) d1['kind'] = 'square' zm = math.sqrt(2) / 2 d1['l2m'] = [ ax.rot_x(-90), ax.slide_x(-1), ax.zoom_x(zm), ax.rot_z(-45), ax.slide_x(1) ] + d1.get( 'l2m', [] ) - d2 = d.copy() + d2 = d_copy(d) d2['kind'] = 'square' d2['l2m'] = [ ax.rot_x(-90), ax.slide_x(1), ax.zoom_x(zm), ax.rot_z(45), ax.slide_x(-1) ] + d2.get( 'l2m', [] ) return sum( map( d_setup, [d0,d1,d2] ), [] ) if kind == 'tri_prism': - d0 = d.copy() + d0 = d_copy(d) d0['kind'] = 'tri_prism_side' - d1 = d.copy() + d1 = d_copy(d) d1['kind'] = 'triangle' d1['l2m'] = [ ax.slide_z(1) ] + d1.get( 'l2m', [] ) - d2 = d.copy() + d2 = d_copy(d) d2['kind'] = 'triangle' d2['l2m'] = [ ax.slide_z(1), ax.zoom_z(-1) ] + d2.get( 'l2m', [] ) @@ -405,7 +457,7 @@ b = math.sin(rad) def poly_n_prism_side_f(i): - d_ = d.copy() + d_ = d_copy(d) d_['kind'] = 'square' d_['l2m'] = [ ax.rot_x(90), ax.zoom_x(b), ax.slide_y(-h), ax.rot_z(deg*i) ] + d_.get( 'l2m', [] ) return d_setup( d_ ) @@ -413,14 +465,14 @@ return sum( map( poly_n_prism_side_f, range(n) ), [] ) if kind == 'poly_n_prism': - d0 = d.copy() + d0 = d_copy(d) d0['kind'] = 'poly_n_prism_side' - d1 = d.copy() + d1 = d_copy(d) d1['kind'] = 'poly_n' d1['l2m'] = [ ax.slide_z(1) ] + d1.get( 'l2m', [] ) - d2 = d.copy() + d2 = d_copy(d) d2['kind'] = 'poly_n' d2['l2m'] = [ ax.slide_z(1), ax.zoom_z(-1) ] + d2.get( 'l2m', [] ) @@ -431,7 +483,7 @@ zm = math.sqrt(2) def four_pyramid_side_f(i): - d_ = d.copy() + d_ = d_copy(d) d_['kind'] = 'triangle' d_['l2m'] = [ ax.zoom_y(zm), ax.rot_x(45), ax.slide_y(-1), ax.rot_z(90*i) ] + d_.get( 'l2m', [] ) return d_setup( d_ ) @@ -439,17 +491,17 @@ return sum( map( four_pyramid_side_f, range(n) ), [] ) if kind == 'four_pyramid': - d0 = d.copy() + d0 = d_copy(d) d0['kind'] = 'four_pyramid_side' - d1 = d.copy() + d1 = d_copy(d) d1['kind'] = 'square' d1['l2m'] = [ ax.zoom_z(-1) ] + d1.get( 'l2m', [] ) return sum( map( d_setup, [d0,d1] ), [] ) if kind == 'tri_pyramid_side': - d0 = d.copy() + d0 = d_copy(d) d0['kind'] = 'triangle' d0['l2m'] = [ ax.rot_x(90) ] + d0.get( 'l2m', [] ) @@ -457,21 +509,21 @@ b = math.sqrt(2)/2 deg = mt.rad_to_deg( math.atan2(1, b) ) - d1 = d.copy() + d1 = d_copy(d) d1['kind'] = 'triangle' d1['l2m'] = [ ax.zoom([b,h,1]), ax.rot_x(deg), ax.rot_z(90+45), ax.slide([0.5,0.5,0]) ] + d1.get( 'l2m', [] ) - d2 = d.copy() + d2 = d_copy(d) d2['kind'] = 'triangle' d2['l2m'] = [ ax.zoom([b,h,1]), ax.rot_x(deg), ax.rot_z(-90-45), ax.slide([-0.5,0.5,0]) ] + d2.get( 'l2m', [] ) return sum( map( d_setup, [d0,d1, d2] ), [] ) if kind == 'tri_pyramid': - d0 = d.copy() + d0 = d_copy(d) d0['kind'] = 'tri_pyramid_side' - d1 = d.copy() + d1 = d_copy(d) d1['kind'] = 'triangle' d1['l2m'] = [ ax.zoom_z(-1) ] + d1.get( 'l2m', [] ) @@ -487,7 +539,7 @@ deg2 = mt.rad_to_deg( math.atan2(1, h) ) def poly_n_pyramid_side_f(i): - d_ = d.copy() + d_ = d_copy(d) d_['kind'] = 'triangle' d_['l2m'] = [ ax.zoom([b,h2,1]), ax.rot_x(deg2), ax.slide_y(-h), ax.rot_z(deg*i) ] + d_.get( 'l2m', [] ) return d_setup( d_ ) @@ -495,34 +547,34 @@ return sum( map( poly_n_pyramid_side_f, range(n) ), [] ) if kind == 'poly_n_pyramid': - d0 = d.copy() + d0 = d_copy(d) d0['kind'] = 'poly_n_pyramid_side' - d1 = d.copy() + d1 = d_copy(d) d1['kind'] = 'poly_n' d1['l2m'] = [ ax.zoom_z(-1) ] + d1.get( 'l2m', [] ) return sum( map( d_setup, [d0,d1] ), [] ) if kind == 'pipe': - d0 = d.copy() + d0 = d_copy(d) d0['kind'] = 'pipe_side' - d1 = d.copy() + d1 = d_copy(d) d1['kind'] = 'circle' d1['l2m'] = [ ax.slide_z(1) ] + d1.get( 'l2m', [] ) - d2 = d.copy() + d2 = d_copy(d) d2['kind'] = 'circle' d2['l2m'] = [ ax.slide_z(1), ax.zoom_z(-1) ] + d2.get( 'l2m', [] ) return sum( map( d_setup, [d0,d1,d2] ), [] ) if kind == 'cone': - d0 = d.copy() + d0 = d_copy(d) d0['kind'] = 'cone_side' - d1 = d.copy() + d1 = d_copy(d) d1['kind'] = 'circle' d1['l2m'] = [ ax.zoom_z(-1) ] + d1.get( 'l2m', [] ) @@ -539,10 +591,8 @@ targ = d.get(targ_k, []) ds = [] for i in range(n): - d_ = d.copy() - d_['rxs'] = rxs[:] # ! + d_ = d_copy(d) d_[targ_k] = targ[:] - 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 ), [] ) @@ -571,12 +621,7 @@ 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', []) ) - + data = ut.map_lst( d_copy, data ) ds = [] for d_ in data: d_['m2g'] = d_.get('m2g', []) + d.get('l2g')