#include "utilities.h"
#include "Utils_ExceptHandlers.hxx"
+#include <Basics_OCCTVersion.hxx>
#include <BRepAdaptor_Surface.hxx>
#include <BRepBndLib.hxx>
using namespace std;
+#ifdef _DEBUG_
//#define _MY_DEBUG_
+#endif
-#define ELLIPSOLID_WORKAROUND // remove it as soon as http://tracker.dev.opencascade.org/view.php?id=22809 is solved
+#if OCC_VERSION_LARGE <= 0x06050300
+// workaround is required only for OCCT6.5.3 and older (see OCC22809)
+#define ELLIPSOLID_WORKAROUND
+#endif
#ifdef ELLIPSOLID_WORKAROUND
#include <BRepIntCurveSurface_Inter.hxx>
*/
void Grid::ComputeNodes(SMESH_MesherHelper& helper)
{
- // state of each node of the grid relative to the geomerty
+ // state of each node of the grid relative to the geometry
const size_t nbGridNodes = _coords[0].size() * _coords[1].size() * _coords[2].size();
vector< bool > isNodeOut( nbGridNodes, false );
_nodes.resize( nbGridNodes, 0 );
intHexInd.resize( nbIntHex );
tbb::parallel_for ( tbb::blocked_range<size_t>( 0, nbIntHex ),
ParallelHexahedron( intersectedHex, intHexInd ),
- tbb::simple_partitioner());
+ tbb::simple_partitioner()); // ComputeElements() is called here
for ( size_t i = 0; i < intHexInd.size(); ++i )
if ( Hexahedron * hex = intersectedHex[ intHexInd[ i ]] )
nbAdded += hex->addElements( helper );
*/
int Hexahedron::addElements(SMESH_MesherHelper& helper)
{
+ int nbAdded = 0;
// add elements resulted from hexahedron intersection
//for ( size_t i = 0; i < _volumeDefs.size(); ++i )
{
break;
}
}
+ nbAdded += int ( _volumeDefs._nodes.size() > 0 );
}
- return 1;//(int) _volumeDefs.size();
+ return nbAdded;
}
//================================================================================
/*!
// - skip a cell, if it is too small according to the size threshold
// - add a hexahedron in the mesh, if all nodes are inside
// - add a polyhedron in the mesh, if some nodes are inside and some outside
+
+ _computeCanceled = false;
+
try
{
Grid grid;
#endif
}
}
+ if ( _computeCanceled ) return false;
#ifdef WITH_TBB
{ // copy partner faces and curves of not thread-safe types
helper.SetSubShape( solidExp.Current() );
helper.SetElementsOnShape( true );
+ if ( _computeCanceled ) return false;
+
// create nodes on the geometry
grid.ComputeNodes(helper);
+ if ( _computeCanceled ) return false;
+
// create volume elements
Hexahedron hex( _hyp->GetSizeThreshold(), &grid );
int nbAdded = hex.MakeElements( helper );