00001 /* 00002 ** --------------------------------------------------------------- 00003 ** quad.h - Quadrilateral primitive class definition. 00004 ** 00005 ** --------------------------------------------------------------- 00006 */ 00007 00008 #ifndef _QUAD_H 00009 #define _QUAD_H 00010 00037 /* 00038 ** --------------------------------------------------------------- 00039 ** Used global definitions: 00040 ** 00041 */ 00042 #include <stdio.h> /* FILE */ 00043 #include "prm.h" 00044 00045 00046 class Quad : public Prm 00047 { 00048 protected: 00049 /* 00050 ** --------------------------------------------------------------- 00051 ** Protected data type definitions: 00052 */ 00053 00056 struct Pnt3d { 00058 double x; 00060 double y; 00062 double z; 00063 }; 00064 00067 struct Vec3d { 00069 double x; 00071 double y; 00073 double z; 00074 }; 00075 00076 /* 00077 ** --------------------------------------------------------------- 00078 ** Protected object private attributes: 00079 ** 00080 */ 00083 Coord p[4]; 00084 00085 public: 00086 /* 00087 ** --------------------------------------------------------------- 00088 ** Public constructor and destructor functions: 00089 ** 00090 */ 00091 /* --------------------------------------------------------------- */ 00117 Quad( ); 00118 00119 /* --------------------------------------------------------------- */ 00131 Quad( int back ); 00132 00133 /* --------------------------------------------------------------- */ 00142 virtual ~Quad( ); 00143 00144 protected: 00145 /* 00146 ** --------------------------------------------------------------- 00147 ** Protected class functions: 00148 ** 00149 */ 00150 /* --------------------------------------------------------------- */ 00163 static void PickCode( double x, double y, double xmin, double xmax, 00164 double ymin, double ymax, int cod[4] ); 00165 00166 /* --------------------------------------------------------------- */ 00185 static int PickLine( double x, double y, double pick_tol, 00186 double x0, double y0, double x1, double y1 ); 00187 00188 /* --------------------------------------------------------------- */ 00199 static void FaceNormal( Pnt3d* p0, Pnt3d* p1, Pnt3d* p2, Pnt3d* p3, 00200 Vec3d* normal ); 00201 00202 /* 00203 ** --------------------------------------------------------------- 00204 ** Protected instance (object) functions: 00205 ** 00206 */ 00207 /* --------------------------------------------------------------- */ 00218 void BuildSolidPrm( Pnt3d* solid_prm ); 00219 00220 public: 00221 /* 00222 ** --------------------------------------------------------------- 00223 ** Public instance (object) functions 00224 ** (implemented in the derived class): 00225 ** 00226 */ 00227 /* --------------------------------------------------------------- */ 00235 void Read( FILE* fd ); 00236 00237 /* --------------------------------------------------------------- */ 00244 void Write( FILE* fd ); 00245 00246 /* --------------------------------------------------------------- */ 00254 int GetNPts( void ); 00255 00256 /* --------------------------------------------------------------- */ 00280 void SetCoords( int id, double x, double y ); 00281 00282 /* --------------------------------------------------------------- */ 00305 void GetCoords( int id, double* x, double* y ); 00306 00307 /* --------------------------------------------------------------- */ 00336 void Set1stPt( double x, double y ); 00337 00338 /* --------------------------------------------------------------- */ 00367 void Set2ndPt( double x, double y ); 00368 00369 /* --------------------------------------------------------------- */ 00389 int PickArea( double x, double y ); 00390 00391 /* --------------------------------------------------------------- */ 00423 int PickVertex( double x, double y, double tol, int* id ); 00424 00425 /* --------------------------------------------------------------- */ 00456 int PickSide( double x, double y, double tol, int* id ); 00457 00458 /* --------------------------------------------------------------- */ 00466 void Translate( double dx, double dy ); 00467 00468 /* --------------------------------------------------------------- */ 00490 void TranslateVertex( int id, double dx, double dy ); 00491 00492 /* --------------------------------------------------------------- */ 00517 void TranslateSide( int id, double dx, double dy ); 00518 00519 /* --------------------------------------------------------------- */ 00530 void GetBox( double* xmin, double* xmax, 00531 double* ymin, double* ymax ); 00532 00533 /* --------------------------------------------------------------- */ 00547 void DisplayBoundary( void ); 00548 00549 /* --------------------------------------------------------------- */ 00561 void DisplayInterior( void ); 00562 00563 /* --------------------------------------------------------------- */ 00575 void DisplaySolid( void ); 00576 00577 /* --------------------------------------------------------------- */ 00589 void HighltSolid( void ); 00590 00591 /* --------------------------------------------------------------- */ 00602 void DisplayZbuffer( void ); 00603 00604 }; 00605 00608 #endif
1.4.2-20050421