diff -urN rt_v52/Makefile rt_v53/Makefile --- rt_v52/Makefile 2018-06-08 01:48:57.000000000 +0900 +++ rt_v53/Makefile 2018-06-21 22:05:56.000000000 +0900 @@ -16,4 +16,5 @@ rm -f *.o *~ *.pyc rm -rf __pycache__ find . -type d -name 'out*' | xargs rm -rf + rm -f blk_balls.yaml blk_bars.yaml dots.yaml # EOF diff -urN rt_v52/big_ball.yaml rt_v53/big_ball.yaml --- rt_v52/big_ball.yaml 1970-01-01 09:00:00.000000000 +0900 +++ rt_v53/big_ball.yaml 2018-06-21 21:25:38.000000000 +0900 @@ -0,0 +1,15 @@ +@include defs.yaml + +big_ball: +- kind: ball + rtd: { diff: 0.3 } + maps: + - fn: '*mov4' + fn_r: '*mov4' + t2m: [ ax.zoom_all(2), ax.rot_x(90) ] + - fn: '*mov4' + fn_r: '*mov4' + t2m: [ ax.zoom_all(2), ax.rot_x(90), ax.rot_z(180) ] + m2g: [ ax.zoom_all(1000) ] + +# EOF diff -urN rt_v52/blk.yaml rt_v53/blk.yaml --- rt_v52/blk.yaml 1970-01-01 09:00:00.000000000 +0900 +++ rt_v53/blk.yaml 2018-06-21 22:12:07.000000000 +0900 @@ -0,0 +1,39 @@ +@include defs.yaml + +blk_ball: +- kind: ball + rtd: '*rtd_a' + m2g: + - ax.zoom_all(0.5) + +@include blk_balls.yaml + +blk_h: +- kind: pipe + rtd: '*rtd_a' + m2g: + - ax.slide_z(1) + - 'ax.zoom([0.5,0.5,0.5])' + - ax.rot_y(90) + +blk_v: +- kind: pipe + rtd: '*rtd_a' + m2g: + - ax.slide_z(1) + - 'ax.zoom([0.5,0.5,0.5])' + - ax.rot_x(-90) + +@include blk_bars.yaml + +blk: +- kind: or + args: + - kind: exports + exports: + - blk_balls + - blk_hs + - blk_vs + def_col: '*blue' + +# EOF diff -urN rt_v52/dat.py rt_v53/dat.py --- rt_v52/dat.py 2018-06-15 21:57:23.000000000 +0900 +++ rt_v53/dat.py 2018-06-21 21:25:38.000000000 +0900 @@ -89,16 +89,19 @@ return dict( map( lambda k: ( k, f_lst( yd.get(k) ) ), yd.keys() ) ) -def setup_eval_ax(o, sec): +def setup_eval(o, sec, start_lst, top_marks): t = type(o) if t == list: - return list( map( lambda o: setup_eval_ax(o, sec), o ) ) + return list( map( lambda o: setup_eval(o, sec, start_lst, top_marks), o ) ) if t == dict: tm_sft = o.get('tm_sft', 0) - f = lambda k: ( k, setup_eval_ax( o.get(k), sec + tm_sft ) ) + f = lambda k: ( k, setup_eval( o.get(k), sec + tm_sft, start_lst, top_marks ) ) return dict( map( f, o.keys() ) ) - if t == str and o.startswith('ax.'): - return eval(o) + if t == str and o: + if any( map( lambda sta: o.startswith(sta), start_lst ) ): + return eval(o) + if o[0] in top_marks: + return eval( o[1:] ) return o ydic = {} # for export @@ -527,6 +530,10 @@ data_name = ut.arg_s('data_name', 'copen') fn = ut.arg_s('yaml', 'dat.yaml') yd = ut.yaml_load(fn, {}) + + tmp_fn = 'tmp.yaml' + ut.yaml_save(tmp_fn, yd) + yd = ut.defs_str_replace(yd) yd = ut.defs_eval(yd) yd = tm_sft_copy(yd) @@ -544,10 +551,14 @@ #print('data={}'.format( ut.yaml_dump( ut.dic_to_items(data) ) ) ) data = ut.map_lst( setup_etc, data ) - data = setup_eval_ax(data, sec) + data = setup_eval( data, sec, ['ax.'], '*' ) data = ut.map_lst( setup_opt, data ) + #print('data2={}'.format( ut.yaml_dump( ut.dic_to_items(data) ) ) ) + val.cli.set_prop('data', typ_data, data) val.cli.set_prop('lights', '[ltd]', lights) - return ut.cmd_exec( "grep '\' " + fn ) != '' + dep_sec = ut.cmd_exec( "grep '\' " + tmp_fn ) != '' + ut.cmd_exec( "rm -f " + tmp_fn ) + return dep_sec # EOF diff -urN rt_v52/defs.yaml rt_v53/defs.yaml --- rt_v52/defs.yaml 1970-01-01 09:00:00.000000000 +0900 +++ rt_v53/defs.yaml 2018-06-21 21:25:38.000000000 +0900 @@ -0,0 +1,20 @@ +defs: + mov4: IMG_3999_4.mov + rtd_A: { base: 0.1, diff: 0, reflect: 0.5, reflact: 0.5, density: 2 } + rtd_a: { base: 0.1, diff: 0.3, reflect: 0.5, reflact: 0.2, density: 2 } + rtd_B: { base: 0.7, diff: 0.3 } + rtd_C: { base: 0.7, diff: 0.3, reflect: 0.5 } + transp: { base: 0, diff: 0.1, reflact: 0.9 } + + dark: [50,50,50] + white: [200,200,200] + red: [50,50,200] + yellow: [50,200,200] + blue: [200,50,50] + + way1: 'way.get([(-1,1),(0,8),(0,1),(1,1),(0,8),(0,1),(-1,None)], sec)' + way2: 'way.get([(1,2),(1,1),(0.01,1),(1,1),(0.01,1),(1,1),(0.01,1),(1,2),(1,None)], sec)' + + sec10: '(lambda v: (v-int(v))*10.0)(sec/10.0)' + +# EOF diff -urN rt_v52/dot.yaml rt_v53/dot.yaml --- rt_v52/dot.yaml 1970-01-01 09:00:00.000000000 +0900 +++ rt_v53/dot.yaml 2018-06-21 22:13:44.000000000 +0900 @@ -0,0 +1,23 @@ +@include defs.yaml + +dot1: +- kind: ball + rtd: '*rtd_a' + def_col: '*white' + m2g: + - ax.zoom_all(0.2) + +pdot1: +- kind: ball + rtd: '*rtd_a' + def_col: '*[50,int(way.get([(50,1),(200,1)],sec)),200]' + m2g: + - ax.zoom_all(0.5) + +@include dots.yaml + +dot: +- kind: exports + exports: [ dots, pdots ] + +# EOF diff -urN rt_v52/pac.sh rt_v53/pac.sh --- rt_v52/pac.sh 1970-01-01 09:00:00.000000000 +0900 +++ rt_v53/pac.sh 2018-06-21 21:25:38.000000000 +0900 @@ -0,0 +1,20 @@ +#!/bin/sh + +rm -rf pac +mkdir pac +cd pac + +P=http://kondoh.html.xdomain.jp/pac +LST="pac.py kon.py pac_data.tgz v2.patch v3.patch v4.patch v5.patch v6.patch" + +for F in $LST; do + wget $P/$F +done + +tar xvzf pac_data.tgz +cat v*.patch | patch -p1 + +cd .. + +# EOF + diff -urN rt_v52/pac.yaml rt_v53/pac.yaml --- rt_v52/pac.yaml 1970-01-01 09:00:00.000000000 +0900 +++ rt_v53/pac.yaml 2018-06-21 21:25:38.000000000 +0900 @@ -0,0 +1,17 @@ +@include defs.yaml +@include big_ball.yaml +@include blk.yaml +@include dot.yaml + +pac: +- kind: exports + exports: [ blk, dot ] + m2g: + - 'ax.slide([-21.0/2,-23.0/2,0])' + - ax.zoom_y(-1) + +all: +- kind: exports + exports: [ big_ball, pac ] + +# EOF diff -urN rt_v52/pac_dat.py rt_v53/pac_dat.py --- rt_v52/pac_dat.py 1970-01-01 09:00:00.000000000 +0900 +++ rt_v53/pac_dat.py 2018-06-21 22:04:34.000000000 +0900 @@ -0,0 +1,126 @@ +#!/usr/bin/env python + +import ut + +# from pac/pac.py + +DIRS = ( U, D, L, R ) = 'udlr' +bak_dir = lambda d: { U: D, D: U, L: R, R: L }.get(d) +dir_to_xy = lambda d: { U: (0, -1), D: (0, 1), L: (-1, 0), R: (1, 0) }.get(d, (0, 0) ) +step_to = lambda x, y, d: ( lambda dx, dy: (x+dx, y+dy) )( *dir_to_xy(d) ) + + +def xys_c(lst_xy, w, h, c): + xys = [] + for y in range(h): + for x in range(w): + if ut.lst_xy_get( lst_xy, x, y ) == c: + xys.append( (x, y) ) + return xys + +mk_sld = lambda x, y: 'ax.slide([{},{},0])'.format(x, y) +mk = lambda export, m2g: { 'kind': 'export', 'export': export, 'm2g': m2g } +mk_sld_lst = lambda export, xys: ut.map_up_lst( lambda x, y: mk( export, [ mk_sld(x, y) ] ), xys ) + +def blk_dat(lst_xy, w, h): + c = '#' + for y in range(h): + for x in range(w): + if ut.lst_xy_get( lst_xy, x, y ) == c: + def func(d): + (x_, y_) = step_to(x, y, d) + s = ut.lst_xy_get( lst_xy, x_, y_, '' ) + return s[:1] == c + ut.lst_xy_set(lst_xy, x, y, c + ''.join( filter( func, DIRS ) ) ) + blk_balls = [] + for y in range(h): + for x in range(w): + s = ut.lst_xy_get( lst_xy, x, y, '' ) + if s[:1] != c: + continue + ds = s[1:] + if len(ds) > 2 or ( len(ds) == 2 and ( 'ud' in ds or 'lr' in ds ) ): + continue + blk_balls.append( (x, y) ) + + has_cnt = lambda s, cs: len( ut.filter_lst( lambda s1: s1 in cs, s ) ) + + def has_blk_cnt(x, y, cs): + s = ut.lst_xy_get( lst_xy, x, y, '' ) + return has_cnt( s[1:], cs ) if s[:1] == c else 0 + + blk_hs = [] + for y in range(h): + x = 0 + while x < w: + while x < w: + cnt = has_blk_cnt( x, y, 'lr' ) + if cnt > 0: + break + x += 1 + if x >= w: + break + sx = x + x += 1 + n = cnt + while x < w: + cnt = has_blk_cnt( x, y, 'lr' ) + if cnt == 0: + break + x += 1 + n += cnt + n = int( n / 2 ) + blk_hs.append( (sx, y, n) ) + + blk_vs = [] + for x in range(w): + y = 0 + while y < h: + while y < h: + cnt = has_blk_cnt( x, y, 'ud' ) + if cnt > 0: + break + y += 1 + if y >= h: + break + sy = y + y += 1 + n = cnt + while y < h: + cnt = has_blk_cnt( x, y, 'ud' ) + if cnt == 0: + break + y += 1 + n += cnt + n = int( n / 2 ) + blk_vs.append( (x, sy, n) ) + + d = { 'blk_balls': mk_sld_lst( 'blk_ball', blk_balls ) } + ut.yaml_save( 'blk_balls.yaml', d ) + + mk_blk_h = lambda x, y, n: mk( 'blk_h', [ 'ax.zoom_x({})'.format(n), mk_sld(x, y) ] ) + d = { 'blk_hs': ut.map_up_lst( mk_blk_h, blk_hs ) } + mk_blk_v = lambda x, y, n: mk( 'blk_v', [ 'ax.zoom_y({})'.format(n), mk_sld(x, y) ] ) + d.update( { 'blk_vs': ut.map_up_lst( mk_blk_v, blk_vs ) } ) + ut.yaml_save( 'blk_bars.yaml', d ) + +def dot_dat(lst_xy, w, h): + xys = xys_c( lst_xy, w, h, '.' ) + d = { 'dots': mk_sld_lst( 'dot1', xys ) } + + xys = xys_c( lst_xy, w, h, 'O' ) + d.update( { 'pdots': mk_sld_lst( 'pdot1', xys ) } ) + + ut.yaml_save( 'dots.yaml', d ) + +if __name__ == "__main__": + pac_txt = 'pac/pac.txt' + if not ut.exists(pac_txt): + ut.cmd_exec('sh pac.sh') + + lst_xy = ut.txt_to_lst_xy(pac_txt) + (w, h) = ut.lst_xy_wh(lst_xy) + + blk_dat(lst_xy, w, h) + dot_dat(lst_xy, w, h) +# EOF diff -urN rt_v52/ut.py rt_v53/ut.py --- rt_v52/ut.py 2018-06-15 21:57:23.000000000 +0900 +++ rt_v53/ut.py 2018-06-21 22:04:01.000000000 +0900 @@ -262,11 +262,66 @@ return e ### -def yaml_load(fname, def_val): - v = def_val +def file_read_inc(fname, def_val='', inc_magic='@include', done=None): + if done == None: + done = [] + done.append(fname) + + lst = None + with open(fname, 'r') as f: + lst = f.read().split('\n') + if lst == None: + return def_val + + def_val = '' + def func(s): + if not s.startswith(inc_magic): + return s + s = s[ len(inc_magic): ].strip() + if not s: + return def_val + if s[0] in '"<\'': + s = s[1:-1] + if s in done: + return def_val + return file_read_inc(s, def_val, inc_magic, done) + + return '\n'.join( map( func, lst ) ) + +def file_write(fname, s): + try: + with open(fname, 'w') as f: + f.write(s) + except IOError as e: + err_msg( 'err write {}'.format(fname) ) + +### + +def txt_to_lst_xy(fname): + lst = [] with open(fname, 'r') as f: - v = yaml.load(f) - return v + lst = f.read().strip().split('\n') + return map_lst( list, lst ) + +def lst_xy_wh(lst_xy): + if not lst_xy: + return (0, 0) + ws = map( len, lst_xy ) + w = max(ws) if ws else 0 + return ( w, len(lst_xy) ) + +lst_xy_get = lambda lst_xy, x, y, def_val=None: lst_get( lst_get( lst_xy, y, [] ), x, def_val ) + +def lst_xy_set(lst_xy, x, y, v): + (w, h) = lst_xy_wh(lst_xy) + if in_wh(x, y, w, h): + lst_xy[y][x] = v + +### + +def yaml_load(fname, def_val): + s = file_read_inc(fname, def_val=None) + return yaml.load(s) if s != None else def_val yaml_dump = lambda v, default_flow_style=False: yaml.dump( v, default_flow_style=default_flow_style ) @@ -292,6 +347,13 @@ return map_lst( items_to_dic, o ) return o +def try_eval(s, def_val=None): + try: + return eval(s) + except: + pass + return def_val + def defs_str_replace(d, top_mark='@', do_eval=False, del_defs=False): # sample yaml # @@ -336,7 +398,7 @@ while s != bak: bak = s s = ' '.join( map( defs_x, s.split(' ') ) ) - return eval(s) if do_eval else s + return try_eval(s, top_mark+s) if do_eval else s return o return f(d)