assign zero plane, need to implement the function in Base
This commit is contained in:
parent
c87fe5d8b5
commit
e432351f8a
@ -44,15 +44,16 @@ public:
|
||||
// Constructor
|
||||
WaveletDWT( WaveletName name ) : WaveletBase( name ) {}
|
||||
|
||||
|
||||
/*
|
||||
// Function: extend a cube in X direction
|
||||
template< typename SigInArrayType, typename ExtensionArrayType, typename DeviceTag >
|
||||
vtkm::Id Extend3DLeftRight(
|
||||
const SigInArrayType &sigIn,
|
||||
const SigInArrayType &sigIn, // input
|
||||
vtkm::Id sigDimX, vtkm::Id sigDimY, vtkm::Id sigDimZ,
|
||||
vtkm::Id sigStartX, vtkm::Id sigStarty, vtkm::Id sigDimZ,
|
||||
vtkm::Id sigPretendDimX, vtkm::Id sigPretendDimY, vtkm::Id sigPretendDimZ,
|
||||
ExtensionArrayType &ext1,
|
||||
ExtensionArrayType &ext2,
|
||||
ExtensionArrayType &ext1, // output
|
||||
ExtensionArrayType &ext2, // output
|
||||
vtkm::Id addLen,
|
||||
vtkm::worklet::wavelets::DWTMode ext1Method,
|
||||
vtkm::worklet::wavelets::DWTMode ext2Method,
|
||||
@ -60,9 +61,31 @@ public:
|
||||
bool padZeroAtExt2,
|
||||
DeviceTag )
|
||||
{
|
||||
// TODO
|
||||
}
|
||||
// pretendSigPaddedZero and padZeroAtExt2 cannot happen at the same time
|
||||
VTKM_ASSERT( !pretendSigPaddedZero || !padZeroAtExt2 );
|
||||
|
||||
if( addLen == 0 ) // Haar kernel
|
||||
{
|
||||
ext1.PrepareForOutput( 0, DeviceTag() );
|
||||
if( pretendSigPaddedZero || padZeroAtExt2 )
|
||||
{
|
||||
if( modeLR ) // right extension
|
||||
{
|
||||
ext2.PrepareForOutput( sigPretendDimY, DeviceTag() );
|
||||
WaveletBase::DeviceAssignZero2DColumn( ext2, 1, sigPretendDimY, 0, DeviceTag() );
|
||||
}
|
||||
else // bottom extension
|
||||
{
|
||||
ext2.PrepareForOutput( sigPretendDimX, DeviceTag() );
|
||||
WaveletBase::DeviceAssignZero2DRow( ext2, sigPretendDimX, 1, 0, DeviceTag() );
|
||||
}
|
||||
}
|
||||
else
|
||||
ext2.PrepareForOutput( 0, DeviceTag() );
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
*/
|
||||
|
||||
template< typename SigInArrayType, typename ExtensionArrayType, typename DeviceTag >
|
||||
vtkm::Id Extend2D (const SigInArrayType &sigIn, // Input
|
||||
@ -85,7 +108,7 @@ public:
|
||||
|
||||
if( addLen == 0 ) // Haar kernel
|
||||
{
|
||||
ext1.PrepareForOutput( 0, DeviceTag() );
|
||||
ext1.PrepareForOutput( 0, DeviceTag() ); // no need to extend on left/top
|
||||
if( pretendSigPaddedZero || padZeroAtExt2 )
|
||||
{
|
||||
if( modeLR ) // right extension
|
||||
|
@ -2905,7 +2905,8 @@ private:
|
||||
|
||||
|
||||
|
||||
// Assign zero to a row, or a column, or a single element in a 2D array.
|
||||
// Assign zero to a row or a column in a 2D array.
|
||||
// Change row or column is controlled by negative indices.
|
||||
class AssignZero2DWorklet : public vtkm::worklet::WorkletMapField
|
||||
{
|
||||
public:
|
||||
@ -2920,7 +2921,7 @@ public:
|
||||
|
||||
// Index translation helper
|
||||
VTKM_EXEC_CONT
|
||||
void GetLogicalDim( const Id &idx, Id &x, Id &y ) const
|
||||
void GetLogicalDim( vtkm::Id idx, vtkm::Id &x, vtkm::Id &y ) const
|
||||
{
|
||||
x = idx % dimX;
|
||||
y = idx / dimX;
|
||||
@ -2937,8 +2938,8 @@ public:
|
||||
array.Set( workIdx, static_cast<typename PortalType::ValueType>(0.0) );
|
||||
else if( zeroX < 0 && y == zeroY ) // assign zero to a row
|
||||
array.Set( workIdx, static_cast<typename PortalType::ValueType>(0.0) );
|
||||
else if( x == zeroX && y == zeroY ) // assign zero to an element
|
||||
array.Set( workIdx, static_cast<typename PortalType::ValueType>(0.0) );
|
||||
// else if( x == zeroX && y == zeroY ) // assign zero to an element
|
||||
// array.Set( workIdx, static_cast<typename PortalType::ValueType>(0.0) );
|
||||
}
|
||||
|
||||
private:
|
||||
@ -2949,6 +2950,54 @@ private:
|
||||
|
||||
|
||||
|
||||
// Assign zero to a plane (2D) in a 3D cube.
|
||||
// Which plane to assign zero is controlled by negative indices.
|
||||
class AssignZero3DWorklet : public vtkm::worklet::WorkletMapField
|
||||
{
|
||||
public:
|
||||
typedef void ControlSignature( WholeArrayInOut< ScalarAll > );
|
||||
typedef void ExecutionSignature( _1, WorkIndex );
|
||||
|
||||
// Constructor
|
||||
VTKM_EXEC_CONT
|
||||
AssignZero3DWorklet( vtkm::Id x, vtkm::Id y, vtkm::Id z,
|
||||
vtkm::Id zero_x, vtkm::Id zero_y, vtkm::Id zero_z )
|
||||
: dimX( x ), dimY( y ), dimZ( z ),
|
||||
zeroX( zero_x ), zeroY( zero_y ), zeroZ( zero_z )
|
||||
{ }
|
||||
|
||||
// Index translation helper
|
||||
VTKM_EXEC_CONT
|
||||
void GetLogicalDim( vtkm::Id idx, vtkm::Id &x, vtkm::Id &y, vtkm::Id &z ) const
|
||||
{
|
||||
z = idx / (DimX * DimY);
|
||||
y = (idx - z * DimX * DimY) / DimX;
|
||||
x = idx % dimX;
|
||||
}
|
||||
|
||||
template< typename PortalType >
|
||||
VTKM_EXEC
|
||||
void operator()( PortalType &array,
|
||||
const vtkm::Id &workIdx ) const
|
||||
{
|
||||
vtkm::Id x, y, z;
|
||||
GetLogicalDim( workIdx, x, y, z );
|
||||
if( zeroZ < 0 && zeroY < 0 && x == zeroX ) // plane perpendicular to X axis
|
||||
array.Set( workIdx, static_cast<typename PortalType::ValueType>(0.0) );
|
||||
else if( zeroZ < 0 && zeroX < 0 && y == zeroY ) // plane perpendicular to Y axis
|
||||
array.Set( workIdx, static_cast<typename PortalType::ValueType>(0.0) );
|
||||
else if( zeroY < 0 && zeroX < 0 && z == zeroZ ) // plane perpendicular to Z axis
|
||||
array.Set( workIdx, static_cast<typename PortalType::ValueType>(0.0) );
|
||||
}
|
||||
|
||||
private:
|
||||
vtkm::Id dimX, dimY, dimZ;
|
||||
vtkm::Id zeroX, zeroY, zeroZ; // element at (zeroX, zeroY, zeroZ) will be assigned zero.
|
||||
// each becomes a wild card if negative
|
||||
};
|
||||
|
||||
|
||||
|
||||
// Worklet: Copys a small rectangle to part of a big rectangle
|
||||
// WARNING: this worklet only supports basic ArrayHandle types.
|
||||
class RectangleCopyTo : public vtkm::worklet::WorkletMapField
|
||||
|
Loading…
Reference in New Issue
Block a user