📄 view.c
字号:
if (panel > PickSize()) break; frame = PickFrame (panel); if (frame == NO_INDEX|| frame >= AxisSize(MapAxis(view->map[AXIS_DEEP]))) break; iv = panel / view->nacross; ih = panel % view->nacross; MapSetFrame (view->map[AXIS_DEEP],frame); RENDER_ATTR(0,0,1,0,DRAW_FRONT,0,1,0,0,view->showpicks); RenderHorz (data,view->map[AXIS_ACROSS], view->map[AXIS_DOWN],view->map[AXIS_DEEP],view->map[AXIS_4D],view->map[AXIS_5D], ih=ih*(MapSize(view->map[AXIS_ACROSS])+GAP), iv=iv*(MapSize(view->map[AXIS_DOWN])+GAP), render,view->margins,_attr_); if (MapSize(view->map[AXIS_ACROSS]) > 100) { DrawText (ih,iv,TEXT_H0|TEXT_V0,AxisScript(ViewDataAxis(view,AXIS_DEEP),frame)); } else { labelp = AxisScript(ViewDataAxis(view,AXIS_DEEP),frame); while (*labelp != '=' && *labelp != '\0') labelp++; if (*labelp == '=') labelp++; else labelp = AxisScript(ViewDataAxis(view,AXIS_DEEP),frame); DrawText (ih,iv,TEXT_H0|TEXT_V0,labelp); } } MapSetFrame (view->map[AXIS_DEEP],save); }/* cube extracts three panels */ViewDrawCube (view,mode)View view;int mode; { extern Data data; extern Render render; if (!view) return; /* front */ RENDER_ATTR(0,0,mode==DRAW_ALL,0,(mode&DRAW_FRONT)*(mode&DRAW_IMAGE),(AXIS_LEFT|AXIS_BASE)*!MovieRun(),!MovieRun(),1,!MovieRun(),view->showpicks); RenderHorz (data,view->map[AXIS_ACROSS],view->map[AXIS_DOWN], view->map[AXIS_DEEP],view->map[AXIS_4D],view->map[AXIS_5D], view->margins[MARGIN_LEFT], view->margins[MARGIN_TOP]+MapSize(view->map[AXIS_DEEP])+GAP, render,view->margins,_attr_); /* side */ RENDER_ATTR(0,1,mode==DRAW_ALL,0,(mode&DRAW_SIDE)*(mode&DRAW_IMAGE),(AXIS_BASE)*!MovieRun(),!MovieRun(),1,!MovieRun(),view->showpicks); RenderVert (data,view->map[AXIS_DEEP],view->map[AXIS_DOWN], view->map[AXIS_ACROSS],view->map[AXIS_4D],view->map[AXIS_5D], view->margins[MARGIN_LEFT]+MapSize(view->map[AXIS_ACROSS])+GAP+1, MapSize(view->map[AXIS_DEEP])+view->margins[MARGIN_TOP]+GAP, render,view->margins,_attr_); /* top */ RENDER_ATTR(0,1,mode==DRAW_ALL,0,(mode&DRAW_TOP)*(mode&DRAW_IMAGE),(AXIS_LEFT)*!MovieRun(),!MovieRun(),1,!MovieRun(),view->showpicks); RenderHorz (data,view->map[AXIS_ACROSS],view->map[AXIS_DEEP], view->map[AXIS_DOWN],view->map[AXIS_4D],view->map[AXIS_5D], view->margins[MARGIN_LEFT], view->margins[MARGIN_TOP], render,view->margins,_attr_); }/* fence extracts three panels */ViewDrawFence (view,mode)View view;int mode; { extern Data data; extern Render render; if (!view) return; RenderClear(); DrawClear(); /* front */ if (mode & DRAW_FRONT) { RENDER_ATTR(0,0,mode==DRAW_ALL,1,mode&DRAW_FRONT,0,!MovieRun(),0,0,0); RenderHorz (data,view->map[AXIS_ACROSS],view->map[AXIS_DOWN], view->map[AXIS_DEEP],view->map[AXIS_4D],view->map[AXIS_5D], view->margins[MARGIN_LEFT]+MapSize(view->map[AXIS_DEEP])- MapInverse(view->map[AXIS_DEEP], MapFrame(view->map[AXIS_DEEP])), view->margins[MARGIN_TOP]+MapInverse(view->map[AXIS_DEEP], MapFrame(view->map[AXIS_DEEP])), render,view->margins,_attr_); } RENDER_ATTR(0,0,mode==DRAW_ALL,0,0,(AXIS_LEFT|AXIS_BASE),0,0,0,0); RenderHorz (data,view->map[AXIS_ACROSS],view->map[AXIS_DOWN], view->map[AXIS_DEEP],view->map[AXIS_4D],view->map[AXIS_5D], view->margins[MARGIN_LEFT], view->margins[MARGIN_TOP]+MapSize(view->map[AXIS_DEEP]), render,view->margins,_attr_); /* side */ if (mode & DRAW_SIDE) { RENDER_ATTR(0,1,mode==DRAW_ALL,1,mode&DRAW_SIDE,0,!MovieRun(),0,0,0); RenderVert (data,view->map[AXIS_DEEP],view->map[AXIS_DOWN], view->map[AXIS_ACROSS],view->map[AXIS_4D],view->map[AXIS_5D], view->margins[MARGIN_LEFT]+MapInverse(view->map[AXIS_ACROSS], MapFrame(view->map[AXIS_ACROSS]))-1, MapSize(view->map[AXIS_DEEP])+view->margins[MARGIN_TOP], render,view->margins,_attr_); } RENDER_ATTR(0,1,mode==DRAW_ALL,0,0,(AXIS_BASE),0,0,0,0); RenderVert (data,view->map[AXIS_DEEP],view->map[AXIS_DOWN], view->map[AXIS_ACROSS],view->map[AXIS_4D],view->map[AXIS_5D], view->margins[MARGIN_LEFT]+MapSize(view->map[AXIS_ACROSS])+GAP+1, MapSize(view->map[AXIS_DEEP])+view->margins[MARGIN_TOP], render,view->margins,_attr_); /* top */ if (mode & DRAW_TOP) { RENDER_ATTR(0,1,mode==DRAW_ALL,1,mode&DRAW_TOP,0,!MovieRun(),0,0,0); RenderHorz (data,view->map[AXIS_ACROSS],view->map[AXIS_DEEP], view->map[AXIS_DOWN],view->map[AXIS_4D],view->map[AXIS_5D], view->margins[MARGIN_LEFT], view->margins[MARGIN_TOP]+MapInverse(view->map[AXIS_DOWN], MapFrame(view->map[AXIS_DOWN])), render,view->margins,_attr_); } RENDER_ATTR(0,1,mode==DRAW_ALL,0,0,(AXIS_LEFT),0,0,0,0); RenderHorz (data,view->map[AXIS_ACROSS],view->map[AXIS_DEEP], view->map[AXIS_DOWN],view->map[AXIS_4D],view->map[AXIS_5D], view->margins[MARGIN_LEFT], view->margins[MARGIN_TOP], render,view->margins,_attr_); }/* plan view extracts three panels */ViewDrawPlan (view,mode)View view;int mode; { extern Data data; extern Render render; if (!view) return; /* front */ RENDER_ATTR(0,0,mode==DRAW_ALL,0,(mode&DRAW_FRONT)*(mode&DRAW_IMAGE),(AXIS_LEFT|AXIS_BASE)*!MovieRun(),!MovieRun(),1,!MovieRun(),view->showpicks); RenderHorz (data,view->map[AXIS_ACROSS],view->map[AXIS_DOWN], view->map[AXIS_DEEP],view->map[AXIS_4D],view->map[AXIS_5D], view->margins[MARGIN_LEFT], MapSize(view->map[AXIS_DEEP])+view->margins[MARGIN_TOP]+GAP, render,view->margins,_attr_); /* side */ RENDER_ATTR(0,0,mode==DRAW_ALL,0,(mode&DRAW_SIDE)*(mode&DRAW_IMAGE),(AXIS_BASE)*!MovieRun(),!MovieRun(),1,!MovieRun(),view->showpicks); RenderVert (data,view->map[AXIS_DEEP],view->map[AXIS_DOWN], view->map[AXIS_ACROSS],view->map[AXIS_4D],view->map[AXIS_5D], view->margins[MARGIN_LEFT]+MapSize(view->map[AXIS_ACROSS])+GAP+1, MapSize(view->map[AXIS_DEEP])+view->margins[MARGIN_TOP]+GAP, render,view->margins,_attr_); /* top */ RENDER_ATTR(0,0,mode==DRAW_ALL,0,(mode&DRAW_TOP)*(mode&DRAW_IMAGE),(AXIS_LEFT)*!MovieRun(),!MovieRun(),1,!MovieRun(),view->showpicks); RenderHorz (data,view->map[AXIS_ACROSS],view->map[AXIS_DEEP], view->map[AXIS_DOWN],view->map[AXIS_4D],view->map[AXIS_5D], view->margins[MARGIN_LEFT], view->margins[MARGIN_TOP], render,view->margins,_attr_); }/* draw transparent cube */ViewDrawTransp (view)View view; { int iz,nz; extern Data data; extern Render render; extern ViewDrawTranspCallback(); /* draw all axes */ RENDER_ATTR(0,0,DRAW_ALL,0,0,(AXIS_LEFT|AXIS_BASE),0,0,0,0); RenderHorz (data,view->map[AXIS_ACROSS],view->map[AXIS_DOWN], view->map[AXIS_DEEP],view->map[AXIS_4D],view->map[AXIS_5D], view->margins[MARGIN_LEFT], view->margins[MARGIN_TOP]+MapSize(view->map[AXIS_DEEP]), render,view->margins,_attr_); RENDER_ATTR(0,1,DRAW_ALL,0,0,(AXIS_BASE),0,0,0,0); RenderVert (data,view->map[AXIS_DEEP],view->map[AXIS_DOWN], view->map[AXIS_ACROSS],view->map[AXIS_4D],view->map[AXIS_5D], view->margins[MARGIN_LEFT]+MapSize(view->map[AXIS_ACROSS])+1, MapSize(view->map[AXIS_DEEP])+view->margins[MARGIN_TOP], render,view->margins,_attr_); RENDER_ATTR(0,1,DRAW_ALL,0,0,(AXIS_LEFT),0,0,0,0); RenderHorz (data,view->map[AXIS_ACROSS],view->map[AXIS_DEEP], view->map[AXIS_DOWN],view->map[AXIS_4D],view->map[AXIS_5D], view->margins[MARGIN_LEFT], view->margins[MARGIN_TOP], render,view->margins,_attr_); MapSaveFrame (ViewMovieMap(view)); switch (view->movie) { case MOVIE_FRONT: MapSetFrame1 (view->map[AXIS_DEEP],0); break; case MOVIE_SIDE: MapSetFrame1 (view->map[AXIS_ACROSS],0); break; case MOVIE_TOP: MapSetFrame1 (view->map[AXIS_DOWN],MapSize(view->map[AXIS_DOWN])-1); break; } UITimer(1,ViewDrawTranspCallback); DrawLine (view->margins[MARGIN_LEFT], view->margins[MARGIN_TOP]+MapSize(view->map[AXIS_DEEP]), view->margins[MARGIN_LEFT]+MapSize(view->map[AXIS_ACROSS]), view->margins[MARGIN_TOP]+MapSize(view->map[AXIS_DEEP]), DRAW); DrawLine (view->margins[MARGIN_LEFT]+MapSize(view->map[AXIS_ACROSS])+ MapSize(view->map[AXIS_DEEP]), view->margins[MARGIN_TOP], view->margins[MARGIN_LEFT]+MapSize(view->map[AXIS_ACROSS]), view->margins[MARGIN_TOP]+MapSize(view->map[AXIS_DEEP]), DRAW); DrawLine (view->margins[MARGIN_LEFT]+MapSize(view->map[AXIS_ACROSS]), view->margins[MARGIN_TOP]+MapSize(view->map[AXIS_DOWN])+ MapSize(view->map[AXIS_DEEP]), view->margins[MARGIN_LEFT]+MapSize(view->map[AXIS_ACROSS]), view->margins[MARGIN_TOP]+MapSize(view->map[AXIS_DEEP]), DRAW); DrawLine (view->margins[MARGIN_LEFT]+MapSize(view->map[AXIS_DEEP]), view->margins[MARGIN_TOP], view->margins[MARGIN_LEFT]+MapSize(view->map[AXIS_DEEP])+ MapSize(view->map[AXIS_ACROSS]), view->margins[MARGIN_TOP], DRAW); DrawLine (view->margins[MARGIN_LEFT]+MapSize(view->map[AXIS_ACROSS])+ MapSize(view->map[AXIS_DEEP]), view->margins[MARGIN_TOP], view->margins[MARGIN_LEFT]+MapSize(view->map[AXIS_DEEP])+ MapSize(view->map[AXIS_ACROSS]), view->margins[MARGIN_TOP]+MapSize(view->map[AXIS_DOWN]), DRAW); }/* callback to animate transparent drawing */ViewDrawTranspCallback () { extern View view; extern Render render; extern Data data; extern ViewDrawTranspCallback(); int block; switch (view->rate) { case VIEW_RATE_ALL: block = 1; break; case VIEW_RATE_TENTHS: block = 10; break; case VIEW_RATE_EACH: block = 10000; break; } switch (view->movie) { /* front */ case MOVIE_FRONT: block = MapSize (view->map[AXIS_DEEP]) / block; block = block > 0 ? block : 1; MapSetFrame (view->map[AXIS_DEEP], MapMap(view->map[AXIS_DEEP],MapFrame1(view->map[AXIS_DEEP]))); RENDER_ATTR(1,0,0,0,1,0,0,0,0,0); RenderHorz (data,view->map[AXIS_ACROSS], view->map[AXIS_DOWN],view->map[AXIS_DEEP],view->map[AXIS_4D],view->map[AXIS_5D], view->margins[MARGIN_LEFT]+ MapSize(view->map[AXIS_DEEP])- MapFrame1(view->map[AXIS_DEEP]), view->margins[MARGIN_TOP] + MapFrame1(view->map[AXIS_DEEP]), render,view->margins,_attr_); if (MapFrame1(view->map[AXIS_DEEP]) && (MapFrame1(view->map[AXIS_DEEP])%block) == 0) { RenderDraw (); } if (MapFrame1(view->map[AXIS_DEEP]) < MapSize(view->map[AXIS_DEEP])-1) { UITimer(1,ViewDrawTranspCallback); } else { RenderDraw (); MapRestoreFrame (view->map[AXIS_DEEP]); TymeEnd (MapSize (view->map[AXIS_DOWN]) * MapSize (view->map[AXIS_ACROSS]) * MapSize(view->map[AXIS_DEEP])); DrawWatch(0); } MapSetFrame1 (view->map[AXIS_DEEP],MapFrame1(view->map[AXIS_DEEP])+1); break; /* side */ case MOVIE_SIDE: block = MapSize (view->map[AXIS_ACROSS]) / block; block = block > 0 ? block : 1; MapSetFrame (view->map[AXIS_ACROSS], MapMap(view->map[AXIS_ACROSS],MapFrame1(view->map[AXIS_ACROSS]))); RENDER_ATTR(1,1,0,0,1,0,0,0,0,0); RenderVert (data,view->map[AXIS_DEEP],view->map[AXIS_DOWN], view->map[AXIS_ACROSS],view->map[AXIS_4D],view->map[AXIS_5D], view->margins[MARGIN_LEFT]+MapFrame1(view->map[AXIS_ACROSS]), MapSize(view->map[AXIS_DEEP])+view->margins[MARGIN_TOP], render,view->margins,_attr_); if (MapFrame1(view->map[AXIS_ACROSS]) && MapFrame1(view->map[AXIS_ACROSS])%block == 0) RenderDraw (); if (MapFrame1(view->map[AXIS_ACROSS]) < MapSize (view->map[AXIS_ACROSS])-1) { UITimer(1,ViewDrawTranspCallback); } else { RenderDraw (); MapRestoreFrame (view->map[AXIS_ACROSS]); TymeEnd (MapSize (view->map[AXIS_DOWN]) * MapSize (view->map[AXIS_ACROSS]) * MapSize(view->map[AXIS_DEEP])); DrawWatch(0); } MapSetFrame1 (view->map[AXIS_ACROSS],MapFrame1(view->map[AXIS_ACROSS])+1); break; /* top */ case MOVIE_TOP: block = MapSize (view->map[AXIS_DOWN]) / block; block = block > 0 ? block : 1; MapSetFrame (view->map[AXIS_DOWN], MapMap(view->map[AXIS_DOWN],MapFrame1(view->map[AXIS_DOWN]))); RENDER_ATTR(1,1,0,0,1,0,0,0,0,0); RenderHorz (data,view->map[AXIS_ACROSS], view->map[AXIS_DEEP],view->map[AXIS_DOWN],view->map[AXIS_4D],view->map[AXIS_5D], view->margins[MARGIN_LEFT], view->margins[MARGIN_TOP]+MapFrame1(view->map[AXIS_DOWN]), render,view->margins,_attr_); if (MapFrame1(view->map[AXIS_DOWN]) != MapSize(view->map[AXIS_DOWN])-1 && MapFrame1(view->map[AXIS_DOWN])%block == 0) { RenderDraw (); } if (MapFrame1(view->map[AXIS_DOWN]) > 0) { UITimer(1,ViewDrawTranspCallback); } else { RenderDraw (); MapRestoreFrame (view->map[AXIS_DOWN]); TymeEnd (MapSize (view->map[AXIS_DOWN]) * MapSize (view->map[AXIS_ACROSS]) * MapSize(view->map[AXIS_DEEP])); DrawWatch (0); } MapSetFrame1 (view->map[AXIS_DOWN],MapFrame1(view->map[AXIS_DOWN])-1); break; } }/* callback to draw entire view */ViewDrawAll () { extern View view; if (!view) return; if (UIFirst()) MainFirst(); ColorbarDraw(); ViewDraw (view,DRAW_ALL); if (view->style != VIEW_TRANSP) RenderDraw (); }/* callback to draw only current movie frame panel plus crosslines */ViewDrawMovie () { int h0, v0, nh, nv, mode=0; extern View view; extern ViewDrawMovie(); Map map; if (!view) return; map = ViewMovieMap (view); MapNextFrame (map); if (MovieCache()) mode = DrawPixmap(MapFrame(map)); mode = (1 - mode) * DRAW_IMAGE; switch (view->movie) { case MOVIE_TOP: ViewDraw (view,DRAW_TOP|mode); break; case MOVIE_SIDE: ViewDraw (view,DRAW_SIDE|mode); break; case MOVIE_FRONT: ViewDraw (view,DRAW_FRONT|mode); break; } if (mode) { RenderDraw (); if (MovieCache()) { DrawSavePixmap (MapFrame(map)); } }#ifdef XAW if (MovieRun()) UITimer(MovieDelay()+1,ViewDrawMovie);#endif#ifdef XM if (MovieRun()) UITimer(MovieDelay()*10+1,ViewDrawMovie);#endif UIWakeup(); }/* set movie option */ViewSetMovie (movie)int movie; { extern View view; Map map; if (!view) return; view->movie = movie; map = ViewMovieMap (view);/* PlaneFind (AxisDir(MapAxis(map)),NO_INDEX);*/ DrawFreePixmaps(); if (view->style == VIEW_TRANSP) ViewDraw (view,DRAW_ALL); }/* initialize movie bounds */ViewMovieFullBounds () { int imap; extern View view; MovieOff (); for (imap=1; imap<VIEW_NAXIS; imap++) { MapSetFrameBounds (view->map[imap],MapFirst(view->map[imap]), MapLast(view->map[imap])); MapSetDmovie (view->map[imap],1); } }/* one of 3d views? */View3D () { extern View view; switch (view->style) { case VIEW_THREE: case VIEW_CUBE: case VIEW_FENCE: return (1); break; default: return (0); break; } }/* OK to turn on movie */ViewMovieOK () { extern View view; switch (view->style) { case VIEW_CUBE: case VIEW_THREE: case VIEW_FRONT: case VIEW_SIDE: case VIEW_TOP: return (1); break; default: return (0); break; } }/* set view option */ViewSetStyle (style)int style; { extern View view; int size; if (!view) return; if (style == view->style) return; view->style = style; /* shape defaults with view style */ /* set movie directions too */ switch (style) { case VIEW_TRANSP: view->shape = SHAPE_PIXEL; view->movie = MOVIE_SIDE; break; case VIEW_FRONT: view->movie = MOVIE_FRONT; break; case VIEW_SIDE: view->movie = MOVIE_SIDE; break; case VIEW_TOP: view->movie = MOVIE_TOP; break; } /* movie status */ if (ViewMovieOK () == 0) MovieOff (); ViewSize (view); ViewDraw (view,DRAW_ALL); RenderDraw (); }/* set fence mode */ViewSetFence (mode)int mode; { extern View view; if (!view) return; view->fence = mode; view->style = VIEW_FENCE; DrawFreePixmaps (); ViewDraw (view,DRAW_ALL); RenderDraw (); }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -