X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FHEXABLOCK%2FHexQuad.hxx;h=6ebc4262cbe237d051cb145e164e6b52498f03fa;hb=65fe90d82be36b706e2f267441b8e580ead1a802;hp=0884c635c1bff33b1d8c04d28ecb3dd153c6e9c3;hpb=3362101497b1bc0ded71b74c0806ac06c64d49d3;p=modules%2Fhexablock.git diff --git a/src/HEXABLOCK/HexQuad.hxx b/src/HEXABLOCK/HexQuad.hxx index 0884c63..6ebc426 100755 --- a/src/HEXABLOCK/HexQuad.hxx +++ b/src/HEXABLOCK/HexQuad.hxx @@ -1,14 +1,34 @@ // class : Les Quadrangles +// Copyright (C) 2009-2013 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. +// +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// Lesser General Public License for more details. +// +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +// +// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com +// #ifndef __QUAD_H #define __QUAD_H +#include "Hex_defines.hxx" #include "HexEdge.hxx" BEGIN_NAMESPACE_HEXA -struct StrOrient +#ifndef SWIG +struct HEXABLOCKENGINE_EXPORT StrOrient { Vertex* v11; // 1er sommet 1er quad Vertex* v12; // 2eme @@ -23,21 +43,31 @@ StrOrient ( StrOrient* s) : v11 (s->v11), v12(s->v12), v21(s->v21), v22(s->v22), dir(s->dir){} }; +#endif -class Quad : public EltBase +class HEXABLOCKENGINE_EXPORT Quad : public EltBase { public: virtual Edge* getEdge (int nro); virtual Vertex* getVertex (int nro); - virtual int countEdge () { return QUAD4; } - virtual int countVertex () { return QUAD4; } - -public: + int addAssociation (NewShape* forme, int subid); + virtual void clearAssociation (); + + void setColor (double valeur); + Vertex* nearestVertex (Vertex* other); + double* getCenter (double* center); + Quad (Vertex* va, Vertex* vb, Vertex* vc, Vertex* vd); + +#ifndef SWIG +public: Quad (Edge* ea, Edge* eb, Edge* ec, Edge* ed); Quad (Quad* other); + virtual int countEdge () { return QUAD4; } + virtual int countVertex () { return QUAD4; } + Hexa* getParent (int nro); Edge* findEdge (Vertex* v1, Vertex*v2); @@ -45,148 +75,68 @@ public: int anaMerge (Vertex* v1, Vertex* v2, Vertex* tv[], Edge* te[]); int ordoVertex (Vertex* v1, Vertex* v2, Vertex* tv[]); - int prepaMerge (Vertex* tv1[], Vertex* tv2[], Edge* te1[]); + int ordonner (Vertex* v1, Vertex* v2, Vertex* tv[], Edge* ted[]); int inter (Quad* other, int& nro); + Edge* inter (Quad* other); bool definedBy (Vertex* v1, Vertex* v2); bool definedBy (Edge* e1, Edge* e2); int indexVertex (Vertex* elt); int indexEdge (Edge* elt); - int getOrientation (Vertex* v1, Vertex* v2, int &n1, int& n2); - int accoupler (Quad* other, StrOrient* orient); + //int accoupler (Quad* other, StrOrient* orient); int coupler (Quad* other, StrOrient* orient, Elements* table); - Edge* getOpposEdge (Edge* arete, int &sens); + Edge* getOpposEdge (Edge* arete, int &sens); + Vertex* getOpposVertex (Vertex* sommet); virtual void majReferences(); // M.A.J relation "utilise par" virtual void dump (); virtual void dumpPlus (); - virtual void saveXml (XmlWriter& xml); - void setScalar (double valeur); + virtual void saveXml (XmlWriter* xml); + void setScalar (double valeur) { setColor (valeur); } + void replace (Quad* old); virtual void replaceEdge (Edge* old, Edge* nouveau); virtual void replaceVertex (Vertex* old, Vertex* nouveau); - int addAssociation (Shape* forme); - const std::vector & getAssociations () { return tab_assoc ; } + virtual void setAssociation (Shape* forme) {} // PERIME + virtual int addAssociation (Shape* forme) {return HOK ; } // PERIME + + + // const Shapes& getAssociations () { return tab_shapes ; } + + + virtual void duplicate (); + Quad* getClone () { return q_clone ; } + + Edge* getOpposEdge (Edge* arete); // Version simplifiee + Edge* getPerpendicular (Edge* arete, Vertex* node); + int getOrientation () { return q_orientation; } + int setOrientation (); + void setOrientation (int ori); + void reorienter (); + // Hexa5 + int addAssociation (FaceShape* forme); + int countAssociation () { return tab_assoc.size () ; } + FaceShape* getAssociation (int nro); + + double dist2 (double* point); private: friend class Cloner; Quad* getBrother (StrOrient* orient); - + private: Edge* q_edge [QUAD4]; Vertex* q_vertex [QUAD4]; + Quad* q_clone; + int q_orientation; - std::vector tab_assoc; + FaceShapes tab_assoc; +#endif }; -// ----------------------------------------------- Inlining -// ========================================================== addAssociation -inline int Quad::addAssociation (Shape* forme) -{ - tab_assoc.push_back (forme); - return HOK; -} -// ============================================================ getEdge -inline Edge* Quad::getEdge (int nro) -{ - Edge* elt = NULL; - if (nro >=0 && nro < QUAD4 && el_status == HOK && q_edge [nro]->isValid()) - elt = q_edge [nro]; - - return elt; -} -// ============================================================ getVertex -inline Vertex* Quad::getVertex (int nro) -{ - Vertex* elt = NULL; - if (nro >=0 && nro < QUAD4 && el_status == HOK && q_vertex [nro]->isValid()) - elt = q_vertex [nro]; - - return elt; -} -// ======================================================== commonEdge -inline Edge* Quad::commonEdge (Quad* other) -{ - for (int ne1=0 ; ne1q_edge [ne2]) - return q_edge [ne1]; - - return NULL; -} - -// ======================================================== Inter -inline int Quad::inter (Quad* other, int& nro) -{ - for (int ne1=0 ; ne1q_edge [ne2]) - { - nro = ne2; - return ne1; - } - - nro = NOTHING; - return NOTHING; -} -// ============================================================ definedBy (v) -inline bool Quad::definedBy (Vertex* v1, Vertex* v2) -{ - for (int n1=0 ; n1< QUAD4 ; n1++) - if (v1 == q_vertex[n1] && v2 == q_vertex[(n1+2) MODULO QUAD4]) - return true; - - return false; -} -// ============================================================ definedBy (e) -inline bool Quad::definedBy (Edge* e1, Edge* e2) -{ - for (int n1=0 ; n1< QUAD4 ; n1++) - if (e1 == q_edge[n1] && e2 == q_edge[(n1+2) MODULO QUAD4]) - return true; - - return false; -} -// =============================================================== findEdge -inline Edge* Quad::findEdge (Vertex* v1, Vertex* v2) -{ - for (int nro=0 ; nro< QUAD4 ; nro++) - { - Vertex* va = q_edge[nro]->getVertex(V_AMONT) ; - Vertex* vb = q_edge[nro]->getVertex(V_AVAL) ; - if ((v1==va && v2==vb) || (v1==vb && v2==va)) - return q_edge [nro]; - } - - return NULL; -} -// =============================================================== indexVertex -inline int Quad::indexVertex (Vertex* elt) -{ - for (int n1=0 ; n1< QUAD4 ; n1++) - if (elt == q_vertex[n1]) - return n1; - - return NOTHING; -} -// =============================================================== indexEdge -inline int Quad::indexEdge (Edge* elt) -{ - for (int n1=0 ; n1< QUAD4 ; n1++) - if (elt == q_edge[n1]) - return n1; - - return NOTHING; -} -// =============================================================== setScalar -inline void Quad::setScalar (double val) -{ - for (int n1=0 ; n1< QUAD4 ; n1++) - q_vertex[n1] -> setScalar (val); -} - END_NAMESPACE_HEXA #endif +