X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FDriverCGNS%2FDriverCGNS_Write.cxx;h=844bb863fb224023fed8656ba464d80ec2b2e729;hb=e74c29b7867ca230102fc580d831dda6b81b3b4c;hp=1afa5423954d2fe1978d9b1e3dca416480e8dd1f;hpb=b0a908c0d20341651771d0249fb10882f54b2aad;p=modules%2Fsmesh.git diff --git a/src/DriverCGNS/DriverCGNS_Write.cxx b/src/DriverCGNS/DriverCGNS_Write.cxx index 1afa54239..844bb863f 100644 --- a/src/DriverCGNS/DriverCGNS_Write.cxx +++ b/src/DriverCGNS/DriverCGNS_Write.cxx @@ -1,4 +1,4 @@ -// Copyright (C) 2007-2014 CEA/DEN, EDF R&D, OPEN CASCADE +// Copyright (C) 2007-2016 CEA/DEN, EDF R&D, OPEN CASCADE // // Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS @@ -147,6 +147,7 @@ namespace } { cgTypes[SMDSEntity_Polygon] = CGNS_ENUMV( NGON_n ); + cgTypes[SMDSEntity_Quad_Polygon] = CGNS_ENUMV( NGON_n ); cgTypes[SMDSEntity_Polyhedra] = CGNS_ENUMV( NFACE_n ); cgTypes[SMDSEntity_Hexagonal_Prism] = CGNS_ENUMV( NFACE_n ); } @@ -171,7 +172,7 @@ namespace { for ( int t = 0; t < NofValidBCTypes; ++t ) { - CGNS_ENUMT( BCType_t ) type = CGNS_ENUMT( BCType_t)( t ); + CGNS_ENUMT( BCType_t ) type = CGNS_ENUMT( BCType_t )( t ); string typeName = cg_BCTypeName( type ); if ( typeName == &groupName[0] + bcBeg ) { @@ -250,20 +251,20 @@ Driver_Mesh::Status DriverCGNS_Write::Perform() // -------------- const int spaceDim = 3; - int meshDim = 1; - if ( myMesh->NbFaces() > 0 ) meshDim = 2; + int meshDim = 1; + if ( myMesh->NbFaces() > 0 ) meshDim = 2; if ( myMesh->NbVolumes() > 0 ) meshDim = 3; if ( myMeshName.empty() ) { int nbases = 0; - if ( cg_nbases( _fn, &nbases) == CG_OK) + if ( cg_nbases( _fn, &nbases) == CG_OK ) myMeshName = ( SMESH_Comment("Base_") << nbases+1 ); else myMeshName = "Base_0"; } int iBase; - if ( cg_base_write( _fn, myMeshName.c_str(), meshDim, spaceDim, &iBase)) + if ( cg_base_write( _fn, myMeshName.c_str(), meshDim, spaceDim, &iBase )) return addMessage( cg_get_error(), /*fatal = */true ); // create a Zone @@ -329,7 +330,7 @@ Driver_Mesh::Status DriverCGNS_Write::Perform() // write into a section all successive elements of one geom type int iSec; vector< cgsize_t > elemData; - SMDS_ElemIteratorPtr elemIt = myMesh->elementsIterator(); + SMDS_ElemIteratorPtr elemIt = myMesh->elementsIterator(); const SMDS_MeshElement* elem = elemIt->next(); while ( elem ) { @@ -370,6 +371,21 @@ Driver_Mesh::Status DriverCGNS_Write::Perform() } while ( elem && elem->GetEntityType() == elemType ); + else if ( elemType == SMDSEntity_Quad_Polygon ) // QUADRATIC POLYGONS + do // write as linear NGON_n + { + elemData.push_back( elem->NbNodes() ); + interlace = & SMDS_MeshCell::interlacedSmdsOrder( SMDSEntity_Quad_Polygon, + elem->NbNodes() )[0]; + for ( int i = 0, nb = elem->NbNodes(); i < nb; ++i ) + elemData.push_back( cgnsID( elem->GetNode( interlace[i] ), n2cgID )); + if ( elem->GetID() != cgID ) + elem2cgID.insert( elem2cgID.end(), make_pair( elem, cgID )); + ++cgID; + elem = elemIt->more() ? elemIt->next() : 0; + } + while ( elem && elem->GetEntityType() == elemType ); + else if ( elemType == SMDSEntity_Polyhedra || elemType == SMDSEntity_Hexagonal_Prism) // POLYHEDRA {