Removed template template parameters from LowPassFilter.

This commit is contained in:
unknown 2012-06-07 16:43:20 +02:00
parent 09c1cb80cc
commit fbdfe3a4ec
4 changed files with 20 additions and 19 deletions

View File

@ -103,9 +103,9 @@ int main(int argc, char *argv[])
//Smooth part of the volume //Smooth part of the volume
RawVolume<MaterialDensityPair44> tempVolume(PolyVox::Region(0,0,0,128, 128, 128)); RawVolume<MaterialDensityPair44> tempVolume(PolyVox::Region(0,0,0,128, 128, 128));
LowPassFilter<LargeVolume, RawVolume, MaterialDensityPair44> pass1(&volData, PolyVox::Region(Vector3DInt32(62, 62, 62), Vector3DInt32(126, 126, 126)), &tempVolume, PolyVox::Region(Vector3DInt32(62, 62, 62), Vector3DInt32(126, 126, 126)), 3); LowPassFilter< LargeVolume<MaterialDensityPair44>, RawVolume<MaterialDensityPair44> > pass1(&volData, PolyVox::Region(Vector3DInt32(62, 62, 62), Vector3DInt32(126, 126, 126)), &tempVolume, PolyVox::Region(Vector3DInt32(62, 62, 62), Vector3DInt32(126, 126, 126)), 3);
pass1.executeSAT(); pass1.executeSAT();
LowPassFilter<RawVolume, LargeVolume, MaterialDensityPair44> pass2(&tempVolume, PolyVox::Region(Vector3DInt32(62, 62, 62), Vector3DInt32(126, 126, 126)), &volData, PolyVox::Region(Vector3DInt32(62, 62, 62), Vector3DInt32(126, 126, 126)), 3); LowPassFilter< RawVolume<MaterialDensityPair44>, LargeVolume<MaterialDensityPair44> > pass2(&tempVolume, PolyVox::Region(Vector3DInt32(62, 62, 62), Vector3DInt32(126, 126, 126)), &volData, PolyVox::Region(Vector3DInt32(62, 62, 62), Vector3DInt32(126, 126, 126)), 3);
pass2.executeSAT(); pass2.executeSAT();
QApplication app(argc, argv); QApplication app(argc, argv);

View File

