+//=======================================================================
+//function : isSimpleQuad
+//purpose : check if the bottom FACE is meshable with nice qudrangles,
+// if so the block aproach can work rather fast.
+// This is a temporary mean caused by problems in StdMeshers_Sweeper
+//=======================================================================
+
+bool StdMeshers_Prism_3D::isSimpleBottom( const Prism_3D::TPrismTopo& thePrism )
+{
+ // analyse angles between edges
+ double nbConcaveAng = 0, nbConvexAng = 0;
+ TopoDS_Face reverseBottom = TopoDS::Face( thePrism.myBottom.Reversed() ); // see initPrism()
+ TopoDS_Vertex commonV;
+ const list< TopoDS_Edge >& botEdges = thePrism.myBottomEdges;
+ list< TopoDS_Edge >::const_iterator edge = botEdges.begin();
+ while ( edge != botEdges.end() )
+ {
+ if ( SMESH_Algo::isDegenerated( *edge ))
+ return false;
+ TopoDS_Edge e1 = *edge++;
+ TopoDS_Edge e2 = ( edge == botEdges.end() ? botEdges.front() : *edge );
+ if ( ! TopExp::CommonVertex( e1, e2, commonV ))
+ {
+ e2 = botEdges.front();
+ if ( ! TopExp::CommonVertex( e1, e2, commonV ))
+ break;
+ }
+ double angle = myHelper->GetAngle( e1, e2, reverseBottom, commonV );
+ if ( angle < -5 * M_PI/180 )
+ if ( ++nbConcaveAng > 1 )
+ return false;
+ if ( angle > 85 * M_PI/180 )
+ if ( ++nbConvexAng > 4 )
+ return false;
+ }
+ return true;
+}
+