#include "bbmaracasvisuAxeVolume.h"
#include "bbcreaMaracasVisuPackage.h"
+
namespace bbcreaMaracasVisu
{
+
BBTK_ADD_BLACK_BOX_TO_PACKAGE(creaMaracasVisu,AxeVolume)
BBTK_BLACK_BOX_IMPLEMENTATION(AxeVolume,bbtk::AtomicBlackBox);
-void AxeVolume::Process()
+
+int AxeVolume::GetTypeFormat( std::string formatStr , vtkImageData* image )
{
+ int outputformat = VTK_UNSIGNED_CHAR;
+ if (formatStr=="SAME")
+ {
+ if (image!=NULL) outputformat = image->GetScalarType();
+ }
+ else if (formatStr=="VTK_BIT") outputformat = VTK_BIT; // 1
+ else if (formatStr=="VTK_CHAR") outputformat = VTK_CHAR; // 2
+ else if (formatStr=="VTK_SIGNED_CHAR") outputformat = VTK_SIGNED_CHAR; // 15
+ else if (formatStr=="VTK_UNSIGNED_CHAR") outputformat = VTK_UNSIGNED_CHAR; // 3
+ else if (formatStr=="VTK_SHORT") outputformat = VTK_SHORT; // 4
+ else if (formatStr=="VTK_UNSIGNED_SHORT") outputformat = VTK_UNSIGNED_SHORT; // 5
+ else if (formatStr=="VTK_INT") outputformat = VTK_INT; // 6
+ else if (formatStr=="VTK_UNSIGNED_INT") outputformat = VTK_UNSIGNED_INT; // 7
+ else if (formatStr=="VTK_LONG") outputformat = VTK_LONG; // 8
+ else if (formatStr=="VTK_UNSIGNED_LONG") outputformat = VTK_UNSIGNED_LONG; // 9
+ else if (formatStr=="VTK_FLOAT") outputformat = VTK_FLOAT; // 10
+ else if (formatStr=="VTK_DOUBLE") outputformat = VTK_DOUBLE; // 11
+ else if (formatStr=="MET_CHAR") outputformat = VTK_CHAR; // 2
+ else if (formatStr=="MET_UCHAR") outputformat = VTK_UNSIGNED_CHAR; // 3
+ else if (formatStr=="MET_SHORT") outputformat = VTK_SHORT; // 4
+ else if (formatStr=="MET_USHORT") outputformat = VTK_UNSIGNED_SHORT; // 5
+ else if (formatStr=="MET_SHORT") outputformat = VTK_SHORT; // 4
+ else if (formatStr=="MET_FLOAT") outputformat = VTK_FLOAT; // 10
+ else if (formatStr=="MET_DOUBLE") outputformat = VTK_DOUBLE; // 11
+
+ return outputformat;
+}
- printf("EED AxeVolume::Process start \n");
+void AxeVolume::Process()
+{
if ( mimage!=NULL )
{
mimage->Delete();
invSpc[1] = 1/spc[1];
invSpc[2] = 1/spc[2];
+ int outputformat = GetTypeFormat( bbGetInputOutputFormat() , bbGetInputIn() );
+
mimage = vtkImageData::New();
mimage->SetSpacing(bbGetInputIn()->GetSpacing());
mimage->SetDimensions(bbGetInputIn()->GetDimensions());
mimage->SetExtent(bbGetInputIn()->GetExtent());
mimage->SetOrigin(bbGetInputIn()->GetOrigin());
- //mimage->SetDimensions(sizeX,sizeY,sizeZ);
- //mimage->SetOrigin(0,0,0);
- //mimage->SetExtent( 0 , sizeX-1 , 0 , sizeY-1 , 0, sizeZ-1 );
- //mimage->SetWholeExtent( 0 , sizeX-1 , 0 , sizeY-1 , 0, sizeZ-1 );
- mimage->SetScalarTypeToUnsignedShort();
- //mimage->SetSpacing(spc);
+ mimage->SetScalarType( outputformat );
mimage->AllocateScalars();
-
-
- int i,j,k;
- int sizeLstPointR = bbGetInputlstPointR().size();
- int iAxe,sizeAxe=bbGetInputlstPointX().size();
- double rx,ry,rz;
- double r,rr;
+ int sizeLstPointR = bbGetInputlstPointR().size();
+ int iAxe,sizeAxe = bbGetInputlstPointX().size();
+ int ii;
+ int sizeImage = sizeX*sizeY*sizeZ;
unsigned short *p;
- int sizeImage = sizeX*sizeY*sizeZ;
- double px,py,pz,px1,py1,pz1,px2,py2,pz2;
// Clean image
p = (unsigned short*)mimage->GetScalarPointer (0, 0, 0);
- for ( i=0 ; i<sizeImage ; i++)
+ for ( ii=0 ; ii<sizeImage ; ii++)
{
*p = 0;
p++;
}
- for (iAxe=0 ; iAxe<sizeAxe-1; iAxe++)
+
+#pragma omp parallel for
+ for (iAxe=0 ; iAxe<sizeAxe; iAxe++)
{
- if (sizeLstPointR<iAxe)
+ int i,j,k;
+ double rx,ry,rz;
+ double r,rr;
+ double px,py,pz;
+ double px1,py1,pz1;
+ double px2,py2,pz2;
+ printf("AxeVolume %d/%d\n ",iAxe,sizeAxe);
+ if (iAxe<sizeLstPointR)
{
+ r = bbGetInputlstPointR()[ iAxe ]* invSpc[0];
+ } else {
if (bbGetInputlstPointR().size()>=1)
{
r = bbGetInputlstPointR()[ bbGetInputlstPointR().size()-1 ] * invSpc[0];
} else {
r = 1;
}
- } else {
- r = bbGetInputlstPointR()[ iAxe ]* invSpc[0];
}
px = bbGetInputlstPointX()[iAxe] * invSpc[0];
py = bbGetInputlstPointY()[iAxe] * invSpc[1];
ry = ry*ry;
for ( k=pz1 ; k<pz2 ; k++ )
{
- if ( (i>=0) && (i<sizeX) && (j>=0) && (j<sizeY) &&(k>=0) && (k<sizeZ) ){
- p = (unsigned short*)mimage->GetScalarPointer (i, j, k);
- if (*p==0)
+ if ( (i>=0) && (i<sizeX) && (j>=0) && (j<sizeY) &&(k>=0) && (k<sizeZ) )
+ {
+// p = (unsigned short*)mimage->GetScalarPointer (i, j, k);
+// if (*p==0)
+ if ( mimage->GetScalarComponentAsDouble(i,j,k,0)==0 )
{
rz = k - pz;
rz = rz*rz;
if ( rx + ry + rz <= rr )
{
- *p=255;
+// *p=255;
+ mimage->SetScalarComponentFromDouble (i,j,k,0, bbGetInputValue() );
}
} // *p==0
- } // inside point
+ } // if inside point
} //for k
} //for j
} //for i
} // for iAxe
bbSetOutputOut( mimage );
-
- printf("EED AxeVolume::Process end \n");
-
}
void AxeVolume::bbUserSetDefaultValues()
{
mimage=NULL;
+ bbSetInputOutputFormat("SAME");
+ bbSetInputValue(255);
}
//-----------------------------------------------------------------