View Issue Details
ID | Project | Category | View Status | Date Submitted | Last Update |
---|---|---|---|---|---|
0026003 | Open CASCADE | OCCT:Shape Healing | public | 2015-04-01 15:03 | 2015-04-01 15:03 |
Reporter | Assigned To | ||||
Priority | normal | Severity | tweak | ||
Status | new | Resolution | open | ||
Target Version | Unscheduled | ||||
Summary | 0026003: Some algorithms in ShapeFix do not check the status of ShapeFix_Edge::FixSameParameter | ||||
Description | The examples of such places are provided in case when an exception is raised, e.g. in CheckCurveData when bspline knots are checked for validity (see description in 0025971). The method ShapeFix_Edge::FixSameParameter contains try/catch block. When an exception is caught the status ShapeExtend_FAIL2 is set. The next items enumerate places where the status is not checked, which can lead to incorrect behavior of the tool. 1) The method ShapeFix::SameParameter (line 132 in ShapeFix.cxx): sfe->FixSameParameter (E); if (!BRep_Tool::SameParameter (E)) { ierr = 1; nbfail ++; } If sfe tool sets the status to FAIL2 then the edge has incorrect state of the flag SameParameter, and the flag ierr remains equal to 0, indicating there is no error. Therefore the further code does not reset the flags of the edge, and the edge remains in wrong state of its flags. As a result, the tool that is aimed to ensure correct SameParameter flag setting leaves some edges with incorrectly set SameParameter. 2) The method TryNewPCurve that is called during work of the tools FixSelfIntersectingEdge, FixLacking (line 1737 in ShapeFix_Wire.cxx): sfe->FixSameParameter ( edge ); c2d = BRep_Tool::CurveOnSurface ( edge, face, first, last ); Here nor the status nor the result curve is checked for validity, and the wrongly parameterized curve is taken in further processing. 3) The method FixSameParameter is called without checking of the result status in other places as well. It is needed to make search of all such places at least limited by the package ShapeFix. In each found place it is needed to make logically justified treatment of the returned status. | ||||
Tags | No tags attached. | ||||
Test case number | |||||