From: ika Date: Tue, 14 May 2013 10:29:28 +0000 (+0400) Subject: 0023938: Crash at StepToTopoDS_TranslateEdgeLoop::Init() &StepToTopoDS_TranslateEdge... X-Git-Tag: V6_7_0_beta~273 X-Git-Url: http://git.dev.opencascade.org/gitweb/?p=occt.git;a=commitdiff_plain;h=2a141d40f0d4f9a2cda5468dc82291a4c04847ce 0023938: Crash at StepToTopoDS_TranslateEdgeLoop::Init() &StepToTopoDS_TranslateEdge::Init() necessary checks were added --- diff --git a/src/StepToTopoDS/StepToTopoDS_TranslateEdgeLoop.cxx b/src/StepToTopoDS/StepToTopoDS_TranslateEdgeLoop.cxx index 23ffeda149..c61c0593db 100755 --- a/src/StepToTopoDS/StepToTopoDS_TranslateEdgeLoop.cxx +++ b/src/StepToTopoDS/StepToTopoDS_TranslateEdgeLoop.cxx @@ -291,14 +291,16 @@ void StepToTopoDS_TranslateEdgeLoop::Init(const Handle(StepShape_FaceBound)& Fac StepEdge1 = StepEdge; // Handle(StepShape_EdgeCurve) EC = Handle(StepShape_EdgeCurve)::DownCast(StepEdge); Handle(StepGeom_Curve) C = EC->EdgeGeometry(); - if (C->IsKind(STANDARD_TYPE(StepGeom_SurfaceCurve))) { - Handle(StepGeom_SurfaceCurve) Sc = Handle(StepGeom_SurfaceCurve)::DownCast(C); - C = Sc->Curve3d(); + if (!C.IsNull()){ + if (C->IsKind(STANDARD_TYPE(StepGeom_SurfaceCurve))) { + Handle(StepGeom_SurfaceCurve) Sc = Handle(StepGeom_SurfaceCurve)::DownCast(C); + C = Sc->Curve3d(); // if (modepcurve != 3) { // lastpcurve = StepToTopoDS_GeometricTool::PCurve (Sc,StepSurf,StepPCurve1); // if (StepPCurve1 == StepPCurve) modepcurve = -1; // StepPCurve = StepPCurve1; // } + } } //// else if (C->IsKind(STANDARD_TYPE(StepGeom_Polyline))) { } // else if (C->IsKind(STANDARD_TYPE(StepGeom_Pcurve))) { @@ -462,8 +464,12 @@ void StepToTopoDS_TranslateEdgeLoop::Init(const Handle(StepShape_FaceBound)& Fac // -------------------------------------------- // CASE 1 : The Edge Geometry is of Pcurve Type // -------------------------------------------- - - if (C->IsKind(STANDARD_TYPE(StepGeom_Pcurve))) { + if (C.IsNull()) + { + aTool.ComputePCurve(Standard_True); + hasPcurve = Standard_False; + } + else if (C->IsKind(STANDARD_TYPE(StepGeom_Pcurve))) { Handle(StepGeom_Pcurve) StepPCurve = Handle(StepGeom_Pcurve)::DownCast(C); C2d = myTranEdge.MakePCurve (StepPCurve,ConvSurf); // -- Statistics --