X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FHEXABLOCK%2FHexHexa.hxx;h=0d7a0a0b1c2c24e9de79662d63ba3ddc8b1c41c5;hb=65fe90d82be36b706e2f267441b8e580ead1a802;hp=91c18b5e77dfc1b3788e410e7f2784a9072c8669;hpb=6b02c4b9784848b0a660e0e54f88447af8433c50;p=modules%2Fhexablock.git diff --git a/src/HEXABLOCK/HexHexa.hxx b/src/HEXABLOCK/HexHexa.hxx index 91c18b5..0d7a0a0 100755 --- a/src/HEXABLOCK/HexHexa.hxx +++ b/src/HEXABLOCK/HexHexa.hxx @@ -1,7 +1,7 @@ // class : Les hexaedres -// Copyright (C) 2009-2012 CEA/DEN, EDF R&D +// 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 @@ -22,8 +22,8 @@ /* ----------------------------------------------------- - // ---- Numerotation des faces (%x) - + // ---- Numerotation des faces (%x) + 6=bed +----bd-----+ bdf=7 /| /| be | B bf | @@ -37,11 +37,12 @@ | ae A | af | / |/ |/ |/ 0=ace +----ac-----+ acf=1 +-----> x - + * ----------------------------------------------------- */ #ifndef __HEX_HEXA_H_ #define __HEX_HEXA_H_ +#include "Hex_defines.hxx" #include "HexEltBase.hxx" #include "HexQuad.hxx" @@ -50,21 +51,27 @@ BEGIN_NAMESPACE_HEXA -class Hexa : public EltBase +class HEXABLOCKENGINE_EXPORT Hexa : public EltBase { public: virtual Quad* getQuad (int nro); virtual Edge* getEdge (int nro); virtual Vertex* getVertex (int nro); - virtual int countQuad () { return HQ_MAXI; } - virtual int countEdge () { return HE_MAXI; } - virtual int countVertex () { return HV_MAXI; } + void setColor (double valeur); + Hexa (Quad* qa, Quad* qb, Quad* qc, Quad* qd, Quad* qe, Quad* qf); + +#ifndef SWIG public: - Hexa (Vertex* v1, Vertex* v2, Vertex* v3, Vertex* v4, + + Hexa (Vertex* v1, Vertex* v2, Vertex* v3, Vertex* v4, Vertex* v5, Vertex* v6, Vertex* v7, Vertex* v8); - Hexa (Quad* qa, Quad* qb, Quad* qc, Quad* qd, Quad* qe, Quad* qf); + + virtual int countQuad () { return HQ_MAXI; } + virtual int countEdge () { return HE_MAXI; } + virtual int countVertex () { return HV_MAXI; } + Hexa (Hexa* other); Quad* Inter (Hexa* other); bool definedBy (Vertex* v1, Vertex* v2); @@ -72,21 +79,20 @@ public: virtual void dump (); virtual void dumpPlus (); virtual void dumpFull (); - + void razNodes (); int countNodes (); // Compte et numerote les noeuds void printNodes (pfile vtk, int& count); // Impression format vtk void colorNodes (pfile vtk); // Impression scalaires vtk void moveNodes (Matrix* matrice); // transfo controlee ds un ensemble void transform (Matrix* matrice); // transfo indivituelle - void printHexa (pfile vtk); // Impression de la cellule - void printHexaVtk (pfile vtk); // Impression de la cellule + void printHexa (pfile vtk); // Impression de la cellule + void printHexaVtk (pfile vtk); // Impression de la cellule virtual void majReferences(); // M.A.J relation "utilise par" bool hasFreeEdges (); void propager (Propagation* prop, int nro); - void setScalar (double valeur); - void setColor (double valeur) { setScalar (valeur) ; } + void setScalar (double valeur) { setColor (valeur) ; } virtual void saveXml (XmlWriter* xml); @@ -94,6 +100,10 @@ public: Elements* disconnectEdge (Edge* arete); Elements* disconnectVertex (Vertex* noeud); + int disconnectQuad (Quad* face, Elements* dest); + int disconnectEdge (Edge* arete, Elements* dest); + int disconnectVertex (Vertex* noeud, Elements* dest); + int getBase (Vertex* orig, Edge* normale); void replaceQuad (Quad* old, Quad* nouveau); @@ -106,9 +116,9 @@ public: virtual void duplicate (); Hexa* getClone () { return h_clone ; } Quad* getOpposedQuad (Quad* face); - Vertex* getOpposedVertex (Quad* face, Vertex* vertex); + // Vertex* getOpposedVertex (Quad* face, Vertex* vertex); Edge* getPerpendicularEdge (Quad* face, Vertex* vertex); - Edge* getParallelEdge (Quad* face, Edge* edge); + // Edge* getParallelEdge (Quad* face, Edge* edge); Quad* findQuad (Edge* e1, Edge* e2); Edge* findEdge (Vertex* v1, Vertex* v2); @@ -122,8 +132,8 @@ private: void OrdonnerAretes (); // obsolete ? void OrdonnerSommets (); // obsolete ? - void controlerFaces (); // Controle primaire des donnees utilisateur - void controlerSommets (); // Idem; + void controlerFaces (); // Controle primaire des donnees utilisateur + void controlerSommets (); // Idem; void verifierSommets (); // Controle de coherence des quads void verifierAretes (); // Idem @@ -138,97 +148,8 @@ private: Edge* h_edge [HE_MAXI]; Vertex* h_vertex [HV_MAXI]; Hexa* h_clone; +#endif }; -// ------------------------------------------------------------ inlining -// ============================================================ getQuad -inline Quad* Hexa::getQuad (int nro) -{ - Quad* elt = NULL; - if (nro >=0 && nro < HQ_MAXI && el_status == HOK && h_quad [nro]->isValid()) - elt = h_quad [nro]; - - return elt; -} -// ============================================================ getEdge -inline Edge* Hexa::getEdge (int nro) -{ - Edge* elt = NULL; - if (nro >=0 && nro < HE_MAXI && el_status == HOK && h_edge [nro]->isValid()) - elt = h_edge [nro]; - - return elt; -} -// ============================================================ getVertex -inline Vertex* Hexa::getVertex (int nro) -{ - Vertex* elt = NULL; - if (nro >=0 && nro < HV_MAXI && el_status == HOK && h_vertex [nro]->isValid()) - elt = h_vertex [nro]; - - return elt; -} -// ============================================================ getCenter -inline double* Hexa::getCenter (double centre[]) -{ - centre [dir_x] = centre [dir_y] = centre [dir_z] = 0; - - for (int nv=0 ; nvgetX (); - centre [dir_y] += h_vertex[nv]->getY (); - centre [dir_z] += h_vertex[nv]->getZ (); - } - - centre [dir_x] /= HV_MAXI; - centre [dir_y] /= HV_MAXI; - centre [dir_z] /= HV_MAXI; - return centre; -} -// =============================================================== definedBy -inline bool Hexa::definedBy (Vertex* v1, Vertex* v2) -{ - for (int n1=0 ; n1< HV_MAXI ; n1++) - { -// ( Diagonale ) Dessus - int n2 = (n1 + 2) MODULO HV_MAXI + HV_MAXI; - if ( (v1 == h_vertex[n1] && v2 == h_vertex[n2]) - || (v1 == h_vertex[n2] && v2 == h_vertex[n1])) return true; - } - return false; -} -// =============================================================== definedBy -inline bool Hexa::definedBy (Quad* qa, Quad* qb) -{ - for (int nc=0 ; nc< 3 ; nc++) - { - if ( (qa == h_quad[2*nc] && qb == h_quad[2*nc+1]) - || (qa == h_quad[2*nc+1] && qb == h_quad[2*nc])) return true; - } - return false; -} -// =============================================================== setScalar -inline void Hexa::setScalar (double val) -{ - for (int nc=0 ; nc< HV_MAXI ; nc++) - h_vertex[nc] -> setScalar (val); -} -// ============================================================== markElements -inline void Hexa::markElements (int marque) -{ - for (int nc=0 ; nc< HQ_MAXI ; nc++) h_quad [nc] -> setMark (marque); - for (int nc=0 ; nc< HE_MAXI ; nc++) h_edge [nc] -> setMark (marque); - for (int nc=0 ; nc< HV_MAXI ; nc++) h_vertex[nc] -> setMark (marque); -} -// =============================================================== duplicate -inline void Hexa::duplicate () -{ - h_clone = new Hexa (GetClone (h_quad [Q_A]), - GetClone (h_quad [Q_B]), - GetClone (h_quad [Q_C]), - GetClone (h_quad [Q_D]), - GetClone (h_quad [Q_E]), - GetClone (h_quad [Q_F])); -} END_NAMESPACE_HEXA #endif