//=====
#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()) )
+ {
+ vtkImageThresholdConnectivity *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)
+ {
+ filter->ThresholdBetween( bbGetInputThreshold()[0] , bbGetInputThreshold()[1] );
+ } 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);
-
+ 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
-
}
+
+
+//=========================================================================
+void ImageThresholdConnectivity::bbSetStatusAndPropagate(BlackBoxInputConnector* c, IOStatus s)
+{
+ bbtkBlackBoxDebugMessage("change",5,
+ "=> BlackBox::bbSetStatusAndPropagate(input,"
+ <<GetIOStatusString(s)<<")"
+ <<std::endl);
+
+ if (s==UPTODATE) bbtkError("bbSetStatusAndPropagate with status UPTODATE!");
+ c->SetStatus(s);
+
+ // Flash reaction
+ /*
+ if (bbGetBoxProcessModeValue() == Flash)
+ {
+ this->bbExecute();
+ }
+ */
+
+
+ OutputConnectorMapType::const_iterator o;
+ for ( o = bbGetOutputConnectorMap().begin();
+ o != bbGetOutputConnectorMap().end(); ++o )
+ {
+
+
+ if (o->first=="BoxChange")
+ {
+ o->second->SetStatus(UPTODATE);
+ }
+
+
+
+//EED 24/08/2015
+// EED CASPITAS 2
+ if (o->second->GetStatus()==UPTODATE)
+// if ((o->second->GetStatus()==UPTODATE) || (o->second->GetStatus()==OUTOFDATE))
+// if ((o->second->GetStatus()==UPTODATE) || (o->second->GetStatus()==MODIFIED))
+ {
+ o->second->SetStatus(OUTOFDATE);
+ o->second->SignalChange(GetThisPointer<BlackBox>(),o->first);
+ } // if
+ } // for
+
+
+ if ( ( bbBoxProcessModeIsReactive()
+ || (c==bbGetInputConnectorMap().find("BoxExecute")->second))
+ && (bbCanReact() ) )
+ {
+ bbtkBlackBoxDebugMessage("change",2,
+ "-> Execution triggered by Reactive mode or BoxExecute input change"<<std::endl);
+ bbGlobalAddToExecutionList( GetThisPointer<BlackBox>() );
+ } // if
+ bbtkBlackBoxDebugMessage("change",5,
+ "<= BlackBox::bbSetStatusAndPropagate(input)"
+ <<std::endl);
}
-// EO namespace bbcreaVtk
+//=========================================================================
+
+
+
+
+}// EO namespace bbcreaVtk