X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=blobdiff_plain;f=bbtk_creaVtk_PKG%2Fsrc%2FbbcreaVtkMeshDeformation.cxx;h=b737afbf935b36cdb643ca437477bd8b259cd056;hb=refs%2Fheads%2Fvtk9itk5wx3-macos;hp=3fac0f90d851f8ab9d628e89cea451159796c259;hpb=970a183246a4df7f29e583846745086c5b9f7090;p=creaVtk.git diff --git a/bbtk_creaVtk_PKG/src/bbcreaVtkMeshDeformation.cxx b/bbtk_creaVtk_PKG/src/bbcreaVtkMeshDeformation.cxx index 3fac0f9..b737afb 100644 --- a/bbtk_creaVtk_PKG/src/bbcreaVtkMeshDeformation.cxx +++ b/bbtk_creaVtk_PKG/src/bbcreaVtkMeshDeformation.cxx @@ -13,7 +13,6 @@ BBTK_BLACK_BOX_IMPLEMENTATION(MeshDeformation,bbtk::AtomicBlackBox); //===== 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 @@ -27,37 +26,68 @@ void MeshDeformation::Process() // (the one provided in the attribute 'type' of the tag 'input') // bbSetOutputOut( bbGetInputIn() ); // std::cout << "Output value = " < 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 ; iGetPoint(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)) ) @@ -65,42 +95,38 @@ void MeshDeformation::Process() 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;iGetPoint( 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;iSetPoint( 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) @@ -110,7 +136,9 @@ void MeshDeformation::bbUserSetDefaultValues() // 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 direction; direction.push_back(1); direction.push_back(0); @@ -119,7 +147,12 @@ void MeshDeformation::bbUserSetDefaultValues() 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) //===== @@ -133,19 +166,18 @@ void MeshDeformation::bbUserInitializeProcessing() } + //===== // 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