// Module : SMESH
//
+#include <utilities.h>
#include "SMESH_DriverShape.hxx"
// step include
*/
int importSTEPShape(const std::string shape_file, TopoDS_Shape& aShape){
- std::cout << "Importing STEP shape from " << shape_file << std::endl;
+ MESSAGE("Importing STEP shape from " << shape_file);
STEPControl_Reader reader;
// Forcing Unit in meter
Interface_Static::SetCVal("xstep.cascade.unit","M");
Interface_Static::SetIVal("read.step.ideas", 1);
Interface_Static::SetIVal("read.step.nonmanifold", 1);
IFSelect_ReturnStatus aStat = reader.ReadFile(shape_file.c_str());
- if(aStat != IFSelect_RetDone)
- std::cout << "Reading error for " << shape_file << std::endl;
+ if(aStat != IFSelect_RetDone){
+ std::cerr << "Reading error for " << shape_file << std::endl;
+ return true;
+ }
int NbTrans = reader.TransferRoots();
// There should be only one shape within the file
assert(NbTrans==1);
aShape = reader.OneShape();
- return true;
+ return false;
}
/**
*/
int exportSTEPShape(const std::string shape_file, const TopoDS_Shape& aShape){
- std::cout << "Exporting STEP shape to " << shape_file << std::endl;
+ MESSAGE("Exporting STEP shape to " << shape_file);
STEPControl_Writer aWriter;
// Forcing Unit in meter
Interface_Static::SetIVal("write.step.nonmanifold", 1);
IFSelect_ReturnStatus aStat = aWriter.Transfer(aShape,STEPControl_AsIs);
- if(aStat != IFSelect_RetDone)
- std::cout << "Transfer error for " << shape_file << std::endl;
+ if(aStat != IFSelect_RetDone){
+ std::cerr << "Transfer error for " << shape_file << std::endl;
+ return true;
+ }
aStat = aWriter.Write(shape_file.c_str());
- if(aStat != IFSelect_RetDone)
- std::cout << "Writing error for " << shape_file << std::endl;
-
+ if(aStat != IFSelect_RetDone){
+ std::cerr << "Writing error for " << shape_file << std::endl;
+ return true;
+ }
return aStat;
}
*/
int importBREPShape(const std::string shape_file, TopoDS_Shape& aShape){
- std::cout << "Importing BREP shape from " << shape_file << std::endl;
+ MESSAGE("Importing BREP shape from " << shape_file);
BRep_Builder builder;
BRepTools::Read(aShape, shape_file.c_str(), builder);
- return true;
+ return false;
}
/**
*/
int exportBREPShape(const std::string shape_file, const TopoDS_Shape& aShape){
- std::cout << "Exporting BREP shape to " << shape_file << std::endl;
+ MESSAGE("Exporting BREP shape to " << shape_file);
BRepTools::Write(aShape, shape_file.c_str());
- return true;
+ return false;
}
/**
} else if (type == ".step"){
return importSTEPShape(shape_file, aShape);
} else {
- std::cout << "Unknow format: " << type << std::endl;
- return false;
+ std::cerr << "Unknow format: " << type << std::endl;
+ return true;
}
}
} else if (type == ".step"){
return exportSTEPShape(shape_file, aShape);
} else {
- std::cout << "Unknow format: " << type << std::endl;
- return false;
+ std::cerr << "Unknow format: " << type << std::endl;
+ return true;
}
}
#include <TopoDS_Iterator.hxx>
#include "memoire.h"
-#include <chrono>
#include <functional>
#ifdef WIN32
TopAbs_ShapeEnum previousShapeType = TopAbs_VERTEX;
int nbThreads = aMesh.GetNbThreads();
- auto begin = std::chrono::high_resolution_clock::now();
- std::cout << "Running mesh with threads: " << nbThreads << " mesher: " << aMesh.GetMesherNbThreads() << std::endl;
+ MESSAGE("Running mesh with threads: " << nbThreads << " mesher: " << aMesh.GetMesherNbThreads());
smIt = shapeSM->getDependsOnIterator(includeSelf, !complexShapeFirst);
aMesh.SetNbThreads(0);
else
aMesh.SetNbThreads(nbThreads);
- //DEBUG std::cout << "Shape Type" << shapeType << " previous" << previousShapeType << std::endl;
if ((aMesh.IsParallel()||nbThreads!=0) && shapeType != previousShapeType) {
// Waiting for all threads for the previous type to end
aMesh.wait();
shapeSM, aShapeOnly, allowedSubShapes,
aShapesId));
} else {
- auto begin2 = std::chrono::high_resolution_clock::now();
-
compute_function(1 ,smToCompute, computeEvent,
shapeSM, aShapeOnly, allowedSubShapes,
aShapesId);
}
aMesh.GetMeshDS()->Modified();
- auto end = std::chrono::high_resolution_clock::now();
- auto elapsed = std::chrono::duration_cast<std::chrono::nanoseconds>(end - begin);
- std::cout << "Time for All: " << elapsed.count()*1e-9 << std::endl;
-
- // Pool of thread for computation
- if(aMesh.IsParallel())
- aMesh.DeletePoolThreads();
return ret;
}
// the most complex shapes and collect sub-meshes with algos that
// DO support sub-meshes
// ================================================================
- auto begin = std::chrono::high_resolution_clock::now();
list< SMESH_subMesh* > smWithAlgoSupportingSubmeshes[4]; // for each dim
// map to sort sm with same dim algos according to dim of
continue;
sm->SetAllowedSubShapes( fillAllowed( shapeSM, aShapeOnly, allowedSubShapes ));
setCurrentSubMesh( sm );
- auto begin = std::chrono::high_resolution_clock::now();
sm->ComputeStateEngine( computeEvent );
- auto end = std::chrono::high_resolution_clock::now();
- auto elapsed = std::chrono::duration_cast<std::chrono::nanoseconds>(end - begin);
- std::cout << "Time for seq:alldim:compute: " << elapsed.count()*1e-9 << std::endl;
setCurrentSubMesh( NULL );
sm->SetAllowedSubShapes( nullptr );
// mesh the rest sub-shapes starting from vertices
// -----------------------------------------------
ret = Compute( aMesh, aShape, aFlags | UPWARD, aDim, aShapesId, allowedSubShapes );
- auto end = std::chrono::high_resolution_clock::now();
- auto elapsed = std::chrono::duration_cast<std::chrono::nanoseconds>(end - begin);
- std::cout << "Time for All: " << elapsed.count()*1e-9 << std::endl;
}
#include "SMDS_EdgePosition.hxx"
#include "SMDS_FaceOfNodes.hxx"
-#include "SMDS_FacePosition.hxx"
+#include "SMDS_FacePosition.hxx"
#include "SMDS_IteratorOnIterators.hxx"
#include "SMDS_VolumeTool.hxx"
#include "SMESHDS_Mesh.hxx"
//=======================================================================
//function : ~SMESH_MesherHelper
-//purpose :
+//purpose :
//=======================================================================
SMESH_MesherHelper::~SMESH_MesherHelper()
//=======================================================================
//function : IsMedium
-//purpose :
+//purpose :
//=======================================================================
bool SMESH_MesherHelper::IsMedium(const SMDS_MeshNode* node,
void SMESH_MesherHelper::setPosOnShapeValidity(int shapeID, bool ok ) const
{
- std::map< int,bool >::iterator sh_ok =
+ std::map< int,bool >::iterator sh_ok =
((SMESH_MesherHelper*)this)->myNodePosShapesValidity.insert( make_pair( shapeID, ok)).first;
if ( !ok )
sh_ok->second = ok;
//=======================================================================
//function : ToFixNodeParameters
-//purpose : Enables fixing node parameters on EDGEs and FACEs in
+//purpose : Enables fixing node parameters on EDGEs and FACEs in
// GetNodeU(...,check=true), GetNodeUV(...,check=true), CheckNodeUV() and
// CheckNodeU() in case if a node lies on a shape set via SetSubShape().
// Default is False
{
gp_XY AverageUV(const gp_XY& uv1, const gp_XY& uv2) { return ( uv1 + uv2 ) / 2.; }
gp_XY_FunPtr(Added); // define gp_XY_Added pointer to function calling gp_XY::Added(gp_XY)
- gp_XY_FunPtr(Subtracted);
+ gp_XY_FunPtr(Subtracted);
}
//=======================================================================
return fun(uv1,uv2);
// move uv2 not far than half-period from uv1
- double u2 =
+ double u2 =
uv2.X()+(isUPeriodic ? ShapeAnalysis::AdjustByPeriod(uv2.X(),uv1.X(),surface->UPeriod()) :0);
- double v2 =
+ double v2 =
uv2.Y()+(isVPeriodic ? ShapeAnalysis::AdjustByPeriod(uv2.Y(),uv1.Y(),surface->VPeriod()) :0);
// execute operation
//=======================================================================
gp_XY SMESH_MesherHelper::GetCenterUV(const gp_XY& uv1,
- const gp_XY& uv2,
- const gp_XY& uv3,
+ const gp_XY& uv2,
+ const gp_XY& uv3,
const gp_XY& uv12,
const gp_XY& uv23,
const gp_XY& uv31,
TBiQuad keyOfMap(n1,n2,n3,n4);
std::map<TBiQuad, const SMDS_MeshNode* >::iterator itMapCentralNode;
itMapCentralNode = myMapWithCentralNode.find( keyOfMap );
- if ( itMapCentralNode != myMapWithCentralNode.end() )
+ if ( itMapCentralNode != myMapWithCentralNode.end() )
{
return (*itMapCentralNode).second;
}
std::map< int, int > faceId2nbNodes;
std::map< int, int > ::iterator itMapWithIdFace;
-
+
SMESHDS_Mesh* meshDS = GetMeshDS();
-
+
// check if a face lies on a FACE, i.e. its all corner nodes lie either on the FACE or
// on sub-shapes of the FACE
if ( GetMesh()->HasShapeToMesh() )
TBiQuad keyOfMap(n1,n2,n3);
std::map<TBiQuad, const SMDS_MeshNode* >::iterator itMapCentralNode;
itMapCentralNode = myMapWithCentralNode.find( keyOfMap );
- if ( itMapCentralNode != myMapWithCentralNode.end() )
+ if ( itMapCentralNode != myMapWithCentralNode.end() )
{
return (*itMapCentralNode).second;
}
std::map< int, int > faceId2nbNodes;
std::map< int, int > ::iterator itMapWithIdFace;
-
+
SMESHDS_Mesh* meshDS = GetMeshDS();
-
+
// check if a face lies on a FACE, i.e. its all corner nodes lie either on the FACE or
// on sub-shapes of the FACE
if ( GetMesh()->HasShapeToMesh() )
const bool force3d)
{
SMESHDS_Mesh * meshDS = GetMeshDS();
-
+
SMDS_MeshEdge* edge = 0;
if (myCreateQuadratic) {
const SMDS_MeshNode* n12 = GetMediumNode(n1,n2,force3d);
const SMDS_MeshNode* n10,
const SMDS_MeshNode* n11,
const SMDS_MeshNode* n12,
- const smIdType id,
+ const smIdType id,
bool /*force3d*/)
{
SMESHDS_Mesh * meshDS = GetMeshDS();
//=======================================================================
//function : IsSubShape
-//purpose :
+//purpose :
//=======================================================================
bool SMESH_MesherHelper::IsSubShape( const TopoDS_Shape& shape, SMESH_Mesh* aMesh )
//=======================================================================
//function : IsBlock
-//purpose :
+//purpose :
//=======================================================================
bool SMESH_MesherHelper::IsBlock( const TopoDS_Shape& shape )
if ( ++nbLoops > 10 )
{
#ifdef _DEBUG_
- cout << "SMESH_MesherHelper::GetAngle(): Captured in a sigularity" << endl;
+ MESSAGE("SMESH_MesherHelper::GetAngle(): Captured in a singularity");
#endif
return angle;
}
//================================================================================
/*!
- * \brief Return type of shape contained in a group
+ * \brief Return type of shape contained in a group
* \param group - a shape of type TopAbs_COMPOUND
* \param avoidCompound - not to return TopAbs_COMPOUND
*/
NbAllEdgsAndFaces = myMesh->NbEdges() + myMesh->NbFaces();
if ( NbAllEdgsAndFaces == 0 )
return SMESH_MesherHelper::LINEAR;
-
+
//Quadratic faces and edges
NbQuadFacesAndEdgs = myMesh->NbEdges(ORDER_QUADRATIC) + myMesh->NbFaces(ORDER_QUADRATIC);
//Linear faces and edges
NbFacesAndEdges = myMesh->NbEdges(ORDER_LINEAR) + myMesh->NbFaces(ORDER_LINEAR);
-
+
if (NbAllEdgsAndFaces == NbQuadFacesAndEdgs) {
//Quadratic mesh
return SMESH_MesherHelper::QUADRATIC;
}
}
else if ( _sides.size() < 4 )
- return thePrevLen;
+ return thePrevLen;
// propagate to adjacent faces till limit step or boundary
double len1 = thePrevLen + (theLink->MiddlePnt() - _sides[iL1]->MiddlePnt()).Modulus();
void QLink::SetContinuesFaces() const
{
// x0 x - QLink, [-|] - QFace, v - volume
- // v0 | v1
+ // v0 | v1
// | Between _faces of link x2 two vertical faces are continues
// x1----x2-----x3 and two horizontal faces are continues. We set vertical faces
// | to _faces[0] and _faces[1] and horizontal faces to
}
return isStraight;
}
-
+
//================================================================================
/*!
* \brief Move medium nodes of vertical links of pentahedrons adjacent by side faces
while ( startLink != linksEnd) // loop on columns
{
// We suppose we have a rectangular structure like shown here. We have found a
- // corner of the rectangle (startCorner) and a boundary link sharing
- // |/ |/ | the startCorner (startLink). We are going to loop on rows of the
- // --o---o---o structure making several chains at once. One chain (columnChain)
- // |\ | /| starts at startLink and continues upward (we look at the structure
- // \ | \ | / | from such point that startLink is on the bottom of the structure).
- // \| \|/ | While going upward we also fill horizontal chains (rowChains) we
- // --o---o---o encounter.
+ // corner of the rectangle (startCorner) and a boundary link sharing
+ // |/ |/ | the startCorner (startLink). We are going to loop on rows of the
+ // --o---o---o structure making several chains at once. One chain (columnChain)
+ // |\ | /| starts at startLink and continues upward (we look at the structure
+ // \ | \ | / | from such point that startLink is on the bottom of the structure).
+ // \| \|/ | While going upward we also fill horizontal chains (rowChains) we
+ // --o---o---o encounter.
// /|\ |\ |
// / | \ | \ | startCorner
// | \| \|,'
continue;
gp_XYZ edgeDir = SMESH_TNodeXYZ( nOnEdge[0] ) - SMESH_TNodeXYZ( nOnEdge[1] );
gp_XYZ edgeNorm = faceNorm ^ edgeDir;
- n = theHelper.GetMediumNode( nOnEdge[0], nOnEdge[1], true ); // find n, not create
+ n = theHelper.GetMediumNode( nOnEdge[0], nOnEdge[1], true ); // find n, not create
gp_XYZ pN0 = SMESH_TNodeXYZ( nOnEdge[0] );
gp_XYZ pMedium = SMESH_TNodeXYZ( n ); // on-edge node location
gp_XYZ pFaceN = SMESH_TNodeXYZ( nOnFace ); // on-face node location
{
uv[ i ] = GetNodeUV( F, nodes[i], nodes[8], &checkUV );
// as this method is used after mesh generation, UV of nodes is not
- // updated according to bending links, so we update
+ // updated according to bending links, so we update
if ( i > 3 && nodes[i]->GetPosition()->GetTypeOfPosition() == SMDS_TOP_FACE )
CheckNodeUV( F, nodes[i], uv[ i ], 2*tol, /*force=*/true );
}
{
uv[ i ] = GetNodeUV( F, nodes[i], nodes[(i+1)%3], &uvOK );
// as this method is used after mesh generation, UV of nodes is not
- // updated according to bending links, so we update
+ // updated according to bending links, so we update
if ( nodes[i]->GetPosition()->GetTypeOfPosition() == SMDS_TOP_FACE )
CheckNodeUV( F, nodes[i], uv[ i ], 2*tol, /*force=*/true );
}
pointsOnShapes[ SMESH_Block::ID_Ex11 ] = SMESH_TNodeXYZ( hexNodes[ 13 ] );
pointsOnShapes[ SMESH_Block::ID_E0y1 ] = SMESH_TNodeXYZ( hexNodes[ 12 ] );
pointsOnShapes[ SMESH_Block::ID_E1y1 ] = SMESH_TNodeXYZ( hexNodes[ 14 ] );
- pointsOnShapes[ SMESH_Block::ID_E00z ] = SMESH_TNodeXYZ( hexNodes[ 16 ] );
- pointsOnShapes[ SMESH_Block::ID_E10z ] = SMESH_TNodeXYZ( hexNodes[ 19 ] );
- pointsOnShapes[ SMESH_Block::ID_E01z ] = SMESH_TNodeXYZ( hexNodes[ 17 ] );
+ pointsOnShapes[ SMESH_Block::ID_E00z ] = SMESH_TNodeXYZ( hexNodes[ 16 ] );
+ pointsOnShapes[ SMESH_Block::ID_E10z ] = SMESH_TNodeXYZ( hexNodes[ 19 ] );
+ pointsOnShapes[ SMESH_Block::ID_E01z ] = SMESH_TNodeXYZ( hexNodes[ 17 ] );
pointsOnShapes[ SMESH_Block::ID_E11z ] = SMESH_TNodeXYZ( hexNodes[ 18 ] );
pointsOnShapes[ SMESH_Block::ID_Fxy0 ] = SMESH_TNodeXYZ( hexNodes[ 20 ] );
pointsOnShapes[ SMESH_Block::ID_Fxy1 ] = SMESH_TNodeXYZ( hexNodes[ 25 ] );
- pointsOnShapes[ SMESH_Block::ID_Fx0z ] = SMESH_TNodeXYZ( hexNodes[ 21 ] );
- pointsOnShapes[ SMESH_Block::ID_Fx1z ] = SMESH_TNodeXYZ( hexNodes[ 23 ] );
- pointsOnShapes[ SMESH_Block::ID_F0yz ] = SMESH_TNodeXYZ( hexNodes[ 24 ] );
+ pointsOnShapes[ SMESH_Block::ID_Fx0z ] = SMESH_TNodeXYZ( hexNodes[ 21 ] );
+ pointsOnShapes[ SMESH_Block::ID_Fx1z ] = SMESH_TNodeXYZ( hexNodes[ 23 ] );
+ pointsOnShapes[ SMESH_Block::ID_F0yz ] = SMESH_TNodeXYZ( hexNodes[ 24 ] );
pointsOnShapes[ SMESH_Block::ID_F1yz ] = SMESH_TNodeXYZ( hexNodes[ 22 ] );
gp_XYZ nCenterParams(0.5, 0.5, 0.5), nCenterCoords;
{
const char* name = "/tmp/shape.brep";
BRepTools::Write( s, name );
-#ifdef _DEBUG_
- std::cout << name << std::endl;
-#endif
}