//=====
#include "bbcreaVtkImageThresholdConnectivity.h"
#include "bbcreaVtkPackage.h"
+#include "vtkImageThresholdConnectivity.h"
+#include "vtkPoints.h"
+
namespace bbcreaVtk
{
//=====
void ImageThresholdConnectivity::Process()
{
-
// THE MAIN PROCESSING METHOD BODY
// Here we simply set the input 'In' value to the output 'Out'
// And print out the output value
// * TYPE is the C++ type of the input/output
// (the one provided in the attribute 'type' of the tag 'input')
-
- printf("EED ImageThresholdConnectivity::Process Error this box is not implemented .... \n");
- printf("EED ImageThresholdConnectivity::Process Error this box is not implemented .... \n");
- printf("EED ImageThresholdConnectivity::Process Error this box is not implemented .... \n");
- printf("EED ImageThresholdConnectivity::Process Error this box is not implemented .... \n");
+ std::vector<int> lstX;
+ std::vector<int> lstY;
+ std::vector<int> lstZ;
+ std::vector<int> point = bbGetInputPoint();
+
+ if (bbGetInputPoint().size()==3)
+ {
+ lstX.push_back( point[0] );
+ lstY.push_back( point[1] );
+ lstZ.push_back( point[2] );
+ } else {
+ lstX = bbGetInputLstX();
+ lstY = bbGetInputLstY();
+ lstZ = bbGetInputLstZ();
+ }
+
+ if ( (bbGetInputIn()!=NULL) && (lstX.size()>0) && (lstX.size()==lstY.size()) && (lstX.size()==lstZ.size()) )
+ {
+ if (filter!=NULL) { filter->Delete(); }
+ filter = vtkImageThresholdConnectivity::New();
+ double spc[3];
+ bbGetInputIn()->GetSpacing(spc);
+ int border = bbGetInputBorder();
+ int minX = 32000;
+ int minY = 32000;
+ int minZ = 32000;
+ int maxX = -32000;
+ int maxY = -32000;
+ int maxZ = -32000;
+ int i,size = lstX.size();
+ double p[3];
+ vtkPoints *points = vtkPoints::New();
+ for (i=0; i<size; i++)
+ {
+ p[0] = lstX[i]*spc[0];
+ p[1] = lstY[i]*spc[1];
+ p[2] = lstZ[i]*spc[2];
+ points->InsertNextPoint(p);
+ if ( lstX[i] < minX ) { minX = lstX[i]; }
+ if ( lstY[i] < minY ) { minY = lstY[i]; }
+ if ( lstZ[i] < minZ ) { minZ = lstZ[i]; }
+ if ( lstX[i] > maxX ) { maxX = lstX[i]; }
+ if ( lstY[i] > maxY ) { maxY = lstY[i]; }
+ if ( lstZ[i] > maxZ ) { maxZ = lstZ[i]; }
+ } // for i
+ filter->SetSeedPoints( points );
+ filter->SetInputData( bbGetInputIn() );
+ if (bbGetInputThreshold().size()==2)
+ {
+ if ( bbGetInputThreshold()[0] < bbGetInputThreshold()[1] )
+ {
+ filter->ThresholdBetween( bbGetInputThreshold()[0] , bbGetInputThreshold()[1] );
+ } else {
+ filter->ThresholdBetween( bbGetInputThreshold()[1] , bbGetInputThreshold()[0] );
+ }// if Thershold min max
+ } else {
+ filter->ThresholdBetween( 0, 100 );
+ }// if Thershold size
+
+ // filter->SetNeighborhoodRadius (4, 4, 4 );
+ filter->SetInValue(255);
+ filter->SetOutValue(0);
+ // filter->ReplaceInOn();
+ // filter->ReplaceOutOn();
+ filter->SetSliceRangeX(minX-border,maxX+border);
+ filter->SetSliceRangeY(minY-border,maxY+border);
+ filter->SetSliceRangeZ(minZ-border,maxZ+border);
+ filter->Update();
+ bbSetOutputOut( filter->GetOutput() );
+ } else {
+ bbSetOutputOut( NULL );
+ }// if lst
}
//=====
// Before editing this file, make sure it's a file of your own (i.e.: it wasn't generated from xml description; if so : your modifications will be lost)
//=====
void ImageThresholdConnectivity::bbUserSetDefaultValues()
{
-
// SET HERE THE DEFAULT INPUT/OUTPUT VALUES OF YOUR BOX
// Here we initialize the input 'In' to 0
- bbSetInputIn(NULL);
-
+ filter=NULL;
+ bbSetInputIn(NULL);
+ bbSetInputBorder(10);
+ std::vector<double> maskValue;
+ maskValue.push_back(0);
+ maskValue.push_back(255);
+ bbSetInputMaskValue(maskValue);
}
+
//=====
// Before editing this file, make sure it's a file of your own (i.e.: it wasn't generated from xml description; if so : your modifications will be lost)
//=====
void ImageThresholdConnectivity::bbUserInitializeProcessing()
{
-
// THE INITIALIZATION METHOD BODY :
// Here does nothing
// but this is where you should allocate the internal/output pointers
-// if any
-
-
+// if any
}
+
//=====
// Before editing this file, make sure it's a file of your own (i.e.: it wasn't generated from xml description; if so : your modifications will be lost)
//=====
void ImageThresholdConnectivity::bbUserFinalizeProcessing()
{
-
// THE FINALIZATION METHOD BODY :
// Here does nothing
// but this is where you should desallocate the internal/output pointers
// if any
-
-}
}
-// EO namespace bbcreaVtk
+
+}// EO namespace bbcreaVtk