#ifndef _BOUNDSVIS_H
#define _BOUNDSVIS_H
#include "visman.h"
#include "bounds3d.h"
#include "boundslog.h"

class BoundsWhereLeftVis : public Vis {
  const LogEntry *_start;
public:
  BoundsWhereLeftVis (const Vis *parent, const LogEntry *someevent);

  void Display (const LogEntry *upto) const;

  char * StatusLine (const LogEntry *entry) const;

  const LogEntry *GetStartEntry (void) const {return _start;}
  int IsOurs (const LogEntry *en) const {return (en->_event == BoundsWhereLeft_Face_Project || IsStartEvent (en) || IsEndEvent (en));}
  int IsStartEvent (const LogEntry *en) const {return (en->_event == BoundsWhereLeft_Start);}
  int IsEndEvent (const LogEntry *en) const {return (en->_event == BoundsWhereLeft_End);}
};

class BoundsIncludesPtVis : public Vis {
protected:
  const LogEntry *_start;
public:
  BoundsIncludesPtVis (const Vis *parent, const LogEntry *someevent);

  void Display (const LogEntry *upto) const ;

  char * StatusLine (const LogEntry *entry) const ;

  const LogEntry *GetStartEntry (void) const {return _start;}
  int IsOurs (const LogEntry *en) const {return ((en->_event == BoundsIncludesPt_Face_Check) || IsStartEvent (en));}
  int IsStartEvent (const LogEntry *en) const {return (en->_event == BoundsIncludesPt_Start);}
  int IsEndEvent (const LogEntry *en) const ;
};

class BoundsWhereEnteredVis : public Vis {
  const LogEntry *_start;
public:
  BoundsWhereEnteredVis (const Vis *parent, const LogEntry *someevent);

  void Display (const LogEntry *upto) const;

  char * StatusLine (const LogEntry *entry) const;

  const LogEntry *GetStartEntry (void) const {return _start;}

  int IsOurs (const LogEntry *en) const {return (en->_event == BoundsWhereEntered_Face_Project || IsStartEvent (en) || IsEndEvent (en));}
  int IsStartEvent (const LogEntry *en) const {return (en->_event == BoundsWhereEntered_Start);}
  int IsEndEvent (const LogEntry *en) const {return (en->_event == BoundsWhereEntered_End);}
};


#endif
