36 #ifndef PROFILETHIN_OBJECT_H
37 #define PROFILETHIN_OBJECT_H
62 class GeoTessMetaData;
115 virtual int class_size()
const
126 {
return GeoTessProfileType::THIN; };
132 {
return (GeoTessProfile::operator==(p) && (radius == p.
getRadius(0)) && (*data == p.
getData(0))); }
142 virtual double getValue(
int attributeIndex,
int nodeIndex)
const
143 {
return nodeIndex == 0 ? data->getDouble(attributeIndex) : NaN_DOUBLE; }
155 int attributeIndex,
double r,
bool allowRadiusOutOfRange)
const
157 if (!allowRadiusOutOfRange &&
158 ((r < getRadiusBottom()) || (r > getRadiusTop())))
167 return getValue(attributeIndex, 0);
176 virtual double getValueTop(
int attributeIndex)
const
177 {
return data->getDouble(attributeIndex); }
189 virtual bool isNaN(
int nodeIndex,
int attributeIndex)
191 return nodeIndex != 0 || data->isNaN(attributeIndex);
198 virtual float getRadius(
int i)
const {
return radius; };
213 virtual float* getRadii()
214 {
float* fa =
new float [1]; fa[0] = radius;
return fa; };
235 virtual void setData(
const vector<GeoTessData*>& inData)
236 {
delete data; data = inData[0]; }
241 virtual void setRadii(
const vector<float>& newRadii)
242 { radius = newRadii[0]; }
244 virtual void setRadius(
int index,
float newRadius)
245 {
if (index == 0) radius = newRadius; }
251 {
delete data; data = inData; }
289 radius(-1.0), data(NULL), pointIndex(-1)
290 { radius = ifs.
readFloat(); data = GeoTessData::getData(ifs, gtmd); };
295 GeoTessProfileThin(IFStreamAscii& ifs, GeoTessMetaData& gtmd) : GeoTessProfile(),
296 radius(-1.0), data(NULL), pointIndex(-1)
297 { radius = ifs.readFloat(); data = GeoTessData::getData(ifs, gtmd); };
303 virtual ~GeoTessProfileThin() {
if (data != NULL)
delete data; };
308 virtual void write(IFStreamBinary& ofs)
309 { ofs.writeByte((
byte) GeoTessProfileType::THIN.ordinal());
310 ofs.writeFloat(radius); data->write(ofs); };
315 virtual void write(IFStreamAscii& ofs)
316 { ofs.writeInt(GeoTessProfileType::THIN.ordinal());
317 ofs.writeString(
" ");
318 ofs.writeFloat(radius);
330 virtual int findClosestRadiusIndex(
double r)
const
340 virtual void setPointIndex(
int nodeIndex,
int pntIndex)
341 { pointIndex = pntIndex; }
350 virtual void resetPointIndices() { pointIndex = -1; }
359 virtual int getPointIndex(
int nodeIndex)
const
360 {
return pointIndex; }
365 virtual GeoTessProfile* copy()
367 return new GeoTessProfileThin(radius, data->copy());
376 #endif // PROFILETHIN_OBJECT_H