X-Git-Url: http://git.salome-platform.org/gitweb/?p=modules%2Fsmesh.git;a=blobdiff_plain;f=src%2FDriverUNV%2FDriverUNV_R_SMDS_Mesh.cxx;h=27576a613eaaf6abc26b65c4685a65a9c4613a9f;hp=0ad1f8beec51033887f87d5f8d3aad78c21288ea;hb=8f8c86b463e9f3dc2a51d8f66873a6794292c229;hpb=bd4e115a78b52e3fbc016e5e30bb0e19b2a9e7d6 diff --git a/src/DriverUNV/DriverUNV_R_SMDS_Mesh.cxx b/src/DriverUNV/DriverUNV_R_SMDS_Mesh.cxx index 0ad1f8bee..27576a613 100644 --- a/src/DriverUNV/DriverUNV_R_SMDS_Mesh.cxx +++ b/src/DriverUNV/DriverUNV_R_SMDS_Mesh.cxx @@ -1,4 +1,4 @@ -// Copyright (C) 2007-2012 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 @@ -6,7 +6,7 @@ // 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 @@ -39,7 +39,7 @@ using namespace std; #ifdef _DEBUG_ -static int MYDEBUG = 1; +static int MYDEBUG = 0; #else static int MYDEBUG = 0; #endif @@ -198,23 +198,32 @@ Driver_Mesh::Status DriverUNV_R_SMDS_Mesh::Perform() aRec.node_labels[2], aRec.label); break; - + case 42: // Plane Stress Parabolic Triangle case 52: // Plane Strain Parabolic Triangle case 62: // Plate Parabolic Triangle case 72: // Membrane Parabolic Triangle case 82: // Axisymetric Solid Parabolic Triangle - case 92: // Thin Shell Parabolic Triangle - //MESSAGE("add face " << aRec.label << " " << aRec.node_labels[0] << " " << aRec.node_labels[1] << " " << aRec.node_labels[2] << " " << aRec.node_labels[3] << " " << aRec.node_labels[4] << " " << aRec.node_labels[5]); - anElement = myMesh->AddFaceWithID(aRec.node_labels[0], - aRec.node_labels[2], - aRec.node_labels[4], - aRec.node_labels[1], - aRec.node_labels[3], - aRec.node_labels[5], - aRec.label); + case 92: // Thin Shell Parabolic Triangle + if ( aRec.node_labels.size() == 7 ) + anElement = myMesh->AddFaceWithID(aRec.node_labels[0], + aRec.node_labels[2], + aRec.node_labels[4], + aRec.node_labels[1], + aRec.node_labels[3], + aRec.node_labels[5], + aRec.node_labels[6], + aRec.label); + else + anElement = myMesh->AddFaceWithID(aRec.node_labels[0], + aRec.node_labels[2], + aRec.node_labels[4], + aRec.node_labels[1], + aRec.node_labels[3], + aRec.node_labels[5], + aRec.label); break; - + case 44: // Plane Stress Linear Quadrilateral case 54: // Plane Strain Linear Quadrilateral case 64: // Plate Linear Quadrilateral @@ -227,29 +236,41 @@ Driver_Mesh::Status DriverUNV_R_SMDS_Mesh::Perform() aRec.node_labels[3], aRec.label); break; - + case 45: // Plane Stress Parabolic Quadrilateral case 55: // Plane Strain Parabolic Quadrilateral case 65: // Plate Parabolic Quadrilateral case 75: // Membrane Parabolic Quadrilateral case 85: // Axisymetric Solid Parabolic Quadrilateral case 95: // Thin Shell Parabolic Quadrilateral - anElement = myMesh->AddFaceWithID(aRec.node_labels[0], - aRec.node_labels[2], - aRec.node_labels[4], - aRec.node_labels[6], - aRec.node_labels[1], - aRec.node_labels[3], - aRec.node_labels[5], - aRec.node_labels[7], - aRec.label); + if ( aRec.node_labels.size() == 9 ) + anElement = myMesh->AddFaceWithID(aRec.node_labels[0], + aRec.node_labels[2], + aRec.node_labels[4], + aRec.node_labels[6], + aRec.node_labels[1], + aRec.node_labels[3], + aRec.node_labels[5], + aRec.node_labels[7], + aRec.node_labels[8], + aRec.label); + else + anElement = myMesh->AddFaceWithID(aRec.node_labels[0], + aRec.node_labels[2], + aRec.node_labels[4], + aRec.node_labels[6], + aRec.node_labels[1], + aRec.node_labels[3], + aRec.node_labels[5], + aRec.node_labels[7], + aRec.label); break; } } else if(IsVolume(aRec.fe_descriptor_id)){ //MESSAGE("add volume " << aRec.label); switch(aRec.fe_descriptor_id){ - + case 111: // Solid Linear Tetrahedron - TET4 anElement = myMesh->AddVolumeWithID(aRec.node_labels[0], aRec.node_labels[2], @@ -353,6 +374,9 @@ Driver_Mesh::Status DriverUNV_R_SMDS_Mesh::Perform() aRec.node_labels[6], aRec.node_labels[4], aRec.node_labels[2], + + aRec.node_labels[12], + aRec.node_labels[7], aRec.node_labels[5], aRec.node_labels[3], @@ -362,7 +386,6 @@ Driver_Mesh::Status DriverUNV_R_SMDS_Mesh::Perform() aRec.node_labels[11], aRec.node_labels[10], aRec.node_labels[9], - aRec.node_labels[12], aRec.label); break; @@ -414,6 +437,7 @@ Driver_Mesh::Status DriverUNV_R_SMDS_Mesh::Perform() const SMDS_MeshElement* aElement = myMesh->FindElement(aRec.ElementList[i]); if (aElement) { switch (aElement->GetType()) { + case SMDSAbs_Edge: if (!aEdgesGroup) { aEdgesGroup = (SMDS_MeshGroup*) myGroup->AddSubGroup(SMDSAbs_Edge); @@ -428,6 +452,7 @@ Driver_Mesh::Status DriverUNV_R_SMDS_Mesh::Perform() } aEdgesGroup->Add(aElement); break; + case SMDSAbs_Face: if (!aFacesGroup) { aFacesGroup = (SMDS_MeshGroup*) myGroup->AddSubGroup(SMDSAbs_Face); @@ -442,6 +467,7 @@ Driver_Mesh::Status DriverUNV_R_SMDS_Mesh::Perform() } aFacesGroup->Add(aElement); break; + case SMDSAbs_Volume: if (!aVolumeGroup) { aVolumeGroup = (SMDS_MeshGroup*) myGroup->AddSubGroup(SMDSAbs_Volume); @@ -456,6 +482,8 @@ Driver_Mesh::Status DriverUNV_R_SMDS_Mesh::Perform() } aVolumeGroup->Add(aElement); break; + + default:; } } }