static void tkhscroll(Tk *tk, TkScroll *tks, Image *i, Point size) { TkEnv *e; Point p[3], o; int bo, w, h, triangle; e = tk->env; triangle = tk->act.height - Elembw; bo = tk->borderwidth + Elembw; p[0].x = bo; p[0].y = size.y/2; p[1].x = p[0].x + triangle; p[1].y = p[0].y - triangle/2 + 1; p[2].x = p[0].x + triangle; p[2].y = p[0].y + triangle/2 - 2; drawarrow(tks, i, p, e, ActiveA1, ButtonA1); tks->a1 = p[2].x; w = p[2].x + Elembw; p[0].x = size.x - bo - 1; p[1].x = p[0].x - triangle; p[2].x = p[0].x - triangle; drawarrow(tks, i, p, e, ActiveA2, ButtonA2); tks->a2 = p[2].x; o.x = bo + triangle + 2*Elembw; o.y = tk->borderwidth; w = p[2].x - 2*Elembw - w - 2*tk->borderwidth; h = size.y - 2*bo; o.x += TKF2I(tks->top*w); w *= tks->bot - tks->top; w = TKF2I(w); tks->t1 = o.x - Elembw; tks->t2 = o.x + w + Elembw; drawslider(tks, i, o, w, h, e); }
static void tkvscroll(Tk *tk, TkScroll *tks, Image *i, Point size) { TkEnv *e; Point p[3], o; int bo, w, h, triangle; e = tk->env; triangle = tk->act.width - Elembw; bo = tk->borderwidth + Elembw; p[0].x = size.x/2; p[0].y = bo; p[1].x = p[0].x - triangle/2; p[1].y = p[0].y + triangle; p[2].x = p[0].x + triangle/2; p[2].y = p[0].y + triangle; drawarrow(tks, i, p, e, ActiveA1, ButtonA1); tks->a1 = p[2].y; h = p[2].y + Elembw; p[0].y = size.y - bo - 1; p[1].y = p[0].y - triangle; p[2].y = p[0].y - triangle; drawarrow(tks, i, p, e, ActiveA2, ButtonA2); tks->a2 = p[2].y; o.x = tk->borderwidth ; o.y = bo + triangle + 2*Elembw; w = size.x - 2*bo; h = p[2].y - 2*Elembw - h - 2*tk->borderwidth; o.y += TKF2I(tks->top*h); h *= tks->bot - tks->top; h = TKF2I(h); tks->t1 = o.y - Elembw; tks->t2 = o.y + h + Elembw; drawslider(tks, i, o, w, h, e); }
int main() { int i,j,key,sl=0,wl=1 ; int shape_i = 11, shape_j = 4 ; float f=MRATIO_F ; float x,y,zx,zy,z,ph,ms_w,ms_h ; float zran=(ZMAX-ZMIN) ; float zcen=(ZMAX+ZMIN)/2.0 ; color_prms cl = { EGGX_COLOR_BEGIN, /* カラーパターン */ CP_CONTRAST | CP_BRIGHTNESS | CP_GAMMA, /* フラグ */ 1.0, /* コントラスト */ 0.0, /* ブライトネス*/ 1.0, /* γ */ } ; int win ; int cl_r,cl_g,cl_b ; win=gopen(WINWIDTH,WINHEIGHT) ; /* ウィンドゥのタイトル */ /* 座標系を変更する */ coordinate(win, 0,0, XMIN,YMIN, WINWIDTH/(XMAX-XMIN), WINHEIGHT/(YMAX-YMIN)) ; layer(win,sl,wl) ; puts("【キーボードでの操作方法】") ; puts("'PageUp','PageDown' … 質量比変更") ; puts("'c','C' … カラーパターン") ; puts("'↑','↓','←','→' … カラー調整") ; puts("'[',']' … コントラスト") ; puts("'{','}' … ブライトネス") ; puts("'<','>' … γ補正") ; puts("'s' … 画像を保存") ; puts("'q','Esc' … 終了") ; ms_w=(float)(XMAX-XMIN)/XSAMPLES ; /* メッシュ1個分のサイズ */ ms_h=(float)(YMAX-YMIN)/YSAMPLES ; do{ /* ウィンドゥのタイトル */ winname(win,"ロッシュワールド('s'キーで画像save) f=%g zcen=%g zran=%g", f,zcen,zran) ; for( i=0 ; i<XSAMPLES ; i++ ){ /* ポテンシャルを色で表現 */ x=XMIN+ms_w*i ; for( j=0 ; j<YSAMPLES ; j++ ){ y=YMIN+ms_h*j ; ph=get_phi(x+ms_w/2.0,y+ms_w/2.0,f) ; generatecolor(&cl,zcen-zran/2,zcen+zran/2,ph, &cl_r,&cl_g,&cl_b) ; newrgbcolor(win,cl_r,cl_g,cl_b) ; fillrect(win,x,y,ms_w*1.5,ms_h*1.5) ; } } newpen(win,1) ; for( i=0 ; i<XSAMPLES ; i++ ){ /* テスト粒子に働く力を矢印で表現 */ x=XMIN+ms_w*(i+0.5) ; for( j=0 ; j<YSAMPLES ; j++ ){ y=YMIN+ms_h*(j+0.5) ; zx=get_fx(x,y,f) ; zy=get_fy(x,y,f) ; zx *= VXSCALE ; zy *= VYSCALE ; z=sqrt(zx*zx+zy*zy) ; if( z <= VCARMAX ){ drawarrow(win,x-zx,y-zy,x+zx,y+zy,0.3,0.2, shape_i*10+shape_j) ; } } } sl ^= 1 ; /* XORをとってレイヤを切替 */ wl ^= 1 ; layer( win,sl,wl ) ; key=ggetch() ; /* キー入力があるまで待つ */ if( key == 0x002 ) f += 0.1 ; /* PageUp */ else if( key == 0x006 ) f -= 0.1 ; /* PageDown */ else if( key == 0x01e ) zcen += 0.1 ; /* ↑ */ else if( key == 0x01f ) zcen -= 0.1 ; /* ↓ */ else if( key == 0x01c ) zran += 0.1 ; /* → */ else if( key == 0x01d ) zran -= 0.1 ; /* ← */ else if( key == 'i' ) { shape_i += 1 ; if ( 12 < shape_i ) shape_i = 10 ; } else if( key == 'j' ) { shape_j += 1 ; if ( 7 < shape_j ) shape_j = 1 ; } else if( key == 'c' ){ /* 'c','C'キーでカラーパターン変更 */ cl.colormode++ ; if( EGGX_COLOR_BEGIN+EGGX_COLOR_NUM <= cl.colormode ) cl.colormode=EGGX_COLOR_BEGIN ; } else if( key == 'C' ){ cl.colormode-- ; if( cl.colormode < EGGX_COLOR_BEGIN ) cl.colormode=EGGX_COLOR_BEGIN+EGGX_COLOR_NUM-1 ; } else if( key == '[' ){ /* '[',']'でコントラスト変更 */ cl.contrast += 0.05 ; if( 1 < cl.contrast ) cl.contrast = 1 ; } else if( key == ']' ){ cl.contrast -= 0.05 ; if( cl.contrast < 0 ) cl.contrast = 0 ; } else if( key == '{' ){ /* '{','}'でブライトネス変更 */ cl.brightness += 0.05 ; if( 1 < cl.brightness ) cl.brightness = 1 ; } else if( key == '}' ){ cl.brightness -= 0.05 ; if( cl.brightness < 0 ) cl.brightness = 0 ; } else if( key == '<' ){ /* '<','>'でγ変更 */ cl.gamma += 0.025 ; } else if( key == '>' ){ cl.gamma -= 0.025 ; if( cl.gamma <= 0 ) cl.gamma = 0.025 ; } else if( key == 's' ){ /* 's'キーで保存 */ #ifdef USE_NETPBM saveimg( win,sl,XMIN,YMIN,XMAX,YMAX, "pnmtops -noturn -dpi 72 -equalpixels -psfilter -flate -ascii85",256, "roche_f=%g.eps",f) ; printf("画像を保存: filename='roche_f=%g.eps'\n",f) ; #else #ifdef USE_IMAGEMAGICK saveimg( win,sl,XMIN,YMIN,XMAX,YMAX,"convert",256, "roche_f=%g.png",f) ; printf("画像を保存: filename='roche_f=%g.png'\n",f) ; #else saveimg( win,sl,XMIN,YMIN,XMAX,YMAX,"",256, "roche_f=%g.ppm",f) ; printf("画像を保存: filename='roche_f=%g.ppm'\n",f) ; #endif #endif } if( f < 0 ) f=0 ; if( zran < 0 ) zran=0.1 ; } while( key != 0x01b && key != 'q' ) ; /* ESCキーか 'q'キーで終了 */ gcloseall() ; return(0) ; }
void SlideNavmesh::draw(const float* view, const float zoom, bool highlight) { if (!visible(view)) return; drawCorner(!m_expanded); if (!m_expanded) return; glPushMatrix(); glTranslatef(m_pos[0],m_pos[1],0); // drawDropShadow(0,0, m_dim[0],m_dim[1], highlight ? 2 : 1); /* if (highlight) glColor4ub(255,255,255,128); else glColor4ub(255,255,255,96);*/ setcolor(COL_BACK); // drawBG(0,0,m_dim[0],m_dim[1]); glPushMatrix(); glTranslatef(PADDING_SIZE,PADDING_SIZE,0); drawBoundary(m_scene.boundary, m_scene.nboundary, zoom); // Draw navmesh if (m_drawGraph) navmeshDraw(m_scene.nav, zoom); // Draw Agent int aflags = 0; if (m_drawCorner) aflags |= AGENTDRAW_CORNER; if (m_drawCorridor) aflags |= AGENTDRAW_CORRIDOR; if (m_drawVisited) aflags |= AGENTDRAW_VISITED; NavmeshAgent* ag = &m_scene.agents[0]; agentTrailDraw(ag, m_scene.nav, zoom); agentDraw(ag, m_scene.nav, aflags, zoom); // Actual if (m_drawDelta) { glLineWidth(2.0f*zoom); setcolor(COL_DARK); drawarrow(ag->pos[0],ag->pos[1], ag->pos[0]+ag->vel[0], ag->pos[1]+ag->vel[1],0.1f); } glPopMatrix(); drawButtons(); /* setcolor(clerp(COL_DIM,COL_BACK,128)); glPointSize(1.0f); glLineWidth(1.0f); // drawtext(PADDING_SIZE,PADDING_SIZE/2, 0.07f, "M A S T E R P L A N"); const float ts = 0.07f; float sx; float x = PADDING_SIZE; float y = PADDING_SIZE/3; sx = x; drawtext(x,y, ts, "Corner"); x += 0.7f; drawtext(x,y, ts, "Corridor"); x += 0.7f; drawtext(x,y, ts, "Mesh"); x += 0.7f; glBegin(GL_LINES); glVertex2f(x,y+ts*1.5f); glVertex2f(sx,y+ts*1.5f); glEnd(); x += 0.5f; sx = x; drawtext(x,y, ts, "Straight"); x += 0.7f; drawtext(x,y, ts, "Smooth"); x += 0.7f; drawtext(x,y, ts, "Drunk"); x += 0.7f; glBegin(GL_LINES); glVertex2f(x,y+ts*1.5f); glVertex2f(sx,y+ts*1.5f); glEnd(); */ glPopMatrix(); }