From efb8d44918f2097b2bf243bc5484a535f19bd0bb Mon Sep 17 00:00:00 2001 From: eap Date: Tue, 12 Nov 2013 10:00:29 +0000 Subject: [PATCH] 22346: [CEA 963] Use GMF format instead of the old format with 2 files (.points and .faces) Use GMF format for the mesh on shape --- .../images/ghs3d_enforced_meshes.png | Bin 25750 -> 20998 bytes .../images/ghs3d_enforced_vertices.png | Bin 27824 -> 22359 bytes src/GHS3DPlugin/GHS3DPlugin_GHS3D.cxx | 422 ++++++++++-------- src/GUI/GHS3DPluginGUI_Enums.h | 4 +- src/GUI/GHS3DPluginGUI_HypothesisCreator.cxx | 36 +- 5 files changed, 267 insertions(+), 195 deletions(-) diff --git a/doc/salome/gui/GHS3DPLUGIN/images/ghs3d_enforced_meshes.png b/doc/salome/gui/GHS3DPLUGIN/images/ghs3d_enforced_meshes.png index c41c62ea467e7da81985bedfe3095811959d8f89..050152e8ecc1951f153b1c476c4e7a0af66f7990 100644 GIT binary patch literal 20998 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 diff --git a/doc/salome/gui/GHS3DPLUGIN/images/ghs3d_enforced_vertices.png b/doc/salome/gui/GHS3DPLUGIN/images/ghs3d_enforced_vertices.png index 75126ee72d069b571bb0ee3869860c338b9439f5..363260854fab48cbd7563840146029611881e777 100644 GIT binary patch literal 22359 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 GAN(J^6uh4R diff --git a/src/GHS3DPlugin/GHS3DPlugin_GHS3D.cxx b/src/GHS3DPlugin/GHS3DPlugin_GHS3D.cxx index b18489b..96301ef 100644 --- a/src/GHS3DPlugin/GHS3DPlugin_GHS3D.cxx +++ b/src/GHS3DPlugin/GHS3DPlugin_GHS3D.cxx @@ -1150,17 +1150,19 @@ static void makeDomainGroups( std::vector< std::vector< const SMDS_MeshElement* static bool readGMFFile(const char* theFile, GHS3DPlugin_GHS3D* theAlgo, SMESH_MesherHelper* theHelper, - TopoDS_Shape theSolid, - vector & theNodeByGhs3dId, + std::vector & theNodeByGhs3dId, + std::vector & theFaceByGhs3dId, map & theNodeToGhs3dIdMap, std::vector & aNodeGroupByGhs3dId, std::vector & anEdgeGroupByGhs3dId, std::vector & aFaceGroupByGhs3dId, std::set & groupsToRemove, - bool toMakeGroupsOfDomains=false) + bool toMakeGroupsOfDomains=false, + bool toMeshHoles=true) { std::string tmpStr; SMESHDS_Mesh* theMeshDS = theHelper->GetMeshDS(); + const bool hasGeom = ( theHelper->GetMesh()->HasShapeToMesh() ); int nbInitialNodes = theNodeByGhs3dId.size(); int nbMeshNodes = theMeshDS->NbNodes(); @@ -1176,8 +1178,8 @@ static bool readGMFFile(const char* theFile, std::cout << "isQuadMesh: " << isQuadMesh << std::endl; #endif - if (theHelper->GetSubShapeID() != 0) - theHelper->IsQuadraticSubMesh( theHelper->GetSubShape() ); + // if ( theHelper->GetSubShapeID() != 0 && hasGeom ) + // theHelper->IsQuadraticSubMesh( theHelper->GetSubShape() ); // --------------------------------- // Read generated elements and nodes @@ -1190,8 +1192,8 @@ static bool readGMFFile(const char* theFile, std::map > subdomainId2tetraId; #endif std::map tabRef; - const bool force3d = true; // since there is no geometry - const int noID = 0; + const bool force3d = !hasGeom; + const int noID = 0; tabRef[GmfVertices] = 3; // for new nodes and enforced nodes tabRef[GmfCorners] = 1; @@ -1209,12 +1211,59 @@ static bool readGMFFile(const char* theFile, return false; MESSAGE("Done "); + // Read ids of domains + vector< int > solidIDByDomain; + if ( hasGeom ) + { + int solid1; // id used in case of 1 domain or some reading failure + if ( theHelper->GetSubShape().ShapeType() == TopAbs_SOLID ) + solid1 = theHelper->GetSubShapeID(); + else + solid1 = theMeshDS->ShapeToIndex + ( TopExp_Explorer( theHelper->GetSubShape(), TopAbs_SOLID ).Current() ); + + int nbDomains = GmfStatKwd( InpMsh, GmfSubDomainFromGeom ); + if ( nbDomains > 1 ) + { + solidIDByDomain.resize( nbDomains+1, theHelper->GetSubShapeID() ); + int faceNbNodes, faceIndex, orientation, domainNb; + GmfGotoKwd( InpMsh, GmfSubDomainFromGeom ); + for ( int i = 0; i < nbDomains; ++i ) + { + faceIndex = 0; + GmfGetLin( InpMsh, GmfSubDomainFromGeom, + &faceNbNodes, &faceIndex, &orientation, &domainNb); + solidIDByDomain[ domainNb ] = 1; + if ( 0 < faceIndex && faceIndex-1 < theFaceByGhs3dId.size() ) + { + const SMDS_MeshElement* face = theFaceByGhs3dId[ faceIndex-1 ]; + const SMDS_MeshNode* nn[3] = { face->GetNode(0), + face->GetNode(1), + face->GetNode(2) }; + if ( orientation < 0 ) + std::swap( nn[1], nn[2] ); + solidIDByDomain[ domainNb ] = + findShapeID( *theHelper->GetMesh(), nn[0], nn[1], nn[2], toMeshHoles ); + if ( solidIDByDomain[ domainNb ] > 0 ) + { + const TopoDS_Shape& foundShape = theMeshDS->IndexToShape( solidIDByDomain[ domainNb ] ); + if ( ! theHelper->IsSubShape( foundShape, theHelper->GetSubShape() )) + solidIDByDomain[ domainNb ] = HOLE_ID; + } + } + } + } + if ( solidIDByDomain.size() < 2 ) + solidIDByDomain.resize( 2, solid1 ); + } + // Issue 0020682. Avoid creating nodes and tetras at place where // volumic elements already exist SMESH_ElementSearcher* elemSearcher = 0; std::vector< const SMDS_MeshElement* > foundVolumes; - if ( theHelper->GetMesh()->NbVolumes() > 0 ) - elemSearcher = SMESH_MeshAlgos::GetElementSearcher( *theHelper->GetMeshDS() ); + if ( !hasGeom && theHelper->GetMesh()->NbVolumes() > 0 ) + elemSearcher = SMESH_MeshAlgos::GetElementSearcher( *theMeshDS ); + auto_ptr< SMESH_ElementSearcher > elemSearcherDeleter( elemSearcher ); // IMP 0022172: [CEA 790] create the groups corresponding to domains std::vector< std::vector< const SMDS_MeshElement* > > elemsOfDomain; @@ -1230,7 +1279,7 @@ static bool readGMFFile(const char* theFile, delete [] GMFNode; return false; } - int dummy; + int dummy, solidID; GmfKwdCod token = it->first; nbRef = it->second; @@ -1403,42 +1452,78 @@ static bool readGMFFile(const char* theFile, } break; case GmfTetrahedra: - if ( elemSearcher ) { - // Issue 0020682. Avoid creating nodes and tetras at place where - // volumic elements already exist - if ( !node[1] || !node[0] || !node[2] || !node[3] ) - continue; - if ( elemSearcher->FindElementsByPoint((SMESH_TNodeXYZ(node[0]) + - SMESH_TNodeXYZ(node[1]) + - SMESH_TNodeXYZ(node[2]) + - SMESH_TNodeXYZ(node[3]) ) / 4., - SMDSAbs_Volume, foundVolumes )) - break; + if ( hasGeom ) + { + solidID = solidIDByDomain[ domainID[iElem]]; + if ( solidID != HOLE_ID ) + { + aCreatedElem = theHelper->AddVolume( node[1], node[0], node[2], node[3], + noID, force3d ); + theMeshDS->SetMeshElementOnShape( aCreatedElem, solidID ); + for ( int iN = 0; iN < 4; ++iN ) + if ( node[iN]->getshapeId() < 1 ) + theMeshDS->SetNodeInVolume( node[iN], solidID ); + } + } + else + { + if ( elemSearcher ) { + // Issue 0020682. Avoid creating nodes and tetras at place where + // volumic elements already exist + if ( !node[1] || !node[0] || !node[2] || !node[3] ) + continue; + if ( elemSearcher->FindElementsByPoint((SMESH_TNodeXYZ(node[0]) + + SMESH_TNodeXYZ(node[1]) + + SMESH_TNodeXYZ(node[2]) + + SMESH_TNodeXYZ(node[3]) ) / 4., + SMDSAbs_Volume, foundVolumes )) + break; + } + aCreatedElem = theHelper->AddVolume( node[1], node[0], node[2], node[3], + noID, force3d ); } - aCreatedElem = theHelper->AddVolume( node[1], node[0], node[2], node[3], noID, force3d ); break; case GmfHexahedra: - if ( elemSearcher ) { - // Issue 0020682. Avoid creating nodes and tetras at place where - // volumic elements already exist - if ( !node[1] || !node[0] || !node[2] || !node[3] || !node[4] || !node[5] || !node[6] || !node[7]) - continue; - if ( elemSearcher->FindElementsByPoint((SMESH_TNodeXYZ(node[0]) + - SMESH_TNodeXYZ(node[1]) + - SMESH_TNodeXYZ(node[2]) + - SMESH_TNodeXYZ(node[3]) + - SMESH_TNodeXYZ(node[4]) + - SMESH_TNodeXYZ(node[5]) + - SMESH_TNodeXYZ(node[6]) + - SMESH_TNodeXYZ(node[7])) / 8., - SMDSAbs_Volume, foundVolumes )) - break; + if ( hasGeom ) + { + solidID = solidIDByDomain[ domainID[iElem]]; + if ( solidID != HOLE_ID ) + { + aCreatedElem = theHelper->AddVolume( node[0], node[3], node[2], node[1], + node[4], node[7], node[6], node[5], + noID, force3d ); + theMeshDS->SetMeshElementOnShape( aCreatedElem, solidID ); + for ( int iN = 0; iN < 8; ++iN ) + if ( node[iN]->getshapeId() < 1 ) + theMeshDS->SetNodeInVolume( node[iN], solidID ); + } + } + else + { + if ( elemSearcher ) { + // Issue 0020682. Avoid creating nodes and tetras at place where + // volumic elements already exist + if ( !node[1] || !node[0] || !node[2] || !node[3] || !node[4] || !node[5] || !node[6] || !node[7]) + continue; + if ( elemSearcher->FindElementsByPoint((SMESH_TNodeXYZ(node[0]) + + SMESH_TNodeXYZ(node[1]) + + SMESH_TNodeXYZ(node[2]) + + SMESH_TNodeXYZ(node[3]) + + SMESH_TNodeXYZ(node[4]) + + SMESH_TNodeXYZ(node[5]) + + SMESH_TNodeXYZ(node[6]) + + SMESH_TNodeXYZ(node[7])) / 8., + SMDSAbs_Volume, foundVolumes )) + break; + } + aCreatedElem = theHelper->AddVolume( node[0], node[3], node[2], node[1], + node[4], node[7], node[6], node[5], + noID, force3d ); } - aCreatedElem = theHelper->AddVolume( node[0], node[3], node[2], node[1], - node[4], node[7], node[6], node[5], noID, force3d ); break; default: continue; - } + } // switch (token) + if ( aCreatedElem && toMakeGroupsOfDomains ) { if ( domainID[iElem] >= (int) elemsOfDomain.size() ) @@ -1451,6 +1536,14 @@ static bool readGMFFile(const char* theFile, } // switch (token) } // loop on tabRef + // remove nodes in holes + if ( hasGeom ) + { + for ( int i = 1; i <= nbVertices; ++i ) + if ( GMFNode[i]->NbInverseElements() == 0 ) + theMeshDS->RemoveFreeNode( GMFNode[i], /*sm=*/0, /*fromGroups=*/false ); + } + GmfCloseMesh(InpMsh); delete [] GMFNode; @@ -1480,21 +1573,17 @@ static bool readGMFFile(const char* theFile, aSubdomainFile.close(); #endif - if (elemSearcher) - { - MESSAGE("delete elemSearcher") - delete elemSearcher; - elemSearcher = 0; - } return true; } + static bool writeGMFFile(const char* theMeshFileName, const char* theRequiredFileName, const char* theSolFileName, const SMESH_ProxyMesh& theProxyMesh, - SMESH_Mesh * theMesh, + SMESH_MesherHelper& theHelper, std::vector & theNodeByGhs3dId, + std::vector & theFaceByGhs3dId, std::map & aNodeToGhs3dIdMap, std::vector & aNodeGroupByGhs3dId, std::vector & anEdgeGroupByGhs3dId, @@ -1522,6 +1611,8 @@ static bool writeGMFFile(const char* theMesh GHS3DPlugin_Hypothesis::TIDSortedElemGroupMap::iterator elemIt; TIDSortedElemSet::iterator elemSetIt; bool isOK; + SMESH_Mesh* theMesh = theHelper.GetMesh(); + const bool hasGeom = theMesh->HasShapeToMesh(); auto_ptr< SMESH_ElementSearcher > pntCls ( SMESH_MeshAlgos::GetElementSearcher(*theMesh->GetMeshDS())); @@ -1530,6 +1621,7 @@ static bool writeGMFFile(const char* theMesh // count faces int nbFaces = theProxyMesh.NbFaces(); int nbNodes; + theFaceByGhs3dId.reserve( nbFaces ); // groups management int usedEnforcedNodes = 0; @@ -1544,7 +1636,8 @@ static bool writeGMFFile(const char* theMesh /* ========================== FACES ========================== */ /* TRIANGLES ========================== */ - SMDS_ElemIteratorPtr eIt = theProxyMesh.GetFaces(); + SMDS_ElemIteratorPtr eIt = + hasGeom ? theProxyMesh.GetFaces( theHelper.GetSubShape()) : theProxyMesh.GetFaces(); while ( eIt->more() ) { elem = eIt->next(); @@ -1984,6 +2077,7 @@ static bool writeGMFFile(const char* theMesh int k=0; for(elemSetIt = anElemSet.begin() ; elemSetIt != anElemSet.end() ; ++elemSetIt,++k) { elem = (*elemSetIt); + theFaceByGhs3dId.push_back( elem ); nodeIt = elem->nodesIterator(); int index=0; for ( int j = 0; j < 3; ++j ) { @@ -1998,6 +2092,8 @@ static bool writeGMFFile(const char* theMesh GmfSetLin(idx, GmfTriangles, ntri[0], ntri[1], ntri[2], dummyint); aFaceGroupByGhs3dId[k] = ""; } + if ( !theHelper.GetMesh()->HasShapeToMesh() ) + SMESHUtils::FreeVector( theFaceByGhs3dId ); if (theKeptEnforcedTriangles.size()) { for(elemSetIt = theKeptEnforcedTriangles.begin() ; elemSetIt != theKeptEnforcedTriangles.end() ; ++elemSetIt,++k) { elem = (*elemSetIt); @@ -3264,80 +3360,59 @@ bool GHS3DPlugin_GHS3D::Compute(SMESH_Mesh& theMesh, // we count the number of shapes // _nbShape = countShape( meshDS, TopAbs_SOLID ); -- 0020330: Pb with ghs3d as a submesh - _nbShape = 0; + // _nbShape = 0; TopExp_Explorer expBox ( theShape, TopAbs_SOLID ); - for ( ; expBox.More(); expBox.Next() ) - _nbShape++; + // for ( ; expBox.More(); expBox.Next() ) + // _nbShape++; // create bounding box for every shape inside the compound - int iShape = 0; - TopoDS_Shape* tabShape; - double** tabBox; - tabShape = new TopoDS_Shape[_nbShape]; - tabBox = new double*[_nbShape]; - for (int i=0; i<_nbShape; i++) - tabBox[i] = new double[6]; - Standard_Real Xmin, Ymin, Zmin, Xmax, Ymax, Zmax; - - for (expBox.ReInit(); expBox.More(); expBox.Next()) { - tabShape[iShape] = expBox.Current(); - Bnd_Box BoundingBox; - BRepBndLib::Add(expBox.Current(), BoundingBox); - BoundingBox.Get(Xmin, Ymin, Zmin, Xmax, Ymax, Zmax); - tabBox[iShape][0] = Xmin; tabBox[iShape][1] = Xmax; - tabBox[iShape][2] = Ymin; tabBox[iShape][3] = Ymax; - tabBox[iShape][4] = Zmin; tabBox[iShape][5] = Zmax; - iShape++; - } + // int iShape = 0; + // TopoDS_Shape* tabShape; + // double** tabBox; + // tabShape = new TopoDS_Shape[_nbShape]; + // tabBox = new double*[_nbShape]; + // for (int i=0; i<_nbShape; i++) + // tabBox[i] = new double[6]; + // Standard_Real Xmin, Ymin, Zmin, Xmax, Ymax, Zmax; + + // for (expBox.ReInit(); expBox.More(); expBox.Next()) { + // tabShape[iShape] = expBox.Current(); + // Bnd_Box BoundingBox; + // BRepBndLib::Add(expBox.Current(), BoundingBox); + // BoundingBox.Get(Xmin, Ymin, Zmin, Xmax, Ymax, Zmax); + // tabBox[iShape][0] = Xmin; tabBox[iShape][1] = Xmax; + // tabBox[iShape][2] = Ymin; tabBox[iShape][3] = Ymax; + // tabBox[iShape][4] = Zmin; tabBox[iShape][5] = Zmax; + // iShape++; + // } // a unique working file name // to avoid access to the same files by eg different users _genericName = GHS3DPlugin_Hypothesis::GetFileName(_hyp); TCollection_AsciiString aGenericName((char*) _genericName.c_str() ); + TCollection_AsciiString aGenericNameRequired = aGenericName + "_required"; - TCollection_AsciiString aResultFileName; TCollection_AsciiString aLogFileName = aGenericName + ".log"; // log - // The output .mesh file does not contain yet the subdomain-info (Ghs3D 4.2) -// TCollection_AsciiString aGMFFileName, aRequiredVerticesFileName, aSolFileName; -// TCollection_AsciiString aGenericNameRequired = aGenericName + "_required"; -// #ifdef _DEBUG_ -// aGMFFileName = aGenericName + ".mesh"; // GMF mesh file -// aResultFileName = aGenericName + "Vol.mesh"; // GMF mesh file -// aRequiredVerticesFileName = aGenericNameRequired + ".mesh"; // GMF required vertices mesh file -// aSolFileName = aGenericName + "_required.sol"; // GMF solution file -// #else -// aGMFFileName = aGenericName + ".meshb"; // GMF mesh file -// aResultFileName = aGenericName + "Vol.meshb"; // GMF mesh file -// aRequiredVerticesFileName = aGenericNameRequired + ".meshb"; // GMF required vertices mesh file -// aSolFileName = aGenericName + "_required.solb"; // GMF solution file -// #endif - - TCollection_AsciiString aFacesFileName, aPointsFileName, aBadResFileName, aBbResFileName; + TCollection_AsciiString aResultFileName; - aFacesFileName = aGenericName + ".faces"; // in faces - aPointsFileName = aGenericName + ".points"; // in points - aResultFileName = aGenericName + ".noboite";// out points and volumes - aBadResFileName = aGenericName + ".boite"; // out bad result - aBbResFileName = aGenericName + ".bb"; // out vertex stepsize + TCollection_AsciiString aGMFFileName, aRequiredVerticesFileName, aSolFileName; +//#ifdef _DEBUG_ + aGMFFileName = aGenericName + ".mesh"; // GMF mesh file + aResultFileName = aGenericName + "Vol.mesh"; // GMF mesh file + aRequiredVerticesFileName = aGenericNameRequired + ".mesh"; // GMF required vertices mesh file + aSolFileName = aGenericNameRequired + ".sol"; // GMF solution file +//#else +// aGMFFileName = aGenericName + ".meshb"; // GMF mesh file +// aResultFileName = aGenericName + "Vol.meshb"; // GMF mesh file +// aRequiredVerticesFileName = aGenericNameRequired + ".meshb"; // GMF required vertices mesh file +// aSolFileName = aGenericNameRequired + ".solb"; // GMF solution file +//#endif - // ----------------- - // make input files - // ----------------- - - ofstream aFacesFile ( aFacesFileName.ToCString() , ios::out); - ofstream aPointsFile ( aPointsFileName.ToCString() , ios::out); - - Ok = - aFacesFile.rdbuf()->is_open() && aPointsFile.rdbuf()->is_open(); - if (!Ok) { - INFOS( "Can't write into " << aFacesFileName); - return error(SMESH_Comment("Can't write into ") << aFacesFileName); - } - std::map aNodeId2NodeIndexMap, aSmdsToGhs3dIdMap, anEnforcedNodeIdToGhs3dIdMap; std::map aGhs3dIdToNodeMap; std::map nodeID2nodeIndexMap; + std::map, std::string> enfVerticesWithGroup; GHS3DPlugin_Hypothesis::TGHS3DEnforcedVertexCoordsValues coordsSizeMap = GHS3DPlugin_Hypothesis::GetEnforcedVerticesCoordsSize(_hyp); GHS3DPlugin_Hypothesis::TIDSortedNodeGroupMap enforcedNodes = GHS3DPlugin_Hypothesis::GetEnforcedNodes(_hyp); GHS3DPlugin_Hypothesis::TIDSortedElemGroupMap enforcedEdges = GHS3DPlugin_Hypothesis::GetEnforcedEdges(_hyp); @@ -3357,6 +3432,10 @@ bool GHS3DPlugin_GHS3D::Compute(SMESH_Mesh& theMesh, SMESH_MesherHelper helper( theMesh ); helper.SetSubShape( theShape ); + std::vector aNodeByGhs3dId, anEnforcedNodeByGhs3dId; + std::vector aFaceByGhs3dId; + std::map aNodeToGhs3dIdMap; + std::vector aNodeGroupByGhs3dId, anEdgeGroupByGhs3dId, aFaceGroupByGhs3dId; { SMESH_ProxyMesh::Ptr proxyMesh( new SMESH_ProxyMesh( theMesh )); @@ -3386,19 +3465,20 @@ bool GHS3DPlugin_GHS3D::Compute(SMESH_Mesh& theMesh, return false; } - Ok = (writePoints( aPointsFile, helper, - aSmdsToGhs3dIdMap, anEnforcedNodeIdToGhs3dIdMap, aGhs3dIdToNodeMap, - nodeIDToSizeMap, - coordsSizeMap, enforcedNodes, enforcedEdges, enforcedTriangles) - && - writeFaces ( aFacesFile, *proxyMesh, theShape, - aSmdsToGhs3dIdMap, anEnforcedNodeIdToGhs3dIdMap, - enforcedEdges, enforcedTriangles )); -// Ok = writeGMFFile(aGMFFileName.ToCString(), aRequiredVerticesFileName.ToCString(), aSolFileName.ToCString(), -// helper, *proxyMesh, -// aNodeId2NodeIndexMap, aSmdsToGhs3dIdMap, aGhs3dIdToNodeMap, -// enforcedNodes, enforcedEdges, enforcedTriangles, /*enforcedQuadrangles,*/ -// coordsSizeMap); + // Ok = (writePoints( aPointsFile, helper, + // aSmdsToGhs3dIdMap, anEnforcedNodeIdToGhs3dIdMap, aGhs3dIdToNodeMap, + // nodeIDToSizeMap, + // coordsSizeMap, enforcedNodes, enforcedEdges, enforcedTriangles) + // && + // writeFaces ( aFacesFile, *proxyMesh, theShape, + // aSmdsToGhs3dIdMap, anEnforcedNodeIdToGhs3dIdMap, + // enforcedEdges, enforcedTriangles )); + Ok = writeGMFFile(aGMFFileName.ToCString(), aRequiredVerticesFileName.ToCString(), aSolFileName.ToCString(), + *proxyMesh, helper, + aNodeByGhs3dId, aFaceByGhs3dId, aNodeToGhs3dIdMap, + aNodeGroupByGhs3dId, anEdgeGroupByGhs3dId, aFaceGroupByGhs3dId, + enforcedNodes, enforcedEdges, enforcedTriangles, /*enforcedQuadrangles,*/ + enfVerticesWithGroup, coordsSizeMap); } // Write aSmdsToGhs3dIdMap to temp file @@ -3418,16 +3498,12 @@ bool GHS3DPlugin_GHS3D::Compute(SMESH_Mesh& theMesh, } aIdsFile.close(); - aFacesFile.close(); - aPointsFile.close(); if ( ! Ok ) { if ( !_keepFiles ) { -// removeFile( aGMFFileName ); -// removeFile( aRequiredVerticesFileName ); -// removeFile( aSolFileName ); - removeFile( aFacesFileName ); - removeFile( aPointsFileName ); + removeFile( aGMFFileName ); + removeFile( aRequiredVerticesFileName ); + removeFile( aSolFileName ); removeFile( aSmdsToGhs3dIdMapFileName ); } return error(COMPERR_BAD_INPUT_MESH); @@ -3439,15 +3515,13 @@ bool GHS3DPlugin_GHS3D::Compute(SMESH_Mesh& theMesh, // ----------------- TCollection_AsciiString cmd( (char*)GHS3DPlugin_Hypothesis::CommandToRun( _hyp ).c_str() ); - cmd += TCollection_AsciiString(" -f ") + aGenericName; // file to read + cmd += TCollection_AsciiString(" --in ") + aGenericName; + if ( nbEnforcedVertices + nbEnforcedNodes) + cmd += TCollection_AsciiString(" --required_vertices ") + aGenericNameRequired; + cmd += TCollection_AsciiString(" --out ") + aResultFileName; if ( !_logInStandardOutput ) cmd += TCollection_AsciiString(" 1>" ) + aLogFileName; // dump into file - // The output .mesh file does not contain yet the subdomain-info (Ghs3D 4.2) -// cmd += TCollection_AsciiString(" --in ") + aGenericName; -// cmd += TCollection_AsciiString(" --required_vertices ") + aGenericNameRequired; -// cmd += TCollection_AsciiString(" --out ") + aResultGMFFileName; -// cmd += TCollection_AsciiString(" 1>" ) + aLogFileName; // dump into file std::cout << std::endl; std::cout << "Ghs3d execution..." << std::endl; @@ -3466,15 +3540,16 @@ bool GHS3DPlugin_GHS3D::Compute(SMESH_Mesh& theMesh, // Mapping the result file - int fileOpen; - fileOpen = open( aResultFileName.ToCString(), O_RDONLY); - if ( fileOpen < 0 ) { - std::cout << std::endl; - std::cout << "Can't open the " << aResultFileName.ToCString() << " GHS3D output file" << std::endl; - std::cout << "Log: " << aLogFileName << std::endl; - Ok = false; - } - else { + // int fileOpen; + // fileOpen = open( aResultFileName.ToCString(), O_RDONLY); + // if ( fileOpen < 0 ) { + // std::cout << std::endl; + // std::cout << "Can't open the " << aResultFileName.ToCString() << " GHS3D output file" << std::endl; + // std::cout << "Log: " << aLogFileName << std::endl; + // Ok = false; + // } + // else { + GHS3DPlugin_Hypothesis::TSetStrings groupsToRemove = GHS3DPlugin_Hypothesis::GetGroupsToRemove(_hyp); bool toMeshHoles = _hyp ? _hyp->GetToMeshHoles(true) : GHS3DPlugin_Hypothesis::DefaultMeshHoles(); const bool toMakeGroupsOfDomains = GHS3DPlugin_Hypothesis::GetToMakeGroupsOfDomains( _hyp ); @@ -3482,29 +3557,26 @@ bool GHS3DPlugin_GHS3D::Compute(SMESH_Mesh& theMesh, helper.IsQuadraticSubMesh( theShape ); helper.SetElementsOnShape( false ); - Ok = readResultFile( fileOpen, -#ifdef WIN32 - aResultFileName.ToCString(), -#endif - this, - /*theMesh, */helper, tabShape, tabBox, _nbShape, - aGhs3dIdToNodeMap, aNodeId2NodeIndexMap, - toMeshHoles, - nbEnforcedVertices, nbEnforcedNodes, - enforcedEdges, enforcedTriangles, - toMakeGroupsOfDomains ); - -// Ok = readGMFFile( -// #ifndef GMF_HAS_SUBDOMAIN_INFO -// fileOpen, +// Ok = readResultFile( fileOpen, +// #ifdef WIN32 +// aResultFileName.ToCString(), // #endif -// aGenericName.ToCString(), theMesh, -// _nbShape, tabShape, tabBox, -// aGhs3dIdToNodeMap, toMeshHoles, -// nbEnforcedVertices, nbEnforcedNodes); +// this, +// /*theMesh, */helper, tabShape, tabBox, _nbShape, +// aGhs3dIdToNodeMap, aNodeId2NodeIndexMap, +// toMeshHoles, +// nbEnforcedVertices, nbEnforcedNodes, +// enforcedEdges, enforcedTriangles, +// toMakeGroupsOfDomains ); + + Ok = readGMFFile(aResultFileName.ToCString(), + this, + &helper, aNodeByGhs3dId, aFaceByGhs3dId, aNodeToGhs3dIdMap, + aNodeGroupByGhs3dId, anEdgeGroupByGhs3dId, aFaceGroupByGhs3dId, + groupsToRemove, toMakeGroupsOfDomains, toMeshHoles); removeEmptyGroupsOfDomains( helper.GetMesh(), /*notEmptyAsWell =*/ !toMakeGroupsOfDomains ); - } + //} @@ -3537,12 +3609,11 @@ bool GHS3DPlugin_GHS3D::Compute(SMESH_Mesh& theMesh, if ( !_keepFiles ) { if (! Ok && _compute_canceled) - removeFile( aLogFileName ); - removeFile( aFacesFileName ); - removeFile( aPointsFileName ); + removeFile( aLogFileName ); + removeFile( aGMFFileName ); + removeFile( aRequiredVerticesFileName ); + removeFile( aSolFileName ); removeFile( aResultFileName ); - removeFile( aBadResFileName ); - removeFile( aBbResFileName ); removeFile( aSmdsToGhs3dIdMapFileName ); } std::cout << "<" << aResultFileName.ToCString() << "> GHS3D output file "; @@ -3551,9 +3622,9 @@ bool GHS3DPlugin_GHS3D::Compute(SMESH_Mesh& theMesh, std::cout << "treated !" << std::endl; std::cout << std::endl; - _nbShape = 0; // re-initializing _nbShape for the next Compute() method call - delete [] tabShape; - delete [] tabBox; + // _nbShape = 0; // re-initializing _nbShape for the next Compute() method call + // delete [] tabShape; + // delete [] tabBox; return Ok; } @@ -3684,6 +3755,7 @@ bool GHS3DPlugin_GHS3D::Compute(SMESH_Mesh& theMesh, std::cout << nbEnforcedVertices << " enforced " << tmpStr << " from hypo" << std::endl; std::vector aNodeByGhs3dId, anEnforcedNodeByGhs3dId; + std::vector aFaceByGhs3dId; std::map aNodeToGhs3dIdMap; std::vector aNodeGroupByGhs3dId, anEdgeGroupByGhs3dId, aFaceGroupByGhs3dId; { @@ -3696,8 +3768,8 @@ bool GHS3DPlugin_GHS3D::Compute(SMESH_Mesh& theMesh, } Ok = writeGMFFile(aGMFFileName.ToCString(), aRequiredVerticesFileName.ToCString(), aSolFileName.ToCString(), - *proxyMesh, &theMesh, - aNodeByGhs3dId, aNodeToGhs3dIdMap, + *proxyMesh, *theHelper, + aNodeByGhs3dId, aFaceByGhs3dId, aNodeToGhs3dIdMap, aNodeGroupByGhs3dId, anEdgeGroupByGhs3dId, aFaceGroupByGhs3dId, enforcedNodes, enforcedEdges, enforcedTriangles, enfVerticesWithGroup, coordsSizeMap); @@ -3735,7 +3807,7 @@ bool GHS3DPlugin_GHS3D::Compute(SMESH_Mesh& theMesh, Ok = readGMFFile(aResultFileName.ToCString(), this, - theHelper, theShape, aNodeByGhs3dId, aNodeToGhs3dIdMap, + theHelper, aNodeByGhs3dId, aFaceByGhs3dId, aNodeToGhs3dIdMap, aNodeGroupByGhs3dId, anEdgeGroupByGhs3dId, aFaceGroupByGhs3dId, groupsToRemove, toMakeGroupsOfDomains); @@ -3775,7 +3847,7 @@ bool GHS3DPlugin_GHS3D::Compute(SMESH_Mesh& theMesh, if ( !_keepFiles ) { if (! Ok && _compute_canceled) - removeFile( aLogFileName ); + removeFile( aLogFileName ); removeFile( aGMFFileName ); removeFile( aResultFileName ); removeFile( aRequiredVerticesFileName ); @@ -4539,8 +4611,8 @@ bool GHS3DPlugin_GHS3D::Evaluate(SMESH_Mesh& aMesh, bool GHS3DPlugin_GHS3D::importGMFMesh(const char* theGMFFileName, SMESH_Mesh& theMesh) { SMESH_MesherHelper* helper = new SMESH_MesherHelper(theMesh ); -// TopoDS_Shape theShape = theMesh.GetShapeToMesh(); std::vector dummyNodeVector; + std::vector aFaceByGhs3dId; std::map dummyNodeMap; std::map, std::string> dummyEnfVertGroup; std::vector dummyElemGroup; @@ -4548,7 +4620,7 @@ bool GHS3DPlugin_GHS3D::importGMFMesh(const char* theGMFFileName, SMESH_Mesh& th bool ok = readGMFFile(theGMFFileName, this, - helper, theMesh.GetShapeToMesh(), dummyNodeVector, dummyNodeMap, dummyElemGroup, dummyElemGroup, dummyElemGroup, dummyGroupsToRemove); + helper, dummyNodeVector, aFaceByGhs3dId, dummyNodeMap, dummyElemGroup, dummyElemGroup, dummyElemGroup, dummyGroupsToRemove); theMesh.GetMeshDS()->Modified(); return ok; } diff --git a/src/GUI/GHS3DPluginGUI_Enums.h b/src/GUI/GHS3DPluginGUI_Enums.h index 844ddcb..95939ae 100644 --- a/src/GUI/GHS3DPluginGUI_Enums.h +++ b/src/GUI/GHS3DPluginGUI_Enums.h @@ -58,7 +58,7 @@ enum { // Enforced vertices widget inputs enum { ENF_VER_WARNING = 0, - ENF_VER_VERTEX,// = 0, + ENF_VER_VERTEX = 0, ENF_VER_X_COORD, ENF_VER_Y_COORD, ENF_VER_Z_COORD, @@ -71,7 +71,7 @@ enum { // Enforced meshes widget inputs enum { ENF_MESH_WARNING = 0, - ENF_MESH_MESH /*= 0*/, + ENF_MESH_MESH = 0, ENF_MESH_CONSTRAINT, ENF_MESH_GROUP, ENF_MESH_BTN, diff --git a/src/GUI/GHS3DPluginGUI_HypothesisCreator.cxx b/src/GUI/GHS3DPluginGUI_HypothesisCreator.cxx index a03361f..2429298 100644 --- a/src/GUI/GHS3DPluginGUI_HypothesisCreator.cxx +++ b/src/GUI/GHS3DPluginGUI_HypothesisCreator.cxx @@ -502,17 +502,17 @@ QFrame* GHS3DPluginGUI_HypothesisCreator::buildFrame() // myGlobalGroupName = new QCheckBox(tr("GHS3D_ENF_VER_GROUPS"), myEnfGroup); // myGlobalGroupName->setChecked(false); - QGroupBox* GroupBox = new QGroupBox( myEnfGroup ); - QLabel* info = new QLabel( GroupBox ); - info->setText( tr( "GHS3D_ENF_VER_INFO" ) ); - info->setWordWrap( true ); - QVBoxLayout* GroupBoxVLayout = new QVBoxLayout( GroupBox ); - GroupBoxVLayout->setSpacing( 6 ); - GroupBoxVLayout->setMargin( 11 ); - GroupBoxVLayout->addWidget( info ); + // QGroupBox* GroupBox = new QGroupBox( myEnfGroup ); + // QLabel* info = new QLabel( GroupBox ); + // info->setText( tr( "GHS3D_ENF_VER_INFO" ) ); + // info->setWordWrap( true ); + // QVBoxLayout* GroupBoxVLayout = new QVBoxLayout( GroupBox ); + // GroupBoxVLayout->setSpacing( 6 ); + // GroupBoxVLayout->setMargin( 11 ); + // GroupBoxVLayout->addWidget( info ); - anEnfLayout->addWidget(GroupBox, ENF_VER_WARNING, 0, 1, 2 ); + //anEnfLayout->addWidget(GroupBox, ENF_VER_WARNING, 0, 1, 2 ); anEnfLayout->addWidget(myEnforcedTableWidget, ENF_VER_VERTEX, 0, ENF_VER_NB_LINES, 1); QGridLayout* anEnfLayout2 = new QGridLayout(myEnfGroup); @@ -581,16 +581,16 @@ QFrame* GHS3DPluginGUI_HypothesisCreator::buildFrame() // addEnfMeshButton->setEnabled(false); removeEnfMeshButton = new QPushButton(tr("GHS3D_ENF_REMOVE"),myEnfMeshGroup); - QGroupBox* GroupBox2 = new QGroupBox( myEnfMeshGroup ); - QLabel* info2 = new QLabel( GroupBox2 ); - info2->setText( tr( "GHS3D_ENF_MESH_INFO" ) ); - info2->setWordWrap( true ); - QVBoxLayout* GroupBox2VLayout = new QVBoxLayout( GroupBox2 ); - GroupBox2VLayout->setSpacing( 6 ); - GroupBox2VLayout->setMargin( 11 ); - GroupBox2VLayout->addWidget( info2 ); + // QGroupBox* GroupBox2 = new QGroupBox( myEnfMeshGroup ); + // QLabel* info2 = new QLabel( GroupBox2 ); + // info2->setText( tr( "GHS3D_ENF_MESH_INFO" ) ); + // info2->setWordWrap( true ); + // QVBoxLayout* GroupBox2VLayout = new QVBoxLayout( GroupBox2 ); + // GroupBox2VLayout->setSpacing( 6 ); + // GroupBox2VLayout->setMargin( 11 ); + // GroupBox2VLayout->addWidget( info2 ); - anEnfMeshLayout->addWidget( GroupBox2, ENF_MESH_WARNING, 0, 1, 2 ); + // anEnfMeshLayout->addWidget( GroupBox2, ENF_MESH_WARNING, 0, 1, 2 ); anEnfMeshLayout->addWidget(myEnforcedMeshTableWidget, ENF_MESH_MESH, 0, ENF_MESH_NB_LINES , 1); QGridLayout* anEnfMeshLayout2 = new QGridLayout(myEnfMeshGroup); -- 2.39.2