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

📄 pick.c

📁 seismic software,very useful
💻 C
📖 第 1 页 / 共 3 页
字号:
    if( PlaneType(plane) == RENDER_HORZ ){        hskew = PlaneSkew(plane);    } else {        vskew = PlaneSkew(plane);    }    for( ipick = 0; ipick < pickline->npick; ipick++ ){        x = MapInverse(PlaneHmap(plane),                       pickline->index[ipick][AxisDir                                              (MapAxis(PlaneHmap(plane)))]);        if( PlaneType(plane) == RENDER_VERT ){            x = MapSize(PlaneHmap(plane)) - x;        }        y = MapInverse(PlaneVmap(plane),                       pickline->index[ipick][AxisDir                                              (MapAxis(PlaneVmap(plane)))]);        if( x != NO_INDEX && y != NO_INDEX ){            x1 = x + PlaneH0(plane) + hskew * (MapSize(PlaneVmap(plane)) - y);            y1 = y + PlaneV0(plane) + vskew * (PlaneNH(plane) - x);            if( !ipick ){                DrawLine(x1 - 1, y1 - 1, x1, y1, draw);            } else if( x0 != NO_INDEX && y0 != NO_INDEX ){                x2 = x0 + PlaneH0(plane) + hskew *                    (MapSize(PlaneVmap(plane)) - y0);                y2 = y0 + PlaneV0(plane) + vskew * (PlaneNH(plane) - x0);                DrawLine(x1, y1, x2, y2, draw);            }        }        x0 = x;        y0 = y;    }}/*--------------------------------------------------------------------*\   draw all pick sets\*--------------------------------------------------------------------*/void     PickDrawAll(int draw){    int      iset;    for( iset = 0; iset < PICKNLIST; iset++ ){        if( picklist[iset] ){            PickDraw(picklist[iset], draw);        }    }}/*--------------------------------------------------------------------*\   read pick file\*--------------------------------------------------------------------*/void     PickRead(void){    FILE    *fd;    FILE    *fopen(const char *, const char *);    extern Data data;    string   dummy;    string   line;    int      iset = 0;    int      i;    float    value[DATA_NAXIS];    Message  message;    cwp_String str;    if( !data ){        return;    }    if( getparstring ("annotate", &str) == 0 ){        return;    }    strcpy( pickfile ,str );    if( (fd = fopen(pickfile, "r")) == NULL ){        UIMessage("cant open pick file");        return;    }    fgets(line, sizeof(line), fd);/*--------------------------- dead code ------------------------------*\    int      n1;    int      n2;    int      n3;    int      n4;    int      n5;    sscanf ( line,"%s %d %d %d %d %d",dummy,&n1,&n2,&n3,&n4,&n5 );    if(  n1 != AxisSize( DataAxis( data,DATA_AXIS1 ) )     || n2 != AxisSize( DataAxis( data,DATA_AXIS2 ) )      || n3 != AxisSize( DataAxis( data,DATA_AXIS3 ) )      || n4 != AxisSize( DataAxis( data,DATA_AXIS4 ) )      || n5 != AxisSize( DataAxis( data,DATA_AXIS5 ) ) ){            UIMessage ( "pick file wrong shape" );            return;    }\*--------------------------- dead code ------------------------------*/    fgets(line, sizeof(line), fd);    while (fgets(line, sizeof(line), fd) != NULL ){        if( !strncmp(line, "Pick#", 5) ){            iset++;            {                extern int _alloc;                picklist[iset] =                    (PickLine) malloc((1) * sizeof(picklist[iset][0]));                    _alloc += (1) * sizeof(picklist[iset][0]);                if( picklist[iset] == 0 ){                    err                        ("cant allocate %d bytes for picklist[iset] ; %d already allocated",                         (1) * sizeof(picklist[iset][0]), _alloc);                }                if( memwatch ){                    (void) printf("malloc %s=%d\n", "picklist[iset] ",                                  (1) * sizeof(picklist[iset][0]));                }            };            sscanf(line, "%s %s %s %d %d %d %d %d %d", dummy, dummy, dummy,                   &PICKDIR(picklist[iset]->, AXIS_DOWN),                   &PICKDIR(picklist[iset]->, AXIS_ACROSS),                   &PICKDIR(picklist[iset]->, AXIS_DEEP),                   &PICKDIR(picklist[iset]->, AXIS_4D),                   &PICKDIR(picklist[iset]->, AXIS_5D),                   &PICKDIR(picklist[iset]->, AXIS_5D));            picklist[iset]->npick = 0;        } else {            if( picklist[iset]->npick < NPICK ){                sscanf(line, "%f %f %f %f %f %f",                       &value[DATA_AXIS1],                       &value[DATA_AXIS2],                       &value[DATA_AXIS3],                       &value[DATA_AXIS4],                       &value[DATA_AXIS5], &value[DATA_VALUE]);                for( i = 1; i < DATA_NAXIS; i++ ){                    picklist[iset]->index[picklist[iset]->npick][i] =                        AxisIndex(DataAxis(data, i), value[i]);                }                picklist[iset]->index[picklist[iset]->npick][DATA_VALUE] =                    value[DATA_VALUE];                picklist[iset]->npick++;            }        }    }    fclose(fd);    sprintf(message, "%d picklines read from %s", iset, pickfile);    UIMessage(message);}#ifdef UNUSED_CODE/*--------------------------------------------------------------------*\   write pick file\*--------------------------------------------------------------------*/void     PickWrite(void){    FILE    *fd;    Message  message;    extern Data data;    extern FILE *outstream;    int      ipick;    int      isave;    int      iset;    if( picklist[0] == 0 ){        return;    }    if( !strcmp(pickfile, "stdio") ){        fd = outstream;    } else {        fd = fopen(pickfile, "w");    }    fseek(fd, 0L, SEEK_SET);    fprintf(fd, "Picks for dataset: %s\n", DataTitle(data));/*------------------------ dead code ---------------------------------*\        fprintf ( fd,"Dimensions: %d %d %d %d %d\n",                AxisSize( DataAxis( data,DATA_AXIS1 ) ),                AxisSize( DataAxis( data,DATA_AXIS2 ) ),                AxisSize( DataAxis( data,DATA_AXIS3 ) ),                AxisSize( DataAxis( data,DATA_AXIS4 ) ),                AxisSize( DataAxis( data,DATA_AXIS5 ) ) );\*------------------------ dead code ---------------------------------*/    fprintf(fd, "%9s: %9s: %9s: %9s: %9s: %9s:\n",            AxisLabel(DataAxis(data, DATA_AXIS1)),            AxisLabel(DataAxis(data, DATA_AXIS2)),            AxisLabel(DataAxis(data, DATA_AXIS3)),            AxisLabel(DataAxis(data, DATA_AXIS4)),            AxisLabel(DataAxis(data, DATA_AXIS5)),            AxisLabel(DataAxis(data, DATA_AXIS0)));    for( iset = 0, isave = 0; iset < PICKNLIST; iset++ ){        if( picklist[iset] && picklist[iset]->npick > 0 ){            fprintf(fd, "Pick# %d axis# %d %d %d %d %d %s\n",                    isave++,                    PICKDIR(picklist[iset]->, AXIS_DOWN),                    PICKDIR(picklist[iset]->, AXIS_ACROSS),                    PICKDIR(picklist[iset]->, AXIS_DEEP),                    PICKDIR(picklist[iset]->, AXIS_4D),                    PICKDIR(picklist[iset]->, AXIS_5D),                    AxisScript(DataAxis                               (data, PICKDIR(picklist[iset]->, AXIS_DEEP)),                               picklist[iset]->index[AXIS_DEEP]));            for( ipick = 0; ipick < picklist[iset]->npick; ipick++ ){                fprintf(fd, "%10g %10g %10g %10g %10g %10g\n",                        AxisValue(DataAxis(data, DATA_AXIS1),                                  picklist[iset]->index[ipick][DATA_AXIS1]),                        AxisValue(DataAxis(data, DATA_AXIS2),                                  picklist[iset]->index[ipick][DATA_AXIS2]),                        AxisValue(DataAxis(data, DATA_AXIS3),                                  picklist[iset]->index[ipick][DATA_AXIS3]),                        AxisValue(DataAxis(data, DATA_AXIS4),                                  picklist[iset]->index[ipick][DATA_AXIS4]),                        AxisValue(DataAxis(data, DATA_AXIS5),                                  picklist[iset]->index[ipick][DATA_AXIS5]),                        (float) picklist[iset]->index[ipick][DATA_VALUE]);            }        }    }    fclose(fd);    sprintf(message, "%d pick lines save in %s", isave, pickfile);    UIMessage(message);}#endif/*--------------------------------------------------------------------*\   remove set from pick list\*--------------------------------------------------------------------*/void     PickClear(PickLine pickline){    int      iset;    if( !pickline ){        return;    }    PickDraw(pickline, ERASE);    for( iset = 0; iset < PICKNLIST; iset++ ){        if( pickline == picklist[iset] ){            if( picklist[iset] ){                free(picklist[iset]);                picklist[iset] = 0;                if( memwatch ){                    printf("free %s\n", " picklist[iset] ");                }            };            picklist[iset] = 0;            return;        }    }    lastpick = 0;}/*--------------------------------------------------------------------*\   clear current pick\*--------------------------------------------------------------------*/void     PickClear0(void){    PickClear(lastpick);}/*---------------------- unreferenced code ---------------------------*\   set pick framevoid PickSetFrame( int index ){    PickLine pickline;    int      iset;    if(  index < 0 || index > PickSize(  ) ){        return;    }    for(  iset = 0; iset < PICKNLIST; iset++ ){        if(  picklist[iset] ){            index--;        }        if(  index < 0 ){            pickline = picklist[iset];            break;        }    }    if(  iset == PICKNLIST ){        return;    }    ViewSetMovie( PICKDIR( pickline-> ,AXIS_DEEP ) );    ViewSetFrame( pickline->index[AXIS_DEEP] ,FRAME_ACTUAL );    PickDraw( pickline ,DRAW );}\*---------------------- unreferenced code ---------------------------*//*--------------------------------------------------------------------*\   print a list of picks\*--------------------------------------------------------------------*/void     PickListInfo(void){    int      iset;    printf("Pick list:\n");    for( iset = -1; iset < PICKNLIST; iset++ ){        if( picklist[iset] ){            printf("dir=%d frame=%d\n",                   PICKDIR(picklist[iset]->, AXIS_DEEP),                   PICKFRAME0(picklist[iset]->, AXIS_DEEP));        }    }}/*--------------------------------------------------------------------*\   save pick parameters\*--------------------------------------------------------------------*/void     PickSavePar(void){    Message  message;    extern PickLine lastpick;    if( !lastpick ){        return;    }    sprintf(message, "Pick: nset=%d pickdir=%d pickframe=%d npick=%d pick=%s",            PickSize()            , PICKDIR(lastpick->, AXIS_DEEP)            , PICKFRAME0(lastpick->, AXIS_DEEP)            , lastpick->npick, pickfile);    UISaveMessage(message);}/*--------------------------------------------------------------------*\   returns two picks are in same frame\*--------------------------------------------------------------------*/int      PickSameFrame(PickPoint pick1, PickPoint pick2){    return ((pick1->iaxis[AXIS_DOWN] == pick2->iaxis[AXIS_DOWN]) &&            (pick1->iaxis[AXIS_ACROSS] == pick2->iaxis[AXIS_ACROSS]) &&            (pick1->iaxis[AXIS_DEEP] == pick2->iaxis[AXIS_DEEP]) &&            (pick1->iaxis[AXIS_4D] == pick2->iaxis[AXIS_4D]) &&            (pick1->iaxis[AXIS_5D] == pick2->iaxis[AXIS_5D]) &&            (pick1->index[pick1->iaxis[AXIS_DEEP]] ==             pick2->index[pick2->iaxis[AXIS_DEEP]])            && (pick1->index[pick1->iaxis[AXIS_4D]] ==                pick2->index[pick2->iaxis[AXIS_4D]])            && (pick1->index[pick1->iaxis[AXIS_5D]] ==                pick2->index[pick2->iaxis[AXIS_5D]]));}/*--------------------------------------------------------------------*\   returns two picks are same direction\*--------------------------------------------------------------------*/int      PickSameDir(PickPoint pick1, PickPoint pick2){    return ((pick1->iaxis[AXIS_DEEP] == pick2->iaxis[AXIS_DEEP]) &&            (pick1->iaxis[AXIS_4D] == pick2->iaxis[AXIS_4D]) &&            (pick1->iaxis[AXIS_5D] == pick2->iaxis[AXIS_5D]));}/*--------------------------------------------------------------------*\   returns direction of shared coordinate: 0 ,pick->iaxis[1] or   pick->iaxis[2]\*--------------------------------------------------------------------*/int      PickSharedDir(PickPoint pick1, PickPoint pick2){    return (PickSameFrame(pick1, pick2) *            (((pick1->index[pick1->iaxis[AXIS_DOWN]] ==               pick2->index[pick2->iaxis[AXIS_DOWN]]) *              pick1->iaxis[AXIS_DOWN]) +             ((pick1->index[pick1->iaxis[AXIS_ACROSS]] ==               pick2->index[pick2->iaxis[AXIS_ACROSS]]) *              pick1->iaxis[AXIS_ACROSS])));}/*--------------------------------------------------------------------*\   return non-zero if a is between b and c; angle a-b-c < 90; a is   nearer to b\*--------------------------------------------------------------------*/int      PickBetween(int *a, int *b, int *c){    int      i;    int      ra = 0;    int      rb = 0;    int      rc = 0;    for( i = 0; i < DATA_NAXIS; i++ ){        ra += (b[i] - c[i]) * (b[i] - c[i]);        rb += (a[i] - c[i]) * (a[i] - c[i]);        rc += (a[i] - b[i]) * (a[i] - b[i]);    }    return (rb < (ra + rc));}

⌨️ 快捷键说明

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