NurbsSurface.h

Go to the documentation of this file.
00001 /* $Id: NurbsSurface.h,v 1.1.1.1 2002/07/01 14:44:18 cvs Exp $ */
00002 
00003 #ifndef __NURBS_SURFACE_H
00004 #define __NURBS_SURFACE_H
00005 
00006 #include <opennurbs.h>
00007 #include <esg/Definitions.h>
00008 #include <esg/geometry/Geometry.h>
00009 #include <esg/geometry/Surface.h>
00010 #include <esg/Intersector.h>
00011 #include <esg/AutoPtr.h>
00012 #include <esg/spacesorting/SDS.h>
00013 
00014 namespace esg {
00015 
00025 class NurbsSurface : public Geometry {
00026 protected:
00027     Surface * _pSurface;    
00028     
00029 protected:
00030     void _triangulate_surface (const ON_NurbsSurface&,
00031                                const SDS&,
00032                                AutoPtr<Intersector>*);
00033 
00034     virtual Mesh* _mesh                 (int /* density */) const;
00035     virtual void  _duplicate_attributes (const Geometry& src);
00036 
00037     // Geometric transformations
00038     virtual void _rotateX   (float /* angle */);
00039     virtual void _rotateY   (float /* angle */);
00040     virtual void _rotateZ   (float /* angle */);
00041     virtual void _rotate    (float /* angle */, const Vector3& /* axis */);
00042     virtual void _rotate    (const Matrix3&);
00043     virtual void _translate (float /* x */, float /* y */, float /* z */);
00044     virtual void _transform (const Matrix4&);
00045     virtual void _scale     (float);
00046     
00047     NurbsSurface () {}
00048     
00049 public:
00050 
00063         NurbsSurface (const SDS&            ss,
00064                       AutoPtr<Intersector>* it,
00065                       int                   dimension,
00066                       bool                  ratinal,
00067                       int                   order0,
00068                       int                   order1,
00069                       int                   count0,
00070                       int                   count1);
00071 
00079         NurbsSurface(const SDS&             ss,
00080                      AutoPtr<Intersector>*  it,
00081                      const ON_NurbsSurface& sp);
00082 
00086         virtual ~NurbsSurface ();
00087 
00088         virtual void rayIntersection (PointEnv*      pPE,
00089                                       int            mask,
00090                                       const Vector3& origin,
00091                                       const Vector3& direction,
00092                                       float          maxD = MAXFLOAT);
00093 
00094         virtual bool mapToUV (const Vector3& v, Vector2& uv);
00095         
00096         virtual void randomSample (int mask, PointEnv& pe, double* pdf) {
00097             if (_pSurface) _pSurface->randomSample(mask, pe, pdf);
00098             else pe.mask = ENV_HAVE_NOTHING;
00099         }
00100 
00101         virtual bool randomDirection (const Vector3& pov,
00102                                       Vector3&       dir,
00103                                       double*        pdf) {
00104             return ((_pSurface) ?
00105                     _pSurface->randomDirection(pov,dir,pdf) :
00106                     false);
00107         }
00108 
00109         virtual Interval extent (const Vector3& direction) const;
00110 
00111         virtual Vector3 centroid (void) const;
00112 
00113         virtual double radius (void) const;
00114 
00115         virtual double radius (const Vector3& centroid) const;
00116 
00117         virtual Geometry* clone (const Matrix4* pTrMat) const;
00118 
00119         virtual bool separation (Geometry& geom, Vector3*  pDir) {
00120             return false; // TO DO
00121         }
00122 
00123         virtual double distance (const Geometry& geom, Vector3* pDir) {
00124             return DBL_MIN; // TO DO
00125         }
00126 
00127         virtual void dump (const char* intent, const char* tab);
00128 };
00129 
00130 }; // namespace
00131 
00132 #endif // __NURBS_SURFACE_H

Generated on Wed Jun 28 12:24:28 2006 for esg by  doxygen 1.4.6