Ignore:
Timestamp:
Apr 16, 2013, 12:52:20 AM (11 years ago)
Author:
ldelgass
Message:

Nanovis refactoring to fix problems with scaling and multiple results.
Do rendering in world space to properly place and scale multiple data sets.
Also fix flows to reduce resets of animations. More work toward removing
Cg dependency. Fix panning to convert viewport coords to world coords.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/packages/vizservers/nanovis/Flow.h

    r3613 r3630  
    2525#include "FlowBox.h"
    2626#include "LIC.h"
     27#include "VelocityArrowsSlice.h"
    2728#include "Unirect.h"
    2829#include "Volume.h"
     
    5051{
    5152public:
    52     enum SliceAxis { AXIS_X, AXIS_Y, AXIS_Z };
    53 
    5453    Flow(Tcl_Interp *interp, const char *name);
    5554
     
    8483    void getBoxNames(std::vector<std::string>& names);
    8584
    86     float *getScaledVector();
    87 
    88     Volume *makeVolume(float *data);
    89 
    9085    bool scaleVectorField();
    9186
     
    117112        _data = data;
    118113    }
     114
     115    FlowSliceAxis getAxis()
     116    {
     117        return _sv.slicePos.axis;
     118    }
     119
     120    TransferFunction *getTransferFunction()
     121    {
     122        return _sv.transferFunction;
     123    }
    119124#if 0
    120     void activateSlice()
    121     {
    122         /* Must set axis before offset or position goes to wrong axis. */
    123         NanoVis::licRenderer->setAxis(_sv.slicePos.axis);
    124         NanoVis::licRenderer->setOffset(_sv.slicePos.value);
    125         NanoVis::licRenderer->active(true);
    126     }
    127 
    128     void deactivateSlice()
    129     {
    130         NanoVis::licRenderer->active(false);
     125    void setAxis(FlowSliceAxis axis)
     126    {
     127        _sv.slicePos.axis = axis;
     128        if (NanoVis::licRenderer != NULL) {
     129            NanoVis::licRenderer->setSliceAxis(_sv.slicePos.axis);
     130        }
     131        if (NanoVis::velocityArrowsSlice != NULL) {
     132            NanoVis::velocityArrowsSlice->setSliceAxis(_sv.slicePos.axis);
     133        }
     134    }
     135
     136    void setCurrentPosition(float position)
     137    {
     138        _sv.slicePos.value = position;
     139        if (NanoVis::licRenderer != NULL) {
     140            NanoVis::licRenderer->setSlicePosition(_sv.slicePos.value);
     141        }
     142        if (NanoVis::velocityArrowsSlice != NULL) {
     143            NanoVis::velocityArrowsSlice->setSlicePosition(_sv.slicePos.value);
     144        }
     145    }
     146
     147    void setLICActive(bool state)
     148    {
     149        _sv.sliceVisible = state;
     150        if (NanoVis::licRenderer != NULL) {
     151            NanoVis::licRenderer->setVectorField(_volume);
     152            NanoVis::licRenderer->setSliceAxis(_sv.slicePos.axis);
     153            NanoVis::licRenderer->setSlicePosition(_sv.slicePos.value);
     154            NanoVis::licRenderer->visible(state);
     155        }
     156    }
     157
     158    void setArrowsActive(bool state)
     159        _sv.showArrows = state;
     160        if (NanoVis::velocityArrowsSlice != NULL) {
     161            NanoVis::velocityArrowsSlice->setVectorField(_volume);
     162            NanoVis::velocityArrowsSlice->setSliceAxis(_sv.slicePos.axis);
     163            NanoVis::velocityArrowsSlice->setSlicePosition(_sv.slicePos.value);
     164            NanoVis::velocityArrowsSlice->visible(_sv.showArrows);
     165        }
    131166    }
    132167#endif
    133     SliceAxis getAxis()
    134     {
    135         return (SliceAxis)_sv.slicePos.axis;
    136     }
    137 
    138     TransferFunction *getTransferFunction()
    139     {
    140         return _sv.transferFunction;
    141     }
    142 
    143     float getRelativePosition();
    144 
    145     void setAxis()
    146     {
    147         NanoVis::licRenderer->setAxis(_sv.slicePos.axis);
    148     }
    149 
    150     void setAxis(Flow::SliceAxis axis)
    151     {
    152         _sv.slicePos.axis = axis;
    153         NanoVis::licRenderer->setAxis(_sv.slicePos.axis);
    154     }
    155 
    156     void setCurrentPosition(float position)
    157     {
    158         _sv.slicePos.value = position;
    159         NanoVis::licRenderer->setOffset(_sv.slicePos.value);
    160     }
    161 
    162     void setCurrentPosition()
    163     {
    164         NanoVis::licRenderer->setOffset(_sv.slicePos.value);
    165     }
    166 
    167     void setActive(bool state)
    168     {
    169         _sv.sliceVisible = state;
    170         NanoVis::licRenderer->active(state);
    171     }
    172 
    173     void setActive()
    174     {
    175         NanoVis::licRenderer->active(_sv.sliceVisible);
    176     }
    177 
    178168    const Volume *getVolume() const
    179169    {
     
    190180    }
    191181
     182    bool configure();
     183
    192184    Tcl_Command getCommandToken()
    193185    {
     
    195187    }
    196188
    197     static float getRelativePosition(FlowPosition *pos);
     189    float getRelativePosition(FlowPosition *pos);
     190
     191    static bool updatePending;
     192    static double magMin, magMax;
    198193
    199194private:
     
    203198    typedef std::tr1::unordered_map<BoxId, FlowBox *> BoxHashmap;
    204199
    205     void configure();
     200    float *getScaledVector();
     201
     202    Volume *makeVolume(float *data);
    206203
    207204    void renderBoxes();
Note: See TracChangeset for help on using the changeset viewer.