Main Page | Class Hierarchy | Class List | File List | Class Members

Spline.h

00001 /**************************************************************************\ 00002 * 00003 * FILE: Spline.h 00004 * 00005 * This source file is part of DIME. 00006 * Copyright (C) 1998-1999 by Systems In Motion. All rights reserved. 00007 * 00008 * This library is free software; you can redistribute it and/or modify it 00009 * under the terms of the GNU General Public License, version 2, as 00010 * published by the Free Software Foundation. 00011 * 00012 * This library is distributed in the hope that it will be useful, but 00013 * WITHOUT ANY WARRANTY; without even the implied warranty of 00014 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 00015 * General Public License (the accompanying file named COPYING) for more 00016 * details. 00017 * 00018 ************************************************************************** 00019 * 00020 * If you need DIME for a non-GPL project, contact Systems In Motion 00021 * to acquire a Professional Edition License: 00022 * 00023 * Systems In Motion http://www.sim.no/ 00024 * Prof. Brochs gate 6 sales@sim.no 00025 * N-7030 Trondheim Voice: +47 22114160 00026 * NORWAY Fax: +47 67172912 00027 * 00028 \**************************************************************************/ 00029 00030 #ifndef DIME_SPLINE_H 00031 #define DIME_SPLINE_H 00032 00033 #include <dime/entities/ExtrusionEntity.h> 00034 #include <assert.h> 00035 00036 class DIME_DLL_API dimeSpline : public dimeEntity 00037 { 00038 public: 00039 dimeSpline(); 00040 virtual ~dimeSpline(); 00041 00042 enum Flags { 00043 CLOSED = 0x01, 00044 PERIODIC = 0x02, 00045 RATIONAL = 0x04, 00046 PLANAR = 0x08, 00047 LINEAR = 0x10 00048 }; 00049 00050 bool hasWeights() const; 00051 00052 int16 getFlags() const; 00053 void setFlags(const int16 flags); 00054 00055 int16 getDegree() const; 00056 void setDegree(const int16 degree); 00057 00058 dxfdouble getControlPointTolerance() const; 00059 void setControlPointTolerance(const dxfdouble tol); 00060 dxfdouble getFitPointTolerance() const; 00061 void setFitPointTolerance(const dxfdouble tol); 00062 dxfdouble getKnotTolerance() const; 00063 void setKnotTolerance(const dxfdouble tol); 00064 00065 int getNumKnots() const; 00066 dxfdouble getKnotValue(const int idx) const; 00067 void setKnotValue(const int idx, const dxfdouble value); 00068 void setKnotValues(const dxfdouble * const values, const int numvalues, 00069 dimeMemHandler * const memhandler = NULL); 00070 00071 int getNumControlPoints() const; 00072 const dimeVec3f &getControlPoint(const int idx) const; 00073 void setControlPoint(const int idx, const dimeVec3f &v); 00074 void setControlPoints(const dimeVec3f * const pts, const int numpts, 00075 dimeMemHandler * const memhandler = NULL); 00076 00077 int getNumWeights() const; 00078 dxfdouble getWeight(const int idx) const; 00079 void setWeight(const int idx, const dxfdouble w, 00080 dimeMemHandler * const memhandler = NULL); 00081 00082 int getNumFitPoints() const; 00083 const dimeVec3f &getFitPoint(const int idx) const; 00084 void setFitPoint(const int idx, const dimeVec3f &pt); 00085 void setFitPoints(const dimeVec3f * const pts, const int numpts, 00086 dimeMemHandler * const memhandler = NULL); 00087 00088 virtual dimeEntity *copy(dimeModel * const model) const; 00089 virtual bool getRecord(const int groupcode, 00090 dimeParam &param, 00091 const int index) const; 00092 virtual const char *getEntityName() const; 00093 00094 virtual void print() const; 00095 virtual bool write(dimeOutput * const out); 00096 virtual int typeId() const; 00097 virtual int countRecords() const; 00098 00099 protected: 00100 virtual bool handleRecord(const int groupcode, 00101 const dimeParam &param, 00102 dimeMemHandler * const memhandler); 00103 00104 private: 00105 int16 flags; 00106 #ifdef DIME_FIXBIG 00107 int32 degree; 00108 int32 numKnots; 00109 int32 numControlPoints; 00110 int32 numFitPoints; 00111 #else 00112 int16 degree; 00113 int16 numKnots; 00114 int16 numControlPoints; 00115 int16 numFitPoints; 00116 #endif 00117 dxfdouble knotTolerance; 00118 dxfdouble fitTolerance; 00119 dxfdouble cpTolerance; 00120 dxfdouble *knots; 00121 dxfdouble *weights; 00122 dimeVec3f *controlPoints; 00123 dimeVec3f *fitPoints; 00124 00125 // read/handle counters 00126 int16 knotCnt; 00127 int16 fitCnt; 00128 int16 cpCnt; 00129 int16 weightCnt; 00130 00131 }; // class dimeSpline 00132 00133 inline int16 00134 dimeSpline::getFlags() const 00135 { 00136 return this->flags; 00137 } 00138 00139 inline void 00140 dimeSpline::setFlags(const int16 flags) 00141 { 00142 this->flags = flags; 00143 } 00144 00145 inline int16 00146 dimeSpline::getDegree() const 00147 { 00148 return this->degree; 00149 } 00150 00151 inline void 00152 dimeSpline::setDegree(const int16 degree) 00153 { 00154 this->degree = degree; 00155 } 00156 00157 inline dxfdouble 00158 dimeSpline::getControlPointTolerance() const 00159 { 00160 return this->cpTolerance; 00161 } 00162 00163 inline void 00164 dimeSpline::setControlPointTolerance(const dxfdouble tol) 00165 { 00166 this->cpTolerance = tol; 00167 } 00168 00169 inline dxfdouble 00170 dimeSpline::getFitPointTolerance() const 00171 { 00172 return this->fitTolerance; 00173 } 00174 00175 inline void 00176 dimeSpline::setFitPointTolerance(const dxfdouble tol) 00177 { 00178 this->fitTolerance = tol; 00179 } 00180 00181 inline dxfdouble 00182 dimeSpline::getKnotTolerance() const 00183 { 00184 return this->knotTolerance; 00185 } 00186 00187 inline void 00188 dimeSpline::setKnotTolerance(const dxfdouble tol) 00189 { 00190 this->knotTolerance = tol; 00191 } 00192 00193 inline int 00194 dimeSpline::getNumKnots() const 00195 { 00196 return this->numKnots; 00197 } 00198 00199 inline dxfdouble 00200 dimeSpline::getKnotValue(const int idx) const 00201 { 00202 assert(idx >= 0 && idx < this->numKnots); 00203 return this->knots[idx]; 00204 } 00205 00206 inline void 00207 dimeSpline::setKnotValue(const int idx, const dxfdouble value) 00208 { 00209 assert(idx >= 0 && idx < this->numKnots); 00210 this->knots[idx] = value; 00211 } 00212 00213 inline int 00214 dimeSpline::getNumControlPoints() const 00215 { 00216 return this->numControlPoints; 00217 } 00218 00219 inline const dimeVec3f & 00220 dimeSpline::getControlPoint(const int idx) const 00221 { 00222 assert(idx >= 0 && idx < this->numControlPoints); 00223 return this->controlPoints[idx]; 00224 } 00225 00226 inline void 00227 dimeSpline::setControlPoint(const int idx, const dimeVec3f &v) 00228 { 00229 assert(idx >= 0 && idx < this->numControlPoints); 00230 this->controlPoints[idx] = v; 00231 } 00232 00233 inline int 00234 dimeSpline::getNumWeights() const 00235 { 00236 return this->getNumControlPoints(); 00237 } 00238 00239 inline dxfdouble 00240 dimeSpline::getWeight(const int idx) const 00241 { 00242 if (this->hasWeights()) { 00243 assert(idx >= 0 && idx < this->numControlPoints); 00244 return this->weights[idx]; 00245 } 00246 return 1.0; 00247 } 00248 00249 inline int 00250 dimeSpline::getNumFitPoints() const 00251 { 00252 return this->numFitPoints; 00253 } 00254 00255 inline const dimeVec3f & 00256 dimeSpline::getFitPoint(const int idx) const 00257 { 00258 assert(idx >= 0 && idx < this->numFitPoints); 00259 return this->fitPoints[idx]; 00260 } 00261 00262 inline void 00263 dimeSpline::setFitPoint(const int idx, const dimeVec3f &pt) 00264 { 00265 assert(idx >= 0 && idx < this->numFitPoints); 00266 this->fitPoints[idx] = pt; 00267 } 00268 00269 #endif // ! DIME_SPLINE_H 00270

Copyright © 1998-1999, Systems In Motion <sales@sim.no>. All rights reserved.
System documentation was generated using doxygen.