Salome HOME
Improve swig generation process on Windows platform.
[tools/medcoupling.git] / src / INTERP_KERNEL / Geometric2D / InterpKernelGeo2DComposedEdge.cxx
index 444aefe3d90773f6dc8dd4849861b6ea6e8d6eff..226ff2ccbd24e104a9caddd4eaf98596f8e9526a 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2015  CEA/DEN, EDF R&D
+// Copyright (C) 2007-2016  CEA/DEN, EDF R&D
 //
 // This library is free software; you can redistribute it and/or
 // modify it under the terms of the GNU Lesser General Public
@@ -51,6 +51,7 @@ void ComposedEdge::setValueAt(int i, Edge *e, bool direction)
   *it=new ElementaryEdge(e,direction);
 }
 
+/*! \cond HIDDEN_ITEMS */
 struct AbsEdgeCmp
 {
   AbsEdgeCmp(ElementaryEdge *b):_b1(b) { }
@@ -58,6 +59,7 @@ struct AbsEdgeCmp
 
   ElementaryEdge *_b1;
 };
+/*! \endcond */
 
 double ComposedEdge::getCommonLengthWith(const ComposedEdge& other) const
 {
@@ -510,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++)
     {
@@ -534,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++)
     {
@@ -555,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++)
@@ -605,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");