From 88d5f149b9ca3c39332a48c4cb2f6ed5ff2e9a4b Mon Sep 17 00:00:00 2001 From: eap Date: Fri, 16 Dec 2011 09:07:56 +0000 Subject: [PATCH] 0021347: [CEA 497] Visualisation into SMESH and VISU of hexagonal prism cells (MED_OCTA12) 0021380: EDF 1937 SMESH: Take into account QUAD9 and HEXA27 --- doc/salome/gui/SMESH/images/image146.png | Bin 18252 -> 21115 bytes doc/salome/gui/SMESH/images/image152.png | Bin 18866 -> 21808 bytes doc/salome/gui/SMESH/images/image_octa12.png | Bin 0 -> 5486 bytes .../SMESH/input/adding_nodes_and_elements.doc | 11 ++ resources/Makefile.am | 4 + resources/mesh_biquad_quadrangle.png | Bin 0 -> 673 bytes resources/mesh_octahedron.png | Bin 0 -> 485 bytes resources/mesh_pentahedron.png | Bin 0 -> 936 bytes resources/mesh_triquad_hexahedron.png | Bin 0 -> 878 bytes src/SMDS/SMDS_Downward.cxx | 21 +-- src/SMDS/SMDS_Mesh.hxx | 143 ++++++++++++++++-- src/SMDS/SMDS_MeshInfo.hxx | 85 +++++++---- src/SMDS/SMDS_UnstructuredGrid.cxx | 126 ++++++++------- 13 files changed, 275 insertions(+), 115 deletions(-) create mode 100644 doc/salome/gui/SMESH/images/image_octa12.png create mode 100644 resources/mesh_biquad_quadrangle.png create mode 100644 resources/mesh_octahedron.png create mode 100644 resources/mesh_pentahedron.png create mode 100644 resources/mesh_triquad_hexahedron.png diff --git a/doc/salome/gui/SMESH/images/image146.png b/doc/salome/gui/SMESH/images/image146.png index 2f2f7120f3890cbb91faad52cd2ae9f87cae5f31..521513c60fc8a1a60c05c7e78f1e1a3d988ca690 100755 GIT binary patch literal 21115 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 R99-&L=Pm8dmRn$B{sO{9j%WY? literal 18252 zcmaL9bzD_#w=RqUA|NH5g0!Txlypi-r+|VW4H8n)CEe29CEXxlAPv$D(wμCc7n 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 V48I8neoGF5w79%jiO4Ij{|}>O3~&Gd diff --git a/doc/salome/gui/SMESH/images/image152.png b/doc/salome/gui/SMESH/images/image152.png index ef8ef087d955956428be099ee88db0310ceab10b..79e264f628f6dc8cd13fe9d4881db4eb8983657e 100755 GIT binary patch literal 21808 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 Y*_K8+Oci$o+d9O|*utpX@N&$*08Bv}=Kufz literal 18866 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 RM-r$K&Zpf@Rh%S{{tpQ;e)|9b literal 0 HcmV?d00001 diff --git a/doc/salome/gui/SMESH/input/adding_nodes_and_elements.doc b/doc/salome/gui/SMESH/input/adding_nodes_and_elements.doc index c0168994b..9890d9a59 100644 --- a/doc/salome/gui/SMESH/input/adding_nodes_and_elements.doc +++ b/doc/salome/gui/SMESH/input/adding_nodes_and_elements.doc @@ -13,6 +13,7 @@
  • \ref adding_polygons_anchor "Polygons"
  • \ref adding_tetrahedrons_anchor "Tetrahedrons"
  • \ref adding_hexahedrons_anchor "Hexahedrons"
  • +
  • \ref adding_octahedrons_anchor "Hexagonal prism"
  • \ref adding_polyhedrons_anchor "Polyhedrons"
  • @@ -147,6 +148,16 @@ the \b Apply or Apply and Close button. Your hexahedron will be created: \image html image71.jpg +
    +\anchor adding_octahedrons_anchor +

    Adding hexagonal prism

    + +In the Add Hexagonal Prism dialog box specify the nodes which will +form your hexagonal prism by selecting them in the 3D viewer with pressed Shift button and click +the \b Apply or Apply and Close button. Your hexagonal prism will be created: + +\image html image_octa12.png +
    \anchor adding_polyhedrons_anchor

    Adding polyhedrons

    diff --git a/resources/Makefile.am b/resources/Makefile.am index ffe0038c3..ea7514d3f 100644 --- a/resources/Makefile.am +++ b/resources/Makefile.am @@ -36,6 +36,7 @@ dist_salomeres_DATA = \ mesh_area.png \ mesh_aspect.png \ mesh_aspect_3d.png \ + mesh_biquad_quadrangle.png \ mesh_clear.png \ mesh_compute.png \ mesh_diagonal.png \ @@ -65,6 +66,7 @@ dist_salomeres_DATA = \ mesh_line_n.png \ mesh_line.png \ mesh_move_node.png \ + mesh_octahedron.png \ mesh_orientation.png \ mesh.png \ mesh_polygon.png \ @@ -102,6 +104,7 @@ dist_salomeres_DATA = \ mesh_tree_importedmesh.png \ mesh_tree_mesh_warn.png \ mesh_triangle_n.png \ + mesh_triquad_hexahedron.png \ mesh_triangle.png \ mesh_update.png \ mesh_vertex_n.png \ @@ -149,6 +152,7 @@ dist_salomeres_DATA = \ select1.png \ StdMeshers.xml \ mesh_pattern.png \ + mesh_pentahedron.png \ pattern_sample_2d.png \ pattern_sample_3D.png \ mesh_add.png \ diff --git a/resources/mesh_biquad_quadrangle.png b/resources/mesh_biquad_quadrangle.png new file mode 100644 index 0000000000000000000000000000000000000000..9d66e0a10e8a1c06ff7e32f7e6a62a6f6b63ad98 GIT binary patch literal 673 zcmV;S0$%-zP)Px#24YJ`L;(K){{a7>y{D4^000SaNLh0L01FcU01FcV0GgZ_00007bV*G`2ipt} z4=D&}f9wAM00JRNL_t(I%dM2LP8&fGhQF~WknV(Zg=OR}I`^0+4G$1Xiv!yH*q1$ZU_C?_0q8b9*Ky^Bu15|*%JGb#SpAHVLKZ+D+ zxBn2?7u7jNmIB#I%H?udi^Zb4|0KE5TJ5s}JBB?VG3+JDjRJeWK!3vW+*09qJZ3x| zQ?I8wn>}%L_0}nJz*J;FX6kq{h)4`%OTximP-!&Me!E>gw-l=RMEU@bB-a4jMR;%f z_JMAmhZXzwflQ;Q2f%PBIeSB3WMIWZAOPMS9)3~tY0)lGq#8x)w^XB%I&WL%ZS3}M zc*GAP(iah)rT0SFe6GH_OjW3I*X=Ay(q}_*O43cL92yx2*QzWCF7p z9!Y3eMzeXVvzgNA?1r9a;fov1zu2D78IT+ueN|w`c~-BdY97bt*%|Q3o?Yzwn^)zL zT@o&c#i^=z9gtZUjMga(yhPx#24YJ`L;(K){{a7>y{D4^000SaNLh0L01FcU01FcV0GgZ_00007bV*G`2ipt} z4<{Z1D03hH00Cu5L_t(I%jJ|YOT$nQ$A2jz#Yl)BKwL`41l$UN;wC|yS`fk2FW~Cx z_YgXE&!AHw*sYM*#X8lg4jpWVS~}Fhd*$Ud+7#S8I3DlbyZ`0?^1p+hZ7E(f4!{l@ zEDXDuRfl1etI>lD`jOF9kXEdhMs2si}xfdk-N&Z^?u$p#n#Z@{w=ALId+ z3M$DeD!CGWZ2u6@%IOrpUhgEfy~}9yLAm^n>wf>t*=)glzQA?&m`py23Zyz^D-63hPKAE|?nN#P1?j8<@f_Veh7ZwA(b*&B4M-;nq8J0V$M!S00000NkvXXu0mjf9B<6x literal 0 HcmV?d00001 diff --git a/resources/mesh_pentahedron.png b/resources/mesh_pentahedron.png new file mode 100644 index 0000000000000000000000000000000000000000..78f40c9a82813653f1d28d213ca6b8b2fef0a4a4 GIT binary patch literal 936 zcmV;Z16TZsP)Px#24YJ`L;(K){{a7>y{D4^000SaNLh0L01FcU01FcV0GgZ_00007bV*G`2ipt} z4;ThXn!!o{00SsVL_t(I%YBqVXk1kkhQIsr%uJY6BNLMe6g9Mvl9VAfEeNwvXcn0^ z6BmY{xX=<>MTHjX#=UztZfrr^IxQ|{!jQrs(kKc>9I%_l5ix3**4W1OO=j}mn|oZ$ zdDH1M_HN$eoO}O!&VT>^AR_Fy(&@BJPEPKhe9UtGFJY}E2m+Rue-7j zAGyN!YiC}}%f^k{024rv&riPvRDl6t1b8Z!Tlb7H6bdr{yTEh6HoY94J$pld_r}Ms z2yg*d242tQ)+L+0ZnN3z^=x)cfH#56>C@i{a1M9_IMk_dVq!vqAmH-lqwfQ$si|>} z99jD~40nmglN5``XMt2tSBLd`LOXbnY&04)n@tuMfBIl=&pyAg@e4O^zIGA#9oPa6 z0z*IuGyxB&>G3L10cst<&CSijOG}k%K0jRsyqTFV-v#dK!EwL<35U=Z+zhlc>32I>mD1N;X33p6^qbKDU4UiUnt!jfOG9y24l=8`hve|+mEbP%f?j!dw@h7 z4ghXnySZ&3wAPAq|K!QSE7tn`Px#24YJ`L;(K){{a7>y{D4^000SaNLh0L01FcU01FcV0GgZ_00007bV*G`2ipt} z4>JJPiJ2Av00QnwL_t(I%f*yUNK{c2$A9mQAHy4wKn!J;jx8*7RyN2~8y%-c+878z zS+ro`?^SR+goedjO22;dp$j07gW|XP%}T@J9fU<23p5xAP_|939z@e))_s7*-dZ&3Pmwa>+JwG z@Bwh1-hM?7yw=YHoIs!&{jZW|c8aBFGL_RdO@k7K-+&MG_2=~EJqd>wBph~()67N9 zAU&S?Obo_=WCf5F%i7~@2S%|i0J4EVWdTrA2nGY?t(ygdGi|d8BB7A<_HOGI(O;Wo zSrQ6`3Zu0Q(%0vliA$xnbYZ$pfEYxKY<5gNy8#I4*6=(J*L8XL@Ux7Jd=dcHl{0Z~ z-dqNl1=6LnoKc%6B4BR;iw`!LoQ%bR_{2mzfb$q?Qb+E>@bG)v_gy^igqfK{VLUZp z8n9Jnwv=;nG8R=#v_=sC&pYDDlPlA|;QmiwresXZmxBNd4ZUM(>e@X8ri+p(iF1_p zD9NUEU;Y!Yt7{Dr4}fRu*AZZ#a}^Lod^R?Ebo{hRno<4hlmoV@EfY~e&JN7_z@_5q z(vuQbGU%qafgk07O+c~)FkP|>wbmI0q?tJiFb!n?0DEXfK;!bBasU7T07*qoM6N<$ Ef<}6STL1t6 literal 0 HcmV?d00001 diff --git a/src/SMDS/SMDS_Downward.cxx b/src/SMDS/SMDS_Downward.cxx index 87e773898..1bbd1f07b 100644 --- a/src/SMDS/SMDS_Downward.cxx +++ b/src/SMDS/SMDS_Downward.cxx @@ -52,14 +52,17 @@ int SMDS_Downward::getCellDimension(unsigned char cellType) _cellDimension[VTK_QUADRATIC_TRIANGLE] = 2; _cellDimension[VTK_QUAD] = 2; _cellDimension[VTK_QUADRATIC_QUAD] = 2; + _cellDimension[VTK_BIQUADRATIC_QUAD] = 2; _cellDimension[VTK_TETRA] = 3; _cellDimension[VTK_QUADRATIC_TETRA] = 3; _cellDimension[VTK_HEXAHEDRON] = 3; _cellDimension[VTK_QUADRATIC_HEXAHEDRON] = 3; + _cellDimension[VTK_TRIQUADRATIC_HEXAHEDRON] = 3; _cellDimension[VTK_WEDGE] = 3; _cellDimension[VTK_QUADRATIC_WEDGE] = 3; _cellDimension[VTK_PYRAMID] = 3; _cellDimension[VTK_QUADRATIC_PYRAMID] = 3; + _cellDimension[VTK_HEXAGONAL_PRISM] = 3; } return _cellDimension[cellType]; } @@ -79,23 +82,7 @@ SMDS_Downward::SMDS_Downward(SMDS_UnstructuredGrid *grid, int nbDownCells) : this->_cellIds.clear(); this->_cellTypes.clear(); if (_cellDimension.empty()) - { - _cellDimension.resize(VTK_MAXTYPE + 1, 0); - _cellDimension[VTK_LINE] = 1; - _cellDimension[VTK_QUADRATIC_EDGE] = 1; - _cellDimension[VTK_TRIANGLE] = 2; - _cellDimension[VTK_QUADRATIC_TRIANGLE] = 2; - _cellDimension[VTK_QUAD] = 2; - _cellDimension[VTK_QUADRATIC_QUAD] = 2; - _cellDimension[VTK_TETRA] = 3; - _cellDimension[VTK_QUADRATIC_TETRA] = 3; - _cellDimension[VTK_HEXAHEDRON] = 3; - _cellDimension[VTK_QUADRATIC_HEXAHEDRON] = 3; - _cellDimension[VTK_WEDGE] = 3; - _cellDimension[VTK_QUADRATIC_WEDGE] = 3; - _cellDimension[VTK_PYRAMID] = 3; - _cellDimension[VTK_QUADRATIC_PYRAMID] = 3; - } + getCellDimension( VTK_LINE ); } SMDS_Downward::~SMDS_Downward() diff --git a/src/SMDS/SMDS_Mesh.hxx b/src/SMDS/SMDS_Mesh.hxx index 9df39f25a..7dbdf325c 100644 --- a/src/SMDS/SMDS_Mesh.hxx +++ b/src/SMDS/SMDS_Mesh.hxx @@ -183,6 +183,28 @@ public: const SMDS_MeshNode * n34, const SMDS_MeshNode * n41); + virtual SMDS_MeshFace* AddFaceWithID(int n1, int n2, int n3, int n4, + int n12,int n23,int n34,int n41, int nCenter, int ID); + virtual SMDS_MeshFace* AddFaceWithID(const SMDS_MeshNode * n1, + const SMDS_MeshNode * n2, + const SMDS_MeshNode * n3, + const SMDS_MeshNode * n4, + const SMDS_MeshNode * n12, + const SMDS_MeshNode * n23, + const SMDS_MeshNode * n34, + const SMDS_MeshNode * n41, + const SMDS_MeshNode * nCenter, + int ID); + virtual SMDS_MeshFace* AddFace(const SMDS_MeshNode * n1, + const SMDS_MeshNode * n2, + const SMDS_MeshNode * n3, + const SMDS_MeshNode * n4, + const SMDS_MeshNode * n12, + const SMDS_MeshNode * n23, + const SMDS_MeshNode * n34, + const SMDS_MeshNode * n41, + const SMDS_MeshNode * nCenter); + virtual SMDS_MeshVolume* AddVolumeWithID(int n1, int n2, int n3, int n4, int ID); virtual SMDS_MeshVolume* AddVolumeWithID(const SMDS_MeshNode * n1, const SMDS_MeshNode * n2, @@ -277,6 +299,36 @@ public: const SMDS_MeshFace * f5, const SMDS_MeshFace * f6); + // hexagonal prism + virtual SMDS_MeshVolume* AddVolumeWithID(int n1, int n2, int n3, int n4, int n5, int n6, + int n7, int n8, int n9, int n10, int n11, int n12, + int ID); + virtual SMDS_MeshVolume* AddVolumeWithID(const SMDS_MeshNode * n1, + const SMDS_MeshNode * n2, + const SMDS_MeshNode * n3, + const SMDS_MeshNode * n4, + const SMDS_MeshNode * n5, + const SMDS_MeshNode * n6, + const SMDS_MeshNode * n7, + const SMDS_MeshNode * n8, + const SMDS_MeshNode * n9, + const SMDS_MeshNode * n10, + const SMDS_MeshNode * n11, + const SMDS_MeshNode * n12, + int ID); + virtual SMDS_MeshVolume* AddVolume(const SMDS_MeshNode * n1, + const SMDS_MeshNode * n2, + const SMDS_MeshNode * n3, + const SMDS_MeshNode * n4, + const SMDS_MeshNode * n5, + const SMDS_MeshNode * n6, + const SMDS_MeshNode * n7, + const SMDS_MeshNode * n8, + const SMDS_MeshNode * n9, + const SMDS_MeshNode * n10, + const SMDS_MeshNode * n11, + const SMDS_MeshNode * n12); + // 2d order tetrahedron of 10 nodes virtual SMDS_MeshVolume* AddVolumeWithID(int n1, int n2, int n3, int n4, int n12,int n23,int n31, @@ -424,27 +476,92 @@ public: const SMDS_MeshNode * n37, const SMDS_MeshNode * n48); - virtual SMDS_MeshFace* AddPolygonalFaceWithID (std::vector nodes_ids, - const int ID); + // 2d oreder Hexahedrons with 27 nodes + virtual SMDS_MeshVolume* AddVolumeWithID(int n1, int n2, int n3, int n4, + int n5, int n6, int n7, int n8, + int n12,int n23,int n34,int n41, + int n56,int n67,int n78,int n85, + int n15,int n26,int n37,int n48, + int n1234,int n1256,int n2367,int n3478, + int n1458,int n5678,int nCenter, + int ID); + virtual SMDS_MeshVolume* AddVolumeWithID(const SMDS_MeshNode * n1, + const SMDS_MeshNode * n2, + const SMDS_MeshNode * n3, + const SMDS_MeshNode * n4, + const SMDS_MeshNode * n5, + const SMDS_MeshNode * n6, + const SMDS_MeshNode * n7, + const SMDS_MeshNode * n8, + const SMDS_MeshNode * n12, + const SMDS_MeshNode * n23, + const SMDS_MeshNode * n34, + const SMDS_MeshNode * n41, + const SMDS_MeshNode * n56, + const SMDS_MeshNode * n67, + const SMDS_MeshNode * n78, + const SMDS_MeshNode * n85, + const SMDS_MeshNode * n15, + const SMDS_MeshNode * n26, + const SMDS_MeshNode * n37, + const SMDS_MeshNode * n48, + const SMDS_MeshNode * n1234, + const SMDS_MeshNode * n1256, + const SMDS_MeshNode * n2367, + const SMDS_MeshNode * n3478, + const SMDS_MeshNode * n1458, + const SMDS_MeshNode * n5678, + const SMDS_MeshNode * nCenter, + int ID); + virtual SMDS_MeshVolume* AddVolume(const SMDS_MeshNode * n1, + const SMDS_MeshNode * n2, + const SMDS_MeshNode * n3, + const SMDS_MeshNode * n4, + const SMDS_MeshNode * n5, + const SMDS_MeshNode * n6, + const SMDS_MeshNode * n7, + const SMDS_MeshNode * n8, + const SMDS_MeshNode * n12, + const SMDS_MeshNode * n23, + const SMDS_MeshNode * n34, + const SMDS_MeshNode * n41, + const SMDS_MeshNode * n56, + const SMDS_MeshNode * n67, + const SMDS_MeshNode * n78, + const SMDS_MeshNode * n85, + const SMDS_MeshNode * n15, + const SMDS_MeshNode * n26, + const SMDS_MeshNode * n37, + const SMDS_MeshNode * n48, + const SMDS_MeshNode * n1234, + const SMDS_MeshNode * n1256, + const SMDS_MeshNode * n2367, + const SMDS_MeshNode * n3478, + const SMDS_MeshNode * n1458, + const SMDS_MeshNode * n5678, + const SMDS_MeshNode * nCenter); + + virtual SMDS_MeshFace* AddPolygonalFaceWithID (const std::vector & nodes_ids, + const int ID); - virtual SMDS_MeshFace* AddPolygonalFaceWithID (std::vector nodes, - const int ID); + virtual SMDS_MeshFace* AddPolygonalFaceWithID (const std::vector & nodes, + const int ID); - virtual SMDS_MeshFace* AddPolygonalFace (std::vector nodes); + virtual SMDS_MeshFace* AddPolygonalFace (const std::vector & nodes); virtual SMDS_MeshVolume* AddPolyhedralVolumeWithID - (std::vector nodes_ids, - std::vector quantities, - const int ID); + (const std::vector & nodes_ids, + const std::vector & quantities, + const int ID); virtual SMDS_MeshVolume* AddPolyhedralVolumeWithID - (std::vector nodes, - std::vector quantities, - const int ID); + (const std::vector & nodes, + const std::vector & quantities, + const int ID); virtual SMDS_MeshVolume* AddPolyhedralVolume - (std::vector nodes, - std::vector quantities); + (const std::vector & nodes, + const std::vector & quantities); virtual SMDS_MeshVolume* AddVolumeFromVtkIds(const std::vector& vtkNodeIds); diff --git a/src/SMDS/SMDS_MeshInfo.hxx b/src/SMDS/SMDS_MeshInfo.hxx index 87a096f03..d68fa238b 100644 --- a/src/SMDS/SMDS_MeshInfo.hxx +++ b/src/SMDS/SMDS_MeshInfo.hxx @@ -44,9 +44,11 @@ public: int Nb0DElements() const { return myNb0DElements; } inline int NbEdges (SMDSAbs_ElementOrder order = ORDER_ANY) const; + inline int NbFaces (SMDSAbs_ElementOrder order = ORDER_ANY) const; inline int NbTriangles (SMDSAbs_ElementOrder order = ORDER_ANY) const; inline int NbQuadrangles(SMDSAbs_ElementOrder order = ORDER_ANY) const; + int NbBiQuadQuadrangles() const { return myNbBiQuadQuadrangles; } int NbPolygons() const { return myNbPolygons; } inline int NbVolumes (SMDSAbs_ElementOrder order = ORDER_ANY) const; @@ -54,6 +56,8 @@ public: inline int NbHexas (SMDSAbs_ElementOrder order = ORDER_ANY) const; inline int NbPyramids(SMDSAbs_ElementOrder order = ORDER_ANY) const; inline int NbPrisms (SMDSAbs_ElementOrder order = ORDER_ANY) const; + inline int NbHexPrisms(SMDSAbs_ElementOrder order = ORDER_ANY) const; + int NbTriQuadHexas() const { return myNbTriQuadHexas; } int NbPolyhedrons() const { return myNbPolyhedrons; } protected: @@ -76,13 +80,14 @@ private: int myNb0DElements; int myNbEdges , myNbQuadEdges ; int myNbTriangles , myNbQuadTriangles ; - int myNbQuadrangles, myNbQuadQuadrangles; + int myNbQuadrangles, myNbQuadQuadrangles, myNbBiQuadQuadrangles; int myNbPolygons; int myNbTetras , myNbQuadTetras ; - int myNbHexas , myNbQuadHexas ; + int myNbHexas , myNbQuadHexas, myNbTriQuadHexas; int myNbPyramids, myNbQuadPyramids; int myNbPrisms , myNbQuadPrisms ; + int myNbHexPrism; int myNbPolyhedrons; std::vector myNb; // pointers to myNb... fields @@ -90,16 +95,17 @@ private: }; inline SMDS_MeshInfo::SMDS_MeshInfo(): - myNbNodes(0), - myNb0DElements(0), + myNbNodes (0), + myNb0DElements (0), myNbEdges (0), myNbQuadEdges (0), myNbTriangles (0), myNbQuadTriangles (0), - myNbQuadrangles(0), myNbQuadQuadrangles(0), - myNbPolygons(0), - myNbTetras (0), myNbQuadTetras (0), - myNbHexas (0), myNbQuadHexas (0), - myNbPyramids(0), myNbQuadPyramids(0), - myNbPrisms (0), myNbQuadPrisms (0), + myNbQuadrangles(0), myNbQuadQuadrangles(0), myNbBiQuadQuadrangles(0), + myNbPolygons (0), + myNbTetras (0), myNbQuadTetras (0), + myNbHexas (0), myNbQuadHexas (0), myNbTriQuadHexas(0), + myNbPyramids (0), myNbQuadPyramids(0), + myNbPrisms (0), myNbQuadPrisms (0), + myNbHexPrism (0), myNbPolyhedrons(0) { // Number of nodes in standard element types (. - actual nb, * - after the shift) @@ -108,8 +114,8 @@ inline SMDS_MeshInfo::SMDS_MeshInfo(): // d l c g d // e e e e // s - // ----------------- - // 0 - DON't USE 0!!! + // ================= + // 0 --------------- - DON't USE 0!!! // 1 . * // 2 . // 3 . * @@ -118,27 +124,34 @@ inline SMDS_MeshInfo::SMDS_MeshInfo(): // 6 * . // 7 * // 8 * . - // 9 * + // 9 . * // 10 * - // 11 * - // 12 * + // 11 + // 12 * // 13 * - // 14 * + // 14 // 15 * // 16 * - // 17 + // 17 * // 18 - // 19 + // 19 * // 20 * + // 21 * + // 22 * + // 23 + // 24 + // 25 + // 26 + // 27 * // // So to have a unique index for each type basing on nb of nodes, we use a shift: myShift.resize(SMDSAbs_NbElementTypes, 0); - myShift[ SMDSAbs_Face ] = +8; // 3->11, 4->12, 6->14, 8->16 + myShift[ SMDSAbs_Face ] = +13;// 3->16, 4->17, 6->19, 8->21, 9->22 myShift[ SMDSAbs_Edge ] = +5; // 2->7, 4->9 myShift[ SMDSAbs_0DElement ] = +2; // 1->3 - myNb.resize( index( SMDSAbs_Volume,20 ) + 1, NULL); + myNb.resize( index( SMDSAbs_Volume,27 ) + 1, NULL); myNb[ index( SMDSAbs_Node,1 )] = & myNbNodes; @@ -151,15 +164,18 @@ inline SMDS_MeshInfo::SMDS_MeshInfo(): myNb[ index( SMDSAbs_Face,4 )] = & myNbQuadrangles; myNb[ index( SMDSAbs_Face,6 )] = & myNbQuadTriangles; myNb[ index( SMDSAbs_Face,8 )] = & myNbQuadQuadrangles; + myNb[ index( SMDSAbs_Face,9 )] = & myNbBiQuadQuadrangles; myNb[ index( SMDSAbs_Volume, 4)] = & myNbTetras; myNb[ index( SMDSAbs_Volume, 5)] = & myNbPyramids; myNb[ index( SMDSAbs_Volume, 6)] = & myNbPrisms; myNb[ index( SMDSAbs_Volume, 8)] = & myNbHexas; myNb[ index( SMDSAbs_Volume, 10)] = & myNbQuadTetras; + myNb[ index( SMDSAbs_Volume, 12)] = & myNbHexPrism; myNb[ index( SMDSAbs_Volume, 13)] = & myNbQuadPyramids; myNb[ index( SMDSAbs_Volume, 15)] = & myNbQuadPrisms; myNb[ index( SMDSAbs_Volume, 20)] = & myNbQuadHexas; + myNb[ index( SMDSAbs_Volume, 27)] = & myNbTriQuadHexas; } inline SMDS_MeshInfo& // operator= @@ -222,11 +238,11 @@ SMDS_MeshInfo::NbTriangles (SMDSAbs_ElementOrder order) const inline int // NbQuadrangles SMDS_MeshInfo::NbQuadrangles(SMDSAbs_ElementOrder order) const -{ return order == ORDER_ANY ? myNbQuadrangles+myNbQuadQuadrangles : order == ORDER_LINEAR ? myNbQuadrangles : myNbQuadQuadrangles; } +{ return order == ORDER_ANY ? myNbQuadrangles+myNbQuadQuadrangles+myNbBiQuadQuadrangles : order == ORDER_LINEAR ? myNbQuadrangles : myNbQuadQuadrangles+myNbBiQuadQuadrangles; } inline int // NbVolumes SMDS_MeshInfo::NbVolumes (SMDSAbs_ElementOrder order) const -{ return NbTetras(order) + NbHexas(order) + NbPyramids(order) + NbPrisms(order) + (order == ORDER_QUADRATIC ? 0 : myNbPolyhedrons); } +{ return NbTetras(order) + NbHexas(order) + NbPyramids(order) + NbPrisms(order) + NbHexPrisms(order) + (order == ORDER_QUADRATIC ? 0 : myNbPolyhedrons); } inline int // NbTetras SMDS_MeshInfo::NbTetras (SMDSAbs_ElementOrder order) const @@ -234,7 +250,7 @@ SMDS_MeshInfo::NbTetras (SMDSAbs_ElementOrder order) const inline int // NbHexas SMDS_MeshInfo::NbHexas (SMDSAbs_ElementOrder order) const -{ return order == ORDER_ANY ? myNbHexas+myNbQuadHexas : order == ORDER_LINEAR ? myNbHexas : myNbQuadHexas; } +{ return order == ORDER_ANY ? myNbHexas+myNbQuadHexas+myNbTriQuadHexas : order == ORDER_LINEAR ? myNbHexas : myNbQuadHexas+myNbTriQuadHexas; } inline int // NbPyramids SMDS_MeshInfo::NbPyramids(SMDSAbs_ElementOrder order) const @@ -244,6 +260,10 @@ inline int // NbPrisms SMDS_MeshInfo::NbPrisms (SMDSAbs_ElementOrder order) const { return order == ORDER_ANY ? myNbPrisms+myNbQuadPrisms : order == ORDER_LINEAR ? myNbPrisms : myNbQuadPrisms; } +inline int // NbHexPrisms +SMDS_MeshInfo::NbHexPrisms (SMDSAbs_ElementOrder order) const +{ return order == ORDER_ANY ? myNbHexPrism : order == ORDER_LINEAR ? myNbHexPrism : 0; } + inline int // NbElements SMDS_MeshInfo::NbElements(SMDSAbs_ElementType type) const { @@ -254,11 +274,13 @@ SMDS_MeshInfo::NbElements(SMDSAbs_ElementType type) const nb += myNbPolygons + myNbPolyhedrons; break; case SMDSAbs_Volume: - nb = myNbTetras+ myNbPyramids+ myNbPrisms+ myNbHexas+ - myNbQuadTetras+ myNbQuadPyramids+ myNbQuadPrisms+ myNbQuadHexas+myNbPolyhedrons; + nb = myNbTetras+ myNbPyramids+ myNbPrisms+ myNbHexas+ myNbHexPrism+ + myNbQuadTetras+ myNbQuadPyramids+ myNbQuadPrisms+ myNbQuadHexas+ myNbTriQuadHexas+ + myNbPolyhedrons; break; case SMDSAbs_Face: - nb = myNbTriangles+ myNbQuadrangles+ myNbQuadTriangles+ myNbQuadQuadrangles + myNbPolygons; + nb = myNbTriangles+ myNbQuadrangles+ + myNbQuadTriangles+ myNbQuadQuadrangles+ myNbBiQuadQuadrangles+ myNbPolygons; break; case SMDSAbs_Edge: nb = myNbEdges + myNbQuadEdges; @@ -275,7 +297,7 @@ SMDS_MeshInfo::NbElements(SMDSAbs_ElementType type) const } int // NbEntities -SMDS_MeshInfo::NbEntities(SMDSAbs_EntityType type) const +SMDS_MeshInfo::NbEntities(SMDSAbs_EntityType type) const { switch (type) { case SMDSEntity_Node: @@ -302,6 +324,9 @@ SMDS_MeshInfo::NbEntities(SMDSAbs_EntityType type) const case SMDSEntity_Quad_Quadrangle: return myNbQuadQuadrangles; break; + case SMDSEntity_BiQuad_Quadrangle: + return myNbBiQuadQuadrangles; + break; case SMDSEntity_Polygon: return myNbPolygons; break; @@ -323,12 +348,18 @@ SMDS_MeshInfo::NbEntities(SMDSAbs_EntityType type) const case SMDSEntity_Quad_Hexa: return myNbQuadHexas; break; + case SMDSEntity_TriQuad_Hexa: + return myNbTriQuadHexas; + break; case SMDSEntity_Penta: return myNbPrisms; break; case SMDSEntity_Quad_Penta: return myNbQuadPrisms; break; + case SMDSEntity_Hexagonal_Prism: + return myNbHexPrism; + break; case SMDSEntity_Polyhedra: return myNbPolyhedrons; break; diff --git a/src/SMDS/SMDS_UnstructuredGrid.cxx b/src/SMDS/SMDS_UnstructuredGrid.cxx index 8b76b0459..8015105e7 100644 --- a/src/SMDS/SMDS_UnstructuredGrid.cxx +++ b/src/SMDS/SMDS_UnstructuredGrid.cxx @@ -372,73 +372,83 @@ void SMDS_UnstructuredGrid::BuildDownwardConnectivity(bool withEdges) // --- create SMDS_Downward structures (in _downArray vector[vtkCellType]) - _downArray.resize(VTK_MAXTYPE + 1, 0); // --- max. type value = VTK_QUADRATIC_PYRAMID - - _downArray[VTK_LINE] = new SMDS_DownEdge(this); - _downArray[VTK_QUADRATIC_EDGE] = new SMDS_DownQuadEdge(this); - _downArray[VTK_TRIANGLE] = new SMDS_DownTriangle(this); - _downArray[VTK_QUADRATIC_TRIANGLE] = new SMDS_DownQuadTriangle(this); - _downArray[VTK_QUAD] = new SMDS_DownQuadrangle(this); - _downArray[VTK_QUADRATIC_QUAD] = new SMDS_DownQuadQuadrangle(this); - _downArray[VTK_TETRA] = new SMDS_DownTetra(this); - _downArray[VTK_QUADRATIC_TETRA] = new SMDS_DownQuadTetra(this); - _downArray[VTK_PYRAMID] = new SMDS_DownPyramid(this); - _downArray[VTK_QUADRATIC_PYRAMID] = new SMDS_DownQuadPyramid(this); - _downArray[VTK_WEDGE] = new SMDS_DownPenta(this); - _downArray[VTK_QUADRATIC_WEDGE] = new SMDS_DownQuadPenta(this); - _downArray[VTK_HEXAHEDRON] = new SMDS_DownHexa(this); - _downArray[VTK_QUADRATIC_HEXAHEDRON] = new SMDS_DownQuadHexa(this); + _downArray.resize(VTK_MAXTYPE + 1, 0); + + _downArray[VTK_LINE] = new SMDS_DownEdge(this); + _downArray[VTK_QUADRATIC_EDGE] = new SMDS_DownQuadEdge(this); + _downArray[VTK_TRIANGLE] = new SMDS_DownTriangle(this); + _downArray[VTK_QUADRATIC_TRIANGLE] = new SMDS_DownQuadTriangle(this); + _downArray[VTK_QUAD] = new SMDS_DownQuadrangle(this); + _downArray[VTK_QUADRATIC_QUAD] = new SMDS_DownQuadQuadrangle(this); + _downArray[VTK_BIQUADRATIC_QUAD] = new SMDS_DownQuadQuadrangle(this); + _downArray[VTK_TETRA] = new SMDS_DownTetra(this); + _downArray[VTK_QUADRATIC_TETRA] = new SMDS_DownQuadTetra(this); + _downArray[VTK_PYRAMID] = new SMDS_DownPyramid(this); + _downArray[VTK_QUADRATIC_PYRAMID] = new SMDS_DownQuadPyramid(this); + _downArray[VTK_WEDGE] = new SMDS_DownPenta(this); + _downArray[VTK_QUADRATIC_WEDGE] = new SMDS_DownQuadPenta(this); + _downArray[VTK_HEXAHEDRON] = new SMDS_DownHexa(this); + _downArray[VTK_QUADRATIC_HEXAHEDRON] = new SMDS_DownQuadHexa(this); + _downArray[VTK_TRIQUADRATIC_HEXAHEDRON] = new SMDS_DownQuadHexa(this); + _downArray[VTK_HEXAGONAL_PRISM] = new SMDS_DownPenta(this); // --- get detailed info of number of cells of each type, allocate SMDS_downward structures const SMDS_MeshInfo &meshInfo = _mesh->GetMeshInfo(); - int nbLinTetra = meshInfo.NbTetras(ORDER_LINEAR); - int nbQuadTetra = meshInfo.NbTetras(ORDER_QUADRATIC); - int nbLinPyra = meshInfo.NbPyramids(ORDER_LINEAR); - int nbQuadPyra = meshInfo.NbPyramids(ORDER_QUADRATIC); - int nbLinPrism = meshInfo.NbPrisms(ORDER_LINEAR); - int nbQuadPrism = meshInfo.NbPrisms(ORDER_QUADRATIC); - int nbLinHexa = meshInfo.NbHexas(ORDER_LINEAR); - int nbQuadHexa = meshInfo.NbHexas(ORDER_QUADRATIC); - - int nbLineGuess = int((4.0 / 3.0) * nbLinTetra + 2 * nbLinPrism + 2.5 * nbLinPyra + 3 * nbLinHexa); + int nbLinTetra = meshInfo.NbTetras (ORDER_LINEAR); + int nbQuadTetra = meshInfo.NbTetras (ORDER_QUADRATIC); + int nbLinPyra = meshInfo.NbPyramids(ORDER_LINEAR); + int nbQuadPyra = meshInfo.NbPyramids(ORDER_QUADRATIC); + int nbLinPrism = meshInfo.NbPrisms (ORDER_LINEAR); + int nbQuadPrism = meshInfo.NbPrisms (ORDER_QUADRATIC); + int nbLinHexa = meshInfo.NbHexas (ORDER_LINEAR); + int nbQuadHexa = meshInfo.NbHexas (ORDER_QUADRATIC); + int nbHexPrism = meshInfo.NbHexPrisms(); + + int nbLineGuess = int((4.0 / 3.0) * nbLinTetra + 2 * nbLinPrism + 2.5 * nbLinPyra + 3 * nbLinHexa); int nbQuadEdgeGuess = int((4.0 / 3.0) * nbQuadTetra + 2 * nbQuadPrism + 2.5 * nbQuadPyra + 3 * nbQuadHexa); - int nbLinTriaGuess = 2 * nbLinTetra + nbLinPrism + 2 * nbLinPyra; + int nbLinTriaGuess = 2 * nbLinTetra + nbLinPrism + 2 * nbLinPyra; int nbQuadTriaGuess = 2 * nbQuadTetra + nbQuadPrism + 2 * nbQuadPyra; - int nbLinQuadGuess = int((2.0 / 3.0) * nbLinPrism + (1.0 / 2.0) * nbLinPyra + 3 * nbLinHexa); + int nbLinQuadGuess = int((2.0 / 3.0) * nbLinPrism + (1.0 / 2.0) * nbLinPyra + 3 * nbLinHexa); int nbQuadQuadGuess = int((2.0 / 3.0) * nbQuadPrism + (1.0 / 2.0) * nbQuadPyra + 3 * nbQuadHexa); - int GuessSize[VTK_QUADRATIC_TETRA]; - GuessSize[VTK_LINE] = nbLineGuess; - GuessSize[VTK_QUADRATIC_EDGE] = nbQuadEdgeGuess; - GuessSize[VTK_TRIANGLE] = nbLinTriaGuess; - GuessSize[VTK_QUADRATIC_TRIANGLE] = nbQuadTriaGuess; - GuessSize[VTK_QUAD] = nbLinQuadGuess; - GuessSize[VTK_QUADRATIC_QUAD] = nbQuadQuadGuess; - GuessSize[VTK_TETRA] = nbLinTetra; - GuessSize[VTK_QUADRATIC_TETRA] = nbQuadTetra; - GuessSize[VTK_PYRAMID] = nbLinPyra; - GuessSize[VTK_QUADRATIC_PYRAMID] = nbQuadPyra; - GuessSize[VTK_WEDGE] = nbLinPrism; - GuessSize[VTK_QUADRATIC_WEDGE] = nbQuadPrism; - GuessSize[VTK_HEXAHEDRON] = nbLinHexa; - GuessSize[VTK_QUADRATIC_HEXAHEDRON] = nbQuadHexa; - - _downArray[VTK_LINE]->allocate(nbLineGuess); - _downArray[VTK_QUADRATIC_EDGE]->allocate(nbQuadEdgeGuess); - _downArray[VTK_TRIANGLE]->allocate(nbLinTriaGuess); - _downArray[VTK_QUADRATIC_TRIANGLE]->allocate(nbQuadTriaGuess); - _downArray[VTK_QUAD]->allocate(nbLinQuadGuess); - _downArray[VTK_QUADRATIC_QUAD]->allocate(nbQuadQuadGuess); - _downArray[VTK_TETRA]->allocate(nbLinTetra); - _downArray[VTK_QUADRATIC_TETRA]->allocate(nbQuadTetra); - _downArray[VTK_PYRAMID]->allocate(nbLinPyra); - _downArray[VTK_QUADRATIC_PYRAMID]->allocate(nbQuadPyra); - _downArray[VTK_WEDGE]->allocate(nbLinPrism); - _downArray[VTK_QUADRATIC_WEDGE]->allocate(nbQuadPrism); - _downArray[VTK_HEXAHEDRON]->allocate(nbLinHexa); - _downArray[VTK_QUADRATIC_HEXAHEDRON]->allocate(nbQuadHexa); + int GuessSize[VTK_MAXTYPE]; + GuessSize[VTK_LINE] = nbLineGuess; + GuessSize[VTK_QUADRATIC_EDGE] = nbQuadEdgeGuess; + GuessSize[VTK_TRIANGLE] = nbLinTriaGuess; + GuessSize[VTK_QUADRATIC_TRIANGLE] = nbQuadTriaGuess; + GuessSize[VTK_QUAD] = nbLinQuadGuess; + GuessSize[VTK_QUADRATIC_QUAD] = nbQuadQuadGuess; + GuessSize[VTK_BIQUADRATIC_QUAD] = nbQuadQuadGuess; + GuessSize[VTK_TETRA] = nbLinTetra; + GuessSize[VTK_QUADRATIC_TETRA] = nbQuadTetra; + GuessSize[VTK_PYRAMID] = nbLinPyra; + GuessSize[VTK_QUADRATIC_PYRAMID] = nbQuadPyra; + GuessSize[VTK_WEDGE] = nbLinPrism; + GuessSize[VTK_QUADRATIC_WEDGE] = nbQuadPrism; + GuessSize[VTK_HEXAHEDRON] = nbLinHexa; + GuessSize[VTK_QUADRATIC_HEXAHEDRON] = nbQuadHexa; + GuessSize[VTK_TRIQUADRATIC_HEXAHEDRON] = nbQuadHexa; + GuessSize[VTK_HEXAGONAL_PRISM] = nbHexPrism; + + _downArray[VTK_LINE] ->allocate(nbLineGuess); + _downArray[VTK_QUADRATIC_EDGE] ->allocate(nbQuadEdgeGuess); + _downArray[VTK_TRIANGLE] ->allocate(nbLinTriaGuess); + _downArray[VTK_QUADRATIC_TRIANGLE] ->allocate(nbQuadTriaGuess); + _downArray[VTK_QUAD] ->allocate(nbLinQuadGuess); + _downArray[VTK_QUADRATIC_QUAD] ->allocate(nbQuadQuadGuess); + _downArray[VTK_BIQUADRATIC_QUAD] ->allocate(nbQuadQuadGuess); + _downArray[VTK_TETRA] ->allocate(nbLinTetra); + _downArray[VTK_QUADRATIC_TETRA] ->allocate(nbQuadTetra); + _downArray[VTK_PYRAMID] ->allocate(nbLinPyra); + _downArray[VTK_QUADRATIC_PYRAMID] ->allocate(nbQuadPyra); + _downArray[VTK_WEDGE] ->allocate(nbLinPrism); + _downArray[VTK_QUADRATIC_WEDGE] ->allocate(nbQuadPrism); + _downArray[VTK_HEXAHEDRON] ->allocate(nbLinHexa); + _downArray[VTK_QUADRATIC_HEXAHEDRON] ->allocate(nbQuadHexa); + _downArray[VTK_TRIQUADRATIC_HEXAHEDRON]->allocate(nbQuadHexa); + _downArray[VTK_HEXAGONAL_PRISM] ->allocate(nbHexPrism); // --- iteration on vtkUnstructuredGrid cells, only faces // for each vtk face: -- 2.39.2