View Issue Details

IDProjectCategoryView StatusLast Update
0031430CommunityOCCT:Modeling Datapublic2020-12-02 17:12
ReporterRoman Lygin Assigned Tobugmaster  
PrioritynormalSeveritycrash 
Status closedResolutionfixed 
Target Version7.5.0Fixed in Version7.5.0 
Summary0031430: Modeling Data - Offset surfaces on C1 surfaces (with multiplicity equal to degree) may still throw exception
DescriptionValid offset surfaces created on C1-continuous basis surface (e.g. B-Spline) but with knot multiplicity equal to degree may cause an exception later on.
One of the scenarios is from inside Shape Healing, when Geom_RectangularTrimmedSurface on such offset will call a ctor of Geom_OffsetSurface with the parameter of enforced continuity check (which is a default value of the parameter). The check in G_OS ctor is based on knot multiplicity, not on real geometrical continuity.

Several approaches are possible:
a. enforce skipped continuity check in G_RTS ctor (as G_OS already existed by that time and thus is valid)
b. change checking algorithm to really verify C1/G1 continuity (not just knot multiplicity) and allow creation of OS. In this case the parameter can be removed at all.
c. change default value of parameter of continuity check in G_OS to skip the check and thus allow creation of offset on any surface.

I would recommend b or at least c, whereas a is just a bare minimum.
Steps To Reproducerestore shape.brep s
fixshape r s
TagsNo tags attached.
Test case numberbugs/modalg_7/bug31430

Attached Files

  • shape.7z (8,894 bytes)

Relationships

related to 0025124 closedbugmaster Community [Feature request] Removal of continuity checks for offset geometries 
related to 0031436 newmsv Open CASCADE Modeling Data - try to make the base surface C1 when creating offset surface 

Activities

Roman Lygin

2020-03-14 13:33

developer  

shape.7z (8,894 bytes)

git

2020-03-14 13:53

administrator   ~0090942

Branch CR31430 has been created by Roman Lygin.

SHA-1: 69bc8943bdfffc43d78411a1d670195f209fe8a7


Detailed log of new commits:

Author: Roman Lygin
Date: Sat Mar 14 13:49:17 2020 +0300

    0031430: Offset surfaces on C1 surfaces (with multiplicity equal to degree) may still throw exception

Roman Lygin

2020-03-14 13:54

developer   ~0090943

The simplest fix for the approach 'a' has been provided.
Options b and c remain at OCC team discretion.

git

2020-03-16 11:31

administrator   ~0090955

Branch CR31430 has been updated forcibly by msv.

SHA-1: 6055af5077808287fbca9e2052f24dde6aad5df1

git

2020-03-16 11:33

administrator   ~0090956

Branch CR31430 has been updated forcibly by msv.

SHA-1: a3b365ce2d39befb731c281844867996e659f5ea

msv

2020-03-16 11:35

developer   ~0090957

Please review.
http://jenkins-test-12.nnov.opencascade.com/view/CR31430-master-MSV/view/COMPARE/

ifv

2020-03-16 12:30

developer   ~0090961

It is not needed to integrate this fix because we have solution b. implemented yet.
The Roman's statement " The check in G_OS ctor is based on knot multiplicity, not on real geometrical continuity. " is wrong. Continuity check includes checking real geometry continuity.

msv

2020-03-16 12:52

developer   ~0090962

Indeed, according to the actual code, the solution b) is implemented. The check is done with Precision::Angular(). May be the surface in the attached shape does not follow this condition, and the divergence of normals at knots exceeds the angular precision.

So, I am not sure if we can accept this patch with skipped check for C0.

Roman Lygin

2020-03-16 13:28

developer   ~0090965

The original surface comes from Parasolid where angular precision is likely 1e-11 (not 1e-12 as in OCC).
Here is the workflow:
1. Create Geom_OffsetSurface on original basis surface (flag isnotC0Check = true).
2. Create face on this G_OS
3. Feed into Shape Healing.
4. Crash in FixMissingSeam which creates G_OS on top of G_RTS on top of original basis surface. When G_OS is created on G_RTS it uses isNotC0Check with default value which is false.

So the point is that OCC cannot create G_OS on top of the same basis surface it once considered acceptable for creating G_OS.
The fix is to stress the point - if the basis surface was once considered OK for G_OS then such a surface must remain valid inside OCC and must not be refused anywhere inside it.

ifv

2020-03-16 13:41

developer   ~0090966

Roman, if offset surface is based on trimmed one, continuity check is performed for trimmed domain and surface can be valid. If we change trim, surface can become invalid.

Roman Lygin

2020-03-16 13:46

developer   ~0090967

Igor, see the key point in explanation - if the surface is once valid for offset inside OCC it must remain valid inside it.
BTW, it's an opposite case here - the original B-Spline surface was once valid and then trimmed and then G_OS refused to accept it.

git

2020-03-18 09:52

administrator   ~0091001

Branch CR31430 has been updated forcibly by msv.

