/****************************************************************************
 *   gtrig_adt.h : 
 *   		header file for triangle ADT.
 *
 *   Change Log :
 *		  Dec-22-1996 Initial version,  Liujian Qian
 *
 *   $Id: gadt_trig.h,v 1.3 1998/12/10 00:11:36 qian Exp $
 ***************************************************************************/
 
#ifndef _GTRIG_H_
#define _GTRIG_H_


/**
 * class GTrig
 *
 *	riangle class. It has three points (order of which is arbitray?)
 *
 */

class GTrig : public GSpatial
{
    Coord  coord[9]; 	//capcity for potential 3D triangles.
    
public:

    GTrig() {init();}
    GTrig(Coord xLow, Coord yLow, Coord xUp, Coord yUp);
    GTrig(const GTrig& other);
    GTrig& operator= (const GTrig& other);
    
    //====================================================
    //====
    //====  common methods
    //====
    //====================================================
  
    virtual GType 	 type	   (void) const { return _Triangle; }
    virtual uint32  	 getPSize  () const;

    virtual Result	 init	   (void) {for(int i=0; i<9; i++)
	                                   coord[i]=InvalidCoord; 
                                           return GOk;}
    virtual Result 	 input     (const char* in);
    virtual Result 	 output    (char*& out);
    virtual Result	 pack	   (DataPipe& p);
    virtual Result 	 unpack    (DataPipe& p);


    virtual Result 	 mbr	   (GRect& b) const;
    virtual int		 cmp	   (const GADT& other) const;
    virtual GADT* 	 clone	   () const {return new GTrig;}   

    virtual Result       scale      (double, double, double zf=1);
    virtual Result       translate  (double, double, double zf=1);
    virtual Result	 rotate	   (double, bool);
    virtual Result	 transform  (const GMatrix&);

    virtual int 	 covers     (const GSpatial&) const {return 0;}
    virtual int		 intersects (const GSpatial&) const {return 0;}
    
    inline void   set(const GPoint&, const GPoint&, const GPoint&);    
    inline float  area() const;
    inline float  perimeter() const;
    bool   	  equals (GTrig& other) const;
    void   	  centroid(int& x, int& y);

    virtual int  covers    (const GADT& a) const;
    virtual int  intersects(const GADT& a) const;

private:    
    inline int   _covers(const GRect& a) const;
    inline int   _covers(const GPoint& p) const;
    inline int   _covers(const GSegment& seg) const;
    inline int   _covers(const GArc& arc) const;
    inline int   _covers(const GPolygon& pgn) const;

    inline int   _intersects(const GRect& a) const;
    inline int   _intersects(const GCircle& a) const;
    inline int   _intersects(const GArc& arc) const;
    inline int	 _intersects(const GSegment& seg) const;
    inline int   _intersects(const GPolygon& pgn) const;

    friend ostream& operator << (ostream& s, const GTrig& t);    

}; //class GTrig
    

#endif




Documentation generated by lqian@lqian-sun on Wed Jul 14 09:36:10 EDT 1999