]> SALOME platform Git repositories - tools/medcoupling.git/commitdiff
Salome HOME
Ze solution ?
authorAnthony Geay <anthony.geay@edf.fr>
Wed, 1 Feb 2017 16:11:06 +0000 (17:11 +0100)
committerAnthony Geay <anthony.geay@edf.fr>
Wed, 1 Feb 2017 16:13:05 +0000 (17:13 +0100)
src/INTERP_KERNEL/Geometric2D/InterpKernelGeo2DComposedEdge.cxx
src/INTERP_KERNEL/Geometric2D/InterpKernelGeo2DComposedEdge.hxx

index 1212c73cec4dda86d8c1b82561360496002ce871..226ff2ccbd24e104a9caddd4eaf98596f8e9526a 100644 (file)
@@ -512,7 +512,9 @@ bool ComposedEdge::isInOrOut(Node *nodeToTest) const
   if(b.nearlyWhere((*nodeToTest)[0],(*nodeToTest)[1])==OUT)
     return false;
   std::set< IntersectElement > inOutSwitch;
-  double ref(isInOrOutAlg(nodeToTest,inOutSwitch));
+  std::set<Node *> nodes;
+  getAllNodes(nodes);
+  double ref(isInOrOutAlg(nodeToTest,nodes,inOutSwitch));
   bool ret(false);
   for(std::set< IntersectElement >::iterator iter4=inOutSwitch.begin();iter4!=inOutSwitch.end();iter4++)
     {
@@ -536,7 +538,12 @@ bool ComposedEdge::isInOrOut(Node *nodeToTest) const
 bool ComposedEdge::isInOrOut2(Node *nodeToTest) const
 {
   std::set< IntersectElement > inOutSwitch;
-  double ref(isInOrOutAlg(nodeToTest,inOutSwitch));
+  std::set<Node *> nodes;
+  getAllNodes(nodes);
+  for(std::set<Node *>::const_iterator iter=nodes.begin();iter!=nodes.end();iter++)
+    if(sqrt((*iter)->distanceWithSq(*nodeToTest))<QUADRATIC_PLANAR::_precision)
+      return true;
+  double ref(isInOrOutAlg(nodeToTest,nodes,inOutSwitch));
   bool ret(false);
   for(std::set< IntersectElement >::iterator iter4=inOutSwitch.begin();iter4!=inOutSwitch.end();iter4++)
     {
@@ -557,11 +564,9 @@ bool ComposedEdge::isInOrOut2(Node *nodeToTest) const
   return ret;
 }
 
-double ComposedEdge::isInOrOutAlg(Node *nodeToTest, std::set< IntersectElement >& inOutSwitch) const
+double ComposedEdge::isInOrOutAlg(Node *nodeToTest, const std::set<Node*>& nodes, std::set< IntersectElement >& inOutSwitch) const
 {
   // searching for e1
-  std::set<Node *> nodes;
-  getAllNodes(nodes);
   std::set<double> radialDistributionOfNodes;
   std::set<Node *>::const_iterator iter;
   for(iter=nodes.begin();iter!=nodes.end();iter++)
@@ -607,52 +612,6 @@ double ComposedEdge::isInOrOutAlg(Node *nodeToTest, std::set< IntersectElement >
   return ref;
 }
 
-/*bool ComposedEdge::isInOrOut(Node *aNodeOn, Node *nodeToTest) const
-{
-
-  EdgeInfLin *e1=new EdgeInfLin(aNodeOn,nodeToTest);
-  double ref=e1->getCharactValue(*nodeToTest);
-  set< IntersectElement > inOutSwitch;
-  for(vector<AbstractEdge *>::const_iterator iter=_sub_edges.begin();iter!=_sub_edges.end();iter++)
-    {
-      ElementaryEdge *val=dynamic_cast<ElementaryEdge *>(*iter);
-      if(val)
-        {
-          Edge *e=val->getPtr();
-          auto_ptr<Intersector> intersc(Edge::buildIntersectorWith(e1,e));
-          bool obviousNoIntersection,areOverlapped;
-          intersc->areOverlappedOrOnlyColinears(0,obviousNoIntersection,areOverlapped);
-          if(obviousNoIntersection)
-            {
-              continue;
-            }
-          if(!areOverlapped)
-            {
-              list< IntersectElement > listOfIntesc=intersc->getIntersectionsCharacteristicVal();
-              for(list< IntersectElement >::iterator iter2=listOfIntesc.begin();iter2!=listOfIntesc.end();iter2++)
-                if((*iter2).isIncludedByBoth())
-                  inOutSwitch.insert(*iter2);
-              }
-          //if overlapped we can forget
-        }
-      else
-        throw Exception("Invalid use of ComposedEdge::isInOrOut : only one level supported !");
-    }
-  e1->decrRef();
-  bool ret=false;
-  for(set< IntersectElement >::iterator iter=inOutSwitch.begin();iter!=inOutSwitch.end();iter++)
-    {
-      if((*iter).getVal1()<ref)
-        {
-          if((*iter).getNodeOnly()->getLoc()==ON_1)
-            ret=!ret;
-        }
-      else
-        break;
-    }
-  return ret;
-}*/
-
 bool ComposedEdge::getDirection() const
 {
   throw Exception("ComposedEdge::getDirection : no sense");
index 6d43873afce45f2a139b453c20185ac8e6a63d93..a475986e194e89dd257d06b6ca37b22e11d22d2d 100644 (file)
@@ -111,7 +111,7 @@ namespace INTERP_KERNEL
     INTERPKERNEL_EXPORT bool intresincEqCoarse(const Edge *other) const;
   private:
     std::list<ElementaryEdge *>* getListBehind() { return &_sub_edges; }
-    double isInOrOutAlg(Node *nodeToTest, std::set< IntersectElement >& inOutSwitch) const;
+    double isInOrOutAlg(Node *nodeToTest, const std::set<Node*>& nodes, std::set< IntersectElement >& inOutSwitch) const;
   protected:
     ~ComposedEdge();
   private: