X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FDriverUNV%2FDriverUNV_R_SMDS_Mesh.cxx;h=77a439a7d194bc237384b831601ea8270ddf715e;hb=refs%2Ftags%2FV3_2_10;hp=97ffd7d29c7d9c6404c436e6c6232d8c1e631aa3;hpb=4ff5bd61540272713e48de1eee75625028c32155;p=modules%2Fsmesh.git diff --git a/src/DriverUNV/DriverUNV_R_SMDS_Mesh.cxx b/src/DriverUNV/DriverUNV_R_SMDS_Mesh.cxx index 97ffd7d29..77a439a7d 100644 --- a/src/DriverUNV/DriverUNV_R_SMDS_Mesh.cxx +++ b/src/DriverUNV/DriverUNV_R_SMDS_Mesh.cxx @@ -15,15 +15,17 @@ // 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/ +// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // #include "DriverUNV_R_SMDS_Mesh.h" #include "SMDS_Mesh.hxx" +#include "SMDS_MeshGroup.hxx" #include "utilities.h" #include "UNV2411_Structure.hxx" #include "UNV2412_Structure.hxx" +#include "UNV2417_Structure.hxx" #include "UNV_Utilities.hxx" using namespace std; @@ -36,6 +38,13 @@ static int MYDEBUG = 0; #endif +DriverUNV_R_SMDS_Mesh::~DriverUNV_R_SMDS_Mesh() +{ + if (myGroup != 0) + delete myGroup; +} + + Driver_Mesh::Status DriverUNV_R_SMDS_Mesh::Perform() { Status aResult = DRS_OK; @@ -65,17 +74,16 @@ Driver_Mesh::Status DriverUNV_R_SMDS_Mesh::Perform() const TElementLab& aLabel = anIter->first; const TRecord& aRec = anIter->second; if(IsBeam(aRec.fe_descriptor_id)) { - if(aRec.fe_descriptor_id == 11) { - // edge with two nodes + switch ( aRec.node_labels.size() ) { + case 2: // edge with two nodes anElement = myMesh->AddEdgeWithID(aRec.node_labels[0], aRec.node_labels[1], aLabel); - } - else { - // quadratic edge (with 3 nodes) + break; + case 3: // quadratic edge (with 3 nodes) anElement = myMesh->AddEdgeWithID(aRec.node_labels[0], - aRec.node_labels[1], aRec.node_labels[2], + aRec.node_labels[1], aLabel); } } @@ -96,10 +104,10 @@ Driver_Mesh::Status DriverUNV_R_SMDS_Mesh::Perform() case 42: // Plane Stress Quadratic Triangle - TRI6 case 92: // Thin Shell Quadratic Triangle - TRI6 anElement = myMesh->AddFaceWithID(aRec.node_labels[0], - aRec.node_labels[1], aRec.node_labels[2], - aRec.node_labels[3], aRec.node_labels[4], + aRec.node_labels[1], + aRec.node_labels[3], aRec.node_labels[5], aLabel); break; @@ -116,12 +124,12 @@ Driver_Mesh::Status DriverUNV_R_SMDS_Mesh::Perform() case 45: // Plane Stress Quadratic Quadrilateral - QUAD8 case 95: // Thin Shell Quadratic Quadrilateral - QUAD8 anElement = myMesh->AddFaceWithID(aRec.node_labels[0], - aRec.node_labels[1], aRec.node_labels[2], - aRec.node_labels[3], aRec.node_labels[4], - aRec.node_labels[5], aRec.node_labels[6], + aRec.node_labels[1], + aRec.node_labels[3], + aRec.node_labels[5], aRec.node_labels[7], aLabel); break; @@ -140,15 +148,18 @@ Driver_Mesh::Status DriverUNV_R_SMDS_Mesh::Perform() case 118: // Solid Quadratic Tetrahedron - TET10 anElement = myMesh->AddVolumeWithID(aRec.node_labels[0], - aRec.node_labels[2], - aRec.node_labels[1], - aRec.node_labels[3], - aRec.node_labels[6], - aRec.node_labels[5], aRec.node_labels[4], - aRec.node_labels[7], + aRec.node_labels[2], + aRec.node_labels[9], + + aRec.node_labels[5], + aRec.node_labels[3], + aRec.node_labels[1], + + aRec.node_labels[6], aRec.node_labels[8], + aRec.node_labels[7], aLabel); break; @@ -164,20 +175,24 @@ Driver_Mesh::Status DriverUNV_R_SMDS_Mesh::Perform() case 113: // Solid Quadratic Prism - PRISM15 anElement = myMesh->AddVolumeWithID(aRec.node_labels[0], + aRec.node_labels[4], aRec.node_labels[2], - aRec.node_labels[1], - aRec.node_labels[3], + + aRec.node_labels[9], + aRec.node_labels[13], + aRec.node_labels[11], + aRec.node_labels[5], - aRec.node_labels[4], + aRec.node_labels[3], + aRec.node_labels[1], + + aRec.node_labels[14], + aRec.node_labels[12], + aRec.node_labels[10], + + aRec.node_labels[6], aRec.node_labels[8], aRec.node_labels[7], - aRec.node_labels[6], - aRec.node_labels[11], - aRec.node_labels[10], - aRec.node_labels[9], - aRec.node_labels[12], - aRec.node_labels[14], - aRec.node_labels[13], aLabel); break; @@ -195,51 +210,136 @@ Driver_Mesh::Status DriverUNV_R_SMDS_Mesh::Perform() case 116: // Solid Quadratic Brick - HEX20 anElement = myMesh->AddVolumeWithID(aRec.node_labels[0], - aRec.node_labels[3], - aRec.node_labels[2], - aRec.node_labels[1], + aRec.node_labels[6], aRec.node_labels[4], + aRec.node_labels[2], + + aRec.node_labels[12], + aRec.node_labels[18], + aRec.node_labels[16], + aRec.node_labels[14], + aRec.node_labels[7], - aRec.node_labels[6], aRec.node_labels[5], + aRec.node_labels[3], + aRec.node_labels[1], + + aRec.node_labels[19], + aRec.node_labels[17], + aRec.node_labels[15], + aRec.node_labels[13], + + aRec.node_labels[8], aRec.node_labels[11], aRec.node_labels[10], aRec.node_labels[9], - aRec.node_labels[8], - aRec.node_labels[15], - aRec.node_labels[14], - aRec.node_labels[13], - aRec.node_labels[12], - aRec.node_labels[16], - aRec.node_labels[19], - aRec.node_labels[18], - aRec.node_labels[17], aLabel); break; case 114: // pyramid of 13 nodes (quadratic) - PIRA13 anElement = myMesh->AddVolumeWithID(aRec.node_labels[0], - aRec.node_labels[3], - aRec.node_labels[2], - aRec.node_labels[1], + aRec.node_labels[6], aRec.node_labels[4], - aRec.node_labels[8], + aRec.node_labels[2], aRec.node_labels[7], - aRec.node_labels[6], aRec.node_labels[5], - aRec.node_labels[9], - aRec.node_labels[12], + aRec.node_labels[3], + aRec.node_labels[1], + + aRec.node_labels[8], aRec.node_labels[11], aRec.node_labels[10], + aRec.node_labels[9], + aRec.node_labels[12], aLabel); break; } } - if(!anElement) - MESSAGE("DriverUNV_R_SMDS_Mesh::Perform - can not add element with ID = "<FindNode(aRec.NodeList[i]); + if (aNode) + aNodesGroup->Add(aNode); + } + } + if (aElementsNb > 0){ + SMDS_MeshGroup* aEdgesGroup = 0; + SMDS_MeshGroup* aFacesGroup = 0; + SMDS_MeshGroup* aVolumeGroup = 0; + bool createdGroup = false; + + for (i = 0; i < aElementsNb; i++) { + 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); + if (!useSuffix && createdGroup) useSuffix = true; + std::string aEdgesGrName = (useSuffix) ? aRec.GroupName + "_Edges" : aRec.GroupName; + myGroupNames.insert(TGroupNamesMap::value_type(aEdgesGroup, aEdgesGrName)); + myGroupId.insert(TGroupIdMap::value_type(aEdgesGroup, aLabel)); + createdGroup = true; + } + aEdgesGroup->Add(aElement); + break; + case SMDSAbs_Face: + if (!aFacesGroup) { + aFacesGroup = (SMDS_MeshGroup*) myGroup->AddSubGroup(SMDSAbs_Face); + if (!useSuffix && createdGroup) useSuffix = true; + std::string aFacesGrName = (useSuffix) ? aRec.GroupName + "_Faces" : aRec.GroupName; + myGroupNames.insert(TGroupNamesMap::value_type(aFacesGroup, aFacesGrName)); + myGroupId.insert(TGroupIdMap::value_type(aFacesGroup, aLabel)); + createdGroup = true; + } + aFacesGroup->Add(aElement); + break; + case SMDSAbs_Volume: + if (!aVolumeGroup) { + aVolumeGroup = (SMDS_MeshGroup*) myGroup->AddSubGroup(SMDSAbs_Volume); + if (!useSuffix && createdGroup) useSuffix = true; + std::string aVolumeGrName = (useSuffix) ? aRec.GroupName + "_Volumes" : aRec.GroupName; + myGroupNames.insert(TGroupNamesMap::value_type(aVolumeGroup, aVolumeGrName)); + myGroupId.insert(TGroupIdMap::value_type(aVolumeGroup, aLabel)); + createdGroup = true; + } + aVolumeGroup->Add(aElement); + break; + } + } + } + } + } + } + } } catch(const std::exception& exc){ INFOS("Follow exception was cought:\n\t"<