View Issue Details

IDProjectCategoryView StatusLast Update
0025771CommunityOCCT:Modeling Algorithmspublic2015-04-30 12:07
Reportershoogen Assigned Tossv 
PrioritynormalSeverityminor 
Status assignedResolutionopen 
PlatformLinuxOSDebian 6.0 
Product Version6.8.0 
Target VersionUnscheduled 
Summary0025771: fusion of cylinder and torus generates self intersections and invalid imbrications
DescriptionThe bfusion of a torus segments and cylinders generates invalid shapes.
Some are recognized by checkshape. Some are reported to contain self intersections (and produce further problems in later operations)

version tested:
6.8.1.dev-27a6612 (2015-01-22T20:44:39Z)
Steps To ReproduceDraw[2]> source torusunion0.draw
Draw[3]> checkshape f1
On Shape faulty_1 :
BRepCheck_InvalidImbricationOfWires
On Shape faulty_2 :
BRepCheck_BadOrientationOfSubshape
On Shape faulty_3 :
BRepCheck_BadOrientationOfSubshape

Faulty shapes in variables faulty_1 to faulty_3
Draw[4]> bopcheck f2
V/Z: x17 x35
E/Z: x15 x35
E/Z: x19 x35
E/Z: x24 x35

TagsNo tags attached.
Test case number

Attached Files

  • torusunion0.draw (1,604 bytes)

Relationships

related to 0025755 assignedssv BRepAlgoAPI_Fuse incorrect behavior 

Activities

shoogen

2015-01-30 14:05

reporter  

torusunion0.draw (1,604 bytes)

shoogen

2015-01-30 14:27

reporter   ~0036894

Due to rounding of locations the shapes might be slightly misaligned. Slightly meaning that in combination with the vertex tolerance the detection of intersection fails. Therefore related to 0024678

pkv

2015-02-10 12:51

developer   ~0037279

Last edited: 2015-02-10 12:53

I. The Case
#---------------------------------
# bfuse f1 Cylinder002 Torus001001
#
ptorus Torus001001 96.85 16.85 -180 180 83.33
trotate Torus001001 0 0 0 0.04116992078604395 0.7065072673449547 0.7065072673449547 184.7199973756484
ttranslate Torus001001 -383.15 0 953.15

pcylinder Cylinder002 16.85 230 360
trotate Cylinder002 0 0 0 0 -1 0 90
ttranslate Cylinder002 -153.15 0 1050

bfuse f1 Cylinder002 Torus001001
#---------------------------------

II. Analysis

The case (as it is) can not be treated by the algorithm.

The reason is the following:
There are some entities from the one argument
that are intended to be coincide with some entities
from the other argument. But this coincidence is not precise
in terms of given values of tolerances of the entities above.

The declared values of tolerances (1.e-7 for both
arguments) is not enough to provide intended coincidence.

To solve the problem above the Fuzzy option of Boolean operation
algorithm has been designed and developed (6.8.1 dev).
See
http://tracker.dev.opencascade.org/view.php?id=25477
for more details.

The Fuzzy option are accessible
-on API level:
void BRepAlgoAPI_BuilderAlgo::SetFuzzyValue(const Standard_Real theFuzz)

-on Tcl level:
bfuzzyvalue value

See
http://tracker.dev.opencascade.org/view.php?id=25614
for more details.
 
-------------------------------------------------
The following Tcl script can be used for the case
to obtain correct result f1:

#---------------------------------
# bfuse f1 Cylinder002 Torus001001
#
ptorus Torus001001 96.85 16.85 -180 180 83.33
trotate Torus001001 0 0 0 0.04116992078604395 0.7065072673449547 0.7065072673449547 184.7199973756484
ttranslate Torus001001 -383.15 0 953.15

pcylinder Cylinder002 16.85 230 360
trotate Cylinder002 0 0 0 0 -1 0 90
ttranslate Cylinder002 -153.15 0 1050

# set the fuzzy value to 0.008
bfuzzyvalue 0.008

bfuse f1 Cylinder002 Torus001001
#---------------------------------

The value Fuzzy should be provided by the User.
This is because the User who only can control the data.

For the case, the User should provide
the numerical value for "slightly misaligned",
because the User who only knows how slightly in numbers.


III .Appendix
 
How I computed the value 0.008

# face from Torus001001 -> b1
ptorus Torus001001 96.85 16.85 -180 180 83.33
trotate Torus001001 0 0 0 0.04116992078604395 0.7065072673449547 0.7065072673449547 184.7199973756484
ttranslate Torus001001 -383.15 0 953.15
copy Torus001001 b1
explode b1 f
copy b1_3 b1

#face from Cylinder002 -> b2
pcylinder Cylinder002 16.85 230 360
trotate Cylinder002 0 0 0 0 -1 0 90
ttranslate Cylinder002 -153.15 0 1050
copy Cylinder002 b2
explode b2 f
copy b2_2 b2

# curve from the edge of b1 -> cb1
explode b1 e
mkcurve cb1 b1_1
dump cb1

# surface sb2 from b2
mksurface sb2 b2

# distances between cb1 and sb2 (for 10 points):
xdistcs cb1 sb2 3.14159265358979 9.42477796076938 10

 T=3.14159 D=0.00485378
 T=3.83972 D=0.00575202
 T=4.53786 D=0.00670832
 T=5.23599 D=0.00727522
 T=5.93412 D=0.00718746
 T=6.63225 D=0.0064861
 T=7.33038 D=0.00549933
 T=8.02851 D=0.00468885
 T=8.72665 D=0.0044339
 T=9.42478 D=0.00485378

I took the value 0.008 that is more than maximal distance above

msv

2015-02-10 16:59

developer   ~0037303

I agree with PKV: This case must be correctly processed with fuzzy option.

Dear bugmaster,
Please add this test case to the database (Boolean operation with usage of fuzzy option). Then close this bug.

abv

2015-04-28 13:40

manager   ~0040344

Mikhail, as we already discussed multiple times and seem to agreed, the algorithm must produce valid result on valid input. If it cannot, it is a bug. Fuzzy option is a means to avoid appearance of negligibly small fragments (or gaps) in the result, but it cannot be considered as a valid way of making algorithm working.

Issue History

Date Modified Username Field Change
2015-01-30 14:05 shoogen New Issue
2015-01-30 14:05 shoogen Assigned To => msv
2015-01-30 14:05 shoogen File Added: torusunion0.draw
2015-01-30 14:27 shoogen Note Added: 0036894
2015-02-03 10:32 msv Assigned To msv => pkv
2015-02-03 10:32 msv Status new => assigned
2015-02-10 12:51 pkv Note Added: 0037279
2015-02-10 12:52 pkv Note Edited: 0037279
2015-02-10 12:53 pkv Note Edited: 0037279
2015-02-10 12:56 pkv Assigned To pkv => msv
2015-02-10 12:56 pkv Status assigned => feedback
2015-02-10 16:59 msv Note Added: 0037303
2015-02-10 16:59 msv Assigned To msv => bugmaster
2015-02-10 16:59 msv Status feedback => acknowledged
2015-04-28 13:05 msv Relationship added related to 0025755
2015-04-28 13:06 msv Target Version => 6.9.0
2015-04-28 13:07 msv Status acknowledged => reviewed
2015-04-28 13:40 abv Note Added: 0040344
2015-04-28 13:40 abv Assigned To bugmaster => ssv
2015-04-28 13:40 abv Status reviewed => assigned
2015-04-30 12:07 msv Target Version 6.9.0 => Unscheduled