]> SALOME platform Git repositories - tools/medcoupling.git/commitdiff
Salome HOME
IntersectMesh with quadratic elements
authorageay <ageay>
Tue, 14 Feb 2012 13:23:19 +0000 (13:23 +0000)
committerageay <ageay>
Tue, 14 Feb 2012 13:23:19 +0000 (13:23 +0000)
src/INTERP_KERNEL/Geometric2D/InterpKernelGeo2DBounds.cxx
src/INTERP_KERNEL/Geometric2D/InterpKernelGeo2DBounds.hxx
src/INTERP_KERNEL/Geometric2D/InterpKernelGeo2DComposedEdge.cxx
src/INTERP_KERNEL/Geometric2D/InterpKernelGeo2DComposedEdge.hxx
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/InterpKernelGeo2DElementaryEdge.hxx
src/INTERP_KERNEL/Geometric2D/InterpKernelGeo2DQuadraticPolygon.cxx

index 5b90a06803f45a8ba0b570cdd7bca02eb85c3d97..64dd248186b7aa17bb3e69fa8ed3ab6853bbc57a 100644 (file)
@@ -74,6 +74,17 @@ void Bounds::applySimilarity(double xBary, double yBary, double dimChar)
   _y_max=(_y_max-yBary)/dimChar;
 }
 
