diff -ur v3/cube.yaml v4/cube.yaml --- v3/cube.yaml 2018-11-02 23:18:05.000000000 +0900 +++ v4/cube.yaml 2018-11-15 22:49:47.000000000 +0900 @@ -10,8 +10,10 @@ idxs: - [0,1,2,3,0,4,5,6,7,4,1,5,0] +- col: [200,0,0] - [2,6] - [3,7] +- col: [50,200,0] - [4,6] eye_p: [0,-20,0] diff -ur v3/import.sh v4/import.sh --- v3/import.sh 2018-11-13 04:31:04.000000000 +0900 +++ v4/import.sh 2018-11-15 00:43:00.000000000 +0900 @@ -8,16 +8,16 @@ if [ ! -e org ]; then mkdir -p org cp -p $PYS org/ -fi -for py in $PYS; do - echo ${py} - for m in $MODS; do - EXP="s/import ${m}$/from . import ${m}/" - mv ${py} ${py}_ - cat ${py}_ | sed -e "$EXP" > ${py} + for py in $PYS; do + echo ${py} + for m in $MODS; do + EXP="s/import ${m}$/from . import ${m}/" + mv ${py} ${py}_ + cat ${py}_ | sed -e "$EXP" > ${py} + done + rm ${py}_ done - rm ${py}_ -done +fi # EOF diff -ur v3/librt.patch v4/librt.patch --- v3/librt.patch 2018-11-13 12:04:50.000000000 +0900 +++ v4/librt.patch 2018-11-15 01:32:00.000000000 +0900 @@ -24,3 +24,40 @@ for(i=0; i<3; i++){ for(j=0; j<3; j++){ VECS_ACC(vs, i, j) *= zm3[i]; +--- rt.0/lstx.c 2018-05-01 01:10:00.000000000 +0900 ++++ rt/lstx.c 2018-11-15 01:25:00.000000000 +0900 +@@ -1,6 +1,23 @@ + #include "lstx.h" + + void ++lstx_opt(struct lstx *lx) ++{ ++ int n = lx->n, i; ++ struct x_x xlst[n]; ++ ++ memcpy( xlst, lx->lst, sizeof(xlst) ); ++ lx->n = 0; ++ for(i=0; in > 0 && lx->lst[lx->n-1].typ == TYP_AX ){ ++ ax_compo( &lx->lst[lx->n-1].ax, &xlst[i].ax, &lx->lst[lx->n-1].ax ); ++ }else{ ++ lx->lst[lx->n++] = xlst[i]; ++ } ++ } ++} ++ ++void + xx_tr_p(struct x_x *xx, int d, double *p, double *rp) + { + switch(xx->typ){ +diff -ur rt.0/lstx.h rt/lstx.h +--- rt.0/lstx.h 2018-04-19 22:17:05.000000000 +0900 ++++ rt/lstx.h 2018-11-15 01:25:00.000000000 +0900 +@@ -23,6 +23,7 @@ + struct x_x *lst; + }; + ++void lstx_opt(struct lstx *lx); + void xx_tr_p(struct x_x *xx, int d, double *p, double *rp); + void lstx_tr_p(struct lstx *lx, int d, double *p, double *rp); + void lstx_tr_line(struct lstx *lx, int d, struct line *l, struct line *rl); diff -ur v3/p3d.py v4/p3d.py --- v3/p3d.py 2018-11-13 04:31:04.000000000 +0900 +++ v4/p3d.py 2018-11-15 23:17:17.000000000 +0900 @@ -54,6 +54,10 @@ self.SetSizer(sizer_1) self.Layout() + bg = eval( opt.get('-bg', 'wx.BLACK') ) + self.panel.SetBackgroundColour(bg) + self.fg = eval( opt.get('-fg', 'wx.WHITE') ) + evs = ( wx.EVT_MOTION, wx.EVT_LEFT_DOWN, @@ -78,8 +82,18 @@ (w, h) = self.panel.GetSize() lst = self.wf.get_lst(w, h) dc = wx.PaintDC(self.panel) + + pen = dc.GetPen() + pen.SetColour( self.fg ) + dc.SetPen(pen) + for (x1, y1, x2, y2) in lst: - dc.DrawLine(x1, y1, x2, y2) + if x1 == -999: # magic + col = (y1, x2, y2) # r, g, b + pen.SetColour(col) + dc.SetPen(pen) + else: + dc.DrawLine(x1, y1, x2, y2) def hdr(self, event): dck = self.dclick.check(event) diff -ur v3/sinc.py v4/sinc.py --- v3/sinc.py 2018-11-02 23:18:05.000000000 +0900 +++ v4/sinc.py 2018-11-15 23:11:12.000000000 +0900 @@ -20,7 +20,9 @@ z = float( h * np.sinc( math.sqrt( x*x + y*y ) ) ) ps.append( [x,y,z] ) + v = lambda a, b: int( a + (b - a) * i / (ny-1) ) for i in range(ny): + idxs.append( { 'col': [ v(255,0),v(0,255),128 ] } ) idxs.append( list( range(i*nx, (i+1)*nx) ) ) eye_p = [ w*2, -w*5, w*3 ] diff -ur v3/wfrm.c v4/wfrm.c --- v3/wfrm.c 2018-11-13 04:31:04.000000000 +0900 +++ v4/wfrm.c 2018-11-15 22:49:47.000000000 +0900 @@ -84,7 +84,17 @@ int ia = idxs[i*2]; int ib = idxs[i*2+1]; double pa[3], pb[3]; - if( eye_clip( wh2eye, w, h, d, &ps_[ia*3], &ps_[ib*3], pa, pb ) ){ + + if( ia == -999 ){ /* magic */ + t[tn*6+0] = NAN; + t[tn*6+1] = ia; + t[tn*6+2] = ib & 255; + ib >>= 8; + t[tn*6+3] = ib & 255; + ib >>= 8; + t[tn*6+4] = ib & 255; + tn++; + } else if( eye_clip( wh2eye, w, h, d, &ps_[ia*3], &ps_[ib*3], pa, pb ) ){ lstx_tr_p( wh2eye, G2L, pa, &t[tn*6] ); lstx_tr_p( wh2eye, G2L, pb, &t[tn*6+3] ); tn++; @@ -93,11 +103,19 @@ for(i=0; ityp == OBJ_TYP_LIST ){ + sum += list_len(e) - 1; + }else if( e->typ == OBJ_TYP_DICT ){ + sum++; + } e = e->next; } @@ -199,12 +221,33 @@ e = list_top(idxs); for(i=0; iany.i; - *rp++ = f->next->any.i; - f = f->next; + if( e->typ == OBJ_TYP_LIST ){ + int m = list_len(e) - 1, j; + struct obj *f = list_top(e); + for(j=0; jany.i; + *rp++ = f->next->any.i; + f = f->next; + } + }else if( e->typ == OBJ_TYP_DICT ){ + struct obj *lst = dict_get_cp(e, "col"); + struct obj *c = list_top(lst); + int r, g, b, v; + + r = c->any.i; + c = c->next; + g = c->any.i; + c = c->next; + b = c->any.i; + + v = b; + v <<= 8; + v |= g; + v <<= 8; + v += r; + + *rp++ = -999; /* magic */ + *rp++ = v; } e = e->next; } @@ -290,6 +333,7 @@ fcx_new( &xlst[1].fx, wf_dz, 0 ); ax_zoom_z( &xlst[2].ax, -1); ax_rot_x( &xlst[3].ax, 90); + lstx_opt( &wh2eye ); line_new_p2(&l, eye_p, eye_t); ax_new_line(&eye2g, &l); @@ -393,7 +437,7 @@ v_mul( t, -ry, t ); v_add( wf_bp, t, eye_p ); }else if( memcmp(wf_mode, "move", 4) == 0 ){ - if(wf_view == VIEW_XYOrbit){ + if(wf_view == VIEW_TopDownOrtho){ double vy[3], vx[3], tx[3], ty[3], mv[3]; struct ax ax; diff -ur v3/wfrm.py v4/wfrm.py --- v3/wfrm.py 2018-11-13 04:31:04.000000000 +0900 +++ v4/wfrm.py 2018-11-15 23:11:25.000000000 +0900 @@ -39,14 +39,26 @@ def cvt(ps, idxs, eye2g, wh2eye, sc_sz): ps = ut.map_lst( lambda p: eye2g.tr('g2l', p), ps ) - p2s = ut.map_up( lambda i, j: eye_clip( wh2eye, sc_sz, ps[i], ps[j] ), idxs ) + + f1 = lambda i, j: eye_clip( wh2eye, sc_sz, ps[i], ps[j] ) + p2s = ut.map_lst( lambda o: f1(*o) if type(o) == list else o, idxs ) + p2s = filter( lambda p2: p2, p2s ) - p2s = map( lambda p2: ut.map_lst( lambda p: lstx.tr( wh2eye, 'g2l', p), p2 ), p2s ) - def f(p2): - (ax, ay, _) = p2[0] - (bx, by, _) = p2[1] - return ( int(ax), int(ay), int(bx), int(by) ) + f2 = lambda p2: ut.map_lst( lambda p: lstx.tr( wh2eye, 'g2l', p), p2 ) + p2s = map( lambda o: f2(o) if type(o) == list else o, p2s ) + + def f(o): + if type(o) == list: + p2 = o + (ax, ay, _) = p2[0] + (bx, by, _) = p2[1] + return ( int(ax), int(ay), int(bx), int(by) ) + col = [-1,-1,-1] + if type(o) == dict and 'col' in o: + col = o.get('col') + (r, g, b) = col + return (-999, r, g, b) # magic return list( map( f, p2s ) ) @@ -64,7 +76,8 @@ ( ps, eye_p, eye_t ) = map( mt.arr, ( ps, eye_p, eye_t ) ) f = lambda lst: list( map( lambda i: [ lst[i], lst[i+1] ], range( len(lst) - 1 ) ) ) - idxs = sum( map( f, idxs ), [] ) + ff = lambda o: f(o) if type(o) == list else [o] + idxs = sum( map( ff, idxs ), [] ) return (ps, idxs, eye_p, eye_t)