// Copyright (c) 1999 Philip A. Hardin (pahardin@cs.utexas.edu)
// This program is free software; you can redistribute it and/or modify
// it under the terms of the GNU General Public License v2 or later.


#ifndef SHDREGION3D_h
#define SHDREGION3D_h


#include "general.h"
#include "xregion3d.h"


/************************************************************************/
struct shdRegion3d : xregion3d {
 private:
  xregion3d *shadow;

 public:
        shdRegion3d(xregion3d *shdw=NULL,
		    BSP_TREE_TYPE tt=BSP_TREE_VISIBILITY) :
          xregion3d(tt),
          shadow(shdw) {};

        shdRegion3d(coord *srcPts, int *srcPanelData, coord sc=1.0,
		    xregion3d *shdw=NULL,
		    BSP_TREE_TYPE tt=BSP_TREE_VISIBILITY) :
          xregion3d(srcPts,srcPanelData,sc,tt),
          shadow(shdw) {};

        shdRegion3d(coord *srcPts, int *srcPanelData, const pt3d& sc,
		    xregion3d *shdw=NULL,
		    BSP_TREE_TYPE tt=BSP_TREE_VISIBILITY) :
          xregion3d(srcPts,srcPanelData,sc,tt),
          shadow(shdw) {};

        shdRegion3d(pt3d  *srcPts, int *srcPanelData, const pt3d& sc=pt3d(1,1,1),
		    xregion3d *shdw=NULL,
		    BSP_TREE_TYPE tt=BSP_TREE_VISIBILITY) :
          xregion3d(srcPts,srcPanelData,sc,tt),
          shadow(shdw) {};

        shdRegion3d(BSP *tree,
		    xregion3d *shdw=NULL,
		    BSP_TREE_TYPE tt=BSP_TREE_VISIBILITY,
		    bool wantCopy=true, bool wantEdges=true) :
          xregion3d(tree,tt,wantCopy,wantEdges),
          shadow(shdw) {};

  // default copy ctor and default assignment op are adequate

  xregion3d*& Shadow() {return shadow;}
};


void InitMorphRegion3ds(shdRegion3d rgns[], int numRgns,
                        shdRegion3d::coord *firstPts,
			shdRegion3d::coord firstScale,
                        shdRegion3d::coord *lastPts,
			shdRegion3d::coord lastScale, int *panels,
                        bool exactFirst, bool exactLast);

#endif
