⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 view.c

📁 seismic software,very useful
💻 C
📖 第 1 页 / 共 4 页
字号:
/*view object code*/#include <stdlib.h>#include <stdio.h>#include <string.h>#include "par.h"#include "ui_panel.h"#include "ui_window.h"#include "ui_canvas.h"#include "ui_menu.h"#include "colorbar.h"#include "main.h"#include "color.h"#include "axis.h"#include "draw.h"#include "plane.h"#include "pik.h"#include "data.h"#include "map.h"#include "movie.h"#include "render.h"#include "view.h"#include "pick.h"/* set rendering attributes for a view */RenderAttr _attr_;#define RENDER_ATTR(_transp,_skew,_mark,_zbuffer,_image,_axes,_shadow,_lines,_box,_pick) \        _attr_->image = (_image);\        _attr_->shadow = (_shadow);\        _attr_->zbuffer = (_zbuffer);\        _attr_->box = (_box);\        _attr_->axes = (_axes);\        _attr_->lines = (_lines);\        _attr_->pick = (_pick);\        _attr_->skew = (_skew);\        _attr_->transp = (_transp);\        _attr_->mark = (_mark);\     /* printf ("image=%d shadow=%d zbuffer=%d box=%d axes=%d lines=%d        pick=%d skew=%d transp=%d        mark=%d\n",_image,_shadow,_zbuffer,_box,_axes,_lines,_pick,_skew,_transp,_mark)       */Message  message;/* initialize view object */string   viewnamelist[] = VIEW_NAMELIST;View     ViewInit(Data data){    View     view;    cwp_String   option;    int      i;    string tmp_str;        {        extern int _alloc;        view = (View) malloc((1) * sizeof(view[0]));        _alloc += (1) * sizeof(view[0]);        if( view == 0 ){            err("cant allocate %d bytes for var; %d already allocated",                (1) * sizeof(view[0]), _alloc);        }        if( memwatch ){            (void) printf("malloc %s=%d\n", "var", (1) * sizeof(view[0]));        }    };    view->margins[MARGIN_LEFT] = LEFT_MARGIN;    view->margins[MARGIN_RIGHT] = RIGHT_MARGIN;    view->margins[MARGIN_BASE] = BASE_MARGIN;    view->margins[MARGIN_TOP] = TOP_MARGIN;    view->style = VIEW_CUBE;    if( getparstring("style", &option) ){        for( view->style = 0;             view->style < sizeof(viewnamelist) / sizeof(viewnamelist[0]);             view->style++ ){            if( !strcmp(viewnamelist[view->style], option) ){                break;            }        }    } else        getparint("style", &view->style);    getparint("wide", &view->wide);    getparint("hite", &view->hite);    switch (view->style ){       case VIEW_TRANSP:       case VIEW_SIDE:        view->movie = MOVIE_SIDE;        break;       case VIEW_TOP:        view->movie = MOVIE_TOP;        break;       default:        view->movie = MOVIE_FRONT;    }    if( getparstring("movie", &option) ){        if( !strcmp(option, "in") ){            view->movie = MOVIE_FRONT;            MovieSetDir(MOVIE_REVERSE);            MovieSetRun(1);        }        if( !strcmp(option, "out") ){            view->movie = MOVIE_FRONT;            MovieSetDir(MOVIE_FORWARD);            MovieSetRun(1);        }        if( !strcmp(option, "left") ){            view->movie = MOVIE_SIDE;            MovieSetDir(MOVIE_REVERSE);            MovieSetRun(1);        }        if( !strcmp(option, "right") ){            view->movie = MOVIE_SIDE;            MovieSetDir(MOVIE_FORWARD);            MovieSetRun(1);        }        if( !strcmp(option, "up") ){            view->movie = MOVIE_TOP;            MovieSetDir(MOVIE_REVERSE);            MovieSetRun(1);        }        if( !strcmp(option, "down") ){            view->movie = MOVIE_TOP;            MovieSetDir(MOVIE_REVERSE);            MovieSetRun(1);        }    }    if( view->style == VIEW_TRANSP ){        view->shape = SHAPE_PIXEL;    }else{        view->shape = SHAPE_FIT;    }    if( getparstring("shape", &option) ){        if( !strcmp(option, "fit") ){            view->shape = SHAPE_FIT;        }else if( !strcmp(option, "cube") ){            view->shape = SHAPE_FIT;        }else if( !strcmp(option, "0") ){            view->shape = SHAPE_FIT;        }else if( !strcmp(option, "true") ){            view->shape = SHAPE_TRUE;        }else if( !strcmp(option, "1") ){            view->shape = SHAPE_TRUE;        }else if( !strcmp(option, "pixel") ){            view->shape = SHAPE_PIXEL;        }else if( !strcmp(option, "2") ){            view->shape = SHAPE_PIXEL;        }    }    view->showpicks = DRAW;    getparint("showpicks", &view->showpicks);    view->nacross = 1;    getparint("across", &view->nacross);    view->ndown = 1;    getparint("down", &view->ndown);    view->dacross = 1;    getparint("delta", &view->dacross);    view->rate = VIEW_RATE_TENTHS;    getparint("rate", &view->rate);    view->fence = DRAW_ALL;    getparint("fence", &view->fence);    view->map[AXIS_DOWN] =        MapInit(DataAxis(data, DATA_AXIS1), "DOWN", AXIS_DOWN);    view->map[AXIS_ACROSS] =        MapInit(DataAxis(data, DATA_AXIS2), "ACROSS", AXIS_ACROSS);    view->map[AXIS_DEEP] =        MapInit(DataAxis(data, DATA_AXIS3), "DEEP", AXIS_DEEP);    view->map[AXIS_4D] = MapInit(DataAxis(data, DATA_AXIS4), "4D", AXIS_4D);    view->map[AXIS_5D] = MapInit(DataAxis(data, DATA_AXIS5), "5D", AXIS_5D);    if( getparstring("orient", &option) ){        if( !strcmp(option, "side") ){            MapSwap(view->map[AXIS_ACROSS], view->map[AXIS_DEEP]);        } else if( !strcmp(option, "top") ){            MapSwap(view->map[AXIS_DOWN], view->map[AXIS_DEEP]);        } else if( !strcmp(option, "extra") ){            MapSwap(view->map[AXIS_4D], view->map[AXIS_DEEP]);        }    }    view->map[AXIS_COLOR] =        MapInit(DataAxis(data, DATA_VALUE), "COLOR", AXIS_COLOR);    if( getparstring("origin", &option) ){        strcpy( tmp_str ,option );    }else{        if( view->style == VIEW_FENCE ){            strcpy(tmp_str, "center");        }else{            strcpy(tmp_str, "option");        }    }    if( !strcmp(tmp_str, "center") || !strcmp(tmp_str, "middle") ){        for( i = 1; i < VIEW_NAXIS; i++ ){            MapSetFrame(view->map[i], AxisSize(MapAxis(view->map[i])) / 2);        }    }     if( view->map[AXIS_DEEP]->size == 1 ){       view->style = VIEW_FRONT;    }     {        extern int _alloc;        _attr_ = (RenderAttr) malloc((1) * sizeof(_attr_[0]));        _alloc += (1) * sizeof(_attr_[0]);        if( _attr_ == 0 ){            err("cant allocate %d bytes for var; %d already allocated",                (1) * sizeof(_attr_[0]), _alloc);        }        if( memwatch ){            (void) printf("malloc %s=%d\n", "var", (1) * sizeof(_attr_[0]));        }    };    return (view);}/* adjust view size: reallocate buffers,adjust map axes */void ViewSize(View view){    int      wide, hite, size, deep;    float    fwide, fhite, scale;    if( !view ){        return;    }    /* get new size */    UICanvasSize(&wide, &hite);    RenderSize(wide, hite);    view->wide = wide;    view->hite = hite;    /* adjust axes lengths depending upon shape and style */    switch (view->style ){        /* the four cubical views */       case VIEW_CUBE:       case VIEW_FENCE:       case VIEW_THREE:       case VIEW_TRANSP:        /* actual real estate */        wide = view->wide - HMARGIN - GAP;        hite = view->hite - VMARGIN - GAP;        switch (view->shape ){           case SHAPE_FIT:            deep = (wide < hite ? wide : hite) * (1. - FRAC);            MapSetSize(view->map[AXIS_DOWN], hite - deep);            MapSetSize(view->map[AXIS_ACROSS], wide - deep);            MapSetSize(view->map[AXIS_DEEP], deep);            break;           case SHAPE_TRUE:            fwide = (float) wide / (float) (MapZoom(view->map[AXIS_ACROSS]) +                                            MapZoom(view->map[AXIS_DEEP]));            fhite = (float) hite / (float) (MapZoom(view->map[AXIS_DOWN]) +                                            MapZoom(view->map[AXIS_DEEP]));            if( fwide < fhite ){                MapSetSize(view->map[AXIS_DOWN],                           (int) (fwide * MapZoom(view->map[AXIS_DOWN])));                MapSetSize(view->map[AXIS_ACROSS],                           (int) (fwide * MapZoom(view->map[AXIS_ACROSS])));                MapSetSize(view->map[AXIS_DEEP],                           (int) (fwide * MapZoom(view->map[AXIS_DEEP])));            }else{                MapSetSize(view->map[AXIS_DOWN],                           (int) (fhite * MapZoom(view->map[AXIS_DOWN])));                MapSetSize(view->map[AXIS_ACROSS],                           (int) (fhite * MapZoom(view->map[AXIS_ACROSS])));                MapSetSize(view->map[AXIS_DEEP],                           (int) (fhite * MapZoom(view->map[AXIS_DEEP])));            }            break;           case SHAPE_PIXEL:            fwide = (float) wide / (float) (MapWindow(view->map[AXIS_ACROSS]) +                                            MapWindow(view->map[AXIS_DEEP]));            fhite = (float) hite / (float) (MapWindow(view->map[AXIS_DOWN]) +                                            MapWindow(view->map[AXIS_DEEP]));            if( fwide < 1.0 ){                UIMessage("dataset too wide; shrink data or enlarge window");/*                              ViewSetShape (SHAPE_FIT);*/                break;            }            if( fhite < 1.0 ){                UIMessage("dataset too high; window data or enlarge window");/*                              ViewSetShape (SHAPE_FIT);*/                break;            }            MapSetSize(view->map[AXIS_DOWN], MapWindow(view->map[AXIS_DOWN]));            MapSetSize(view->map[AXIS_ACROSS],                       MapWindow(view->map[AXIS_ACROSS]));            MapSetSize(view->map[AXIS_DEEP], MapWindow(view->map[AXIS_DEEP]));            break;        }        break;       case VIEW_FRONT:        ViewSingleSize(view->map[AXIS_ACROSS], view->map[AXIS_DOWN],                       view->map[AXIS_DEEP]);        break;       case VIEW_SIDE:        ViewSingleSize(view->map[AXIS_DEEP], view->map[AXIS_DOWN],                       view->map[AXIS_ACROSS]);        break;       case VIEW_TOP:        ViewSingleSize(view->map[AXIS_ACROSS], view->map[AXIS_DEEP],                       view->map[AXIS_DOWN]);        break;       case VIEW_XSEC:        MapSetSize(view->map[AXIS_DOWN], view->hite - VMARGIN);        MapSetSize(view->map[AXIS_ACROSS], (view->wide - HMARGIN) / 2);        break;       case VIEW_ARRAY:        MapSetSize(view->map[AXIS_ACROSS],                   (view->wide - (view->nacross - 1) * GAP) / view->nacross);        MapSetSize(view->map[AXIS_DOWN],                   (view->hite - (view->ndown - 1) * GAP) / view->ndown);        break;    }    DrawFreePixmaps();}/* size for single panel */void ViewSingleSize(Map hmap, Map vmap, Map zmap){    float    fwide, fhite, scale;    int      size;    extern View view;    switch (view->shape ){       case SHAPE_FIT:        MapSetSize(hmap, view->wide - HMARGIN);        MapSetSize(vmap, view->hite - VMARGIN);        break;       case SHAPE_TRUE:        fwide = (float) (view->wide - HMARGIN) / (float) MapZoom(hmap);        fhite = (float) (view->hite - VMARGIN) / (float) MapZoom(vmap);        scale = fwide < fhite ? fwide : fhite;        MapSetSize(vmap, (int) scale * MapZoom(vmap));        MapSetSize(hmap, (int) scale * MapZoom(vmap));        break;       case SHAPE_PIXEL:        fwide = (float) (view->wide - HMARGIN) / (float) MapWindow(hmap);        fhite = (float) (view->hite - VMARGIN) / (float) MapWindow(vmap);        size = (fhite < 1. ? fhite : 1.) * (MapLast(vmap) - MapFirst(vmap));        MapSet(vmap,               MapAxis(vmap),               size > 0 ? size : -size,               MapFirst(vmap),               MapLast(vmap), MapFirst(vmap), MapLast(vmap), MapDmovie(hmap));        size = (fwide < 1. ? fwide : 1.) * (MapLast(hmap) - MapFirst(hmap));        MapSet(hmap,               MapAxis(hmap),               size > 0 ? size : -size,               MapFirst(hmap),               MapLast(hmap), MapFirst(hmap), MapLast(hmap), MapDmovie(hmap));        break;    }}/* callback for initial view size */void ViewSize0(void){    extern View view;    ViewSize(view);}/* extract view from data; depends upon movie and view mode */void ViewDraw(View view, int mode){    extern Data data;    extern Render render;    Map      map;    int      pixels;    if( UIFirst() ){        return;    }    if( !view || !view->map[AXIS_DEEP] ){        return;    }    pixels = 0;    if( mode == DRAW_ALL ){        TymeStart();        DrawWatch(1);        if( view->style != VIEW_FENCE ){            RenderClear();            DrawClear();        }        PlaneReset();    }    if( view->showpicks && view->style != VIEW_TRANSP ){        PikDraw(NO_INDEX, ERASE);    }    switch (view->style ){       case VIEW_CUBE:        ViewDrawCube(view, mode);        pixels +=            MapSize(view->map[AXIS_DOWN]) * MapSize(view->map[AXIS_ACROSS]);        pixels += MapSize(view->map[AXIS_DEEP]) * MapSize(view->map[AXIS_DOWN]);        pixels +=            MapSize(view->map[AXIS_ACROSS]) * MapSize(view->map[AXIS_DEEP]);        break;       case VIEW_FENCE:        ViewDrawFence(view, view->fence);        if( view->fence & DRAW_FRONT ){            pixels +=                MapSize(view->map[AXIS_DOWN]) * MapSize(view->map[AXIS_ACROSS]);        }        if( view->fence & DRAW_SIDE ){            pixels +=                MapSize(view->map[AXIS_DEEP]) * MapSize(view->map[AXIS_DOWN]);        }        if( view->fence & DRAW_TOP ){            pixels +=                MapSize(view->map[AXIS_ACROSS]) * MapSize(view->map[AXIS_DEEP]);        }        break;       case VIEW_THREE:        ViewDrawPlan(view, mode);        pixels +=            MapSize(view->map[AXIS_DOWN]) * MapSize(view->map[AXIS_ACROSS]);        pixels += MapSize(view->map[AXIS_DEEP]) * MapSize(view->map[AXIS_DOWN]);        pixels +=            MapSize(view->map[AXIS_ACROSS]) * MapSize(view->map[AXIS_DEEP]);        break;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -