0020526: [CEA] Disk meshing fails

care of orientation of a sole edge in a wire
This commit is contained in:
eap 2009-10-08 13:41:49 +00:00
parent 26f711647c
commit f39abee419

View File

@ -206,6 +206,10 @@ static TError AddSegmentsToMesh(netgen::Mesh& ngMesh,
StdMeshers_FaceSidePtr wire = wires[ iW ]; StdMeshers_FaceSidePtr wire = wires[ iW ];
const vector<UVPtStruct>& uvPtVec = wire->GetUVPtStruct(); const vector<UVPtStruct>& uvPtVec = wire->GetUVPtStruct();
bool reverse = // 20526: [CEA] Disk meshing fails
( wire->NbEdges() == 1 &&
geom.emap(geom.emap.FindIndex(wire->Edge(0))).Orientation() == TopAbs_REVERSED );
int firstPointID = ngMesh.GetNP() + 1; int firstPointID = ngMesh.GetNP() + 1;
int edgeID = 1, posID = -2; int edgeID = 1, posID = -2;
for ( int i = 0; i < wire->NbSegments(); ++i ) // loop on segments for ( int i = 0; i < wire->NbSegments(); ++i ) // loop on segments
@ -256,6 +260,14 @@ static TError AddSegmentsToMesh(netgen::Mesh& ngMesh,
} }
seg.epgeominfo[ iEnd ].edgenr = edgeID; // = geom.emap.FindIndex(edge); seg.epgeominfo[ iEnd ].edgenr = edgeID; // = geom.emap.FindIndex(edge);
} }
// 20526: [CEA] Disk meshing fails
if (reverse)
{
swap (seg.p1, seg.p2);
swap (seg.epgeominfo[0].dist, seg.epgeominfo[1].dist);
swap (seg.epgeominfo[0].u, seg.epgeominfo[1].u);
swap (seg.epgeominfo[0].v, seg.epgeominfo[1].v);
}
ngMesh.AddSegment (seg); ngMesh.AddSegment (seg);
@ -452,8 +464,8 @@ bool NETGENPlugin_NETGEN_2D_ONLY::Compute(SMESH_Mesh& aMesh,
//============================================================================= //=============================================================================
bool NETGENPlugin_NETGEN_2D_ONLY::Evaluate(SMESH_Mesh& aMesh, bool NETGENPlugin_NETGEN_2D_ONLY::Evaluate(SMESH_Mesh& aMesh,
const TopoDS_Shape& aShape, const TopoDS_Shape& aShape,
MapShapeNbElems& aResMap) MapShapeNbElems& aResMap)
{ {
TopoDS_Face F = TopoDS::Face(aShape); TopoDS_Face F = TopoDS::Face(aShape);
if(F.IsNull()) if(F.IsNull())