@ -30,22 +30,22 @@ freely, subject to the following restrictions:
namespace PolyVox namespace PolyVox
{ {
template< template<typename> class SrcVolumeType, template<typename> class DestVolumeType, typename VoxelType> template< typename SrcVolumeType, typename DestVolumeType>
class LowPassFilter class LowPassFilter
{ {
public: public:
LowPassFilter(SrcVolumeType<VoxelType>* pVolSrc, Region regSrc, DestVolumeType<VoxelType>* pVolDst, Region regDst, uint32_t uKernelSize); LowPassFilter(SrcVolumeType* pVolSrc, Region regSrc, DestVolumeType* pVolDst, Region regDst, uint32_t uKernelSize);
void execute(); void execute();
void executeSAT(); void executeSAT();
private: private:
//Source data //Source data
SrcVolumeType<VoxelType>* m_pVolSrc; SrcVolumeType* m_pVolSrc;
Region m_regSrc; Region m_regSrc;
//Destination data //Destination data
DestVolumeType<VoxelType>* m_pVolDst; DestVolumeType* m_pVolDst;
Region m_regDst; Region m_regDst;
//Kernel size //Kernel size

View File

@ -23,8 +23,8 @@ freely, subject to the following restrictions:
namespace PolyVox namespace PolyVox
{ {
template< template<typename> class SrcVolumeType, template<typename> class DestVolumeType, typename VoxelType> template< typename SrcVolumeType, typename DestVolumeType>
LowPassFilter<SrcVolumeType, DestVolumeType, VoxelType>::LowPassFilter(SrcVolumeType<VoxelType>* pVolSrc, Region regSrc, DestVolumeType<VoxelType>* pVolDst, Region regDst, uint32_t uKernelSize) LowPassFilter<SrcVolumeType, DestVolumeType>::LowPassFilter(SrcVolumeType* pVolSrc, Region regSrc, DestVolumeType* pVolDst, Region regDst, uint32_t uKernelSize)
:m_pVolSrc(pVolSrc) :m_pVolSrc(pVolSrc)
,m_regSrc(regSrc) ,m_regSrc(regSrc)
,m_pVolDst(pVolDst) ,m_pVolDst(pVolDst)
@ -43,8 +43,8 @@ namespace PolyVox
} }
} }
template< template<typename> class SrcVolumeType, template<typename> class DestVolumeType, typename VoxelType> template< typename SrcVolumeType, typename DestVolumeType>
void LowPassFilter<SrcVolumeType, DestVolumeType, VoxelType>::execute() void LowPassFilter<SrcVolumeType, DestVolumeType>::execute()
{ {
int32_t iSrcMinX = m_regSrc.getLowerCorner().getX(); int32_t iSrcMinX = m_regSrc.getLowerCorner().getX();
int32_t iSrcMinY = m_regSrc.getLowerCorner().getY(); int32_t iSrcMinY = m_regSrc.getLowerCorner().getY();
@ -62,7 +62,7 @@ namespace PolyVox
//int32_t iDstMaxY = m_regDst.getUpperCorner().getY(); //int32_t iDstMaxY = m_regDst.getUpperCorner().getY();
//int32_t iDstMaxZ = m_regDst.getUpperCorner().getZ(); //int32_t iDstMaxZ = m_regDst.getUpperCorner().getZ();
typename SrcVolumeType<VoxelType>::Sampler srcSampler(m_pVolSrc); typename SrcVolumeType::Sampler srcSampler(m_pVolSrc);
for(int32_t iSrcZ = iSrcMinZ, iDstZ = iDstMinZ; iSrcZ <= iSrcMaxZ; iSrcZ++, iDstZ++) for(int32_t iSrcZ = iSrcMinZ, iDstZ = iDstMinZ; iSrcZ <= iSrcMaxZ; iSrcZ++, iDstZ++)
{ {
@ -73,7 +73,7 @@ namespace PolyVox
//VoxelType tSrcVoxel = m_pVolSrc->getVoxelAt(iSrcX, iSrcY, iSrcZ); //VoxelType tSrcVoxel = m_pVolSrc->getVoxelAt(iSrcX, iSrcY, iSrcZ);
srcSampler.setPosition(iSrcX, iSrcY, iSrcZ); srcSampler.setPosition(iSrcX, iSrcY, iSrcZ);
VoxelType tSrcVoxel = srcSampler.getVoxel(); SrcVolumeType::VoxelType tSrcVoxel = srcSampler.getVoxel();
uint32_t uDensity = 0; uint32_t uDensity = 0;
uDensity += convertToDensity(srcSampler.peekVoxel1nx1ny1nz()); uDensity += convertToDensity(srcSampler.peekVoxel1nx1ny1nz());
@ -115,8 +115,8 @@ namespace PolyVox
} }
} }
template< template<typename> class SrcVolumeType, template<typename> class DestVolumeType, typename VoxelType> template< typename SrcVolumeType, typename DestVolumeType>
void LowPassFilter<SrcVolumeType, DestVolumeType, VoxelType>::executeSAT() void LowPassFilter<SrcVolumeType, DestVolumeType>::executeSAT()
{ {
const uint32_t border = (m_uKernelSize - 1) / 2; const uint32_t border = (m_uKernelSize - 1) / 2;
@ -148,9 +148,9 @@ namespace PolyVox
satIterCont.m_Iter = &satVolumeIter; satIterCont.m_Iter = &satVolumeIter;
satIterCont.reset(); satIterCont.reset();
typename SrcVolumeType<VoxelType>::Sampler srcVolumeIter(m_pVolSrc); typename SrcVolumeType::Sampler srcVolumeIter(m_pVolSrc);
IteratorController<typename SrcVolumeType<VoxelType>::Sampler> srcIterCont; IteratorController<typename SrcVolumeType::Sampler> srcIterCont;
srcIterCont.m_regValid = Region(satLowerCorner, satUpperCorner); srcIterCont.m_regValid = Region(satLowerCorner, satUpperCorner);
srcIterCont.m_Iter = &srcVolumeIter; srcIterCont.m_Iter = &srcVolumeIter;
srcIterCont.reset(); srcIterCont.reset();
@ -246,9 +246,10 @@ namespace PolyVox
float average = sum / (static_cast<float>(sideLength*sideLength*sideLength)); float average = sum / (static_cast<float>(sideLength*sideLength*sideLength));
VoxelType voxel = m_pVolSrc->getVoxelAt(iDstX, iDstY, iDstZ); //Note: These lines need consideration if src and dest have different voxel types.
SrcVolumeType::VoxelType voxel = m_pVolSrc->getVoxelAt(iDstX, iDstY, iDstZ);
voxel.setDensity(static_cast<typename VoxelType::DensityType>(average)); voxel.setDensity(static_cast<typename SrcVolumeType::VoxelType::DensityType>(average));
m_pVolDst->setVoxelAt(iDstX, iDstY, iDstZ, voxel); m_pVolDst->setVoxelAt(iDstX, iDstY, iDstZ, voxel);

View File

@ -58,7 +58,7 @@ void TestLowPassFilter::testExecute()
RawVolume<Density8> resultVolume(reg); RawVolume<Density8> resultVolume(reg);
LowPassFilter<RawVolume, RawVolume, Density8> pass1(&volData, reg, &resultVolume, reg, 5); LowPassFilter< RawVolume<Density8>, RawVolume<Density8> > pass1(&volData, reg, &resultVolume, reg, 5);
pass1.execute(); pass1.execute();