{
return _src2tgtNodes;
}
+ void SetEventListener( SMESH_subMesh* tgtSubMesh )
+ {
+ NSProjUtils::SetEventListener( tgtSubMesh,
+ _sourceHypo->GetSourceFace(),
+ _sourceHypo->GetSourceMesh() );
+ }
};
//=======================================================================
/*!
//================================================================================
StdMeshers_Prism_3D::~StdMeshers_Prism_3D()
-{}
+{
+ pointsToPython( std::vector<gp_XYZ>() ); // avoid warning: pointsToPython defined but not used
+}
//=======================================================================
//function : CheckHypothesis
Handle(Geom_Surface) surface = BRep_Tool::Surface( topFace, loc );
bool isPlanar = GeomLib_IsPlanarSurface( surface ).IsPlanar();
- bool isFixed = false;
set<const SMDS_MeshNode*> fixedNodes;
- for ( int iAttemp = 0; !isFixed && iAttemp < 10; ++iAttemp )
- {
- TIDSortedElemSet faces;
- for ( faceIt = topSMDS->GetElements(); faceIt->more(); )
- faces.insert( faces.end(), faceIt->next() );
+ TIDSortedElemSet faces;
+ for ( faceIt = topSMDS->GetElements(); faceIt->more(); )
+ faces.insert( faces.end(), faceIt->next() );
+ bool isOk = false;
+ for ( int isCentroidal = 0; isCentroidal < 2; ++isCentroidal )
+ {
SMESH_MeshEditor::SmoothMethod algo =
- iAttemp ? SMESH_MeshEditor::CENTROIDAL : SMESH_MeshEditor::LAPLACIAN;
+ isCentroidal ? SMESH_MeshEditor::CENTROIDAL : SMESH_MeshEditor::LAPLACIAN;
+
+ int nbAttempts = isCentroidal ? 1 : 10;
+ for ( int iAttemp = 0; iAttemp < nbAttempts; ++iAttemp )
+ {
+ TIDSortedElemSet workFaces = faces;
- // smoothing
- editor.Smooth( faces, fixedNodes, algo, /*nbIterations=*/ 10,
- /*theTgtAspectRatio=*/1.0, /*the2D=*/!isPlanar);
+ // smoothing
+ editor.Smooth( workFaces, fixedNodes, algo, /*nbIterations=*/ 10,
+ /*theTgtAspectRatio=*/1.0, /*the2D=*/!isPlanar);
- isFixed = !topHelper.IsDistorted2D( topSM, /*checkUV=*/true );
+ if (( isOk = !topHelper.IsDistorted2D( topSM, /*checkUV=*/true )) &&
+ ( !isCentroidal ))
+ break;
+ }
}
- if ( !isFixed )
+ if ( !isOk )
return toSM( error( TCom("Projection from face #") << botSM->GetId()
<< " to face #" << topSM->GetId()
<< " failed: inverted elements created"));
}
+ TProjction2dAlgo::instance( this )->SetEventListener( topSM );
+
return true;
}
tgtSM->ComputeStateEngine ( SMESH_subMesh::CHECK_COMPUTE_STATE );
tgtSM->ComputeSubMeshStateEngine( SMESH_subMesh::CHECK_COMPUTE_STATE );
+ projector2D->SetEventListener( tgtSM );
+
return ok;
}
/*!
* \brief Return number of faces sharing given edges
*/
- int nbAdjacentFaces( const std::vector< EdgeWithNeighbors >& edges,
- const TopTools_IndexedDataMapOfShapeListOfShape& facesOfEdge )
- {
- TopTools_MapOfShape adjFaces;
-
- for ( size_t i = 0; i < edges.size(); ++i )
- {
- TopTools_ListIteratorOfListOfShape faceIt( facesOfEdge.FindFromKey( edges[i]._edge ));
- for ( ; faceIt.More(); faceIt.Next() )
- adjFaces.Add( faceIt.Value() );
- }
- return adjFaces.Extent();
- }
+ // int nbAdjacentFaces( const std::vector< EdgeWithNeighbors >& edges,
+ // const TopTools_IndexedDataMapOfShapeListOfShape& facesOfEdge )
+ // {
+ // TopTools_MapOfShape adjFaces;
+
+ // for ( size_t i = 0; i < edges.size(); ++i )
+ // {
+ // TopTools_ListIteratorOfListOfShape faceIt( facesOfEdge.FindFromKey( edges[i]._edge ));
+ // for ( ; faceIt.More(); faceIt.Next() )
+ // adjFaces.Add( faceIt.Value() );
+ // }
+ // return adjFaces.Extent();
+ // }
}
//================================================================================
list< SMESH_subMesh* > meshedSubMesh;
int nbFaces = 0;
//
- SMESH_subMesh* anyFaceSM = 0;
SMESH_subMeshIteratorPtr smIt = mainSubMesh->getDependsOnIterator(false,true);
while ( smIt->more() )
{
if ( face.ShapeType() > TopAbs_FACE ) break;
else if ( face.ShapeType() < TopAbs_FACE ) continue;
nbFaces++;
- anyFaceSM = sm;
// is quadrangle FACE?
list< TopoDS_Edge > orderedEdges;
// find vertex 000 - the one with smallest coordinates (for easy DEBUG :-)
TopoDS_Vertex V000;
- double minVal = DBL_MAX, minX, val;
+ double minVal = DBL_MAX, minX = 0, val;
for ( TopExp_Explorer exp( botSM->GetSubShape(), TopAbs_VERTEX );
exp.More(); exp.Next() )
{