Main Page   Class Hierarchy   Compound List   File List   Compound Members  

hnurbsS_sp.h

00001 /*=============================================================================
00002         File: hnurbsS_sp.h
00003      Purpose:       
00004     Revision: $Id: hnurbsS_sp.h,v 1.2 2002/05/13 21:07:46 philosophil Exp $
00005   Created by: Philippe Lavoie          (14 May, 1998)
00006  Modified by: 
00007 
00008  Copyright notice:
00009           Copyright (C) 1996-1997 Philippe Lavoie
00010  
00011           This library is free software; you can redistribute it and/or
00012           modify it under the terms of the GNU Library General Public
00013           License as published by the Free Software Foundation; either
00014           version 2 of the License, or (at your option) any later version.
00015  
00016           This library is distributed in the hope that it will be useful,
00017           but WITHOUT ANY WARRANTY; without even the implied warranty of
00018           MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
00019           Library General Public License for more details.
00020  
00021           You should have received a copy of the GNU Library General Public
00022           License along with this library; if not, write to the Free
00023           Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
00024 =============================================================================*/
00025 #ifndef _nurbs_hnurbsS_sp_h_
00026 #define _nurbs_hnurbsS_sp_h_
00027 
00028 #include "hnurbsS.h"
00029 
00032 namespace PLib {
00033 
00046 template <class T, int N>
00047 class HNurbsSurfaceSP : public HNurbsSurface<T,N>{
00048 public:
00049   HNurbsSurfaceSP() ; 
00050   HNurbsSurfaceSP(const NurbsSurface<T,N>& S) ; 
00051   HNurbsSurfaceSP(const HNurbsSurface<T,N>& S) ;
00052   HNurbsSurfaceSP(const HNurbsSurfaceSP<T,N>& S) ;
00053   HNurbsSurfaceSP(HNurbsSurface<T,N>* base) ;
00054   HNurbsSurfaceSP(HNurbsSurface<T,N>* base, const Vector<T>& xU, const Vector<T>& xV) ;
00055   HNurbsSurfaceSP(HNurbsSurface<T,N>* base, const HNurbsSurface<T,N> &surf) ;
00056 
00057   virtual void resizeKeep(int Pu, int Pv, int DegU, int DegV) ;
00058   
00059   virtual void refineKnots(const Vector<T>& nU, const Vector<T>& nV) ;
00060   virtual void refineKnotU(const Vector<T>& X);
00061   virtual void refineKnotV(const Vector<T>& X);
00062   
00063   virtual void mergeKnots(const Vector<T>& nU, const Vector<T>& nV) ;
00064   virtual void mergeKnotU(const Vector<T>& X);
00065   virtual void mergeKnotV(const Vector<T>& X);
00066 
00067   virtual void updateSurface(int i0=-1, int j0=-1) ;  
00068   virtual void updateLevels(int updateLevel=-1) ;
00069 
00070   virtual HNurbsSurfaceSP<T,N>* addLevel(int nsplit, int s=1) ;
00071   virtual HNurbsSurfaceSP<T,N>* addLevel() ;
00072 
00073   virtual void copy(const HNurbsSurface<T,N>& nS) ;
00074 
00075   virtual int read(ifstream &fin) ;
00076   
00077 
00078   void modSurfCPby(int i, int j, const HPoint_nD<T,N>& a) ;
00079   void modOnlySurfCPby(int i, int j, const HPoint_nD<T,N>& a) ;
00080 
00081   T maxAtUV(int i, int j) const { return maxAtU_[i]*maxAtV_[j] ; }
00082   T maxAtU(int i) const { return maxAtU_[i] ; }
00083   T maxAtV(int i) const { return maxAtV_[i] ; }
00084 
00085   HPoint_nD<T,N> surfP(int i,int j) const 
00086     { return hpointAt(maxAtU_[i],maxAtV_[j]); }
00087 
00088   HPoint_nD<T,N> surfP(int i,int j, int lod) const
00089     { return hpointAt(maxAtU_[i],maxAtV_[j],lod) ; }
00090 
00091   void updateMaxUV() 
00092     { updateMaxU() ; updateMaxV() ; }
00093   void updateMaxU() ;
00094   void updateMaxV() ;
00095 
00096   int okMax() { return (maxU.n()<=1)?0:1 ; }
00097 
00098 protected:
00099 
00100   Vector<T> maxU,maxV ;
00101   Vector<T> maxAtU_,maxAtV_ ;
00102 };
00103 
00104 typedef HNurbsSurfaceSP<float,3> HNurbsSurfaceSPf ;
00105 typedef HNurbsSurfaceSP<double,3> HNurbsSurfaceSPd ;
00106 
00107 template <class T, int N>
00108 inline HNurbsSurfaceSP<T,N>::HNurbsSurfaceSP() : HNurbsSurface<T,N>() { 
00109   ;
00110 }
00111 
00112 template <class T, int N>
00113 inline HNurbsSurfaceSP<T,N>::HNurbsSurfaceSP(const NurbsSurface<T,N>& nS)  : HNurbsSurface<T,N>(nS) { 
00114   updateMaxUV() ; 
00115 }
00116 
00117 template <class T, int N>
00118 inline HNurbsSurfaceSP<T,N>::HNurbsSurfaceSP(HNurbsSurface<T,N>* base): HNurbsSurface<T,N>(base) {
00119   updateMaxUV() ; 
00120 }
00121 
00122 template <class T, int N>
00123 inline HNurbsSurfaceSP<T,N>::HNurbsSurfaceSP(HNurbsSurface<T,N>* base, const Vector<T>& xU, const Vector<T>& xV) : HNurbsSurface<T,N>(base,xU,xV) {
00124   updateMaxUV() ;
00125 }
00126 
00127 template <class T, int N>
00128 inline HNurbsSurfaceSP<T,N>::HNurbsSurfaceSP(const HNurbsSurface<T,N>& S) : HNurbsSurface<T,N>() {
00129   copy(S) ;
00130 }
00131 
00132 template <class T, int N>
00133 inline HNurbsSurfaceSP<T,N>::HNurbsSurfaceSP(const HNurbsSurfaceSP<T,N>& S) : HNurbsSurface<T,N>() {
00134   copy(S) ;
00135 }
00136 
00137 template <class T, int N>
00138 inline HNurbsSurfaceSP<T,N>::HNurbsSurfaceSP(HNurbsSurface<T,N>* base, const HNurbsSurface<T,N> &surf):
00139   HNurbsSurface<T,N>(base)
00140 {
00141   copy(surf) ;
00142   updateMaxUV() ;
00143 }
00144 
00145 
00146 template <class T, int N>
00147 inline void 
00148 HNurbsSurfaceSP<T,N>::resizeKeep(int Pu, int Pv, int DegU, int DegV) { 
00149   HNurbsSurface<T,N>::resizeKeep(Pu,Pv,DegU,DegV) ; 
00150   updateMaxUV() ; 
00151 }
00152 
00153 template <class T, int N>
00154 inline void 
00155 HNurbsSurfaceSP<T,N>::refineKnots(const Vector<T>& nU, const Vector<T>& nV) {
00156   HNurbsSurface<T,N>::refineKnots(nU,nV) ;
00157   updateMaxUV() ;
00158 }
00159   
00160 template <class T, int N>
00161 inline void 
00162 HNurbsSurfaceSP<T,N>::refineKnotU(const Vector<T>& X){
00163   HNurbsSurface<T,N>::refineKnotU(X) ;
00164   updateMaxU() ;
00165 }
00166 
00167 template <class T, int N>
00168 inline void 
00169 HNurbsSurfaceSP<T,N>::refineKnotV(const Vector<T>& X){
00170   HNurbsSurface<T,N>::refineKnotV(X) ;
00171   updateMaxV() ;
00172 }
00173 
00174   
00175 template <class T, int N>
00176 inline void 
00177 HNurbsSurfaceSP<T,N>::mergeKnots(const Vector<T>& nU, const Vector<T>& nV) {
00178   HNurbsSurface<T,N>::mergeKnots(nU,nV) ;
00179   updateMaxUV() ;
00180 }
00181 
00182 
00183 template <class T, int N>
00184 inline void 
00185 HNurbsSurfaceSP<T,N>::mergeKnotU(const Vector<T>& X){
00186   HNurbsSurface<T,N>::mergeKnotU(X) ;
00187   updateMaxU() ;
00188 }
00189 
00190 
00191 template <class T, int N>
00192 inline void 
00193 HNurbsSurfaceSP<T,N>::mergeKnotV(const Vector<T>& X){
00194   HNurbsSurface<T,N>::mergeKnotV(X) ;
00195   updateMaxV() ;
00196 }
00197 
00198 } // end namespace
00199 
00200 typedef PLib::HNurbsSurfaceSP<float,3> PlHNurbsSurfaceSPf ;
00201 typedef PLib::HNurbsSurfaceSP<double,3> PlHNurbsSurfaceSPd ;
00202 
00203 
00204 
00205 #endif

Generated on Tue Jun 24 13:26:55 2003 for NURBS++ by doxygen1.2.14 written by Dimitri van Heesch, © 1997-2002