occt: master 01b5b3df
Author | Committer | Branch | Timestamp | Parent |
---|---|---|---|---|
bugmaster | master | 2016-05-04 13:42:55 | master 1aee6c82 | |
Changeset | 0027448: BOPTools_AlgoTools::IsMicroEdge does not correspond to shape validity criteria 1. IntTools_ShrunkRange::Perform The algorithm of building shrunk range on the edge has been redesigned to make this range as big as possible. By new definition it has to have the length not less than Precision::Confusion(). Although, the possibility of splitting of the edge has been taken into account. If it is impossible to put vertex on edge in such a way that the tolerance spheres of the edge's vertices do not intersect the tolerance sphere of the putting vertex the edge cannot be split. This possibility is saved in the new field IntTools_ShrunkRange::myIsSplittable. It can be checked by the corresponding method IntTools_ShrunkRange::IsSplittable(). It returns TRUE if the shrunk range is computed successfully and it has the length more than the value of sum of two tolerance values of the edge (for putting vertex, as its tolerance should not be less than the tolerance value of edge) and two Precision::Confusion() values (to make two new edges valid by Shape validity criteria). IntTools_ShrunkRange::myErrorStatus and IntTools_ShrunkRange::ErrorStatus() have been replaced by the IntTools_ShrunkRange::myIsDone and IntTools_ShrunkRange::IsDone(). IntTools_ShrunkRange::IsDone() returns TRUE if the shrunk range has been computed and it has length more than Precision::Confusion(). All computations of the parameters are performed using the GCPnts_AbscissaPoint, but if AbscissaPoint is unable to compute the parameters the Resolution of the curve is used. 2. Boolean Operations algorithm now partially works with the edges that cannot be split or does not have the ShrunkData at all (previously such edges have been considered as micro and just ignored). If by the result of some intersection such edges should be split, i.e. the intersection vertex should be created, the algorithm just ignores them and no vertex is created. But if such edges coincide with other shapes (other edges or faces) the algorithm uses them for creation of common blocks. The information of the possibility for the edges to be split is saved in its PaveBlocks, in the new BOPDS_PaveBlock::myIsSplittable field. It can be retrieved by the BOPDS_PaveBlock::IsSplittable() or BOPDS_PaveBlock::ShrunkData(), but these methods make sense only after filling of the shrunk data for the pave block. BOPTools_AlgoTools::IsMicroEdge() has an additional parameter that defines whether it is necessary to take into account the possibility for the edge to be split or not. By default it is set to TRUE, i.e. by default the edge will be considered as micro even if the shrunk range is computed, but it is too short for the edge to be split. 3. BOPAlgo_PaveFiller::PerformEF To avoid creation of too close intersection vertices the intersection ranges of the edges participating in Edge/Face intersections are reduced taking into account the common ranges computed during Edge/Edge intersections. Thus, the Edge/Face intersection vertex is not created if it gets into a common range of the Edge/Edge intersection between that edge and one of the face's edges. The tolerance value of Edge/Edge intersection vertex is increased to reach the Edge/Face intersection. 4. Unification of the vertices of the section edges considered as micro edges. If by the result of some Face/Face intersection the section edge is considered as micro edge, the vertices of this edge will be united and the edge itself will be removed. 5. Test cases for the issues. 6. Adjusting test cases for issue CR27448. |
|||
mod - src/BOPAlgo/BOPAlgo_PaveFiller.hxx | Diff File | |||
mod - src/BOPAlgo/BOPAlgo_PaveFiller_2.cxx | Diff File | |||
mod - src/BOPAlgo/BOPAlgo_PaveFiller_3.cxx | Diff File | |||
mod - src/BOPAlgo/BOPAlgo_PaveFiller_5.cxx | Diff File | |||
mod - src/BOPAlgo/BOPAlgo_PaveFiller_6.cxx | Diff File | |||
mod - src/BOPAlgo/BOPAlgo_PaveFiller_8.cxx | Diff File | |||
mod - src/BOPAlgo/BOPAlgo_PaveFiller_9.cxx | Diff File | |||
mod - src/BOPDS/BOPDS_PaveBlock.cxx | Diff File | |||
mod - src/BOPDS/BOPDS_PaveBlock.hxx | Diff File | |||
mod - src/BOPTools/BOPTools_AlgoTools.cxx | Diff File | |||
mod - src/BOPTools/BOPTools_AlgoTools.hxx | Diff File | |||
mod - src/IntTools/IntTools_ShrunkRange.cxx | Diff File | |||
mod - src/IntTools/IntTools_ShrunkRange.hxx | Diff File | |||
mod - tests/boolean/bfuse_complex/E4 | Diff File | |||
mod - tests/bugs/modalg_1/bug1255 | Diff File | |||
mod - tests/bugs/modalg_1/bug1255_1 | Diff File | |||
mod - tests/bugs/modalg_5/bug24581 | Diff File | |||
mod - tests/bugs/modalg_6/bug26953_2 | Diff File | |||
add - tests/bugs/modalg_6/bug27448_1 | Diff File | |||
add - tests/bugs/modalg_6/bug27448_2 | Diff File | |||
add - tests/bugs/modalg_6/bug27519_1 | Diff File | |||
add - tests/bugs/modalg_6/bug27519_2 | Diff File | |||
mod - tests/offset/faces_type_i/C8 | Diff File | |||
mod - tests/offset/shape_type_i/C8 | Diff File |