+/*!
+ * See Node::unApplySimilarity to see signification of params.
+ */
+void Bounds::unApplySimilarity(double xBary, double yBary, double dimChar)
+{
+  _x_min=_x_min*dimChar+xBary;
+  _x_max=_x_max*dimChar+xBary;
+  _y_min=_y_min*dimChar+yBary;
+  _y_max=_y_max*dimChar+yBary;
+}
+
 void Bounds::getBarycenter(double& xBary, double& yBary) const
 {
   xBary=(_x_min+_x_max)/2.;
index c859ddeb74efbf9e58ceca928309c57b1225c56a..8bd084a88980b141c44d2ffbc3d449c7c31eef3f 100644 (file)
@@ -46,6 +46,7 @@ namespace INTERP_KERNEL
     double getDiagonal() const;
     void getBarycenter(double& xBary, double& yBary) const;
     void applySimilarity(double xBary, double yBary, double dimChar);
+    void unApplySimilarity(double xBary, double yBary, double dimChar);
     Bounds& operator=(const Bounds& other) { _x_min=other._x_min; _x_max=other._x_max; _y_min=other._y_min; _y_max=other._y_max; return *this; }
     Bounds(double xMin, double xMax, double yMin, double yMax):_x_min(xMin),_x_max(xMax),_y_min(yMin),_y_max(yMax) { }
     void setValues(double xMin, double xMax, double yMin, double yMax) { _x_min=xMin; _x_max=xMax; _y_min=yMin; _y_max=yMax; }
index fa32b10b1e9890d0e7b2d40f1f4503581d147747..b960f0aa0fb17125cff8a28aef18ddd3d659822f 100644 (file)
@@ -243,6 +243,20 @@ double ComposedEdge::normalize(ComposedEdge *other, double& xBary, double& yBary
   return dimChar;
 }
 
+/*!
+ * This method operates the opposite operation than ComposedEdge::applyGlobalSimilarity.
+ */
+void ComposedEdge::unApplyGlobalSimilarityExt(ComposedEdge& other, double xBary, double yBary, double fact)
+{
+  std::set<Node *> allNodes;
+  getAllNodes(allNodes);
+  other.getAllNodes(allNodes);
+  for(std::set<Node *>::iterator iter=allNodes.begin();iter!=allNodes.end();iter++)
+    (*iter)->unApplySimilarity(xBary,yBary,fact);
+  for(std::list<ElementaryEdge *>::iterator iter=_sub_edges.begin();iter!=_sub_edges.end();iter++)
+    (*iter)->unApplySimilarity(xBary,yBary,fact);
+}
+
 double ComposedEdge::normalizeExt(ComposedEdge *other, double& xBary, double& yBary)
 {
   Bounds b;
index 1738b353c29b077bb6297a513ce1b11786f1a9fb..0842387931bcac19ed31acf01b296aaca3ab9aa3 100644 (file)
@@ -58,6 +58,7 @@ namespace INTERP_KERNEL
     void getBarycenterGeneral(double *bary) const;
     double normalize(ComposedEdge *other, double& xBary, double& yBary);
     double normalizeExt(ComposedEdge *other, double& xBary, double& yBary);
+    void unApplyGlobalSimilarityExt(ComposedEdge& other, double xBary, double yBary, double fact);
     void fillBounds(Bounds& output) const;
     void applySimilarity(double xBary, double yBary, double dimChar);
     void applyGlobalSimilarity(double xBary, double yBary, double dimChar);
index e3178aef59ff0db350599eb63634ad10b0929778..155f59070e7c4c0dec1577653e7b65f11ce90c36 100644 (file)
@@ -671,6 +671,11 @@ void Edge::applySimilarity(double xBary, double yBary, double dimChar)
   _bounds.applySimilarity(xBary,yBary,dimChar);
 }
 
+void Edge::unApplySimilarity(double xBary, double yBary, double dimChar)
+{
+  _bounds.unApplySimilarity(xBary,yBary,dimChar);
+}
+
 bool Edge::Intersect(const Edge *f1, const Edge *f2, EdgeIntersector *intersector, const Bounds *whereToFind, MergePoints& commonNode,
                      ComposedEdge& outValForF1, ComposedEdge& outValForF2)
 {
index cdd81b2c26798ee4bb1863b66b7afb9477339620..27f634cc979929fd39eeebe60a8c156d4b405898 100644 (file)
@@ -229,6 +229,8 @@ namespace INTERP_KERNEL
     virtual double getAreaOfZone() const = 0;
     //! apply a similiraty transformation on 'this'
     virtual void applySimilarity(double xBary, double yBary, double dimChar);
+    //! apply the inverse similiraty transformation on 'this'
+    virtual void unApplySimilarity(double xBary, double yBary, double dimChar);
     //! return the length of arc. Value is always > 0. !
     virtual double getCurveLength() const = 0;
     virtual void getBarycenter(double *bary) const = 0;
index 640f5b122d4b071767cc165e6d1583accb70b2b7..9cadd5ea156ee3e7234584163cc11e061e8555ab 100644 (file)
@@ -435,6 +435,14 @@ void EdgeArcCircle::applySimilarity(double xBary, double yBary, double dimChar)
   _center[1]=(_center[1]-yBary)/dimChar;
 }
 
+void EdgeArcCircle::unApplySimilarity(double xBary, double yBary, double dimChar)
+{
+  Edge::applySimilarity(xBary,yBary,dimChar);
+  _radius*=dimChar;
+  _center[0]=_center[0]*dimChar+xBary;
+  _center[1]=_center[1]*dimChar+yBary;
+}
+
 /*!
  * Given an \b NON normalized vector 'vect', returns its norm 'normVect' and its
  * angle in ]-Pi,Pi] relative to Ox axe.
index 7d546f15e8da49d471af3d7807ea1530a31aa53f..fb2efdc4114657ab0b51f4e81c1b664c2ba58ff6 100644 (file)
@@ -91,6 +91,7 @@ namespace INTERP_KERNEL
     void getCenter(double *center) const { center[0]=_center[0]; center[1]=_center[1]; }
     bool doIHaveSameDirectionAs(const Edge& other) const { return false; }
     void applySimilarity(double xBary, double yBary, double dimChar);
+    void unApplySimilarity(double xBary, double yBary, double dimChar);
     double getAngle0() const { return _angle0; }
     double getRadius() const { return _radius; }
     double getAngle() const { return _angle; }
index 4547917befa953352641ce9f501255012b8361ae..7a2cf1f238015370c9891e86fe20281927aff017 100644 (file)
@@ -47,6 +47,7 @@ namespace INTERP_KERNEL
     void getBarycenterOfZone(double *bary) const;
     void fillBounds(Bounds& output) const;
     void applySimilarity(double xBary, double yBary, double dimChar) { _ptr->applySimilarity(xBary,yBary,dimChar); }
+    void unApplySimilarity(double xBary, double yBary, double dimChar) { _ptr->unApplySimilarity(xBary,yBary,dimChar); }
     void getAllNodes(std::set<Node *>& output) const;
     void getBarycenter(double *bary, double& weigh) const;
     ElementaryEdge *clone() const;
index e2484bc186c8411a84625e1b3f810afa04b326f8..d98427222e80c2acd4a045accfa7018170fb1ddd 100644 (file)
@@ -343,7 +343,7 @@ void QuadraticPolygon::appendEdgeFromCrudeDataArray(std::size_t edgePos, const s
          }
        else
          {
-           Edge *e=new EdgeArcCircle(st0,middle0,endd0,direct);
+           Edge *e=new EdgeArcCircle(st0,middle0,endd0,true);
            for(std::size_t j=0;j<nbOfSubEdges;j++)
              appendSubEdgeFromCrudeDataArray(e,j,direct,edgeId,subEdge,mapp);
            e->decrRef();
@@ -496,6 +496,7 @@ void QuadraticPolygon::buildPartitionsAbs(QuadraticPolygon& other, const std::ma
       nbOther.push_back(idOther);
       delete *it;
     }
+  unApplyGlobalSimilarityExt(other,xBaryBB,yBaryBB,fact);
 }
 
 /*!