28 #include "../common/WAssert.h"
29 #include "../common/WLimits.h"
30 #include "datastructures/WValueSetHistogram.h"
31 #include "WDataSetSingle.h"
33 #include "WDataSetScalar.h"
39 boost::shared_ptr< WGrid > newGrid )
42 WAssert( newValueSet,
"No value set given." );
43 WAssert( newGrid,
"No grid given." );
44 WAssert( newValueSet->size() == newGrid->size(),
"Number of values unequal number of positions in grid." );
45 WAssert( newValueSet->order() == 0,
"The value set does not contain scalars." );
75 return "WDataSetScalar";
80 return "A scalar dataset, i.e. one scalar value per voxel.";
105 boost::shared_ptr< WGridRegular3D > grid = boost::dynamic_pointer_cast<
WGridRegular3D >(
m_grid );
107 WAssert( grid,
"This data set has a grid whose type is not yet supported for interpolation." );
109 "Only implemented for scalar values so far." );
111 bool isInside =
true;
112 size_t cellId = grid->getCellId( pos, &isInside );
122 WPosition localPos = grid->getTransform().positionToGridSpace( pos - grid->getPosition( vertexIds[0] ) );
124 double lambdaX = localPos[0];
125 double lambdaY = localPos[1];
126 double lambdaZ = localPos[2];
127 std::vector< double > h( 8 );
137 h[0] = ( 1 - lambdaX ) * ( 1 - lambdaY ) * ( 1 - lambdaZ );
138 h[1] = ( lambdaX ) * ( 1 - lambdaY ) * ( 1 - lambdaZ );
139 h[2] = ( 1 - lambdaX ) * ( lambdaY ) * ( 1 - lambdaZ );
140 h[3] = ( lambdaX ) * ( lambdaY ) * ( 1 - lambdaZ );
141 h[4] = ( 1 - lambdaX ) * ( 1 - lambdaY ) * ( lambdaZ );
142 h[5] = ( lambdaX ) * ( 1 - lambdaY ) * ( lambdaZ );
143 h[6] = ( 1 - lambdaX ) * ( lambdaY ) * ( lambdaZ );
144 h[7] = ( lambdaX ) * ( lambdaY ) * ( lambdaZ );
147 for(
size_t i = 0; i < 8; ++i )
158 boost::shared_ptr< WGridRegular3D > grid = boost::dynamic_pointer_cast<
WGridRegular3D >(
m_grid );
159 size_t id = x + y * grid->
getNbCoordsX() + z * grid->getNbCoordsX() * grid->getNbCoordsY();