Ignore:
Timestamp:
May 27, 2009, 6:16:36 PM (15 years ago)
Author:
gah
Message:

change unirect?d parsing for flows to not call Tcl command

Location:
trunk/packages/vizservers/nanovis
Files:
5 edited

Legend:

Unmodified
Added
Removed
  • trunk/packages/vizservers/nanovis/FlowCmd.cpp

    r1468 r1469  
    115115}
    116116
     117FlowParticles::~FlowParticles(void)
     118{
     119    if (_rendererPtr != NULL) {
     120        delete _rendererPtr;
     121    }
     122    if (_hashPtr != NULL) {
     123        Tcl_DeleteHashEntry(_hashPtr);
     124    }
     125    Rappture::FreeSwitches(_switches, &_sv, 0);
     126}
     127
    117128void
    118129FlowParticles::Render(void)
     
    187198    float x0, y0, z0, x1, y1, z1;
    188199    x0 = y0 = z0 = 0.0f;
    189     x1 = y1 = z1 = 1.0f;
     200    x1 = y1 = z1 = 0.0f;
    190201    if (max.y  > min.y) {
    191202        y0 = (_sv.corner1.y - min.y) / (max.y - min.y);
     
    661672}
    662673
     674
    663675static int
    664676FlowDataFileOp(ClientData clientData, Tcl_Interp *interp, int objc,
     
    692704    if ((length > 4) && (strncmp(bytes, "<DX>", 4) == 0)) {
    693705        Rappture::Unirect3d *dataPtr;
    694 
    695706        dataPtr = new Rappture::Unirect3d(nComponents);
    696707        if (!dataPtr->ImportDx(result, nComponents, length-4, bytes+4)) {
     
    702713    } else if ((length > 10) && (strncmp(bytes, "unirect3d ", 10) == 0)) {
    703714        Rappture::Unirect3d *dataPtr;
    704         Tcl_CmdInfo cmdInfo;
    705 
    706         /* Set the clientdata field of the unirect3d command to contain
    707          * the local data structure. */
    708715        dataPtr = new Rappture::Unirect3d(nComponents);
    709         if (!Tcl_GetCommandInfo(interp, "unirect3d", &cmdInfo)) {
    710             return TCL_ERROR;
    711         }
    712         cmdInfo.objClientData = (ClientData)dataPtr;   
    713         Tcl_SetCommandInfo(interp, "unirect3d", &cmdInfo);
    714         Tcl_Obj *objPtr;
    715         objPtr = Tcl_NewStringObj(buf.bytes(), buf.size());
    716         int result;
    717         Tcl_IncrRefCount(objPtr);
    718         result = Tcl_GlobalEvalObj(interp, objPtr);
    719         Tcl_DecrRefCount(objPtr);
    720         if (result != TCL_OK) {
     716        if (dataPtr->ParseBuffer(interp, buf) != TCL_OK) {
    721717            delete dataPtr;
    722718            return TCL_ERROR;
    723719        }
    724         if (!dataPtr->isInitialized()) {
    725             delete dataPtr;
    726             return TCL_ERROR;
    727         }
    728720        flowPtr->SetData(dataPtr);
    729721    } else if ((length > 10) && (strncmp(bytes, "unirect2d ", 10) == 0)) {
    730         Rappture::Unirect2d *dataPtr;
    731         Tcl_CmdInfo cmdInfo;
    732 
    733         /* Set the clientdata field of the unirect3d command to contain
    734          * the local data structure. */
    735         dataPtr = new Rappture::Unirect2d();
    736         if (!Tcl_GetCommandInfo(interp, "unirect2d", &cmdInfo)) {
     722        Rappture::Unirect2d *u2dPtr;
     723        u2dPtr = new Rappture::Unirect2d(nComponents);
     724        if (u2dPtr->ParseBuffer(interp, buf) != TCL_OK) {
     725            delete u2dPtr;
    737726            return TCL_ERROR;
    738727        }
    739         cmdInfo.objClientData = (ClientData)dataPtr;   
    740         Tcl_SetCommandInfo(interp, "unirect2d", &cmdInfo);
    741         Tcl_Obj *objPtr;
    742         objPtr = Tcl_NewStringObj(buf.bytes(), buf.size());
    743         int result;
    744         Tcl_IncrRefCount(objPtr);
    745         result = Tcl_EvalObjEx(interp, objPtr, TCL_EVAL_GLOBAL|TCL_EVAL_DIRECT);
    746         Tcl_DecrRefCount(objPtr);
    747         if (result != TCL_OK) {
    748             delete dataPtr;
    749             return TCL_ERROR;
    750         }
    751         if (!dataPtr->isInitialized()) {
    752             delete dataPtr;
    753             return TCL_ERROR;
    754         }
    755         Rappture::Unirect3d *d3Ptr = new Rappture::Unirect3d(nComponents);
    756         d3Ptr->Convert(dataPtr);
    757         flowPtr->SetData(d3Ptr);
    758         delete dataPtr;
     728        Rappture::Unirect3d *dataPtr;
     729        dataPtr = new Rappture::Unirect3d(nComponents);
     730        dataPtr->Convert(u2dPtr);
     731        flowPtr->SetData(dataPtr);
     732        delete u2dPtr;
    759733    } else {
     734        fprintf(stderr, "header is %.14s\n", buf.bytes());
    760735        Rappture::Unirect3d *dataPtr;
    761 
    762         fprintf(stderr, "header is %.14s\n", buf.bytes());
    763736        dataPtr = new Rappture::Unirect3d(nComponents);
    764737        if (!dataPtr->ImportDx(result, nComponents, length, bytes)) {
     
    816789    if ((length > 4) && (strncmp(bytes, "<DX>", 4) == 0)) {
    817790        Rappture::Unirect3d *dataPtr;
    818 
    819791        dataPtr = new Rappture::Unirect3d(nComponents);
    820792        if (!dataPtr->ImportDx(result, nComponents, length - 4, bytes + 4)) {
     
    826798    } else if ((length > 10) && (strncmp(bytes, "unirect3d ", 10) == 0)) {
    827799        Rappture::Unirect3d *dataPtr;
    828         Tcl_CmdInfo cmdInfo;
    829 
    830         /* Set the clientdata field of the unirect3d command to contain
    831          * the local data structure. */
    832800        dataPtr = new Rappture::Unirect3d(nComponents);
    833         if (!Tcl_GetCommandInfo(interp, "unirect3d", &cmdInfo)) {
    834             return TCL_ERROR;
    835         }
    836         cmdInfo.objClientData = (ClientData)dataPtr;   
    837         Tcl_SetCommandInfo(interp, "unirect3d", &cmdInfo);
    838         Tcl_Obj *objPtr;
    839         objPtr = Tcl_NewStringObj(buf.bytes(), buf.size());
    840         int result;
    841         Tcl_IncrRefCount(objPtr);
    842         result = Tcl_EvalObjEx(interp, objPtr, TCL_EVAL_GLOBAL|TCL_EVAL_DIRECT);
    843         Tcl_DecrRefCount(objPtr);
    844         if (result != TCL_OK) {
     801        if (dataPtr->ParseBuffer(interp, buf) != TCL_OK) {
    845802            delete dataPtr;
    846803            return TCL_ERROR;
    847804        }
    848         if (!dataPtr->isInitialized()) {
    849             delete dataPtr;
    850             return TCL_ERROR;
    851         }
    852805        flowPtr->SetData(dataPtr);
    853806    } else if ((length > 10) && (strncmp(bytes, "unirect2d ", 10) == 0)) {
    854         Rappture::Unirect2d *dataPtr;
    855         Tcl_CmdInfo cmdInfo;
    856 
    857         /* Set the clientdata field of the unirect3d command to contain
    858          * the local data structure. */
    859         dataPtr = new Rappture::Unirect2d();
    860         if (!Tcl_GetCommandInfo(interp, "unirect2d", &cmdInfo)) {
     807        Rappture::Unirect2d *u2dPtr;
     808        u2dPtr = new Rappture::Unirect2d(nComponents);
     809        if (u2dPtr->ParseBuffer(interp, buf) != TCL_OK) {
     810            delete u2dPtr;
    861811            return TCL_ERROR;
    862812        }
    863         cmdInfo.objClientData = (ClientData)dataPtr;   
    864         Tcl_SetCommandInfo(interp, "unirect2d", &cmdInfo);
    865         Tcl_Obj *objPtr;
    866         objPtr = Tcl_NewStringObj(buf.bytes(), buf.size());
    867         int result;
    868         Tcl_IncrRefCount(objPtr);
    869         result = Tcl_EvalObjEx(interp, objPtr, TCL_EVAL_GLOBAL|TCL_EVAL_DIRECT);
    870         Tcl_DecrRefCount(objPtr);
    871         if (result != TCL_OK) {
    872             delete dataPtr;
    873             return TCL_ERROR;
    874         }
    875         if (!dataPtr->isInitialized()) {
    876             delete dataPtr;
    877             return TCL_ERROR;
    878         }
    879         Rappture::Unirect3d *d3Ptr = new Rappture::Unirect3d(nComponents);
    880         d3Ptr->Convert(dataPtr);
    881         flowPtr->SetData(d3Ptr);
    882         delete dataPtr;
     813        Rappture::Unirect3d *dataPtr;
     814        dataPtr = new Rappture::Unirect3d(nComponents);
     815        dataPtr->Convert(u2dPtr);
     816        flowPtr->SetData(dataPtr);
     817        delete u2dPtr;
    883818    } else {
     819        fprintf(stderr, "header is %.14s\n", buf.bytes());
    884820        Rappture::Unirect3d *dataPtr;
    885 
    886         fprintf(stderr, "header is %.14s\n", buf.bytes());
    887821        dataPtr = new Rappture::Unirect3d(nComponents);
    888822        if (!dataPtr->ImportDx(result, nComponents, length, bytes)) {
     
    1029963    }
    1030964    Tcl_SetHashValue(hPtr, flowPtr);
    1031     EventuallyRedraw(MAP_FLOWS);
    1032965    return TCL_OK;
    1033966}
     
    14171350        return TCL_ERROR;
    14181351    }
    1419     NanoVis::EventuallyRedraw(NanoVis::MAP_FLOWS);
     1352    NanoVis::EventuallyRedraw();
    14201353    return TCL_OK;
    14211354}
     
    14391372    }
    14401373    particlesPtr->Configure();
    1441     NanoVis::EventuallyRedraw(NanoVis::MAP_FLOWS);
     1374    NanoVis::EventuallyRedraw();
    14421375    Tcl_SetObjResult(interp, objv[3]);
    14431376    return TCL_OK;
     
    14751408        }
    14761409    }
    1477     NanoVis::EventuallyRedraw(NanoVis::MAP_FLOWS);
     1410    NanoVis::EventuallyRedraw();
    14781411    return TCL_OK;
    14791412}
     
    15601493        return TCL_ERROR;
    15611494    }
    1562     NanoVis::EventuallyRedraw(NanoVis::MAP_FLOWS);
     1495    NanoVis::EventuallyRedraw();
    15631496    Tcl_SetObjResult(interp, objv[3]);
    15641497    return TCL_OK;
     
    17491682    }
    17501683    Tcl_SetObjResult(interp, objv[2]);
    1751     NanoVis::EventuallyRedraw(NanoVis::MAP_FLOWS);
     1684    NanoVis::EventuallyRedraw();
    17521685    return TCL_OK;
    17531686}
     
    18311764    }
    18321765    int i;
     1766    NanoVis::AdvectFlows();
    18331767    for (i = 0; i < nSteps; i++) {
     1768        Trace("advect step=%d\n", i);
    18341769        NanoVis::licRenderer->convolve();
    18351770        NanoVis::AdvectFlows();
  • trunk/packages/vizservers/nanovis/FlowCmd.h

    r1458 r1469  
    3939
    4040    FlowParticles(const char *name, Tcl_HashEntry *hPtr);
    41     ~FlowParticles(void) {
    42         Rappture::FreeSwitches(_switches, &_sv, 0);
    43         if (_rendererPtr != NULL) {
    44             delete _rendererPtr;
    45         }
    46         if (_hashPtr != NULL) {
    47             Tcl_DeleteHashEntry(_hashPtr);
    48         }
    49     }
     41    ~FlowParticles(void);
    5042    void SetColor(FlowColor &color) {
    5143        _sv.color = color;
  • trunk/packages/vizservers/nanovis/NvParticleRenderer.cpp

    r1429 r1469  
    147147            index = i + psys_height*j;
    148148            particle = (rand() % 256) > 150;
    149             if(particle)
    150             {
     149            if(particle) {
    151150                //assign any location (x,y,z) in range [0,1]
    152                 switch (_slice_axis)
    153                 {
     151                switch (_slice_axis) {
    154152                case 0 :
    155                         p[4*index] = _slice_pos;
    156                         p[4*index+1]= j/float(psys_height);
    157                         p[4*index+2]= i/float(psys_width);
    158                         break;
     153                    p[4*index] = _slice_pos;
     154                    p[4*index+1]= j/float(psys_height);
     155                    p[4*index+2]= i/float(psys_width);
     156                    break;
    159157                case 1 :
    160                         p[4*index]= j/float(psys_height);
    161                         p[4*index+1] = _slice_pos;
    162                         p[4*index+2]= i/float(psys_width);
    163                         break;
     158                    p[4*index]= j/float(psys_height);
     159                    p[4*index+1] = _slice_pos;
     160                    p[4*index+2]= i/float(psys_width);
     161                    break;
    164162                case 2 :
    165                         p[4*index]= j/float(psys_height);
    166                         p[4*index+1]= i/float(psys_width);
    167                         p[4*index+2] = _slice_pos;
    168                         break;
     163                    p[4*index]= j/float(psys_height);
     164                    p[4*index+1]= i/float(psys_width);
     165                    p[4*index+2] = _slice_pos;
     166                    break;
    169167                default :
    170                         p[4*index] = 0;
    171                         p[4*index+1]= 0;
    172                         p[4*index+2]= 0;
    173                         p[4*index+3]= 0;
     168                    p[4*index] = 0;
     169                    p[4*index+1]= 0;
     170                    p[4*index+2]= 0;
     171                    p[4*index+3]= 0;
    174172                }
    175173               
    176174                //shorter life span, quicker iterations
    177175                p[4*index+3]= rand() / ((float) RAND_MAX) * 0.5  + 0.5f;
    178             }
    179             else
    180             {
     176            } else {
    181177                p[4*index] = 0;
    182178                p[4*index+1]= 0;
  • trunk/packages/vizservers/nanovis/Unirect.cpp

    r1462 r1469  
    3535    *stringPtr = p;
    3636    return line;
     37}
     38
     39int
     40Rappture::Unirect2d::ParseBuffer(Tcl_Interp *interp, Rappture::Buffer &buf)
     41{
     42    Tcl_Obj *objPtr;
     43    objPtr = Tcl_NewStringObj(buf.bytes(), buf.size());
     44    Tcl_Obj **objv;
     45    int objc;
     46    if (Tcl_ListObjGetElements(interp, objPtr, &objc, &objv) != TCL_OK) {
     47        return NULL;
     48    }
     49    int result;
     50    result = LoadData(interp, objc, objv);
     51    Tcl_DecrRefCount(objPtr);
     52    if ((result != TCL_OK) || (!isInitialized())) {
     53        return TCL_ERROR;
     54    }
     55    return TCL_OK;
     56}
     57
     58int
     59Rappture::Unirect3d::ParseBuffer(Tcl_Interp *interp, Rappture::Buffer &buf)
     60{
     61    Tcl_Obj *objPtr;
     62    objPtr = Tcl_NewStringObj(buf.bytes(), buf.size());
     63    Tcl_Obj **objv;
     64    int objc;
     65    if (Tcl_ListObjGetElements(interp, objPtr, &objc, &objv) != TCL_OK) {
     66        return NULL;
     67    }
     68    int result;
     69    result = LoadData(interp, objc, objv);
     70    Tcl_DecrRefCount(objPtr);
     71    if ((result != TCL_OK) || (!isInitialized())) {
     72        return TCL_ERROR;
     73    }
     74    return TCL_OK;
    3775}
    3876
  • trunk/packages/vizservers/nanovis/Unirect.h

    r1458 r1469  
    170170    }
    171171    int LoadData(Tcl_Interp *interp, int objc, Tcl_Obj *const *objv);
     172    int ParseBuffer(Tcl_Interp *interp, Rappture::Buffer &buf);
    172173
    173174    bool ImportDx(Rappture::Outcome &result, size_t nComponents,
     
    276277    }
    277278    int LoadData(Tcl_Interp *interp, int objc, Tcl_Obj *const *objv);
     279    int ParseBuffer(Tcl_Interp *interp, Rappture::Buffer &buf);
    278280    bool isInitialized(void) {
    279281        return _initialized;
Note: See TracChangeset for help on using the changeset viewer.