X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FINTERP_KERNEL%2FGeometric2D%2FInterpKernelGeo2DComposedEdge.hxx;h=8d815c5016ffe70cc5b402f3e0795c7c4455af32;hb=92da77d8da6256ca824faa6bc87cd102a8d4ee17;hp=8fbf7bd2e8932a7091b6eac2dd782c5085d3f762;hpb=293a6104470482e450701aa8061d9b244f2057d5;p=tools%2Fmedcoupling.git diff --git a/src/INTERP_KERNEL/Geometric2D/InterpKernelGeo2DComposedEdge.hxx b/src/INTERP_KERNEL/Geometric2D/InterpKernelGeo2DComposedEdge.hxx index 8fbf7bd2e..8d815c501 100644 --- a/src/INTERP_KERNEL/Geometric2D/InterpKernelGeo2DComposedEdge.hxx +++ b/src/INTERP_KERNEL/Geometric2D/InterpKernelGeo2DComposedEdge.hxx @@ -1,9 +1,9 @@ -// Copyright (C) 2007-2012 CEA/DEN, EDF R&D +// Copyright (C) 2007-2014 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 // License as published by the Free Software Foundation; either -// version 2.1 of the License. +// version 2.1 of the License, or (at your option) any later version. // // This library is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of @@ -22,6 +22,7 @@ #define __INTERPKERNELGEO2DCOMPOSEDNODE_HXX__ #include "INTERPKERNELDefines.hxx" +#include "InterpKernelGeo2DEdge.hxx" #include #include @@ -36,62 +37,81 @@ namespace INTERP_KERNEL class ElementaryEdge; class IteratorOnComposedEdge; - class INTERPKERNEL_EXPORT ComposedEdge + /** + * A set of quadratic or linear edges, described mainly by their connectivity + * The set is assumed to be connected, but not necessarily closed (i.e. not necessarily forming a closed polygon). + * Some methods however requires a closed form. + */ + class ComposedEdge { friend class IteratorOnComposedEdge; public: - ComposedEdge() { } - ComposedEdge(const ComposedEdge& other); - ComposedEdge(int sz):_sub_edges(sz) { } - static void Delete(ComposedEdge *pt) { delete pt; } - static void SoftDelete(ComposedEdge *pt) { pt->_sub_edges.clear(); delete pt; } - void reverse(); - int recursiveSize() const { return (int)_sub_edges.size(); } - bool presenceOfOn() const; - bool presenceOfQuadraticEdge() const; - void initLocations() const; - ComposedEdge *clone() const; - bool isNodeIn(Node *n) const; - double getArea() const; - double getPerimeter() const; - double getHydraulicDiameter() const; - void getBarycenter(double *bary) const; - 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); - void applyGlobalSimilarity2(ComposedEdge *other, double xBary, double yBary, double dimChar); - void dispatchPerimeter(double& partConsidered) const; - void dispatchPerimeterExcl(double& partConsidered, double& commonPart) const; - double dispatchPerimeterAdv(const ComposedEdge& father, std::vector& result) const; - void getAllNodes(std::set& output) const; - void getBarycenter(double *bary, double& weigh) const; - bool completed() const { return getEndNode()==getStartNode(); } - void setValueAt(int i, Edge *e, bool direction=true); - double getCommonLengthWith(const ComposedEdge& other) const; - void clear(); - bool empty() const { return _sub_edges.empty(); } - ElementaryEdge *front() const { return _sub_edges.front(); } - ElementaryEdge *back() const { return _sub_edges.back(); } - void resize(int i) { _sub_edges.resize(i); } - void pushBack(Edge *edge, bool direction=true); - void pushBack(ElementaryEdge *elem); - void pushBack(ComposedEdge *elem); - int size() const { return (int)_sub_edges.size(); } - ElementaryEdge *operator[](int i) const; - Node *getEndNode() const; - Node *getStartNode() const; - bool changeEndNodeWith(Node *node) const; - bool changeStartNodeWith(Node *node) const; - void dumpInXfigFile(std::ostream& stream, int resolution, const Bounds& box) const; - bool isInOrOut(Node *nodeToTest) const; - bool getDirection() const; - bool intresincEqCoarse(const Edge *other) const; + INTERPKERNEL_EXPORT ComposedEdge() { } + INTERPKERNEL_EXPORT ComposedEdge(const ComposedEdge& other); + INTERPKERNEL_EXPORT ComposedEdge(int sz):_sub_edges(sz) { } + INTERPKERNEL_EXPORT static void Delete(ComposedEdge *pt) { delete pt; } + INTERPKERNEL_EXPORT static void SoftDelete(ComposedEdge *pt) { pt->_sub_edges.clear(); delete pt; } + INTERPKERNEL_EXPORT void reverse(); + INTERPKERNEL_EXPORT int recursiveSize() const { return (int)_sub_edges.size(); } + INTERPKERNEL_EXPORT bool presenceOfOn() const; + INTERPKERNEL_EXPORT bool presenceOfQuadraticEdge() const; + INTERPKERNEL_EXPORT void initLocations() const; + INTERPKERNEL_EXPORT static void InitLocationsWithOther(const ComposedEdge& first, const ComposedEdge& other); + INTERPKERNEL_EXPORT ComposedEdge *clone() const; + INTERPKERNEL_EXPORT bool isNodeIn(Node *n) const; + INTERPKERNEL_EXPORT double getArea() const; + INTERPKERNEL_EXPORT double getPerimeter() const; + INTERPKERNEL_EXPORT double getHydraulicDiameter() const; + INTERPKERNEL_EXPORT void getBarycenter(double *bary) const; + INTERPKERNEL_EXPORT void getBarycenterGeneral(double *bary) const; + INTERPKERNEL_EXPORT double normalizeMe(double& xBary, double& yBary); + INTERPKERNEL_EXPORT double normalize(ComposedEdge *other, double& xBary, double& yBary); + INTERPKERNEL_EXPORT double normalizeExt(ComposedEdge *other, double& xBary, double& yBary); + INTERPKERNEL_EXPORT void unApplyGlobalSimilarityExt(ComposedEdge& other, double xBary, double yBary, double fact); + INTERPKERNEL_EXPORT void fillBounds(Bounds& output) const; + INTERPKERNEL_EXPORT void applySimilarity(double xBary, double yBary, double dimChar); + INTERPKERNEL_EXPORT void applyGlobalSimilarity(double xBary, double yBary, double dimChar); + INTERPKERNEL_EXPORT void applyGlobalSimilarity2(ComposedEdge *other, double xBary, double yBary, double dimChar); + INTERPKERNEL_EXPORT void dispatchPerimeter(double& partConsidered) const; + INTERPKERNEL_EXPORT void dispatchPerimeterExcl(double& partConsidered, double& commonPart) const; + INTERPKERNEL_EXPORT double dispatchPerimeterAdv(const ComposedEdge& father, std::vector& result) const; + INTERPKERNEL_EXPORT void getAllNodes(std::set& output) const; + INTERPKERNEL_EXPORT void initNodeHitStatus() const; + INTERPKERNEL_EXPORT void applySimilarityOnMyNodes(double xBary, double yBary, double dimChar) const; + INTERPKERNEL_EXPORT void unApplySimilarityOnMyNodes(double xBary, double yBary, double dimChar) const; + INTERPKERNEL_EXPORT void applySimilarityOnMyNodesIfNotAlreadyHit(double xBary, double yBary, double dimChar) const; + INTERPKERNEL_EXPORT void unApplySimilarityOnMyNodesIfNotAlreadyHit(double xBary, double yBary, double dimChar) const; + INTERPKERNEL_EXPORT void initEdgeHitStatus() const; + INTERPKERNEL_EXPORT void applySimilarityOnMyEdges(double xBary, double yBary, double dimChar) const; + INTERPKERNEL_EXPORT void unApplySimilarityOnMyEdges(double xBary, double yBary, double dimChar) const; + INTERPKERNEL_EXPORT void applySimilarityOnMyEdgesIfNotAlreadyHit(double xBary, double yBary, double dimChar) const; + INTERPKERNEL_EXPORT void unApplySimilarityOnMyEdgesIfNotAlreadyHit(double xBary, double yBary, double dimChar) const; + INTERPKERNEL_EXPORT void getBarycenter(double *bary, double& weigh) const; + INTERPKERNEL_EXPORT bool completed() const { return getEndNode()==getStartNode(); } + INTERPKERNEL_EXPORT void setValueAt(int i, Edge *e, bool direction=true); + INTERPKERNEL_EXPORT double getCommonLengthWith(const ComposedEdge& other) const; + INTERPKERNEL_EXPORT void clear(); + INTERPKERNEL_EXPORT bool empty() const { return _sub_edges.empty(); } + INTERPKERNEL_EXPORT ElementaryEdge *front() const { return _sub_edges.front(); } + INTERPKERNEL_EXPORT ElementaryEdge *back() const { return _sub_edges.back(); } + INTERPKERNEL_EXPORT void resize(int i) { _sub_edges.resize(i); } + INTERPKERNEL_EXPORT void pushBack(Edge *edge, bool direction=true); + INTERPKERNEL_EXPORT void pushBack(ElementaryEdge *elem); + INTERPKERNEL_EXPORT void pushBack(ComposedEdge *elem); + INTERPKERNEL_EXPORT int size() const { return (int)_sub_edges.size(); } + INTERPKERNEL_EXPORT ElementaryEdge *operator[](int i) const; + INTERPKERNEL_EXPORT Node *getEndNode() const; + INTERPKERNEL_EXPORT Node *getStartNode() const; + INTERPKERNEL_EXPORT bool changeEndNodeWith(Node *node) const; + INTERPKERNEL_EXPORT bool changeStartNodeWith(Node *node) const; + INTERPKERNEL_EXPORT void dumpInXfigFile(std::ostream& stream, int resolution, const Bounds& box) const; + INTERPKERNEL_EXPORT bool isInOrOut(Node *nodeToTest) const; + INTERPKERNEL_EXPORT bool isInOrOut2(Node *nodeToTest) const; + INTERPKERNEL_EXPORT bool getDirection() const; + INTERPKERNEL_EXPORT bool intresincEqCoarse(const Edge *other) const; private: std::list* getListBehind() { return &_sub_edges; } + double isInOrOutAlg(Node *nodeToTest, std::set< IntersectElement >& inOutSwitch) const; protected: ~ComposedEdge(); private: