- 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