Templated the IPiToPf and IPfToPf function to allow volumes with scalar type different from the one of the meshes

This commit is contained in:
Paolo Cignoni 2014-06-24 08:47:34 +00:00
parent 01ab3c4e68
commit f576d96d39
1 changed files with 10 additions and 9 deletions

View File

@ -104,11 +104,12 @@ public:
* @param integer coordinates pi of the cell * @param integer coordinates pi of the cell
* @return p is a 3D point representing the lower corner of the cell * @return p is a 3D point representing the lower corner of the cell
*/ */
inline void IPiToPf(const Point3i & pi, CoordType &p ) const template <class OtherScalarType>
inline void IPiToPf(const Point3i & pi, Point3<OtherScalarType> &p ) const
{ {
p[0] = ((ScalarType)pi[0])*voxel[0]; p[0] = ((OtherScalarType)pi[0])*voxel[0];
p[1] = ((ScalarType)pi[1])*voxel[1]; p[1] = ((OtherScalarType)pi[1])*voxel[1];
p[2] = ((ScalarType)pi[2])*voxel[2]; p[2] = ((OtherScalarType)pi[2])*voxel[2];
p += bbox.min; p += bbox.min;
} }
/* Returns the matrix that applied to a point in grid space /* Returns the matrix that applied to a point in grid space
@ -147,12 +148,12 @@ public:
// Same of IPiToPf but for the case that you just want to transform // Same of IPiToPf but for the case that you just want to transform
// from a space to the other. // from a space to the other.
inline void IPfToPf(const CoordType & pi, CoordType &p ) const template <class OtherScalarType>
void IPfToPf(const Point3<OtherScalarType> & pi, Point3<OtherScalarType> &p ) const
{ {
p[0] = ((ScalarType)pi[0])*voxel[0]; p[0] = ((OtherScalarType)pi[0])*voxel[0] + bbox.min[0];
p[1] = ((ScalarType)pi[1])*voxel[1]; p[1] = ((OtherScalarType)pi[1])*voxel[1] + bbox.min[1];
p[2] = ((ScalarType)pi[2])*voxel[2]; p[2] = ((OtherScalarType)pi[2])*voxel[2] + bbox.min[2];
p += bbox.min;
} }
/* Given a cell in <ScalarType> coordinates, compute the corresponding cell in integer coordinates /* Given a cell in <ScalarType> coordinates, compute the corresponding cell in integer coordinates