// (the one provided in the attribute 'type' of the tag 'input')
// bbSetOutputOut( bbGetInputIn() );
// std::cout << "Output value = " <<bbGetOutputOut() << std::endl;
-
-
+
+ std::vector<double> lstCenter = bbGetInputCenter();
+
double s = bbGetInputS();
- bool ok=true;
- if (bbGetInputDirection().size()==3)
+ bool ok=false;
+ if (bbGetInputTypeIn()==0) // direction
{
- ok = !( (bbGetInputDirection()[0]==0) && (bbGetInputDirection()[1]==0) && (bbGetInputDirection()[2]==0) );
- }
- if ( (bbGetInputIn()!=NULL) && (ok==true) && (bbGetInputEdgeId()>=0))
+ if (bbGetInputDirection().size()==3)
+ {
+ ok = !( (bbGetInputDirection()[0]==0) && (bbGetInputDirection()[1]==0) && (bbGetInputDirection()[2]==0) );
+ }
+ } // if TypeIn 0
+
+ if (bbGetInputTypeIn()==1) // center
{
+ ok = ( lstCenter.size()==3 );
+ } // if TypeIn 1
+ if ( (bbGetInputIn()!=NULL) && (ok==true) && (bbGetInputEdgeId()>=0) && (bbGetInputActive()==true) )
+ {
vtkPoints* points=bbGetInputIn()->GetPoints();
long i,size=points->GetNumberOfPoints();
double p[3]; // point
sy = sx;
sz = sy;
- points->GetPoint( bbGetInputEdgeId() , pb );
-
- if (EdgeIdBack!=bbGetInputEdgeId() )
- {
- voiIdPoints.clear();
- EdgeIdBack = bbGetInputEdgeId();
- for ( i=0 ; i<size ; i++)
- {
- points->GetPoint(i,p);
-
- if ( (p[0]>(pb[0]-sx)) && (p[0]<(pb[0]+sx)) &&
- (p[1]>(pb[1]-sy)) && (p[1]<(pb[1]+sy)) &&
- (p[2]>(pb[2]-sz)) && (p[2]<(pb[2]+sz)) )
- {
- voiIdPoints.push_back( i );
- } // if
- } // for i
- } // back
double displcement_x = 0;
double displcement_y = 0;
double displcement_z = 0;
- if (bbGetInputDirection().size()==3)
+ if (bbGetInputTypeIn()==0) // Direction
{
displcement_x = bbGetInputDirection()[0];
displcement_y = bbGetInputDirection()[1];
displcement_z = bbGetInputDirection()[2];
- }
+ } // if TypeIn 0 Direction
- size=voiIdPoints.size();
- for (i=0;i<size;i++)
+ if (bbGetInputTypeIn()==1) // Center
{
- points->GetPoint( voiIdPoints[i] , p );
- double x = p[0] - pb[0]; //distance between a point and seed point
- double y = p[1] - pb[1];
- double z = p[2] - pb[2];
- double distance = std::sqrt(std::pow(x, 2) + std::pow(y, 2) + std::pow(z, 2));
+ if (EdgeIdBack==bbGetInputEdgeId() )
+ {
+ displcement_x = (lstCenter[0]-backLstCenter[0])/1.0;
+ displcement_y = (lstCenter[1]-backLstCenter[1])/1.0;
+ displcement_z = (lstCenter[2]-backLstCenter[2])/1.0;
+ } // if EdgeIdBack!=bbGetInputEdgeId()
+ backLstCenter[0]= lstCenter[0];
+ backLstCenter[1]= lstCenter[1];
+ backLstCenter[2]= lstCenter[2];
+ } // if TypeIn 1 Center
-// https://en.wikipedia.org/wiki/Generalized_normal_distribution
-// with Gama function
-
- double weight = exp(-distance * 1. / s);
- if (weight > 0.0001)
+
+ points->GetPoint( bbGetInputEdgeId() , pb );
+ if (EdgeIdBack!=bbGetInputEdgeId() )
{
- np[0] = p[0] + weight*displcement_x;
- np[1] = p[1] + weight*displcement_y;
- np[2] = p[2] + weight*displcement_z;
- points->SetPoint( voiIdPoints[i] , np );
- } // if
- } // for
- points->Modified();
- bbGetInputIn()->Modified();
+ EdgeIdBack = bbGetInputEdgeId();
+ voiIdPoints.clear();
+ for ( i=0 ; i<size ; i++)
+ {
+ points->GetPoint(i,p);
+ if ( (p[0]>(pb[0]-sx)) && (p[0]<(pb[0]+sx)) &&
+ (p[1]>(pb[1]-sy)) && (p[1]<(pb[1]+sy)) &&
+ (p[2]>(pb[2]-sz)) && (p[2]<(pb[2]+sz)) )
+ {
+ voiIdPoints.push_back( i );
+ } // if
+ } // for i
+ } // back
+
+ if ( !((displcement_x==0) &&(displcement_y==0) && (displcement_z==0)) )
+ {
+ size=voiIdPoints.size();
+ for (i=0;i<size;i++)
+ {
+ points->GetPoint( voiIdPoints[i] , p );
+ double x = p[0] - pb[0]; //distance between a point and seed point
+ double y = p[1] - pb[1];
+ double z = p[2] - pb[2];
+ double distance = std::sqrt(std::pow(x, 2) + std::pow(y, 2) + std::pow(z, 2));
+
+ // https://en.wikipedia.org/wiki/Generalized_normal_distribution
+ // with Gama function
+
+ double weight = exp(-distance * 1. / s);
+ if (weight > 0.0001)
+ {
+ np[0] = p[0] + weight*displcement_x;
+ np[1] = p[1] + weight*displcement_y;
+ np[2] = p[2] + weight*displcement_z;
+ points->SetPoint( voiIdPoints[i] , np );
+ } // if
+ } // for
+ points->Modified();
+ bbGetInputIn()->Modified();
+ } // if distance_x y z != 0
} // In != NULL
}
//=====
// SET HERE THE DEFAULT INPUT/OUTPUT VALUES OF YOUR BOX
// Here we initialize the input 'In' to 0
- bbSetInputIn(NULL);
+ bbSetInputActive(true);
+ bbSetInputTypeIn(0);
+ bbSetInputIn(NULL);
std::vector<double> direction;
direction.push_back(1);
direction.push_back(0);
EdgeIdBack=-1;
bbSetInputEdgeId(EdgeIdBack);
bbSetInputS(10);
+
+ backLstCenter.push_back(0);
+ backLstCenter.push_back(0);
+ backLstCenter.push_back(0);
}
//=====
// 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)
//=====
// 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)
//=====
+ BBTK_DECLARE_INPUT(Active, bool);
+ BBTK_DECLARE_INPUT(TypeIn, int);
BBTK_DECLARE_INPUT(In,vtkPolyData*);
BBTK_DECLARE_INPUT(EdgeId, long);
BBTK_DECLARE_INPUT(S, double);
+ BBTK_DECLARE_INPUT(Center, std::vector<double>);
BBTK_DECLARE_INPUT(Direction, std::vector<double>);
// BBTK_DECLARE_OUTPUT(Out,double);
BBTK_PROCESS(Process);
void Process();
long EdgeIdBack;
- std::vector<int> voiIdPoints;
-
+ std::vector<int> voiIdPoints;
+ std::vector<double> backLstCenter;
//=====
// 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)
//=====
BBTK_AUTHOR("Info-Dev");
BBTK_DESCRIPTION("No Description.");
BBTK_CATEGORY("empty");
+ BBTK_INPUT(MeshDeformation,Active,"(default true) true/false",bool,"");
+ BBTK_INPUT(MeshDeformation,TypeIn,"(default 0) 0:Direction 1:Center",int,"");
BBTK_INPUT(MeshDeformation,In,"vtk PolyData",vtkPolyData*,"");
BBTK_INPUT(MeshDeformation,EdgeId,"Edge Id",long,"");
BBTK_INPUT(MeshDeformation,S,"Deformation",double,"");
+ BBTK_INPUT(MeshDeformation,Center,"[X,Y,Z]",std::vector<double>,"");
BBTK_INPUT(MeshDeformation,Direction,"(default [1,0,0]) [X,Y,Z]",std::vector<double>,"");
// BBTK_OUTPUT(MeshDeformation,Out,"First output",double,"");
BBTK_END_DESCRIBE_BLACK_BOX(MeshDeformation);