//=====
void MeshDeformation::Process()
{
-
// THE MAIN PROCESSING METHOD BODY
// Here we simply set the input 'In' value to the output 'Out'
// And print out the output value
// (the one provided in the attribute 'type' of the tag 'input')
// bbSetOutputOut( bbGetInputIn() );
// std::cout << "Output value = " <<bbGetOutputOut() << std::endl;
-
-
- double s = bbGetInputS();
- bool ok=true;
- if (bbGetInputDirection().size()==3)
+
+ std::vector<double> lstCenter = bbGetInputCenter();
+ double s = bbGetInputS();
+ 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
double pb[3]; // point base
double np[3]; // new point
double sx,sy,sz;
- sx = s*2;
- sy = sx;
- sz = sy;
+ sx = s*4;
+ sy = s*4;
+ sz = s*4;
+ double displcement_x = 0;
+ double displcement_y = 0;
+ double displcement_z = 0;
+
+ if (bbGetInputTypeIn()==0) // Direction
+ {
+ displcement_x = bbGetInputDirection()[0];
+ displcement_y = bbGetInputDirection()[1];
+ displcement_z = bbGetInputDirection()[2];
+ } // if TypeIn 0 Direction
+
+ printf(" EED MeshDeformation::Process %ld %ld - %f %f %f \n", EdgeIdBack, bbGetInputEdgeId() , lstCenter[0],lstCenter[1],lstCenter[2] );
+
+ if (bbGetInputTypeIn()==1) // Center
+ {
+ 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
points->GetPoint( bbGetInputEdgeId() , pb );
-
if (EdgeIdBack!=bbGetInputEdgeId() )
{
- voiIdPoints.clear();
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
- double displcement_x = 0;
- double displcement_y = 0;
- double displcement_z = 0;
-
- if (bbGetInputDirection().size()==3)
- {
- displcement_x = bbGetInputDirection()[0];
- displcement_y = bbGetInputDirection()[1];
- displcement_z = bbGetInputDirection()[2];
- }
-
- 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));
+ backLstCenter[0] = lstCenter[0];
+ backLstCenter[1] = lstCenter[1];
+ backLstCenter[2] = lstCenter[2];
+ } // if EdgeIdBack
-// https://en.wikipedia.org/wiki/Generalized_normal_distribution
-// with Gama function
-
- double weight = exp(-distance * 1. / s);
- if (weight > 0.0001)
+ if ( !((displcement_x==0) &&(displcement_y==0) && (displcement_z==0)) )
+ {
+ size=voiIdPoints.size();
+ for (i=0;i<size;i++)
{
- 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();
- } // In != NULL
+ 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 ok active
}
//=====
// 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)
// 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)
//=====
void MeshDeformation::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