36 #ifndef PROFILETHIN_OBJECT_H
37 #define PROFILETHIN_OBJECT_H
62 class GeoTessMetaData;
104 Profile(), radius(rad), data(dat),
115 virtual int class_size()
const
124 {
return ProfileType::THIN; };
129 virtual bool operator == (
const Profile& p)
const
130 {
return (Profile::operator==(p) && (radius == p.
getRadius(0)) && (*data == p.
getData(0))); }
140 virtual double getValue(
int attributeIndex,
int nodeIndex)
const
141 {
return nodeIndex == 0 ? data->getDouble(attributeIndex) : NaN_DOUBLE; }
153 int attributeIndex,
double r,
bool allowRadiusOutOfRange)
const
155 if (!allowRadiusOutOfRange &&
156 ((r < getRadiusBottom()) || (r > getRadiusTop())))
165 return getValue(attributeIndex, 0);
174 virtual double getValueTop(
int attributeIndex)
const
175 {
return data->getDouble(attributeIndex); }
187 virtual bool isNaN(
int nodeIndex,
int attributeIndex)
189 return nodeIndex != 0 || data->isNaN(attributeIndex);
196 virtual float getRadius(
int i)
const {
return radius; };
203 {
Data** da =
new Data* [1]; da[0] = data;
return da; };
218 virtual void setData(
const vector<Data*>& inData)
219 {
delete data; data = inData[0]; }
224 virtual void setRadii(
const vector<float>& newRadii)
225 { radius = newRadii[0]; }
230 virtual void setData(
int index,
Data* inData)
231 {
delete data; data = inData; }
276 virtual float* getRadii()
277 {
float* fa =
new float [1]; fa[0] = radius;
return fa; };
285 radius(-1.0), data(NULL), pointIndex(-1)
286 { radius = ifs.
readFloat(); data = Data::getData(ifs, gtmd); };
291 ProfileThin(IFStreamAscii& ifs, GeoTessMetaData& gtmd) : Profile(),
292 radius(-1.0), data(NULL), pointIndex(-1)
293 { radius = ifs.readFloat(); data = Data::getData(ifs, gtmd); };
299 virtual ~ProfileThin() {
if (data != NULL)
delete data; };
304 virtual void write(IFStreamBinary& ofs)
305 { ofs.writeByte((
byte) ProfileType::THIN.ordinal());
306 ofs.writeFloat(radius); data->write(ofs); };
311 virtual void write(IFStreamAscii& ofs)
312 { ofs.writeInt(ProfileType::THIN.ordinal());
313 ofs.writeString(
" ");
314 ofs.writeFloat(radius);
326 virtual int findClosestRadiusIndex(
double r)
const
336 virtual void setPointIndex(
int nodeIndex,
int pntIndex)
337 { pointIndex = pntIndex; }
346 virtual void resetPointIndices() { pointIndex = -1; }
355 virtual int getPointIndex(
int nodeIndex)
const
356 {
return pointIndex; }
361 virtual Profile* copy()
363 return new ProfileThin(radius, data->copy());
372 #endif // PROFILETHIN_OBJECT_H