From 6b6d06fa08aa8a50760ad6fc60de9fc72e27504c Mon Sep 17 00:00:00 2001 From: abv Date: Thu, 1 Oct 2020 14:27:14 +0300 Subject: [PATCH] 0027191: Documentation - redesign of information architecture -- renaming (4) Move documents describing BREP format, Boolean operations, and PBR math to dox/specification --- dox/FILES_HTML.txt | 8 +- dox/FILES_PDF.txt | 6 +- dox/contribution/contribution.md | 4 - .../boolean_operations/boolean_operations.md | 936 +++++++++--------- .../images/boolean_image001.svg | 0 .../images/boolean_image002.svg | 0 .../images/boolean_image004.png | Bin .../images/boolean_image005.png | Bin .../images/boolean_image006.png | Bin .../images/boolean_image007.png | Bin .../images/boolean_image008.png | Bin .../images/boolean_image009.png | Bin .../images/boolean_image010.svg | 0 .../images/boolean_image011.svg | 0 .../images/boolean_image012.svg | 0 .../images/boolean_image013.svg | 0 .../images/boolean_image014.svg | 0 .../images/boolean_image015.svg | 0 .../images/boolean_image016.svg | 0 .../images/boolean_image017.svg | 0 .../images/boolean_image018.svg | 0 .../images/boolean_image019.png | Bin .../images/boolean_image020.png | Bin .../images/boolean_image021.png | Bin .../images/boolean_image022.png | Bin .../images/boolean_image023.png | Bin .../images/boolean_image024.png | Bin .../images/boolean_image025.png | Bin .../images/boolean_image026.png | Bin .../images/boolean_image027.png | Bin .../images/boolean_image028.png | Bin .../images/boolean_image029.png | Bin .../images/boolean_image030.png | Bin .../images/boolean_image031.png | Bin .../images/boolean_image032.png | Bin .../images/boolean_image033.png | Bin .../images/boolean_image034.png | Bin .../images/boolean_image035.png | Bin .../images/boolean_image036.png | Bin .../images/boolean_image037.png | Bin .../images/boolean_image038.png | Bin .../images/boolean_image039.png | Bin .../images/boolean_image040.png | Bin .../images/boolean_image041.png | Bin .../images/boolean_image042.png | Bin .../images/boolean_image043.png | Bin .../images/boolean_image044.png | Bin .../images/boolean_image045.png | Bin .../images/boolean_image046.png | Bin .../images/boolean_image047.png | Bin .../images/boolean_image048.png | Bin .../images/boolean_image049.png | Bin .../images/boolean_image050.png | Bin .../images/boolean_image051.png | Bin .../images/boolean_image052.png | Bin .../images/boolean_image053.png | Bin .../images/boolean_image054.png | Bin .../images/boolean_image055.png | Bin .../images/boolean_image056.png | Bin .../images/boolean_image057.png | Bin .../images/boolean_image058.png | Bin .../images/boolean_image059.png | Bin .../images/boolean_image060.png | Bin .../images/boolean_image061.png | Bin .../images/boolean_image062.png | Bin .../images/boolean_image063.png | Bin .../images/boolean_image064.png | Bin .../images/boolean_image065.png | Bin .../images/boolean_image066.png | Bin .../images/boolean_image067.png | Bin .../images/boolean_image068.png | Bin .../images/boolean_image069.png | Bin .../images/boolean_image070.png | Bin .../images/boolean_image071.png | Bin .../images/boolean_image072.png | Bin .../images/boolean_image073.png | Bin .../images/boolean_image080.png | Bin .../images/boolean_image081.png | Bin .../images/boolean_image082.png | Bin .../images/boolean_image083.png | Bin .../images/boolean_image084.png | Bin .../images/boolean_image085.png | Bin .../images/boolean_image086.png | Bin .../images/boolean_image087.png | Bin .../images/boolean_image088.png | Bin .../images/boolean_image089.png | Bin .../images/boolean_image090.png | Bin .../images/boolean_image091.png | Bin .../images/boolean_image092.png | Bin .../images/boolean_image093.png | Bin .../images/boolean_image094.png | Bin .../images/boolean_image095.png | Bin .../images/boolean_image096.png | Bin .../images/boolean_image097.png | Bin .../images/boolean_image098.png | Bin .../images/boolean_image099.png | Bin .../images/boolean_image100.png | Bin .../images/boolean_image101.png | Bin .../images/boolean_image102.png | Bin .../images/boolean_image103.png | Bin .../images/boolean_image104.png | Bin .../images/boolean_image105.png | Bin .../images/boolean_image106.png | Bin .../images/boolean_image107.png | Bin .../images/boolean_image108.png | Bin .../images/boolean_image109.png | Bin .../images/boolean_image110.png | Bin .../images/boolean_image111.png | Bin .../images/boolean_image112.png | Bin .../images/boolean_image113.png | Bin .../images/boolean_image114.png | Bin .../images/boolean_image115.png | Bin .../images/boolean_image116.png | Bin .../images/boolean_image117.png | Bin .../images/boolean_image118.png | Bin .../images/boolean_image119.png | Bin .../images/boolean_image120.png | Bin .../images/boolean_image121.png | Bin .../images/boolean_image122.png | Bin .../images/boolean_image123.png | Bin .../images/boolean_image124.png | Bin .../images/boolean_image125.png | Bin .../images/boolean_image126.png | Bin .../images/boolean_image127.png | Bin .../images/boolean_image128.png | Bin .../images/boolean_image129.png | Bin .../images/boolean_image130.png | Bin .../images/boolean_image131.png | Bin .../images/boolean_image132.png | Bin .../images/boolean_image133.png | Bin .../images/boolean_image134.png | Bin .../images/boolean_image135.png | Bin .../images/boolean_image136.png | Bin .../images/boolean_image137.png | Bin .../images/boolean_image138.png | Bin .../images/boolean_image139.png | Bin .../images/boolean_image140.png | Bin .../images/boolean_image141.png | Bin .../images/boolean_image142.png | Bin .../images/boolean_image143.png | Bin .../images/bop_simple_001.png | Bin .../images/bop_simple_002.png | Bin .../images/bsplit_image001.png | Bin .../images/bsplit_image002.png | Bin .../images/bsplit_image003.png | Bin .../images/bsplit_image004.png | Bin .../images/bsplit_image005.png | Bin .../images/bsplit_image006.png | Bin .../images/cells_algorithm_001.png | Bin .../images/cells_algorithm_002.png | Bin .../images/cells_algorithm_003.png | Bin .../images/cells_algorithm_004.png | Bin .../images/cells_algorithm_005.png | Bin .../images/cells_algorithm_006_1.png | Bin .../images/cells_algorithm_006_2.png | Bin .../images/cells_algorithm_007.png | Bin .../images/cells_algorithm_008.png | Bin .../images/glue_options_image001.png | Bin .../images/glue_options_image002.png | Bin .../images/glue_options_image003.png | Bin .../images/glue_options_image004.png | Bin .../images/glue_options_image005.png | Bin .../images/mkvolume_image001.png | Bin .../images/mkvolume_image002.png | Bin .../images/mkvolume_image003.png | Bin .../images/mkvolume_image004.png | Bin .../images/operations_image001.svg | 0 .../images/operations_image002.svg | 0 .../images/operations_image003.svg | 0 .../images/operations_image004.svg | 0 .../images/operations_image005.svg | 0 .../images/operations_image006.svg | 0 .../images/operations_image007.svg | 0 .../images/operations_image008.svg | 0 .../images/operations_image009.svg | 0 .../images/operations_image010.svg | 0 .../images/operations_image011.svg | 0 .../images/operations_image012.svg | 0 .../images/operations_image013.svg | 0 .../images/operations_image014.svg | 0 .../images/operations_image015.svg | 0 .../images/operations_image016.svg | 0 .../images/operations_image017.svg | 0 .../images/operations_image018.svg | 0 .../images/operations_image019.png | Bin .../images/operations_image020.png | Bin .../images/operations_image021.svg | 0 .../images/operations_image022.svg | 0 .../images/operations_image023.svg | 0 .../images/operations_image024.svg | 0 .../images/operations_image025.svg | 0 .../images/operations_image026.svg | 0 .../images/operations_image027.png | Bin .../images/operations_image028.png | Bin .../images/operations_image029.png | Bin .../images/operations_image030.png | Bin .../images/operations_image031.png | Bin .../images/operations_image032.png | Bin .../images/operations_image033.svg | 0 .../images/operations_image036.svg | 0 .../images/operations_image037.svg | 0 .../images/operations_image038.svg | 0 .../images/operations_image039a.png | Bin .../images/operations_image039b.png | Bin .../images/operations_image040.png | Bin .../images/operations_image041.png | Bin .../images/operations_image042.png | Bin .../images/operations_image043.png | Bin .../images/operations_image044.png | Bin .../images/operations_image045.png | Bin .../images/operations_image046.png | Bin .../images/operations_image047.png | Bin .../images/operations_image048.png | Bin .../images/operations_image049.png | Bin .../images/operations_image050.svg | 0 .../images/operations_image051.svg | 0 .../images/operations_image052.svg | 0 .../images/operations_image053.svg | 0 .../images/operations_image054.svg | 0 .../images/operations_image055.svg | 0 .../images/operations_image060.png | Bin .../images/operations_image061.png | Bin .../images/operations_image062.png | Bin .../images/operations_image063.png | Bin .../images/operations_image064.png | Bin .../images/operations_image065.png | Bin .../brep_format.md} | 119 ++- .../pbr_math.md | 2 +- dox/specification/specification.md | 8 + dox/upgrade/upgrade.md | 2 +- .../draw_test_harness/draw_test_harness.md | 10 +- .../modeling_algos/modeling_algos.md | 14 +- .../modeling_data/modeling_data.md | 2 +- dox/user_guides/user_guides.md | 4 +- 234 files changed, 571 insertions(+), 544 deletions(-) rename dox/{user_guides => specification}/boolean_operations/boolean_operations.md (77%) rename dox/{user_guides => specification}/boolean_operations/images/boolean_image001.svg (100%) rename dox/{user_guides => specification}/boolean_operations/images/boolean_image002.svg (100%) rename dox/{user_guides => specification}/boolean_operations/images/boolean_image004.png (100%) rename dox/{user_guides => specification}/boolean_operations/images/boolean_image005.png (100%) rename dox/{user_guides => specification}/boolean_operations/images/boolean_image006.png (100%) rename dox/{user_guides => specification}/boolean_operations/images/boolean_image007.png (100%) rename dox/{user_guides => specification}/boolean_operations/images/boolean_image008.png (100%) rename dox/{user_guides => specification}/boolean_operations/images/boolean_image009.png (100%) rename dox/{user_guides => specification}/boolean_operations/images/boolean_image010.svg (100%) rename dox/{user_guides => specification}/boolean_operations/images/boolean_image011.svg (100%) rename dox/{user_guides => specification}/boolean_operations/images/boolean_image012.svg (100%) rename dox/{user_guides => specification}/boolean_operations/images/boolean_image013.svg (100%) rename dox/{user_guides => specification}/boolean_operations/images/boolean_image014.svg (100%) rename dox/{user_guides => specification}/boolean_operations/images/boolean_image015.svg (100%) rename dox/{user_guides => specification}/boolean_operations/images/boolean_image016.svg (100%) rename dox/{user_guides => specification}/boolean_operations/images/boolean_image017.svg (100%) rename dox/{user_guides => specification}/boolean_operations/images/boolean_image018.svg (100%) rename dox/{user_guides => specification}/boolean_operations/images/boolean_image019.png (100%) rename dox/{user_guides => specification}/boolean_operations/images/boolean_image020.png (100%) rename dox/{user_guides => specification}/boolean_operations/images/boolean_image021.png (100%) rename dox/{user_guides => specification}/boolean_operations/images/boolean_image022.png (100%) rename dox/{user_guides => specification}/boolean_operations/images/boolean_image023.png (100%) rename dox/{user_guides => specification}/boolean_operations/images/boolean_image024.png (100%) rename dox/{user_guides => specification}/boolean_operations/images/boolean_image025.png (100%) rename dox/{user_guides => specification}/boolean_operations/images/boolean_image026.png (100%) rename dox/{user_guides => specification}/boolean_operations/images/boolean_image027.png (100%) rename dox/{user_guides => specification}/boolean_operations/images/boolean_image028.png (100%) rename dox/{user_guides => specification}/boolean_operations/images/boolean_image029.png (100%) rename dox/{user_guides => specification}/boolean_operations/images/boolean_image030.png (100%) rename dox/{user_guides => specification}/boolean_operations/images/boolean_image031.png (100%) rename dox/{user_guides => specification}/boolean_operations/images/boolean_image032.png (100%) rename dox/{user_guides => specification}/boolean_operations/images/boolean_image033.png (100%) rename dox/{user_guides => specification}/boolean_operations/images/boolean_image034.png (100%) rename dox/{user_guides => specification}/boolean_operations/images/boolean_image035.png (100%) rename dox/{user_guides => specification}/boolean_operations/images/boolean_image036.png (100%) rename dox/{user_guides => specification}/boolean_operations/images/boolean_image037.png (100%) rename dox/{user_guides => specification}/boolean_operations/images/boolean_image038.png (100%) rename dox/{user_guides => specification}/boolean_operations/images/boolean_image039.png (100%) rename dox/{user_guides => specification}/boolean_operations/images/boolean_image040.png (100%) rename dox/{user_guides => specification}/boolean_operations/images/boolean_image041.png (100%) rename dox/{user_guides => specification}/boolean_operations/images/boolean_image042.png (100%) rename dox/{user_guides => specification}/boolean_operations/images/boolean_image043.png (100%) rename dox/{user_guides => specification}/boolean_operations/images/boolean_image044.png (100%) rename dox/{user_guides => specification}/boolean_operations/images/boolean_image045.png (100%) rename dox/{user_guides => specification}/boolean_operations/images/boolean_image046.png (100%) rename dox/{user_guides => specification}/boolean_operations/images/boolean_image047.png (100%) rename dox/{user_guides => specification}/boolean_operations/images/boolean_image048.png (100%) rename dox/{user_guides => specification}/boolean_operations/images/boolean_image049.png (100%) rename dox/{user_guides => specification}/boolean_operations/images/boolean_image050.png (100%) rename dox/{user_guides => specification}/boolean_operations/images/boolean_image051.png (100%) rename dox/{user_guides => specification}/boolean_operations/images/boolean_image052.png (100%) rename dox/{user_guides => specification}/boolean_operations/images/boolean_image053.png (100%) rename dox/{user_guides => specification}/boolean_operations/images/boolean_image054.png (100%) rename dox/{user_guides => specification}/boolean_operations/images/boolean_image055.png (100%) rename dox/{user_guides => specification}/boolean_operations/images/boolean_image056.png (100%) rename dox/{user_guides => specification}/boolean_operations/images/boolean_image057.png (100%) rename dox/{user_guides => specification}/boolean_operations/images/boolean_image058.png (100%) rename dox/{user_guides => specification}/boolean_operations/images/boolean_image059.png (100%) rename dox/{user_guides => specification}/boolean_operations/images/boolean_image060.png (100%) rename dox/{user_guides => specification}/boolean_operations/images/boolean_image061.png (100%) rename dox/{user_guides => specification}/boolean_operations/images/boolean_image062.png (100%) rename dox/{user_guides => specification}/boolean_operations/images/boolean_image063.png (100%) rename dox/{user_guides => specification}/boolean_operations/images/boolean_image064.png (100%) rename dox/{user_guides => specification}/boolean_operations/images/boolean_image065.png (100%) rename dox/{user_guides => specification}/boolean_operations/images/boolean_image066.png (100%) rename dox/{user_guides => specification}/boolean_operations/images/boolean_image067.png (100%) rename dox/{user_guides => specification}/boolean_operations/images/boolean_image068.png (100%) rename dox/{user_guides => specification}/boolean_operations/images/boolean_image069.png (100%) rename dox/{user_guides => specification}/boolean_operations/images/boolean_image070.png (100%) rename dox/{user_guides => specification}/boolean_operations/images/boolean_image071.png (100%) rename dox/{user_guides => specification}/boolean_operations/images/boolean_image072.png (100%) rename dox/{user_guides => specification}/boolean_operations/images/boolean_image073.png (100%) rename dox/{user_guides => specification}/boolean_operations/images/boolean_image080.png (100%) rename dox/{user_guides => specification}/boolean_operations/images/boolean_image081.png (100%) rename dox/{user_guides => specification}/boolean_operations/images/boolean_image082.png (100%) rename dox/{user_guides => specification}/boolean_operations/images/boolean_image083.png (100%) rename dox/{user_guides => specification}/boolean_operations/images/boolean_image084.png (100%) rename dox/{user_guides => specification}/boolean_operations/images/boolean_image085.png (100%) rename dox/{user_guides => specification}/boolean_operations/images/boolean_image086.png (100%) rename dox/{user_guides => specification}/boolean_operations/images/boolean_image087.png (100%) rename dox/{user_guides => specification}/boolean_operations/images/boolean_image088.png (100%) rename dox/{user_guides => specification}/boolean_operations/images/boolean_image089.png (100%) rename dox/{user_guides => specification}/boolean_operations/images/boolean_image090.png (100%) rename dox/{user_guides => specification}/boolean_operations/images/boolean_image091.png (100%) rename dox/{user_guides => specification}/boolean_operations/images/boolean_image092.png (100%) rename dox/{user_guides => specification}/boolean_operations/images/boolean_image093.png (100%) rename dox/{user_guides => specification}/boolean_operations/images/boolean_image094.png (100%) rename dox/{user_guides => specification}/boolean_operations/images/boolean_image095.png (100%) rename dox/{user_guides => specification}/boolean_operations/images/boolean_image096.png (100%) rename dox/{user_guides => specification}/boolean_operations/images/boolean_image097.png (100%) rename dox/{user_guides => specification}/boolean_operations/images/boolean_image098.png (100%) rename dox/{user_guides => specification}/boolean_operations/images/boolean_image099.png (100%) rename dox/{user_guides => specification}/boolean_operations/images/boolean_image100.png (100%) rename dox/{user_guides => specification}/boolean_operations/images/boolean_image101.png (100%) rename dox/{user_guides => specification}/boolean_operations/images/boolean_image102.png (100%) rename dox/{user_guides => specification}/boolean_operations/images/boolean_image103.png (100%) rename dox/{user_guides => specification}/boolean_operations/images/boolean_image104.png (100%) rename dox/{user_guides => specification}/boolean_operations/images/boolean_image105.png (100%) rename dox/{user_guides => specification}/boolean_operations/images/boolean_image106.png (100%) rename dox/{user_guides => specification}/boolean_operations/images/boolean_image107.png (100%) rename dox/{user_guides => specification}/boolean_operations/images/boolean_image108.png (100%) rename dox/{user_guides => specification}/boolean_operations/images/boolean_image109.png (100%) rename dox/{user_guides => specification}/boolean_operations/images/boolean_image110.png (100%) rename dox/{user_guides => specification}/boolean_operations/images/boolean_image111.png (100%) rename dox/{user_guides => specification}/boolean_operations/images/boolean_image112.png (100%) rename dox/{user_guides => specification}/boolean_operations/images/boolean_image113.png (100%) rename dox/{user_guides => specification}/boolean_operations/images/boolean_image114.png (100%) rename dox/{user_guides => specification}/boolean_operations/images/boolean_image115.png (100%) rename dox/{user_guides => specification}/boolean_operations/images/boolean_image116.png (100%) rename dox/{user_guides => specification}/boolean_operations/images/boolean_image117.png (100%) rename dox/{user_guides => specification}/boolean_operations/images/boolean_image118.png (100%) rename dox/{user_guides => specification}/boolean_operations/images/boolean_image119.png (100%) rename dox/{user_guides => specification}/boolean_operations/images/boolean_image120.png (100%) rename dox/{user_guides => specification}/boolean_operations/images/boolean_image121.png (100%) rename dox/{user_guides => specification}/boolean_operations/images/boolean_image122.png (100%) rename dox/{user_guides => specification}/boolean_operations/images/boolean_image123.png (100%) rename dox/{user_guides => specification}/boolean_operations/images/boolean_image124.png (100%) rename dox/{user_guides => specification}/boolean_operations/images/boolean_image125.png (100%) rename dox/{user_guides => specification}/boolean_operations/images/boolean_image126.png (100%) rename dox/{user_guides => specification}/boolean_operations/images/boolean_image127.png (100%) rename dox/{user_guides => specification}/boolean_operations/images/boolean_image128.png (100%) rename dox/{user_guides => specification}/boolean_operations/images/boolean_image129.png (100%) rename dox/{user_guides => specification}/boolean_operations/images/boolean_image130.png (100%) rename dox/{user_guides => specification}/boolean_operations/images/boolean_image131.png (100%) rename dox/{user_guides => specification}/boolean_operations/images/boolean_image132.png (100%) rename dox/{user_guides => specification}/boolean_operations/images/boolean_image133.png (100%) rename dox/{user_guides => specification}/boolean_operations/images/boolean_image134.png (100%) rename dox/{user_guides => specification}/boolean_operations/images/boolean_image135.png (100%) rename dox/{user_guides => specification}/boolean_operations/images/boolean_image136.png (100%) rename dox/{user_guides => specification}/boolean_operations/images/boolean_image137.png (100%) rename dox/{user_guides => specification}/boolean_operations/images/boolean_image138.png (100%) rename dox/{user_guides => specification}/boolean_operations/images/boolean_image139.png (100%) rename dox/{user_guides => specification}/boolean_operations/images/boolean_image140.png (100%) rename dox/{user_guides => specification}/boolean_operations/images/boolean_image141.png (100%) rename dox/{user_guides => specification}/boolean_operations/images/boolean_image142.png (100%) rename dox/{user_guides => specification}/boolean_operations/images/boolean_image143.png (100%) rename dox/{user_guides => specification}/boolean_operations/images/bop_simple_001.png (100%) rename dox/{user_guides => specification}/boolean_operations/images/bop_simple_002.png (100%) rename dox/{user_guides => specification}/boolean_operations/images/bsplit_image001.png (100%) rename dox/{user_guides => specification}/boolean_operations/images/bsplit_image002.png (100%) rename dox/{user_guides => specification}/boolean_operations/images/bsplit_image003.png (100%) rename dox/{user_guides => specification}/boolean_operations/images/bsplit_image004.png (100%) rename dox/{user_guides => specification}/boolean_operations/images/bsplit_image005.png (100%) rename dox/{user_guides => specification}/boolean_operations/images/bsplit_image006.png (100%) rename dox/{user_guides => specification}/boolean_operations/images/cells_algorithm_001.png (100%) rename dox/{user_guides => specification}/boolean_operations/images/cells_algorithm_002.png (100%) rename dox/{user_guides => specification}/boolean_operations/images/cells_algorithm_003.png (100%) rename dox/{user_guides => specification}/boolean_operations/images/cells_algorithm_004.png (100%) rename dox/{user_guides => specification}/boolean_operations/images/cells_algorithm_005.png (100%) rename dox/{user_guides => specification}/boolean_operations/images/cells_algorithm_006_1.png (100%) rename dox/{user_guides => specification}/boolean_operations/images/cells_algorithm_006_2.png (100%) rename dox/{user_guides => specification}/boolean_operations/images/cells_algorithm_007.png (100%) rename dox/{user_guides => specification}/boolean_operations/images/cells_algorithm_008.png (100%) rename dox/{user_guides => specification}/boolean_operations/images/glue_options_image001.png (100%) rename dox/{user_guides => specification}/boolean_operations/images/glue_options_image002.png (100%) rename dox/{user_guides => specification}/boolean_operations/images/glue_options_image003.png (100%) rename dox/{user_guides => specification}/boolean_operations/images/glue_options_image004.png (100%) rename dox/{user_guides => specification}/boolean_operations/images/glue_options_image005.png (100%) rename dox/{user_guides => specification}/boolean_operations/images/mkvolume_image001.png (100%) rename dox/{user_guides => specification}/boolean_operations/images/mkvolume_image002.png (100%) rename dox/{user_guides => specification}/boolean_operations/images/mkvolume_image003.png (100%) rename dox/{user_guides => specification}/boolean_operations/images/mkvolume_image004.png (100%) rename dox/{user_guides => specification}/boolean_operations/images/operations_image001.svg (100%) rename dox/{user_guides => specification}/boolean_operations/images/operations_image002.svg (100%) rename dox/{user_guides => specification}/boolean_operations/images/operations_image003.svg (100%) rename dox/{user_guides => specification}/boolean_operations/images/operations_image004.svg (100%) rename dox/{user_guides => specification}/boolean_operations/images/operations_image005.svg (100%) rename dox/{user_guides => specification}/boolean_operations/images/operations_image006.svg (100%) rename dox/{user_guides => specification}/boolean_operations/images/operations_image007.svg (100%) rename dox/{user_guides => specification}/boolean_operations/images/operations_image008.svg (100%) rename dox/{user_guides => specification}/boolean_operations/images/operations_image009.svg (100%) rename dox/{user_guides => specification}/boolean_operations/images/operations_image010.svg (100%) rename dox/{user_guides => specification}/boolean_operations/images/operations_image011.svg (100%) rename dox/{user_guides => specification}/boolean_operations/images/operations_image012.svg (100%) rename dox/{user_guides => specification}/boolean_operations/images/operations_image013.svg (100%) rename dox/{user_guides => specification}/boolean_operations/images/operations_image014.svg (100%) rename dox/{user_guides => specification}/boolean_operations/images/operations_image015.svg (100%) rename dox/{user_guides => specification}/boolean_operations/images/operations_image016.svg (100%) rename dox/{user_guides => specification}/boolean_operations/images/operations_image017.svg (100%) rename dox/{user_guides => specification}/boolean_operations/images/operations_image018.svg (100%) rename dox/{user_guides => specification}/boolean_operations/images/operations_image019.png (100%) rename dox/{user_guides => specification}/boolean_operations/images/operations_image020.png (100%) rename dox/{user_guides => specification}/boolean_operations/images/operations_image021.svg (100%) rename dox/{user_guides => specification}/boolean_operations/images/operations_image022.svg (100%) rename dox/{user_guides => specification}/boolean_operations/images/operations_image023.svg (100%) rename dox/{user_guides => specification}/boolean_operations/images/operations_image024.svg (100%) rename dox/{user_guides => specification}/boolean_operations/images/operations_image025.svg (100%) rename dox/{user_guides => specification}/boolean_operations/images/operations_image026.svg (100%) rename dox/{user_guides => specification}/boolean_operations/images/operations_image027.png (100%) rename dox/{user_guides => specification}/boolean_operations/images/operations_image028.png (100%) rename dox/{user_guides => specification}/boolean_operations/images/operations_image029.png (100%) rename dox/{user_guides => specification}/boolean_operations/images/operations_image030.png (100%) rename dox/{user_guides => specification}/boolean_operations/images/operations_image031.png (100%) rename dox/{user_guides => specification}/boolean_operations/images/operations_image032.png (100%) rename dox/{user_guides => specification}/boolean_operations/images/operations_image033.svg (100%) rename dox/{user_guides => specification}/boolean_operations/images/operations_image036.svg (100%) rename dox/{user_guides => specification}/boolean_operations/images/operations_image037.svg (100%) rename dox/{user_guides => specification}/boolean_operations/images/operations_image038.svg (100%) rename dox/{user_guides => specification}/boolean_operations/images/operations_image039a.png (100%) rename dox/{user_guides => specification}/boolean_operations/images/operations_image039b.png (100%) rename dox/{user_guides => specification}/boolean_operations/images/operations_image040.png (100%) rename dox/{user_guides => specification}/boolean_operations/images/operations_image041.png (100%) rename dox/{user_guides => specification}/boolean_operations/images/operations_image042.png (100%) rename dox/{user_guides => specification}/boolean_operations/images/operations_image043.png (100%) rename dox/{user_guides => specification}/boolean_operations/images/operations_image044.png (100%) rename dox/{user_guides => specification}/boolean_operations/images/operations_image045.png (100%) rename dox/{user_guides => specification}/boolean_operations/images/operations_image046.png (100%) rename dox/{user_guides => specification}/boolean_operations/images/operations_image047.png (100%) rename dox/{user_guides => specification}/boolean_operations/images/operations_image048.png (100%) rename dox/{user_guides => specification}/boolean_operations/images/operations_image049.png (100%) rename dox/{user_guides => specification}/boolean_operations/images/operations_image050.svg (100%) rename dox/{user_guides => specification}/boolean_operations/images/operations_image051.svg (100%) rename dox/{user_guides => specification}/boolean_operations/images/operations_image052.svg (100%) rename dox/{user_guides => specification}/boolean_operations/images/operations_image053.svg (100%) rename dox/{user_guides => specification}/boolean_operations/images/operations_image054.svg (100%) rename dox/{user_guides => specification}/boolean_operations/images/operations_image055.svg (100%) rename dox/{user_guides => specification}/boolean_operations/images/operations_image060.png (100%) rename dox/{user_guides => specification}/boolean_operations/images/operations_image061.png (100%) rename dox/{user_guides => specification}/boolean_operations/images/operations_image062.png (100%) rename dox/{user_guides => specification}/boolean_operations/images/operations_image063.png (100%) rename dox/{user_guides => specification}/boolean_operations/images/operations_image064.png (100%) rename dox/{user_guides => specification}/boolean_operations/images/operations_image065.png (100%) rename dox/{user_guides/brep_wp/brep_wp.md => specification/brep_format.md} (95%) rename dox/{dev_guides/visualization => specification}/pbr_math.md (99%) create mode 100644 dox/specification/specification.md diff --git a/dox/FILES_HTML.txt b/dox/FILES_HTML.txt index f82422068f..92088988a4 100644 --- a/dox/FILES_HTML.txt +++ b/dox/FILES_HTML.txt @@ -24,7 +24,6 @@ user_guides/user_guides.md user_guides/foundation_classes/foundation_classes.md user_guides/modeling_data/modeling_data.md user_guides/modeling_algos/modeling_algos.md -user_guides/boolean_operations/boolean_operations.md user_guides/shape_healing/shape_healing.md user_guides/visualization/visualization.md user_guides/iges/iges.md @@ -34,9 +33,13 @@ user_guides/ocaf/ocaf.md user_guides/tobj/tobj.md user_guides/draw_test_harness/draw_test_harness.md user_guides/inspector/inspector.md -user_guides/brep_wp/brep_wp.md user_guides/vis/vis.md +specification/specification.md +specification/boolean_operations/boolean_operations.md +specification/brep_format.md +specification/pbr_math.md + contribution/contribution.md contribution/documentation/documentation.md contribution/coding_rules.md @@ -45,7 +48,6 @@ contribution/git_guide/git_guide.md contribution/tests/tests.md debug/debug.md upgrade/upgrade.md -dev_guides/visualization/pbr_math.md dev_guides/building/building.md dev_guides/building/3rdparty/3rdparty_windows.md diff --git a/dox/FILES_PDF.txt b/dox/FILES_PDF.txt index 8aeb596584..a26c0f7464 100644 --- a/dox/FILES_PDF.txt +++ b/dox/FILES_PDF.txt @@ -4,12 +4,12 @@ # Empty spaces are allowed. # Strings starting with '#' are treated as comments and ignored. -user_guides/brep_wp/brep_wp.md +specification/brep_wp/brep_wp.md user_guides/foundation_classes/foundation_classes.md user_guides/iges/iges.md user_guides/modeling_data/modeling_data.md user_guides/modeling_algos/modeling_algos.md -user_guides/boolean_operations/boolean_operations.md +specification/boolean_operations/boolean_operations.md user_guides/shape_healing/shape_healing.md user_guides/ocaf/ocaf.md user_guides/step/step.md @@ -27,6 +27,6 @@ contribution/git_guide/git_guide.md contribution/tests/tests.md upgrade/upgrade.md -dev_guides/visualization/pbr_math.md +specification/pbr_math.md tutorial/tutorial.md diff --git a/dox/contribution/contribution.md b/dox/contribution/contribution.md index 832d65d169..f99855ef0c 100644 --- a/dox/contribution/contribution.md +++ b/dox/contribution/contribution.md @@ -11,10 +11,6 @@ The following documents provide information on OCCT building, development and te * @subpage occt_dev_guides__tests "Automatic Testing system" * @subpage occt_dev_guides__debug "Debugging tools and hints" -The following documents provide information on OCCT algorithms background: - -* @subpage occt_dev_guides__pbr_math "Physically-based Rendering math (PBR for rasterization)" - The following guide provides information relevant to upgrading applications developed with previous versions of OCCT, to recent one: * @subpage occt_dev_guides__upgrade "Upgrade from previous OCCT versions" diff --git a/dox/user_guides/boolean_operations/boolean_operations.md b/dox/specification/boolean_operations/boolean_operations.md similarity index 77% rename from dox/user_guides/boolean_operations/boolean_operations.md rename to dox/specification/boolean_operations/boolean_operations.md index 6253d38fa7..4cd09f4bd4 100644 --- a/dox/user_guides/boolean_operations/boolean_operations.md +++ b/dox/specification/boolean_operations/boolean_operations.md @@ -1,11 +1,12 @@ -Boolean Operations {#occt_user_guides__boolean_operations} +Boolean Operations {#specification__boolean_operations} ========================= @tableofcontents -@section occt_algorithms_1 Introduction +@section specification__boolean_1 Introduction -This document provides a comprehensive description of the Boolean Operation Algorithm (BOA) as it is implemented in Open CASCADE Technology. The Boolean Component contains: +Boolean operations are used to create new shapes from the combinations of two groups of shapes. +This document provides a comprehensive description of the algorithms in the Boolean Operations Component as it is implemented in Open CASCADE Technology. The Boolean Component contains: * General Fuse Operator (GFA), * Boolean Operator (BOA), @@ -17,13 +18,18 @@ GFA is the base algorithm for BOA, SPA, SA. GFA has a history-based architecture designed to allow using OCAF naming functionality. The architecture of GFA is expandable, that allows creating new algorithms basing on it. -@section occt_algorithms_2 Overview +@section specification__boolean_2 Overview -@subsection occt_algorithms_2_1 Operators +@subsection specification__boolean_2_1 Operators -@subsubsection occt_algorithms_2_1_1 Boolean operator +@subsubsection specification__boolean_2_1_1 Boolean operator -The Boolean operator provides the operations (Common, Fuse, Cut) between two groups: *Objects* and *Tools*. Each group consists of an arbitrary number of arguments in terms of *TopoDS_Shape*. +The Boolean operator provides the following operations between two groups *Objects* and *Tools*: +* FUSE - Union of two groups; +* COMMON - Intersection of two groups; +* CUT - Difference between two groups. + +Each group consists of an arbitrary number of arguments in terms of *TopoDS_Shape*. The operator can be represented as: @@ -40,9 +46,9 @@ where: **Note** There is an operation *Cut21*, which is an extension for forward Cut operation, i.e Cut21=Cut(G2, G1). -For more details see @ref occt_algorithms_9 "Boolean Operations Algorithm" section. +For more details see @ref specification__boolean_9 "Boolean Operations Algorithm" section. -@subsubsection occt_algorithms_2_1_2 General Fuse operator +@subsubsection specification__boolean_2_1_2 General Fuse operator The General fuse operator can be applied to an arbitrary number of arguments in terms of *TopoDS_Shape*. @@ -61,7 +67,7 @@ For example, for two arguments *S1* and *S2* the result *R RGF = GF (S1, S2) = Sp1 + Sp2 + Sp12 -@figure{/user_guides/boolean_operations/images/operations_image001.svg,"Operators",320} +@figure{/specification/boolean_operations/images/operations_image001.svg,"Operators",320} This Figure shows that * Bcommon (S1, S2) = Sp12; @@ -73,9 +79,9 @@ This Figure shows that The fact that *RGF* contains the components of *RB* allows considering GFA as the general case of BOA. So it is possible to implement BOA as a subclass of GFA. -For more details see @ref occt_algorithms_7 "General Fuse Algorithm" section. +For more details see @ref specification__boolean_7 "General Fuse Algorithm" section. -@subsubsection occt_algorithms_2_1_3 Splitter operator +@subsubsection specification__boolean_2_1_3 Splitter operator The Splitter operator can be applied to an arbitrary number of arguments in terms of *TopoDS_Shape*. The arguments are divided into two groups: *Objects* and *Tools*. The result of *SPA* contains all parts that belong to the *Objects* but does not contain the parts that belong to the *Tools*. @@ -103,9 +109,9 @@ For example, when *G1* consists of shapes *S1* and *S The fact that the *RGF* contains the components of *RSPA* allows considering *GFA* as the general case of *SPA*. Thus, it is possible to implement *SPA* as a subclass of *GFA*. -For more details see @ref occt_algorithms_8 "Splitter Algorithm" section. +For more details see @ref specification__boolean_8 "Splitter Algorithm" section. -@subsubsection occt_algorithms_2_1_4 Section operator +@subsubsection specification__boolean_2_1_4 Section operator The Section operator *SA* can be applied to arbitrary number of arguments in terms of *TopoDS_Shape*. The result of *SA* contains vertices and edges in accordance with interferences between the arguments The SA operator can be represented as follows: @@ -114,9 +120,9 @@ The SA operator can be represented as follows: * S1, S2 ... Sn -- the operation arguments; * *n* -- the number of arguments. -For more details see @ref occt_algorithms_10a "Section Algorithm" section. +For more details see @ref specification__boolean_10a "Section Algorithm" section. -@subsection occt_algorithms_2_2 Parts of algorithms +@subsection specification__boolean_2_2 Parts of algorithms GFA, BOA, SPA and SA have the same Data Structure (DS). The main goal of the Data Structure is to store all necessary information for input data and intermediate results. @@ -126,11 +132,11 @@ The operators consist of two main parts: As it follows from the definition of operator results, the main differences between GFA, BOA, SPA and SA are in the Building Part. The Intersection Part is the same for the algorithms. -@section occt_algorithms_3 Terms and Definitions +@section specification__boolean_3 Terms and Definitions This chapter provides the background terms and definitions that are necessary to understand how the algorithms work. -@subsection occt_algorithms_3_1 Interferences +@subsection specification__boolean_3_1 Interferences There are two groups of interferences. @@ -148,37 +154,37 @@ At second, there are interferences that occur between a solid *Z1* and a shape * * Face/Solid and * Solid/Solid. -@subsubsection occt_algorithms_3_1_1 Vertex/Vertex interference +@subsubsection specification__boolean_3_1_1 Vertex/Vertex interference For two vertices *Vi* and *Vj*, the distance between their corresponding 3D points is less than the sum of their tolerances *Tol(Vi)* and *Tol(Vj)*. -@figure{/user_guides/boolean_operations/images/operations_image002.svg,"Vertex/vertex interference",420} +@figure{/specification/boolean_operations/images/operations_image002.svg,"Vertex/vertex interference",420} The result is a new vertex *Vn* with 3D point *Pn* and tolerance value Tol(Vn). The coordinates of *Pn* and the value Tol(Vn) are computed as the center and the radius of the sphere enclosing the tolerance spheres of the source vertices (V1, V2). -@subsubsection occt_algorithms_3_1_2 Vertex/Edge interference +@subsubsection specification__boolean_3_1_2 Vertex/Edge interference For a vertex *Vi* and an edge *Ej*, the distance *D* between 3D point of the vertex and its projection on the 3D curve of edge *Ej* is less or equal than sum of tolerances of vertex *Tol(Vi)* and edge *Tol(Ej)*. -@figure{/user_guides/boolean_operations/images/operations_image003.svg,"Vertex/edge interference",420} +@figure{/specification/boolean_operations/images/operations_image003.svg,"Vertex/edge interference",420} The result is vertex *Vi* with the corresponding tolerance value Tol(Vi)=Max(Tol(Vi), D+Tol(Ej)), where D = distance (Pi, PPi); and parameter *ti* of the projected point *PPi* on 3D curve *Cj* of edge *Ej*. -@subsubsection occt_algorithms_3_1_3 Vertex/Face interference +@subsubsection specification__boolean_3_1_3 Vertex/Face interference For a vertex *Vi* and a face *Fj* the distance *D* between 3D point of the vertex and its projection on the surface of the face is less or equal than sum of tolerances of the vertex *Tol(Vi)* and the face *Tol(Fj)*. -@figure{/user_guides/boolean_operations/images/operations_image004.svg,"Vertex/face interference",420} +@figure{/specification/boolean_operations/images/operations_image004.svg,"Vertex/face interference",420} The result is vertex *Vi* with the corresponding tolerance value Tol(Vi)=Max(Tol(Vi), D+Tol(Fj)), where D = distance (Pi, PPi) and parameters ui, vi of the projected point *PPi* on surface *Sj* of face *Fj*. -@subsubsection occt_algorithms_3_1_4 Edge/Edge interference +@subsubsection specification__boolean_3_1_4 Edge/Edge interference For two edges *Ei* and *Ej* (with the corresponding 3D curves *Ci* and *Cj*) there are some places where the distance between the curves is less than (or equal to) sum of tolerances of the edges. @@ -186,7 +192,7 @@ Let us examine two cases: In the first case two edges have one or several common parts of 3D curves in terms of tolerance. -@figure{/user_guides/boolean_operations/images/operations_image005.svg,"Edge/edge interference: common parts",420} +@figure{/specification/boolean_operations/images/operations_image005.svg,"Edge/edge interference: common parts",420} The results are: * Parametric range [ti1, ti2 ] for 3D curve *Ci* of edge *Ei*. @@ -194,7 +200,7 @@ The results are: In the second case two edges have one or several common points in terms of tolerance. -@figure{/user_guides/boolean_operations/images/operations_image006.svg,"Edge/edge interference: common points",420} +@figure{/specification/boolean_operations/images/operations_image006.svg,"Edge/edge interference: common points",420} The result is a new vertex *Vn* with 3D point *Pn* and tolerance value *Tol(Vn)*. @@ -203,7 +209,7 @@ The coordinates of *Pn* and the value *Tol(Vn)* are computed as the center and t * Parameter *ti* of *Pi* for the 3D curve *Ci*. * Parameter *tj* of *Pj* for the 3D curve *Cj*. -@subsubsection occt_algorithms_3_1_5 Edge/Face interference +@subsubsection specification__boolean_3_1_5 Edge/Face interference For an edge *Ei* (with the corresponding 3D curve *Ci*) and a face *Fj* (with the corresponding 3D surface *Sj*) there are some places in 3D space, where the distance between *Ci* and surface *Sj* is less than (or equal to) the sum of tolerances of edge *Ei* and face *Fj*. @@ -211,13 +217,13 @@ Let us examine two cases: In the first case Edge *Ei* and Face *Fj* have one or several common parts in terms of tolerance. -@figure{/user_guides/boolean_operations/images/operations_image007.svg,"Edge/face interference: common parts",420} +@figure{/specification/boolean_operations/images/operations_image007.svg,"Edge/face interference: common parts",420} The result is a parametric range [ti1, ti2] for the 3D curve *Ci* of the edge *Ei*. In the second case Edge *Ei* and Face *Fj* have one or several common points in terms of tolerance. -@figure{/user_guides/boolean_operations/images/operations_image008.svg,"Edge/face interference: common points",420} +@figure{/specification/boolean_operations/images/operations_image008.svg,"Edge/face interference: common points",420} The result is a new vertex *Vn* with 3D point *Pn* and tolerance value *Tol(Vn)*. @@ -226,15 +232,15 @@ The coordinates of *Pn* and the value *Tol(Vn)* are computed as the center and t * Parameter *ti* of *Pi* for the 3D curve *Ci*. * Parameters *ui* and *vi* of the projected point *PPi* on the surface *Sj* of the face *Fj*. -@subsubsection occt_algorithms_3_1_6 Face/Face Interference +@subsubsection specification__boolean_3_1_6 Face/Face Interference For a face *Fi* and a face *Fj* (with the corresponding surfaces *Si* and *Sj*) there are some places in 3D space, where the distance between the surfaces is less than (or equal to) sum of tolerances of the faces. -@figure{/user_guides/boolean_operations/images/operations_image009.svg,"Face/face interference: common curves",418} +@figure{/specification/boolean_operations/images/operations_image009.svg,"Face/face interference: common curves",418} In the first case the result contains intersection curves *Cijk (k = 0, 1, 2…kN,* where *kN* is the number of intersection curves with corresponding values of tolerances *Tol(Cijk)*. -@figure{/user_guides/boolean_operations/images/operations_image010.svg,"Face/face interference: common points",305} +@figure{/specification/boolean_operations/images/operations_image010.svg,"Face/face interference: common points",305} In the second case Face *Fi* and face *Fj* have one or several new vertices *Vijm*, where m=0,1,2, ... mN, mN is the number of intersection points. @@ -243,32 +249,32 @@ The coordinates of a 3D point *Pijm* and the value *Tol(Vijmj*, *vj* belong to point *PPj* projected on surface *Sj* of face *Fj*. * Parameters *ui* and *vi* belong to point *PPi* projected on surface *Si* of face *Fi*. -@subsubsection occt_algorithms_3_1_7 Vertex/Solid Interference +@subsubsection specification__boolean_3_1_7 Vertex/Solid Interference For a vertex *Vi* and a solid *Zj* there is Vertex/Solid interference if the vertex *Vi* has no BRep interferences with any sub-shape of *Zj* and *Vi* is completely inside the solid *Zj*. -@figure{/user_guides/boolean_operations/images/operations_image060.png,"Vertex/Solid Interference",220} +@figure{/specification/boolean_operations/images/operations_image060.png,"Vertex/Solid Interference",220} -@subsubsection occt_algorithms_3_1_8 Edge/Soild Interference +@subsubsection specification__boolean_3_1_8 Edge/Soild Interference For an edge *Ei* and a solid *Zj* there is Edge/Solid interference if the edge *Ei* and its sub-shapes have no BRep interferences with any sub-shape of *Zj* and *Ei* is completely inside the solid *Zj*. -@figure{/user_guides/boolean_operations/images/operations_image061.png,"Edge/Solid Interference",220} +@figure{/specification/boolean_operations/images/operations_image061.png,"Edge/Solid Interference",220} -@subsubsection occt_algorithms_3_1_9 Face/Soild Interference +@subsubsection specification__boolean_3_1_9 Face/Soild Interference For a face *Fi* and a solid *Zj* there is Face/Solid interference if the face *Fi* and its sub-shapes have no BRep interferences with any sub-shape of *Zj* and *Fi* is completely inside the solid *Zj*. -@figure{/user_guides/boolean_operations/images/operations_image062.png,"Face/Solid Interference",220} +@figure{/specification/boolean_operations/images/operations_image062.png,"Face/Solid Interference",220} -@subsubsection occt_algorithms_3_1_10 Solid/Soild Interference +@subsubsection specification__boolean_3_1_10 Solid/Soild Interference For a solid *Zi* and a solid *Zj* there is Solid/Solid interference if the solid *Zi* and its sub-shapes have no BRep interferences with any sub-shape of *Zj* and *Zi* is completely inside the solid *Zj*. -@figure{/user_guides/boolean_operations/images/operations_image063.png,"Solid/Solid Interference",220} +@figure{/specification/boolean_operations/images/operations_image063.png,"Solid/Solid Interference",220} -@subsubsection occt_algorithms_3_1_11 Computation Order +@subsubsection specification__boolean_3_1_11 Computation Order The interferences between shapes are computed on the basis of increasing of the dimension value of the shape in the following order: * Vertex/Vertex, @@ -284,13 +290,13 @@ The interferences between shapes are computed on the basis of increasing of the This order allows avoiding the computation of redundant interferences between upper-level shapes *Si* and *Sj* when there are interferences between lower sub-shapes *Sik* and *Sjm*. -@subsubsection occt_algorithms_3_1_12 Results +@subsubsection specification__boolean_3_1_12 Results * The result of the interference is a shape that can be either interfered shape itself (or its part) or a new shape. * The result of the interference is a shape with the dimension value that is less or equal to the minimal dimension value of interfered shapes. For example, the result of Vertex/Edge interference is a vertex, but not an edge. * The result of the interference splits the source shapes on the parts each time as it can do that. -@subsection occt_algorithms_3_2 Paves +@subsection specification__boolean_3_2 Paves The result of interferences of the type Vertex/Edge, Edge/Edge and Edge/Face in most cases is a vertex (new or old) lying on an edge. @@ -299,32 +305,32 @@ The result of interferences of the type Face/Face in most cases is intersection The position of vertex *Vi* on curve *C* can be defined by a value of parameter ti of the 3D point of the vertex on the curve. Pave *PVi* on curve *C* is a structure containing the vertex *Vi* and correspondent value of the parameter ti of the 3D point of the vertex on the curve. Curve *C* can be a 3D or a 2D curve. -@figure{/user_guides/boolean_operations/images/operations_image011.svg,"Paves",340} +@figure{/specification/boolean_operations/images/operations_image011.svg,"Paves",340} Two paves *PV1* and *PV2* on the same curve *C* can be compared using the parameter value @code PV1 > PV2 if t1 > t2 @endcode The usage of paves allows binding of the vertex to the curve (or any structure that contains a curve: edge, intersection curve). -@subsection occt_algorithms_3_3 Pave Blocks +@subsection specification__boolean_3_3 Pave Blocks A set of paves *PVi (i=1, 2...nPV)*, where *nPV* is the number of paves] of curve *C* can be sorted in the increasing order using the value of parameter *t* on curve *C*. A pave block *PBi* is a part of the object (edge, intersection curve) between neighboring paves. -@figure{/user_guides/boolean_operations/images/operations_image012.svg,"Pave Blocks",340} +@figure{/specification/boolean_operations/images/operations_image012.svg,"Pave Blocks",340} Any finite source edge *E* has at least one pave block that contains two paves *PVb* and *PVe*: * Pave *PVb* corresponds to the vertex *Vb* with minimal parameter tb on the curve of the edge. * Pave *PVe* corresponds to the vertex *Ve* with maximal parameter te on the curve of the edge. -@subsection occt_algorithms_3_4 Shrunk Range +@subsection specification__boolean_3_4 Shrunk Range Pave block *PV* of curve *C* is bounded by vertices *V1* and *V2* with tolerance values *Tol(V1)* and *Tol(V2)*. Curve *C* has its own tolerance value *Tol(C)*: * In case of edge, the tolerance value is the tolerance of the edge. * In case of intersection curve, the tolerance value is obtained from an intersection algorithm. -@figure{/user_guides/boolean_operations/images/operations_image013.svg,"Shrunk Range",340} +@figure{/specification/boolean_operations/images/operations_image013.svg,"Shrunk Range",340} The theoretical parametric range of the pave block is [t1C, t2C]. @@ -337,20 +343,20 @@ The Figure shows that each tolerance sphere of a vertex can reduce the parametri The shrunk range of the pave block is the part of 3D curve that can interfere with other shapes. -@subsection occt_algorithms_3_5 Common Blocks +@subsection specification__boolean_3_5 Common Blocks The interferences of the type Edge/Edge, Edge/Face produce results as common parts. In case of Edge/Edge interference the common parts are pave blocks that have different base edges. -@figure{/user_guides/boolean_operations/images/operations_image014.svg,"Common Blocks: Edge/Edge interference",340} +@figure{/specification/boolean_operations/images/operations_image014.svg,"Common Blocks: Edge/Edge interference",340} If the pave blocks PB1, PB2…PBNbPB , where *NbPB* is the number of pave blocks have the same bounding vertices and geometrically coincide, the pave blocks form common block *CB*. In case of Edge/Face interference the common parts are pave blocks lying on a face(s). -@figure{/user_guides/boolean_operations/images/operations_image015.svg,"Common Blocks: Edge/Face interference",265} +@figure{/specification/boolean_operations/images/operations_image015.svg,"Common Blocks: Edge/Face interference",265} If the pave blocks *PBi* geometrically coincide with a face *Fj*, the pave blocks form common block *CB*. @@ -359,7 +365,7 @@ In general case a common block *CB* contains: * A set of faces *Fj (j=0,1... NbF), NbF* -- number of faces. -@subsection occt_algorithms_3_6 FaceInfo +@subsection specification__boolean_3_6 FaceInfo The structure *FaceInfo* contains the following information: * Pave blocks that have state **In** for the face; @@ -369,7 +375,7 @@ The structure *FaceInfo* contains the following information: * Pave blocks built up from intersection curves for the face; * Vertices built up from intersection points for the face. -@figure{/user_guides/boolean_operations/images/operations_image016.svg,"Face Info",420} +@figure{/specification/boolean_operations/images/operations_image016.svg,"Face Info",420} In the figure, for face *F1*: * Pave blocks that have state **In** for the face: *PBin1*. @@ -380,7 +386,7 @@ In the figure, for face *F1*: * Vertices built up from intersection points for the face: none -@section occt_algorithms_4 Data Structure +@section specification__boolean_4 Data Structure Data Structure (DS) is used to: * Store information about input data and intermediate results; @@ -396,7 +402,7 @@ This information includes: Data Structure is implemented in the class *BOPDS_DS*. -@subsection occt_algorithms_4_1 Arguments +@subsection specification__boolean_4_1 Arguments The arguments are shapes (in terms of *TopoDS_Shape*): * Number of arguments is unlimited. @@ -419,7 +425,7 @@ The arguments are shapes (in terms of *TopoDS_Shape*): * There are no restrictions on the type of underlying geometry of the shapes. The faces or edges of arguments *Si* can have underlying geometry of any type supported by Open CASCADE Technology modeling algorithms (in terms of *GeomAbs_CurveType* and *GeomAbs_SurfaceType*). * The faces or edges of the arguments should have underlying geometry with continuity that is not less than C1. -@subsection occt_algorithms_4_2 Shapes +@subsection specification__boolean_4_2 Shapes The information about Shapes is stored in structure *BOPDS_ShapeInfo*. The objects of type *BOPDS_ShapeInfo* are stored in the container of array type. The array allows getting the access to the information by an index (DS index). The structure *BOPDS_ShapeInfo* has the following contents: @@ -434,7 +440,7 @@ The structure *BOPDS_ShapeInfo* has the following contents: | *myReference* | Storage for some auxiliary information | | *myFlag* | Storage for some auxiliary information | -@subsection occt_algorithms_4_3 Interferences +@subsection specification__boolean_4_3 Interferences The information about interferences is stored in the instances of classes that are inherited from class BOPDS_Interf. @@ -467,10 +473,10 @@ The information about interferences is stored in the instances of classes that a The Figure shows inheritance diagram for *BOPDS_Interf* classes. -@figure{/user_guides/boolean_operations/images/operations_image017.svg,"BOPDS_Interf classes",420} +@figure{/specification/boolean_operations/images/operations_image017.svg,"BOPDS_Interf classes",420} -@subsection occt_algorithms_4_4 Pave, PaveBlock and CommonBlock +@subsection specification__boolean_4_4 Pave, PaveBlock and CommonBlock The information about the pave is stored in objects of type *BOPDS_Pave*. @@ -501,11 +507,11 @@ The information about common block is stored in objects of type *BOPDS_CommonBlo | Name | Contents | | :---- | :------ | | *BOPDS_CommonBlock* | | -| *myPaveBlocks* | The list of pave blocks that are common in terms of @ref occt_algorithms_3_5 "Common Blocks" | +| *myPaveBlocks* | The list of pave blocks that are common in terms of @ref specification__boolean_3_5 "Common Blocks" | | *myFaces* | The list of DS indices of the faces, on which the pave blocks lie. | -@subsection occt_algorithms_4_5 Points and Curves +@subsection specification__boolean_4_5 Points and Curves The information about intersection point is stored in objects of type *BOPDS_Point*. | Name | Contents | @@ -524,7 +530,7 @@ The information about intersection curve is stored in objects of type *BOPDS_Cur | *myPaveBlocks* | The list of pave blocks that belong to the curve | | *myBox* | The bounding box of the curve (in terms of *Bnd_Box* ) | -@subsection occt_algorithms_4_6 FaceInfo +@subsection specification__boolean_4_6 FaceInfo The information about *FaceInfo* is stored in a structure *BOPDS_FaceInfo*. The structure *BOPDS_FaceInfo* has the following contents. @@ -540,9 +546,9 @@ The structure *BOPDS_FaceInfo* has the following contents. The objects of type *BOPDS_FaceInfo* are stored in one container of array type. The array allows getting the access to the information by index. This index (if exists) is stored in the field *myReference*. -@section occt_algorithms_root_classes Root Classes +@section specification__boolean_root_classes Root Classes -@subsection occt_algorithms_root_classes_1 Class BOPAlgo_Options +@subsection specification__boolean_root_classes_1 Class BOPAlgo_Options The class *BOPAlgo_Options* provides the following options for the algorithms: * Set the appropriate memory allocator; * Check the presence of the Errors and Warnings; @@ -551,14 +557,14 @@ The class *BOPAlgo_Options* provides the following options for the algorithms: * Break the operations by user request; * Usage of Oriented Bounding boxes in the operation. -@subsection occt_algorithms_root_classes_2 Class BOPAlgo_Algo +@subsection specification__boolean_root_classes_2 Class BOPAlgo_Algo The class *BOPAlgo_Algo* provides the base interface for all algorithms: * Perform the operation; * Check the input data; * Check the result. -@section occt_algorithms_5 Intersection Part +@section specification__boolean_5 Intersection Part Intersection Part (IP) is used to * Initialize the Data Structure; @@ -571,24 +577,24 @@ Intersection Part (IP) is used to IP is implemented in the class *BOPAlgo_PaveFiller*. -@figure{/user_guides/boolean_operations/images/operations_image064.png,"Diagram for Class BOPAlgo_PaveFiller",230} +@figure{/specification/boolean_operations/images/operations_image064.png,"Diagram for Class BOPAlgo_PaveFiller",230} The description provided in the next paragraphs is coherent with the implementation of the method *BOPAlgo_PaveFiller::Perform()*. -@subsection occt_algorithms_5_1 Initialization +@subsection specification__boolean_5_1 Initialization The input data for the step is the Arguments. The description of initialization step is shown in the Table. | No | Contents | Implementation | | :--- | :----- | :----- | -| 1 | Initialization the array of shapes (in terms of @ref occt_algorithms_4_2 "Shapes"). Filling the array of shapes. | *BOPDS_DS::Init()* | -| 2 | Initialization the array pave blocks (in terms of @ref occt_algorithms_4_4 "Pave, PaveBlock, CommonBlock") | *BOPDS_DS::Init()* | -| 3 | Initialization of intersection Iterator. The intersection Iterator is the object that computes intersections between sub-shapes of the arguments in terms of bounding boxes. The intersection Iterator provides approximate number of the interferences for given type (in terms of @ref occt_algorithms_3_1 "Interferences") | *BOPDS_Iterator* | +| 1 | Initialization the array of shapes (in terms of @ref specification__boolean_4_2 "Shapes"). Filling the array of shapes. | *BOPDS_DS::Init()* | +| 2 | Initialization the array pave blocks (in terms of @ref specification__boolean_4_4 "Pave, PaveBlock, CommonBlock") | *BOPDS_DS::Init()* | +| 3 | Initialization of intersection Iterator. The intersection Iterator is the object that computes intersections between sub-shapes of the arguments in terms of bounding boxes. The intersection Iterator provides approximate number of the interferences for given type (in terms of @ref specification__boolean_3_1 "Interferences") | *BOPDS_Iterator* | | 4 | Initialization of intersection Context. The intersection Context is an object that contains geometrical and topological toolkit (classifiers, projectors, etc). The intersection Context is used to cache the tools to increase the algorithm performance. | *IntTools_Context* | -@subsection occt_algorithms_5_2 Compute Vertex/Vertex Interferences +@subsection specification__boolean_5_2 Compute Vertex/Vertex Interferences -The input data for this step is the DS after the @ref occt_algorithms_5_1 "Initialization". The description of this step is shown in the table : +The input data for this step is the DS after the @ref specification__boolean_5_1 "Initialization". The description of this step is shown in the table : | No | Contents | Implementation | @@ -607,10 +613,10 @@ The input data for this step is the DS after the @ref occt_algorithms_5_1 "Initi The example of connexity chains of interfered vertices is given in the image: -@figure{/user_guides/boolean_operations/images/operations_image018.svg,"Connexity chains of interfered vertices",394} +@figure{/specification/boolean_operations/images/operations_image018.svg,"Connexity chains of interfered vertices",394} -@subsection occt_algorithms_5_3 Compute Vertex/Edge Interferences +@subsection specification__boolean_5_3 Compute Vertex/Edge Interferences The input data for this step is the DS after computing Vertex/Vertex interferences. @@ -618,19 +624,19 @@ The input data for this step is the DS after computing Vertex/Vertex interferenc | :--- | :--- | :--- | | 1 | Initialize array of Vertex/Edge interferences | *BOPAlgo_PaveFiller::PerformVE()* | | 2 | Access to the pairs of interfered shapes (nVi, nEj)k k=0, 1…nk, where *nVi* is DS index of vertex *Vi*, *nEj* is DS index of edge *Ej* and *nk* is the number of pairs. | *BOPDS_Iterator* | -| 3 | Compute paves. See @ref occt_algorithms_3_1_2 "Vertex/Edge Interference" | *BOPInt_Context::ComputeVE()* | +| 3 | Compute paves. See @ref specification__boolean_3_1_2 "Vertex/Edge Interference" | *BOPInt_Context::ComputeVE()* | | 4 | Initialize pave blocks for the edges *Ej* involved in the interference | *BOPDS_DS:: ChangePaveBlocks()* | -| 5 | Append the paves into the pave blocks in terms of @ref occt_algorithms_4_4 "Pave, PaveBlock and CommonBlock" | *BOPDS_PaveBlock:: AppendExtPave()* | +| 5 | Append the paves into the pave blocks in terms of @ref specification__boolean_4_4 "Pave, PaveBlock and CommonBlock" | *BOPDS_PaveBlock:: AppendExtPave()* | | 6 | Append Vertex/Edge interferences in DS | *BOPDS_DS::AddInterf()* | -@subsection occt_algorithms_5_4 Update Pave Blocks +@subsection specification__boolean_5_4 Update Pave Blocks The input data for this step is the DS after computing Vertex/Edge Interferences. | No | Contents | Implementation | | :--- | :---- | :--- | | 1 | Each pave block PB containing internal paves is split by internal paves into new pave blocks *PBN1, PBN2… PBNn*. PB is replaced by new pave blocks *PBN1, PBN2… PBNn* in the DS. | *BOPDS_DS:: UpdatePaveBlocks()* | -@subsection occt_algorithms_5_5 Compute Edge/Edge Interferences +@subsection specification__boolean_5_5 Compute Edge/Edge Interferences The input data for this step is the DS after updating Pave Blocks. @@ -640,22 +646,22 @@ The input data for this step is the DS after updating Pave Blocks. | 2 | Access to the pairs of interfered shapes (nEi, nEj)k, k=0, 1…nk, where *nEi* is DS index of the edge *Ei*, *nEj* is DS index of the edge *Ej* and *nk* is the number of pairs. | *BOPDS_Iterator* | | 3 | Initialize pave blocks for the edges involved in the interference, if it is necessary. | *BOPDS_DS:: ChangePaveBlocks()* | | 4 | Access to the pave blocks of interfered shapes: (PBi1, PBi2…PBiNi) for edge *Ei* and (PBj1, PBj2…PBjNj) for edge *Ej* | *BOPAlgo_PaveFiller::PerformEE()* | -| 5 | Compute shrunk data for pave blocks in terms of @ref occt_algorithms_4_4 "Pave, PaveBlock and CommonBlock", if it is necessary. | *BOPAlgo_PaveFiller::FillShrunkData()* | +| 5 | Compute shrunk data for pave blocks in terms of @ref specification__boolean_4_4 "Pave, PaveBlock and CommonBlock", if it is necessary. | *BOPAlgo_PaveFiller::FillShrunkData()* | | 6 | Compute Edge/Edge interference for pave blocks *PBix* and *PBiy*. The result of the computation is a set of objects of type *IntTools_CommonPart* | *IntTools_EdgeEdge* | | 7.1 | For each *CommonPart* of type *VERTEX:* Create new vertices *VNi (i =1, 2…,NbVN),* where *NbVN* is the number of new vertices. Intersect the vertices *VNi* using the steps Initialization and compute Vertex/Vertex interferences as follows: a) create a new object *PFn* of type *BOPAlgo_PaveFiller* with its own DS; b) use new vertices *VNi (i=1, 2…,NbVN), NbVN* as arguments (in terms of *TopoDs_Shape*) of *PFn*; c) invoke method *Perform()* for *PFn*. The resulting vertices *VNXi (i=1, 2…,NbVNX)*, where *NbVNX* is the number of vertices, are obtained via mapping between *VNi* and the results of *PVn*. | *BOPTools_Tools::MakeNewVertex()* | | 7.2 | For each *CommonPart* of type *EDGE:* Compute the coinciding connexity chains of pave blocks (PB1C, PB2C… PNnC)k, C=0, 1…nCs, where *nCs* is the number of the connexity chains. Create common blocks (CBc. C=0, 1…nCs) from the chains. Attach the common blocks to the pave blocks. | *BOPAlgo_Tools::PerformCommonBlocks()* | -| 8 | Post-processing. Append the paves of *VNXi* into the corresponding pave blocks in terms of @ref occt_algorithms_4_4 "Pave, PaveBlock and CommonBlock" | *BOPDS_PaveBlock:: AppendExtPave()* | +| 8 | Post-processing. Append the paves of *VNXi* into the corresponding pave blocks in terms of @ref specification__boolean_4_4 "Pave, PaveBlock and CommonBlock" | *BOPDS_PaveBlock:: AppendExtPave()* | | 9 | Split common blocks CBc by the paves. | *BOPDS_DS:: UpdateCommonBlock()* | | 10 | Append Edge/Edge interferences in the DS. | *BOPDS_DS::AddInterf()* | The example of coinciding chains of pave blocks is given in the image: -@figure{/user_guides/boolean_operations/images/operations_image019.png,"Coinciding chains of pave blocks",420} +@figure{/specification/boolean_operations/images/operations_image019.png,"Coinciding chains of pave blocks",420} * The pairs of coincided pave blocks are: (PB11, PB12), (PB11, PB13), (PB12, PB13), (PB21, PB22), (PB21, PB23), (PB22, PB23). * The pairs produce two chains: (PB11, PB12, PB13) and (PB21, PB22, PB23). -@subsection occt_algorithms_5_6 Compute Vertex/Face Interferences +@subsection specification__boolean_5_6 Compute Vertex/Face Interferences The input data for this step is the DS after computing Edge/Edge interferences. @@ -663,11 +669,11 @@ The input data for this step is the DS after computing Edge/Edge interferences. | :---- | :--- | :---- | | 1 | Initialize array of Vertex/Face interferences | *BOPAlgo_PaveFiller::PerformVF()* | | 2 | Access to the pairs of interfered shapes (nVi, nFj)k, k=0, 1…nk, where *nVi* is DS index of the vertex *Vi*, *nFj* is DS index of the edge *Fj* and *nk* is the number of pairs. | *BOPDS_Iterator* | -| 3 | Compute interference See @ref occt_algorithms_3_1_3 "Vertex/Face Interference" | *BOPInt_Context::ComputeVF()* | +| 3 | Compute interference See @ref specification__boolean_3_1_3 "Vertex/Face Interference" | *BOPInt_Context::ComputeVF()* | | 4 | Append Vertex/Face interferences in the DS | *BOPDS_DS::AddInterf()* | | 5 | Repeat steps 2-4 for each new vertex *VNXi (i=1, 2…,NbVNX),* where *NbVNX* is the number of vertices. | *BOPAlgo_PaveFiller::TreatVerticesEE()* | -@subsection occt_algorithms_5_7 Compute Edge/Face Interferences +@subsection specification__boolean_5_7 Compute Edge/Face Interferences The input data for this step is the DS after computing Vertex/Face Interferences. | No | Contents | Implementation | @@ -676,17 +682,17 @@ The input data for this step is the DS after computing Vertex/Face Interferences | 2 | Access to the pairs of interfered shapes (nEi, nFj)k, k=0, 1…nk, where *nEi* is DS index of edge *Ei*, *nFj* is DS index of face *Fj* and *nk* is the number of pairs. | *BOPDS_Iterator* | | 3 | Initialize pave blocks for the edges involved in the interference, if it is necessary. | *BOPDS_DS::ChangePaveBlocks()* | | 4 | Access to the pave blocks of interfered edge (PBi1, PBi2…PBiNi) for edge *Ei* | *BOPAlgo_PaveFiller::PerformEF()* | -| 5 | Compute shrunk data for pave blocks (in terms of @ref occt_algorithms_4_4 "Pave, PaveBlock and CommonBlock") if it is necessary. | *BOPAlgo_PaveFiller::FillShrunkData()* | +| 5 | Compute shrunk data for pave blocks (in terms of @ref specification__boolean_4_4 "Pave, PaveBlock and CommonBlock") if it is necessary. | *BOPAlgo_PaveFiller::FillShrunkData()* | | 6 | Compute Edge/Face interference for pave block *PBix*, and face *nFj*. The result of the computation is a set of objects of type *IntTools_CommonPart* | *IntTools_EdgeFace* | | 7.1 | For each *CommonPart* of type *VERTEX:* Create new vertices *VNi (i=1, 2…,NbVN),* where *NbVN* is the number of new vertices. Merge vertices *VNi* as follows: a) create new object *PFn* of type *BOPAlgo_PaveFiller* with its own DS; b) use new vertices *VNi (i=1, 2…,NbVN), NbVN* as arguments (in terms of *TopoDs_Shape*) of *PFn*; c) invoke method *Perform()* for *PFn*. The resulting vertices *VNXi (i=1, 2…,NbVNX)*, where *NbVNX* is the number of vertices, are obtained via mapping between *VNi* and the results of *PVn*. | *BOPTools_Tools::MakeNewVertex()* and *BOPAlgo_PaveFiller::PerformVertices1()* | | 7.2 | For each *CommonPart* of type *EDGE:* Create common blocks (CBc. C=0, 1…nCs) from pave blocks that lie on the faces. Attach the common blocks to the pave blocks. | *BOPAlgo_Tools::PerformCommonBlocks()* | -| 8 | Post-processing. Append the paves of *VNXi* into the corresponding pave blocks in terms of @ref occt_algorithms_4_4 "Pave, PaveBlock and CommonBlock". | *BOPDS_PaveBlock:: AppendExtPave()* | +| 8 | Post-processing. Append the paves of *VNXi* into the corresponding pave blocks in terms of @ref specification__boolean_4_4 "Pave, PaveBlock and CommonBlock". | *BOPDS_PaveBlock:: AppendExtPave()* | | 9 | Split pave blocks and common blocks *CBc* by the paves. | *BOPAlgo_PaveFiller::PerformVertices1()*, *BOPDS_DS:: UpdatePaveBlock()* and *BOPDS_DS:: UpdateCommonBlock()* | | 10 | Append Edge/Face interferences in the DS | *BOPDS_DS::AddInterf()* | | 11 | Update *FaceInfo* for all faces having EF common parts. | *BOPDS_DS:: UpdateFaceInfoIn()* | -@subsection occt_algorithms_5_8 Build Split Edges +@subsection specification__boolean_5_8 Build Split Edges The input data for this step is the DS after computing Edge/Face Interferences. @@ -694,12 +700,12 @@ For each pave block *PB* take the following steps: | No | Contents | Implementation | | :--- | :--- | :--- | -| 1 | Get the real pave block *PBR*, which is equal to *PB* if *PB* is not a common block and to *PB1* if *PB* is a common block. *PB1* is the first pave block in the pave blocks list of the common block. See @ref occt_algorithms_4_4 "Pave, PaveBlock and CommonBlock". | *BOPAlgo_PaveFiller::MakeSplitEdges()* | +| 1 | Get the real pave block *PBR*, which is equal to *PB* if *PB* is not a common block and to *PB1* if *PB* is a common block. *PB1* is the first pave block in the pave blocks list of the common block. See @ref specification__boolean_4_4 "Pave, PaveBlock and CommonBlock". | *BOPAlgo_PaveFiller::MakeSplitEdges()* | | 2 | Build the split edge *Esp* using the information from *DS* and *PBR*. | *BOPTools_Tools::MakeSplitEdge()* | | 3 | Compute *BOPDS_ShapeInfo* contents for Esp | *BOPAlgo_PaveFiller::MakeSplitEdges()* | | 4 | Append *BOPDS_ShapeInfo* contents to the DS | *BOPDS_DS::Append()* | -@subsection occt_algorithms_5_9 Compute Face/Face Interferences +@subsection specification__boolean_5_9 Compute Face/Face Interferences The input data for this step is DS after building Split Edges. @@ -710,22 +716,22 @@ The input data for this step is DS after building Split Edges. | 3 | Compute Face/Face interference | *IntTools_FaceFace* | | 4 | Append Face/Face interferences in the DS. | *BOPDS_DS::AddInterf()* | -@subsection occt_algorithms_5_10 Build Section Edges +@subsection specification__boolean_5_10 Build Section Edges The input data for this step is the DS after computing Face/Face interferences. | No | Contents | Implementation | | :---- | :---- | :---- | -| 1 | For each Face/Face interference *nFi, nFj*, retrieve @ref occt_algorithms_4_6 "FaceInfo". Create draft vertices from intersection points *VPk (k=1, 2…, NbVP)*, where *NbVP* is the number of new vertices, and the draft vertex *VPk* is created from an intersection point if *VPk ≠ Vm (m = 0, 1, 2… NbVm)*, where *Vm* is an existing vertex for the faces *nFi* and *nF,j* (*On* or *In* in terms of *TopoDs_Shape*), *NbVm* is the number of vertices existing on faces *nFi* and *nF,j* and ≠ -- means non-coincidence in terms of @ref occt_algorithms_3_1_1 "Vertex/Vertex interference". | *BOPAlgo_PaveFiller::MakeBlocks()* | +| 1 | For each Face/Face interference *nFi, nFj*, retrieve @ref specification__boolean_4_6 "FaceInfo". Create draft vertices from intersection points *VPk (k=1, 2…, NbVP)*, where *NbVP* is the number of new vertices, and the draft vertex *VPk* is created from an intersection point if *VPk ≠ Vm (m = 0, 1, 2… NbVm)*, where *Vm* is an existing vertex for the faces *nFi* and *nF,j* (*On* or *In* in terms of *TopoDs_Shape*), *NbVm* is the number of vertices existing on faces *nFi* and *nF,j* and ≠ -- means non-coincidence in terms of @ref specification__boolean_3_1_1 "Vertex/Vertex interference". | *BOPAlgo_PaveFiller::MakeBlocks()* | | 2 | For each intersection curve *Cijk* | | | 2.1 | Create paves PVc for the curve using existing vertices, i.e. vertices On or In (in terms of *FaceInfo*) for faces *nFi* and *nFj*. Append the paves *PVc* | *BOPAlgo_PaveFiller::PutPaveOnCurve()* and *BOPDS_PaveBlock::AppendExtPave()* | | 2.2 | Create technological vertices *Vt*, which are the bounding points of an intersection curve (with the value of tolerance *Tol(Cijk)*). Each vertex *Vt* with parameter *Tt* on curve *Cijk* forms pave *PVt* on curve *Cijk*. Append technological paves. | *BOPAlgo_PaveFiller::PutBoundPaveOnCurve()* | | 2.3 | Create pave blocks *PBk* for the curve using paves (k=1, 2…, NbPB), where *NbPB* is the number of pave blocks | *BOPAlgo_PaveFiller::MakeBlocks()* | -| 2.4 | Build draft section edges *ESk* using the pave blocks (k=1, 2…, NbES), where *NbES* is the number of draft section edges The draft section edge is created from a pave block *PBk* if *PBk* has state *In* or *On* for both faces *nFi* and *nF,j* and *PBk ≠ PBm (m=0, 1, 2… NbPBm)*, where *PBm* is an existing pave block for faces *nFi* and *nF,j* (*On* or *In* in terms of *FaceInfo*), *NbVm* is the number of existing pave blocks for faces *nFi* and *nF,j* and ≠ -- means non-coincidence (in terms of @ref occt_algorithms_3_1_3 "Vertex/Face interference"). | *BOPTools_Tools::MakeEdge()* | -| 3 | Intersect the draft vertices *VPk (k=1, 2…, NbVP)* and the draft section edges *ESk (k=1, 2…, NbES)*. For this: a) create new object *PFn* of type *BOPAlgo_PaveFiller* with its own DS; b) use vertices *VPk* and edges *ESk* as arguments (in terms of @ref occt_algorithms_4_1 "Arguments") of *PFn*; c) invoke method *Perform()* for *PFn*. Resulting vertices *VPXk (k=1, 2… NbVPX)* and edges *ESXk (k=1, 2… NbESX)* are obtained via mapping between *VPk, ESk* and the results of *PVn*. | *BOPAlgo_PaveFiller::PostTreatFF()* | +| 2.4 | Build draft section edges *ESk* using the pave blocks (k=1, 2…, NbES), where *NbES* is the number of draft section edges The draft section edge is created from a pave block *PBk* if *PBk* has state *In* or *On* for both faces *nFi* and *nF,j* and *PBk ≠ PBm (m=0, 1, 2… NbPBm)*, where *PBm* is an existing pave block for faces *nFi* and *nF,j* (*On* or *In* in terms of *FaceInfo*), *NbVm* is the number of existing pave blocks for faces *nFi* and *nF,j* and ≠ -- means non-coincidence (in terms of @ref specification__boolean_3_1_3 "Vertex/Face interference"). | *BOPTools_Tools::MakeEdge()* | +| 3 | Intersect the draft vertices *VPk (k=1, 2…, NbVP)* and the draft section edges *ESk (k=1, 2…, NbES)*. For this: a) create new object *PFn* of type *BOPAlgo_PaveFiller* with its own DS; b) use vertices *VPk* and edges *ESk* as arguments (in terms of @ref specification__boolean_4_1 "Arguments") of *PFn*; c) invoke method *Perform()* for *PFn*. Resulting vertices *VPXk (k=1, 2… NbVPX)* and edges *ESXk (k=1, 2… NbESX)* are obtained via mapping between *VPk, ESk* and the results of *PVn*. | *BOPAlgo_PaveFiller::PostTreatFF()* | | 4 | Update face info (sections about pave blocks and vertices) | *BOPAlgo_PaveFiller::PerformFF()* | -@subsection occt_algorithms_5_11 Build P-Curves +@subsection specification__boolean_5_11 Build P-Curves The input data for this step is the DS after building section edges. | No | Contents | Implementation | @@ -733,7 +739,7 @@ The input data for this step is the DS after building section edges. | 1 | For each Face/Face interference *nFi* and *nFj* build p-Curves on *nFi* and *nFj* for each section edge *ESXk*. | *BOPAlgo_PaveFiller::MakePCurves()* | | 2 | For each pave block that is common for faces *nFi* and *nFj* build p-Curves on *nFi* and *nFj*. | *BOPAlgo_PaveFiller::MakePCurves()* | -@subsection occt_algorithms_5_12 Process Degenerated Edges +@subsection specification__boolean_5_12 Process Degenerated Edges The input data for this step is the DS after building P-curves. | No | Contents | Implementation | @@ -743,7 +749,7 @@ The input data for this step is the DS after building P-curves. | 2 | Compute paves for the degenerated edge *ED* using a 2D curve of *ED* and a 2D curve of *PBi*. Form pave blocks *PBDi (i=1,2… NbPBD)*, where *NbPBD* is the number of the pave blocks for the degenerated edge *ED* | *BOPAlgo_PaveFiller::FillPaves()* | | 3 | Build split edges *ESDi (i=1,2…NbESD)*, where *ESD* is the number of split edges, using the pave blocks *PBDi* | *BOPAlgo_PaveFiller:: MakeSplitEdge()* | -@section occt_algorithms_6 General description of the Building Part +@section specification__boolean_6 General description of the Building Part Building Part (BP) is used to * Build the result of the operation @@ -757,17 +763,17 @@ BP is implemented in the following classes: * *BOPAlgo_Splitter* -- for the Splitter operator. * *BOPAlgo_CellsBuilder* -- for the Cells Builder operator. -@figure{/user_guides/boolean_operations/images/operations_image020.png,"Diagram for BP classes",300} +@figure{/specification/boolean_operations/images/operations_image020.png,"Diagram for BP classes",300} The class *BOPAlgo_BuilderShape* provides the interface for algorithms that have: * A Shape as the result; * History information (in terms of \::Generated(), \::Modified() and \::IsDeleted()). -@section occt_algorithms_7 General Fuse Algorithm -@subsection occt_algorithms_7_1 Arguments -The arguments of the algorithm are shapes (in terms of *TopoDS_Shape*). The main requirements for the arguments are described in @ref occt_algorithms_4 "Data Structure" chapter. +@section specification__boolean_7 General Fuse Algorithm +@subsection specification__boolean_7_1 Arguments +The arguments of the algorithm are shapes (in terms of *TopoDS_Shape*). The main requirements for the arguments are described in @ref specification__boolean_4 "Data Structure" chapter. -@subsection occt_algorithms_7_2 Results +@subsection specification__boolean_7_2 Results During the operation argument *Si* can be split into several parts *Si1, Si2… Si1NbSp*, where *NbSp* is the number of parts. The set (Si1, Si2… Si1NbSp) is an image of argument *Si*. * The result of the General Fuse operation is a compound. Each sub-shape of the compound corresponds to the certain argument shape S1, S2…Sn and has shared sub-shapes in accordance with interferences between the arguments. @@ -786,7 +792,7 @@ The types of resulting shapes depend on the type of the corresponding argument p | 7 | EDGE | Set of split EDGEs | | | 8 | VERTEX | VERTEX | | -@subsection occt_algorithms_7_3a Options +@subsection specification__boolean_7_3a Options The General Fuse algorithm has a set of options, which allow speeding-up the operation and improving the quality of the result: * Parallel processing option allows running the algorithm in parallel mode; @@ -797,9 +803,9 @@ The General Fuse algorithm has a set of options, which allow speeding-up the ope * Usage of Oriented Bounding Boxes in the operation; * History support. -For more detailed information on these options, see the @ref occt_algorithms_11a "Advanced options" section. +For more detailed information on these options, see the @ref specification__boolean_11a "Advanced options" section. -@subsection occt_algorithms_7_3b Usage +@subsection specification__boolean_7_3b Usage The following example illustrates how to use the GF algorithm: @@ -898,15 +904,15 @@ bfillds bbuild result ~~~~ -@subsection occt_algorithms_7_3 Examples +@subsection specification__boolean_7_3 Examples Have a look at the examples to better understand the definitions. -@subsubsection occt_algorithms_7_3_1 Case 1: Three edges intersecting at a point +@subsubsection specification__boolean_7_3_1 Case 1: Three edges intersecting at a point Let us consider three edges: *E1, E2* and *E3* that intersect in one 3D point. -@figure{/user_guides/boolean_operations/images/operations_image021.svg,"Three Intersecting Edges",420} +@figure{/specification/boolean_operations/images/operations_image021.svg,"Three Intersecting Edges",420} The result of the GFA operation is a compound containing 6 new edges: *E11, E12, E21, E22, E31*, and *E32*. These edges have one shared vertex *Vn1*. @@ -915,11 +921,11 @@ In this case: * The argument edge *E2* has resulting split edges *E21* and *E22* (image of *E2*). * The argument edge *E3* has resulting split edges *E31* and *E32* (image of *E3*). -@subsubsection occt_algorithms_7_3_2 Case 2: Two wires and an edge +@subsubsection specification__boolean_7_3_2 Case 2: Two wires and an edge Let us consider two wires *W1 (Ew11, Ew12, Ew13)* and *W2 (Ew21, Ew22, Ew23)* and edge *E1*. -@figure{/user_guides/boolean_operations/images/operations_image022.svg,"Two wires and an edge",420} +@figure{/specification/boolean_operations/images/operations_image022.svg,"Two wires and an edge",420} The result of the GF operation is a compound consisting of 2 wires: *Wn1 (Ew11, En1, En2, En3, Ew13)* and *Wn2 (Ew21, En2, En3, En4, Ew23)* and two edges: *E11* and *E12*. @@ -929,88 +935,88 @@ In this case : * The argument edge *E1* has split edges *E11* and *E12*. (image of *E1*). The edges *En1, En2, En3, En4* and vertex *Vn1* are new shapes created during the operation. Edge *Ew12* has split edges *En1, En2* and *En3* and edge *Ew22* has split edges *En2, En3* and *En4*. -@subsubsection occt_algorithms_7_3_3 Case 3: An edge intersecting with a face +@subsubsection specification__boolean_7_3_3 Case 3: An edge intersecting with a face Let us consider edge *E1* and face *F2*: -@figure{/user_guides/boolean_operations/images/operations_image023.svg,"An edge intersecting with a face",420} +@figure{/specification/boolean_operations/images/operations_image023.svg,"An edge intersecting with a face",420} The result of the GF operation is a compound consisting of 3 shapes: * Split edge parts *E11* and *E12* (image of *E1*). * New face *F21* with internal edge *E12* (image of *F2*). -@subsubsection occt_algorithms_7_3_4 Case 4: An edge lying on a face +@subsubsection specification__boolean_7_3_4 Case 4: An edge lying on a face Let us consider edge *E1* and face *F2*: -@figure{/user_guides/boolean_operations/images/operations_image024.svg,"An edge lying on a face",420} +@figure{/specification/boolean_operations/images/operations_image024.svg,"An edge lying on a face",420} The result of the GF operation is a compound consisting of 5 shapes: * Split edge parts *E11, E12* and *E13* (image of *E1*). * Split face parts *F21* and *F22* (image of *F2*). -@subsubsection occt_algorithms_7_3_5 Case 5: An edge and a shell +@subsubsection specification__boolean_7_3_5 Case 5: An edge and a shell Let us consider edge *E1* and shell *Sh2* that consists of 2 faces: *F21* and *F22* -@figure{/user_guides/boolean_operations/images/operations_image025.svg,"An edge and a shell",488} +@figure{/specification/boolean_operations/images/operations_image025.svg,"An edge and a shell",488} The result of the GF operation is a compound consisting of 5 shapes: * Split edge parts *E11, E12 , E13* and *E14* (image of *E1*). * Image shell *Sh21* (that contains split face parts *F211, F212, F221* and *F222*). -@subsubsection occt_algorithms_7_3_6 Case 6: A wire and a shell +@subsubsection specification__boolean_7_3_6 Case 6: A wire and a shell Let us consider wire *W1 (E1, E2, E3, E4)* and shell *Sh2 (F21, F22)*. -@figure{/user_guides/boolean_operations/images/operations_image026.svg,"A wire and a shell",427} +@figure{/specification/boolean_operations/images/operations_image026.svg,"A wire and a shell",427} The result of the GF operation is a compound consisting of 2 shapes: * Image wire *W11* that consists of split edge parts from wire *W1: E11, E12, E13* and *E14*. * Image shell *Sh21* that contains split face parts: *F211, F212, F213, F221, F222* and *F223*. -@subsubsection occt_algorithms_7_3_7 Case 7: Three faces +@subsubsection specification__boolean_7_3_7 Case 7: Three faces -Let us consider 3 faces: *F1, F2* and *F3*. @figure{/user_guides/boolean_operations/images/operations_image027.png,"Three faces",420} +Let us consider 3 faces: *F1, F2* and *F3*. @figure{/specification/boolean_operations/images/operations_image027.png,"Three faces",420} The result of the GF operation is a compound consisting of 7 shapes: * Split face parts: *Fn1, Fn2, Fn3, Fn4, Fn5, Fn6* and *Fn7*. -@subsubsection occt_algorithms_7_3_8 Case 8: A face and a shell +@subsubsection specification__boolean_7_3_8 Case 8: A face and a shell Let us consider shell *Sh1 (F11, F12, F13)* and face *F2*. -@figure{/user_guides/boolean_operations/images/operations_image028.png,"A face and a shell",420} +@figure{/specification/boolean_operations/images/operations_image028.png,"A face and a shell",420} The result of the GF operation is a compound consisting of 4 shapes: * Image shell *Sh11* that consists of split face parts from shell *Sh1: Fn1, Fn2, Fn3, Fn4, Fn5* and *Fn6*. * Split parts of face *F2: Fn3, Fn6* and *Fn7*. -@subsubsection occt_algorithms_7_3_9 Case 9: A shell and a solid +@subsubsection specification__boolean_7_3_9 Case 9: A shell and a solid -Let us consider shell *Sh1 (F11, F12…F16)* and solid *So2*. @figure{/user_guides/boolean_operations/images/operations_image029.png,"A shell and a solid: arguments",220} +Let us consider shell *Sh1 (F11, F12…F16)* and solid *So2*. @figure{/specification/boolean_operations/images/operations_image029.png,"A shell and a solid: arguments",220} The result of the GF operation is a compound consisting of 2 shapes: * Image shell *Sh11* consisting of split face parts of *Sh1: Fn1, Fn2 ... Fn8.* * Solid *So21* with internal shell. (image of *So2*). -@figure{/user_guides/boolean_operations/images/operations_image030.png,"A shell and a solid: results",420} +@figure{/specification/boolean_operations/images/operations_image030.png,"A shell and a solid: results",420} -@subsubsection occt_algorithms_7_3_10 Case 10: A compound and a solid +@subsubsection specification__boolean_7_3_10 Case 10: A compound and a solid Let us consider compound *Cm1* consisting of 2 solids *So11* and *So12*) and solid *So2*. -@figure{/user_guides/boolean_operations/images/operations_image031.png,"A compound and a solid: arguments",220} +@figure{/specification/boolean_operations/images/operations_image031.png,"A compound and a solid: arguments",220} The result of the GF operation is a compound consisting of 4 shapes: * Image compound *Cm11* consisting of split solid parts from *So11* and *So12 (Sn1, Sn2, Sn3, Sn4)*. * Split parts of solid *So2 (Sn2, Sn3, Sn5)*. -@figure{/user_guides/boolean_operations/images/operations_image032.png,"A compound and a solid: results",420} +@figure{/specification/boolean_operations/images/operations_image032.png,"A compound and a solid: results",420} -@subsection occt_algorithms_7_4 Class BOPAlgo_Builder +@subsection specification__boolean_7_4 Class BOPAlgo_Builder GFA is implemented in the class *BOPAlgo_Builder*. -@subsubsection occt_algorithms_7_4_1 Fields +@subsubsection specification__boolean_7_4_1 Fields The main fields of the class are described in the Table: @@ -1022,16 +1028,16 @@ The main fields of the class are described in the Table: | *myImages* | The Map between the source shape and its images | | *myShapesSD* | The Map between the source shape (or split part of source shape) and the shape (or part of shape) that will be used in result due to same domain property. | -@subsubsection occt_algorithms_7_4_2 Initialization +@subsubsection specification__boolean_7_4_2 Initialization -The input data for this step is a *BOPAlgo_PaveFiller* object (in terms of @ref occt_algorithms_5 "Intersection") at the state after @ref occt_algorithms_5_12 "Processing of degenerated edges" with the corresponding DS. +The input data for this step is a *BOPAlgo_PaveFiller* object (in terms of @ref specification__boolean_5 "Intersection") at the state after @ref specification__boolean_5_12 "Processing of degenerated edges" with the corresponding DS. | No | Contents | Implementation | | :---- | :---- | :---- | | 1 | Check the readiness of the DS and *BOPAlgo_PaveFiller*. | *BOPAlgo_Builder::CheckData()* | | 2 | Build an empty result of type Compound. | *BOPAlgo_Builder::Prepare()* | -@subsubsection occt_algorithms_7_4_3 Build Images for Vertices +@subsubsection specification__boolean_7_4_3 Build Images for Vertices The input data for this step is *BOPAlgo_Builder* object after Initialization. @@ -1039,7 +1045,7 @@ The input data for this step is *BOPAlgo_Builder* object after Initialization. | :--- | :--- | :--- | | 1 | Fill *myShapesSD* by SD vertices using the information from the DS. | *BOPAlgo_Builder::FillImagesVertices()* | -@subsubsection occt_algorithms_7_4_4 Build Result of Type Vertex +@subsubsection specification__boolean_7_4_4 Build Result of Type Vertex The input data for this step is *BOPAlgo_Builder* object after building images for vertices and *Type*, which is the shape type (*TopAbs_VERTEX*). @@ -1047,7 +1053,7 @@ The input data for this step is *BOPAlgo_Builder* object after building images | :--- | :--- | :----- | | 1 | For the arguments of type *Type*. If there is an image for the argument: add the image to the result. If there is no image for the argument: add the argument to the result. | *BOPAlgo_Builder::BuildResult()* | -@subsubsection occt_algorithms_7_4_5 Build Images for Edges +@subsubsection specification__boolean_7_4_5 Build Images for Edges The input data for this step is *BOPAlgo_Builder object* after building result of type vertex. @@ -1055,11 +1061,11 @@ The input data for this step is *BOPAlgo_Builder object* after building result o | :---- | :---- | :----- | | 1 | For all pave blocks in the DS. Fill *myImages* for the original edge *E* by split edges *ESPi* from pave blocks. In case of common blocks on edges, use edge *ESPSDj* that corresponds to the leading pave block and fill *myShapesSD* by the pairs *ESPi/ESPSDj*. | *BOPAlgo_Builder::FillImagesEdges()* | -@subsubsection occt_algorithms_7_4_6 Build Result of Type Edge +@subsubsection specification__boolean_7_4_6 Build Result of Type Edge -This step is the same as @ref occt_algorithms_7_4_4 "Building Result of Type Vertex", but for the type *Edge*. +This step is the same as @ref specification__boolean_7_4_4 "Building Result of Type Vertex", but for the type *Edge*. -@subsubsection occt_algorithms_7_4_7 Build Images for Wires +@subsubsection specification__boolean_7_4_7 Build Images for Wires The input data for this step is: * *BOPAlgo_Builder* object after building result of type *Edge*; @@ -1072,11 +1078,11 @@ The input data for this step is: | 2 | Add to C the images or non-split parts of the *Original Shape*, taking into account its orientation. | *BOPAlgo_Builder::FillImagesContainers()* *BOPTools_Tools::IsSplitToReverse()* | | 3 | Fill *myImages* for the *Original Shape* by the information above. | *BOPAlgo_Builder::FillImagesContainers()* | -@subsubsection occt_algorithms_7_4_8 Build Result of Type Wire +@subsubsection specification__boolean_7_4_8 Build Result of Type Wire -This step is the same as @ref occt_algorithms_7_4_4 "Building Result of Type Vertex" but for the type *Wire*. +This step is the same as @ref specification__boolean_7_4_4 "Building Result of Type Vertex" but for the type *Wire*. -@subsubsection occt_algorithms_7_4_9 Build Images for Faces +@subsubsection specification__boolean_7_4_9 Build Images for Faces The input data for this step is *BOPAlgo_Builder* object after building result of type *Wire*. @@ -1086,7 +1092,7 @@ The input data for this step is *BOPAlgo_Builder* object after building result o | 1.1 | Collect all edges or their images of *Fi(ESPij)*. | *BOPAlgo_Builder::BuildSplitFaces()* | | 1.2 | Impart to ESPij the orientation to be coherent with the original one. | *BOPAlgo_Builder::BuildSplitFaces()* | | 1.3 | Collect all section edges *SEk* for *Fi*. | *BOPAlgo_Builder::BuildSplitFaces()* | -| 1.4 | Build split faces for *Fi (Fi1, Fi2…FiNbSp)*, where *NbSp* is the number of split parts (see @ref occt_algorithms_7_2 "Building faces from a set of edges" for more details). | *BOPAlgo_BuilderFace* | +| 1.4 | Build split faces for *Fi (Fi1, Fi2…FiNbSp)*, where *NbSp* is the number of split parts (see @ref specification__boolean_7_2 "Building faces from a set of edges" for more details). | *BOPAlgo_BuilderFace* | | 1.5 | Impart to (Fi1, Fi2…FiNbSp) the orientation coherent with the original face *Fi*. | *BOPAlgo_Builder::BuildSplitFaces()* | | 1.6 | Fill the map mySplits with *Fi/(Fi1, Fi2…FiNbSp)* | *BOPAlgo_Builder::BuildSplitFaces()* | | 2 | Fill Same Domain faces | *BOPAlgo_Builder::FillSameDomainFaces* | @@ -1099,15 +1105,15 @@ The input data for this step is *BOPAlgo_Builder* object after building result o The example of chains of same domain faces is given in the image: -@figure{/user_guides/boolean_operations/images/operations_image033.svg,"Chains of same domain faces",420} +@figure{/specification/boolean_operations/images/operations_image033.svg,"Chains of same domain faces",420} * The pairs of same domain faces are: (F11, F21), (F22, F31), (F41, F51) , (F41, F6) and (F51, F6). * The pairs produce the three chains: (F11, F21), (F22, F31) and (F41, F51, F6). -@subsubsection occt_algorithms_7_4_10 Build Result of Type Face -This step is the same as @ref occt_algorithms_7_4_4 "Building Result of Type Vertex" but for the type *Face*. +@subsubsection specification__boolean_7_4_10 Build Result of Type Face +This step is the same as @ref specification__boolean_7_4_4 "Building Result of Type Vertex" but for the type *Face*. -@subsubsection occt_algorithms_7_4_11 Build Images for Shells +@subsubsection specification__boolean_7_4_11 Build Images for Shells The input data for this step is: * *BOPAlgo_Builder* object after building result of type face; * *Original Shape* -- a Shell; @@ -1115,10 +1121,10 @@ The input data for this step is: The procedure is the same as for building images for wires. -@subsubsection occt_algorithms_7_4_12 Build Result of Type Shell -This step is the same as @ref occt_algorithms_7_4_4 "Building Result of Type Vertex" but for the type *Shell*. +@subsubsection specification__boolean_7_4_12 Build Result of Type Shell +This step is the same as @ref specification__boolean_7_4_4 "Building Result of Type Vertex" but for the type *Shell*. -@subsubsection occt_algorithms_7_4_13 Build Images for Solids +@subsubsection specification__boolean_7_4_13 Build Images for Solids The input data for this step is *BOPAlgo_Builder* object after building result of type *Shell*. @@ -1128,15 +1134,15 @@ The following procedure is executed for all interfered DS shapes *Si* of type *S | :--- | :--- | :--- | | 1 | Collect all images or non-split parts for all faces (FSPij) that have 3D state *In Si*. | *BOPAlgo_Builder::FillIn3DParts ()* | | 2 | Collect all images or non-split parts for all faces of *Si* | *BOPAlgo_Builder::BuildSplitSolids()* | -| 3 | Build split solids for *Si -> (Si1, Si2…SiNbSp)*, where *NbSp* is the number of split parts (see @ref occt_algorithms_7_2 "Building faces from a set of edges" for more details) | *BOPAlgo_BuilderSolid* | +| 3 | Build split solids for *Si -> (Si1, Si2…SiNbSp)*, where *NbSp* is the number of split parts (see @ref specification__boolean_7_2 "Building faces from a set of edges" for more details) | *BOPAlgo_BuilderSolid* | | 4 | Fill the map Same Domain solids *myShapesSD* | *BOPAlgo_Builder::BuildSplitSolids()* | | 5 | Fill the map *myImages* | *BOPAlgo_Builder::BuildSplitSolids()* | | 6 | Add internal vertices to split solids | *BOPAlgo_Builder::FillInternalShapes()* | -@subsubsection occt_algorithms_7_4_14 Build Result of Type Solid -This step is the same as @ref occt_algorithms_7_4_4 "Building Result of Type Vertex", but for the type Solid. +@subsubsection specification__boolean_7_4_14 Build Result of Type Solid +This step is the same as @ref specification__boolean_7_4_4 "Building Result of Type Vertex", but for the type Solid. -@subsubsection occt_algorithms_7_4_15 Build Images for Type CompSolid +@subsubsection specification__boolean_7_4_15 Build Images for Type CompSolid The input data for this step is: * *BOPAlgo_Builder* object after building result of type solid; @@ -1145,10 +1151,10 @@ The input data for this step is: The procedure is the same as for building images for wires. -@subsubsection occt_algorithms_7_4_16 Build Result of Type Compsolid -This step is the same as @ref occt_algorithms_7_4_4 "Building Result of Type Vertex", but for the type Compsolid. +@subsubsection specification__boolean_7_4_16 Build Result of Type Compsolid +This step is the same as @ref specification__boolean_7_4_4 "Building Result of Type Vertex", but for the type Compsolid. -@subsubsection occt_algorithms_7_4_17 Build Images for Compounds +@subsubsection specification__boolean_7_4_17 Build Images for Compounds The input data for this step is as follows: * *BOPAlgo_Builder* object after building results of type *compsolid*; * *Original Shape* -- a Compound; @@ -1156,11 +1162,11 @@ The input data for this step is as follows: The procedure is the same as for building images for wires. -@subsubsection occt_algorithms_7_4_18 Build Result of Type Compound +@subsubsection specification__boolean_7_4_18 Build Result of Type Compound -This step is the same as @ref occt_algorithms_7_4_4 "Building Result of Type Vertex", but for the type Compound. +This step is the same as @ref specification__boolean_7_4_4 "Building Result of Type Vertex", but for the type Compound. -@subsubsection occt_algorithms_7_4_19 Post-Processing +@subsubsection specification__boolean_7_4_19 Post-Processing The purpose of the step is to correct tolerances of the result to provide its validity in terms of *BRepCheck_Analyzer.* The input data for this step is a *BOPAlgo_Builder* object after building result of type compound. @@ -1171,26 +1177,26 @@ The input data for this step is a *BOPAlgo_Builder* object after building result | 2 | Correct tolerances of edges on faces | *BOPTools_Tools::CorrectCurveOnSurface()* | -@section occt_algorithms_8 Splitter Algorithm +@section specification__boolean_8 Splitter Algorithm The Splitter algorithm allows splitting a group of arbitrary shapes by another group of arbitrary shapes.
-It is based on the General Fuse algorithm, thus all options of the General Fuse (see @ref occt_algorithms_7_3a "GF Options") are also available in this algorithm. +It is based on the General Fuse algorithm, thus all options of the General Fuse (see @ref specification__boolean_7_3a "GF Options") are also available in this algorithm. -@subsection occt_algorithms_8_1 Arguments +@subsection specification__boolean_8_1 Arguments * The arguments of the Splitter algorithm are divided into two groups - *Objects* (shapes that will be split) and *Tools* (shapes, by which the *Objects* will be split); * The requirements for the arguments (both for *Objects* and *Tools*) are the same as for the General Fuse algorithm - there can be any number of arguments of any type in each group, but each argument should be valid and not self-interfered. -@subsection occt_algorithms_8_2 Results +@subsection specification__boolean_8_2 Results * The result of Splitter algorithm contains only the split parts of the shapes included into the group of *Objects*; * The split parts of the shapes included only into the group of *Tools* are excluded from the result; * If there are no shapes in the group of *Tools* the result of the operation will be equivalent to the result of General Fuse operation; * The shapes can be split by other shapes from the same group (if these shapes are interfering). -@subsection occt_algorithms_8_3 Usage +@subsection specification__boolean_8_3 Usage -@subsubsection occt_algorithms_8_3_1 API +@subsubsection specification__boolean_8_3_1 API On the low level the Splitter algorithm is implemented in class *BOPAlgo_Splitter*. The usage of this algorithm looks as follows: ~~~~~ @@ -1214,7 +1220,7 @@ if (aSplitter.HasErrors()) { //check error status const TopoDS_Shape& aResult = aSplitter.Shape(); // result of the operation ~~~~~ -@subsubsection occt_algorithms_8_3_2 DRAW +@subsubsection specification__boolean_8_3_2 DRAW The command *bsplit* implements the Splitter algorithm in DRAW. Similarly to the *bbuild* command for the General Fuse algorithm, the *bsplit* command should be used after the Pave Filler is filled. ~~~~~ @@ -1228,9 +1234,9 @@ bfillds bsplit result ~~~~~ -@subsection occt_algorithms_8_4 Examples +@subsection specification__boolean_8_4 Examples -@subsubsection occt_algorithms_8_4_1 Example 1 +@subsubsection specification__boolean_8_4_1 Example 1 Splitting a face by the set of edges: @@ -1271,12 +1277,12 @@ bsplit result - - + +
@figure{/user_guides/boolean_operations/images/bsplit_image001.png,"Arguments",160}@figure{/user_guides/boolean_operations/images/bsplit_image002.png,"Result",160}@figure{/specification/boolean_operations/images/bsplit_image001.png,"Arguments",160}@figure{/specification/boolean_operations/images/bsplit_image002.png,"Result",160}
-@subsubsection occt_algorithms_8_4_2 Example 2 +@subsubsection specification__boolean_8_4_2 Example 2 Splitting a plate by the set of cylinders: @@ -1305,26 +1311,26 @@ bsplit result - - + +
@figure{/user_guides/boolean_operations/images/bsplit_image003.png,"Arguments",160}@figure{/user_guides/boolean_operations/images/bsplit_image004.png,"Result",160}@figure{/specification/boolean_operations/images/bsplit_image003.png,"Arguments",160}@figure{/specification/boolean_operations/images/bsplit_image004.png,"Result",160}
-@subsubsection occt_algorithms_8_4_3 Example 3 +@subsubsection specification__boolean_8_4_3 Example 3 Splitting shell hull by the planes: - - + +
@figure{/user_guides/boolean_operations/images/bsplit_image005.png,"Arguments",160}@figure{/user_guides/boolean_operations/images/bsplit_image006.png,"Results",160}@figure{/specification/boolean_operations/images/bsplit_image005.png,"Arguments",160}@figure{/specification/boolean_operations/images/bsplit_image006.png,"Results",160}
-@section occt_algorithms_9 Boolean Operations Algorithm +@section specification__boolean_9 Boolean Operations Algorithm -@subsection occt_algorithms_9_1 Arguments +@subsection specification__boolean_9_1 Arguments -* The arguments of BOA are shapes in terms of *TopoDS_Shape*. The main requirements for the arguments are described in the @ref occt_algorithms_4 "Data Structure" +* The arguments of BOA are shapes in terms of *TopoDS_Shape*. The main requirements for the arguments are described in the @ref specification__boolean_4 "Data Structure" * There are two groups of arguments in BOA: * Objects (S1=S11, S12, ...); * Tools (S2=S21, S22, ...). @@ -1345,7 +1351,7 @@ Splitting shell hull by the planes: * For Boolean operation Cut the minimal dimension of *S2* should not be less than the maximal dimension of *S1*. * For Boolean operation Common the arguments can have any dimension. -@subsection occt_algorithms_9_3 Results. General Rules +@subsection specification__boolean_9_3 Results. General Rules * The result of the Boolean operation is a compound (if defined). Each sub-shape of the compound has shared sub-shapes in accordance with interferences between the arguments. * The content of the result depends on the type of the operation (Common, Fuse, Cut12, Cut21) and the dimensions of the arguments. @@ -1364,80 +1370,80 @@ Splitting shell hull by the planes: * The result of the operation Fuse for the arguments of type COMPSOLID will consist of the compound containing COMPSOLIDs created from connexity blocks of fused solids. * The result of the operation Common for the arguments of collection type (WIRE, SHELL, COMPSOLID) will consist of the unique containers containing the overlapping parts. For example, the result of Common operation between two fully overlapping wires will be one wire containing all splits of edges. The number of wires in the result of Common operation between two partially overlapping wires will be equal to the number of connexity blocks of overlapping edges. -@subsection occt_algorithms_9_4 Examples +@subsection specification__boolean_9_4 Examples -@subsubsection occt_algorithms_9_4_1 Case 1: Two Vertices +@subsubsection specification__boolean_9_4_1 Case 1: Two Vertices Let us consider two interfering vertices *V1* and *V2*: -@figure{/user_guides/boolean_operations/images/boolean_image001.svg,"",160} +@figure{/specification/boolean_operations/images/boolean_image001.svg,"",160} * The result of *Fuse* operation is the compound that contains new vertex *V*. -@figure{/user_guides/boolean_operations/images/boolean_image002.svg,"",160} +@figure{/specification/boolean_operations/images/boolean_image002.svg,"",160} * The result of *Common* operation is a compound containing new vertex *V*. * The result of *Cut12* operation is an empty compound. * The result of *Cut21* operation is an empty compound. -@subsubsection occt_algorithms_9_4_2 Case 2: A Vertex and an Edge +@subsubsection specification__boolean_9_4_2 Case 2: A Vertex and an Edge Let us consider vertex *V1* and the edge *E2*, that intersect in a 3D point: -@figure{/user_guides/boolean_operations/images/boolean_image004.png,"",230} +@figure{/specification/boolean_operations/images/boolean_image004.png,"",230} * The result of *Fuse* operation is result is not defined because the dimension of the vertex (0) is not equal to the dimension of the edge (1). * The result of *Common* operation is a compound containing vertex *V1* as the argument *V1* has a common part with edge *E2*. -@figure{/user_guides/boolean_operations/images/boolean_image005.png,"",230} +@figure{/specification/boolean_operations/images/boolean_image005.png,"",230} * The result of *Cut12* operation is an empty compound. * The result of *Cut21* operation is not defined because the dimension of the vertex (0) is less than the dimension of the edge (1). -@subsubsection occt_algorithms_9_4_3 Case 3: A Vertex and a Face +@subsubsection specification__boolean_9_4_3 Case 3: A Vertex and a Face Let us consider vertex *V1* and face *F2*, that intersect in a 3D point: -@figure{/user_guides/boolean_operations/images/boolean_image006.png,"",230} +@figure{/specification/boolean_operations/images/boolean_image006.png,"",230} * The result of *Fuse* operation is not defined because the dimension of the vertex (0) is not equal to the dimension of the face (2). * The result of *Common* operation is a compound containing vertex *V1* as the argument *V1* has a common part with face *F2*. -@figure{/user_guides/boolean_operations/images/boolean_image007.png,"",230} +@figure{/specification/boolean_operations/images/boolean_image007.png,"",230} * The result of *Cut12* operation is an empty compound. * The result of *Cut21* operation is not defined because the dimension of the vertex (0) is less than the dimension of the face (2). -@subsubsection occt_algorithms_9_4_4 Case 4: A Vertex and a Solid +@subsubsection specification__boolean_9_4_4 Case 4: A Vertex and a Solid Let us consider vertex *V1* and solid *S2*, that intersect in a 3D point: -@figure{/user_guides/boolean_operations/images/boolean_image008.png,"",230} +@figure{/specification/boolean_operations/images/boolean_image008.png,"",230} * The result of *Fuse* operation is not defined because the dimension of the vertex (0) is not equal to the dimension of the solid (3). * The result of *Common* operation is a compound containing vertex *V1* as the argument *V1* has a common part with solid *S2*. -@figure{/user_guides/boolean_operations/images/boolean_image009.png,"",230} +@figure{/specification/boolean_operations/images/boolean_image009.png,"",230} * The result of *Cut12* operation is an empty compound. * The result of *Cut21* operation is not defined because the dimension of the vertex (0) is less than the dimension of the solid (3). -@subsubsection occt_algorithms_9_4_5 Case 5: Two edges intersecting at one point +@subsubsection specification__boolean_9_4_5 Case 5: Two edges intersecting at one point Let us consider edges *E1* and *E2* that intersect in a 3D point: -@figure{/user_guides/boolean_operations/images/boolean_image010.svg,"",230} +@figure{/specification/boolean_operations/images/boolean_image010.svg,"",230} * The result of *Fuse* operation is a compound containing split parts of arguments i.e. 4 new edges *E11, E12, E21*, and *E22*. These edges have one shared vertex *Vn1*. In this case: * argument edge *E1* has resulting split edges *E11* and *E12* (image of *E1*); * argument edge *E2* has resulting split edges *E21* and *E22* (image of *E2*). -@figure{/user_guides/boolean_operations/images/boolean_image011.svg,"",230} +@figure{/specification/boolean_operations/images/boolean_image011.svg,"",230} * The result of *Common* operation is an empty compound because the dimension (0) of the common part between the edges (vertex) is less than the dimension of the arguments (1). @@ -1445,19 +1451,19 @@ In this case: In this case the argument edge *E1* has resulting split edges *E11* and *E12* (image of *E1*). -@figure{/user_guides/boolean_operations/images/boolean_image012.svg,"",230} +@figure{/specification/boolean_operations/images/boolean_image012.svg,"",230} * The result of *Cut21* operation is a compound containing split parts of the argument *E2*, i.e. 2 new edges *E21* and *E12*. These edges have one shared vertex *Vn1*. In this case the argument edge *E2* has resulting split edges *E21* and *E22* (image of *E2*). -@figure{/user_guides/boolean_operations/images/boolean_image013.svg,"",70} +@figure{/specification/boolean_operations/images/boolean_image013.svg,"",70} -@subsubsection occt_algorithms_9_4_6 Case 6: Two edges having a common block +@subsubsection specification__boolean_9_4_6 Case 6: Two edges having a common block Let us consider edges *E1* and *E2* that have a common block: -@figure{/user_guides/boolean_operations/images/boolean_image014.svg,"",230} +@figure{/specification/boolean_operations/images/boolean_image014.svg,"",230} * The result of *Fuse* operation is a compound containing split parts of arguments i.e. 3 new edges *E11*, *E12* and *E22*. These edges have two shared vertices. In this case: @@ -1465,27 +1471,27 @@ In this case: * argument edge *E2* has resulting split edges *E21* and *E22* (image of *E2*); * edge *E12* is common for the images of *E1* and *E2*. -@figure{/user_guides/boolean_operations/images/boolean_image015.svg,"",230} +@figure{/specification/boolean_operations/images/boolean_image015.svg,"",230} * The result of *Common* operation is a compound containing split parts of arguments i.e. 1 new edge *E12*. In this case edge *E12* is common for the images of *E1* and *E2*. The common part between the edges (edge) has the same dimension (1) as the dimension of the arguments (1). -@figure{/user_guides/boolean_operations/images/boolean_image016.svg,"",230} +@figure{/specification/boolean_operations/images/boolean_image016.svg,"",230} * The result of *Cut12* operation is a compound containing a split part of argument *E1*, i.e. new edge *E11*. -@figure{/user_guides/boolean_operations/images/boolean_image017.svg,"",230} +@figure{/specification/boolean_operations/images/boolean_image017.svg,"",230} * The result of *Cut21* operation is a compound containing a split part of argument *E2*, i.e. new edge *E22*. -@figure{/user_guides/boolean_operations/images/boolean_image018.svg,"",230} +@figure{/specification/boolean_operations/images/boolean_image018.svg,"",230} -@subsubsection occt_algorithms_9_4_7 Case 7: An Edge and a Face intersecting at a point +@subsubsection specification__boolean_9_4_7 Case 7: An Edge and a Face intersecting at a point Let us consider edge *E1* and face *F2* that intersect at a 3D point: -@figure{/user_guides/boolean_operations/images/boolean_image019.png,"",230} +@figure{/specification/boolean_operations/images/boolean_image019.png,"",230} * The result of *Fuse* operation is not defined because the dimension of the edge (1) is not equal to the dimension of the face (2). @@ -1495,15 +1501,15 @@ Let us consider edge *E1* and face *F2* that intersect at a 3D point: In this case the argument edge *E1* has no common parts with the face *F2* so the whole image of *E1* is in the result. -@figure{/user_guides/boolean_operations/images/boolean_image020.png,"",230} +@figure{/specification/boolean_operations/images/boolean_image020.png,"",230} * The result of *Cut21* operation is not defined because the dimension of the edge (1) is less than the dimension of the face (2). -@subsubsection occt_algorithms_9_4_8 Case 8: A Face and an Edge that have a common block +@subsubsection specification__boolean_9_4_8 Case 8: A Face and an Edge that have a common block Let us consider edge *E1* and face *F2* that have a common block: -@figure{/user_guides/boolean_operations/images/boolean_image021.png,"",230} +@figure{/specification/boolean_operations/images/boolean_image021.png,"",230} * The result of *Fuse* operation is not defined because the dimension of the edge (1) is not equal to the dimension of the face (2). @@ -1511,21 +1517,21 @@ Let us consider edge *E1* and face *F2* that have a common block: In this case the argument edge *E1* has a common part with face *F2* so the corresponding part of the image of *E1* is in the result. The yellow square is not a part of the result. It only shows the place of *F2*. -@figure{/user_guides/boolean_operations/images/boolean_image022.png,"",230} +@figure{/specification/boolean_operations/images/boolean_image022.png,"",230} * The result of *Cut12* operation is a compound containing split part of the argument *E1*, i.e. new edge *E11*. In this case the argument edge *E1* has a common part with face *F2* so the corresponding part is not included into the result. The yellow square is not a part of the result. It only shows the place of F2. -@figure{/user_guides/boolean_operations/images/boolean_image023.png,"",230} +@figure{/specification/boolean_operations/images/boolean_image023.png,"",230} * The result of *Cut21* operation is not defined because the dimension of the edge (1) is less than the dimension of the face (2). -@subsubsection occt_algorithms_9_4_9 Case 9: An Edge and a Solid intersecting at a point +@subsubsection specification__boolean_9_4_9 Case 9: An Edge and a Solid intersecting at a point Let us consider edge *E1* and solid *S2* that intersect at a point: -@figure{/user_guides/boolean_operations/images/boolean_image024.png,"",230} +@figure{/specification/boolean_operations/images/boolean_image024.png,"",230} * The result of *Fuse* operation is not defined because the dimension of the edge (1) is not equal to the dimension of the solid (3). @@ -1533,21 +1539,21 @@ Let us consider edge *E1* and solid *S2* that intersect at a point: In this case the argument edge *E1* has a common part with solid *S2* so the corresponding part of the image of *E1* is in the result. The yellow square is not a part of the result. It only shows the place of *S2*. -@figure{/user_guides/boolean_operations/images/boolean_image025.png,"",230} +@figure{/specification/boolean_operations/images/boolean_image025.png,"",230} * The result of *Cut12* operation is a compound containing split part of the argument *E1*, i.e. new edge *E11*. In this case the argument edge *E1* has a common part with solid *S2* so the corresponding part is not included into the result. The yellow square is not a part of the result. It only shows the place of *S2*. -@figure{/user_guides/boolean_operations/images/boolean_image071.png,"",230} +@figure{/specification/boolean_operations/images/boolean_image071.png,"",230} * The result of *Cut21* operation is not defined because the dimension of the edge (1) is less than the dimension of the solid (3). -@subsubsection occt_algorithms_9_4_10 Case 10: An Edge and a Solid that have a common block +@subsubsection specification__boolean_9_4_10 Case 10: An Edge and a Solid that have a common block Let us consider edge *E1* and solid *S2* that have a common block: -@figure{/user_guides/boolean_operations/images/boolean_image072.png,"",230} +@figure{/specification/boolean_operations/images/boolean_image072.png,"",230} * The result of *Fuse* operation is not defined because the dimension of the edge (1) is not equal to the dimension of the solid (3). @@ -1555,148 +1561,148 @@ Let us consider edge *E1* and solid *S2* that have a common block: In this case the argument edge *E1* has a common part with solid *S2* so the corresponding part of the image of *E1* is in the result. The yellow square is not a part of the result. It only shows the place of *S2*. -@figure{/user_guides/boolean_operations/images/boolean_image073.png,"",230} +@figure{/specification/boolean_operations/images/boolean_image073.png,"",230} * The result of *Cut12* operation is a compound containing split part of the argument *E1*, i.e. new edge *E11*. In this case the argument edge *E1* has a common part with solid *S2* so the corresponding part is not included into the result. The yellow square is not a part of the result. It only shows the place of *S2*. -@figure{/user_guides/boolean_operations/images/boolean_image026.png,"",230} +@figure{/specification/boolean_operations/images/boolean_image026.png,"",230} * The result of *Cut21* operation is not defined because the dimension of the edge (1) is less than the dimension of the solid (3). -@subsubsection occt_algorithms_9_4_11 Case 11: Two intersecting faces +@subsubsection specification__boolean_9_4_11 Case 11: Two intersecting faces Let us consider two intersecting faces *F1* and *F2*: -@figure{/user_guides/boolean_operations/images/boolean_image027.png,"",230} +@figure{/specification/boolean_operations/images/boolean_image027.png,"",230} * The result of *Fuse* operation is a compound containing split parts of arguments i.e. 2 new faces *F11* and *F21*. These faces have one shared edge *En1*. -@figure{/user_guides/boolean_operations/images/boolean_image028.png,"",230} +@figure{/specification/boolean_operations/images/boolean_image028.png,"",230} * The result of *Common* operation is an empty compound because the dimension (1) of the common part between *F1* and *F2* (edge) is less than the dimension of arguments (2). * The result of *Cut12* operation is a compound containing split part of the argument *F1*, i.e. new face *F11*. -@figure{/user_guides/boolean_operations/images/boolean_image029.png,"",230} +@figure{/specification/boolean_operations/images/boolean_image029.png,"",230} * The result of *Cut21* operation is a compound containing split parts of the argument *F2*, i.e. 1 new face *F21*. -@figure{/user_guides/boolean_operations/images/boolean_image030.png,"",127} +@figure{/specification/boolean_operations/images/boolean_image030.png,"",127} -@subsubsection occt_algorithms_9_4_12 Case 12: Two faces that have a common part +@subsubsection specification__boolean_9_4_12 Case 12: Two faces that have a common part Let us consider two faces *F1* and *F2* that have a common part: -@figure{/user_guides/boolean_operations/images/boolean_image031.png,"",230} +@figure{/specification/boolean_operations/images/boolean_image031.png,"",230} * The result of *Fuse* operation is a compound containing split parts of arguments, i.e. 3 new faces: *F11*, *F12* and *F22*. These faces are shared through edges In this case: * the argument edge *F1* has resulting split faces *F11* and *F12* (image of *F1*) * the argument face *F2* has resulting split faces *F12* and *F22* (image of *F2*) * the face *F12* is common for the images of *F1* and *F2*. -@figure{/user_guides/boolean_operations/images/boolean_image032.png,"",230} +@figure{/specification/boolean_operations/images/boolean_image032.png,"",230} * The result of *Common* operation is a compound containing split parts of arguments i.e. 1 new face *F12*. In this case: face *F12* is common for the images of *F1* and *F2*. The common part between the faces (face) has the same dimension (2) as the dimension of the arguments (2). -@figure{/user_guides/boolean_operations/images/boolean_image033.png,"",230} +@figure{/specification/boolean_operations/images/boolean_image033.png,"",230} * The result of *Cut12* operation is a compound containing split part of the argument *F1*, i.e. new face *F11*. -@figure{/user_guides/boolean_operations/images/boolean_image034.png,"",230} +@figure{/specification/boolean_operations/images/boolean_image034.png,"",230} * The result of *Cut21* operation is a compound containing split parts of the argument *F2*, i.e. 1 new face *F21*. -@figure{/user_guides/boolean_operations/images/boolean_image035.png,"",230} +@figure{/specification/boolean_operations/images/boolean_image035.png,"",230} -@subsubsection occt_algorithms_9_4_13 Case 13: Two faces that have a common edge +@subsubsection specification__boolean_9_4_13 Case 13: Two faces that have a common edge Let us consider two faces *F1* and *F2* that have a common edge: -@figure{/user_guides/boolean_operations/images/boolean_image036.png,"",230} +@figure{/specification/boolean_operations/images/boolean_image036.png,"",230} * The result of *Fuse* operation is a compound containing split parts of arguments, i.e. 2 new faces: *F11* and *F21*. These faces have one shared edge *En1*. -@figure{/user_guides/boolean_operations/images/boolean_image037.png,"",230} +@figure{/specification/boolean_operations/images/boolean_image037.png,"",230} * The result of *Common* operation is an empty compound because the dimension (1) of the common part between *F1* and *F2* (edge)is less than the dimension of the arguments (2) * The result of *Cut12* operation is a compound containing split part of the argument *F1*, i.e. new face *F11*. The vertices are shown just to clarify the fact that the edges are spitted. -@figure{/user_guides/boolean_operations/images/boolean_image038.png,"",230} +@figure{/specification/boolean_operations/images/boolean_image038.png,"",230} * The result of *Cut21* operation is a compound containing split parts of the argument *F2*, i.e. 1 new face *F21*. The vertices are shown just to clarify the fact that the edges are spitted. -@figure{/user_guides/boolean_operations/images/boolean_image039.png,"",230} +@figure{/specification/boolean_operations/images/boolean_image039.png,"",230} -@subsubsection occt_algorithms_9_4_14 Case 14: Two faces that have a common vertex +@subsubsection specification__boolean_9_4_14 Case 14: Two faces that have a common vertex Let us consider two faces *F1* and *F2* that have a common vertex: -@figure{/user_guides/boolean_operations/images/boolean_image040.png,"",230} +@figure{/specification/boolean_operations/images/boolean_image040.png,"",230} * The result of *Fuse* operation is a compound containing split parts of arguments, i.e. 2 new faces: *F11* and *F21*. These faces have one shared vertex *Vn1*. -@figure{/user_guides/boolean_operations/images/boolean_image041.png,"",230} +@figure{/specification/boolean_operations/images/boolean_image041.png,"",230} * The result of *Common* operation is an empty compound because the dimension (0) of the common part between *F1* and *F2* (vertex) is less than the dimension of the arguments (2) * The result of *Cut12* operation is a compound containing split part of the argument *F1*, i.e. new face *F11*. -@figure{/user_guides/boolean_operations/images/boolean_image042.png,"",230} +@figure{/specification/boolean_operations/images/boolean_image042.png,"",230} * The result of *Cut21* operation is a compound containing split parts of the argument *F2*, i.e. 1 new face *F21*. -@figure{/user_guides/boolean_operations/images/boolean_image043.png,"",230} +@figure{/specification/boolean_operations/images/boolean_image043.png,"",230} -@subsubsection occt_algorithms_9_4_15 Case 15: A Face and a Solid that have an intersection curve. +@subsubsection specification__boolean_9_4_15 Case 15: A Face and a Solid that have an intersection curve. Let us consider face *F1* and solid *S2* that have an intersection curve: -@figure{/user_guides/boolean_operations/images/boolean_image044.png,"",230} +@figure{/specification/boolean_operations/images/boolean_image044.png,"",230} * The result of *Fuse* operation is not defined because the dimension of the face (2) is not equal to the dimension of the solid (3). * The result of *Common* operation is a compound containing split part of the argument *F1*. In this case the argument face *F1* has a common part with solid *S2*, so the corresponding part of the image of *F1* is in the result. The yellow contour is not a part of the result. It only shows the place of *S2*. -@figure{/user_guides/boolean_operations/images/boolean_image045.png,"",230} +@figure{/specification/boolean_operations/images/boolean_image045.png,"",230} * The result of *Cut12* operation is a compound containing split part of the argument *F1*. In this case argument face *F1* has a common part with solid *S2* so the corresponding part is not included into the result. The yellow contour is not a part of the result. It only shows the place of *S2*. -@figure{/user_guides/boolean_operations/images/boolean_image046.png,"",230} +@figure{/specification/boolean_operations/images/boolean_image046.png,"",230} * The result of *Cut21* operation is is not defined because the dimension of the face (2) is less than the dimension of the solid (3). -@subsubsection occt_algorithms_9_4_16 Case 16: A Face and a Solid that have overlapping faces. +@subsubsection specification__boolean_9_4_16 Case 16: A Face and a Solid that have overlapping faces. Let us consider face *F1* and solid *S2* that have overlapping faces: -@figure{/user_guides/boolean_operations/images/boolean_image047.png,"",230} +@figure{/specification/boolean_operations/images/boolean_image047.png,"",230} * The result of *Fuse* operation is not defined because the dimension of the face (2) is not equal to the dimension of the solid (3). * The result of *Common* operation is a compound containing split part of the argument *F1*. In this case the argument face *F1* has a common part with solid *S2*, so the corresponding part of the image of *F1* is included in the result. The yellow contour is not a part of the result. It only shows the place of *S2*. -@figure{/user_guides/boolean_operations/images/boolean_image048.png,"",230} +@figure{/specification/boolean_operations/images/boolean_image048.png,"",230} * The result of *Cut12* operation is a compound containing split part of the argument *F1*. In this case argument face *F1* has a common part with solid *S2* so the corresponding part is not included into the result. The yellow contour is not a part of the result. It only shows the place of *S2*. -@figure{/user_guides/boolean_operations/images/boolean_image049.png,"",230} +@figure{/specification/boolean_operations/images/boolean_image049.png,"",230} * The result of *Cut21* operation is is not defined because the dimension of the face (2) is less than the dimension of the solid (3). -@subsubsection occt_algorithms_9_4_17 Case 17: A Face and a Solid that have overlapping edges. +@subsubsection specification__boolean_9_4_17 Case 17: A Face and a Solid that have overlapping edges. Let us consider face *F1* and solid *S2* that have overlapping edges: -@figure{/user_guides/boolean_operations/images/boolean_image050.png,"",230} +@figure{/specification/boolean_operations/images/boolean_image050.png,"",230} * The result of *Fuse* operation is not defined because the dimension of the face (2) is not equal to the dimension of the solid (3). @@ -1704,15 +1710,15 @@ Let us consider face *F1* and solid *S2* that have overlapping edges: * The result of *Cut12* operation is a compound containing split part of the argument *F1*. In this case argument face *F1* has a common part with solid *S2* so the corresponding part is not included into the result. The yellow contour is not a part of the result. It only shows the place of *S2*. -@figure{/user_guides/boolean_operations/images/boolean_image051.png,"",230} +@figure{/specification/boolean_operations/images/boolean_image051.png,"",230} * The result of *Cut21* operation is is not defined because the dimension of the face (2) is less than the dimension of the solid (3). -@subsubsection occt_algorithms_9_4_18 Case 18: A Face and a Solid that have overlapping vertices. +@subsubsection specification__boolean_9_4_18 Case 18: A Face and a Solid that have overlapping vertices. Let us consider face *F1* and solid *S2* that have overlapping vertices: -@figure{/user_guides/boolean_operations/images/boolean_image052.png,"",230} +@figure{/specification/boolean_operations/images/boolean_image052.png,"",230} * The result of *Fuse* operation is not defined because the dimension of the face (2) is not equal to the dimension of the solid (3). @@ -1720,136 +1726,136 @@ Let us consider face *F1* and solid *S2* that have overlapping vertices: * The result of *Cut12* operation is a compound containing split part of the argument *F1*. In this case argument face *F1* has a common part with solid *S2* so the corresponding part is not included into the result. The yellow contour is not a part of the result. It only shows the place of *S2*. -@figure{/user_guides/boolean_operations/images/boolean_image053.png,"",230} +@figure{/specification/boolean_operations/images/boolean_image053.png,"",230} * The result of *Cut21* operation is is not defined because the dimension of the face (2) is less than the dimension of the solid (3). -@subsubsection occt_algorithms_9_4_19 Case 19: Two intersecting Solids. +@subsubsection specification__boolean_9_4_19 Case 19: Two intersecting Solids. Let us consider two intersecting solids *S1* and *S2*: -@figure{/user_guides/boolean_operations/images/boolean_image054.png,"",230} +@figure{/specification/boolean_operations/images/boolean_image054.png,"",230} * The result of *Fuse* operation is a compound composed from the split parts of arguments *S11, S12* and *S22* (Cut12, Common, Cut21). All inner webs are removed, so the result is one new solid *R*. -@figure{/user_guides/boolean_operations/images/boolean_image055.png,"",230} +@figure{/specification/boolean_operations/images/boolean_image055.png,"",230} * The result of *Common* operation is a compound containing split parts of arguments i.e. one new solid *S12*. In this case solid *S12* is common for the images of *S1* and *S2*. The common part between the solids (solid) has the same dimension (3) as the dimension of the arguments (3). The yellow contour is not a part of the result. It only shows the place of *S1*. -@figure{/user_guides/boolean_operations/images/boolean_image056.png,"",176} +@figure{/specification/boolean_operations/images/boolean_image056.png,"",176} * The result of *Cut12* operation is a compound containing split part of the argument *S1*, i.e. 1 new solid *S11*. -@figure{/user_guides/boolean_operations/images/boolean_image057.png,"",230} +@figure{/specification/boolean_operations/images/boolean_image057.png,"",230} * The result of *Cut21* operation is a compound containing split part of the argument *S2*, i.e. 1 new solid *S21*. -@figure{/user_guides/boolean_operations/images/boolean_image058.png,"",230} +@figure{/specification/boolean_operations/images/boolean_image058.png,"",230} -@subsubsection occt_algorithms_9_4_20 Case 20: Two Solids that have overlapping faces. +@subsubsection specification__boolean_9_4_20 Case 20: Two Solids that have overlapping faces. Let us consider two solids *S1* and *S2* that have a common part on face: -@figure{/user_guides/boolean_operations/images/boolean_image059.png,"",230} +@figure{/specification/boolean_operations/images/boolean_image059.png,"",230} * The result of *Fuse* operation is a compound composed from the split parts of arguments *S11, S12* and *S22* (Cut12, Common, Cut21). All inner webs are removed, so the result is one new solid *R*. -@figure{/user_guides/boolean_operations/images/boolean_image060.png,"",230} +@figure{/specification/boolean_operations/images/boolean_image060.png,"",230} * The result of *Common* operation is an empty compound because the dimension (2) of the common part between *S1* and *S2* (face) is less than the lower dimension of the arguments (3). * The result of *Cut12* operation is a compound containing split part of the argument *S1*, i.e. 1 new solid *S11*. -@figure{/user_guides/boolean_operations/images/boolean_image061.png,"",230} +@figure{/specification/boolean_operations/images/boolean_image061.png,"",230} * The result of *Cut21* operation is a compound containing split part of the argument *S2*, i.e. 1 new solid *S21*. -@figure{/user_guides/boolean_operations/images/boolean_image062.png,"",230} +@figure{/specification/boolean_operations/images/boolean_image062.png,"",230} -@subsubsection occt_algorithms_9_4_21 Case 21: Two Solids that have overlapping edges. +@subsubsection specification__boolean_9_4_21 Case 21: Two Solids that have overlapping edges. Let us consider two solids *S1* and *S2* that have overlapping edges: -@figure{/user_guides/boolean_operations/images/boolean_image063.png,"",230} +@figure{/specification/boolean_operations/images/boolean_image063.png,"",230} * The result of *Fuse* operation is a compound composed from the split parts of arguments i.e. 2 new solids *S11* and *S21*. These solids have one shared edge *En1*. -@figure{/user_guides/boolean_operations/images/boolean_image064.png,"",230} +@figure{/specification/boolean_operations/images/boolean_image064.png,"",230} * The result of *Common* operation is an empty compound because the dimension (1) of the common part between *S1* and *S2* (edge) is less than the lower dimension of the arguments (3). * The result of *Cut12* operation is a compound containing split part of the argument *S1*. In this case argument *S1* has a common part with solid *S2* so the corresponding part is not included into the result. -@figure{/user_guides/boolean_operations/images/boolean_image065.png,"",230} +@figure{/specification/boolean_operations/images/boolean_image065.png,"",230} * The result of *Cut21* operation is a compound containing split part of the argument *S2*. In this case argument *S2* has a common part with solid *S1* so the corresponding part is not included into the result. -@figure{/user_guides/boolean_operations/images/boolean_image066.png,"",230} +@figure{/specification/boolean_operations/images/boolean_image066.png,"",230} -@subsubsection occt_algorithms_9_4_22 Case 22: Two Solids that have overlapping vertices. +@subsubsection specification__boolean_9_4_22 Case 22: Two Solids that have overlapping vertices. Let us consider two solids *S1* and *S2* that have overlapping vertices: -@figure{/user_guides/boolean_operations/images/boolean_image067.png,"",230} +@figure{/specification/boolean_operations/images/boolean_image067.png,"",230} * The result of *Fuse* operation is a compound composed from the split parts of arguments i.e. 2 new solids *S11* and *S21*. These solids share *Vn1*. -@figure{/user_guides/boolean_operations/images/boolean_image068.png,"",230} +@figure{/specification/boolean_operations/images/boolean_image068.png,"",230} * The result of *Common* operation is an empty compound because the dimension (0) of the common part between *S1* and *S2* (vertex) is less than the lower dimension of the arguments (3). * The result of *Cut12* operation is a compound containing split part of the argument *S1*. -@figure{/user_guides/boolean_operations/images/boolean_image069.png,"",230} +@figure{/specification/boolean_operations/images/boolean_image069.png,"",230} * The result of *Cut21* operation is a compound containing split part of the argument *S2*. -@figure{/user_guides/boolean_operations/images/boolean_image070.png,"",230} +@figure{/specification/boolean_operations/images/boolean_image070.png,"",230} -@subsubsection occt_algorithms_9_4_23 Case 23: A Shell and a Wire cut by a Solid. +@subsubsection specification__boolean_9_4_23 Case 23: A Shell and a Wire cut by a Solid. Let us consider Shell *Sh* and Wire *W* as the objects and Solid *S* as the tool: -@figure{/user_guides/boolean_operations/images/boolean_image136.png,"",230} +@figure{/specification/boolean_operations/images/boolean_image136.png,"",230} * The result of *Fuse* operation is not defined as the dimension of the arguments is not the same. * The result of *Common* operation is a compound containing the parts of the initial Shell and Wire common for the Solid. The new Shell and Wire are created from the objects. -@figure{/user_guides/boolean_operations/images/boolean_image137.png,"",230} +@figure{/specification/boolean_operations/images/boolean_image137.png,"",230} * The result of *Cut12* operation is a compound containing new Shell and Wire split from the arguments *Sh* and *W*. In this case they have a common part with solid *S* so the corresponding part is not included into the result. -@figure{/user_guides/boolean_operations/images/boolean_image138.png,"",230} +@figure{/specification/boolean_operations/images/boolean_image138.png,"",230} * The result of *Cut21* operation is not defined as the objects have a lower dimension than the tool. -@subsubsection occt_algorithms_9_4_24 Case 24: Two Wires that have overlapping edges. +@subsubsection specification__boolean_9_4_24 Case 24: Two Wires that have overlapping edges. Let us consider two Wires that have overlapping edges, *W1* is the object and *W2* is the tool: -@figure{/user_guides/boolean_operations/images/boolean_image139.png,"",230} +@figure{/specification/boolean_operations/images/boolean_image139.png,"",230} * The result of *Fuse* operation is a compound containing two Wires, which share an overlapping edge. The new Wires are created from the objects: -@figure{/user_guides/boolean_operations/images/boolean_image140.png,"",230} +@figure{/specification/boolean_operations/images/boolean_image140.png,"",230} * The result of *Common* operation is a compound containing one Wire consisting of an overlapping edge. The new Wire is created from the objects: -@figure{/user_guides/boolean_operations/images/boolean_image141.png,"",230} +@figure{/specification/boolean_operations/images/boolean_image141.png,"",230} * The result of *Cut12* operation is a compound containing a wire split from object *W1*. Its common part with *W2* is not included into the result. -@figure{/user_guides/boolean_operations/images/boolean_image142.png,"",230} +@figure{/specification/boolean_operations/images/boolean_image142.png,"",230} * The result of *Cut21* operation is a compound containing a wire split from *W2*. Its common part with *W1* is not included into the result. -@figure{/user_guides/boolean_operations/images/boolean_image143.png,"",230} +@figure{/specification/boolean_operations/images/boolean_image143.png,"",230} -@subsection occt_algorithms_9_5 Class BOPAlgo_BOP +@subsection specification__boolean_9_5 Class BOPAlgo_BOP BOA is implemented in the class *BOPAlgo_BOP*. The main fields of this class are described in the Table: @@ -1860,9 +1866,9 @@ BOA is implemented in the class *BOPAlgo_BOP*. The main fields of this class are | *myDims[2]* | The values of the dimensions of the arguments | | *myRC* | The draft result (shape) | -The main steps of the *BOPAlgo_BOP* are the same as of @ref occt_algorithms_7_4 "BOPAlgo_Builder" except for some aspects described in the next paragraphs. +The main steps of the *BOPAlgo_BOP* are the same as of @ref specification__boolean_7_4 "BOPAlgo_Builder" except for some aspects described in the next paragraphs. -@subsection occt_algorithms_9_6 Building Draft Result +@subsection specification__boolean_9_6 Building Draft Result The input data for this step is as follows: * *BOPAlgo_BOP* object after building result of type *Compound*; @@ -1873,7 +1879,7 @@ The input data for this step is as follows: | 1 | For the Boolean operation *Fuse* add to *myRC* all images of arguments. | *BOPAlgo_BOP::BuildRC()* | | 2 | For the Boolean operation *Common* or *Cut* add to *myRC* all images of argument *S1* that are *Common* for the Common operation and are *Not Common* for the Cut operation | *BOPAlgo_BOP::BuildRC()* | -@subsection occt_algorithms_9_7 Building the Result +@subsection specification__boolean_9_7 Building the Result The input data for this step is as follows: * *BOPAlgo_BOP* object the state after building draft result. @@ -1891,7 +1897,7 @@ The input data for this step is as follows: | 2.3 | Build solids (SDi) from *SFS*. | *BOPAlgo_BuilderSolid* | | 2.4 | Add the solids (SDi) to the result | | -@subsection occt_algorithms_bop_on_opensolids Boolean operations on open solids +@subsection specification__boolean_bop_on_opensolids Boolean operations on open solids The Boolean operations on open solids are tricky enough that the standard approach of Boolean operations for building the result, based on the splits of solids does not work. It happens because the algorithm for splitting solids (*BOPAlgo_BuilderSolid*) always tries to create the closed loops (shells) and make solids from them. But if the input solid is not closed, what can be expected from its splits? @@ -1906,13 +1912,13 @@ From the selected faces the result solids are built. Please note, that the resul Even with this approach, the correct result of Boolean operation on open solids cannot be always guaranteed. This is explained by non-manifold nature of open solids: in some cases classification of a face depends on the point of the face chosen for classification. -@section occt_algorithms_10a Section Algorithm +@section specification__boolean_10a Section Algorithm -@subsection occt_algorithms_10a_1 Arguments +@subsection specification__boolean_10a_1 Arguments The arguments of BOA are shapes in terms of *TopoDS_Shape*. The main requirements for the arguments are described in the Algorithms. -@subsection occt_algorithms_10a_2 Results and general rules +@subsection specification__boolean_10a_2 Results and general rules * The result of Section operation is a compound. Each sub-shape of the compound has shared sub-shapes in accordance with interferences between the arguments. * The result of Section operation contains shapes that have dimension that is less then 2 i.e. vertices and edges. * The result of Section operation contains standalone vertices if these vertices do not belong to the edges of the result. @@ -1921,220 +1927,220 @@ The arguments of BOA are shapes in terms of *TopoDS_Shape*. The main requirement * The result of Section operation contains vertices that are the result of interferences between vertices and faces. * The result of Section operation contains edges that are the result of interferences between edges and faces (Common Blocks), -@subsection occt_algorithms_10a_3 Examples +@subsection specification__boolean_10a_3 Examples -@subsubsection occt_algorithms_10a_3_1 Case 1: Two Vertices +@subsubsection specification__boolean_10a_3_1 Case 1: Two Vertices Let us consider two interfering vertices: *V1* and *V2*. -@figure{/user_guides/boolean_operations/images/boolean_image080.png,"",131} +@figure{/specification/boolean_operations/images/boolean_image080.png,"",131} The result of *Section* operation is the compound that contains a new vertex *V*. -@figure{/user_guides/boolean_operations/images/boolean_image081.png,"",128} +@figure{/specification/boolean_operations/images/boolean_image081.png,"",128} -@subsubsection occt_algorithms_10a_3_2 Case 1: Case 2: A Vertex and an Edge +@subsubsection specification__boolean_10a_3_2 Case 1: Case 2: A Vertex and an Edge Let us consider vertex *V1* and the edge *E2*, that intersect in a 3D point: -@figure{/user_guides/boolean_operations/images/boolean_image082.png,"",230} +@figure{/specification/boolean_operations/images/boolean_image082.png,"",230} The result of *Section* operation is the compound that contains vertex *V1*. -@figure{/user_guides/boolean_operations/images/boolean_image083.png,"",230} +@figure{/specification/boolean_operations/images/boolean_image083.png,"",230} -@subsubsection occt_algorithms_10a_3_3 Case 1: Case 2: A Vertex and a Face +@subsubsection specification__boolean_10a_3_3 Case 1: Case 2: A Vertex and a Face Let us consider vertex *V1* and face *F2*, that intersect in a 3D point: -@figure{/user_guides/boolean_operations/images/boolean_image084.png,"",230} +@figure{/specification/boolean_operations/images/boolean_image084.png,"",230} The result of *Section* operation is the compound that contains vertex *V1*. -@figure{/user_guides/boolean_operations/images/boolean_image085.png,"",230} +@figure{/specification/boolean_operations/images/boolean_image085.png,"",230} -@subsubsection occt_algorithms_10a_3_4 Case 4: A Vertex and a Solid +@subsubsection specification__boolean_10a_3_4 Case 4: A Vertex and a Solid Let us consider vertex *V1* and solid *Z2*. The vertex *V1* is inside the solid *Z2*. -@figure{/user_guides/boolean_operations/images/boolean_image086.png,"",230} +@figure{/specification/boolean_operations/images/boolean_image086.png,"",230} The result of *Section* operation is an empty compound. -@subsubsection occt_algorithms_10a_3_5 Case 5: Two edges intersecting at one point +@subsubsection specification__boolean_10a_3_5 Case 5: Two edges intersecting at one point Let us consider edges *E1* and *E2*, that intersect in a 3D point: -@figure{/user_guides/boolean_operations/images/boolean_image087.png,"",230} +@figure{/specification/boolean_operations/images/boolean_image087.png,"",230} The result of *Section* operation is the compound that contains a new vertex *Vnew*. -@figure{/user_guides/boolean_operations/images/boolean_image088.png,"",230} +@figure{/specification/boolean_operations/images/boolean_image088.png,"",230} -@subsubsection occt_algorithms_10a_3_6 Case 6: Two edges having a common block +@subsubsection specification__boolean_10a_3_6 Case 6: Two edges having a common block Let us consider edges *E1* and *E2*, that have a common block: -@figure{/user_guides/boolean_operations/images/boolean_image089.png,"",230} +@figure{/specification/boolean_operations/images/boolean_image089.png,"",230} The result of *Section* operation is the compound that contains a new edge *Enew*. -@figure{/user_guides/boolean_operations/images/boolean_image090.png,"",230} +@figure{/specification/boolean_operations/images/boolean_image090.png,"",230} -@subsubsection occt_algorithms_10a_3_7 Case 7: An Edge and a Face intersecting at a point +@subsubsection specification__boolean_10a_3_7 Case 7: An Edge and a Face intersecting at a point Let us consider edge *E1* and face *F2*, that intersect at a 3D point: -@figure{/user_guides/boolean_operations/images/boolean_image091.png,"",230} +@figure{/specification/boolean_operations/images/boolean_image091.png,"",230} The result of *Section* operation is the compound that contains a new vertex *Vnew*. -@figure{/user_guides/boolean_operations/images/boolean_image092.png,"",230} +@figure{/specification/boolean_operations/images/boolean_image092.png,"",230} -@subsubsection occt_algorithms_10a_3_8 Case 8: A Face and an Edge that have a common block +@subsubsection specification__boolean_10a_3_8 Case 8: A Face and an Edge that have a common block Let us consider edge *E1* and face *F2*, that have a common block: -@figure{/user_guides/boolean_operations/images/boolean_image093.png,"",230} +@figure{/specification/boolean_operations/images/boolean_image093.png,"",230} The result of *Section* operation is the compound that contains new edge *Enew*. -@figure{/user_guides/boolean_operations/images/boolean_image094.png,"",230} +@figure{/specification/boolean_operations/images/boolean_image094.png,"",230} -@subsubsection occt_algorithms_10a_3_9 Case 9: An Edge and a Solid intersecting at a point +@subsubsection specification__boolean_10a_3_9 Case 9: An Edge and a Solid intersecting at a point Let us consider edge *E1* and solid *Z2*, that intersect at a point: -@figure{/user_guides/boolean_operations/images/boolean_image095.png,"",230} +@figure{/specification/boolean_operations/images/boolean_image095.png,"",230} The result of *Section* operation is the compound that contains a new vertex *Vnew*. -@figure{/user_guides/boolean_operations/images/boolean_image096.png,"",230} +@figure{/specification/boolean_operations/images/boolean_image096.png,"",230} -@subsubsection occt_algorithms_10a_3_10 Case 10: An Edge and a Solid that have a common block +@subsubsection specification__boolean_10a_3_10 Case 10: An Edge and a Solid that have a common block Let us consider edge *E1* and solid *Z2*, that have a common block at a face: -@figure{/user_guides/boolean_operations/images/boolean_image097.png,"",230} +@figure{/specification/boolean_operations/images/boolean_image097.png,"",230} The result of *Section* operation is the compound that contains a new edge *Enew*. -@figure{/user_guides/boolean_operations/images/boolean_image098.png,"",230} +@figure{/specification/boolean_operations/images/boolean_image098.png,"",230} -@subsubsection occt_algorithms_10a_3_11 Case 11: Two intersecting faces +@subsubsection specification__boolean_10a_3_11 Case 11: Two intersecting faces Let us consider two intersecting faces *F1* and *F2*: -@figure{/user_guides/boolean_operations/images/boolean_image099.png,"",230} +@figure{/specification/boolean_operations/images/boolean_image099.png,"",230} The result of *Section* operation is the compound that contains a new edge *Enew*. -@figure{/user_guides/boolean_operations/images/boolean_image100.png,"",230} +@figure{/specification/boolean_operations/images/boolean_image100.png,"",230} -@subsubsection occt_algorithms_10a_3_12 Case 12: Two faces that have a common part +@subsubsection specification__boolean_10a_3_12 Case 12: Two faces that have a common part Let us consider two faces *F1* and *F2* that have a common part: -@figure{/user_guides/boolean_operations/images/boolean_image133.png,"",230} +@figure{/specification/boolean_operations/images/boolean_image133.png,"",230} The result of *Section* operation is the compound that contains 4 new edges. -@figure{/user_guides/boolean_operations/images/boolean_image134.png,"",230} +@figure{/specification/boolean_operations/images/boolean_image134.png,"",230} -@subsubsection occt_algorithms_10a_3_13 Case 13: Two faces that have overlapping edges +@subsubsection specification__boolean_10a_3_13 Case 13: Two faces that have overlapping edges Let us consider two faces *F1* and *F2* that have a overlapping edges: -@figure{/user_guides/boolean_operations/images/boolean_image101.png,"",230} +@figure{/specification/boolean_operations/images/boolean_image101.png,"",230} The result of *Section* operation is the compound that contains a new edge *Enew*. -@figure{/user_guides/boolean_operations/images/boolean_image102.png,"",230} +@figure{/specification/boolean_operations/images/boolean_image102.png,"",230} -@subsubsection occt_algorithms_10a_3_14 Case 14: Two faces that have overlapping vertices +@subsubsection specification__boolean_10a_3_14 Case 14: Two faces that have overlapping vertices Let us consider two faces *F1* and *F2* that have overlapping vertices: -@figure{/user_guides/boolean_operations/images/boolean_image103.png,"",230} +@figure{/specification/boolean_operations/images/boolean_image103.png,"",230} The result of *Section* operation is the compound that contains a new vertex *Vnew*. -@figure{/user_guides/boolean_operations/images/boolean_image104.png,"",230} +@figure{/specification/boolean_operations/images/boolean_image104.png,"",230} -@subsubsection occt_algorithms_10a_3_15 Case 15: A Face and a Solid that have an intersection curve +@subsubsection specification__boolean_10a_3_15 Case 15: A Face and a Solid that have an intersection curve Let us consider face *F1* and solid *Z2* that have an intersection curve: -@figure{/user_guides/boolean_operations/images/boolean_image105.png,"",230} +@figure{/specification/boolean_operations/images/boolean_image105.png,"",230} The result of *Section* operation is the compound that contains new edges. -@figure{/user_guides/boolean_operations/images/boolean_image106.png,"",230} +@figure{/specification/boolean_operations/images/boolean_image106.png,"",230} -@subsubsection occt_algorithms_10a_3_16 Case 16: A Face and a Solid that have overlapping faces. +@subsubsection specification__boolean_10a_3_16 Case 16: A Face and a Solid that have overlapping faces. Let us consider face *F1* and solid *Z2* that have overlapping faces: -@figure{/user_guides/boolean_operations/images/boolean_image107.png,"",230} +@figure{/specification/boolean_operations/images/boolean_image107.png,"",230} The result of *Section* operation is the compound that contains new edges -@figure{/user_guides/boolean_operations/images/boolean_image108.png,"",230} +@figure{/specification/boolean_operations/images/boolean_image108.png,"",230} -@subsubsection occt_algorithms_10a_3_17 Case 17: A Face and a Solid that have overlapping edges. +@subsubsection specification__boolean_10a_3_17 Case 17: A Face and a Solid that have overlapping edges. Let us consider face *F1* and solid *Z2* that have a common part on edge: -@figure{/user_guides/boolean_operations/images/boolean_image109.png,"",230} +@figure{/specification/boolean_operations/images/boolean_image109.png,"",230} The result of *Section* operation is the compound that contains a new edge *Enew*. -@figure{/user_guides/boolean_operations/images/boolean_image110.png,"",230} +@figure{/specification/boolean_operations/images/boolean_image110.png,"",230} -@subsubsection occt_algorithms_10a_3_18 Case 18: A Face and a Solid that have overlapping vertices. +@subsubsection specification__boolean_10a_3_18 Case 18: A Face and a Solid that have overlapping vertices. Let us consider face *F1* and solid *Z2* that have overlapping vertices: -@figure{/user_guides/boolean_operations/images/boolean_image111.png,"",230} +@figure{/specification/boolean_operations/images/boolean_image111.png,"",230} The result of *Section* operation is the compound that contains a new vertex *Vnew*. -@figure{/user_guides/boolean_operations/images/boolean_image112.png,"",230} +@figure{/specification/boolean_operations/images/boolean_image112.png,"",230} -@subsubsection occt_algorithms_10a_3_19 Case 19: Two intersecting Solids +@subsubsection specification__boolean_10a_3_19 Case 19: Two intersecting Solids Let us consider two intersecting solids *Z1* and *Z2*: -@figure{/user_guides/boolean_operations/images/boolean_image113.png,"",230} +@figure{/specification/boolean_operations/images/boolean_image113.png,"",230} The result of *Section* operation is the compound that contains new edges. -@figure{/user_guides/boolean_operations/images/boolean_image114.png,"",230} +@figure{/specification/boolean_operations/images/boolean_image114.png,"",230} -@subsubsection occt_algorithms_10a_3_20 Case 20: Two Solids that have overlapping faces +@subsubsection specification__boolean_10a_3_20 Case 20: Two Solids that have overlapping faces Let us consider two solids *Z1* and *Z2* that have a common part on face: -@figure{/user_guides/boolean_operations/images/boolean_image115.png,"",230} +@figure{/specification/boolean_operations/images/boolean_image115.png,"",230} The result of *Section* operation is the compound that contains new edges. -@figure{/user_guides/boolean_operations/images/boolean_image116.png,"",230} +@figure{/specification/boolean_operations/images/boolean_image116.png,"",230} -@subsubsection occt_algorithms_10a_3_21 Case 21: Two Solids that have overlapping edges +@subsubsection specification__boolean_10a_3_21 Case 21: Two Solids that have overlapping edges Let us consider two solids *Z1* and *Z2* that have overlapping edges: -@figure{/user_guides/boolean_operations/images/boolean_image117.png,"",230} +@figure{/specification/boolean_operations/images/boolean_image117.png,"",230} The result of *Section* operation is the compound that contains a new edge *Enew*. -@figure{/user_guides/boolean_operations/images/boolean_image118.png,"",230} +@figure{/specification/boolean_operations/images/boolean_image118.png,"",230} -@subsubsection occt_algorithms_10a_3_22 Case 22: Two Solids that have overlapping vertices +@subsubsection specification__boolean_10a_3_22 Case 22: Two Solids that have overlapping vertices Let us consider two solids *Z1* and *Z2* that have overlapping vertices: -@figure{/user_guides/boolean_operations/images/boolean_image119.png,"",230} +@figure{/specification/boolean_operations/images/boolean_image119.png,"",230} The result of *Section* operation is the compound that contains a new vertex *Vnew*. -@figure{/user_guides/boolean_operations/images/boolean_image120.png,"",230} +@figure{/specification/boolean_operations/images/boolean_image120.png,"",230} -@subsection occt_algorithms_10a_4 Class BOPAlgo_Section +@subsection specification__boolean_10a_4 Class BOPAlgo_Section SA is implemented in the class *BOPAlgo_Section*. The class has no specific fields. The main steps of the *BOPAlgo_Section* are the same as of *BOPAlgo_Builder* except for the following steps: @@ -2152,27 +2158,27 @@ The main steps of the *BOPAlgo_Section* are the same as of *BOPAlgo_Builder* ex * Build Images for Compounds; Some aspects of building the result are described in the next paragraph -@subsection occt_algorithms_10a_5 Building the Result +@subsection specification__boolean_10a_5 Building the Result | No | Contents | Implementation | | :---- | :---- | :------ | | 1 | Build the result of the operation using all information contained in *FaceInfo*, Common Block, Shared entities of the arguments, etc. | *BOPAlgo_Section:: BuildSection()* | -@section occt_algorithms_10b Volume Maker Algorithm +@section specification__boolean_10b Volume Maker Algorithm The Volume Maker algorithm has been designed for building the elementary volumes (solids) from a set of connected, intersecting, or nested shapes. The algorithm can also be useful for splitting solids into parts, or constructing new solid(s) from set of intersecting or connected faces or shells. The algorithm creates only closed solids. In general case the result solids are non-manifold: fragments of the input shapes (wires, faces) located inside the solids are added as internal sub-shapes to these solids. But the algorithm allows preventing the addition of the internal for solids parts into result. In this case the result solids will be manifold and not contain any internal parts. However, this option does not prevent from the occurrence of the internal edges or vertices in the faces.
Non-closed faces, free wires etc. located outside of any solid are always excluded from the result. -The Volume Maker algorithm is implemented in the class BOPAlgo_MakerVolume. It is based on the General Fuse (GF) algorithm. All the options of the GF algorithm (see @ref occt_algorithms_7_3a "GF Options") are also available in this algorithm. +The Volume Maker algorithm is implemented in the class BOPAlgo_MakerVolume. It is based on the General Fuse (GF) algorithm. All the options of the GF algorithm (see @ref specification__boolean_7_3a "GF Options") are also available in this algorithm. The requirements for the arguments are the same as for the arguments of GF algorithm - they could be of any type, but each argument should be valid and not self-interfered. The algorithm allows disabling the calculation of intersections among the arguments. In this case the algorithm will run much faster, but the user should guarantee that the arguments do not interfere with each other, otherwise the result will be invalid (e.g. contain unexpected parts) or empty. This option is useful e.g. for building a solid from the faces of one shell or from the shapes that have already been intersected. -@subsection occt_algorithms_10b_1 Usage +@subsection specification__boolean_10b_1 Usage #### C++ Level The usage of the algorithm on the API level: @@ -2208,15 +2214,15 @@ Options: -ai - use this option to avoid internal for solids shapes in the result. ~~~~ -@subsection occt_algorithms_10b_2 Examples +@subsection specification__boolean_10b_2 Examples #### Example 1 Creation of 9832 solids from sphere and set of 63 planes: - - + +
@figure{/user_guides/boolean_operations/images/mkvolume_image001.png,"Arguments",200}@figure{/user_guides/boolean_operations/images/mkvolume_image002.png,"Results",200}@figure{/specification/boolean_operations/images/mkvolume_image001.png,"Arguments",200}@figure{/specification/boolean_operations/images/mkvolume_image002.png,"Results",200}
@@ -2225,12 +2231,12 @@ Creating compartments on a ship defined by hull shell and a set of planes. The s - - + +
@figure{/user_guides/boolean_operations/images/mkvolume_image003.png,"Arguments",200}@figure{/user_guides/boolean_operations/images/mkvolume_image004.png,"Results",200}@figure{/specification/boolean_operations/images/mkvolume_image003.png,"Arguments",200}@figure{/specification/boolean_operations/images/mkvolume_image004.png,"Results",200}
-@section occt_algorithms_10c_Cells Cells Builder algorithm +@section specification__boolean_10c_Cells Cells Builder algorithm The Cells Builder algorithm is an extension of the General Fuse algorithm. The result of General Fuse algorithm contains all split parts of the arguments. The Cells Builder algorithm provides means to specify if any given split part of the arguments (referred to as Cell) can be taken or avoided in the result. @@ -2244,11 +2250,11 @@ The Cells Builder algorithm also provides the possibility to remove any internal The algorithm can also create containers from the connected Cells added into result - WIRES from Edges, SHELLS from Faces and COMPSOLIDS from Solids. -@subsection occt_algorithms_10c_Cells_1 Usage +@subsection specification__boolean_10c_Cells_1 Usage The algorithm has been implemented in the *BOPAlgo_CellsBuilder* class. -Cells Builder is based on the General Fuse algorithm. Thus all options of the General Fuse algorithm (see @ref occt_algorithms_7_3a "GF Options") are also available in this algorithm. +Cells Builder is based on the General Fuse algorithm. Thus all options of the General Fuse algorithm (see @ref specification__boolean_7_3a "GF Options") are also available in this algorithm. The requirements for the input shapes are the same as for General Fuse - each argument should be valid in terms of *BRepCheck_Analyzer* and *BOPAlgo_ArgumentAnalyzer*. @@ -2334,7 +2340,7 @@ bcadd res s1 1 s2 0 s3 1 -m 1 bcremoveint res ~~~~ -@subsection occt_algorithms_10c_Cells_2 Examples +@subsection specification__boolean_10c_Cells_2 Examples The following simple example illustrates the possibilities of the algorithm working on a cylinder and a sphere intersected by a plane: ~~~~ @@ -2345,7 +2351,7 @@ plane p 0 0 20 1 0 0 mkface f p -25 30 -17 17 ~~~~ -@figure{/user_guides/boolean_operations/images/cells_algorithm_001.png,"Arguments",160} +@figure{/specification/boolean_operations/images/cells_algorithm_001.png,"Arguments",160} ~~~~ bclearobjects @@ -2362,7 +2368,7 @@ bcremoveall bcadd res c 1 s 1 f 1 ~~~~ -@figure{/user_guides/boolean_operations/images/cells_algorithm_002.png,"The result of COMMON operation",126} +@figure{/specification/boolean_operations/images/cells_algorithm_002.png,"The result of COMMON operation",126} #### 2. Common between cylinder and face @@ -2371,7 +2377,7 @@ bcremoveall bcadd res f 1 c 1 ~~~~ -@figure{/user_guides/boolean_operations/images/cells_algorithm_003.png,"The result of COMMON operation between cylinder and face",90} +@figure{/specification/boolean_operations/images/cells_algorithm_003.png,"The result of COMMON operation between cylinder and face",90} #### 3. Common between cylinder and sphere @@ -2380,7 +2386,7 @@ bcremoveall bcadd res c 1 s 1 ~~~~ -@figure{/user_guides/boolean_operations/images/cells_algorithm_004.png,"The result of COMMON operation between cylinder and sphere",120} +@figure{/specification/boolean_operations/images/cells_algorithm_004.png,"The result of COMMON operation between cylinder and sphere",120} #### 4. Fuse of cylinder and sphere @@ -2391,7 +2397,7 @@ bcadd res s 1 -m 1 bcremoveint res ~~~~ -@figure{/user_guides/boolean_operations/images/cells_algorithm_005.png,"The result of FUSE operation between cylinder and sphere",160} +@figure{/specification/boolean_operations/images/cells_algorithm_005.png,"The result of FUSE operation between cylinder and sphere",160} #### 5. Parts of the face inside solids - FUSE(COMMON(f, c), COMMON(f, s)) @@ -2401,13 +2407,13 @@ bcadd res f 1 s 1 -m 1 bcadd res f 1 c 1 -m 1 ~~~~ -@figure{/user_guides/boolean_operations/images/cells_algorithm_006_1.png,"Parts of the face inside solids",160} +@figure{/specification/boolean_operations/images/cells_algorithm_006_1.png,"Parts of the face inside solids",160} ~~~~ bcremoveint res ~~~~ -@figure{/user_guides/boolean_operations/images/cells_algorithm_006_2.png,"Unified parts of the face inside solids",160} +@figure{/specification/boolean_operations/images/cells_algorithm_006_2.png,"Unified parts of the face inside solids",160} #### 6. Part of the face outside solids @@ -2416,7 +2422,7 @@ bcremoveall bcadd res f 1 c 0 s 0 ~~~~ -@figure{/user_guides/boolean_operations/images/cells_algorithm_007.png,"Part of the face outside solids",160} +@figure{/specification/boolean_operations/images/cells_algorithm_007.png,"Part of the face outside solids",160} #### 7. Fuse operation (impossible using standard Boolean Fuse operation) @@ -2428,13 +2434,13 @@ bcadd res f 1 c 0 s 0 bcremoveint res ~~~~ -@figure{/user_guides/boolean_operations/images/cells_algorithm_008.png,"Fuse operation",160} +@figure{/specification/boolean_operations/images/cells_algorithm_008.png,"Fuse operation",160} These examples may last forever. To define any new operation, it is just necessary to define, which Cells should be taken and which should be avoided. -@section occt_algorithms_10 Algorithm Limitations +@section specification__boolean_10 Algorithm Limitations The chapter describes the problems that are considered as Algorithm limitations. In most cases an Algorithm failure is caused by a combination of various factors, such as self-interfered arguments, inappropriate or ungrounded values of the argument tolerances, adverse mutual position of the arguments, tangency, etc. @@ -2446,9 +2452,9 @@ A lot of failures of GFA algorithm can be caused by bugs in low-level algorithms The description below illustrates some known GFA limitations. It does not enumerate exhaustively all problems that can arise in practice. Please address cases of Algorithm failure to the OCCT Maintenance Service. -@subsection occt_algorithms_10_1 Arguments +@subsection specification__boolean_10_1 Arguments -@subsubsection occt_algorithms_10_1_1 Common requirements +@subsubsection specification__boolean_10_1_1 Common requirements Each argument should be valid (in terms of *BRepCheck_Analyzer*), or conversely, if the argument is considered as non-valid (in terms of *BRepCheck_Analyzer*), it cannot be used as an argument of the algorithm. @@ -2470,87 +2476,87 @@ Thus, if *E1* is recognized by the Analyzer as non-valid, edge *E* should also The fact that the argument is a valid shape (in terms of *BRepCheck_Analyzer*) is a necessary but insufficient requirement to produce a valid result of the Algorithms. -@subsubsection occt_algorithms_10_1_3 Pure self-interference +@subsubsection specification__boolean_10_1_3 Pure self-interference The argument should not be self-interfered, i.e. all sub-shapes of the argument that have geometrical coincidence through any topological entities (vertices, edges, faces) should share these entities. #### Example 1: Compound of two edges The compound of two edges *E1* and *E2* is a self-interfered shape and cannot be used as the argument of the Algorithms. -@figure{/user_guides/boolean_operations/images/operations_image036.svg,"Compound of two edges",230} +@figure{/specification/boolean_operations/images/operations_image036.svg,"Compound of two edges",230} #### Example 2: Self-interfered Edge The edge *E* is a self-interfered shape and cannot be used as an argument of the Algorithms. -@figure{/user_guides/boolean_operations/images/operations_image037.svg,"Self-interfered Edge",140} +@figure{/specification/boolean_operations/images/operations_image037.svg,"Self-interfered Edge",140} #### Example 3: Self-interfered Face The face *F* is a self-interfered shape and cannot be used as an argument of the Algorithms. -@figure{/user_guides/boolean_operations/images/operations_image038.svg,"Self-interfered Face",230} +@figure{/specification/boolean_operations/images/operations_image038.svg,"Self-interfered Face",230} #### Example 4: Face of Revolution The face *F* has been obtained by revolution of edge *E* around line *L*. -@figure{/user_guides/boolean_operations/images/operations_image039a.png,"Face of Revolution: Arguments",230} -@figure{/user_guides/boolean_operations/images/operations_image039b.png,"Face of Revolution: Result",230} +@figure{/specification/boolean_operations/images/operations_image039a.png,"Face of Revolution: Arguments",230} +@figure{/specification/boolean_operations/images/operations_image039b.png,"Face of Revolution: Result",230} In spite of the fact that face *F* is valid (in terms of *BRepCheck_Analyzer*) it is a self-interfered shape and cannot be used as the argument of the Algorithms. -@subsubsection occt_algorithms_10_1_4 Self-interferences due to tolerances +@subsubsection specification__boolean_10_1_4 Self-interferences due to tolerances #### Example 1: Non-closed Edge -Let us consider edge *E* based on a non-closed circle. @figure{/user_guides/boolean_operations/images/operations_image040.png,"Edge based on a non-closed circle",230} +Let us consider edge *E* based on a non-closed circle. @figure{/specification/boolean_operations/images/operations_image040.png,"Edge based on a non-closed circle",230} The distance between the vertices of *E* is *D=0.69799*. The values of the tolerances *Tol(V1)=Tol(V2)=0.5*. -@figure{/user_guides/boolean_operations/images/operations_image041.png,"Distance and Tolerances",230} +@figure{/specification/boolean_operations/images/operations_image041.png,"Distance and Tolerances",230} In spite of the fact that the edge *E* is valid in terms of *BRepCheck_Analyzer*, it is a self-interfered shape because its vertices are interfered. Thus, edge *E* cannot be used as an argument of the Algorithms. #### Example 2: Solid containing an interfered vertex -Let us consider solid *S* containing vertex V. @figure{/user_guides/boolean_operations/images/operations_image042.png,"Solid containing an interfered vertex",230} +Let us consider solid *S* containing vertex V. @figure{/specification/boolean_operations/images/operations_image042.png,"Solid containing an interfered vertex",230} The value of tolerance Tol(V)= 50.000075982061. -@figure{/user_guides/boolean_operations/images/operations_image043.png,"Tolerance",230} +@figure{/specification/boolean_operations/images/operations_image043.png,"Tolerance",230} In spite of the fact that solid *S* is valid in terms of *BRepCheck_Analyzer* it is a self-interfered shape because vertex *V* is interfered with a lot of sub-shapes from *S* without any topological connection with them. Thus solid *S* cannot be used as an argument of the Algorithms. -@subsubsection occt_algorithms_10_1_5 Parametric representation +@subsubsection specification__boolean_10_1_5 Parametric representation The parameterization of some surfaces (cylinder, cone, surface of revolution) can be the cause of limitation. #### Example 1: Cylindrical surface The parameterization range for cylindrical surface is: -@figure{/user_guides/boolean_operations/images/boolean_image135.png,"",230} +@figure{/specification/boolean_operations/images/boolean_image135.png,"",230} The range of *U* coordinate is always restricted while the range of *V* coordinate is non-restricted. Let us consider a cylinder-based *Face 1* with radii *R=3* and *H=6*. -@figure{/user_guides/boolean_operations/images/operations_image044.png,"Face 1",230} +@figure{/specification/boolean_operations/images/operations_image044.png,"Face 1",230} -@figure{/user_guides/boolean_operations/images/operations_image045.png,"P-Curves for Face 1",230} +@figure{/specification/boolean_operations/images/operations_image045.png,"P-Curves for Face 1",230} Let us also consider a cylinder-based *Face 2* with radii *R=3000* and *H=6000* (resulting from scaling Face 1 with scale factor *ScF=1000*). -@figure{/user_guides/boolean_operations/images/operations_image046.png,"Face 2",230} +@figure{/specification/boolean_operations/images/operations_image046.png,"Face 2",230} -@figure{/user_guides/boolean_operations/images/operations_image047.png,"P-Curves for Face 2",230} +@figure{/specification/boolean_operations/images/operations_image047.png,"P-Curves for Face 2",230} Pay attention to the Zoom value of the Figures. It is obvious that starting with some value of *ScF*, e.g. *ScF>1000000*, all sloped p-Curves on *Face 2* will be almost vertical. At least, there will be no difference between the values of angles computed by standard C Run-Time Library functions, such as *double acos(double x)*. The loss of accuracy in computation of angles can cause failure of some BP sub-algorithms, such as building faces from a set of edges or building solids from a set of faces. -@subsubsection occt_algorithms_10_1_6 Using tolerances of vertices to fix gaps +@subsubsection specification__boolean_10_1_6 Using tolerances of vertices to fix gaps It is possible to create shapes that use sub-shapes of lower order to avoid gaps in the tolerance-based data model. Let us consider the following example: -@figure{/user_guides/boolean_operations/images/operations_image048.png,"Example",230} +@figure{/specification/boolean_operations/images/operations_image048.png,"Example",230} * Face *F* has two edges *E1* and *E2* and two vertices, the base plane is {0,0,0, 0,0,1}; * Edge *E1* is based on line {0,0,0, 1,0,0}, Tol(E1) = 1.e-7; @@ -2562,8 +2568,8 @@ Let us consider the following example: The values of tolerances *Tol(V1)* and *Tol(V2)* are big enough to fix the gaps between the ends of the edges, but the vertices *V1* and *V2* do not contain any information about the trajectories connecting the corresponding ends of the edges. Thus, the trajectories are undefined. This will cause failure of some sub-algorithms of BP. For example, the sub-algorithms for building faces from a set of edges use the information about all edges connected in a vertex. The situation when a vertex has several pairs of edges such as above will not be solved in a right way. -@subsection occt_algorithms_11_1 Intersection problems -@subsubsection occt_algorithms_11_1_1 Pure intersections and common zones +@subsection specification__boolean_11_1 Intersection problems +@subsubsection specification__boolean_11_1_1 Pure intersections and common zones #### Example: Intersecting Edges @@ -2571,7 +2577,7 @@ Let us consider the intersection between two edges: * *E1* is based on a line: {0,-10,0, 1,0,0}, Tol(E1)=2. * *E2* is based on a circle: {0,0,0, 0,0,1}, R=10, Tol(E2)=2. -@figure{/user_guides/boolean_operations/images/operations_image049.png,"Intersecting Edges",320} +@figure{/specification/boolean_operations/images/operations_image049.png,"Intersecting Edges",320} The result of pure intersection between *E1* and *E2* is vertex *Vx {0,-10,0}*. @@ -2581,7 +2587,7 @@ The Intersection Part of Algorithms uses the result of pure intersection *Vx* in * The Algorithms do not produce Common Blocks between edges based on underlying curves of explicitly different type (e.g. Line / Circle). If the curves have different types, the rule of thumb is that the produced result is of type **vertex**. This rule does not work for non-analytic curves (Bezier, B-Spline) and their combinations with analytic curves. * The algorithm of intersection between two surfaces *IntPatch_Intersection* does not compute *CZ* of the intersection between curves and points. So even if *CZ* were computed by Edge/Edge intersection algorithm, its result could not be treated by Face/Face intersection algorithm. -@subsubsection occt_algorithms_11_2_2 Tolerances and inaccuracies +@subsubsection specification__boolean_11_2_2 Tolerances and inaccuracies The following limitations result from modeling errors or inaccuracies. @@ -2591,7 +2597,7 @@ Let us consider two planar rectangular faces *F1* and *F2*. The intersection curve between the planes is curve *C12*. The curve produces a new intersection edge *EC12*. The edge goes through vertices *V1* and *V2* thanks to big tolerance values of vertices *Tol(V1)* and *Tol(V2)*. So, two straight edges *E12* and *EC12* go through two vertices, which is impossible in this case. -@figure{/user_guides/boolean_operations/images/operations_image050.svg,"Intersecting Faces",320} +@figure{/specification/boolean_operations/images/operations_image050.svg,"Intersecting Faces",320} The problem cannot be solved in general, because the length of *E12* can be infinite and the values of *Tol(V1)* and *Tol(V2)* theoretically can be infinite too. @@ -2608,11 +2614,11 @@ Let us consider two edges *E1* and *E2*, which have common vertices *V1* and *V2 *C1* practically coincides in 3D with *C2*. The value of deflection is *Dmax* (e.g. *Dmax=1.e-6*). -@figure{/user_guides/boolean_operations/images/operations_image051.svg,"Intersecting Edges",420} +@figure{/specification/boolean_operations/images/operations_image051.svg,"Intersecting Edges",420} The evident and prospective result should be the Common Block between *E1* and *E2*. However, the result of intersection differs. -@figure{/user_guides/boolean_operations/images/operations_image052.svg,"Result of Intersection",420} +@figure{/specification/boolean_operations/images/operations_image052.svg,"Result of Intersection",420} The result contains three new vertices *Vx1, Vx2* and *Vx3*, 8 new edges (V1, Vx1, Vx2, Vx3, V2) and no Common Blocks. This is correct due to the source data: *Tol(E1)=1.e-7, Tol(E2)=1.e-7* and Dmax=1.e-6. @@ -2622,17 +2628,17 @@ In this particular case the problem can be solved by several ways: The example can be extended from 1D (edges) to 2D (faces). -@figure{/user_guides/boolean_operations/images/operations_image053.svg,"Intersecting Faces",420} +@figure{/specification/boolean_operations/images/operations_image053.svg,"Intersecting Faces",420} The comments and recommendations are the same as for 1D case above. -@subsubsection occt_algorithms_11_2_3 Acquired Self-interferences +@subsubsection specification__boolean_11_2_3 Acquired Self-interferences #### Example 1: Vertex and edge Let us consider vertex *V1* and edge *E2*. -@figure{/user_guides/boolean_operations/images/operations_image054.svg,"Vertex and Edge",171} +@figure{/specification/boolean_operations/images/operations_image054.svg,"Vertex and Edge",171} Vertex *V1* interferes with vertices *V12* and *V22*. So vertex *V21* should interfere with vertex *V22*, which is impossible because vertices *V21* and *V22* are the vertices of edge *E2*, thus *V21* is not equal to *V22*. @@ -2645,20 +2651,20 @@ In a particular case the problem can be solved by refinement of arguments, i.e. Let us consider vertex *V2* and wire consisting of edges *E11* and *E12*. -@figure{/user_guides/boolean_operations/images/operations_image055.svg,"Vertex and Wire",200} +@figure{/specification/boolean_operations/images/operations_image055.svg,"Vertex and Wire",200} The arguments themselves are not self-intersected. Vertex *V2* interferes with edges *E11* and *E12*. Thus, edge *E11* should interfere with edge *E22*, but it is impossible because edges *E11* and *E12* cannot interfere by the condition. The cases when a non-self-interfered argument (or its sub-shapes) become interfered due to the intersections with other arguments (or their sub-shapes) are considered as limitations for the Algorithms. -@section occt_algorithms_11a Advanced Options +@section specification__boolean_11a Advanced Options The previous chapters describe so called Basic Operations. Most of tasks can be solved using Basic Operations. Nonetheless, there are cases that can not be solved straightforwardly by Basic Operations. The tasks are considered as limitations of Basic Operations. The chapter is devoted to Advanced Options. In some cases the usage of Advanced Options allows overcoming the limitations, improving the quality of the result of operations, robustness and performance of the operators themselves. -@subsection occt_algorithms_11a_1 Fuzzy Boolean Operation +@subsection specification__boolean_11a_1 Fuzzy Boolean Operation Fuzzy Boolean operation is the option of Basic Operations such as General Fuse, Splitting, Boolean, Section, Maker Volume and Cells building operations, in which additional user-specified tolerance is used. This option allows operators to handle robustly cases of touching and near-coincident, misaligned entities of the arguments. @@ -2670,20 +2676,20 @@ With the Fuzzy option it is possible to get the expected result -- it is just ne Fuzzy option is included in interface of Intersection Part (class *BOPAlgo_PaveFiller*) and application programming interface (class *BRepAlgoAPI_BooleanOperation*) -@subsubsection occt_algorithms_11a_1_1 Examples +@subsubsection specification__boolean_11a_1_1 Examples The following examples demonstrate the advantages of usage Fuzzy option operations over the Basic Operations in typical situations. #### Case 1 In this example the cylinder (shown in yellow and transparent) is subtracted from the box (shown in red). The cylinder is shifted by 5e-5 relatively to the box along its axis (the distance between rear faces of the box and cylinder is 5e-5). -@figure{/user_guides/boolean_operations/images/boolean_image121.png,"",240} +@figure{/specification/boolean_operations/images/boolean_image121.png,"",240} The following results are obtained using Basic Operations and the Fuzzy ones with the fuzzy value 5e-5: -@figure{/user_guides/boolean_operations/images/boolean_image122.png,"Result of CUT operation obtained with Basic Operations",240} +@figure{/specification/boolean_operations/images/boolean_image122.png,"Result of CUT operation obtained with Basic Operations",240} -@figure{/user_guides/boolean_operations/images/boolean_image123.png,"Result of CUT operation obtained with Fuzzy Option",240} +@figure{/specification/boolean_operations/images/boolean_image123.png,"Result of CUT operation obtained with Fuzzy Option",240} In this example Fuzzy option allows eliminating a very thin part of the result shape produced by Basic algorithm due to misalignment of rear faces of the box and the cylinder. @@ -2691,13 +2697,13 @@ In this example Fuzzy option allows eliminating a very thin part of the result s In this example two boxes are fused. One of them has dimensions 10*10*10, and the other is 10*10.000001*10.000001 and adjacent to the first one. There is no gap in this case as the surfaces of the neighboring faces coincide, but one box is slightly greater than the other. -@figure{/user_guides/boolean_operations/images/boolean_image124.png,"",240} +@figure{/specification/boolean_operations/images/boolean_image124.png,"",240} The following results are obtained using Basic Operations and the Fuzzy ones with the fuzzy value 1e-6: -@figure{/user_guides/boolean_operations/images/boolean_image125.png,"Result of CUT operation obtained with Basic Operations",240} +@figure{/specification/boolean_operations/images/boolean_image125.png,"Result of CUT operation obtained with Basic Operations",240} -@figure{/user_guides/boolean_operations/images/boolean_image126.png,"Result of CUT operation obtained with Fuzzy Option",240} +@figure{/specification/boolean_operations/images/boolean_image126.png,"Result of CUT operation obtained with Fuzzy Option",240} In this example Fuzzy option allows eliminating an extremely narrow face in the result produced by Basic operation. @@ -2705,13 +2711,13 @@ In this example Fuzzy option allows eliminating an extremely narrow face in the In this example the small planar face (shown in orange) is subtracted from the big one (shown in yellow). There is a gap 1e-5 between the edges of these faces. -@figure{/user_guides/boolean_operations/images/boolean_image127.png,"",240} +@figure{/specification/boolean_operations/images/boolean_image127.png,"",240} The following results are obtained using Basic Operations and the Fuzzy ones with the fuzzy value 1e-5: -@figure{/user_guides/boolean_operations/images/boolean_image128.png,"Result of CUT operation obtained with Basic Operations",240} +@figure{/specification/boolean_operations/images/boolean_image128.png,"Result of CUT operation obtained with Basic Operations",240} -@figure{/user_guides/boolean_operations/images/boolean_image129.png,"Result of CUT operation obtained with Fuzzy Option",240} +@figure{/specification/boolean_operations/images/boolean_image129.png,"Result of CUT operation obtained with Fuzzy Option",240} In this example Fuzzy options eliminated a pin-like protrusion resulting from the gap between edges of the argument faces. @@ -2719,33 +2725,33 @@ In this example Fuzzy options eliminated a pin-like protrusion resulting from th In this example the small edge is subtracted from the big one. The edges are overlapping not precisely, with max deviation between them equal to 5.28004e-5. We will use 6e-5 value for Fuzzy option. -@figure{/user_guides/boolean_operations/images/boolean_image130.png,"",240} +@figure{/specification/boolean_operations/images/boolean_image130.png,"",240} The following results are obtained using Basic Operations and the Fuzzy ones with the fuzzy value 6e-5: -@figure{/user_guides/boolean_operations/images/boolean_image131.png,"Result of CUT operation obtained with Basic Operations",240} +@figure{/specification/boolean_operations/images/boolean_image131.png,"Result of CUT operation obtained with Basic Operations",240} -@figure{/user_guides/boolean_operations/images/boolean_image132.png,"Result of CUT operation obtained with Fuzzy Option",240} +@figure{/specification/boolean_operations/images/boolean_image132.png,"Result of CUT operation obtained with Fuzzy Option",240} This example stresses not only the validity, but also the performance issue. The usage of Fuzzy option with the appropriate value allows processing the case much faster than with the pure Basic operation. The performance gain for the case is 45 (Processor: Intel(R) Core(TM) i5-3450 CPU @ 3.10 GHz). -@subsection occt_algorithms_11a_2 Gluing Operation +@subsection specification__boolean_11a_2 Gluing Operation The Gluing operation is the option of the Basic Operations such as General Fuse, Splitting, Boolean, Section, Maker Volume and Cells building operations. It has been designed to speed up the computation of the interferences among arguments of the operations on special cases, in which the arguments may be overlapping but do not have real intersections between their sub-shapes. This option cannot be used on the shapes having real intersections, like intersection vertex between edges, or intersection vertex between edge and a face or intersection line between faces: -@figure{/user_guides/boolean_operations/images/glue_options_image002.png,"Intersecting faces",240} +@figure{/specification/boolean_operations/images/glue_options_image002.png,"Intersecting faces",240} There are two possibilities of overlapping shapes: * The shapes can be partially coinciding - the faces do not have intersection curves, but overlapping. The faces of such arguments will be split during the operation. The following picture illustrates such shapes: -@figure{/user_guides/boolean_operations/images/glue_options_image001.png,"Partially coinciding faces",240} +@figure{/specification/boolean_operations/images/glue_options_image001.png,"Partially coinciding faces",240} * The shapes can be fully coinciding - there should be no partial overlapping of the faces, thus no intersection of type EDGE/FACE at all. In such cases the faces will not be split during the operation. -@figure{/user_guides/boolean_operations/images/glue_options_image003.png,"Full coinciding faces of the boxes",240} +@figure{/specification/boolean_operations/images/glue_options_image003.png,"Full coinciding faces of the boxes",240} Thus, there are two possible options - for full and partial coincidence of the shapes. @@ -2757,7 +2763,7 @@ The performance improvement in gluing mode is achieved by excluding the most tim By setting the Gluing option for the operation user should guarantee that the arguments are really coinciding. The algorithm does not check this itself. Setting inappropriate option for the operation is likely to lead to incorrect result. -@subsubsection occt_algorithms_11a_2_1 Usage +@subsubsection specification__boolean_11a_2_1 Usage The Gluing option is an enumeration implemented in BOPAlgo_GlueEnum.hxx: * BOPAlgo_GlueOff - default value for the algorithms, Gluing is switched off; @@ -2786,20 +2792,20 @@ For setting the Gluing options in DRAW it is necessary to call the bglue bglue 1 ~~~~ -@subsubsection occt_algorithms_11a_2_2 Examples +@subsubsection specification__boolean_11a_2_2 Examples #### Case1 - Fusing the 64 bspline boxes into one solid -@figure{/user_guides/boolean_operations/images/glue_options_image004.png,"BSpline Boxes with partial coincidence",240} +@figure{/specification/boolean_operations/images/glue_options_image004.png,"BSpline Boxes with partial coincidence",240} Performance improvement from using the GlueShift option in this case is about 70 percent. #### Case2 - Sewing faces of the shape after reading from IGES -@figure{/user_guides/boolean_operations/images/glue_options_image005.png,"Faces with coinciding but not shared edges",240} +@figure{/specification/boolean_operations/images/glue_options_image005.png,"Faces with coinciding but not shared edges",240} Performance improvement in this case is also about 70 percent. -@subsection occt_algorithms_11a_3 Safe processing mode +@subsection specification__boolean_11a_3 Safe processing mode The safe processing mode is the advanced option in Boolean Operation component. This mode can be applied to all Basic operations such as General Fuse, Splitting, Boolean, Section, Maker Volume, Cells building. This option allows keeping the input arguments untouched. In other words, switching this option on prevents the input arguments from any modification such as tolerance increase, addition of the P-Curves on edges, etc. @@ -2810,7 +2816,7 @@ By default the safe processing option is switched off for the algorithms. Enabli The option is also available in the Intersection algorithm - *BOPAlgo_PaveFiller*. To perform several different operations on the same arguments, the safe processing mode can be enabled in PaveFiller, prepared only once and then used in operations. It is enough to set this option to PaveFiller only and all algorithms taking this PaveFiller will also work in the safe mode. -@subsubsection occt_algorithms_11a_3_1 Usage +@subsubsection specification__boolean_11a_3_1 Usage #### API level @@ -2834,14 +2840,14 @@ To enable the safe processing mode for the operation in DRAW, it is necessary to bnondestructive 1 ~~~~ -@subsection occt_algorithms_11a_4 How to disable check of input solids for inverted status +@subsection specification__boolean_11a_4 How to disable check of input solids for inverted status By default, all input solids are checked for inverted status, i.e. the solids are classified to understand if they are holes in the space (negative volumes) or normal solids (positive volumes). The possibility to disable the check of the input solids for inverted status is the advanced option in Boolean Operation component. This option can be applied to all Basic operations, such as General Fuse, Splitting, Boolean, Section, Maker Volume and Cells building. This option allows avoiding time-consuming classification of the input solids and processing them in the same way as positive volumes, saving up to 10 percent of time on the cases with a big number of input solids. The classification should be disabled only if the user is sure that there are no negative volumes among the input solids, otherwise the result may be invalid. -@subsubsection occt_algorithms_11a_4_1 Usage +@subsubsection specification__boolean_11a_4_1 Usage #### API level @@ -2865,11 +2871,11 @@ To enable/disable the classification of the solids in DRAW, it is necessary to c bcheckinverted 0 ~~~~ -@subsection occt_algorithms_11a_5_obb Usage of Oriented Bounding Boxes +@subsection specification__boolean_11a_5_obb Usage of Oriented Bounding Boxes Since Oriented Bounding Boxes are usually much tighter than Axes Aligned Bounding Boxes (for more information on OBB see the @ref occt_modat_6 "Bounding boxes" chapter of Modeling data User guide) its usage can significantly speed-up the intersection stage of the operation by reducing the number of interfering objects. -@subsubsection occt_algorithms_11a_5_obb_1 Usage +@subsubsection specification__boolean_11a_5_obb_1 Usage #### API level To enable/disable the usage of OBB in the operation it is necessary to call the *SetUseOBB()* method with the approriate value: @@ -2891,7 +2897,7 @@ To enable/disable the usage of OBB in the operation in DRAW it is necessary to c buseobb 1 ~~~~ -@section occt_algorithms_ers Errors and warnings reporting system +@section specification__boolean_ers Errors and warnings reporting system The chapter describes the Error/Warning reporting system of the algorithms in the Boolean Component. @@ -2944,7 +2950,7 @@ Warning: The positioning of the shapes leads to creation of small edges without ~~~~ -@section occt_algorithms_history History Information +@section specification__boolean_history History Information All operations in Boolean Component support @ref occt_modalg_hist "History information". This chapter describes how the History is filled for these operations. @@ -2960,11 +2966,11 @@ have been obtained as a result of pure intersection (not overlapping) of this sh So, only EDGES and FACES could have information about Generated shapes. For all other types of shapes the list of Generated shapes will be empty. -@subsection occt_algorithms_history_ex Examples +@subsection specification__boolean_history_ex Examples Here are some examples illustrating the History information. -@subsubsection occt_algorithms_history_ex_del Deleted shapes +@subsubsection specification__boolean_history_ex_del Deleted shapes The result of CUT operation of two overlapping planar faces (see the example below) does not contain any parts from the tool face. Thus, the tool face is considered as Deleted. If the faces are not fully coinciding, the result must contain some parts of the object face. In this case object face will be considered as not deleted. @@ -2992,7 +2998,7 @@ isdeleted cut_hist f2 # Deleted ~~~~ -@subsubsection occt_algorithms_history_ex_modif Modified shapes +@subsubsection specification__boolean_history_ex_modif Modified shapes In the FUSE operation of two edges intersecting in one point (see the example below), both edges will be split by the intersection point. All these splits will be contained in the result. Thus, each of the input edges will be Modified into its two splits. @@ -3039,7 +3045,7 @@ modified m2 cut_hist e2 ~~~~ -@subsubsection occt_algorithms_history_gen Generated shapes +@subsubsection specification__boolean_history_gen Generated shapes Two intersecting edges will both have the intersection vertices Generated from them. @@ -3085,7 +3091,7 @@ generated gf2 com_hist f2 ~~~~ -@section occt_algorithms_simplification BOP result simplification +@section specification__boolean_simplification BOP result simplification The API algorithms implementing Boolean Operations provide possibility to simplify the result shape by unification of the connected tangential edges and faces. This simplification is performed by the method *SimplifyResult* which is implemented in the class *BRepAlgoAPI_BuilderAlgo* (General Fuse operation). @@ -3105,7 +3111,7 @@ Some options of the main operation are passed into the Unifier: For controlling this possibility in DRAW the command **bsimplify** has been implemented. See the @ref occt_draw_bop_options "Boolean Operations options" chapter in draw user guide. -@subsection occt_algorithms_simplification_examples Examples +@subsection specification__boolean_simplification_examples Examples Here is the simple example of simplification of the result of Fuse operation of two boxes: @@ -3124,17 +3130,17 @@ bapibop r 1 - - + +
@figure{/user_guides/boolean_operations/images/bop_simple_001.png, "Not simplified result", 420}@figure{/user_guides/boolean_operations/images/bop_simple_002.png, "Simplified result", 420}@figure{/specification/boolean_operations/images/bop_simple_001.png, "Not simplified result", 420}@figure{/specification/boolean_operations/images/bop_simple_002.png, "Simplified result", 420}
-@section occt_algorithms_11b Usage +@section specification__boolean_11b Usage The chapter contains some examples of the OCCT Boolean Component usage. The usage is possible on two levels: C++ and Tcl. -@subsection occt_algorithms_11b_1 Package BRepAlgoAPI +@subsection specification__boolean_11b_1 Package BRepAlgoAPI The package *BRepAlgoAPI* provides the Application Programming Interface of the Boolean Component. @@ -3148,11 +3154,11 @@ The package consists of the following classes: * *BRepAlgoAPI_Cut* -- the class provides Boolean cut operation. * *BRepAlgoAPI_Section* -- the class provides Boolean section operation. -@figure{/user_guides/boolean_operations/images/operations_image065.png,"Diagram of BRepAlgoAPI package",420} +@figure{/specification/boolean_operations/images/operations_image065.png,"Diagram of BRepAlgoAPI package",420} The detailed description of the classes can be found in the corresponding .hxx files. The examples are below in this chapter. -@subsection occt_algorithms_11b_2 Package BOPTest +@subsection specification__boolean_11b_2 Package BOPTest The package *BOPTest* provides the usage of the Boolean Component on Tcl level. The method *BOPTest::APICommands* contains corresponding Tcl commands: * *bapibuild* -- for General Fuse Operator; @@ -3161,7 +3167,7 @@ The package *BOPTest* provides the usage of the Boolean Component on Tcl level. The examples of how to use the commands are below in this chapter. -@subsubsection occt_algorithms_11b_2_1 Case 1. General Fuse operation +@subsubsection specification__boolean_11b_2_1 Case 1. General Fuse operation The following example illustrates how to use General Fuse operator: @@ -3219,7 +3225,7 @@ baddobjects b1 b2 b3 bapibuild r ~~~~ -@subsubsection occt_algorithms_11b_2_2 Case 2. Splitting operation +@subsubsection specification__boolean_11b_2_2 Case 2. Splitting operation The following example illustrates how to use the Splitter operator: @@ -3285,7 +3291,7 @@ baddtools f bapisplit r ~~~~ -@subsubsection occt_algorithms_11b_2_3 Case 3. Common operation +@subsubsection specification__boolean_11b_2_3 Case 3. Common operation The following example illustrates how to use Common operation: @@ -3352,7 +3358,7 @@ baddtools b2 bapibop r 0 ~~~~ -@subsubsection occt_algorithms_11b_2_4 Case 4. Fuse operation +@subsubsection specification__boolean_11b_2_4 Case 4. Fuse operation The following example illustrates how to use Fuse operation: @@ -3419,7 +3425,7 @@ baddtools b2 bapibop r 1 ~~~~ -@subsubsection occt_algorithms_11b_2_5 Case 5. Cut operation +@subsubsection specification__boolean_11b_2_5 Case 5. Cut operation The following example illustrates how to use Cut operation: @@ -3487,7 +3493,7 @@ bapibop r 2 ~~~~ -@subsubsection occt_algorithms_11b_2_6 Case 6. Section operation +@subsubsection specification__boolean_11b_2_6 Case 6. Section operation The following example illustrates how to use Section operation: diff --git a/dox/user_guides/boolean_operations/images/boolean_image001.svg b/dox/specification/boolean_operations/images/boolean_image001.svg similarity index 100% rename from dox/user_guides/boolean_operations/images/boolean_image001.svg rename to dox/specification/boolean_operations/images/boolean_image001.svg diff --git a/dox/user_guides/boolean_operations/images/boolean_image002.svg b/dox/specification/boolean_operations/images/boolean_image002.svg similarity index 100% rename from dox/user_guides/boolean_operations/images/boolean_image002.svg rename to dox/specification/boolean_operations/images/boolean_image002.svg diff --git a/dox/user_guides/boolean_operations/images/boolean_image004.png b/dox/specification/boolean_operations/images/boolean_image004.png similarity index 100% rename from dox/user_guides/boolean_operations/images/boolean_image004.png rename to dox/specification/boolean_operations/images/boolean_image004.png diff --git a/dox/user_guides/boolean_operations/images/boolean_image005.png b/dox/specification/boolean_operations/images/boolean_image005.png similarity index 100% rename from dox/user_guides/boolean_operations/images/boolean_image005.png rename to dox/specification/boolean_operations/images/boolean_image005.png diff --git a/dox/user_guides/boolean_operations/images/boolean_image006.png b/dox/specification/boolean_operations/images/boolean_image006.png similarity index 100% rename from dox/user_guides/boolean_operations/images/boolean_image006.png rename to dox/specification/boolean_operations/images/boolean_image006.png diff --git a/dox/user_guides/boolean_operations/images/boolean_image007.png b/dox/specification/boolean_operations/images/boolean_image007.png similarity index 100% rename from dox/user_guides/boolean_operations/images/boolean_image007.png rename to dox/specification/boolean_operations/images/boolean_image007.png diff --git a/dox/user_guides/boolean_operations/images/boolean_image008.png b/dox/specification/boolean_operations/images/boolean_image008.png similarity index 100% rename from dox/user_guides/boolean_operations/images/boolean_image008.png rename to dox/specification/boolean_operations/images/boolean_image008.png diff --git a/dox/user_guides/boolean_operations/images/boolean_image009.png b/dox/specification/boolean_operations/images/boolean_image009.png similarity index 100% rename from dox/user_guides/boolean_operations/images/boolean_image009.png rename to dox/specification/boolean_operations/images/boolean_image009.png diff --git a/dox/user_guides/boolean_operations/images/boolean_image010.svg b/dox/specification/boolean_operations/images/boolean_image010.svg similarity index 100% rename from dox/user_guides/boolean_operations/images/boolean_image010.svg rename to dox/specification/boolean_operations/images/boolean_image010.svg diff --git a/dox/user_guides/boolean_operations/images/boolean_image011.svg b/dox/specification/boolean_operations/images/boolean_image011.svg similarity index 100% rename from dox/user_guides/boolean_operations/images/boolean_image011.svg rename to dox/specification/boolean_operations/images/boolean_image011.svg diff --git a/dox/user_guides/boolean_operations/images/boolean_image012.svg b/dox/specification/boolean_operations/images/boolean_image012.svg similarity index 100% rename from dox/user_guides/boolean_operations/images/boolean_image012.svg rename to dox/specification/boolean_operations/images/boolean_image012.svg diff --git a/dox/user_guides/boolean_operations/images/boolean_image013.svg b/dox/specification/boolean_operations/images/boolean_image013.svg similarity index 100% rename from dox/user_guides/boolean_operations/images/boolean_image013.svg rename to dox/specification/boolean_operations/images/boolean_image013.svg diff --git a/dox/user_guides/boolean_operations/images/boolean_image014.svg b/dox/specification/boolean_operations/images/boolean_image014.svg similarity index 100% rename from dox/user_guides/boolean_operations/images/boolean_image014.svg rename to dox/specification/boolean_operations/images/boolean_image014.svg diff --git a/dox/user_guides/boolean_operations/images/boolean_image015.svg b/dox/specification/boolean_operations/images/boolean_image015.svg similarity index 100% rename from dox/user_guides/boolean_operations/images/boolean_image015.svg rename to dox/specification/boolean_operations/images/boolean_image015.svg diff --git a/dox/user_guides/boolean_operations/images/boolean_image016.svg b/dox/specification/boolean_operations/images/boolean_image016.svg similarity index 100% rename from dox/user_guides/boolean_operations/images/boolean_image016.svg rename to dox/specification/boolean_operations/images/boolean_image016.svg diff --git a/dox/user_guides/boolean_operations/images/boolean_image017.svg b/dox/specification/boolean_operations/images/boolean_image017.svg similarity index 100% rename from dox/user_guides/boolean_operations/images/boolean_image017.svg rename to dox/specification/boolean_operations/images/boolean_image017.svg diff --git a/dox/user_guides/boolean_operations/images/boolean_image018.svg b/dox/specification/boolean_operations/images/boolean_image018.svg similarity index 100% rename from dox/user_guides/boolean_operations/images/boolean_image018.svg rename to dox/specification/boolean_operations/images/boolean_image018.svg diff --git a/dox/user_guides/boolean_operations/images/boolean_image019.png b/dox/specification/boolean_operations/images/boolean_image019.png similarity index 100% rename from dox/user_guides/boolean_operations/images/boolean_image019.png rename to dox/specification/boolean_operations/images/boolean_image019.png diff --git a/dox/user_guides/boolean_operations/images/boolean_image020.png b/dox/specification/boolean_operations/images/boolean_image020.png similarity index 100% rename from dox/user_guides/boolean_operations/images/boolean_image020.png rename to dox/specification/boolean_operations/images/boolean_image020.png diff --git a/dox/user_guides/boolean_operations/images/boolean_image021.png b/dox/specification/boolean_operations/images/boolean_image021.png similarity index 100% rename from dox/user_guides/boolean_operations/images/boolean_image021.png rename to dox/specification/boolean_operations/images/boolean_image021.png diff --git a/dox/user_guides/boolean_operations/images/boolean_image022.png b/dox/specification/boolean_operations/images/boolean_image022.png similarity index 100% rename from dox/user_guides/boolean_operations/images/boolean_image022.png rename to dox/specification/boolean_operations/images/boolean_image022.png diff --git a/dox/user_guides/boolean_operations/images/boolean_image023.png b/dox/specification/boolean_operations/images/boolean_image023.png similarity index 100% rename from dox/user_guides/boolean_operations/images/boolean_image023.png rename to dox/specification/boolean_operations/images/boolean_image023.png diff --git a/dox/user_guides/boolean_operations/images/boolean_image024.png b/dox/specification/boolean_operations/images/boolean_image024.png similarity index 100% rename from dox/user_guides/boolean_operations/images/boolean_image024.png rename to dox/specification/boolean_operations/images/boolean_image024.png diff --git a/dox/user_guides/boolean_operations/images/boolean_image025.png b/dox/specification/boolean_operations/images/boolean_image025.png similarity index 100% rename from dox/user_guides/boolean_operations/images/boolean_image025.png rename to dox/specification/boolean_operations/images/boolean_image025.png diff --git a/dox/user_guides/boolean_operations/images/boolean_image026.png b/dox/specification/boolean_operations/images/boolean_image026.png similarity index 100% rename from dox/user_guides/boolean_operations/images/boolean_image026.png rename to dox/specification/boolean_operations/images/boolean_image026.png diff --git a/dox/user_guides/boolean_operations/images/boolean_image027.png b/dox/specification/boolean_operations/images/boolean_image027.png similarity index 100% rename from dox/user_guides/boolean_operations/images/boolean_image027.png rename to dox/specification/boolean_operations/images/boolean_image027.png diff --git a/dox/user_guides/boolean_operations/images/boolean_image028.png b/dox/specification/boolean_operations/images/boolean_image028.png similarity index 100% rename from dox/user_guides/boolean_operations/images/boolean_image028.png rename to dox/specification/boolean_operations/images/boolean_image028.png diff --git a/dox/user_guides/boolean_operations/images/boolean_image029.png b/dox/specification/boolean_operations/images/boolean_image029.png similarity index 100% rename from dox/user_guides/boolean_operations/images/boolean_image029.png rename to dox/specification/boolean_operations/images/boolean_image029.png diff --git a/dox/user_guides/boolean_operations/images/boolean_image030.png b/dox/specification/boolean_operations/images/boolean_image030.png similarity index 100% rename from dox/user_guides/boolean_operations/images/boolean_image030.png rename to dox/specification/boolean_operations/images/boolean_image030.png diff --git a/dox/user_guides/boolean_operations/images/boolean_image031.png b/dox/specification/boolean_operations/images/boolean_image031.png similarity index 100% rename from dox/user_guides/boolean_operations/images/boolean_image031.png rename to dox/specification/boolean_operations/images/boolean_image031.png diff --git a/dox/user_guides/boolean_operations/images/boolean_image032.png b/dox/specification/boolean_operations/images/boolean_image032.png similarity index 100% rename from dox/user_guides/boolean_operations/images/boolean_image032.png rename to dox/specification/boolean_operations/images/boolean_image032.png diff --git a/dox/user_guides/boolean_operations/images/boolean_image033.png b/dox/specification/boolean_operations/images/boolean_image033.png similarity index 100% rename from dox/user_guides/boolean_operations/images/boolean_image033.png rename to dox/specification/boolean_operations/images/boolean_image033.png diff --git a/dox/user_guides/boolean_operations/images/boolean_image034.png b/dox/specification/boolean_operations/images/boolean_image034.png similarity index 100% rename from dox/user_guides/boolean_operations/images/boolean_image034.png rename to dox/specification/boolean_operations/images/boolean_image034.png diff --git a/dox/user_guides/boolean_operations/images/boolean_image035.png b/dox/specification/boolean_operations/images/boolean_image035.png similarity index 100% rename from dox/user_guides/boolean_operations/images/boolean_image035.png rename to dox/specification/boolean_operations/images/boolean_image035.png diff --git a/dox/user_guides/boolean_operations/images/boolean_image036.png b/dox/specification/boolean_operations/images/boolean_image036.png similarity index 100% rename from dox/user_guides/boolean_operations/images/boolean_image036.png rename to dox/specification/boolean_operations/images/boolean_image036.png diff --git a/dox/user_guides/boolean_operations/images/boolean_image037.png b/dox/specification/boolean_operations/images/boolean_image037.png similarity index 100% rename from dox/user_guides/boolean_operations/images/boolean_image037.png rename to dox/specification/boolean_operations/images/boolean_image037.png diff --git a/dox/user_guides/boolean_operations/images/boolean_image038.png b/dox/specification/boolean_operations/images/boolean_image038.png similarity index 100% rename from dox/user_guides/boolean_operations/images/boolean_image038.png rename to dox/specification/boolean_operations/images/boolean_image038.png diff --git a/dox/user_guides/boolean_operations/images/boolean_image039.png b/dox/specification/boolean_operations/images/boolean_image039.png similarity index 100% rename from dox/user_guides/boolean_operations/images/boolean_image039.png rename to dox/specification/boolean_operations/images/boolean_image039.png diff --git a/dox/user_guides/boolean_operations/images/boolean_image040.png b/dox/specification/boolean_operations/images/boolean_image040.png similarity index 100% rename from dox/user_guides/boolean_operations/images/boolean_image040.png rename to dox/specification/boolean_operations/images/boolean_image040.png diff --git a/dox/user_guides/boolean_operations/images/boolean_image041.png b/dox/specification/boolean_operations/images/boolean_image041.png similarity index 100% rename from dox/user_guides/boolean_operations/images/boolean_image041.png rename to dox/specification/boolean_operations/images/boolean_image041.png diff --git a/dox/user_guides/boolean_operations/images/boolean_image042.png b/dox/specification/boolean_operations/images/boolean_image042.png similarity index 100% rename from dox/user_guides/boolean_operations/images/boolean_image042.png rename to dox/specification/boolean_operations/images/boolean_image042.png diff --git a/dox/user_guides/boolean_operations/images/boolean_image043.png b/dox/specification/boolean_operations/images/boolean_image043.png similarity index 100% rename from dox/user_guides/boolean_operations/images/boolean_image043.png rename to dox/specification/boolean_operations/images/boolean_image043.png diff --git a/dox/user_guides/boolean_operations/images/boolean_image044.png b/dox/specification/boolean_operations/images/boolean_image044.png similarity index 100% rename from dox/user_guides/boolean_operations/images/boolean_image044.png rename to dox/specification/boolean_operations/images/boolean_image044.png diff --git a/dox/user_guides/boolean_operations/images/boolean_image045.png b/dox/specification/boolean_operations/images/boolean_image045.png similarity index 100% rename from dox/user_guides/boolean_operations/images/boolean_image045.png rename to dox/specification/boolean_operations/images/boolean_image045.png diff --git a/dox/user_guides/boolean_operations/images/boolean_image046.png b/dox/specification/boolean_operations/images/boolean_image046.png similarity index 100% rename from dox/user_guides/boolean_operations/images/boolean_image046.png rename to dox/specification/boolean_operations/images/boolean_image046.png diff --git a/dox/user_guides/boolean_operations/images/boolean_image047.png b/dox/specification/boolean_operations/images/boolean_image047.png similarity index 100% rename from dox/user_guides/boolean_operations/images/boolean_image047.png rename to dox/specification/boolean_operations/images/boolean_image047.png diff --git a/dox/user_guides/boolean_operations/images/boolean_image048.png b/dox/specification/boolean_operations/images/boolean_image048.png similarity index 100% rename from dox/user_guides/boolean_operations/images/boolean_image048.png rename to dox/specification/boolean_operations/images/boolean_image048.png diff --git a/dox/user_guides/boolean_operations/images/boolean_image049.png b/dox/specification/boolean_operations/images/boolean_image049.png similarity index 100% rename from dox/user_guides/boolean_operations/images/boolean_image049.png rename to dox/specification/boolean_operations/images/boolean_image049.png diff --git a/dox/user_guides/boolean_operations/images/boolean_image050.png b/dox/specification/boolean_operations/images/boolean_image050.png similarity index 100% rename from dox/user_guides/boolean_operations/images/boolean_image050.png rename to dox/specification/boolean_operations/images/boolean_image050.png diff --git a/dox/user_guides/boolean_operations/images/boolean_image051.png b/dox/specification/boolean_operations/images/boolean_image051.png similarity index 100% rename from dox/user_guides/boolean_operations/images/boolean_image051.png rename to dox/specification/boolean_operations/images/boolean_image051.png diff --git a/dox/user_guides/boolean_operations/images/boolean_image052.png b/dox/specification/boolean_operations/images/boolean_image052.png similarity index 100% rename from dox/user_guides/boolean_operations/images/boolean_image052.png rename to dox/specification/boolean_operations/images/boolean_image052.png diff --git a/dox/user_guides/boolean_operations/images/boolean_image053.png b/dox/specification/boolean_operations/images/boolean_image053.png similarity index 100% rename from dox/user_guides/boolean_operations/images/boolean_image053.png rename to dox/specification/boolean_operations/images/boolean_image053.png diff --git a/dox/user_guides/boolean_operations/images/boolean_image054.png b/dox/specification/boolean_operations/images/boolean_image054.png similarity index 100% rename from dox/user_guides/boolean_operations/images/boolean_image054.png rename to dox/specification/boolean_operations/images/boolean_image054.png diff --git a/dox/user_guides/boolean_operations/images/boolean_image055.png b/dox/specification/boolean_operations/images/boolean_image055.png similarity index 100% rename from dox/user_guides/boolean_operations/images/boolean_image055.png rename to dox/specification/boolean_operations/images/boolean_image055.png diff --git a/dox/user_guides/boolean_operations/images/boolean_image056.png b/dox/specification/boolean_operations/images/boolean_image056.png similarity index 100% rename from dox/user_guides/boolean_operations/images/boolean_image056.png rename to dox/specification/boolean_operations/images/boolean_image056.png diff --git a/dox/user_guides/boolean_operations/images/boolean_image057.png b/dox/specification/boolean_operations/images/boolean_image057.png similarity index 100% rename from dox/user_guides/boolean_operations/images/boolean_image057.png rename to dox/specification/boolean_operations/images/boolean_image057.png diff --git a/dox/user_guides/boolean_operations/images/boolean_image058.png b/dox/specification/boolean_operations/images/boolean_image058.png similarity index 100% rename from dox/user_guides/boolean_operations/images/boolean_image058.png rename to dox/specification/boolean_operations/images/boolean_image058.png diff --git a/dox/user_guides/boolean_operations/images/boolean_image059.png b/dox/specification/boolean_operations/images/boolean_image059.png similarity index 100% rename from dox/user_guides/boolean_operations/images/boolean_image059.png rename to dox/specification/boolean_operations/images/boolean_image059.png diff --git a/dox/user_guides/boolean_operations/images/boolean_image060.png b/dox/specification/boolean_operations/images/boolean_image060.png similarity index 100% rename from dox/user_guides/boolean_operations/images/boolean_image060.png rename to dox/specification/boolean_operations/images/boolean_image060.png diff --git a/dox/user_guides/boolean_operations/images/boolean_image061.png b/dox/specification/boolean_operations/images/boolean_image061.png similarity index 100% rename from dox/user_guides/boolean_operations/images/boolean_image061.png rename to dox/specification/boolean_operations/images/boolean_image061.png diff --git a/dox/user_guides/boolean_operations/images/boolean_image062.png b/dox/specification/boolean_operations/images/boolean_image062.png similarity index 100% rename from dox/user_guides/boolean_operations/images/boolean_image062.png rename to dox/specification/boolean_operations/images/boolean_image062.png diff --git a/dox/user_guides/boolean_operations/images/boolean_image063.png b/dox/specification/boolean_operations/images/boolean_image063.png similarity index 100% rename from dox/user_guides/boolean_operations/images/boolean_image063.png rename to dox/specification/boolean_operations/images/boolean_image063.png diff --git a/dox/user_guides/boolean_operations/images/boolean_image064.png b/dox/specification/boolean_operations/images/boolean_image064.png similarity index 100% rename from dox/user_guides/boolean_operations/images/boolean_image064.png rename to dox/specification/boolean_operations/images/boolean_image064.png diff --git a/dox/user_guides/boolean_operations/images/boolean_image065.png b/dox/specification/boolean_operations/images/boolean_image065.png similarity index 100% rename from dox/user_guides/boolean_operations/images/boolean_image065.png rename to dox/specification/boolean_operations/images/boolean_image065.png diff --git a/dox/user_guides/boolean_operations/images/boolean_image066.png b/dox/specification/boolean_operations/images/boolean_image066.png similarity index 100% rename from dox/user_guides/boolean_operations/images/boolean_image066.png rename to dox/specification/boolean_operations/images/boolean_image066.png diff --git a/dox/user_guides/boolean_operations/images/boolean_image067.png b/dox/specification/boolean_operations/images/boolean_image067.png similarity index 100% rename from dox/user_guides/boolean_operations/images/boolean_image067.png rename to dox/specification/boolean_operations/images/boolean_image067.png diff --git a/dox/user_guides/boolean_operations/images/boolean_image068.png b/dox/specification/boolean_operations/images/boolean_image068.png similarity index 100% rename from dox/user_guides/boolean_operations/images/boolean_image068.png rename to dox/specification/boolean_operations/images/boolean_image068.png diff --git a/dox/user_guides/boolean_operations/images/boolean_image069.png b/dox/specification/boolean_operations/images/boolean_image069.png similarity index 100% rename from dox/user_guides/boolean_operations/images/boolean_image069.png rename to dox/specification/boolean_operations/images/boolean_image069.png diff --git a/dox/user_guides/boolean_operations/images/boolean_image070.png b/dox/specification/boolean_operations/images/boolean_image070.png similarity index 100% rename from dox/user_guides/boolean_operations/images/boolean_image070.png rename to dox/specification/boolean_operations/images/boolean_image070.png diff --git a/dox/user_guides/boolean_operations/images/boolean_image071.png b/dox/specification/boolean_operations/images/boolean_image071.png similarity index 100% rename from dox/user_guides/boolean_operations/images/boolean_image071.png rename to dox/specification/boolean_operations/images/boolean_image071.png diff --git a/dox/user_guides/boolean_operations/images/boolean_image072.png b/dox/specification/boolean_operations/images/boolean_image072.png similarity index 100% rename from dox/user_guides/boolean_operations/images/boolean_image072.png rename to dox/specification/boolean_operations/images/boolean_image072.png diff --git a/dox/user_guides/boolean_operations/images/boolean_image073.png b/dox/specification/boolean_operations/images/boolean_image073.png similarity index 100% rename from dox/user_guides/boolean_operations/images/boolean_image073.png rename to dox/specification/boolean_operations/images/boolean_image073.png diff --git a/dox/user_guides/boolean_operations/images/boolean_image080.png b/dox/specification/boolean_operations/images/boolean_image080.png similarity index 100% rename from dox/user_guides/boolean_operations/images/boolean_image080.png rename to dox/specification/boolean_operations/images/boolean_image080.png diff --git a/dox/user_guides/boolean_operations/images/boolean_image081.png b/dox/specification/boolean_operations/images/boolean_image081.png similarity index 100% rename from dox/user_guides/boolean_operations/images/boolean_image081.png rename to dox/specification/boolean_operations/images/boolean_image081.png diff --git a/dox/user_guides/boolean_operations/images/boolean_image082.png b/dox/specification/boolean_operations/images/boolean_image082.png similarity index 100% rename from dox/user_guides/boolean_operations/images/boolean_image082.png rename to dox/specification/boolean_operations/images/boolean_image082.png diff --git a/dox/user_guides/boolean_operations/images/boolean_image083.png b/dox/specification/boolean_operations/images/boolean_image083.png similarity index 100% rename from dox/user_guides/boolean_operations/images/boolean_image083.png rename to dox/specification/boolean_operations/images/boolean_image083.png diff --git a/dox/user_guides/boolean_operations/images/boolean_image084.png b/dox/specification/boolean_operations/images/boolean_image084.png similarity index 100% rename from dox/user_guides/boolean_operations/images/boolean_image084.png rename to dox/specification/boolean_operations/images/boolean_image084.png diff --git a/dox/user_guides/boolean_operations/images/boolean_image085.png b/dox/specification/boolean_operations/images/boolean_image085.png similarity index 100% rename from dox/user_guides/boolean_operations/images/boolean_image085.png rename to dox/specification/boolean_operations/images/boolean_image085.png diff --git a/dox/user_guides/boolean_operations/images/boolean_image086.png b/dox/specification/boolean_operations/images/boolean_image086.png similarity index 100% rename from dox/user_guides/boolean_operations/images/boolean_image086.png rename to dox/specification/boolean_operations/images/boolean_image086.png diff --git a/dox/user_guides/boolean_operations/images/boolean_image087.png b/dox/specification/boolean_operations/images/boolean_image087.png similarity index 100% rename from dox/user_guides/boolean_operations/images/boolean_image087.png rename to dox/specification/boolean_operations/images/boolean_image087.png diff --git a/dox/user_guides/boolean_operations/images/boolean_image088.png b/dox/specification/boolean_operations/images/boolean_image088.png similarity index 100% rename from dox/user_guides/boolean_operations/images/boolean_image088.png rename to dox/specification/boolean_operations/images/boolean_image088.png diff --git a/dox/user_guides/boolean_operations/images/boolean_image089.png b/dox/specification/boolean_operations/images/boolean_image089.png similarity index 100% rename from dox/user_guides/boolean_operations/images/boolean_image089.png rename to dox/specification/boolean_operations/images/boolean_image089.png diff --git a/dox/user_guides/boolean_operations/images/boolean_image090.png b/dox/specification/boolean_operations/images/boolean_image090.png similarity index 100% rename from dox/user_guides/boolean_operations/images/boolean_image090.png rename to dox/specification/boolean_operations/images/boolean_image090.png diff --git a/dox/user_guides/boolean_operations/images/boolean_image091.png b/dox/specification/boolean_operations/images/boolean_image091.png similarity index 100% rename from dox/user_guides/boolean_operations/images/boolean_image091.png rename to dox/specification/boolean_operations/images/boolean_image091.png diff --git a/dox/user_guides/boolean_operations/images/boolean_image092.png b/dox/specification/boolean_operations/images/boolean_image092.png similarity index 100% rename from dox/user_guides/boolean_operations/images/boolean_image092.png rename to dox/specification/boolean_operations/images/boolean_image092.png diff --git a/dox/user_guides/boolean_operations/images/boolean_image093.png b/dox/specification/boolean_operations/images/boolean_image093.png similarity index 100% rename from dox/user_guides/boolean_operations/images/boolean_image093.png rename to dox/specification/boolean_operations/images/boolean_image093.png diff --git a/dox/user_guides/boolean_operations/images/boolean_image094.png b/dox/specification/boolean_operations/images/boolean_image094.png similarity index 100% rename from dox/user_guides/boolean_operations/images/boolean_image094.png rename to dox/specification/boolean_operations/images/boolean_image094.png diff --git a/dox/user_guides/boolean_operations/images/boolean_image095.png b/dox/specification/boolean_operations/images/boolean_image095.png similarity index 100% rename from dox/user_guides/boolean_operations/images/boolean_image095.png rename to dox/specification/boolean_operations/images/boolean_image095.png diff --git a/dox/user_guides/boolean_operations/images/boolean_image096.png b/dox/specification/boolean_operations/images/boolean_image096.png similarity index 100% rename from dox/user_guides/boolean_operations/images/boolean_image096.png rename to dox/specification/boolean_operations/images/boolean_image096.png diff --git a/dox/user_guides/boolean_operations/images/boolean_image097.png b/dox/specification/boolean_operations/images/boolean_image097.png similarity index 100% rename from dox/user_guides/boolean_operations/images/boolean_image097.png rename to dox/specification/boolean_operations/images/boolean_image097.png diff --git a/dox/user_guides/boolean_operations/images/boolean_image098.png b/dox/specification/boolean_operations/images/boolean_image098.png similarity index 100% rename from dox/user_guides/boolean_operations/images/boolean_image098.png rename to dox/specification/boolean_operations/images/boolean_image098.png diff --git a/dox/user_guides/boolean_operations/images/boolean_image099.png b/dox/specification/boolean_operations/images/boolean_image099.png similarity index 100% rename from dox/user_guides/boolean_operations/images/boolean_image099.png rename to dox/specification/boolean_operations/images/boolean_image099.png diff --git a/dox/user_guides/boolean_operations/images/boolean_image100.png b/dox/specification/boolean_operations/images/boolean_image100.png similarity index 100% rename from dox/user_guides/boolean_operations/images/boolean_image100.png rename to dox/specification/boolean_operations/images/boolean_image100.png diff --git a/dox/user_guides/boolean_operations/images/boolean_image101.png b/dox/specification/boolean_operations/images/boolean_image101.png similarity index 100% rename from dox/user_guides/boolean_operations/images/boolean_image101.png rename to dox/specification/boolean_operations/images/boolean_image101.png diff --git a/dox/user_guides/boolean_operations/images/boolean_image102.png b/dox/specification/boolean_operations/images/boolean_image102.png similarity index 100% rename from dox/user_guides/boolean_operations/images/boolean_image102.png rename to dox/specification/boolean_operations/images/boolean_image102.png diff --git a/dox/user_guides/boolean_operations/images/boolean_image103.png b/dox/specification/boolean_operations/images/boolean_image103.png similarity index 100% rename from dox/user_guides/boolean_operations/images/boolean_image103.png rename to dox/specification/boolean_operations/images/boolean_image103.png diff --git a/dox/user_guides/boolean_operations/images/boolean_image104.png b/dox/specification/boolean_operations/images/boolean_image104.png similarity index 100% rename from dox/user_guides/boolean_operations/images/boolean_image104.png rename to dox/specification/boolean_operations/images/boolean_image104.png diff --git a/dox/user_guides/boolean_operations/images/boolean_image105.png b/dox/specification/boolean_operations/images/boolean_image105.png similarity index 100% rename from dox/user_guides/boolean_operations/images/boolean_image105.png rename to dox/specification/boolean_operations/images/boolean_image105.png diff --git a/dox/user_guides/boolean_operations/images/boolean_image106.png b/dox/specification/boolean_operations/images/boolean_image106.png similarity index 100% rename from dox/user_guides/boolean_operations/images/boolean_image106.png rename to dox/specification/boolean_operations/images/boolean_image106.png diff --git a/dox/user_guides/boolean_operations/images/boolean_image107.png b/dox/specification/boolean_operations/images/boolean_image107.png similarity index 100% rename from dox/user_guides/boolean_operations/images/boolean_image107.png rename to dox/specification/boolean_operations/images/boolean_image107.png diff --git a/dox/user_guides/boolean_operations/images/boolean_image108.png b/dox/specification/boolean_operations/images/boolean_image108.png similarity index 100% rename from dox/user_guides/boolean_operations/images/boolean_image108.png rename to dox/specification/boolean_operations/images/boolean_image108.png diff --git a/dox/user_guides/boolean_operations/images/boolean_image109.png b/dox/specification/boolean_operations/images/boolean_image109.png similarity index 100% rename from dox/user_guides/boolean_operations/images/boolean_image109.png rename to dox/specification/boolean_operations/images/boolean_image109.png diff --git a/dox/user_guides/boolean_operations/images/boolean_image110.png b/dox/specification/boolean_operations/images/boolean_image110.png similarity index 100% rename from dox/user_guides/boolean_operations/images/boolean_image110.png rename to dox/specification/boolean_operations/images/boolean_image110.png diff --git a/dox/user_guides/boolean_operations/images/boolean_image111.png b/dox/specification/boolean_operations/images/boolean_image111.png similarity index 100% rename from dox/user_guides/boolean_operations/images/boolean_image111.png rename to dox/specification/boolean_operations/images/boolean_image111.png diff --git a/dox/user_guides/boolean_operations/images/boolean_image112.png b/dox/specification/boolean_operations/images/boolean_image112.png similarity index 100% rename from dox/user_guides/boolean_operations/images/boolean_image112.png rename to dox/specification/boolean_operations/images/boolean_image112.png diff --git a/dox/user_guides/boolean_operations/images/boolean_image113.png b/dox/specification/boolean_operations/images/boolean_image113.png similarity index 100% rename from dox/user_guides/boolean_operations/images/boolean_image113.png rename to dox/specification/boolean_operations/images/boolean_image113.png diff --git a/dox/user_guides/boolean_operations/images/boolean_image114.png b/dox/specification/boolean_operations/images/boolean_image114.png similarity index 100% rename from dox/user_guides/boolean_operations/images/boolean_image114.png rename to dox/specification/boolean_operations/images/boolean_image114.png diff --git a/dox/user_guides/boolean_operations/images/boolean_image115.png b/dox/specification/boolean_operations/images/boolean_image115.png similarity index 100% rename from dox/user_guides/boolean_operations/images/boolean_image115.png rename to dox/specification/boolean_operations/images/boolean_image115.png diff --git a/dox/user_guides/boolean_operations/images/boolean_image116.png b/dox/specification/boolean_operations/images/boolean_image116.png similarity index 100% rename from dox/user_guides/boolean_operations/images/boolean_image116.png rename to dox/specification/boolean_operations/images/boolean_image116.png diff --git a/dox/user_guides/boolean_operations/images/boolean_image117.png b/dox/specification/boolean_operations/images/boolean_image117.png similarity index 100% rename from dox/user_guides/boolean_operations/images/boolean_image117.png rename to dox/specification/boolean_operations/images/boolean_image117.png diff --git a/dox/user_guides/boolean_operations/images/boolean_image118.png b/dox/specification/boolean_operations/images/boolean_image118.png similarity index 100% rename from dox/user_guides/boolean_operations/images/boolean_image118.png rename to dox/specification/boolean_operations/images/boolean_image118.png diff --git a/dox/user_guides/boolean_operations/images/boolean_image119.png b/dox/specification/boolean_operations/images/boolean_image119.png similarity index 100% rename from dox/user_guides/boolean_operations/images/boolean_image119.png rename to dox/specification/boolean_operations/images/boolean_image119.png diff --git a/dox/user_guides/boolean_operations/images/boolean_image120.png b/dox/specification/boolean_operations/images/boolean_image120.png similarity index 100% rename from dox/user_guides/boolean_operations/images/boolean_image120.png rename to dox/specification/boolean_operations/images/boolean_image120.png diff --git a/dox/user_guides/boolean_operations/images/boolean_image121.png b/dox/specification/boolean_operations/images/boolean_image121.png similarity index 100% rename from dox/user_guides/boolean_operations/images/boolean_image121.png rename to dox/specification/boolean_operations/images/boolean_image121.png diff --git a/dox/user_guides/boolean_operations/images/boolean_image122.png b/dox/specification/boolean_operations/images/boolean_image122.png similarity index 100% rename from dox/user_guides/boolean_operations/images/boolean_image122.png rename to dox/specification/boolean_operations/images/boolean_image122.png diff --git a/dox/user_guides/boolean_operations/images/boolean_image123.png b/dox/specification/boolean_operations/images/boolean_image123.png similarity index 100% rename from dox/user_guides/boolean_operations/images/boolean_image123.png rename to dox/specification/boolean_operations/images/boolean_image123.png diff --git a/dox/user_guides/boolean_operations/images/boolean_image124.png b/dox/specification/boolean_operations/images/boolean_image124.png similarity index 100% rename from dox/user_guides/boolean_operations/images/boolean_image124.png rename to dox/specification/boolean_operations/images/boolean_image124.png diff --git a/dox/user_guides/boolean_operations/images/boolean_image125.png b/dox/specification/boolean_operations/images/boolean_image125.png similarity index 100% rename from dox/user_guides/boolean_operations/images/boolean_image125.png rename to dox/specification/boolean_operations/images/boolean_image125.png diff --git a/dox/user_guides/boolean_operations/images/boolean_image126.png b/dox/specification/boolean_operations/images/boolean_image126.png similarity index 100% rename from dox/user_guides/boolean_operations/images/boolean_image126.png rename to dox/specification/boolean_operations/images/boolean_image126.png diff --git a/dox/user_guides/boolean_operations/images/boolean_image127.png b/dox/specification/boolean_operations/images/boolean_image127.png similarity index 100% rename from dox/user_guides/boolean_operations/images/boolean_image127.png rename to dox/specification/boolean_operations/images/boolean_image127.png diff --git a/dox/user_guides/boolean_operations/images/boolean_image128.png b/dox/specification/boolean_operations/images/boolean_image128.png similarity index 100% rename from dox/user_guides/boolean_operations/images/boolean_image128.png rename to dox/specification/boolean_operations/images/boolean_image128.png diff --git a/dox/user_guides/boolean_operations/images/boolean_image129.png b/dox/specification/boolean_operations/images/boolean_image129.png similarity index 100% rename from dox/user_guides/boolean_operations/images/boolean_image129.png rename to dox/specification/boolean_operations/images/boolean_image129.png diff --git a/dox/user_guides/boolean_operations/images/boolean_image130.png b/dox/specification/boolean_operations/images/boolean_image130.png similarity index 100% rename from dox/user_guides/boolean_operations/images/boolean_image130.png rename to dox/specification/boolean_operations/images/boolean_image130.png diff --git a/dox/user_guides/boolean_operations/images/boolean_image131.png b/dox/specification/boolean_operations/images/boolean_image131.png similarity index 100% rename from dox/user_guides/boolean_operations/images/boolean_image131.png rename to dox/specification/boolean_operations/images/boolean_image131.png diff --git a/dox/user_guides/boolean_operations/images/boolean_image132.png b/dox/specification/boolean_operations/images/boolean_image132.png similarity index 100% rename from dox/user_guides/boolean_operations/images/boolean_image132.png rename to dox/specification/boolean_operations/images/boolean_image132.png diff --git a/dox/user_guides/boolean_operations/images/boolean_image133.png b/dox/specification/boolean_operations/images/boolean_image133.png similarity index 100% rename from dox/user_guides/boolean_operations/images/boolean_image133.png rename to dox/specification/boolean_operations/images/boolean_image133.png diff --git a/dox/user_guides/boolean_operations/images/boolean_image134.png b/dox/specification/boolean_operations/images/boolean_image134.png similarity index 100% rename from dox/user_guides/boolean_operations/images/boolean_image134.png rename to dox/specification/boolean_operations/images/boolean_image134.png diff --git a/dox/user_guides/boolean_operations/images/boolean_image135.png b/dox/specification/boolean_operations/images/boolean_image135.png similarity index 100% rename from dox/user_guides/boolean_operations/images/boolean_image135.png rename to dox/specification/boolean_operations/images/boolean_image135.png diff --git a/dox/user_guides/boolean_operations/images/boolean_image136.png b/dox/specification/boolean_operations/images/boolean_image136.png similarity index 100% rename from dox/user_guides/boolean_operations/images/boolean_image136.png rename to dox/specification/boolean_operations/images/boolean_image136.png diff --git a/dox/user_guides/boolean_operations/images/boolean_image137.png b/dox/specification/boolean_operations/images/boolean_image137.png similarity index 100% rename from dox/user_guides/boolean_operations/images/boolean_image137.png rename to dox/specification/boolean_operations/images/boolean_image137.png diff --git a/dox/user_guides/boolean_operations/images/boolean_image138.png b/dox/specification/boolean_operations/images/boolean_image138.png similarity index 100% rename from dox/user_guides/boolean_operations/images/boolean_image138.png rename to dox/specification/boolean_operations/images/boolean_image138.png diff --git a/dox/user_guides/boolean_operations/images/boolean_image139.png b/dox/specification/boolean_operations/images/boolean_image139.png similarity index 100% rename from dox/user_guides/boolean_operations/images/boolean_image139.png rename to dox/specification/boolean_operations/images/boolean_image139.png diff --git a/dox/user_guides/boolean_operations/images/boolean_image140.png b/dox/specification/boolean_operations/images/boolean_image140.png similarity index 100% rename from dox/user_guides/boolean_operations/images/boolean_image140.png rename to dox/specification/boolean_operations/images/boolean_image140.png diff --git a/dox/user_guides/boolean_operations/images/boolean_image141.png b/dox/specification/boolean_operations/images/boolean_image141.png similarity index 100% rename from dox/user_guides/boolean_operations/images/boolean_image141.png rename to dox/specification/boolean_operations/images/boolean_image141.png diff --git a/dox/user_guides/boolean_operations/images/boolean_image142.png b/dox/specification/boolean_operations/images/boolean_image142.png similarity index 100% rename from dox/user_guides/boolean_operations/images/boolean_image142.png rename to dox/specification/boolean_operations/images/boolean_image142.png diff --git a/dox/user_guides/boolean_operations/images/boolean_image143.png b/dox/specification/boolean_operations/images/boolean_image143.png similarity index 100% rename from dox/user_guides/boolean_operations/images/boolean_image143.png rename to dox/specification/boolean_operations/images/boolean_image143.png diff --git a/dox/user_guides/boolean_operations/images/bop_simple_001.png b/dox/specification/boolean_operations/images/bop_simple_001.png similarity index 100% rename from dox/user_guides/boolean_operations/images/bop_simple_001.png rename to dox/specification/boolean_operations/images/bop_simple_001.png diff --git a/dox/user_guides/boolean_operations/images/bop_simple_002.png b/dox/specification/boolean_operations/images/bop_simple_002.png similarity index 100% rename from dox/user_guides/boolean_operations/images/bop_simple_002.png rename to dox/specification/boolean_operations/images/bop_simple_002.png diff --git a/dox/user_guides/boolean_operations/images/bsplit_image001.png b/dox/specification/boolean_operations/images/bsplit_image001.png similarity index 100% rename from dox/user_guides/boolean_operations/images/bsplit_image001.png rename to dox/specification/boolean_operations/images/bsplit_image001.png diff --git a/dox/user_guides/boolean_operations/images/bsplit_image002.png b/dox/specification/boolean_operations/images/bsplit_image002.png similarity index 100% rename from dox/user_guides/boolean_operations/images/bsplit_image002.png rename to dox/specification/boolean_operations/images/bsplit_image002.png diff --git a/dox/user_guides/boolean_operations/images/bsplit_image003.png b/dox/specification/boolean_operations/images/bsplit_image003.png similarity index 100% rename from dox/user_guides/boolean_operations/images/bsplit_image003.png rename to dox/specification/boolean_operations/images/bsplit_image003.png diff --git a/dox/user_guides/boolean_operations/images/bsplit_image004.png b/dox/specification/boolean_operations/images/bsplit_image004.png similarity index 100% rename from dox/user_guides/boolean_operations/images/bsplit_image004.png rename to dox/specification/boolean_operations/images/bsplit_image004.png diff --git a/dox/user_guides/boolean_operations/images/bsplit_image005.png b/dox/specification/boolean_operations/images/bsplit_image005.png similarity index 100% rename from dox/user_guides/boolean_operations/images/bsplit_image005.png rename to dox/specification/boolean_operations/images/bsplit_image005.png diff --git a/dox/user_guides/boolean_operations/images/bsplit_image006.png b/dox/specification/boolean_operations/images/bsplit_image006.png similarity index 100% rename from dox/user_guides/boolean_operations/images/bsplit_image006.png rename to dox/specification/boolean_operations/images/bsplit_image006.png diff --git a/dox/user_guides/boolean_operations/images/cells_algorithm_001.png b/dox/specification/boolean_operations/images/cells_algorithm_001.png similarity index 100% rename from dox/user_guides/boolean_operations/images/cells_algorithm_001.png rename to dox/specification/boolean_operations/images/cells_algorithm_001.png diff --git a/dox/user_guides/boolean_operations/images/cells_algorithm_002.png b/dox/specification/boolean_operations/images/cells_algorithm_002.png similarity index 100% rename from dox/user_guides/boolean_operations/images/cells_algorithm_002.png rename to dox/specification/boolean_operations/images/cells_algorithm_002.png diff --git a/dox/user_guides/boolean_operations/images/cells_algorithm_003.png b/dox/specification/boolean_operations/images/cells_algorithm_003.png similarity index 100% rename from dox/user_guides/boolean_operations/images/cells_algorithm_003.png rename to dox/specification/boolean_operations/images/cells_algorithm_003.png diff --git a/dox/user_guides/boolean_operations/images/cells_algorithm_004.png b/dox/specification/boolean_operations/images/cells_algorithm_004.png similarity index 100% rename from dox/user_guides/boolean_operations/images/cells_algorithm_004.png rename to dox/specification/boolean_operations/images/cells_algorithm_004.png diff --git a/dox/user_guides/boolean_operations/images/cells_algorithm_005.png b/dox/specification/boolean_operations/images/cells_algorithm_005.png similarity index 100% rename from dox/user_guides/boolean_operations/images/cells_algorithm_005.png rename to dox/specification/boolean_operations/images/cells_algorithm_005.png diff --git a/dox/user_guides/boolean_operations/images/cells_algorithm_006_1.png b/dox/specification/boolean_operations/images/cells_algorithm_006_1.png similarity index 100% rename from dox/user_guides/boolean_operations/images/cells_algorithm_006_1.png rename to dox/specification/boolean_operations/images/cells_algorithm_006_1.png diff --git a/dox/user_guides/boolean_operations/images/cells_algorithm_006_2.png b/dox/specification/boolean_operations/images/cells_algorithm_006_2.png similarity index 100% rename from dox/user_guides/boolean_operations/images/cells_algorithm_006_2.png rename to dox/specification/boolean_operations/images/cells_algorithm_006_2.png diff --git a/dox/user_guides/boolean_operations/images/cells_algorithm_007.png b/dox/specification/boolean_operations/images/cells_algorithm_007.png similarity index 100% rename from dox/user_guides/boolean_operations/images/cells_algorithm_007.png rename to dox/specification/boolean_operations/images/cells_algorithm_007.png diff --git a/dox/user_guides/boolean_operations/images/cells_algorithm_008.png b/dox/specification/boolean_operations/images/cells_algorithm_008.png similarity index 100% rename from dox/user_guides/boolean_operations/images/cells_algorithm_008.png rename to dox/specification/boolean_operations/images/cells_algorithm_008.png diff --git a/dox/user_guides/boolean_operations/images/glue_options_image001.png b/dox/specification/boolean_operations/images/glue_options_image001.png similarity index 100% rename from dox/user_guides/boolean_operations/images/glue_options_image001.png rename to dox/specification/boolean_operations/images/glue_options_image001.png diff --git a/dox/user_guides/boolean_operations/images/glue_options_image002.png b/dox/specification/boolean_operations/images/glue_options_image002.png similarity index 100% rename from dox/user_guides/boolean_operations/images/glue_options_image002.png rename to dox/specification/boolean_operations/images/glue_options_image002.png diff --git a/dox/user_guides/boolean_operations/images/glue_options_image003.png b/dox/specification/boolean_operations/images/glue_options_image003.png similarity index 100% rename from dox/user_guides/boolean_operations/images/glue_options_image003.png rename to dox/specification/boolean_operations/images/glue_options_image003.png diff --git a/dox/user_guides/boolean_operations/images/glue_options_image004.png b/dox/specification/boolean_operations/images/glue_options_image004.png similarity index 100% rename from dox/user_guides/boolean_operations/images/glue_options_image004.png rename to dox/specification/boolean_operations/images/glue_options_image004.png diff --git a/dox/user_guides/boolean_operations/images/glue_options_image005.png b/dox/specification/boolean_operations/images/glue_options_image005.png similarity index 100% rename from dox/user_guides/boolean_operations/images/glue_options_image005.png rename to dox/specification/boolean_operations/images/glue_options_image005.png diff --git a/dox/user_guides/boolean_operations/images/mkvolume_image001.png b/dox/specification/boolean_operations/images/mkvolume_image001.png similarity index 100% rename from dox/user_guides/boolean_operations/images/mkvolume_image001.png rename to dox/specification/boolean_operations/images/mkvolume_image001.png diff --git a/dox/user_guides/boolean_operations/images/mkvolume_image002.png b/dox/specification/boolean_operations/images/mkvolume_image002.png similarity index 100% rename from dox/user_guides/boolean_operations/images/mkvolume_image002.png rename to dox/specification/boolean_operations/images/mkvolume_image002.png diff --git a/dox/user_guides/boolean_operations/images/mkvolume_image003.png b/dox/specification/boolean_operations/images/mkvolume_image003.png similarity index 100% rename from dox/user_guides/boolean_operations/images/mkvolume_image003.png rename to dox/specification/boolean_operations/images/mkvolume_image003.png diff --git a/dox/user_guides/boolean_operations/images/mkvolume_image004.png b/dox/specification/boolean_operations/images/mkvolume_image004.png similarity index 100% rename from dox/user_guides/boolean_operations/images/mkvolume_image004.png rename to dox/specification/boolean_operations/images/mkvolume_image004.png diff --git a/dox/user_guides/boolean_operations/images/operations_image001.svg b/dox/specification/boolean_operations/images/operations_image001.svg similarity index 100% rename from dox/user_guides/boolean_operations/images/operations_image001.svg rename to dox/specification/boolean_operations/images/operations_image001.svg diff --git a/dox/user_guides/boolean_operations/images/operations_image002.svg b/dox/specification/boolean_operations/images/operations_image002.svg similarity index 100% rename from dox/user_guides/boolean_operations/images/operations_image002.svg rename to dox/specification/boolean_operations/images/operations_image002.svg diff --git a/dox/user_guides/boolean_operations/images/operations_image003.svg b/dox/specification/boolean_operations/images/operations_image003.svg similarity index 100% rename from dox/user_guides/boolean_operations/images/operations_image003.svg rename to dox/specification/boolean_operations/images/operations_image003.svg diff --git a/dox/user_guides/boolean_operations/images/operations_image004.svg b/dox/specification/boolean_operations/images/operations_image004.svg similarity index 100% rename from dox/user_guides/boolean_operations/images/operations_image004.svg rename to dox/specification/boolean_operations/images/operations_image004.svg diff --git a/dox/user_guides/boolean_operations/images/operations_image005.svg b/dox/specification/boolean_operations/images/operations_image005.svg similarity index 100% rename from dox/user_guides/boolean_operations/images/operations_image005.svg rename to dox/specification/boolean_operations/images/operations_image005.svg diff --git a/dox/user_guides/boolean_operations/images/operations_image006.svg b/dox/specification/boolean_operations/images/operations_image006.svg similarity index 100% rename from dox/user_guides/boolean_operations/images/operations_image006.svg rename to dox/specification/boolean_operations/images/operations_image006.svg diff --git a/dox/user_guides/boolean_operations/images/operations_image007.svg b/dox/specification/boolean_operations/images/operations_image007.svg similarity index 100% rename from dox/user_guides/boolean_operations/images/operations_image007.svg rename to dox/specification/boolean_operations/images/operations_image007.svg diff --git a/dox/user_guides/boolean_operations/images/operations_image008.svg b/dox/specification/boolean_operations/images/operations_image008.svg similarity index 100% rename from dox/user_guides/boolean_operations/images/operations_image008.svg rename to dox/specification/boolean_operations/images/operations_image008.svg diff --git a/dox/user_guides/boolean_operations/images/operations_image009.svg b/dox/specification/boolean_operations/images/operations_image009.svg similarity index 100% rename from dox/user_guides/boolean_operations/images/operations_image009.svg rename to dox/specification/boolean_operations/images/operations_image009.svg diff --git a/dox/user_guides/boolean_operations/images/operations_image010.svg b/dox/specification/boolean_operations/images/operations_image010.svg similarity index 100% rename from dox/user_guides/boolean_operations/images/operations_image010.svg rename to dox/specification/boolean_operations/images/operations_image010.svg diff --git a/dox/user_guides/boolean_operations/images/operations_image011.svg b/dox/specification/boolean_operations/images/operations_image011.svg similarity index 100% rename from dox/user_guides/boolean_operations/images/operations_image011.svg rename to dox/specification/boolean_operations/images/operations_image011.svg diff --git a/dox/user_guides/boolean_operations/images/operations_image012.svg b/dox/specification/boolean_operations/images/operations_image012.svg similarity index 100% rename from dox/user_guides/boolean_operations/images/operations_image012.svg rename to dox/specification/boolean_operations/images/operations_image012.svg diff --git a/dox/user_guides/boolean_operations/images/operations_image013.svg b/dox/specification/boolean_operations/images/operations_image013.svg similarity index 100% rename from dox/user_guides/boolean_operations/images/operations_image013.svg rename to dox/specification/boolean_operations/images/operations_image013.svg diff --git a/dox/user_guides/boolean_operations/images/operations_image014.svg b/dox/specification/boolean_operations/images/operations_image014.svg similarity index 100% rename from dox/user_guides/boolean_operations/images/operations_image014.svg rename to dox/specification/boolean_operations/images/operations_image014.svg diff --git a/dox/user_guides/boolean_operations/images/operations_image015.svg b/dox/specification/boolean_operations/images/operations_image015.svg similarity index 100% rename from dox/user_guides/boolean_operations/images/operations_image015.svg rename to dox/specification/boolean_operations/images/operations_image015.svg diff --git a/dox/user_guides/boolean_operations/images/operations_image016.svg b/dox/specification/boolean_operations/images/operations_image016.svg similarity index 100% rename from dox/user_guides/boolean_operations/images/operations_image016.svg rename to dox/specification/boolean_operations/images/operations_image016.svg diff --git a/dox/user_guides/boolean_operations/images/operations_image017.svg b/dox/specification/boolean_operations/images/operations_image017.svg similarity index 100% rename from dox/user_guides/boolean_operations/images/operations_image017.svg rename to dox/specification/boolean_operations/images/operations_image017.svg diff --git a/dox/user_guides/boolean_operations/images/operations_image018.svg b/dox/specification/boolean_operations/images/operations_image018.svg similarity index 100% rename from dox/user_guides/boolean_operations/images/operations_image018.svg rename to dox/specification/boolean_operations/images/operations_image018.svg diff --git a/dox/user_guides/boolean_operations/images/operations_image019.png b/dox/specification/boolean_operations/images/operations_image019.png similarity index 100% rename from dox/user_guides/boolean_operations/images/operations_image019.png rename to dox/specification/boolean_operations/images/operations_image019.png diff --git a/dox/user_guides/boolean_operations/images/operations_image020.png b/dox/specification/boolean_operations/images/operations_image020.png similarity index 100% rename from dox/user_guides/boolean_operations/images/operations_image020.png rename to dox/specification/boolean_operations/images/operations_image020.png diff --git a/dox/user_guides/boolean_operations/images/operations_image021.svg b/dox/specification/boolean_operations/images/operations_image021.svg similarity index 100% rename from dox/user_guides/boolean_operations/images/operations_image021.svg rename to dox/specification/boolean_operations/images/operations_image021.svg diff --git a/dox/user_guides/boolean_operations/images/operations_image022.svg b/dox/specification/boolean_operations/images/operations_image022.svg similarity index 100% rename from dox/user_guides/boolean_operations/images/operations_image022.svg rename to dox/specification/boolean_operations/images/operations_image022.svg diff --git a/dox/user_guides/boolean_operations/images/operations_image023.svg b/dox/specification/boolean_operations/images/operations_image023.svg similarity index 100% rename from dox/user_guides/boolean_operations/images/operations_image023.svg rename to dox/specification/boolean_operations/images/operations_image023.svg diff --git a/dox/user_guides/boolean_operations/images/operations_image024.svg b/dox/specification/boolean_operations/images/operations_image024.svg similarity index 100% rename from dox/user_guides/boolean_operations/images/operations_image024.svg rename to dox/specification/boolean_operations/images/operations_image024.svg diff --git a/dox/user_guides/boolean_operations/images/operations_image025.svg b/dox/specification/boolean_operations/images/operations_image025.svg similarity index 100% rename from dox/user_guides/boolean_operations/images/operations_image025.svg rename to dox/specification/boolean_operations/images/operations_image025.svg diff --git a/dox/user_guides/boolean_operations/images/operations_image026.svg b/dox/specification/boolean_operations/images/operations_image026.svg similarity index 100% rename from dox/user_guides/boolean_operations/images/operations_image026.svg rename to dox/specification/boolean_operations/images/operations_image026.svg diff --git a/dox/user_guides/boolean_operations/images/operations_image027.png b/dox/specification/boolean_operations/images/operations_image027.png similarity index 100% rename from dox/user_guides/boolean_operations/images/operations_image027.png rename to dox/specification/boolean_operations/images/operations_image027.png diff --git a/dox/user_guides/boolean_operations/images/operations_image028.png b/dox/specification/boolean_operations/images/operations_image028.png similarity index 100% rename from dox/user_guides/boolean_operations/images/operations_image028.png rename to dox/specification/boolean_operations/images/operations_image028.png diff --git a/dox/user_guides/boolean_operations/images/operations_image029.png b/dox/specification/boolean_operations/images/operations_image029.png similarity index 100% rename from dox/user_guides/boolean_operations/images/operations_image029.png rename to dox/specification/boolean_operations/images/operations_image029.png diff --git a/dox/user_guides/boolean_operations/images/operations_image030.png b/dox/specification/boolean_operations/images/operations_image030.png similarity index 100% rename from dox/user_guides/boolean_operations/images/operations_image030.png rename to dox/specification/boolean_operations/images/operations_image030.png diff --git a/dox/user_guides/boolean_operations/images/operations_image031.png b/dox/specification/boolean_operations/images/operations_image031.png similarity index 100% rename from dox/user_guides/boolean_operations/images/operations_image031.png rename to dox/specification/boolean_operations/images/operations_image031.png diff --git a/dox/user_guides/boolean_operations/images/operations_image032.png b/dox/specification/boolean_operations/images/operations_image032.png similarity index 100% rename from dox/user_guides/boolean_operations/images/operations_image032.png rename to dox/specification/boolean_operations/images/operations_image032.png diff --git a/dox/user_guides/boolean_operations/images/operations_image033.svg b/dox/specification/boolean_operations/images/operations_image033.svg similarity index 100% rename from dox/user_guides/boolean_operations/images/operations_image033.svg rename to dox/specification/boolean_operations/images/operations_image033.svg diff --git a/dox/user_guides/boolean_operations/images/operations_image036.svg b/dox/specification/boolean_operations/images/operations_image036.svg similarity index 100% rename from dox/user_guides/boolean_operations/images/operations_image036.svg rename to dox/specification/boolean_operations/images/operations_image036.svg diff --git a/dox/user_guides/boolean_operations/images/operations_image037.svg b/dox/specification/boolean_operations/images/operations_image037.svg similarity index 100% rename from dox/user_guides/boolean_operations/images/operations_image037.svg rename to dox/specification/boolean_operations/images/operations_image037.svg diff --git a/dox/user_guides/boolean_operations/images/operations_image038.svg b/dox/specification/boolean_operations/images/operations_image038.svg similarity index 100% rename from dox/user_guides/boolean_operations/images/operations_image038.svg rename to dox/specification/boolean_operations/images/operations_image038.svg diff --git a/dox/user_guides/boolean_operations/images/operations_image039a.png b/dox/specification/boolean_operations/images/operations_image039a.png similarity index 100% rename from dox/user_guides/boolean_operations/images/operations_image039a.png rename to dox/specification/boolean_operations/images/operations_image039a.png diff --git a/dox/user_guides/boolean_operations/images/operations_image039b.png b/dox/specification/boolean_operations/images/operations_image039b.png similarity index 100% rename from dox/user_guides/boolean_operations/images/operations_image039b.png rename to dox/specification/boolean_operations/images/operations_image039b.png diff --git a/dox/user_guides/boolean_operations/images/operations_image040.png b/dox/specification/boolean_operations/images/operations_image040.png similarity index 100% rename from dox/user_guides/boolean_operations/images/operations_image040.png rename to dox/specification/boolean_operations/images/operations_image040.png diff --git a/dox/user_guides/boolean_operations/images/operations_image041.png b/dox/specification/boolean_operations/images/operations_image041.png similarity index 100% rename from dox/user_guides/boolean_operations/images/operations_image041.png rename to dox/specification/boolean_operations/images/operations_image041.png diff --git a/dox/user_guides/boolean_operations/images/operations_image042.png b/dox/specification/boolean_operations/images/operations_image042.png similarity index 100% rename from dox/user_guides/boolean_operations/images/operations_image042.png rename to dox/specification/boolean_operations/images/operations_image042.png diff --git a/dox/user_guides/boolean_operations/images/operations_image043.png b/dox/specification/boolean_operations/images/operations_image043.png similarity index 100% rename from dox/user_guides/boolean_operations/images/operations_image043.png rename to dox/specification/boolean_operations/images/operations_image043.png diff --git a/dox/user_guides/boolean_operations/images/operations_image044.png b/dox/specification/boolean_operations/images/operations_image044.png similarity index 100% rename from dox/user_guides/boolean_operations/images/operations_image044.png rename to dox/specification/boolean_operations/images/operations_image044.png diff --git a/dox/user_guides/boolean_operations/images/operations_image045.png b/dox/specification/boolean_operations/images/operations_image045.png similarity index 100% rename from dox/user_guides/boolean_operations/images/operations_image045.png rename to dox/specification/boolean_operations/images/operations_image045.png diff --git a/dox/user_guides/boolean_operations/images/operations_image046.png b/dox/specification/boolean_operations/images/operations_image046.png similarity index 100% rename from dox/user_guides/boolean_operations/images/operations_image046.png rename to dox/specification/boolean_operations/images/operations_image046.png diff --git a/dox/user_guides/boolean_operations/images/operations_image047.png b/dox/specification/boolean_operations/images/operations_image047.png similarity index 100% rename from dox/user_guides/boolean_operations/images/operations_image047.png rename to dox/specification/boolean_operations/images/operations_image047.png diff --git a/dox/user_guides/boolean_operations/images/operations_image048.png b/dox/specification/boolean_operations/images/operations_image048.png similarity index 100% rename from dox/user_guides/boolean_operations/images/operations_image048.png rename to dox/specification/boolean_operations/images/operations_image048.png diff --git a/dox/user_guides/boolean_operations/images/operations_image049.png b/dox/specification/boolean_operations/images/operations_image049.png similarity index 100% rename from dox/user_guides/boolean_operations/images/operations_image049.png rename to dox/specification/boolean_operations/images/operations_image049.png diff --git a/dox/user_guides/boolean_operations/images/operations_image050.svg b/dox/specification/boolean_operations/images/operations_image050.svg similarity index 100% rename from dox/user_guides/boolean_operations/images/operations_image050.svg rename to dox/specification/boolean_operations/images/operations_image050.svg diff --git a/dox/user_guides/boolean_operations/images/operations_image051.svg b/dox/specification/boolean_operations/images/operations_image051.svg similarity index 100% rename from dox/user_guides/boolean_operations/images/operations_image051.svg rename to dox/specification/boolean_operations/images/operations_image051.svg diff --git a/dox/user_guides/boolean_operations/images/operations_image052.svg b/dox/specification/boolean_operations/images/operations_image052.svg similarity index 100% rename from dox/user_guides/boolean_operations/images/operations_image052.svg rename to dox/specification/boolean_operations/images/operations_image052.svg diff --git a/dox/user_guides/boolean_operations/images/operations_image053.svg b/dox/specification/boolean_operations/images/operations_image053.svg similarity index 100% rename from dox/user_guides/boolean_operations/images/operations_image053.svg rename to dox/specification/boolean_operations/images/operations_image053.svg diff --git a/dox/user_guides/boolean_operations/images/operations_image054.svg b/dox/specification/boolean_operations/images/operations_image054.svg similarity index 100% rename from dox/user_guides/boolean_operations/images/operations_image054.svg rename to dox/specification/boolean_operations/images/operations_image054.svg diff --git a/dox/user_guides/boolean_operations/images/operations_image055.svg b/dox/specification/boolean_operations/images/operations_image055.svg similarity index 100% rename from dox/user_guides/boolean_operations/images/operations_image055.svg rename to dox/specification/boolean_operations/images/operations_image055.svg diff --git a/dox/user_guides/boolean_operations/images/operations_image060.png b/dox/specification/boolean_operations/images/operations_image060.png similarity index 100% rename from dox/user_guides/boolean_operations/images/operations_image060.png rename to dox/specification/boolean_operations/images/operations_image060.png diff --git a/dox/user_guides/boolean_operations/images/operations_image061.png b/dox/specification/boolean_operations/images/operations_image061.png similarity index 100% rename from dox/user_guides/boolean_operations/images/operations_image061.png rename to dox/specification/boolean_operations/images/operations_image061.png diff --git a/dox/user_guides/boolean_operations/images/operations_image062.png b/dox/specification/boolean_operations/images/operations_image062.png similarity index 100% rename from dox/user_guides/boolean_operations/images/operations_image062.png rename to dox/specification/boolean_operations/images/operations_image062.png diff --git a/dox/user_guides/boolean_operations/images/operations_image063.png b/dox/specification/boolean_operations/images/operations_image063.png similarity index 100% rename from dox/user_guides/boolean_operations/images/operations_image063.png rename to dox/specification/boolean_operations/images/operations_image063.png diff --git a/dox/user_guides/boolean_operations/images/operations_image064.png b/dox/specification/boolean_operations/images/operations_image064.png similarity index 100% rename from dox/user_guides/boolean_operations/images/operations_image064.png rename to dox/specification/boolean_operations/images/operations_image064.png diff --git a/dox/user_guides/boolean_operations/images/operations_image065.png b/dox/specification/boolean_operations/images/operations_image065.png similarity index 100% rename from dox/user_guides/boolean_operations/images/operations_image065.png rename to dox/specification/boolean_operations/images/operations_image065.png diff --git a/dox/user_guides/brep_wp/brep_wp.md b/dox/specification/brep_format.md similarity index 95% rename from dox/user_guides/brep_wp/brep_wp.md rename to dox/specification/brep_format.md index 47a07c0d8c..82c508aabc 100644 --- a/dox/user_guides/brep_wp/brep_wp.md +++ b/dox/specification/brep_format.md @@ -1,9 +1,9 @@ - BRep Format {#occt_user_guides__brep_wp} +BRep Format {#specification__brep_format} ======================== -@tableofcontents +@tableofcontents -@section occt_brep_format_1 Introduction +@section specification__brep_format_1 Introduction BREP format is used to store 3D models and allows to store a model which consists of vertices, edges, wires, faces, shells, solids, compsolids, compounds, edge triangulations, @@ -24,8 +24,25 @@ Some data fields of the format have additional values, which are used in OCCT. Some data fields of the format are specific for OCCT. + +@section specification__brep_format_2 Storage of shapes + +*BRepTools* and *BinTools* packages contain methods *Read* and *Write* allowing to read and write a Shape to/from a stream or a file. +The methods provided by *BRepTools* package use ASCII storage format; *BinTools* package uses binary format. +Each of these methods has two arguments: +- a *TopoDS_Shape* object to be read/written; +- a stream object or a file name to read from/write to. + +The following sample code reads a shape from ASCII file and writes it to a binary one: + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{.cpp} + TopoDS_Shape aShape; + if (BRepTools::Read (aShape, "source_file.txt")) { + BinTools::Write (aShape, "result_file.bin"); + } +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -@section occt_brep_format_2 Format Common Structure +@section specification__brep_format_3 Format Common Structure ASCII encoding is used to read/write BREP format from/to file. The format data are stored in a file as text data. @@ -59,7 +76,7 @@ Some data fields of the format are specific for OCCT. Sections \, \ and \ are described below in separate chapters of the document. -@section occt_brep_format_3 Locations +@section specification__brep_format_4 Locations **Example** @@ -143,7 +160,7 @@ Q\cdot(x\;y\;z\;1)^{T} = \ is interpreted as a composition of locations raised to a power and placed above this \ in the section \. \ is a sequence @f$l_{1}p_{1} ... l_{n}p_{n}@f$ of @f$ n \geq 0 @f$ integer pairs @f$ l_{i}p_{i} \; (1 \leq i \leq n) @f$. \ 0 is the indicator of the sequence end. The sequence is interpreted as a composition @f$ L_{l_{1}}^{p_{1}} \cdot ... \cdot L_{l_{n}}^{p_{n}} @f$ where @f$ L_{l_{i}} @f$ is a location from @f$ l_{i} @f$-th \ in the section locations. \ numbering starts from 1. -@section occt_brep_format_4 Geometry +@section specification__brep_format_5 Geometry @verbatim = @@ -155,7 +172,7 @@ Q\cdot(x\;y\;z\;1)^{T} = ; @endverbatim -@subsection occt_brep_format_4_1 3D curves +@subsection specification__brep_format_5_1 3D curves **Example** @@ -199,7 +216,7 @@ Q\cdot(x\;y\;z\;1)^{T} = <3D curve record 9>; @endverbatim -@subsubsection occt_brep_format_4_1_1 Line - \<3D curve record 1\> +@subsubsection specification__brep_format_5_1_1 Line - \<3D curve record 1\> **Example** @@ -222,7 +239,7 @@ Q\cdot(x\;y\;z\;1)^{T} = The example record is interpreted as a line which passes through a point *P*=(1, 0, 3), has a direction *D*=(0, 1, 0) and is defined by the following parametric equation: @f$ C(u)=(1,0,3)+u \cdot (0,1,0) @f$. -@subsubsection occt_brep_format_4_1_2 Circle - \<3D curve record 2\> +@subsubsection specification__brep_format_5_1_2 Circle - \<3D curve record 2\> **Example** @@ -255,7 +272,7 @@ The example record is interpreted as a line which passes through a point *P*=(1 The example record is interpreted as a circle which has its center *P*=(1, 2, 3), is located in plane with a normal *N*=(0, 0 ,1). Directions for the circle are *Dx*=(1, 0 ,0) and *Dy*=(0, 1 ,0). The circle has a radius *r*=4 and is defined by the following parametric equation: @f$ C(u) = (1,2,3) + 4 \cdot ( cos(u) \cdot(1,0,0) + sin(u) \cdot (0,1,0) ) @f$. -@subsubsection occt_brep_format_4_1_3 Ellipse - \<3D curve record 3\> +@subsubsection specification__brep_format_5_1_3 Ellipse - \<3D curve record 3\> **Example** @@ -290,7 +307,7 @@ The example record is interpreted as a circle which has its center *P*=(1, 2, 3 The example record is interpreted as an ellipse which has its center *P*=(1, 2, 3), is located in plane with a normal *N*=(0, 0, 1), has major and minor axis directions *Dmaj*=(1, 0, 0) and *Dmin*=(0, 1, 0), major and minor radii *rmaj*=5 and *rmin*=4 and is defined by the following parametric equation: @f$ C(u) = (1,2,3) + 5 \cdot cos(u) \cdot(1,0,0) + 4 \cdot sin(u) \cdot (0,1,0) @f$. -@subsubsection occt_brep_format_4_1_4 Parabola - \<3D curve record 4\> +@subsubsection specification__brep_format_5_1_4 Parabola - \<3D curve record 4\> **Example** @@ -324,7 +341,7 @@ The example record is interpreted as an ellipse which has its center *P*=(1, 2, The example record is interpreted as a parabola in plane which passes through a point *P*=(1, 2, 3) and has a normal *N*=(0, 0, 1). Directions for the parabola are *Dx*=(1, 0, 0) and *Dy*=(0, 1, 0). The parabola has a focus length *f*=16 and is defined by the following parametric equation: @f$ C(u) = (1,2,3) + \frac{u^{2}}{64} \cdot (1,0,0) + u \cdot (0,1,0) @f$. -@subsubsection occt_brep_format_4_1_5 Hyperbola - \<3D curve record 5\> +@subsubsection specification__brep_format_5_1_5 Hyperbola - \<3D curve record 5\> **Example** @@ -359,7 +376,7 @@ The example record is interpreted as a parabola in plane which passes through a The example record is interpreted as a hyperbola in plane which passes through a point *P*=(1, 2, 3) and has a normal *N*=(0, 0, 1). Other hyperbola data are *Dx*=(1, 0, 0), *Dy*=(0, 1, 0), *kx*=5 and *ky*=4. The hyperbola is defined by the following parametric equation: @f$ C(u) = (1,2,3) + 5 \cdot cosh(u) \cdot (1,0,0) +4 \cdot sinh(u) \cdot (0,1,0) @f$. -@subsubsection occt_brep_format_4_1_6 Bezier Curve - \<3D curve record 6\> +@subsubsection specification__brep_format_5_1_6 Bezier Curve - \<3D curve record 6\> **Example** @@ -399,7 +416,7 @@ The example record is interpreted as a Bezier curve with a rational flag *r*=1, @f[ C(u)=\frac{(0,1,0) \cdot 4 \cdot (1-u)^{2}+(1,-2,0) \cdot 5 \cdot 2 \cdot u \cdot (1-u) + (2,3,0) \cdot 6 \cdot u^{2} )}{4 \cdot (1-u)^{2}+5 \cdot 2 \cdot u \cdot (1-u)+6 \cdot u^{2}}. @f] -@subsubsection occt_brep_format_4_1_7 B-spline Curve - \<3D curve record 7\> +@subsubsection specification__brep_format_5_1_7 B-Spline Curve - \<3D curve record 7\> **Example** @@ -463,7 +480,7 @@ The example record is interpreted as a B-spline curve with a rational flag *r*= @f[ C(u)=\frac{(0,1,0) \cdot 4 \cdot N_{1,2}(u) + (1,-2,0) \cdot 5 \cdot N_{2,2}(u)+(2,3,0) \cdot 6 \cdot N_{3,2}(u)}{4 \cdot N_{1,2}(u)+5 \cdot N_{2,2}(u)+6 \cdot N_{3,2}(u)}. @f] -@subsubsection occt_brep_format_4_1_8 Trimmed Curve - \<3D curve record 8\> +@subsubsection specification__brep_format_5_1_8 Trimmed Curve - \<3D curve record 8\> **Example** @@ -491,7 +508,7 @@ The example record is interpreted as a B-spline curve with a rational flag *r*= The example record is interpreted as a trimmed curve with *umin*=-4 and *umax*=5 for the base curve @f$ B(u)=(1,2,3)+u \cdot (1,0,0) @f$. The trimmed curve is defined by the following parametric equation: @f$ C(u)=(1,2,3)+u \cdot (1,0,0),\; u \in [-4,\; 5] @f$. -@subsubsection occt_brep_format_4_1_9 Offset Curve - \<3D curve record 9\> +@subsubsection specification__brep_format_5_1_9 Offset Curve - \<3D curve record 9\> **Example** @@ -521,7 +538,7 @@ The example record is interpreted as a trimmed curve with *umin*=-4 The example record is interpreted as an offset curve with a distance *d*=2, direction *D*=(0, 1, 0), base curve @f$ B(u)=(1,2,3)+u \cdot (1,0,0) @f$ and defined by the following parametric equation: @f$ C(u)=(1,2,3)+u \cdot (1,0,0)+2 \cdot (0,0,1) @f$. -@subsection occt_brep_format_4_2 Surfaces +@subsection specification__brep_format_5_2 Surfaces **Example** @@ -558,7 +575,7 @@ The example record is interpreted as an offset curve with a distance *d*=2, dire ; @endverbatim -@subsubsection occt_brep_format_4_2_1 Plane - \< surface record 1 \> +@subsubsection specification__brep_format_5_2_1 Plane - \< surface record 1 \> **Example** @@ -581,7 +598,7 @@ The example record is interpreted as an offset curve with a distance *d*=2, dire The example record is interpreted as a plane which passes through a point *P*=(0, 0, 3), has a normal *N*=(0, 0, 1) and is defined by the following parametric equation: @f$ S(u,v)=(0,0,3)+u \cdot (1,0,0) + v \cdot (0,1,0) @f$. -@subsubsection occt_brep_format_4_2_2 Cylinder - \< surface record 2 \> +@subsubsection specification__brep_format_5_2_2 Cylinder - \< surface record 2 \> **Example** @@ -604,7 +621,7 @@ The example record is interpreted as a plane which passes through a point *P*=( The example record is interpreted as a cylinder which axis passes through a point *P*=(1, 2, 3) and has a direction *Dv*=(0, 0, 1). Directions for the cylinder are *DX*=(1,0,0) and *DY*=(0,1,0). The cylinder has a radius *r*=4 and is defined by the following parametric equation: @f$ S(u,v)=(1,2,3)+4 \cdot ( cos(u) \cdot D_{X} + sin(u) \cdot D_{Y} ) + v \cdot D_{v}. @f$ -@subsubsection occt_brep_format_4_2_3 Cone - \< surface record 3 \> +@subsubsection specification__brep_format_5_2_3 Cone - \< surface record 3 \> **Example** @@ -629,8 +646,8 @@ The example record is interpreted as a cylinder which axis passes through a poi The example record is interpreted as a cone with an axis which passes through a point *P*=(1, 2, 3) and has a direction *DZ*=(0, 0, 1). Other cone data are *DX*=(1, 0, 0), *DY*=(0, 1, 0), *r*=4 and @f$ \varphi = 0.75 @f$. The cone is defined by the following parametric equation: @f[ S(u,v)=(1,2,3)+( 4 + v \cdot sin(0.75)) \cdot ( cos(u) \cdot (1,0,0) + sin(u) \cdot (0,1,0) ) + v \cdot cos(0.75) \cdot (0,0,1) . @f] - -@subsubsection occt_brep_format_4_2_4 Sphere - \< surface record 4 \> + +@subsubsection specification__brep_format_5_2_4 Sphere - \< surface record 4 \> **Example** @@ -654,7 +671,7 @@ The example record is interpreted as a sphere with its center *P*=(1, 2, 3). Di @f[ S(u,v)=(1,2,3)+ 4 \cdot cos(v) \cdot ( cos(u) \cdot (1,0,0) + sin(u) \cdot (0,1,0) ) + 4 \cdot sin(v) \cdot (0,0,1) . @f] -@subsubsection occt_brep_format_4_2_5 Torus - \< surface record 5 \> +@subsubsection specification__brep_format_5_2_5 Torus - \< surface record 5 \> **Example** @@ -678,7 +695,7 @@ The example record is interpreted as a torus with an axis which passes through a @f[ S(u,v)=(1,2,3)+ (8+4 \cdot cos(v)) \cdot ( cos(u) \cdot (1,0,0) + sin(u) \cdot (0,1,0) ) + 4 \cdot sin(v) \cdot (0,0,1) . @f] -@subsubsection occt_brep_format_4_2_6 Linear Extrusion - \< surface record 6 \> +@subsubsection specification__brep_format_5_2_6 Linear Extrusion - \< surface record 6 \> **Example** @@ -704,7 +721,7 @@ The example record is interpreted as a linear extrusion surface with a directio @f[ S(u,v)=(1,2,3)+4 \cdot (cos(u) \cdot (1,0,0)+sin(u) \cdot (0,1,0))+v \cdot (0, 0.6, 0.8),\; (u,v) \in [0,\; 2 \cdot \pi) \times (-\infty,\; \infty). @f] -@subsubsection occt_brep_format_4_2_7 Revolution Surface - \< surface record 7 \> +@subsubsection specification__brep_format_5_2_7 Revolution Surface - \< surface record 7 \> **Example** @@ -734,7 +751,7 @@ The example record is interpreted as a revolution surface with an axis which pas where @f$ V(v)=(5,2,0)+4 \cdot (cos(v) \cdot (1,0,0)+sin(v) \cdot (0,1,0)), V_{D}(v)=((0,1,0),V(v)) \cdot (0,1,0) @f$. -@subsubsection occt_brep_format_4_2_8 Bezier Surface - \< surface record 8 \> +@subsubsection specification__brep_format_5_2_8 Bezier Surface - \< surface record 8 \> **Example** @@ -790,7 +807,7 @@ S(u,v)= [ (0,0,1) \cdot 7 \cdot (1-u)^{2} \cdot (1-v)+(1,0,-4) \cdot 10 \cdot (1 @f] -@subsubsection occt_brep_format_4_2_9 B-spline Surface - \< surface record 9 \> +@subsubsection specification__brep_format_5_2_9 B-spline Surface - \< surface record 9 \> **Example** @@ -908,7 +925,7 @@ S(u,v)= [ (0,0,1) \cdot 7 \cdot N_{1,2}(u) \cdot M_{1,2}(v)+(1,0,-4) \cdot 10 \c \end{align} @f] -@subsubsection occt_brep_format_4_2_10 Rectangular Trim Surface - \< surface record 10 \> +@subsubsection specification__brep_format_5_2_10 Rectangular Trim Surface - \< surface record 10 \> **Example** @@ -941,7 +958,7 @@ S(u,v)= [ (0,0,1) \cdot 7 \cdot N_{1,2}(u) \cdot M_{1,2}(v)+(1,0,-4) \cdot 10 \c The example record is interpreted as a rectangular trim surface to the set [-1, 2]x[-3, 4] for the base surface @f$ B(u,v)=(1,2,3)+u \cdot (1,0,0)+v \cdot (0,1,0) @f$. The rectangular trim surface is defined by the following parametric equation: @f$ B(u,v)=(1,2,3)+u \cdot (1,0,0)+ v \cdot (0,1,0),\; (u,v) \in [-1,2] \times [-3,4] @f$. -@subsubsection occt_brep_format_4_2_11 Offset Surface - \< surface record 11 \> +@subsubsection specification__brep_format_5_2_11 Offset Surface - \< surface record 11 \> **Example** @@ -970,7 +987,7 @@ if @f$ [S'_{u}(u,v),S'_{v}(u,v)] \neq \vec{0} @f$. The example record is interpreted as an offset surface with a distance *d*=-2 and base surface @f$ B(u,v)=(1,2,3)+u \cdot (1,0,0)+v \cdot (0,1,0) @f$. The offset surface is defined by the following parametric equation: @f$ S(u,v)=(1,2,3)+u \cdot (1,0,0)+v \cdot (0,1,0)-2 \cdot (0,0,1) @f$. -@subsection occt_brep_format_4_3 2D curves +@subsection specification__brep_format_5_3 2D curves **Example** @@ -1025,7 +1042,7 @@ The example record is interpreted as an offset surface with a distance *d*=-2  <2D curve record 9>; @endverbatim -@subsubsection occt_brep_format_4_3_1 Line - \<2D curve record 1\> +@subsubsection specification__brep_format_5_3_1 Line - \<2D curve record 1\> **Example** @@ -1048,7 +1065,7 @@ The example record is interpreted as an offset surface with a distance *d*=-2  The example record is interpreted as a line which passes through a point *P*=(3,0), has a direction *D*=(0,-1) and is defined by the following parametric equation: @f$ C(u)=(3,0)+ u \cdot (0,-1) @f$. -@subsubsection occt_brep_format_4_3_2 Circle - \<2D curve record 2\> +@subsubsection specification__brep_format_5_3_2 Circle - \<2D curve record 2\> **Example** @@ -1079,7 +1096,7 @@ The example record is interpreted as a line which passes through a point *P*=(3 The example record is interpreted as a circle which has a center *P*=(1,2). The circle plane is parallel to directions *Dx*=(1,0) and *Dy*=(0,1). The circle has a radius *r*=3 and is defined by the following parametric equation: @f$ C(u)=(1,2)+3 \cdot (cos(u) \cdot (1,0) + sin(u) \cdot (0,1)) @f$. -@subsubsection occt_brep_format_4_3_3 Ellipse - \<2D curve record 3\> +@subsubsection specification__brep_format_5_3_3 Ellipse - \<2D curve record 3\> **Example** @@ -1113,7 +1130,7 @@ The example record is interpreted as a circle which has a center *P*=(1,2). Th The example record is interpreted as an ellipse which has a center *P*=(1,2), major and minor axis directions *Dmaj*=(1,0) and *Dmin*=(0,1), major and minor radii *rmaj*=4 and *rmin*=3 and is defined by the following parametric equation: @f$ C(u)=(1,2)+4 \cdot cos(u) \cdot (1,0)+3 \cdot sin(u) \cdot (0,1) @f$. -@subsubsection occt_brep_format_4_3_4 Parabola - \<2D curve record 4\> +@subsubsection specification__brep_format_5_3_4 Parabola - \<2D curve record 4\> **Example** @@ -1146,7 +1163,7 @@ C(u)=P+u \cdot D_{x},\; u \in (-\infty,\; \infty) \Leftarrow f = 0\; (degenerate The example record is interpreted as a parabola in plane which passes through a point *P*=(1,2) and is parallel to directions *Dx*=(1,0) and *Dy*=(0,1). The parabola has a focus length *f*=16 and is defined by the following parametric equation: @f$ C(u)=(1,2)+ \frac{u^{2}}{64} \cdot (1,0)+u \cdot (0,1) @f$. -@subsubsection occt_brep_format_4_3_5 Hyperbola - \<2D curve record 5\> +@subsubsection specification__brep_format_5_3_5 Hyperbola - \<2D curve record 5\> **Example** 5 1 2 1 0 -0 1 3 4 @@ -1178,7 +1195,7 @@ The example record is interpreted as a parabola in plane which passes through a The example record is interpreted as a hyperbola with coordinate system which has origin *P*=(1,2) and axis directions *Dx*=(1,0) and *Dy*=(0,1). Other data for the hyperbola are *kx*=5 and *ky*=4. The hyperbola is defined by the following parametric equation: @f$ C(u)=(1,2)+3 \cdot cosh(u) \cdot (1,0)+4 \cdot sinh(u) \cdot (0,1) @f$. -@subsubsection occt_brep_format_4_3_6 Bezier Curve - \<2D curve record 6\> +@subsubsection specification__brep_format_5_3_6 Bezier Curve - \<2D curve record 6\> **Example** @@ -1218,7 +1235,7 @@ The example record is interpreted as a Bezier curve with a rational flag *r*=1, @f[ C(u)= \frac{(0,1) \cdot 4 \cdot (1-u)^{2}+(1,-2) \cdot 5 \cdot 2 \cdot u \cdot (1-u)+(2,3) \cdot 6 \cdot u^{2}}{ 4 \cdot (1-u)^{2}+5 \cdot 2 \cdot u \cdot (1-u)+6 \cdot u^{2}} . @f] -@subsubsection occt_brep_format_4_3_7 B-spline Curve - \<2D curve record 7\> +@subsubsection specification__brep_format_5_3_7 B-spline Curve - \<2D curve record 7\> **Example** @@ -1281,7 +1298,7 @@ The example record is interpreted as a B-spline curve with a rational flag *r*=1 @f[ C(u)= \frac{(0,1) \cdot 4 \cdot N_{1,2}(u)+(1,-2) \cdot 5 \cdot N_{2,2}(u)+(2,3) \cdot 6 \cdot N_{3,2}(u)}{ 4 \cdot N_{1,2}(u)+5 \cdot N_{2,2}(u)+6 \cdot N_{3,2}(u)} . @f] -@subsubsection occt_brep_format_4_3_8 Trimmed Curve - \<2D curve record 8\> +@subsubsection specification__brep_format_5_3_8 Trimmed Curve - \<2D curve record 8\> **Example** @@ -1310,7 +1327,7 @@ The example record is interpreted as a B-spline curve with a rational flag *r*=1 The example record is interpreted as a trimmed curve with *umin*=-4, *umax*=5 and base curve @f$ B(u)=(1,2)+u \cdot (1,0) @f$. The trimmed curve is defined by the following parametric equation: @f$ C(u)=(1,2)+u \cdot (1,0),\; u \in [-4,5] @f$. -@subsubsection occt_brep_format_4_3_9 Offset Curve - \<2D curve record 9\> +@subsubsection specification__brep_format_5_3_9 Offset Curve - \<2D curve record 9\> **Example** @@ -1335,7 +1352,7 @@ The example record is interpreted as a trimmed curve with *umin*=-4, The example record is interpreted as an offset curve with a distance *d*=2 and base curve @f$ B(u)=(1,2)+u \cdot (1,0) @f$ and is defined by the following parametric equation: @f$ C(u)=(1,2)+u \cdot (1,0)+2 \cdot (0,-1) @f$. -@subsection occt_brep_format_4_4 3D polygons +@subsection specification__brep_format_5_4 3D polygons **Example** @@ -1390,7 +1407,7 @@ The parameter @f$ u_{i}\; (1\leq i \leq m) @f$ is the parameter of the node *N1
*=(1,0,0) and *N2*=(2,0,0) and parameters *u1*=0 and *u2*=1. -@subsection occt_brep_format_4_5 Triangulations +@subsection specification__brep_format_6_4 Triangulations **Example** @@ -1466,7 +1483,7 @@ Triangulation record describes a triangulation with *m*=4 nodes, *k*=2 triangles, parameter presence flag *p*=1, deflection *d*=0, nodes *N1*=(0,0,0), *N2*=(0,0,3), *N3*=(0,2,3) and *N4*=(0,2,0), parameters (*u1*, *v1*)=(0,0), (*u2*, *v2*)=(3,0), (*u3*, *v3*)=(3,-2) and (*u4*, *v4*)=(0,-2), and triangles (*n1,1*, *n1,2*, *n1,3*)=(2,4,3) and (*n2,1*, *n2,2*, *n2,3*)=(2,1,4). From the point (1,0,0) ((-1,0,0)) the triangles have clockwise (counterclockwise) direction of the node circular traversal. -@subsection occt_brep_format_4_6 Polygons on triangulations +@subsection specification__brep_format_6_5 Polygons on triangulations **Example** @@ -1568,14 +1585,14 @@ describes a triangulation with *m*=4 nodes, *k*=2 triangles, parameter presenc Parameter @f$ u_{i}\; (1\leq i\leq m) @f$ is *ni*-th node *C(ui)* parameter on curve *C*. -@subsection occt_brep_format_4_7 Geometric Sense of a Curve +@subsection specification__brep_format_6_6 Geometric Sense of a Curve Geometric sense of curve *C* described above is determined by the direction of parameter *u* increasing. -@section occt_brep_format_5 Shapes +@section specification__brep_format_7 Shapes -An example of section shapes and a whole *.brep file are given in chapter 7 @ref occt_brep_format_6 "Appendix". +An example of section shapes and a whole *.brep file are given in chapter 7 @ref specification__brep_format_8 "Appendix". **BNF-like Definition** @@ -1655,7 +1672,7 @@ The flags are used in a special way [1]. \ determines the orientation and location for the whole model. -@subsection occt_brep_format_5_1 Common Terms +@subsection specification__brep_format_7_1 Common Terms The terms below are used by \, \ and \. @@ -1705,7 +1722,7 @@ The terms below are used by \, \ and \. \ *umin* and *umax* are real pairs *xmin ymin* and *xmax ymax* that (*xmin*, *ymin*)= *C* (*umin*) and (*xmax*, *ymax*)= *C* (*umax*) where *C* is a parametric equation of the curve. -@subsection occt_brep_format_5_2 Vertex data +@subsection specification__brep_format_7_2 Vertex data **BNF-like Definition** @@ -1754,7 +1771,7 @@ The usage of \ *U* is described belo @f[ \underset{P \in R }{max} |P-V| \leq t . @f] -@subsection occt_brep_format_5_3 Edge data +@subsection specification__brep_format_7_3 Edge data **BNF-like Definition** @@ -1824,7 +1841,7 @@ Flags \, \ and \, \ and \ is used in a special way [1]. -@section occt_brep_format_6 Appendix +@section specification__brep_format_8 Appendix This chapter contains a *.brep file example. @@ -2263,4 +2280,4 @@ Flag \ is used in a special way [1]. +1 0 0 -@endverbatim \ No newline at end of file +@endverbatim diff --git a/dox/dev_guides/visualization/pbr_math.md b/dox/specification/pbr_math.md similarity index 99% rename from dox/dev_guides/visualization/pbr_math.md rename to dox/specification/pbr_math.md index 6f80c63346..07f982099e 100644 --- a/dox/dev_guides/visualization/pbr_math.md +++ b/dox/specification/pbr_math.md @@ -1,4 +1,4 @@ -PBR math (rasterization) {#occt_dev_guides__pbr_math} +PBR math (rasterization) {#specification__pbr_math} ======================== @tableofcontents diff --git a/dox/specification/specification.md b/dox/specification/specification.md new file mode 100644 index 0000000000..dba17e2760 --- /dev/null +++ b/dox/specification/specification.md @@ -0,0 +1,8 @@ +Specifications {#specification} +============= + +This chapter contains the detailed specifications infomation: + +* @subpage specification__boolean_operations "Boolean Operations" +* @subpage specification__brep_format "BRep Format" +* @subpage specification__pbr_math "PBR math (rasterization)" \ No newline at end of file diff --git a/dox/upgrade/upgrade.md b/dox/upgrade/upgrade.md index f1824c5bc6..be36296f37 100644 --- a/dox/upgrade/upgrade.md +++ b/dox/upgrade/upgrade.md @@ -1552,7 +1552,7 @@ Since the new version, the method *BRepAdaptor_CompCurve::IsPeriodic()* will alw @subsection upgrade_730_BuilderSolid Boolean Operations - Solid Builder algorithm Previously, the unclassified faces of *BOPAlgo_BuilderSolid* algorithm (i.e. the faces not used for solids creation and located outside of all created solids) were used to form an additional (not closed) solid with INTERNAL orientation. -Since the new version, these unclassified faces are no longer added into the resulting solids. Instead, the @ref occt_algorithms_ers "warning" with a list of these faces appears. +Since the new version, these unclassified faces are no longer added into the resulting solids. Instead, the @ref specification__boolean_ers "warning" with a list of these faces appears. The following public methods of the *BOPAlgo_BuilderSolid* class have been removed as redundant: * *void SetSolid(const TopoDS_Solid& theSolid);* diff --git a/dox/user_guides/draw_test_harness/draw_test_harness.md b/dox/user_guides/draw_test_harness/draw_test_harness.md index b5ae421a01..5104cfe955 100644 --- a/dox/user_guides/draw_test_harness/draw_test_harness.md +++ b/dox/user_guides/draw_test_harness/draw_test_harness.md @@ -6979,7 +6979,7 @@ sr is a shape COMPOUND FORWARD Free Modified The new algorithm of Boolean operations avoids a large number of weak points and limitations presented in the old Boolean operation algorithm. It also provides wider range of options and diagnostics. -The algorithms of Boolean component are fully described in the @ref occt_algorithms_1 "Boolean Operations" of boolean operation user guide. +The algorithms of Boolean component are fully described in the @ref specification__boolean_1 "Boolean Operations" of boolean operation user guide. For the Draw commands to perform operations in Boolean component, read the dedicated section @ref occt_draw_bop "Boolean operations commands" @@ -8333,7 +8333,7 @@ The defaults are: @section occt_draw_bop Boolean Operations Commands This chapter describes existing commands of Open CASCADE Draw Test Harness that are used for performing, analyzing, debugging the algorithm in Boolean Component. -See @ref occt_user_guides__boolean_operations "Boolean operations" user's guide for the description of these algorithms. +See @ref specification__boolean_operations "Boolean operations" user's guide for the description of these algorithms. @subsection occt_draw_bop_two Boolean Operations on two operands @@ -8419,7 +8419,7 @@ shape1, shape2 - arguments of the operation The modern Boolean Operations algorithm available in Open CASCADE Technology is capable of performing a Boolean Operations not only on two shapes, but on arbitrary number of shapes. In terms of Boolean Operations these arguments are divided on two groups **Objects** and **Tools**. The meaning of these groups is similar to the single object and tool of Boolean Operations on two shapes. -The Boolean operations are based on the General Fuse operation (see @ref occt_algorithms_7 "General Fuse algorithm") which splits all input shapes basing on the intersection results. +The Boolean operations are based on the General Fuse operation (see @ref specification__boolean_7 "General Fuse algorithm") which splits all input shapes basing on the intersection results. Depending on the type of Boolean operation the BOP algorithm choses the necessary splits of the arguments. @subsection occt_draw_bop_general_com General commands for working with multiple arguments @@ -8542,7 +8542,7 @@ bsplit result There is an alternative way to build the result of Boolean operation using the **buildbop** command, which should be run after any other building command, such as **bbuild** or **bbop** or **bsplit**. The command has the following features: -* It is designed to work on open solids and thus uses the alternative approach for building the results (see @ref occt_algorithms_bop_on_opensolids "BOP on open solids" chapter of Boolean operations user guide). +* It is designed to work on open solids and thus uses the alternative approach for building the results (see @ref specification__boolean_bop_on_opensolids "BOP on open solids" chapter of Boolean operations user guide). * It allows changing the groups of Objects and Tools of the operation (even excluding some of the arguments is possible). * History information for solids will be lost. @@ -8596,7 +8596,7 @@ buildbop r11 -o b1 -t b2 b3 -op tuc @subsubsection occt_draw_bop_build_CB Cells Builder -See the @ref occt_algorithms_10c_Cells_1 "Cells Builder Usage" for the Draw usage of Cells Builder algorithm. +See the @ref specification__boolean_10c_Cells_1 "Cells Builder Usage" for the Draw usage of Cells Builder algorithm. @subsubsection occt_draw_bop_build_API Building result through API diff --git a/dox/user_guides/modeling_algos/modeling_algos.md b/dox/user_guides/modeling_algos/modeling_algos.md index 9977a562e8..20734055b0 100644 --- a/dox/user_guides/modeling_algos/modeling_algos.md +++ b/dox/user_guides/modeling_algos/modeling_algos.md @@ -2069,7 +2069,7 @@ From the viewpoint of Topology these are topological operations followed by blen Topological operations are the most convenient way to create real industrial parts. As most industrial parts consist of several simple elements such as gear wheels, arms, holes, ribs, tubes and pipes. It is usually easy to create those elements separately and then to combine them by Boolean operations in the whole final part. -See @ref occt_user_guides__boolean_operations "Boolean Operations" for detailed documentation. +See @ref specification__boolean_operations "Boolean Operations" for detailed documentation. @subsection occt_modalg_5_1 Input and Result Arguments @@ -3338,7 +3338,7 @@ On the low-level the history information is collected by the history tool *BRepT * *BOPAlgo_AlertUnableToRemoveTheFeature* - the warning alert is given to inform the user the removal of the feature is not possible. The algorithm will still try to remove the other features; * *BOPAlgo_AlertRemoveFeaturesFailed* - the error alert is given in case if the operation was aborted by the unknown reason. -For more information on the error/warning reporting system, see the chapter @ref occt_algorithms_ers "Errors and warnings reporting system" of Boolean operations user guide. +For more information on the error/warning reporting system, see the chapter @ref specification__boolean_ers "Errors and warnings reporting system" of Boolean operations user guide. Parallel processing mode - allows running the algorithm in parallel mode obtaining the result faster. @@ -3552,7 +3552,7 @@ The algorithm returns the following alerts: * *BOPAlgo_AlertUnableToMakeIdentical* - Error alert is given if splitting of the shape by its moved copies has failed; * *BOPAlgo_AlertUnableToRepeat* - Warning alert is given if the gluing of the repeated shapes has failed. -For more information on the error/warning reporting system please see the chapter @ref occt_algorithms_ers "Errors and warnings reporting system" of Boolean operations user guide. +For more information on the error/warning reporting system please see the chapter @ref specification__boolean_ers "Errors and warnings reporting system" of Boolean operations user guide. @subsection occt_modalg_makeperiodic_usage Usage @@ -3616,7 +3616,7 @@ For more details on the periodicity commands please refer the @ref occt_draw_mak To track the history of a shape modification during MakePeriodic operation the @ref occt_draw_hist "standard history commands" can be used. -To have possibility to access the error/warning shapes of the operation use the *bdrawwarnshapes* command before running the algorithm (see command usage in the @ref occt_algorithms_ers "Errors and warnings reporting system" of Boolean operations user guide). +To have possibility to access the error/warning shapes of the operation use the *bdrawwarnshapes* command before running the algorithm (see command usage in the @ref specification__boolean_ers "Errors and warnings reporting system" of Boolean operations user guide). @subsection occt_modalg_makeperiodic_examples Examples @@ -3642,7 +3642,7 @@ bcut result plate drills @section occt_modalg_makeconnected Making touching shapes connected Open CASCADE Technology provides tools for making the same-dimensional touching shapes connected (or glued), i.e. for making the coinciding geometries topologically shared among shapes. -To make the shapes connected they are glued by the means of @ref occt_algorithms_7 "General Fuse algorithm". The option BOPAlgo_GlueShift is used, thus if the input shapes have been interfering the algorithm will be unable to recognize this. +To make the shapes connected they are glued by the means of @ref specification__boolean_7 "General Fuse algorithm". The option BOPAlgo_GlueShift is used, thus if the input shapes have been interfering the algorithm will be unable to recognize this. Making the group of shapes connected can be useful e.g. before meshing the group. It will allow making the resulting mesh conformal. @@ -3700,7 +3700,7 @@ The algorithm returns the following alerts: * *BOPAlgo_AlertUnableToMakePeriodic* - warning alert is given if the periodicity maker is unable to make the connected shape periodic with given options; * *BOPAlgo_AlertShapeIsNotPeriodic* - warning alert is given on the attempt to repeat the shape before making it periodic. -For more information on the error/warning reporting system please see the chapter @ref occt_algorithms_ers "Errors and warnings reporting system" of Boolean operations user guide. +For more information on the error/warning reporting system please see the chapter @ref specification__boolean_ers "Errors and warnings reporting system" of Boolean operations user guide. @subsection occt_modalg_makeconnected_usage Usage @@ -3780,4 +3780,4 @@ For more details on the connexity commands please refer the @ref occt_draw_makec To track the history of a shape modification during MakeConnected operation the @ref occt_draw_hist "standard history commands" can be used. -To have possibility to access the error/warning shapes of the operation use the *bdrawwarnshapes* command before running the algorithm (see command usage in the @ref occt_algorithms_ers "Errors and warnings reporting system" of Boolean operations user guide). +To have possibility to access the error/warning shapes of the operation use the *bdrawwarnshapes* command before running the algorithm (see command usage in the @ref specification__boolean_ers "Errors and warnings reporting system" of Boolean operations user guide). diff --git a/dox/user_guides/modeling_data/modeling_data.md b/dox/user_guides/modeling_data/modeling_data.md index 1d89d4f76d..0de514e7d0 100644 --- a/dox/user_guides/modeling_data/modeling_data.md +++ b/dox/user_guides/modeling_data/modeling_data.md @@ -638,7 +638,7 @@ Regularity of an edge is a smoothness of connection of two faces sharing this ed Edge's regularity can be set by *BRep_Builder::Continuity* method. To get the regularity use *BRep_Tool::Continuity* method. -Some algorithms like @ref occt_modalg_6 "Fillet" set regularity of produced edges by their own algorithms. On the other hand, some other algorithms (like @ref occt_user_guides__boolean_operations "Boolean Operations", @ref occt_user_guides__shape_healing "Shape Healing", etc.) do not set regularity. If the regularity is needed to be set correctly on a shape, the method *BRepLib::EncodeRegularity* can be used. It calculates and sets correct values for all edges of the shape. +Some algorithms like @ref occt_modalg_6 "Fillet" set regularity of produced edges by their own algorithms. On the other hand, some other algorithms (like @ref specification__boolean_operations "Boolean Operations", @ref occt_user_guides__shape_healing "Shape Healing", etc.) do not set regularity. If the regularity is needed to be set correctly on a shape, the method *BRepLib::EncodeRegularity* can be used. It calculates and sets correct values for all edges of the shape. The regularity flag is extensively used by the following high level algorithms: @ref occt_modalg_6_1_2 "Chamfer", @ref occt_modalg_7_3 "Draft Angle", @ref occt_modalg_10 "Hidden Line Removal", @ref occt_modalg_9_2_3 "Gluer". diff --git a/dox/user_guides/user_guides.md b/dox/user_guides/user_guides.md index 3571044a14..57d88f2e9e 100644 --- a/dox/user_guides/user_guides.md +++ b/dox/user_guides/user_guides.md @@ -5,9 +5,7 @@ OCCT User Guides are organized by OCCT modules: * @subpage occt_user_guides__foundation_classes "Foundation Classes" * @subpage occt_user_guides__modeling_data "Modeling Data" - * @subpage occt_user_guides__brep_wp "BREP format description" * @subpage occt_user_guides__modeling_algos "Modeling Algorithms" - * @subpage occt_user_guides__boolean_operations "Boolean Operations" * @subpage occt_user_guides__shape_healing "Shape Healing" * @subpage occt_user_guides__visualization "Visualization" * @subpage occt_user_guides__vis "VTK Integration Services" @@ -18,4 +16,4 @@ OCCT User Guides are organized by OCCT modules: * @subpage occt_user_guides__ocaf "Open CASCADE Application Framework (OCAF)" * @subpage occt_user_guides__tobj "TObj package" * @subpage occt_user_guides__test_harness "DRAW Test Harness" -* @subpage occt_user_guides__inspector "Inspector" \ No newline at end of file +* @subpage occt_user_guides__inspector "Inspector"