-// Copyright (C) 2007-2014 CEA/DEN, EDF R&D
+// Copyright (C) 2007-2015 CEA/DEN, EDF R&D
//
// This library is free software; you can redistribute it and/or
// modify it under the terms of the GNU Lesser General Public
return aShape;
}
-//=======================================================================
-//function : findEdge
-//purpose :
-//=======================================================================
-
-static int findEdge(const SMDS_MeshNode* aNode,
- const SMESHDS_Mesh* aMesh,
- const int nEdge,
- const TopoDS_Shape* t_Edge) {
-
- TopoDS_Shape aPntShape, foundEdge;
- TopoDS_Vertex aVertex;
- gp_Pnt aPnt( aNode->X(), aNode->Y(), aNode->Z() );
-
- int foundInd, ind;
- double nearest = RealLast(), *t_Dist;
- double epsilon = Precision::Confusion();
-
- t_Dist = new double[ nEdge ];
- aPntShape = BRepBuilderAPI_MakeVertex( aPnt ).Shape();
- aVertex = TopoDS::Vertex( aPntShape );
-
- for ( ind=0; ind < nEdge; ind++ ) {
- BRepExtrema_DistShapeShape aDistance ( aVertex, t_Edge[ind] );
- t_Dist[ind] = aDistance.Value();
- if ( t_Dist[ind] < nearest ) {
- nearest = t_Dist[ind];
- foundEdge = t_Edge[ind];
- foundInd = ind;
- if ( nearest < epsilon )
- ind = nEdge;
- }
- }
-
- delete [] t_Dist;
- return aMesh->ShapeToIndex( foundEdge );
-}
-
//=======================================================================
//function : getNbShape
//purpose :
const TopoDS_Shape* tabShape,
double** tabBox)
{
- // ---------------------------------
- // Optimisation of the plugin ...
- // Retrieve the correspondance edge --> shape
- // (which is very costly) only when user
- // has defined at least one group of edges
- // which should be rare for a 3d mesh !
- // ---------------------------------
-
- bool retrieve_edges = false;
- const std::set<SMESHDS_GroupBase*>& aGroups = theMesh->GetGroups();
- set<SMESHDS_GroupBase*>::const_iterator GrIt = aGroups.begin();
- for (; GrIt != aGroups.end(); GrIt++)
- {
- SMESHDS_GroupBase* aGrp = *GrIt;
- if ( !aGrp )
- continue;
- if ( aGrp->GetType() == SMDSAbs_Edge )
- {
- retrieve_edges = true;
- break;
- }
- }
-
// ---------------------------------
// Read generated elements and nodes
// ---------------------------------
}
nbElem = 0;
- if ( nField < (mapField.size() - 1) && nField >= 0 )
+ if ( nField < int(mapField.size() - 1) && nField >= 0 )
fileRes >> nbElem;
switch (nField) {
if ( aPnt.Distance( HexoticPnt ) < epsilon )
break;
}
+ if ( nodeAssigne[ nodeID[0] ] != 0 ) { // because "Edges" go before "Corners"
+ theMesh->UnSetNodeOnShape( node[0] );
+ nodeAssigne[ nodeID[0] ] = 0;
+ }
break;
}
case 4: { // "Edges"
int iNode = 1;
if ( nodeAssigne[ nodeID[0] ] == 0 || nodeAssigne[ nodeID[0] ] == 2 )
iNode = 0;
- if(retrieve_edges)
- shapeID = findEdge( node[iNode], theMesh, nbShapeEdge, tabEdge );
- else
- shapeID = 0;
+ shapeID = dummy;
break;
}
case 5: { // "Ridges"
}
nbElem = 0;
- if ( nField < (mapField.size() - 1) && nField >= 0 )
+ if ( nField < int(mapField.size() - 1) && nField >= 0 )
fileRes >> nbElem;
switch (nField) {
_hexoticVerbosity = hyp->GetHexoticVerbosity();
_hexoticMaxMemory = hyp->GetHexoticMaxMemory();
_hexoticSdMode = hyp->GetHexoticSdMode();
+ _textOptions = hyp->GetTextOptions();
_sizeMaps = hyp->GetSizeMaps();
+ _nbLayers = hyp->GetNbLayers();
+ _firstLayerSize = hyp->GetFirstLayerSize();
+ _direction = hyp->GetDirection();
+ _growth = hyp->GetGrowth();
+ _facesWithLayers = hyp->GetFacesWithLayers();
+ _imprintedFaces = hyp->GetImprintedFaces();
}
else {
cout << std::endl;
_hexoticVerbosity = hyp->GetDefaultHexoticVerbosity();
_hexoticMaxMemory = hyp->GetDefaultHexoticMaxMemory();
_hexoticSdMode = hyp->GetDefaultHexoticSdMode();
+ _textOptions = hyp->GetDefaultTextOptions();
_sizeMaps = hyp->GetDefaultHexoticSizeMaps();
+ _nbLayers = hyp->GetDefaultNbLayers();
+ _firstLayerSize = hyp->GetDefaultFirstLayerSize();
+ _direction = hyp->GetDefaultDirection();
+ _growth = hyp->GetDefaultGrowth();
+ _facesWithLayers = hyp->GetDefaultFacesWithLayers();
+ _imprintedFaces = hyp->GetDefaultImprintedFaces();
}
}
//purpose :
//=======================================================================
-static TCollection_AsciiString getTmpDir()
-{
- TCollection_AsciiString aTmpDir;
-
- char *Tmp_dir = getenv("SALOME_TMP_DIR");
-#ifdef WIN32
- if(Tmp_dir == NULL) {
- Tmp_dir = getenv("TEMP");
- if( Tmp_dir== NULL )
- Tmp_dir = getenv("TMP");
- }
-#endif
-
- if(Tmp_dir != NULL) {
- aTmpDir = Tmp_dir;
-#ifdef WIN32
- if(aTmpDir.Value(aTmpDir.Length()) != '\\') aTmpDir+='\\';
-#else
- if(aTmpDir.Value(aTmpDir.Length()) != '/') aTmpDir+='/';
-#endif
- }
- else {
-#ifdef WIN32
- aTmpDir = TCollection_AsciiString("C:\\");
-#else
- aTmpDir = TCollection_AsciiString("/tmp/");
-#endif
- }
- return aTmpDir;
-}
+// static TCollection_AsciiString getTmpDir()
+// {
+// TCollection_AsciiString aTmpDir;
+
+// char *Tmp_dir = getenv("SALOME_TMP_DIR");
+// #ifdef WIN32
+// if(Tmp_dir == NULL) {
+// Tmp_dir = getenv("TEMP");
+// if( Tmp_dir== NULL )
+// Tmp_dir = getenv("TMP");
+// }
+// #endif
+
+// if(Tmp_dir != NULL) {
+// aTmpDir = Tmp_dir;
+// #ifdef WIN32
+// if(aTmpDir.Value(aTmpDir.Length()) != '\\') aTmpDir+='\\';
+// #else
+// if(aTmpDir.Value(aTmpDir.Length()) != '/') aTmpDir+='/';
+// #endif
+// }
+// else {
+// #ifdef WIN32
+// aTmpDir = TCollection_AsciiString("C:\\");
+// #else
+// aTmpDir = TCollection_AsciiString("/tmp/");
+// #endif
+// }
+// return aTmpDir;
+// }
//=======================================================================
//function : getSuffix
cout << " " << _name << " Number of threads = " << _hexoticNbProc << std::endl;
cout << " " << _name << " Working directory = \"" << _hexoticWorkingDirectory << "\"" << std::endl;
cout << " " << _name << " Sub. Dom mode = " << _hexoticSdMode << std::endl;
+ cout << " " << _name << " Text options = \"" << _textOptions << "\"" << std::endl;
+ cout << " " << _name << " Number of layers = " << _nbLayers << std::endl;
+ cout << " " << _name << " Size of the first layer = " << _firstLayerSize << std::endl;
+ cout << " " << _name << " Direction of the layers = " << ( _direction ? "Inward" : "Outward" ) << std::endl;
+ cout << " " << _name << " Growth = " << _growth << std::endl;
+ if (!_facesWithLayers.empty()) {
+ cout << " " << _name << " Faces with layers = ";
+ for (size_t i = 0; i < _facesWithLayers.size(); i++)
+ {
+ cout << _facesWithLayers.at(i);
+ if ((i + 1) != _facesWithLayers.size())
+ cout << ", ";
+ }
+ cout << std::endl;
+ }
+ if (!_imprintedFaces.empty()) {
+ cout << " " << _name << " Imprinted faces = ";
+ for (size_t i = 0; i < _imprintedFaces.size(); i++)
+ {
+ cout << _imprintedFaces.at(i);
+ if ((i + 1) != _imprintedFaces.size())
+ cout << ", ";
+ }
+ cout << std::endl;
+ }
TCollection_AsciiString run_Hexotic( "mg-hexa.exe" );
TCollection_AsciiString verb = " --verbose ";
TCollection_AsciiString maxmem = " --max_memory ";
- TCollection_AsciiString minLevel, maxLevel, minSize, maxSize, sharpAngle, mode, nbproc, verbosity, maxMemory;
+ TCollection_AsciiString comNbLayers = " --number_of_boundary_layers ";
+ TCollection_AsciiString comFirstLayerSize = " --height_of_the_first_layer ";
+ TCollection_AsciiString comDirection = " --boundary_layers_subdomain_direction ";
+ TCollection_AsciiString comGrowth = " --boundary_layers_geometric_progression ";
+ TCollection_AsciiString comFacesWithLayers = " --boundary_layers_surface_ids ";
+ TCollection_AsciiString comImptintedFaces = " --imprinted_surface_ids ";
+
+ TCollection_AsciiString minLevel, maxLevel, minSize, maxSize, sharpAngle, mode, nbproc, verbosity, maxMemory,
+ textOptions, nbLayers, firstLayerSize, direction, growth, facesWithLayers, imprintedFaces;
minLevel = _hexesMinLevel;
maxLevel = _hexesMaxLevel;
minSize = _hexesMinSize;
nbproc = _hexoticNbProc;
verbosity = _hexoticVerbosity;
maxMemory = _hexoticMaxMemory;
+ textOptions = (" " + _textOptions + " ").c_str();
+ nbLayers = _nbLayers;
+ firstLayerSize = _firstLayerSize;
+ direction = _direction ? "1" : "-1";
+ growth = _growth;
+ for (size_t i = 0; i < _facesWithLayers.size(); i++)
+ {
+ facesWithLayers += _facesWithLayers[i];
+ if ((i + 1) != _facesWithLayers.size())
+ facesWithLayers += ",";
+ }
+ for (size_t i = 0; i < _imprintedFaces.size(); i++)
+ {
+ imprintedFaces += _imprintedFaces[i];
+ if ((i + 1) != _imprintedFaces.size())
+ imprintedFaces += ",";
+ }
if (_hexoticIgnoreRidges)
run_Hexotic += ignoreRidges;
if (_sizeMaps.begin() != _sizeMaps.end())
run_Hexotic += sizeMap + Hexotic_SizeMap_Prefix;
+ if (_nbLayers > 0 &&
+ _firstLayerSize > 0 &&
+ _growth > 0 &&
+ !_facesWithLayers.empty())
+ {
+ run_Hexotic += comNbLayers + nbLayers;
+ run_Hexotic += comFirstLayerSize + firstLayerSize;
+ run_Hexotic += comDirection + direction;
+ run_Hexotic += comGrowth + growth;
+ run_Hexotic += comFacesWithLayers + facesWithLayers;
+ if (!_imprintedFaces.empty())
+ run_Hexotic += comImptintedFaces + imprintedFaces;
+ }
run_Hexotic += in + Hexotic_In + out + Hexotic_Out;
run_Hexotic += subdom + mode;
#ifndef WIN32
run_Hexotic += verb + verbosity;
run_Hexotic += maxmem + maxMemory;
+ if (!_textOptions.empty())
+ run_Hexotic += textOptions;
+
return run_Hexotic.ToCString();
}
// to prevent from displaying error message after computing,
// SetIsAlwaysComputed( true ) to empty sub-meshes
- vector< SMESH_subMesh* > subMeshesAlwaysComp;
+ std::vector< SMESH_subMesh* > subMeshesAlwaysComp;
for ( int i = 0; i < _nbShape; ++i )
if ( SMESH_subMesh* sm = aMesh.GetSubMeshContaining( aShape ))
{
if ( aTmpDir.Value(aTmpDir.Length()) != '/' ) aTmpDir += '/';
#endif
TCollection_AsciiString Hexotic_In(""), Hexotic_Out, Hexotic_SizeMap_Prefix;
- TCollection_AsciiString modeFile_In( "chmod 666 " ), modeFile_Out( "chmod 666 " );
- TCollection_AsciiString aLogFileName = aTmpDir + "Hexotic"+getSuffix()+".log"; // log
+ TCollection_AsciiString modeFile_In( "chmod 666 " ), modeFile_Out( "chmod 666 " ); TCollection_AsciiString aLogFileName = aTmpDir + "Hexotic"+getSuffix()+".log"; // log
std::map <int,int> aSmdsToHexoticIdMap;
std::map <int,const SMDS_MeshNode*> aHexoticIdToNodeMap;
#ifdef WITH_BLSURFPLUGIN
bool defaultInputFile = true;
if (_blsurfHypo && !_blsurfHypo->GetQuadAllowed()) {
- Hexotic_In = TCollection_AsciiString(_blsurfHypo->GetGMFFile().c_str());
- if (Hexotic_In != "")
+ Hexotic_In = _blsurfHypo->GetGMFFile().c_str();
+ if ( !Hexotic_In.IsEmpty() &&
+ SMESH_File( _blsurfHypo->GetGMFFile() ).exists() )
defaultInputFile = false;
}
if (defaultInputFile) {
// --------------
std::ifstream fileRes( Hexotic_Out.ToCString() );
+#ifndef WIN32
modeFile_Out += Hexotic_Out;
system( modeFile_Out.ToCString() );
+#endif
if ( ! fileRes.fail() ) {
Ok = readResult( Hexotic_Out.ToCString(),
this,
removeFile(Hexotic_Out);
removeFile(Hexotic_In);
removeFile(aLogFileName);
- for( int i=0; i<sizeMapFiles.size(); i++)
+ for( size_t i=0; i<sizeMapFiles.size(); i++)
{
removeFile( TCollection_AsciiString(sizeMapFiles[i].c_str()) );
}