]> SALOME platform Git repositories - tools/medcoupling.git/commitdiff
Salome HOME
Addition of characteristic value between 0 and 1 for inside points.
authorageay <ageay>
Fri, 17 Feb 2012 12:22:58 +0000 (12:22 +0000)
committerageay <ageay>
Fri, 17 Feb 2012 12:22:58 +0000 (12:22 +0000)
src/INTERP_KERNEL/Geometric2D/InterpKernelGeo2DEdge.cxx
src/INTERP_KERNEL/Geometric2D/InterpKernelGeo2DEdge.hxx
src/INTERP_KERNEL/Geometric2D/InterpKernelGeo2DEdgeArcCircle.cxx
src/INTERP_KERNEL/Geometric2D/InterpKernelGeo2DEdgeArcCircle.hxx
src/INTERP_KERNEL/Geometric2D/InterpKernelGeo2DEdgeLin.cxx
src/INTERP_KERNEL/Geometric2D/InterpKernelGeo2DEdgeLin.hxx

index ac1f191a06e118627a5f954ce7932638653db644..43ba9fdd3a9dfc558de785d636f678d8790c5e03 100644 (file)
@@ -870,12 +870,13 @@ void Edge::sortIdsAbs(const std::vector<INTERP_KERNEL::Node *>& addNodes, const
   b.getBarycenter(xBary,yBary);
   for(std::vector<Node *>::const_iterator iter=addNodes.begin();iter!=addNodes.end();iter++)
     (*iter)->applySimilarity(xBary,yBary,dimChar);
+  applySimilarity(xBary,yBary,dimChar);
   _start->applySimilarity(xBary,yBary,dimChar);
   _end->applySimilarity(xBary,yBary,dimChar);
   std::size_t sz=addNodes.size();
   std::vector< std::pair<double,Node *> > an2(sz);
   for(std::size_t i=0;i<sz;i++)
-    an2[i]=std::pair<double,Node *>(getCharactValue(*addNodes[i]),addNodes[i]);
+    an2[i]=std::pair<double,Node *>(getCharactValueBtw0And1(*addNodes[i]),addNodes[i]);
   std::sort(an2.begin(),an2.end());
   int startId=(*mapp1.find(_start)).second;
   int endId=(*mapp1.find(_end)).second;
index 9f2a1070322235c329083405bbb4f73261c63bcd..f8ec78822fd8f83dd9577fea51ceb52510a197f0 100644 (file)
@@ -243,6 +243,8 @@ namespace INTERP_KERNEL
     virtual bool isLower(double val1, double val2) const = 0;
     //! node is expected to lay on 'this'. It returns a characteristic magnitude usable by isIn method.
     virtual double getCharactValue(const Node& node) const = 0;
+    //! node is expected to lay on 'this'. It returns a characteristic magnitude between 0 and 1.
+    virtual double getCharactValueBtw0And1(const Node& node) const = 0;
     //! retrieves the distance to this : The min distance from pt and any point of this.
     virtual double getDistanceToPoint(const double *pt) const = 0;
     //! return if node with coords 'coordOfNode' is on this (with precision).
index 7f222096385e26a244c85f1ca33a3fdc3ce86f7a..8c6343740f4699767b4d7e71c47330bed3f8de1e 100644 (file)
@@ -674,6 +674,20 @@ double EdgeArcCircle::getCharactValue(const Node& node) const
   return GetAbsoluteAngleOfNormalizedVect(dx,dy);
 }
 
+double EdgeArcCircle::getCharactValueBtw0And1(const Node& node) const
+{
+  double dx=(node[0]-_center[0])/_radius;
+  double dy=(node[1]-_center[1])/_radius;
+  double angle=GetAbsoluteAngleOfNormalizedVect(dx,dy);
+  //
+  double myDelta=angle-_angle0;
+  if(_angle>0.)
+    myDelta=myDelta>=0.?myDelta:myDelta+2.*M_PI;
+  else
+    myDelta=myDelta<=0.?myDelta:myDelta-2.*M_PI;
+  return myDelta/_angle;
+}
+
 double EdgeArcCircle::getDistanceToPoint(const double *pt) const
 {
   double angle=Node::computeAngle(_center,pt);
index 582631fe85a7ec3d203bfa3523723a18d2a56a37..3c3e48fbe6571e492c8e67887132a11193a66094 100644 (file)
@@ -82,6 +82,7 @@ namespace INTERP_KERNEL
     Node *buildRepresentantOfMySelf() const;
     bool isLower(double val1, double val2) const;
     double getCharactValue(const Node& node) const;
+    double getCharactValueBtw0And1(const Node& node) const;
     double getDistanceToPoint(const double *pt) const;
     bool isNodeLyingOn(const double *coordOfNode) const;
     TypeOfFunction getTypeOfFunc() const { return ARC_CIRCLE; }
index 455115de8440180d458f7919d3e121490637ee9e..a61d85ec18d8bce1cfbb345e4bff3312716d82b7 100644 (file)
@@ -180,6 +180,11 @@ double EdgeLin::getCharactValue(const Node& node) const
   return getCharactValueEng(node);
 }
 
+double EdgeLin::getCharactValueBtw0And1(const Node& node) const
+{
+  return getCharactValueEng(node);
+}
+
 double EdgeLin::getDistanceToPoint(const double *pt) const
 {
   double loc=getCharactValueEng(pt);
index a5ece3cb45dd3b025d40644a26363c29bf92088c..299e98bf92a399a7cac250a08a73e0327ccbdc08 100644 (file)
@@ -63,6 +63,7 @@ namespace INTERP_KERNEL
     bool isIn(double characterVal) const;
     Node *buildRepresentantOfMySelf() const;
     double getCharactValue(const Node& node) const;
+    double getCharactValueBtw0And1(const Node& node) const;
     double getDistanceToPoint(const double *pt) const;
     bool isNodeLyingOn(const double *coordOfNode) const;
     bool isLower(double val1, double val2) const { return val1<val2; }