0023331: EDF 13477 - Problem with Fuse. Avoid application crush.

This commit is contained in:
jfa 2018-03-23 14:18:12 +03:00
parent 8422ddce7f
commit 08869a9687

View File

@ -644,7 +644,7 @@ TopoDS_Shape BlockFix_UnionFaces::Perform(const TopoDS_Shape& Shape)
TopoDS_Wire aWireFixed = sfw->Wire(); TopoDS_Wire aWireFixed = sfw->Wire();
aContext->Replace(aWire,aWireFixed); aContext->Replace(aWire,aWireFixed);
// add resulting wire // add resulting wire
if(isEdge3d) { if (isEdge3d) {
B.Add(aResult,aWireFixed); B.Add(aResult,aWireFixed);
} }
else { else {
@ -655,40 +655,42 @@ TopoDS_Shape BlockFix_UnionFaces::Perform(const TopoDS_Shape& Shape)
ShapeAnalysis_WireOrder sawo(Standard_False, 0); ShapeAnalysis_WireOrder sawo(Standard_False, 0);
ShapeAnalysis_Edge sae; ShapeAnalysis_Edge sae;
Standard_Integer aLastEdge = nbEdges; Standard_Integer aLastEdge = nbEdges;
for(Standard_Integer j = 1; j <= nbEdges; j++) { for (Standard_Integer j = 1; j <= nbEdges; j++) {
Standard_Real f,l; Standard_Real f,l;
//smh protection on NULL pcurve //smh protection on NULL pcurve
Handle(Geom2d_Curve) c2d; Handle(Geom2d_Curve) c2d;
if(!sae.PCurve(sbwd->Edge(j),aResult,c2d,f,l)) { if (!sae.PCurve(sbwd->Edge(j),aResult,c2d,f,l)) {
aLastEdge--; aLastEdge--;
continue; continue;
} }
sawo.Add(c2d->Value(f).XY(),c2d->Value(l).XY()); sawo.Add(c2d->Value(f).XY(),c2d->Value(l).XY());
} }
sawo.Perform(); if (aLastEdge > 0) {
sawo.Perform();
// constructind one degenerative edge // constructing one degenerative edge
gp_XY aStart, anEnd, tmp; gp_XY aStart, anEnd, tmp;
Standard_Integer nbFirst = sawo.Ordered(1); Standard_Integer nbFirst = sawo.Ordered(1);
TopoDS_Edge anOrigE = TopoDS::Edge(sbwd->Edge(nbFirst).Oriented(TopAbs_FORWARD)); TopoDS_Edge anOrigE = TopoDS::Edge(sbwd->Edge(nbFirst).Oriented(TopAbs_FORWARD));
ShapeBuild_Edge sbe; ShapeBuild_Edge sbe;
TopoDS_Vertex aDummyV; TopoDS_Vertex aDummyV;
TopoDS_Edge E = sbe.CopyReplaceVertices(anOrigE,aDummyV,aDummyV); TopoDS_Edge E = sbe.CopyReplaceVertices(anOrigE,aDummyV,aDummyV);
sawo.XY(nbFirst,aStart,tmp); sawo.XY(nbFirst,aStart,tmp);
sawo.XY(sawo.Ordered(aLastEdge),tmp,anEnd); sawo.XY(sawo.Ordered(aLastEdge),tmp,anEnd);
gp_XY aVec = anEnd-aStart; gp_XY aVec = anEnd-aStart;
Handle(Geom2d_Line) aLine = new Geom2d_Line(aStart,gp_Dir2d(anEnd-aStart)); Handle(Geom2d_Line) aLine = new Geom2d_Line(aStart,gp_Dir2d(anEnd-aStart));
B.UpdateEdge(E,aLine,aResult,0.); B.UpdateEdge(E,aLine,aResult,0.);
B.Range(E,aResult,0.,aVec.Modulus()); B.Range(E,aResult,0.,aVec.Modulus());
Handle(Geom_Curve) C3d; Handle(Geom_Curve) C3d;
B.UpdateEdge(E,C3d,0.); B.UpdateEdge(E,C3d,0.);
B.Degenerated(E,Standard_True); B.Degenerated(E,Standard_True);
TopoDS_Wire aW; TopoDS_Wire aW;
B.MakeWire(aW); B.MakeWire(aW);
B.Add(aW,E); B.Add(aW,E);
B.Add(aResult,aW); B.Add(aResult,aW);
}
} }
} }