24 #define CAN_GO_NEG_X(val) (val > this->mVolume->getEnclosingRegion().getLowerX())
25 #define CAN_GO_POS_X(val) (val < this->mVolume->getEnclosingRegion().getUpperX())
26 #define CAN_GO_NEG_Y(val) (val > this->mVolume->getEnclosingRegion().getLowerY())
27 #define CAN_GO_POS_Y(val) (val < this->mVolume->getEnclosingRegion().getUpperY())
28 #define CAN_GO_NEG_Z(val) (val > this->mVolume->getEnclosingRegion().getLowerZ())
29 #define CAN_GO_POS_Z(val) (val < this->mVolume->getEnclosingRegion().getUpperZ())
33 template <
typename VoxelType>
40 template <
typename VoxelType>
45 template <
typename VoxelType>
48 if(this->isCurrentPositionValid())
50 return *mCurrentVoxel;
54 return getVoxelAt(this->mXPosInVolume, this->mYPosInVolume, this->mZPosInVolume);
58 template <
typename VoxelType>
61 setPosition(v3dNewPos.
getX(), v3dNewPos.
getY(), v3dNewPos.
getZ());
64 template <
typename VoxelType>
71 if(this->isCurrentPositionValid())
73 const Vector3DInt32& v3dLowerCorner = this->mVolume->m_regValidRegion.getLowerCorner();
78 const int32_t uVoxelIndex = iLocalXPos +
79 iLocalYPos * this->mVolume->getWidth() +
80 iLocalZPos * this->mVolume->getWidth() * this->mVolume->getHeight();
82 mCurrentVoxel = this->mVolume->m_pData + uVoxelIndex;
90 template <
typename VoxelType>
94 if(this->m_bIsCurrentPositionValidInX && this->m_bIsCurrentPositionValidInY && this->m_bIsCurrentPositionValidInZ)
96 *mCurrentVoxel = tValue;
105 template <
typename VoxelType>
109 bool bIsOldPositionValid = this->isCurrentPositionValid();
115 if(this->isCurrentPositionValid() && bIsOldPositionValid )
121 setPosition(this->mXPosInVolume, this->mYPosInVolume, this->mZPosInVolume);
125 template <
typename VoxelType>
129 bool bIsOldPositionValid = this->isCurrentPositionValid();
135 if(this->isCurrentPositionValid() && bIsOldPositionValid )
137 mCurrentVoxel += this->mVolume->getWidth();
141 setPosition(this->mXPosInVolume, this->mYPosInVolume, this->mZPosInVolume);
145 template <
typename VoxelType>
149 bool bIsOldPositionValid = this->isCurrentPositionValid();
155 if(this->isCurrentPositionValid() && bIsOldPositionValid )
157 mCurrentVoxel += this->mVolume->getWidth() * this->mVolume->getHeight();
161 setPosition(this->mXPosInVolume, this->mYPosInVolume, this->mZPosInVolume);
165 template <
typename VoxelType>
169 bool bIsOldPositionValid = this->isCurrentPositionValid();
175 if(this->isCurrentPositionValid() && bIsOldPositionValid )
181 setPosition(this->mXPosInVolume, this->mYPosInVolume, this->mZPosInVolume);
185 template <
typename VoxelType>
189 bool bIsOldPositionValid = this->isCurrentPositionValid();
195 if(this->isCurrentPositionValid() && bIsOldPositionValid )
197 mCurrentVoxel -= this->mVolume->getWidth();
201 setPosition(this->mXPosInVolume, this->mYPosInVolume, this->mZPosInVolume);
205 template <
typename VoxelType>
209 bool bIsOldPositionValid = this->isCurrentPositionValid();
215 if(this->isCurrentPositionValid() && bIsOldPositionValid )
217 mCurrentVoxel -= this->mVolume->getWidth() * this->mVolume->getHeight();
221 setPosition(this->mXPosInVolume, this->mYPosInVolume, this->mZPosInVolume);
225 template <
typename VoxelType>
230 return *(mCurrentVoxel - 1 - this->mVolume->getWidth() - this->mVolume->getWidth() * this->mVolume->getHeight());
232 return this->mVolume->getVoxelWithWrapping(this->mXPosInVolume-1,this->mYPosInVolume-1,this->mZPosInVolume-1,this->m_eWrapMode, this->m_tBorder);
235 template <
typename VoxelType>
240 return *(mCurrentVoxel - 1 - this->mVolume->getWidth());
242 return this->mVolume->getVoxelWithWrapping(this->mXPosInVolume-1,this->mYPosInVolume-1,this->mZPosInVolume,this->m_eWrapMode, this->m_tBorder);
245 template <
typename VoxelType>
250 return *(mCurrentVoxel - 1 - this->mVolume->getWidth() + this->mVolume->getWidth() * this->mVolume->getHeight());
252 return this->mVolume->getVoxelWithWrapping(this->mXPosInVolume-1,this->mYPosInVolume-1,this->mZPosInVolume+1,this->m_eWrapMode, this->m_tBorder);
255 template <
typename VoxelType>
260 return *(mCurrentVoxel - 1 - this->mVolume->getWidth() * this->mVolume->getHeight());
262 return this->mVolume->getVoxelWithWrapping(this->mXPosInVolume-1,this->mYPosInVolume,this->mZPosInVolume-1,this->m_eWrapMode, this->m_tBorder);
265 template <
typename VoxelType>
268 if((this->isCurrentPositionValid()) &&
CAN_GO_NEG_X(this->mXPosInVolume) )
270 return *(mCurrentVoxel - 1);
272 return this->mVolume->getVoxelWithWrapping(this->mXPosInVolume-1,this->mYPosInVolume,this->mZPosInVolume,this->m_eWrapMode, this->m_tBorder);
275 template <
typename VoxelType>
280 return *(mCurrentVoxel - 1 + this->mVolume->getWidth() * this->mVolume->getHeight());
282 return this->mVolume->getVoxelWithWrapping(this->mXPosInVolume-1,this->mYPosInVolume,this->mZPosInVolume+1,this->m_eWrapMode, this->m_tBorder);
285 template <
typename VoxelType>
290 return *(mCurrentVoxel - 1 + this->mVolume->getWidth() - this->mVolume->getWidth() * this->mVolume->getHeight());
292 return this->mVolume->getVoxelWithWrapping(this->mXPosInVolume-1,this->mYPosInVolume+1,this->mZPosInVolume-1,this->m_eWrapMode, this->m_tBorder);
295 template <
typename VoxelType>
300 return *(mCurrentVoxel - 1 + this->mVolume->getWidth());
302 return this->mVolume->getVoxelWithWrapping(this->mXPosInVolume-1,this->mYPosInVolume+1,this->mZPosInVolume,this->m_eWrapMode, this->m_tBorder);
305 template <
typename VoxelType>
310 return *(mCurrentVoxel - 1 + this->mVolume->getWidth() + this->mVolume->getWidth() * this->mVolume->getHeight());
312 return this->mVolume->getVoxelWithWrapping(this->mXPosInVolume-1,this->mYPosInVolume+1,this->mZPosInVolume+1,this->m_eWrapMode, this->m_tBorder);
317 template <
typename VoxelType>
322 return *(mCurrentVoxel - this->mVolume->getWidth() - this->mVolume->getWidth() * this->mVolume->getHeight());
324 return this->mVolume->getVoxelWithWrapping(this->mXPosInVolume,this->mYPosInVolume-1,this->mZPosInVolume-1,this->m_eWrapMode, this->m_tBorder);
327 template <
typename VoxelType>
330 if((this->isCurrentPositionValid()) &&
CAN_GO_NEG_Y(this->mYPosInVolume) )
332 return *(mCurrentVoxel - this->mVolume->getWidth());
334 return this->mVolume->getVoxelWithWrapping(this->mXPosInVolume,this->mYPosInVolume-1,this->mZPosInVolume,this->m_eWrapMode, this->m_tBorder);
337 template <
typename VoxelType>
342 return *(mCurrentVoxel - this->mVolume->getWidth() + this->mVolume->getWidth() * this->mVolume->getHeight());
344 return this->mVolume->getVoxelWithWrapping(this->mXPosInVolume,this->mYPosInVolume-1,this->mZPosInVolume+1,this->m_eWrapMode, this->m_tBorder);
347 template <
typename VoxelType>
350 if((this->isCurrentPositionValid()) &&
CAN_GO_NEG_Z(this->mZPosInVolume) )
352 return *(mCurrentVoxel - this->mVolume->getWidth() * this->mVolume->getHeight());
354 return this->mVolume->getVoxelWithWrapping(this->mXPosInVolume,this->mYPosInVolume,this->mZPosInVolume-1,this->m_eWrapMode, this->m_tBorder);
357 template <
typename VoxelType>
360 if((this->isCurrentPositionValid()))
362 return *mCurrentVoxel;
364 return this->mVolume->getVoxelWithWrapping(this->mXPosInVolume, this->mYPosInVolume, this->mZPosInVolume,this->m_eWrapMode, this->m_tBorder);
367 template <
typename VoxelType>
370 if((this->isCurrentPositionValid()) &&
CAN_GO_POS_Z(this->mZPosInVolume) )
372 return *(mCurrentVoxel + this->mVolume->getWidth() * this->mVolume->getHeight());
374 return this->mVolume->getVoxelWithWrapping(this->mXPosInVolume,this->mYPosInVolume,this->mZPosInVolume+1,this->m_eWrapMode, this->m_tBorder);
377 template <
typename VoxelType>
382 return *(mCurrentVoxel + this->mVolume->getWidth() - this->mVolume->getWidth() * this->mVolume->getHeight());
384 return this->mVolume->getVoxelWithWrapping(this->mXPosInVolume,this->mYPosInVolume+1,this->mZPosInVolume-1,this->m_eWrapMode, this->m_tBorder);
387 template <
typename VoxelType>
390 if((this->isCurrentPositionValid()) &&
CAN_GO_POS_Y(this->mYPosInVolume) )
392 return *(mCurrentVoxel + this->mVolume->getWidth());
394 return this->mVolume->getVoxelWithWrapping(this->mXPosInVolume,this->mYPosInVolume+1,this->mZPosInVolume,this->m_eWrapMode, this->m_tBorder);
397 template <
typename VoxelType>
402 return *(mCurrentVoxel + this->mVolume->getWidth() + this->mVolume->getWidth() * this->mVolume->getHeight());
404 return this->mVolume->getVoxelWithWrapping(this->mXPosInVolume,this->mYPosInVolume+1,this->mZPosInVolume+1,this->m_eWrapMode, this->m_tBorder);
409 template <
typename VoxelType>
414 return *(mCurrentVoxel + 1 - this->mVolume->getWidth() - this->mVolume->getWidth() * this->mVolume->getHeight());
416 return this->mVolume->getVoxelWithWrapping(this->mXPosInVolume+1,this->mYPosInVolume-1,this->mZPosInVolume-1,this->m_eWrapMode, this->m_tBorder);
419 template <
typename VoxelType>
424 return *(mCurrentVoxel + 1 - this->mVolume->getWidth());
426 return this->mVolume->getVoxelWithWrapping(this->mXPosInVolume+1,this->mYPosInVolume-1,this->mZPosInVolume,this->m_eWrapMode, this->m_tBorder);
429 template <
typename VoxelType>
434 return *(mCurrentVoxel + 1 - this->mVolume->getWidth() + this->mVolume->getWidth() * this->mVolume->getHeight());
436 return this->mVolume->getVoxelWithWrapping(this->mXPosInVolume+1,this->mYPosInVolume-1,this->mZPosInVolume+1,this->m_eWrapMode, this->m_tBorder);
439 template <
typename VoxelType>
444 return *(mCurrentVoxel + 1 - this->mVolume->getWidth() * this->mVolume->getHeight());
446 return this->mVolume->getVoxelWithWrapping(this->mXPosInVolume+1,this->mYPosInVolume,this->mZPosInVolume-1,this->m_eWrapMode, this->m_tBorder);
449 template <
typename VoxelType>
452 if((this->isCurrentPositionValid()) &&
CAN_GO_POS_X(this->mXPosInVolume) )
454 return *(mCurrentVoxel + 1);
456 return this->mVolume->getVoxelWithWrapping(this->mXPosInVolume+1,this->mYPosInVolume,this->mZPosInVolume,this->m_eWrapMode, this->m_tBorder);
459 template <
typename VoxelType>
464 return *(mCurrentVoxel + 1 + this->mVolume->getWidth() * this->mVolume->getHeight());
466 return this->mVolume->getVoxelWithWrapping(this->mXPosInVolume+1,this->mYPosInVolume,this->mZPosInVolume+1,this->m_eWrapMode, this->m_tBorder);
469 template <
typename VoxelType>
474 return *(mCurrentVoxel + 1 + this->mVolume->getWidth() - this->mVolume->getWidth() * this->mVolume->getHeight());
476 return this->mVolume->getVoxelWithWrapping(this->mXPosInVolume+1,this->mYPosInVolume+1,this->mZPosInVolume-1,this->m_eWrapMode, this->m_tBorder);
479 template <
typename VoxelType>
484 return *(mCurrentVoxel + 1 + this->mVolume->getWidth());
486 return this->mVolume->getVoxelWithWrapping(this->mXPosInVolume+1,this->mYPosInVolume+1,this->mZPosInVolume,this->m_eWrapMode, this->m_tBorder);
489 template <
typename VoxelType>
494 return *(mCurrentVoxel + 1 + this->mVolume->getWidth() + this->mVolume->getWidth() * this->mVolume->getHeight());
496 return this->mVolume->getVoxelWithWrapping(this->mXPosInVolume+1,this->mYPosInVolume+1,this->mZPosInVolume+1,this->m_eWrapMode, this->m_tBorder);