SHA-1: 75a61baa9f129124e5556871d6cdd5c339dad689

msv

2020-03-18 09:53

developer   ~0091002

OK, we accept the fix with a) solution. I have updated the commit message with the reason.

msv

2020-03-18 09:56

developer   ~0091003

For integration:
occt - CR31430
products - none.

Roman Lygin

2020-03-18 11:10

developer   ~0091010

Thanks Mikhail!

git

2020-03-22 11:31

administrator   ~0091125

Branch CR31430 has been deleted by inv.

SHA-1: 75a61baa9f129124e5556871d6cdd5c339dad689

bugmaster

2020-03-22 11:41

administrator   ~0091159

Combination -
OCCT branch : IR-2020-03-20
master SHA - 7ef1f9b7c1d9301c158a593dc5facb5a33450318
fe4497f3246e6bc1ced97ac331c148f0809ded15
Products branch : IR-2020-03-20 SHA - f10b867b449ebfa55e0a3c8cb276ae511f9cf7f2
was compiled on Linux, MacOS and Windows platforms and tested in optimize mode.

Number of compiler warnings:
No new/fixed warnings

Regressions/Differences/Improvements:
No regressions/differences

CPU differences:
Debian80-64:
OCCT
Total CPU difference: 16845.960000000137 / 16685.300000000094 [+0.96%]
Products
Total CPU difference: 11305.960000000074 / 11298.700000000106 [+0.06%]
Windows-64-VC14:
OCCT
Total CPU difference: 18268.609375 / 18088.765625 [+0.99%]
Products
Total CPU difference: 13110.078125 / 13084.390625 [+0.20%]


Image differences :
No differences that require special attention

Memory differences :
No differences that require special attention

Related Changesets

occt: master fb991777

2020-03-14 10:49:17

Roman Lygin


Committer: bugmaster Details Diff
0031430: Offset surfaces on C1 surfaces (with multiplicity equal to degree) may still throw exception

In constructor of Geom_RectangularTrimmedSurface, skip check if an offset surface has insufficient continuity. The reason is that this surface has already passed the check once created. So, here we must not apply more strict check than that first time.
Affected Issues
0031430
mod - src/Geom/Geom_RectangularTrimmedSurface.cxx Diff File
add - tests/bugs/modalg_7/bug31430 Diff File

Issue History

Date Modified Username Field Change
2020-03-14 13:33 Roman Lygin New Issue
2020-03-14 13:33 Roman Lygin Assigned To => msv
2020-03-14 13:33 Roman Lygin File Added: shape.7z
2020-03-14 13:34 Roman Lygin Relationship added related to 0025124
2020-03-14 13:35 Roman Lygin Summary Offset surfaces on C1 surfaces => Offset surfaces on C1 surfaces (with multiplicity equal to degree) may still throw exception
2020-03-14 13:53 git Note Added: 0090942
2020-03-14 13:54 Roman Lygin Note Added: 0090943
2020-03-14 13:54 Roman Lygin Status new => resolved
2020-03-14 20:20 kgv Summary Offset surfaces on C1 surfaces (with multiplicity equal to degree) may still throw exception => Modeling Data - Offset surfaces on C1 surfaces (with multiplicity equal to degree) may still throw exception
2020-03-16 11:31 git Note Added: 0090955
2020-03-16 11:33 git Note Added: 0090956
2020-03-16 11:34 msv Assigned To msv => abv
2020-03-16 11:35 msv Note Added: 0090957
2020-03-16 12:30 ifv Note Added: 0090961
2020-03-16 12:30 ifv Assigned To abv => msv
2020-03-16 12:30 ifv Status resolved => feedback
2020-03-16 12:52 msv Note Added: 0090962
2020-03-16 12:52 msv Assigned To msv => Roman Lygin
2020-03-16 13:23 Roman Lygin Assigned To Roman Lygin => msv
2020-03-16 13:28 Roman Lygin Note Added: 0090965
2020-03-16 13:41 ifv Note Added: 0090966
2020-03-16 13:46 Roman Lygin Note Added: 0090967
2020-03-18 09:52 git Note Added: 0091001
2020-03-18 09:53 msv Note Added: 0091002
2020-03-18 09:56 msv Note Added: 0091003
2020-03-18 09:56 msv Assigned To msv => bugmaster
2020-03-18 09:56 msv Status feedback => reviewed
2020-03-18 10:08 msv Relationship added related to 0031436
2020-03-18 11:10 Roman Lygin Note Added: 0091010
2020-03-19 16:31 bugmaster Changeset attached => occt master fb991777
2020-03-19 16:31 bugmaster Status reviewed => verified
2020-03-19 16:31 bugmaster Resolution open => fixed
2020-03-22 11:31 git Note Added: 0091125
2020-03-22 11:41 bugmaster Note Added: 0091159
2020-03-22 11:44 bugmaster Test case number => bugs/modalg_7/bug31430
2020-12-02 16:43 emo Fixed in Version => 7.5.0
2020-12-02 17:12 emo Status verified => closed