36 #ifndef PROFILESURFACE_OBJECT_H
37 #define PROFILESURFACE_OBJECT_H
63 class GeoTessMetaData;
112 virtual int class_size()
const
121 {
return ProfileType::SURFACE; };
126 virtual bool operator == (
const Profile& p)
const
127 {
return (Profile::operator==(p) &&
139 virtual double getValue(
int attributeIndex,
int nodeIndex)
const
141 return nodeIndex == 0 ? data->getDouble(attributeIndex) : NaN_DOUBLE;
150 virtual double getValueTop(
int attributeIndex)
const
151 {
return data->getDouble(attributeIndex); }
163 virtual bool isNaN(
int nodeIndex,
int attributeIndex)
165 return nodeIndex != 0 || data->isNaN(attributeIndex);
173 int attributeIndex,
double radius,
174 bool allowRadiusOutOfRange)
const
176 return getData(0).getDouble(attributeIndex);
183 virtual float getRadius(
int i)
const
184 {
return NaN_FLOAT; };
205 {
Data** da =
new Data* [1]; da[0] = data;
return da; };
220 virtual void setData(
const vector<Data*>& inData)
221 {
delete data; data = inData[0]; }
226 virtual void setData(
int index,
Data* inData)
227 {
delete data; data = inData; }
233 virtual void setRadii(
const vector<float>& newRadii)
239 virtual float getRadiusTop()
const
240 {
return NaN_FLOAT; };
255 virtual float getRadiusBottom()
const
256 {
return NaN_FLOAT; };
274 data(NULL), pointIndex(-1)
275 { data = Data::getData(ifs, gtmd); };
280 ProfileSurface(IFStreamAscii& ifs, GeoTessMetaData& gtmd) : Profile(),
281 data(NULL), pointIndex(-1)
282 { data = Data::getData(ifs, gtmd); };
288 virtual ~ProfileSurface() {
if (data != NULL)
delete data; };
293 virtual void write(IFStreamBinary& ofs)
294 { ofs.writeByte((
byte) ProfileType::SURFACE.ordinal());
300 virtual void write(IFStreamAscii& ofs)
301 { ofs.writeInt(ProfileType::SURFACE.ordinal());
314 virtual int findClosestRadiusIndex(
double radius)
const
325 virtual void setPointIndex(
int nodeIndex,
int pntIndex)
326 { pointIndex = pntIndex; }
336 virtual void resetPointIndices() { pointIndex = -1; }
346 virtual int getPointIndex(
int nodeIndex)
const
347 {
return pointIndex; }
353 virtual Profile* copy()
355 return new ProfileSurface(data->copy());
364 #endif // PROFILESURFACE_OBJECT_H