Window2D Member Functions

(created by Eric)
 
 

void Register(int i, GUI *g)

purpose:
Called after constructor to register the id of the Window2D & the
parent_gui pointer.  Would be in constructor, but we didn't know how
to alter the arguments to the constructor

parameters:
i is the id of the window, corresponding to the axis perpendicular to
the window (X = 0, Y = 1, Z = 2); g is the GUI that contains the window

post:
internal data members x and y are set, that map the x and y directions
of this window (right and up directions respectively) to directions
in the voxel data set;
id and parent_gui are initialized;
registered == 1
 
 

void InitSlice(void)
 

purpose:
called by gui when vox_data loads new data - Window2D must allocate its
slice buffers and slice parameters to match vox_data, & set up a default
view

pre:
Window2D has been registered with gui;
vox_data global has valid voxel data

post:
slice_width & slice height match dimensions of data in vox_data;
a padding of extra rows and columns is computed for textures without
power-of-two dimensions;
the slice buffers used are allocated
slice_num == -1, so that first draw will load vox slices;
init_slice == 1
 

void ResetView(void)

ResetView()

purpose:
slice texture will be fit to viewport on next draw()
 
pre:
Register() and InitSlice() have been called

post:
view_pos is set to the center of the slice textures;
view_zoom is set so texture spans one of the viewport dimensions
 
 

void MakeSegTextureCurrent(void)

purpose:
reloads the segmentation slice at the current slice number; used whenever
the seg slice has possibly become out of date, i.e., when the rgb of
a color index is changed, or a user has painted in one of the windows.

pre:
Register() and InitSlice() have been called
vox data has data with extents matching this window's width and height
 
post:
segmentation slice texture contains the voxel data set cross-section
in direction 'id', and section number 'slice_num'
 
 
 

int  CachedPolygon(void)

purpose:
returns the cached_polygon flag of the polygon_drawing object

post:
return value is 1 if polygon_drawing has a cached polygon, 0 otherwise
 
 
 

void AcceptPolygon(void)

purpose:
the gui calls this when the user presses the accept polygon button; this
means the polygon that was being edited will be rasterized into the voxel
data set according to the current drawing color and painting mode

pre:
Register() and InitSlice() have been called
vox data has data with extents matching this window's width and height

post:
if drawing lock held and polygon_drawing state was EDITING_STATE,
  voxels interior to polygon and "writable" are set with the current drawing
  color obtained from global_state->GetDrawingColor(); the three coverage
  modes determine which voxels inside the polygon are written over:
  PAINT_OVER_ALL:    all voxels
  PAINT_OVER_COLORS: all voxels that aren't labeled clear
  PAINT_OVER_ONE:    all voxels of the color obtained from
                     global_state->GetOverWriteColor()
  drawing lock released and polygon_drawing state is INACTIVE_STATE
else state not changed.
 
 

 
void PastePolygon(void)

purpose:
brings the last drawn polygon back for reuse

pre:
Register() and InitSlice() have been called

post:
if polygon_drawing state previously INACTIVE_STATE, drawing lock
obtainable, & polygon_drawing has a cached polygon,
  cached polygon becomes the edited polygon,
  polygon_drawing state is EDITING_STATE
  drawing lock is held
else state does not change
 
 

void draw(void)

purpose:
draw() overrided the draw() of the Fl_Gl_Window; called when
window issues a redraw(), is shown or uncovered.

post:
if InitSlice() has been called,
  grey and seg slice textures, the crosshairs, & the polygon contour being
  drawn (if one exists) are displayed,
else the screen is cleared
 
 

void handle(int event)

purpose:
this handle() overrides the handle() of Fl_Gl_Window

post:
if InitSlice() has been called,
   results depend on global_state->GetToolbarMode():
   NAVIGATION MODE:
   left drag shifts the textures; right drag up and down scales the textures
   POLYGON DRAWING MODE:
   all events forwarded to polygon_drawing object
   CROSSHAIRS MODE:
   left click or drag places the crosshairs at the mouse cursor position;
   any other mode has no effect
else no change in state
if event is used, 1 is returned, else 0