View Issue Details
ID | Project | Category | View Status | Date Submitted | Last Update |
---|---|---|---|---|---|
0025771 | Community | OCCT:Modeling Algorithms | public | 2015-01-30 14:05 | 2015-04-30 12:07 |
Reporter | shoogen | Assigned To | |||
Priority | normal | Severity | minor | ||
Status | assigned | Resolution | open | ||
Platform | Linux | OS | Debian 6.0 | ||
Product Version | 6.8.0 | ||||
Target Version | Unscheduled | ||||
Summary | 0025771: fusion of cylinder and torus generates self intersections and invalid imbrications | ||||
Description | The 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 Reproduce | Draw[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 | ||||
Tags | No tags attached. | ||||
Test case number | |||||
related to | 0025755 | assigned | BRepAlgoAPI_Fuse incorrect behavior |
|
torusunion0.draw (1,604 bytes) |
|
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 |
|
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 |
|
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. |
|
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. |
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 |
|
Assigned To | msv => pkv |
2015-02-03 10:32 |
|
Status | new => assigned |
2015-02-10 12:51 |
|
Note Added: 0037279 | |
2015-02-10 12:52 |
|
Note Edited: 0037279 | |
2015-02-10 12:53 |
|
Note Edited: 0037279 | |
2015-02-10 12:56 |
|
Assigned To | pkv => msv |
2015-02-10 12:56 |
|
Status | assigned => feedback |
2015-02-10 16:59 |
|
Note Added: 0037303 | |
2015-02-10 16:59 |
|
Assigned To | msv => bugmaster |
2015-02-10 16:59 |
|
Status | feedback => acknowledged |
2015-04-28 13:05 |
|
Relationship added | related to 0025755 |
2015-04-28 13:06 |
|
Target Version | => 6.9.0 |
2015-04-28 13:07 |
|
Status | acknowledged => reviewed |
2015-04-28 13:40 |
|
Note Added: 0040344 | |
2015-04-28 13:40 |
|
Assigned To | bugmaster => ssv |
2015-04-28 13:40 |
|
Status | reviewed => assigned |
2015-04-30 12:07 |
|
Target Version | 6.9.0 => Unscheduled |