TopoDS_Face F = TopoDS::Face(aShape);
Handle(Geom_Surface) S = BRep_Tool::Surface(F);
+ // orientation
+ bool IsForward = F.Orientation()==TopAbs_FORWARD;
+
//cout<<"RadialQuadrangle_1D2D::Compute nbe = "<<nbe<<endl;
TopoDS_Edge CircEdge, LinEdge1, LinEdge2;
if(nbe==1) {
bool ok = _gen->Compute( aMesh, CircEdge, false, MeshDim_1D );
if( !ok ) return false;
std::map< double, const SMDS_MeshNode* > theNodes;
- GetSortedNodesOnEdge(aMesh.GetMeshDS(),CircEdge,true,theNodes);
+ ok = GetSortedNodesOnEdge(aMesh.GetMeshDS(),CircEdge,true,theNodes);
+ if( !ok ) return false;
CNodes.clear();
std::map< double, const SMDS_MeshNode* >::iterator itn = theNodes.begin();
const SMDS_MeshNode* NF = (*itn).second;
CNodes.push_back( (*itn).second );
double fang = (*itn).first;
- itn++;
- for(; itn != theNodes.end(); itn++ ) {
- CNodes.push_back( (*itn).second );
- double ang = (*itn).first - fang;
- if( ang>PI ) ang = ang - 2*PI;
- if( ang<-PI ) ang = ang + 2*PI;
- Angles.Append( ang );
+ if ( itn != theNodes.end() ) {
+ itn++;
+ for(; itn != theNodes.end(); itn++ ) {
+ CNodes.push_back( (*itn).second );
+ double ang = (*itn).first - fang;
+ if( ang>PI ) ang = ang - 2*PI;
+ if( ang<-PI ) ang = ang + 2*PI;
+ Angles.Append( ang );
+ }
}
P1 = gp_Pnt( NF->X(), NF->Y(), NF->Z() );
P0 = aCirc->Location();
if(ME) meshDS->SetMeshElementOnShape(ME, edgeID);
}
// LinEdge2
- edgeID = meshDS->ShapeToIndex(LinEdge1);
+ edgeID = meshDS->ShapeToIndex(LinEdge2);
aVec = gp_Vec(P0,P2);
// check orientation
Crv = BRep_Tool::Curve(LinEdge2,fp,lp);
tmpNodes[Points.Length()] = CNodes[i];
// quad
for(j=0; j<Nodes1.size()-1; j++) {
- SMDS_MeshFace* MF = myHelper->AddFace( tmpNodes[j], Nodes1[j],
- Nodes1[j+1], tmpNodes[j+1] );
+ SMDS_MeshFace* MF;
+ if(IsForward)
+ MF = myHelper->AddFace( tmpNodes[j], Nodes1[j],
+ Nodes1[j+1], tmpNodes[j+1] );
+ else
+ MF = myHelper->AddFace( tmpNodes[j], tmpNodes[j+1],
+ Nodes1[j+1], Nodes1[j] );
if(MF) meshDS->SetMeshElementOnShape(MF, faceID);
}
// tria
- SMDS_MeshFace* MF = myHelper->AddFace( NC, Nodes1[0], tmpNodes[0] );
+ SMDS_MeshFace* MF;
+ if(IsForward)
+ MF = myHelper->AddFace( NC, Nodes1[0], tmpNodes[0] );
+ else
+ MF = myHelper->AddFace( NC, tmpNodes[0], Nodes1[0] );
if(MF) meshDS->SetMeshElementOnShape(MF, faceID);
for(j=0; j<Nodes1.size(); j++) {
Nodes1[j] = tmpNodes[j];
// create last faces
// quad
for(i=0; i<Nodes1.size()-1; i++) {
- SMDS_MeshFace* MF = myHelper->AddFace( Nodes2[i], Nodes1[i],
- Nodes1[i+1], Nodes2[i+1] );
+ SMDS_MeshFace* MF;
+ if(IsForward)
+ MF = myHelper->AddFace( Nodes2[i], Nodes1[i],
+ Nodes1[i+1], Nodes2[i+1] );
+ else
+ MF = myHelper->AddFace( Nodes2[i], Nodes2[i+1],
+ Nodes1[i+1], Nodes1[i] );
if(MF) meshDS->SetMeshElementOnShape(MF, faceID);
}
// tria
- SMDS_MeshFace* MF = myHelper->AddFace( NC, Nodes1[0], Nodes2[0] );
+ SMDS_MeshFace* MF;
+ if(IsForward)
+ MF = myHelper->AddFace( NC, Nodes1[0], Nodes2[0] );
+ else
+ MF = myHelper->AddFace( NC, Nodes2[0], Nodes1[0] );
if(MF) meshDS->SetMeshElementOnShape(MF, faceID);