Main Page | Class Hierarchy | Class List | File List | Class 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 Fri Aug 13 11:03:45 2004 for NURBS++ by doxygen 1.3.7