From 72b7576f488cd2a84709901857e3780f3d51255a Mon Sep 17 00:00:00 2001 From: ibs Date: Thu, 17 Oct 2013 12:47:29 +0400 Subject: [PATCH] 0023962: Moving OCCT documentation to sources OCCT documentation (Overview and User Guides) has been converted from MS Word files to text-based MarkDown format and added to OCCT sources, in the new subfolder 'dox'. The HTML and PDF articles can be generated from the sources using Doxygen and MiKTeX. See the file OCCT_Docs_HowTo.md for details on the new documentation system. This branch includes: - new folder structure for Open CASCADE documentation - sources of almost all OCCT User Guides and Overview - tcl and bat scripts, which allow to generate HTML and PDF articles --- .gitattributes | 1 + .gitignore | 3 +- LICENSE | 6 +- dox/DoxygenLayout.xml | 188 + dox/FILES.txt | 31 + dox/Overview/LICENSE.md | 157 + dox/Overview/Overview.md | 604 ++ dox/dev_guides/building/automake.md | 69 + dox/dev_guides/building/cmake.md | 77 + dox/dev_guides/building/code_blocks.md | 64 + dox/dev_guides/building/msvc.md | 31 + dox/dev_guides/building/xcode.md | 71 + dox/dev_guides/cdl/cdl.md | 1876 +++++ dox/dev_guides/cdl/images/cdl_image001.jpg | Bin 0 -> 6870 bytes dox/dev_guides/cdl/images/cdl_image002.jpg | Bin 0 -> 3610 bytes dox/dev_guides/cdl/images/cdl_image003.jpg | Bin 0 -> 45925 bytes dox/dev_guides/cdl/images/cdl_image004.jpg | Bin 0 -> 17657 bytes dox/dev_guides/cdl/images/cdl_image005.jpg | Bin 0 -> 15958 bytes dox/dev_guides/cdl/images/cdl_image006.jpg | Bin 0 -> 22133 bytes dox/dev_guides/cdl/images/cdl_image007.jpg | Bin 0 -> 20016 bytes dox/dev_guides/cdl/images/cdl_image008.jpg | Bin 0 -> 17403 bytes dox/dev_guides/cdl/images/cdl_image009.jpg | Bin 0 -> 28014 bytes dox/dev_guides/cdl/images/cdl_image010.jpg | Bin 0 -> 51392 bytes dox/dev_guides/cdl/images/cdl_image011.jpg | Bin 0 -> 61182 bytes dox/dev_guides/cdl/images/cdl_image012.jpg | Bin 0 -> 43104 bytes dox/dev_guides/dev_guides.md | 102 + dox/dev_guides/documentation/documentation.md | 531 ++ .../images/documentation_image001.png | Bin 0 -> 8571 bytes .../tests/images/tests_image001.png | Bin 0 -> 14809 bytes dox/dev_guides/tests/tests.md | 593 ++ dox/dev_guides/wok/images/wok_image001.jpg | Bin 0 -> 43953 bytes dox/dev_guides/wok/images/wok_image002.jpg | Bin 0 -> 74182 bytes dox/dev_guides/wok/images/wok_image003.jpg | Bin 0 -> 44448 bytes dox/dev_guides/wok/images/wok_image004.jpg | Bin 0 -> 51721 bytes dox/dev_guides/wok/wok.md | 153 + dox/occdoc.tcl | 690 ++ dox/overview/images/overview_c__ie.png | Bin 0 -> 38265 bytes dox/overview/images/overview_draw.png | Bin 0 -> 17567 bytes dox/overview/images/overview_installation.png | Bin 0 -> 7690 bytes dox/overview/images/overview_mvc.png | Bin 0 -> 32022 bytes .../images/overview_occttransparent.png | Bin 0 -> 35825 bytes dox/overview/images/overview_qt.png | Bin 0 -> 64276 bytes .../tutorial/images/tutorial_image001.png | Bin 0 -> 3971 bytes .../tutorial/images/tutorial_image002.png | Bin 0 -> 4747 bytes .../tutorial/images/tutorial_image003.png | Bin 0 -> 7302 bytes .../tutorial/images/tutorial_image004.png | Bin 0 -> 1948 bytes .../tutorial/images/tutorial_image005.png | Bin 0 -> 1875 bytes .../tutorial/images/tutorial_image006.png | Bin 0 -> 2747 bytes .../tutorial/images/tutorial_image007.png | Bin 0 -> 3229 bytes .../tutorial/images/tutorial_image008.png | Bin 0 -> 3702 bytes .../tutorial/images/tutorial_image009.png | Bin 0 -> 4295 bytes .../tutorial/images/tutorial_image010.png | Bin 0 -> 4364 bytes .../tutorial/images/tutorial_image011.png | Bin 0 -> 2794 bytes .../tutorial/images/tutorial_image012.png | Bin 0 -> 3221 bytes .../tutorial/images/tutorial_image013.png | Bin 0 -> 2633 bytes .../tutorial/images/tutorial_image014.png | Bin 0 -> 3333 bytes .../tutorial/images/tutorial_image015.png | Bin 0 -> 4437 bytes .../tutorial/images/tutorial_image016.png | Bin 0 -> 4158 bytes .../tutorial/images/tutorial_image017.png | Bin 0 -> 5864 bytes .../tutorial/images/tutorial_image018.png | Bin 0 -> 2876 bytes .../tutorial/images/tutorial_image019.png | Bin 0 -> 42500 bytes dox/overview/tutorial/tutorial.md | 843 ++ dox/resources/occt_logo.png | Bin 0 -> 17506 bytes dox/start.tcl | 5 + .../images/technical_overview_over.png | Bin 0 -> 9737 bytes dox/technical_overview/technical_overview.md | 3017 +++++++ .../draw_test_harness/draw_test_harness.md | 7457 +++++++++++++++++ .../images/draw_test_harness_image001.jpg | Bin 0 -> 6870 bytes .../images/draw_test_harness_image002.jpg | Bin 0 -> 3610 bytes .../foundation_classes/foundation_classes.md | 1877 +++++ .../images/foundation_classes_image001.jpg | Bin 0 -> 6870 bytes .../images/foundation_classes_image002.jpg | Bin 0 -> 3610 bytes .../images/foundation_classes_image003.jpg | Bin 0 -> 51160 bytes .../images/foundation_classes_image004.jpg | Bin 0 -> 16149 bytes .../images/foundation_classes_image005.jpg | Bin 0 -> 19383 bytes .../images/foundation_classes_image006.jpg | Bin 0 -> 21829 bytes .../images/foundation_classes_image007.jpg | Bin 0 -> 40643 bytes .../images/foundation_classes_image008.jpg | Bin 0 -> 48407 bytes dox/user_guides/iges/iges.md | 1560 ++++ dox/user_guides/iges/images/iges_image001.jpg | Bin 0 -> 6870 bytes dox/user_guides/iges/images/iges_image002.jpg | Bin 0 -> 3610 bytes dox/user_guides/iges/images/iges_image003.jpg | Bin 0 -> 21706 bytes dox/user_guides/iges/images/iges_image004.jpg | Bin 0 -> 26189 bytes .../images/modeling_algos_image001.jpg | Bin 0 -> 6870 bytes .../images/modeling_algos_image002.jpg | Bin 0 -> 3610 bytes .../images/modeling_algos_image003.jpg | Bin 0 -> 15018 bytes .../images/modeling_algos_image004.jpg | Bin 0 -> 13694 bytes .../images/modeling_algos_image005.jpg | Bin 0 -> 12527 bytes .../images/modeling_algos_image006.jpg | Bin 0 -> 5720 bytes .../images/modeling_algos_image007.jpg | Bin 0 -> 8124 bytes .../images/modeling_algos_image008.jpg | Bin 0 -> 6371 bytes .../images/modeling_algos_image009.jpg | Bin 0 -> 6339 bytes .../images/modeling_algos_image010.jpg | Bin 0 -> 6160 bytes .../images/modeling_algos_image011.jpg | Bin 0 -> 7730 bytes .../images/modeling_algos_image012.jpg | Bin 0 -> 7312 bytes .../images/modeling_algos_image013.jpg | Bin 0 -> 11426 bytes .../images/modeling_algos_image014.jpg | Bin 0 -> 8452 bytes .../images/modeling_algos_image015.jpg | Bin 0 -> 8404 bytes .../images/modeling_algos_image016.jpg | Bin 0 -> 10196 bytes .../images/modeling_algos_image017.jpg | Bin 0 -> 9296 bytes .../images/modeling_algos_image018.jpg | Bin 0 -> 5169 bytes .../images/modeling_algos_image019.jpg | Bin 0 -> 7040 bytes .../images/modeling_algos_image020.jpg | Bin 0 -> 15309 bytes .../images/modeling_algos_image021.jpg | Bin 0 -> 14498 bytes .../images/modeling_algos_image022.jpg | Bin 0 -> 12515 bytes .../images/modeling_algos_image023.jpg | Bin 0 -> 13277 bytes .../images/modeling_algos_image024.jpg | Bin 0 -> 12609 bytes .../images/modeling_algos_image025.jpg | Bin 0 -> 26269 bytes .../images/modeling_algos_image026.jpg | Bin 0 -> 43650 bytes .../images/modeling_algos_image027.jpg | Bin 0 -> 40192 bytes .../images/modeling_algos_image028.jpg | Bin 0 -> 15002 bytes .../images/modeling_algos_image029.jpg | Bin 0 -> 10948 bytes .../images/modeling_algos_image030.jpg | Bin 0 -> 12332 bytes .../images/modeling_algos_image031.jpg | Bin 0 -> 32991 bytes .../images/modeling_algos_image032.png | Bin 0 -> 16393 bytes .../images/modeling_algos_image033.jpg | Bin 0 -> 12596 bytes .../images/modeling_algos_image034.jpg | Bin 0 -> 29983 bytes .../images/modeling_algos_image035.jpg | Bin 0 -> 23760 bytes .../images/modeling_algos_image036.jpg | Bin 0 -> 21205 bytes .../images/modeling_algos_image037.jpg | Bin 0 -> 30130 bytes .../images/modeling_algos_image038.jpg | Bin 0 -> 16487 bytes .../images/modeling_algos_image039.jpg | Bin 0 -> 24058 bytes .../images/modeling_algos_image040.jpg | Bin 0 -> 13578 bytes .../images/modeling_algos_image041.jpg | Bin 0 -> 15989 bytes .../images/modeling_algos_image042.jpg | Bin 0 -> 19235 bytes .../images/modeling_algos_image043.jpg | Bin 0 -> 14875 bytes .../images/modeling_algos_image044.jpg | Bin 0 -> 15138 bytes .../images/modeling_algos_image045.jpg | Bin 0 -> 20058 bytes .../images/modeling_algos_image046.jpg | Bin 0 -> 8321 bytes .../images/modeling_algos_image047.jpg | Bin 0 -> 15483 bytes .../images/modeling_algos_image048.jpg | Bin 0 -> 23192 bytes .../images/modeling_algos_image049.jpg | Bin 0 -> 19525 bytes .../images/modeling_algos_image050.jpg | Bin 0 -> 26584 bytes .../images/modeling_algos_image051.jpg | Bin 0 -> 16033 bytes .../images/modeling_algos_image052.jpg | Bin 0 -> 19199 bytes .../images/modeling_algos_image053.jpg | Bin 0 -> 19501 bytes .../images/modeling_algos_image054.jpg | Bin 0 -> 9890 bytes .../images/modeling_algos_image055.jpg | Bin 0 -> 12277 bytes .../modeling_algos/modeling_algos.md | 2661 ++++++ .../images/modeling_data_image001.jpg | Bin 0 -> 6951 bytes .../images/modeling_data_image002.jpg | Bin 0 -> 3610 bytes .../images/modeling_data_image003.jpg | Bin 0 -> 4756 bytes .../images/modeling_data_image004.jpg | Bin 0 -> 15844 bytes .../images/modeling_data_image005.jpg | Bin 0 -> 20440 bytes .../images/modeling_data_image006.jpg | Bin 0 -> 21210 bytes .../images/modeling_data_image007.jpg | Bin 0 -> 12470 bytes .../images/modeling_data_image008.jpg | Bin 0 -> 6583 bytes .../images/modeling_data_image009.jpg | Bin 0 -> 14270 bytes .../images/modeling_data_image010.jpg | Bin 0 -> 7425 bytes .../images/modeling_data_image011.jpg | Bin 0 -> 10781 bytes .../images/modeling_data_image012.jpg | Bin 0 -> 28272 bytes .../images/modeling_data_image013.jpg | Bin 0 -> 23368 bytes .../images/modeling_data_image014.jpg | Bin 0 -> 8848 bytes .../modeling_data/modeling_data.md | 921 ++ dox/user_guides/ocaf/images/ocaf_image001.png | Bin 0 -> 41385 bytes dox/user_guides/ocaf/images/ocaf_image002.png | Bin 0 -> 15967 bytes dox/user_guides/ocaf/images/ocaf_image003.png | Bin 0 -> 4544 bytes dox/user_guides/ocaf/images/ocaf_image004.png | Bin 0 -> 9826 bytes dox/user_guides/ocaf/images/ocaf_image005.png | Bin 0 -> 3663 bytes dox/user_guides/ocaf/images/ocaf_image006.png | Bin 0 -> 65865 bytes dox/user_guides/ocaf/images/ocaf_image007.png | Bin 0 -> 12437 bytes dox/user_guides/ocaf/images/ocaf_image008.png | Bin 0 -> 51012 bytes dox/user_guides/ocaf/images/ocaf_image009.png | Bin 0 -> 61987 bytes dox/user_guides/ocaf/images/ocaf_image010.png | Bin 0 -> 8398 bytes dox/user_guides/ocaf/images/ocaf_image011.png | Bin 0 -> 10267 bytes dox/user_guides/ocaf/images/ocaf_image012.png | Bin 0 -> 31689 bytes dox/user_guides/ocaf/images/ocaf_image013.png | Bin 0 -> 104180 bytes dox/user_guides/ocaf/images/ocaf_image014.png | Bin 0 -> 9006 bytes dox/user_guides/ocaf/images/ocaf_image015.png | Bin 0 -> 28667 bytes dox/user_guides/ocaf/images/ocaf_image016.png | Bin 0 -> 11060 bytes dox/user_guides/ocaf/images/ocaf_image017.png | Bin 0 -> 43010 bytes dox/user_guides/ocaf/ocaf.md | 1596 ++++ .../images/shape_healing_image001.jpg | Bin 0 -> 6870 bytes .../images/shape_healing_image002.jpg | Bin 0 -> 3610 bytes .../images/shape_healing_image003.jpg | Bin 0 -> 7172 bytes .../images/shape_healing_image004.jpg | Bin 0 -> 16502 bytes .../images/shape_healing_image005.jpg | Bin 0 -> 5533 bytes .../images/shape_healing_image006.jpg | Bin 0 -> 5453 bytes .../images/shape_healing_image007.jpg | Bin 0 -> 13095 bytes .../images/shape_healing_image008.jpg | Bin 0 -> 9367 bytes .../images/shape_healing_image009.png | Bin 0 -> 4467 bytes .../images/shape_healing_image010.png | Bin 0 -> 1877 bytes .../images/shape_healing_image011.png | Bin 0 -> 55277 bytes .../images/shape_healing_image012.png | Bin 0 -> 20817 bytes .../images/shape_healing_image013.png | Bin 0 -> 14091 bytes .../images/shape_healing_image014.png | Bin 0 -> 21262 bytes .../shape_healing/shape_healing.md | 2047 +++++ dox/user_guides/step/images/step_image001.jpg | Bin 0 -> 6870 bytes dox/user_guides/step/images/step_image002.jpg | Bin 0 -> 3610 bytes dox/user_guides/step/images/step_image003.jpg | Bin 0 -> 37256 bytes dox/user_guides/step/images/step_image004.jpg | Bin 0 -> 52176 bytes dox/user_guides/step/step.md | 1468 ++++ dox/user_guides/tobj/images/tobj_image003.png | Bin 0 -> 10462 bytes dox/user_guides/tobj/images/tobj_image004.jpg | Bin 0 -> 29798 bytes dox/user_guides/tobj/images/tobj_image005.png | Bin 0 -> 2337 bytes dox/user_guides/tobj/images/tobj_image006.png | Bin 0 -> 5874 bytes dox/user_guides/tobj/images/tobj_image007.png | Bin 0 -> 15992 bytes dox/user_guides/tobj/images/tobj_image008.png | Bin 0 -> 5987 bytes dox/user_guides/tobj/tobj.md | 904 ++ dox/user_guides/user_guides.md | 23 + .../images/visualization_image001.jpg | Bin 0 -> 6951 bytes .../images/visualization_image002.jpg | Bin 0 -> 3610 bytes .../images/visualization_image003.jpg | Bin 0 -> 23964 bytes .../images/visualization_image004.png | Bin 0 -> 40752 bytes .../images/visualization_image005.png | Bin 0 -> 12951 bytes .../images/visualization_image006.jpg | Bin 0 -> 9090 bytes .../images/visualization_image007.jpg | Bin 0 -> 14864 bytes .../images/visualization_image008.jpg | Bin 0 -> 13806 bytes .../images/visualization_image009.jpg | Bin 0 -> 23840 bytes .../images/visualization_image010.jpg | Bin 0 -> 17427 bytes .../images/visualization_image011.jpg | Bin 0 -> 19184 bytes .../images/visualization_image012.jpg | Bin 0 -> 20641 bytes .../images/visualization_image013.jpg | Bin 0 -> 27519 bytes .../images/visualization_image014.jpg | Bin 0 -> 26424 bytes .../images/visualization_image015.jpg | Bin 0 -> 9591 bytes .../images/visualization_image016.jpg | Bin 0 -> 4464 bytes .../images/visualization_image017.jpg | Bin 0 -> 20262 bytes .../images/visualization_image018.jpg | Bin 0 -> 16485 bytes .../images/visualization_image019.jpg | Bin 0 -> 4638 bytes .../images/visualization_image020.jpg | Bin 0 -> 20701 bytes .../images/visualization_image021.jpg | Bin 0 -> 9588 bytes .../images/visualization_image022.jpg | Bin 0 -> 18577 bytes .../images/visualization_image023.png | Bin 0 -> 9080 bytes .../images/visualization_image024.png | Bin 0 -> 4761 bytes .../images/visualization_image025.jpg | Bin 0 -> 4314 bytes .../images/visualization_image026.jpg | Bin 0 -> 13846 bytes .../images/visualization_image027.jpg | Bin 0 -> 12713 bytes .../images/visualization_image028.jpg | Bin 0 -> 29990 bytes .../visualization/visualization.md | 2999 +++++++ dox/user_guides/wok/images/wok_image001.jpg | Bin 0 -> 6870 bytes dox/user_guides/wok/images/wok_image002.jpg | Bin 0 -> 3610 bytes dox/user_guides/wok/images/wok_image005.jpg | Bin 0 -> 33703 bytes dox/user_guides/wok/images/wok_image005.png | Bin 0 -> 29744 bytes dox/user_guides/wok/images/wok_image006.png | Bin 0 -> 8084 bytes dox/user_guides/wok/images/wok_image007.png | Bin 0 -> 14919 bytes dox/user_guides/wok/images/wok_image008.png | Bin 0 -> 39865 bytes dox/user_guides/wok/images/wok_image009.png | Bin 0 -> 22519 bytes dox/user_guides/wok/images/wok_image010.png | Bin 0 -> 11557 bytes dox/user_guides/wok/images/wok_image011.png | Bin 0 -> 26654 bytes dox/user_guides/wok/images/wok_image012.png | Bin 0 -> 15588 bytes dox/user_guides/wok/images/wok_image013.jpg | Bin 0 -> 7171 bytes dox/user_guides/wok/images/wok_image014.jpg | Bin 0 -> 17655 bytes dox/user_guides/wok/images/wok_image015.png | Bin 0 -> 25772 bytes dox/user_guides/wok/images/wok_image016.png | Bin 0 -> 1254 bytes dox/user_guides/wok/images/wok_image017.png | Bin 0 -> 1514 bytes dox/user_guides/wok/images/wok_image018.png | Bin 0 -> 1573 bytes dox/user_guides/wok/images/wok_image019.png | Bin 0 -> 1541 bytes dox/user_guides/wok/images/wok_image020.png | Bin 0 -> 1458 bytes dox/user_guides/wok/images/wok_image021.png | Bin 0 -> 34876 bytes dox/user_guides/wok/images/wok_image022.png | Bin 0 -> 109254 bytes dox/user_guides/wok/wok.md | 3093 +++++++ dox/user_guides/xde/images/xde_image001.jpg | Bin 0 -> 6870 bytes dox/user_guides/xde/images/xde_image002.jpg | Bin 0 -> 3610 bytes dox/user_guides/xde/images/xde_image003.jpg | Bin 0 -> 18299 bytes dox/user_guides/xde/images/xde_image004.jpg | Bin 0 -> 11060 bytes dox/user_guides/xde/images/xde_image005.jpg | Bin 0 -> 40661 bytes dox/user_guides/xde/images/xde_image006.jpg | Bin 0 -> 5395 bytes dox/user_guides/xde/xde.md | 1173 +++ gendoc.bat | 23 + 259 files changed, 36910 insertions(+), 4 deletions(-) create mode 100644 dox/DoxygenLayout.xml create mode 100644 dox/FILES.txt create mode 100644 dox/Overview/LICENSE.md create mode 100644 dox/Overview/Overview.md create mode 100644 dox/dev_guides/building/automake.md create mode 100644 dox/dev_guides/building/cmake.md create mode 100644 dox/dev_guides/building/code_blocks.md create mode 100644 dox/dev_guides/building/msvc.md create mode 100644 dox/dev_guides/building/xcode.md create mode 100644 dox/dev_guides/cdl/cdl.md create mode 100644 dox/dev_guides/cdl/images/cdl_image001.jpg create mode 100644 dox/dev_guides/cdl/images/cdl_image002.jpg create mode 100644 dox/dev_guides/cdl/images/cdl_image003.jpg create mode 100644 dox/dev_guides/cdl/images/cdl_image004.jpg create mode 100644 dox/dev_guides/cdl/images/cdl_image005.jpg create mode 100644 dox/dev_guides/cdl/images/cdl_image006.jpg create mode 100644 dox/dev_guides/cdl/images/cdl_image007.jpg create mode 100644 dox/dev_guides/cdl/images/cdl_image008.jpg create mode 100644 dox/dev_guides/cdl/images/cdl_image009.jpg create mode 100644 dox/dev_guides/cdl/images/cdl_image010.jpg create mode 100644 dox/dev_guides/cdl/images/cdl_image011.jpg create mode 100644 dox/dev_guides/cdl/images/cdl_image012.jpg create mode 100644 dox/dev_guides/dev_guides.md create mode 100644 dox/dev_guides/documentation/documentation.md create mode 100644 dox/dev_guides/documentation/images/documentation_image001.png create mode 100644 dox/dev_guides/tests/images/tests_image001.png create mode 100644 dox/dev_guides/tests/tests.md create mode 100644 dox/dev_guides/wok/images/wok_image001.jpg create mode 100644 dox/dev_guides/wok/images/wok_image002.jpg create mode 100644 dox/dev_guides/wok/images/wok_image003.jpg create mode 100644 dox/dev_guides/wok/images/wok_image004.jpg create mode 100644 dox/dev_guides/wok/wok.md create mode 100644 dox/occdoc.tcl create mode 100644 dox/overview/images/overview_c__ie.png create mode 100644 dox/overview/images/overview_draw.png create mode 100644 dox/overview/images/overview_installation.png create mode 100644 dox/overview/images/overview_mvc.png create mode 100644 dox/overview/images/overview_occttransparent.png create mode 100644 dox/overview/images/overview_qt.png create mode 100644 dox/overview/tutorial/images/tutorial_image001.png create mode 100644 dox/overview/tutorial/images/tutorial_image002.png create mode 100644 dox/overview/tutorial/images/tutorial_image003.png create mode 100644 dox/overview/tutorial/images/tutorial_image004.png create mode 100644 dox/overview/tutorial/images/tutorial_image005.png create mode 100644 dox/overview/tutorial/images/tutorial_image006.png create mode 100644 dox/overview/tutorial/images/tutorial_image007.png create mode 100644 dox/overview/tutorial/images/tutorial_image008.png create mode 100644 dox/overview/tutorial/images/tutorial_image009.png create mode 100644 dox/overview/tutorial/images/tutorial_image010.png create mode 100644 dox/overview/tutorial/images/tutorial_image011.png create mode 100644 dox/overview/tutorial/images/tutorial_image012.png create mode 100644 dox/overview/tutorial/images/tutorial_image013.png create mode 100644 dox/overview/tutorial/images/tutorial_image014.png create mode 100644 dox/overview/tutorial/images/tutorial_image015.png create mode 100644 dox/overview/tutorial/images/tutorial_image016.png create mode 100644 dox/overview/tutorial/images/tutorial_image017.png create mode 100644 dox/overview/tutorial/images/tutorial_image018.png create mode 100644 dox/overview/tutorial/images/tutorial_image019.png create mode 100644 dox/overview/tutorial/tutorial.md create mode 100644 dox/resources/occt_logo.png create mode 100644 dox/start.tcl create mode 100644 dox/technical_overview/images/technical_overview_over.png create mode 100644 dox/technical_overview/technical_overview.md create mode 100644 dox/user_guides/draw_test_harness/draw_test_harness.md create mode 100644 dox/user_guides/draw_test_harness/images/draw_test_harness_image001.jpg create mode 100644 dox/user_guides/draw_test_harness/images/draw_test_harness_image002.jpg create mode 100644 dox/user_guides/foundation_classes/foundation_classes.md create mode 100644 dox/user_guides/foundation_classes/images/foundation_classes_image001.jpg create mode 100644 dox/user_guides/foundation_classes/images/foundation_classes_image002.jpg create mode 100644 dox/user_guides/foundation_classes/images/foundation_classes_image003.jpg create mode 100644 dox/user_guides/foundation_classes/images/foundation_classes_image004.jpg create mode 100644 dox/user_guides/foundation_classes/images/foundation_classes_image005.jpg create mode 100644 dox/user_guides/foundation_classes/images/foundation_classes_image006.jpg create mode 100644 dox/user_guides/foundation_classes/images/foundation_classes_image007.jpg create mode 100644 dox/user_guides/foundation_classes/images/foundation_classes_image008.jpg create mode 100644 dox/user_guides/iges/iges.md create mode 100644 dox/user_guides/iges/images/iges_image001.jpg create mode 100644 dox/user_guides/iges/images/iges_image002.jpg create mode 100644 dox/user_guides/iges/images/iges_image003.jpg create mode 100644 dox/user_guides/iges/images/iges_image004.jpg create mode 100644 dox/user_guides/modeling_algos/images/modeling_algos_image001.jpg create mode 100644 dox/user_guides/modeling_algos/images/modeling_algos_image002.jpg create mode 100644 dox/user_guides/modeling_algos/images/modeling_algos_image003.jpg create mode 100644 dox/user_guides/modeling_algos/images/modeling_algos_image004.jpg create mode 100644 dox/user_guides/modeling_algos/images/modeling_algos_image005.jpg create mode 100644 dox/user_guides/modeling_algos/images/modeling_algos_image006.jpg create mode 100644 dox/user_guides/modeling_algos/images/modeling_algos_image007.jpg create mode 100644 dox/user_guides/modeling_algos/images/modeling_algos_image008.jpg create mode 100644 dox/user_guides/modeling_algos/images/modeling_algos_image009.jpg create mode 100644 dox/user_guides/modeling_algos/images/modeling_algos_image010.jpg create mode 100644 dox/user_guides/modeling_algos/images/modeling_algos_image011.jpg create mode 100644 dox/user_guides/modeling_algos/images/modeling_algos_image012.jpg create mode 100644 dox/user_guides/modeling_algos/images/modeling_algos_image013.jpg create mode 100644 dox/user_guides/modeling_algos/images/modeling_algos_image014.jpg create mode 100644 dox/user_guides/modeling_algos/images/modeling_algos_image015.jpg create mode 100644 dox/user_guides/modeling_algos/images/modeling_algos_image016.jpg create mode 100644 dox/user_guides/modeling_algos/images/modeling_algos_image017.jpg create mode 100644 dox/user_guides/modeling_algos/images/modeling_algos_image018.jpg create mode 100644 dox/user_guides/modeling_algos/images/modeling_algos_image019.jpg create mode 100644 dox/user_guides/modeling_algos/images/modeling_algos_image020.jpg create mode 100644 dox/user_guides/modeling_algos/images/modeling_algos_image021.jpg create mode 100644 dox/user_guides/modeling_algos/images/modeling_algos_image022.jpg create mode 100644 dox/user_guides/modeling_algos/images/modeling_algos_image023.jpg create mode 100644 dox/user_guides/modeling_algos/images/modeling_algos_image024.jpg create mode 100644 dox/user_guides/modeling_algos/images/modeling_algos_image025.jpg create mode 100644 dox/user_guides/modeling_algos/images/modeling_algos_image026.jpg create mode 100644 dox/user_guides/modeling_algos/images/modeling_algos_image027.jpg create mode 100644 dox/user_guides/modeling_algos/images/modeling_algos_image028.jpg create mode 100644 dox/user_guides/modeling_algos/images/modeling_algos_image029.jpg create mode 100644 dox/user_guides/modeling_algos/images/modeling_algos_image030.jpg create mode 100644 dox/user_guides/modeling_algos/images/modeling_algos_image031.jpg create mode 100644 dox/user_guides/modeling_algos/images/modeling_algos_image032.png create mode 100644 dox/user_guides/modeling_algos/images/modeling_algos_image033.jpg create mode 100644 dox/user_guides/modeling_algos/images/modeling_algos_image034.jpg create mode 100644 dox/user_guides/modeling_algos/images/modeling_algos_image035.jpg create mode 100644 dox/user_guides/modeling_algos/images/modeling_algos_image036.jpg create mode 100644 dox/user_guides/modeling_algos/images/modeling_algos_image037.jpg create mode 100644 dox/user_guides/modeling_algos/images/modeling_algos_image038.jpg create mode 100644 dox/user_guides/modeling_algos/images/modeling_algos_image039.jpg create mode 100644 dox/user_guides/modeling_algos/images/modeling_algos_image040.jpg create mode 100644 dox/user_guides/modeling_algos/images/modeling_algos_image041.jpg create mode 100644 dox/user_guides/modeling_algos/images/modeling_algos_image042.jpg create mode 100644 dox/user_guides/modeling_algos/images/modeling_algos_image043.jpg create mode 100644 dox/user_guides/modeling_algos/images/modeling_algos_image044.jpg create mode 100644 dox/user_guides/modeling_algos/images/modeling_algos_image045.jpg create mode 100644 dox/user_guides/modeling_algos/images/modeling_algos_image046.jpg create mode 100644 dox/user_guides/modeling_algos/images/modeling_algos_image047.jpg create mode 100644 dox/user_guides/modeling_algos/images/modeling_algos_image048.jpg create mode 100644 dox/user_guides/modeling_algos/images/modeling_algos_image049.jpg create mode 100644 dox/user_guides/modeling_algos/images/modeling_algos_image050.jpg create mode 100644 dox/user_guides/modeling_algos/images/modeling_algos_image051.jpg create mode 100644 dox/user_guides/modeling_algos/images/modeling_algos_image052.jpg create mode 100644 dox/user_guides/modeling_algos/images/modeling_algos_image053.jpg create mode 100644 dox/user_guides/modeling_algos/images/modeling_algos_image054.jpg create mode 100644 dox/user_guides/modeling_algos/images/modeling_algos_image055.jpg create mode 100644 dox/user_guides/modeling_algos/modeling_algos.md create mode 100644 dox/user_guides/modeling_data/images/modeling_data_image001.jpg create mode 100644 dox/user_guides/modeling_data/images/modeling_data_image002.jpg create mode 100644 dox/user_guides/modeling_data/images/modeling_data_image003.jpg create mode 100644 dox/user_guides/modeling_data/images/modeling_data_image004.jpg create mode 100644 dox/user_guides/modeling_data/images/modeling_data_image005.jpg create mode 100644 dox/user_guides/modeling_data/images/modeling_data_image006.jpg create mode 100644 dox/user_guides/modeling_data/images/modeling_data_image007.jpg create mode 100644 dox/user_guides/modeling_data/images/modeling_data_image008.jpg create mode 100644 dox/user_guides/modeling_data/images/modeling_data_image009.jpg create mode 100644 dox/user_guides/modeling_data/images/modeling_data_image010.jpg create mode 100644 dox/user_guides/modeling_data/images/modeling_data_image011.jpg create mode 100644 dox/user_guides/modeling_data/images/modeling_data_image012.jpg create mode 100644 dox/user_guides/modeling_data/images/modeling_data_image013.jpg create mode 100644 dox/user_guides/modeling_data/images/modeling_data_image014.jpg create mode 100644 dox/user_guides/modeling_data/modeling_data.md create mode 100644 dox/user_guides/ocaf/images/ocaf_image001.png create mode 100644 dox/user_guides/ocaf/images/ocaf_image002.png create mode 100644 dox/user_guides/ocaf/images/ocaf_image003.png create mode 100644 dox/user_guides/ocaf/images/ocaf_image004.png create mode 100644 dox/user_guides/ocaf/images/ocaf_image005.png create mode 100644 dox/user_guides/ocaf/images/ocaf_image006.png create mode 100644 dox/user_guides/ocaf/images/ocaf_image007.png create mode 100644 dox/user_guides/ocaf/images/ocaf_image008.png create mode 100644 dox/user_guides/ocaf/images/ocaf_image009.png create mode 100644 dox/user_guides/ocaf/images/ocaf_image010.png create mode 100644 dox/user_guides/ocaf/images/ocaf_image011.png create mode 100644 dox/user_guides/ocaf/images/ocaf_image012.png create mode 100644 dox/user_guides/ocaf/images/ocaf_image013.png create mode 100644 dox/user_guides/ocaf/images/ocaf_image014.png create mode 100644 dox/user_guides/ocaf/images/ocaf_image015.png create mode 100644 dox/user_guides/ocaf/images/ocaf_image016.png create mode 100644 dox/user_guides/ocaf/images/ocaf_image017.png create mode 100644 dox/user_guides/ocaf/ocaf.md create mode 100644 dox/user_guides/shape_healing/images/shape_healing_image001.jpg create mode 100644 dox/user_guides/shape_healing/images/shape_healing_image002.jpg create mode 100644 dox/user_guides/shape_healing/images/shape_healing_image003.jpg create mode 100644 dox/user_guides/shape_healing/images/shape_healing_image004.jpg create mode 100644 dox/user_guides/shape_healing/images/shape_healing_image005.jpg create mode 100644 dox/user_guides/shape_healing/images/shape_healing_image006.jpg create mode 100644 dox/user_guides/shape_healing/images/shape_healing_image007.jpg create mode 100644 dox/user_guides/shape_healing/images/shape_healing_image008.jpg create mode 100644 dox/user_guides/shape_healing/images/shape_healing_image009.png create mode 100644 dox/user_guides/shape_healing/images/shape_healing_image010.png create mode 100644 dox/user_guides/shape_healing/images/shape_healing_image011.png create mode 100644 dox/user_guides/shape_healing/images/shape_healing_image012.png create mode 100644 dox/user_guides/shape_healing/images/shape_healing_image013.png create mode 100644 dox/user_guides/shape_healing/images/shape_healing_image014.png create mode 100644 dox/user_guides/shape_healing/shape_healing.md create mode 100644 dox/user_guides/step/images/step_image001.jpg create mode 100644 dox/user_guides/step/images/step_image002.jpg create mode 100644 dox/user_guides/step/images/step_image003.jpg create mode 100644 dox/user_guides/step/images/step_image004.jpg create mode 100644 dox/user_guides/step/step.md create mode 100644 dox/user_guides/tobj/images/tobj_image003.png create mode 100644 dox/user_guides/tobj/images/tobj_image004.jpg create mode 100644 dox/user_guides/tobj/images/tobj_image005.png create mode 100644 dox/user_guides/tobj/images/tobj_image006.png create mode 100644 dox/user_guides/tobj/images/tobj_image007.png create mode 100644 dox/user_guides/tobj/images/tobj_image008.png create mode 100644 dox/user_guides/tobj/tobj.md create mode 100644 dox/user_guides/user_guides.md create mode 100644 dox/user_guides/visualization/images/visualization_image001.jpg create mode 100644 dox/user_guides/visualization/images/visualization_image002.jpg create mode 100644 dox/user_guides/visualization/images/visualization_image003.jpg create mode 100644 dox/user_guides/visualization/images/visualization_image004.png create mode 100644 dox/user_guides/visualization/images/visualization_image005.png create mode 100644 dox/user_guides/visualization/images/visualization_image006.jpg create mode 100644 dox/user_guides/visualization/images/visualization_image007.jpg create mode 100644 dox/user_guides/visualization/images/visualization_image008.jpg create mode 100644 dox/user_guides/visualization/images/visualization_image009.jpg create mode 100644 dox/user_guides/visualization/images/visualization_image010.jpg create mode 100644 dox/user_guides/visualization/images/visualization_image011.jpg create mode 100644 dox/user_guides/visualization/images/visualization_image012.jpg create mode 100644 dox/user_guides/visualization/images/visualization_image013.jpg create mode 100644 dox/user_guides/visualization/images/visualization_image014.jpg create mode 100644 dox/user_guides/visualization/images/visualization_image015.jpg create mode 100644 dox/user_guides/visualization/images/visualization_image016.jpg create mode 100644 dox/user_guides/visualization/images/visualization_image017.jpg create mode 100644 dox/user_guides/visualization/images/visualization_image018.jpg create mode 100644 dox/user_guides/visualization/images/visualization_image019.jpg create mode 100644 dox/user_guides/visualization/images/visualization_image020.jpg create mode 100644 dox/user_guides/visualization/images/visualization_image021.jpg create mode 100644 dox/user_guides/visualization/images/visualization_image022.jpg create mode 100644 dox/user_guides/visualization/images/visualization_image023.png create mode 100644 dox/user_guides/visualization/images/visualization_image024.png create mode 100644 dox/user_guides/visualization/images/visualization_image025.jpg create mode 100644 dox/user_guides/visualization/images/visualization_image026.jpg create mode 100644 dox/user_guides/visualization/images/visualization_image027.jpg create mode 100644 dox/user_guides/visualization/images/visualization_image028.jpg create mode 100644 dox/user_guides/visualization/visualization.md create mode 100644 dox/user_guides/wok/images/wok_image001.jpg create mode 100644 dox/user_guides/wok/images/wok_image002.jpg create mode 100644 dox/user_guides/wok/images/wok_image005.jpg create mode 100644 dox/user_guides/wok/images/wok_image005.png create mode 100644 dox/user_guides/wok/images/wok_image006.png create mode 100644 dox/user_guides/wok/images/wok_image007.png create mode 100644 dox/user_guides/wok/images/wok_image008.png create mode 100644 dox/user_guides/wok/images/wok_image009.png create mode 100644 dox/user_guides/wok/images/wok_image010.png create mode 100644 dox/user_guides/wok/images/wok_image011.png create mode 100644 dox/user_guides/wok/images/wok_image012.png create mode 100644 dox/user_guides/wok/images/wok_image013.jpg create mode 100644 dox/user_guides/wok/images/wok_image014.jpg create mode 100644 dox/user_guides/wok/images/wok_image015.png create mode 100644 dox/user_guides/wok/images/wok_image016.png create mode 100644 dox/user_guides/wok/images/wok_image017.png create mode 100644 dox/user_guides/wok/images/wok_image018.png create mode 100644 dox/user_guides/wok/images/wok_image019.png create mode 100644 dox/user_guides/wok/images/wok_image020.png create mode 100644 dox/user_guides/wok/images/wok_image021.png create mode 100644 dox/user_guides/wok/images/wok_image022.png create mode 100644 dox/user_guides/wok/wok.md create mode 100644 dox/user_guides/xde/images/xde_image001.jpg create mode 100644 dox/user_guides/xde/images/xde_image002.jpg create mode 100644 dox/user_guides/xde/images/xde_image003.jpg create mode 100644 dox/user_guides/xde/images/xde_image004.jpg create mode 100644 dox/user_guides/xde/images/xde_image005.jpg create mode 100644 dox/user_guides/xde/images/xde_image006.jpg create mode 100644 dox/user_guides/xde/xde.md create mode 100644 gendoc.bat diff --git a/.gitattributes b/.gitattributes index 4c8bc7bf98..e805ec9760 100644 --- a/.gitattributes +++ b/.gitattributes @@ -34,6 +34,7 @@ *.brep eol=lf *.rle eol=lf *.vrml eol=lf +*.md eol=lf FILES eol=lf PACKAGES eol=lf EXTERNLIB eol=lf diff --git a/.gitignore b/.gitignore index 63daa70aeb..d28e2cee45 100644 --- a/.gitignore +++ b/.gitignore @@ -7,6 +7,7 @@ /ao1 /sil /wnt +/doc /drv /inc /work @@ -45,8 +46,6 @@ Release /*.am /*.m4 /*.ac -/*.sh -/*.bat /autom4te.cache /build_configure /configure diff --git a/LICENSE b/LICENSE index 0fe1d8bbac..77b310c566 100644 --- a/LICENSE +++ b/LICENSE @@ -120,14 +120,16 @@ END OF THE TERMS AND CONDITIONS OF THIS LICENSE -Open CASCADE S.A.S. is a French société par actions simplifiée having its main offices at 1, place des Frères Montgolfier, 78280 Guyancourt, France. Its web site is located at the following address www.opencascade.com +Open CASCADE S.A.S. is a French société par actions simplifiée having its main offices at 1, place in Frères Montgolfier, 78280 Guyancourt, France. Its web site is located at the following address www.opencascade.com Open CASCADE Technology Public License Schedule "A" -The content of this file is subject to the Open CASCADE Technology Public License Version 6.5 (the "License"). You may not use the content of this file except in compliance with the License. Please obtain a copy of the License at http://www.opencascade.org and read it completely before using this file. +The content of this file is subject to the Open CASCADE Technology Public License Version 6.5 (the "License"). +You may not use the content of this file except in compliance with the License. +Please obtain a copy of the License at http://www.opencascade.org and read it completely before using this file. The Initial Developer of the Original Code is Open CASCADE S.A.S., with main offices at 1, place des Frères Montgolfier, 78280 Guyancourt, France. The Original Code is copyright © Open CASCADE S.A.S., 2001. All rights reserved. diff --git a/dox/DoxygenLayout.xml b/dox/DoxygenLayout.xml new file mode 100644 index 0000000000..21d15aaef8 --- /dev/null +++ b/dox/DoxygenLayout.xml @@ -0,0 +1,188 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/dox/FILES.txt b/dox/FILES.txt new file mode 100644 index 0000000000..0dbc6e01f0 --- /dev/null +++ b/dox/FILES.txt @@ -0,0 +1,31 @@ +overview/overview.md +overview/tutorial/tutorial.md +technical_overview/technical_overview.md + +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/visualization/visualization.md +user_guides/iges/iges.md +user_guides/step/step.md +user_guides/xde/xde.md +user_guides/ocaf/ocaf.md +user_guides/tobj/tobj.md +user_guides/shape_healing/shape_healing.md +user_guides/draw_test_harness/draw_test_harness.md +user_guides/wok/wok.md + +dev_guides/dev_guides.md +dev_guides/wok/wok.md +dev_guides/cdl/cdl.md +dev_guides/tests/tests.md +dev_guides/documentation/documentation.md + +dev_guides/building/automake.md +dev_guides/building/cmake.md +dev_guides/building/code_blocks.md +dev_guides/building/msvc.md +dev_guides/building/xcode.md + +overview/license.md \ No newline at end of file diff --git a/dox/Overview/LICENSE.md b/dox/Overview/LICENSE.md new file mode 100644 index 0000000000..afb9b4b517 --- /dev/null +++ b/dox/Overview/LICENSE.md @@ -0,0 +1,157 @@ +License {#occt_pubic_license} +======= + +## Open CASCADE Technology Public License + +*License version: 6.6* @htmlonly
@endhtmlonly +*March, 2013* + +Open CASCADE S.A.S. releases and makes publicly available the source code of the software Open CASCADE Technology to the free software development community under the terms and conditions of this license. + +It is not the purpose of this license to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this license has the sole purpose of protecting the integrity of the free software distribution system, which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice. + + +Please read this license carefully and completely before downloading this software. By downloading, using, modifying, distributing and sublicensing this software, you indicate your acceptance to be bound by the terms and conditions of this license. If you do not want to accept or cannot accept for any reasons the terms and conditions of this license, please do not download or use in any manner this software. + +### 1. Definitions + +Unless there is something in the subject matter or in the context inconsistent therewith, the capitalized terms used in this License shall have the following meaning. + +"Applicable Intellectual Property Rights" means (a) with respect to the Initial Developer, any rights under patents or patents applications or other intellectual property rights that are now or hereafter acquired, owned by or assigned to the Initial Developer and that cover subject matter contained in the Original Code, but only to the extent necessary to use, reproduce, modify, distribute or sublicense the Original Code without infringement; and (b) with respect to You or any Contributor, any rights under patents or patents applications or other intellectual property rights that are now or hereafter acquired, owned by or assigned to You or to such Contributor and that cover subject matter contained in Your Modifications or in such Contributor's Modifications, taken alone or in combination with Original Code. + +"Contributor" means each individual or legal entity that creates or contributes to the creation of any Modification, including the Initial Developer. + +"Derivative Program": means a new program combining the Software or portions thereof with other source code not governed by the terms of this License. + +"Initial Developer": means Open CASCADE S.A.S., with main offices at 1, place des Frères Montgolfier, 78280 Guyancourt, France. + +"Modifications": mean any addition to, deletion from or change to the substance or the structure of the Software. When source code of the Software is released as a series of files, a Modification is: (a) any addition to, deletion from or change to the contents of a file containing the Software or (b) any new file or other representation of computer program statements that contains any part of the Software. By way of example, Modifications include any debug of, or improvement to, the Original Code or any of its components or portions as well as its next versions or releases thereof. + +"Original Code": means (a) the source code of the software Open CASCADE Technology originally made available by the Initial Developer under this License, including the source code of any updates or upgrades of the Original Code and (b) the object code compiled from such source code and originally made available by Initial Developer under this License. + +"Software": means the Original Code, the Modifications, the combination of Original Code and any Modifications or any respective portions thereof. + +"You" or "Your": means an individual or a legal entity exercising rights under this License. + + +### 2. Acceptance of license + +By using, reproducing, modifying, distributing or sublicensing the Software or any portion thereof, You expressly indicate Your acceptance of the terms and conditions of this License and undertake to act in accordance with all the provisions of this License applicable to You. + + +### 3. Scope and purpose + +This License applies to the Software and You may not use, reproduce, modify, distribute, sublicense or circulate the Software, or any portion thereof, except as expressly provided under this License. Any attempt to otherwise use, reproduce, modify, distribute or sublicense the Software is void and will automatically terminate Your rights under this License. + + +### 4. Contributor license + +Subject to the terms and conditions of this License, the Initial Developer and each of the Contributors hereby grant You a world-wide, royalty-free, irrevocable and non-exclusive license under the Applicable Intellectual Property Rights they own or control, to use, reproduce, modify, distribute and sublicense the Software provided that: + +You reproduce in all copies of the Software the copyright and other proprietary notices and disclaimers of the Initial Developer as they appear in the Original Code and attached hereto as Schedule "A" and any other notices or disclaimers attached to the Software and keep intact all notices in the Original Code that refer to this License and to the absence of any warranty; +You include a copy of this License with every copy of the Software You distribute; +If you distribute or sublicense the Software (as modified by You or on Your behalf as the case may be), You cause such Software to be licensed as a whole, at no charge, to all third parties, under the terms and conditions of the License, making in particular available to all third parties the source code of the Software; +You document all Your Modifications, indicate the date of each such Modifications, designate the version of the Software You used, prominently include a file carrying such information with respect to the Modifications and duplicate the copyright and other proprietary notices and disclaimers attached hereto as Schedule "B" or any other notices or disclaimers attached to the Software with your Modifications. + +For greater certainty, it is expressly understood that You may freely create Derivative Programs (without any obligation to publish such Derivative Program) and distribute same as a single product. In such case, You must ensure that all the requirements of this License are fulfilled for the Software or any portion thereof. + + +### 5. Your license + +You hereby grant all Contributors and anyone who becomes a party under this License a world-wide, non-exclusive, royalty-free and irrevocable license under the Applicable Intellectual Property Rights owned or controlled by You, to use, reproduce, modify, distribute and sublicense all Your Modifications under the terms and conditions of this License. + + +### 6. Software subject to license + +Your Modifications shall be governed by the terms and conditions of this License. You are not authorized to impose any other terms or conditions than those prevailing under this License when You distribute and/or sublicense the Software, save and except as permitted under Section 7 hereof. + + +### 7. Additional terms + +You may choose to offer, on a non-exclusive basis, and to charge a fee for any warranty, support, maintenance, liability obligations or other rights consistent with the scope of this License with respect to the Software (the "Additional Terms") to the recipients of the Software. However, You may do so only on Your own behalf and on Your sole and exclusive responsibility. You must obtain the recipient's agreement that any such Additional Terms are offered by You alone, and You hereby agree to indemnify, defend and hold the Initial Developer and any Contributor harmless for any liability incurred by or claims asserted against the Initial Developer or any Contributors with respect to any such Additional Terms. + + +### 8. Disclaimer of warranty + +The Software is provided under this License on an "as is" basis, without warranty of any kind, including without limitation, warranties that the Software is free of defects, merchantable, fit for a particular purpose or non-infringing. The entire risk as to the quality and performance of the Software is with You. + + +### 9. Liability + +Under no circumstances shall You, the Initial Developer or any Contributor be liable to any person for any direct or indirect damages of any kind including, without limitation, damages for loss of goodwill, loss of data, work stoppage, computer failure or malfunction or any and all other commercial damages or losses resulting from or relating to this License or indirectly to the use of the Software. + + +### 10. Trademark + +This License does not grant any rights to use the trademarks, trade names and domain names "MATRA", "EADS Matra Datavision", "CAS.CADE", "Open CASCADE", "opencascade.com" and "opencascade.org" or any other trademarks, trade names or domain names used or owned by the Initial Developer. + + +### 11. Copyright + +The Initial Developer retains all rights, title and interest in and to the Original Code. You may not remove the copyright © notice which appears when You download the Software. + + +### 12. Term + +This License is granted to You for a term equal to the remaining period of protection covered by the intellectual property rights applicable to the Original Code. + + +### 13. Termination + +In case of termination, as provided in Section 3 above, You agree to immediately stop any further use, reproduction, modification, distribution and sublicensing of the Software and to destroy all copies of the Software that are in Your possession or control. All sublicenses of the Software which have been properly granted prior to termination shall survive any termination of this License. In addition, Sections 5, 8 to 11, 13.2 and 15.2 of this License, in reason of their nature, shall survive the termination of this License for a period of fifteen (15) years. + + +### 14. Versions of the license + +The Initial Developer may publish new versions of this License from time to time. Once Original Code has been published under a particular version of this License, You may choose to continue to use it under the terms and conditions of that version or use the Original Code under the terms of any subsequent version of this License published by the Initial Developer. + + +### 15. Miscellaneous + +#### 15.1 Relationship of Parties + +This License will not be construed as creating an agency, partnership, joint venture or any other form of legal association between You and the Initial Developer, and You will not represent to the contrary, whether expressly, by implication or otherwise. + +#### 15.2 Independent Development + +Nothing in this License will impair the Initial Developer's right to acquire, license, develop, have others develop for it, market or distribute technology or products that perform the same or similar functions as, or otherwise compete with, Modifications, Derivative Programs, technology or products that You may develop, produce, market or distribute. + +#### 15.3 Severability + +If for any reason a court of competent jurisdiction finds any provision of this License, or portion thereof, to be unenforceable, that provision of the License will be enforced to the maximum extent permissible so as to effect the economic benefits and intent of the parties, and the remainder of this License will continue in full force and extent. + + +@htmlonly
@endhtmlonly +#### END OF THE TERMS AND CONDITIONS OF THIS LICENSE + +Open CASCADE S.A.S. is a French société par actions simplifiée having its main offices at 1, place in Frères Montgolfier, 78280 Guyancourt, France. Its web site is located at the following address http://www.opencascade.com + + +#### Open CASCADE Technology Public License + +#### Schedule "A" + +The content of this file is subject to the Open CASCADE Technology Public License Version 6.5 (the "License"). +You may not use the content of this file except in compliance with the License. +Please obtain a copy of the License at http://www.opencascade.org and read it completely before using this file. The Initial Developer of the Original Code is Open CASCADE S.A.S., with main offices at 1, place des Frères Montgolfier, 78280 Guyancourt, France. The Original Code is copyright © Open CASCADE S.A.S., 2001. All rights reserved. + +"The Original Code and all software distributed under the License are distributed on an "AS IS" basis, without warranty of any kind, and the Initial Developer hereby disclaims all such warranties, including without limitation, any warranties of merchantability, fitness for a particular purpose or non-infringement. + +Please see the License for the specific terms and conditions governing rights and limitations under the License". + +#### End of Schedule "A" + + +#### Open CASCADE Technology Public License + +#### Schedule "B" + +"The content of this file is subject to the Open CASCADE Technology Public License Version 6.5 (the "License"). You may not use the content of this file except in compliance with the License. Please obtain a copy of the License at http://www.opencascade.org and read it completely before using this file. The Initial Developer of the Original Code is Open CASCADE S.A.S., with main offices at 1, place des Frères Montgolfier, 78280 Guyancourt, France. The Original Code is copyright © Open CASCADE S.A.S., 2001. All rights reserved. + +Modifications to the Original Code have been made by ________________________. Modifications are copyright © [Year to be included]. All rights reserved. + +The software Open CASCADE Technology and all software distributed under the License are distributed on an "AS IS" basis, without warranty of any kind, and the Initial Developer hereby disclaims all such warranties, including without limitation, any warranties of merchantability, fitness for a particular purpose or non-infringement. Please see the License for the specific terms and conditions governing rights and limitations under the License". + +#### End of Schedule "B" + +@htmlonly
@endhtmlonly \ No newline at end of file diff --git a/dox/Overview/Overview.md b/dox/Overview/Overview.md new file mode 100644 index 0000000000..eb119f0966 --- /dev/null +++ b/dox/Overview/Overview.md @@ -0,0 +1,604 @@ +Overview {#mainpage} +======== + +@section OCCT_OVW_SECTION_1 Welcome + +Welcome to Open CASCADE Technology version 6.6.0, a minor release, +which introduces a number of new features and improved traditional +functionality along with some changes over the previous maintenance release 6.5.5. + +This release makes Open CASCADE Technology even a more powerful and stable +development platform for 3D modeling and numerical simulation applications. + +Open CASCADE Technology 6.6.0 is a full-featured package that allows developing +applications on Windows and Linux platforms. + +@htmlonly
@endhtmlonly http://www.opencascade.org + +![](/overview/images/overview_occttransparent.png) + +Copyright © 2001-2013 OPEN CASCADE S.A.S. + +![](/resources/occt_logo.png) + +@htmlonly
@endhtmlonly + +@section OCCT_OVW_SECTION_2 Copyrights + +Copyright© 2001-2013 by OPEN CASCADE S.A.S. All rights reserved. + + Trademark information +---------------------- + +You are hereby informed that all software is a property of its respective authors and is protected by +international and domestic laws on intellectual property and trademarks. +Should you need further information, please directly contact the authors. + +CAS.CADE and Open CASCADE are registered trademarks of OPEN CASCADE S.A.S. + + Acknowledgement +------------------ + +The following parties are acknowledged for producing tools which are used within +Open CASCADE Technology libraries or for release preparation. + +You are hereby informed that all rights to the software listed below belong to its respective +authors and such software may not be freely available and/or be free of charge for any kind +of use or purpose. We strongly recommend that you carefully read the license of these products +and, in case you need any further information, directly contact their authors. + +**Qt** is a cross-platform application framework that is widely used for developing application software +with graphical user interface (GUI). Qt is free and open source software distributed under +the terms of the GNU Lesser General Public License. In OCCT Qt is used for programming samples. +If you need further information on Qt, please, refer to Qt Homepage (qt.digia.com). + +**Tcl** is a high-level programming language. Tk is a graphical user interface (GUI) toolkit, +with buttons, menus, listboxes, scrollbars, and so on. Taken together Tcl and Tk provide a solution +to develop cross-platform graphical user interfaces with a native look and feel. Tcl/Tk is under copyright by +Scriptics Corp., Sun Microsystems, and other companies. However, Tcl/Tk is an open source, and +the copyright allows you to use, modify, and redistribute Tcl/Tk for any purpose, without an +explicit license agreement and without paying any license fees or royalties. +To use Tcl/Tk, please refer to the Licensing Terms (http://www.tcl.tk/software/tcltk/license.html). + +**Robert Boehne** has developed **GNU Autoconf**, **Automake** and **Libtool** scripts and makefiles +for the Open CASCADE project http://sourceforge.net/projects/autoopencas/, +which became an initial groundwork for the build scripts based on respective GNU tools +(autoconf, automake and libtool) in Open CASCADE Technology version 4.0. +These scripts are now maintained by the OPEN CASCADE company. + +**GL2PS** is developed by Christophe Geuzaine and others. It is OpenGL to PostScript printing library. +The library is licensed under GL2PS LICENSE http://www.geuz.org/gl2ps/COPYING.GL2PS Version 2, November 2003. + +**FreeType 2** is developed by Antoine Leca, David Turner, Werner Lemberg and others. +It is a software font engine that is designed to be small, efficient, highly customizable and +portable while capable of producing high-quality output (glyph images). This product +can be used in graphic libraries, display servers, font conversion tools, +text image generation tools, and many other products. + +FreeType 2 is released under two open-source licenses: BSD-like FreeType License and the GPL. + +**Intel® Threading Building Blocks (TBB)** offers a rich and complete approach to expressing parallelism in a C++ program. +It is a library that helps you to take advantage of multi-core processor performance without having to be a threading expert. +Threading Building Blocks is not just a threads-replacement library. It represents a higher-level, task-based parallelism that +abstracts platform details and threading mechanisms for scalability and performance. +TBB is available under GPLv2 license with the runtime exception. + +Open CASCADE Technology WOK module on Windows also makes use of LGPL-licensed C routines * regexp and getopt, taken from GNU C library. + +**Doxygen** (Copyright © 1997-2010 by Dimitri van Heesch) is open source documentation system for +C++, C, Java, Objective-C, Python, IDL, PHP and C#. This product is used in Open CASCADE Technology +for automatic creation of Technical Documentation from C++ header files. +If you need further information on Doxygen, please refer to http://www.stack.nl/~dimitri/doxygen/index.html. + +**Graphviz** is open source graph visualization software developed by John Ellson, Emden Gansner, Yifan Hu and Arif Bilgin. +Graph visualization is representiation of structured information as diagrams of abstract graphs and networks. +This product is used together with Doxygen in Open CASCADE Technology for automatic creation of Technical Documentation +(generation of dependency graphs). Current versions of Graphviz are licensed on an open source +basis only under The Eclipse Public License (EPL) (http://www.graphviz.org/License.php). + +**Inno Setup** is a free script-driven installation system created in CodeGear Delphi by Jordan Russell. +In OCCT Inno Setup is used to create Installation Wizard on Windows. +It is licensed under Inno Setup License (http://www.jrsoftware.org/files/is/license.txt). + +**FreeImage** is an Open Source library supporting popular graphics image formats, such as PNG, BMP, JPEG, TIFF +and others used by multimedia applications. This library is developed by Hervé Drolon and Floris van den Berg. +FreeImage is easy to use, fast, multithreading safe, compatible with all 32-bit or 64-bit versions of Windows, +and cross-platform (works both with Linux and Mac OS X). FreeImage is licensed under the +GNU General Public License, version 2.0 (GPLv2) and +the FreeImage Public License (FIPL) (http://freeimage.sourceforge.net/freeimage-license.txt). + +Adobe Systems, Inc. provides **Adobe Acrobat Professional**, which is a software to view, create, manipulate, +print and manage files in Portable Document Format (PDF). +This product is used in OCCT for the development and update of User's Guides. + +The same developer provides **Robohelp HTML** that allows developing online Help for applications that are run on the Web and on Intranets. +**Robohelp HTML X5.0.2** is used in OCCT for the development and update of OCCT Overview. + +**Linux** is a registered trademark of Linus Torvalds. + +**Windows** is a registered trademark of Microsoft Corporation in the United States and other countries. + +**Mac** and the Mac logo are trademarks of Apple Inc., registered in the U.S. and other countries. + + +@section OCCT_OVW_SECTION_3 Introduction + + +This document is just an introduction to Open CASCADE Technology (OCCT) dealing with +compatibility and installation issues and providing a general description of OCCT modules +and other features. All modules and development tools are described in User's Guides, available in +Adobe Portable Document Format (PDF). To read this format, you need Adobe Acrobat Reader, +which is a freeware and can be downloaded from the Adobe site. +All user guides can be accessed directly from this help. + +Alongside with PDF User Guides, OCCT suggests its users full reference documentation on all +implementation classes automatically generated by Doxygen software. +This Doxygen generated documentation is supplied in the form of a separate package, +in a usual html file format. + +Reference documentation is presented in **Modules --> Toolkits --> Packages --> Classes** +logic structure with cross-references to all OCCT classes and complete in-browser search by all classes. + +**Recommendation for generation of reference documentation** + +Reference documentation can be generated by OCCT binary WOK package that +is available for downloading from www.opencascade.org and dev.opencascade.org sites. + +Prerequisites: + + * Doxygen version 1.7.4 or higher + * Graphviz version 2.28.0 or higher + +Run WOK (cd \/site folder): + +* Using WOK TCL shell: + > wok_tclsh.sh + +* Using Emacs editor: + > wok_emacs.sh + +In the WOK prompt, step into your workbench: + + >wokcd + +In your workbench, use **wgendoc** command with –h argument to get information about arguments of **wgendoc** command: + + >wgendoc -h + +then run **wgendoc** command with required arguments + +e.g., wgendoc –output=d:/occt/doc {–m=Draw Visualization} -chm + + +@section OCCT_OVW_SECTION_4 Installation + +Open CASCADE Technology can be installed with binaries precompiled by +Visual C++ 2008 using Installation Procedure under Windows platform only + +The source package and the building tools are available for self-dependent +preparation binary files on Unix and Windows platforms. + +@subsection OCCT_OVW_SECTION_4_1 Windows + +**Recommendation:** + +If you have a previous version of OCCT installed on your station, +and you do not plan to use it along with the new version, you might want to uninstall +the previous version (using Control Panel, Add/Remove Programs) before +the installation of this new version, to avoid possible problems +(conflict of system variables, paths, etc). + +**Attention:** For full installation OCCT requires approximately 650 Mb of disk space, +but during the installation process you will need 1,2 Gb of free disk space. + +OCCT installation with reference documentation requires 1,4 Gb on disk. + + * Download the OCCT installer from OPEN CASCADE web site using the link. you have been provided + * Launch the installer and follow the instructions. + +### Third-party tools + + +The includes and binaries of third-party libraries necessary for building and launching +OCCT are included into binary distribution (built with Visual C++ 2008). +To recompile OCCT libraries with other Visual C++ versions, +it is necessary to install headers and libraries of these third-party products. + +The recommended way to do this is to download each of the third-party tools from its web site +and build it using the relevant tools. For additional convenience of the users, +OPEN CASCADE also provides the documents with recommendations on building +third-party products from source files. + +When the installation is complete, you will find the following directories +(some might be absent in case of custom installation): + +![](/overview/images/overview_installation.png) + +### Description of directory tree + + + * **3rdparty** * This folder contains third-party products necessary to compile and use OCCT as well as start sample applications with Visual C++ 2008; + * **ros/adm** * This folder contains administration files, which allow rebuilding OCCT; + * **ros/adm/cmake** * This folder contains files of CMake building procedure; + * **ros/adm/msvc** * This folder contains Visual Studio projects for Visual C++ 2005, 2008 and 2010, which allow rebuilding OCCT under Windows platform in 32 and 64-bit mode; + * **ros/data** * This folder contains CAD files in different formats, which can be used to test the OCCT functionalities; + * **ros/doc** * This folder contains OCCT Overview documentation; + * **ros/drv** * This folder contains source files generated by WOK (private header files and instantiations of generic classes); + * **ros/inc** * This folder contains all OCCT header files; + * **ros/samples** * This folder contains sample applications. + * **ros/src** * This folder contains OCCT source files. They are organized in folders, one per development unit; + * **ros/tests** * This folder contains scripts for OCCT testing. + * **ros/win32/vc9** * This folder contains executable and library files built in optimize mode for Windows platform by Visual C++ 2008; + + +@subsection OCCT_OVW_SECTION_4_2 System Environment Variables + +To run any Open CASCADE Technology application you need to set the environment variables. + +### On Windows + + +You can define the environment variables with env.bat script located in the +OpenCACADE/ros folder. This script accepts two arguments to be used: +the version of Visual Studio (vc8, vc9, or vc10) and the architecture (win32 or win64). + +The additional environment settings necessary for compiling OCCT libraries and samples +by Microsoft Visual Studio can be set using script custom.bat located in the same folder. +You might need to edit this script to correct the paths to third-party libraries +if they are installed on your system in a non-default location. + +Script msvc.bat can be used with the same arguments for immediate launch of Visual Studio for (re)compiling OCCT. + +### On Unix + + + If OCCT was built by Code::Blocks, you can define the environment variables with env_cbp.sh or custom_cbp.sh script. + + If OCCT was built by Automake, you can define the environment variables with env_amk.sh or custom_amk.sh script. + +The scripts are located in the OpenCACADE/ros folder of the source package. + + +### Description of system variables: + + + * **CASROOT** is used to define the root directory of Open CASCADE Technology; + * **PATH** is required to define the path to OCCT binaries and 3rdparty folder; + * **LD_LIBRARY_PATH** is required to define the path to OCCT libraries (on UNIX platforms only); + * **MMGT_OPT** if set to 1, the memory manager performs optimizations as described below; if set to 2, + Intel ® TBB optimized memory manager is used; if 0 (default), every memory block is allocated + in C memory heap directly (via malloc() and free() functions). + In the latter case, all other options except MMGT_CLEAR and MMGT_REENTRANT are ignored; + * **MMGT_CLEAR** if set to 1 (default), every allocated memory block is cleared by zeros; + if set to 0, memory block is returned as it is; + * **MMGT_CELLSIZE** defines the maximal size of blocks allocated in large pools of memory. Default is 200; + * **MMGT_NBPAGES** defines the size of memory chunks allocated for small blocks in pages + (operating-system dependent). Default is 10000; + * **MMGT_THRESHOLD** defines the maximal size of blocks that are recycled internally + instead of being returned to the heap. Default is 40000; + * **MMGT_MMAP** when set to 1 (default), large memory blocks are allocated using + memory mapping functions of the operating system; if set to 0, + they will be allocated in the C heap by malloc(); + * **MMGT_REENTRANT** when set to 1 (default), all calls to the + optimized memory manager will be secured against possible simultaneous access from different execution threads. + +This variable should be set in any multithreaded application that uses +an optimized memory manager (MMGT_OPT=1) and has more than one thread +potentially calling OCCT functions. If set to 0, OCCT memory management and +exception handling routines will skip the code protecting from possible concurrency +in multi-threaded environment. This can yield some performance gain in some applications, +but can lead to unpredictable results if used in a multithreaded application; + +**Special note:** for applications that use OCCT memory manager from more than one thread, +on multiprocessor hardware, it is recommended to use options MMGT_OPT=2 and MMGT_REENTRANT=1. + + * **CSF_LANGUAGE** is required to define the default language of messages; + * **CSF_EXCEPTION_PROMPT** – if defined and set to 1 then a diagnostic message is displayed in case of an exception; + * **CSF_MDTVFontDirectory** accesses the fonts that can be used in OCCT; + * **CSF_MDTVTexturesDirectory** defines the directory for available textures when using texture mapping; + * **CSF_UnitsDefinition** and **CSF_UnitsLexicon** are required by programs considering units; + * **CSF_SHMessage** is required in order to define the path to the messages file for *ShapeHealing*; + * **CSF_XSMessage** is required in order to define the path to the messages file for **STEP** and **IGES** translators; + * **CSF_StandardDefaults** and **CSF_PluginDefaults** are required in order to maintain CASCADE Persistence mechanism to make possible any open/save operations with OCAF documents; + * **CSF_StandardLiteDefaults** is required in order to maintain *OCCT Persistence mechanism* to make possible any open/save operations with Lite OCAF documents; + * **CSF_XCAFDefaults** any open/save operations for **XDE** documents; + * **CSF_GraphicShr** is required to define the path to the *TKOpenGl* library; + * **CSF_IGESDefaults** and **CSF_STEPDefaults** are required for **IGES** and **STEP** translators correspondingly in order to define the path to the resource files; + * **CSF_XmlOcafResource** is required in order to set the path to **XSD** resources, which defines XML grammar. + +As part of XML persistence support, these definitions can be used by end users +in XML validators or editors, together with persistent XmlOcaf documents; + +* **CSF_MIGRATION_TYPES** is required in order to read documents that contain old data types, such as *TDataStd_Shape*; +* **TCLLIBPATH**, **TCL_LIBRARY**, **TK_LIBRARY** and **TIX_LIBRARY** are required to allow work with **DRAW** and **WOK**. + + +@section OCCT_OVW_SECTION_5 Requirements + +@subsection OCCT_OVW_SECTION_5_1 Linux Intel + +| Operating System | 32/64-bit: Debian: 4.0, Mandriva: 2010* | +| :--------------------------------------------- | :------------------------------------------------------------------------------------------------- | +| Minimum memory | 512 Mb, 1 Gb recommended | +| Free disk space (complete installation) | For full installation Open CASCADE Technology requires 600 Mb of disk space. | +| Minimum swap space | 500 Mb | +| Video card | GeForce, | +| | The following versions of GeForce drivers are recommended: | +| | 64-bit Version: 100.14.19 or later http://www.nvidia.com/object/linux_display_amd64_100.14.19.html | +| | 32-bit Version: 100.14.19 or later http://www.nvidia.com/object/linux_display_ia32_100.14.19.html | +| Graphic library | OpenGL 1.1+ (OpenGL 1.5+ is recommended) | +| C++ | GNU gcc 4.0. * 4.3.2. | +| TCL (for testing tools) | Tcltk 8.5 or 8.6 | +| | http://www.tcl.tk/software/tcltk/8.6.html | +| Qt (for demonstration tools) | Qt 4.6.2 http://qt.digia.com/downloads | +| Freetype (OCCT Text rendering) | freetype-2.4.10 | +| | http://sourceforge.net/projects/freetype/files/ | +| FreeImage (Support of common graphic formats ) | FreeImage 3.14.1 | +| | http://sourceforge.net/projects/freeimage/files/Source%20Distribution/ | +| gl2ps (Export contents of OCCT | gl2ps-1.3.5 | +| viewer to vector graphic file) | http://geuz.org/gl2ps/ | +| TBB (optional tool for parallelized | TBB 3.x or 4.x | +| version of BRepMesh component) | http://www.threadingbuildingblocks.org/ | + +@subsection OCCT_OVW_SECTION_5_2 Windows Intel + +| Operating System | 32/64-bit: 8/ 7 SP1 / VISTA SP2 /XP SP3 | +| :--------------------------------------------- | :----------------------------------------------------------------------------------------------- | +| Minimum memory | 512 Mb, 1 Gb recommended | +| Free disk space | For full installation Open CASCADE Technology requires 650 Mb of disk space. | +| (complete installation) | but during the process of installation you will need 1,2 Gb of free disk space. | +| Minimum swap space | 500 Mb | +| Video card | GeForce, | +| | Version 266.58 WHQL or later is recommended:http://www.nvidia.com/Download/index.aspx | +| Graphic library | OpenGL 1.1+ (OpenGL 1.5+ is recommended) | +| C++ | Microsoft Visual Studio .NET 2005 SP1 with all security updates | +| | Microsoft Visual Studio .NET 2008 SP1* | +| | Microsoft Visual Studio .NET 2010 | +| | Microsoft Visual Studio .NET 2012 | +| TCL (for testing tools) | ActiveTcl 8.5 or 8.6 | +| | http://www.activestate.com/activetcl/downloads | +| Qt (for demonstration tools) | Qt 4.6.2 http://qt.digia.com/downloads | +| Freetype (OCCT Text rendering) | freetype-2.4.10 | +| | http://sourceforge.net/projects/freetype/files/ | +| FreeImage (Support of common graphic formats ) | FreeImage 3.14.1 | +| | http://sourceforge.net/projects/freeimage/files/Source%20Distribution/ | +| gl2ps (Export contents of OCCT | gl2ps-1.3.5 | +| viewer to vector graphic file) | http://geuz.org/gl2ps/ | +| TBB (optional tool for parallelized | TBB 3.x or 4.x | +| version of BRepMesh component) | http://www.threadingbuildingblocks.org/ | + +@subsection OCCT_OVW_SECTION_5_3 MAC OS X + +| Operating System | Requires Mac OS X 10.6.8 Snow Leopard / 10.7 Lion | +| :--------------------------------------------- | :----------------------------------------------------------------------------------------------- | +| Minimum memory | 512 Mb, 1 Gb recommended | +| Free disk space (complete installation) | For full installation Open CASCADE Technology requires 600 Mb of disk space. | +| Minimum swap space | 500 Mb | +| Graphic library | OpenGL 1.1+ (OpenGL 1.5+ is recommended) | +| C++ | XCode 3.2 or newer (4.x is recommended) | +| TCL (for testing tools) | Tcltk 8.5 or 8.6 | +| | http://www.tcl.tk/software/tcltk/8.6.html | +| Qt (for demonstration tools) | Qt 4.6.2 http://qt.digia.com/downloads | +| Freetype (OCCT Text rendering) | freetype-2.4.10 | +| | http://sourceforge.net/projects/freetype/files/ | +| FreeImage (Support of common graphic formats ) | FreeImage 3.14.1 | +| | http://sourceforge.net/projects/freeimage/files/Source%20Distribution/ | +| gl2ps (Export contents of OCCT | gl2ps-1.3.5 | +| viewer to vector graphic file) | http://geuz.org/gl2ps/ | +| TBB (optional tool for parallelized | TBB 3.x or 4.x | +| version of BRepMesh component) | http://www.threadingbuildingblocks.org/ | + + +@section OCCT_OVW_SECTION_6 Release Notes + + +Open CASCADE Technology latest version +@htmlonly +Release Notes +@endhtmlonly (PDF) + + +@section OCCT_OVW_SECTION_7 Getting Started + + +@subsection OCCT_OVW_SECTION_7_1 Draw Test Harness + +Draw is a command interpreter based on TCL and a graphical system used for testing and demonstrating OCCT modeling libraries. + +Draw can be used interactively to create, display and modify objects such as curves, surfaces and topological shapes. + +![](/overview/images/overview_draw.png "") + +Scripts can be written to customize Draw and perform tests. +New types of objects and new commands can be added using C++ programming language. + +Draw contains: + + * A command interpreter based on TCL command language. + * A 2D an 3D graphic viewer with support of operations such as zoom, pan, rotation and full-screen views. + * An optional set of geometric commands to create and modify curves and surfaces and to use OCCT geometry algorithms. + * A set of topological commands to create and modify BRep shapes and to use OCCT topology algorithms. + * A set of graphic commands for view and display operations including Mesh Visualization Service. + * A set of Application framework commands for handling of files and attributes. + * A set of Data Exchange commands for translation of files from various formats (IGES,STEP) into OCCT shapes. + * A set of Shape Healing commands: check of overlapping edges, approximation of a shape to BSpline, etc. + +You can add new custom test harness commands to Draw in order to test +or demonstrate a new functionality, which you are developing. + +Currently DRAW Test Harness is a single executable called DRAWEXE. + +Commands grouped in toolkits can be loaded at run-time thereby implementing dynamically loaded plug-ins. +Thus you can work only with the commands that suit your needs adding +the commands dynamically without leaving the Test Harness session. + +Declaration of available plug-ins is done through special resource file(s). +The pload command loads the plug-in in accordance with +the specified resource file and activates the commands implemented in the plug-in. + +The whole process of using the plug-in mechanism as well as the instructions for extending Test Harness is described in the +@htmlonly +User's Guide/ +@endhtmlonly + +Draw Test Harness provides an environment for OCCT automated testing system. Please, consult its +@htmlonly +User's Guide / +@endhtmlonly +for details. + +Remarks: + +* The DRAWEXE executable is delivered with the installation procedure on Windows platform only. +* To start it, launch DRAWEXE executable from Open CASCADE Technology//Draw Test Harness item of the Start\\Programs menu. + +@subsection OCCT_OVW_SECTION_7_2 Experimenting with Draw Test Harness + + Running Draw +------------ + +**On Linux:** + +1. If OCCT was built by Code::Blocks * use $CASROOT/draw_cbp.sh file to launch DRAWEXE executable; +2. If OCCT was built by Automake * use $CASROOT/draw_amk.sh file to launch DRAWEXE executable; + +Draw[1]> prompt appears in the command window + +Type pload ALL + +**On Windows:** + +Launch Draw executable from Open CASCADE Technology\\Test Harness\\Draw Test Harness +item of the Start\\Programs menu or Use $CASROOT\\draw.bat file to launch DRAWEXE executable. + +Draw[1]> prompt appears in the command window + +Type pload ALL + +**Creating your first geometric objects** + +1. In the command window, type axo to create an axonometric view +2. Type box b -10 -10 -10 20 20 20 to create a cube b of size 20, + parallel to the X Y Z axis and centered on the origin. + The cube will be displayed in the axonometric view in wireframe mode +3. Type fit to fill the viewer with the cube +4. Type pcylinder c 2 30 to create a cylinder c of radius 2 and height 30. + The cylinder will be displayed in addition to the cube + +**Manipulating the view** + +1. Type clear to erase the view +2. Type donly c to display the cylinder only +3. Type donly b to display the cube only +4. Type hlr hlr b to display the cube in the hidden line removal mode + +**Running demonstration files** + +1. Type cd ..//.. to return to the root directory +2. Type cd src//DrawResources to reach the DrawResources directory +3. Type source "Available Demo File" to run the demonstration provided with Open CASCADE +4. The following demonstration files are available: + * DataExchangeDemo.tcl + * ModelingDemo.tcl + * OCAFDemo.tcl + * VisualizationDemo.tcl + +**Getting Help** + +1. Type help to see all available commands +2. Type help command-name to find out the arguments for a given command + +@subsection OCCT_OVW_SECTION_7_3 Programming Samples + +@subsubsection OCCT_OVW_SECTION_7_3_1 MFC + +Visual C++ programming samples containing 10 Visual C++ projects +illustrating how to use a particular module or functionality. + +The list of MFC samples: + + * Geometry + * Modeling + * Viewer2d + * Viewer3d + * ImportExport + * Ocaf + * Triangulation + * HLR + * Animation + * Convert + +![](/overview/images/overview_mvc.png "") + +**Remarks:** + + * MFC samples are available only on Windows platform; + * To start a sample use Open CASCADE Technology\\Samples\\Mfc\\ item of the Start\\Programs menu; + * Read carefully readme.txt to learn about launching and compilation options. + +@subsubsection OCCT_OVW_SECTION_7_3_2 Qt + +OCCT contains three samples based on Qt application framework + + Import Export +------------- + + Import Export programming sample contains 3D Viewer and Import // Export functionality. + +![](/overview/images/overview_qt.png "") + + Tutorial +--------- + +The Qt programming tutorial teaches how to use Open CASCADE Technology services to model a 3D object. +The purpose of the tutorial is not to explain all OCCT classes but +to help start thinking in terms of the Open CASCADE Technology. + +This tutorial assumes that the user has experience in using and setting up C++. +From the viewpoint of programming, Open CASCADE Technology is designed +to enhance user's C++ tools with high performance modeling classes, methods and functions. +The combination of these resources allows creating substantial applications. + +**See also:** @subpage overview__tutorial "3D Object Tutorial" + + Voxel +------ + +This is a demonstration application showing OCCT voxel models. +It also includes a set of non-regression tests and other commands +for testing this functionality (accessible only through TEST pre-processor definition). + +**See also:** + @htmlonly +Voxels User's guide (PDF) +@endhtmlonly + +**Remarks:** + + * Qt samples are available on all supported platforms; + * To start a sample on Windows use Open CASCADE Technology\\Samples\\Qt\\ item of the Start\\Programs menu. + +@subsubsection OCCT_OVW_SECTION_7_3_3 C# + +C# sample containing 3D Viewer and Import // Export functionality. + +![](/overview/images/overview_c__ie.png "") + +Import: + + * BRep + * Iges + * Step + +Export: + + * Brep + * Iges + * Step + * Stl + * Vrml + +**Remarks:** + + * C# sample is available only on Windows platform; + * It is delivered in source code only and must be built with Microsoft Visual C++ 2005. diff --git a/dox/dev_guides/building/automake.md b/dox/dev_guides/building/automake.md new file mode 100644 index 0000000000..e03ceb7fe1 --- /dev/null +++ b/dox/dev_guides/building/automake.md @@ -0,0 +1,69 @@ +Building with Automake {#dev_guides__building__automake} +====================== + +This file describes steps to build OCCT libraries from complete source +archive on Linux with GNU build system (Autotools). + +If you are building OCCT from bare sources (as in Git repository), or do some +changes affecting CDL files, you need to use WOK to re-generate header files +and build scripts / projects. See file \ref wok "WOK" for instructions. + +Before building OCCT, you need to install required third-party libraries; see +OCCT_Build3rdParty_Linux.pdf for instructions. + +Note that during compilation by makefiles on some Linux OS on a station with +NVIDIA video card you may experience problems because the installation +procedure of NVIDIA video driver removes library libGL.so included in package +libMesaGL from directory /usr/X11R6/lib and places this library libGL.so in +directory /usr/lib. However, libtool expects to find the library in directory +/usr/X11R6/lib, which causes compilation crash (See /usr/X11R6/lib/libGLU.la). + +To prevent this, suggest making links: + + ln -s /usr/lib/libGL.so /usr/X11R6/lib/libGL.so + ln -s /usr/lib/libGL.la /usr/X11R6/lib/libGL.la + + 1.In OCCT root folder, launch build_configure script + + This will generate files configure and Makefile.in for your system. + + 2.Go to the directory where OCCT will be built, and run configure to generate + makefiles. + + $CASROOT/configure \ + + Where \ is a set of options. + The following flags are mandatory: + + * --with-tcl= defines location of tclConfig.sh + * --with-tk= defines location of tkConfig.sh + * --with-freetype= defines location of installed FreeType product + * --prefix= defines location for the installation of OCCT binaries + + Additional flags: + + * --with-gl2ps= defines location of installed gl2ps product + * --with-freeimage= defines location of installed FreeImage product + * --with-tbb-include= defines location of tbb.h + * --with-tbb-library= defines location of libtbb.so + * --enable-debug= yes: includes debug information, no: does not include debug information + * --enable-production= yes: switches code optimization, no: switches off code optimization + * --disable-draw - allows OCCT building without Draw. + + If location of FreeImage, TBB, and Gl2Ps is not specified, OCCT will be + built without these optional libraries. + + + Attention: 64-bit platforms are detected automatically. + + Example: + + > ./configure -prefix=/PRODUCTS/occt-6.5.5 --with-tcl=/PRODUCTS/tcltk-8.5.8/lib --with-tk=/PRODUCTS/tcltk-8.5.8/lib --with-freetype=/PRODUCTS/freetype-2.4.10 --with-gl2ps=/PRODUCTS/gl2ps-1.3.5 --with-freeimage=/PRODUCTS/freeimage-3.14.1 --with-tbb-include=/PRODUCTS/tbb30_018oss/include --with-tbb-library=/PRODUCTS/tbb30_018oss/lib/ia32/cc4.1.0_libc2.4_kernel2.6.16.21 + + 3.If configure exits successfully, you can build OCCT with make command. + + > make -j8 install + +To start DRAW, launch + + > draw.sh diff --git a/dox/dev_guides/building/cmake.md b/dox/dev_guides/building/cmake.md new file mode 100644 index 0000000000..4f648e6b6e --- /dev/null +++ b/dox/dev_guides/building/cmake.md @@ -0,0 +1,77 @@ +Building with CMake {#dev_guides__building__cmake} +=================== + +This file describes steps to build OCCT libraries from complete source package +with CMake. CMake is free software that can create GNU Makefiles, KDevelop, +XCode, and Visual Studio project files. Version 2.6 or above of CMake is +required. + +If you are building OCCT from bare sources (as in Git repository), or do some +changes affecting CDL files, you need to use WOK to re-generate header files +and build scripts / projects. See file \ref wok "WOK" for instructions. + +Before building OCCT, you need to install required third-party libraries; see +instructions for your platform on Resources page at http://dev.opencascade.org + +1. Decide on location of build and install directories. + + The build directory is the one where intermediate files will be created + (projects / makefiles, objects, binaries). + The install directory is the one where binaries will be installed after + build, along with header files and resources required for OCCT use in + applications. + + OCCT CMake scripts assume use of separate build and one install directories + for each configuration (Debug or Release). + + It is recommended to separate build and install directories from OCCT + source directory, for example: + + /user/home/occt/ros - sources + /user/home/tmp/occt-build-release - intermediate files (release) + /user/home/occt-install-release - installed binaries (release) + +2. Run CMake indicating path to OCCT sources (ros subdirectory) and selected build directory. + It is recommended to use GUI tools provided by CMake: cmake-gui on Windows + and Mac, ccmake on Linux. + + Example: + + Linux> cd /user/home/occt-install-release + Linux> ccmake /user/home/occt/ros + +3. Run Configure + + You will likely get CMake errors due to missing paths to 3rd-party + libraries. This is normal; proceed with configuration as follows. + +4. Check parameters shown by CMake, set them in accordance with your + environment, and repeat Configure until it runs without error: + + - 3RDPARTY_DIR: path to directory whethe 3rd-party libraries are installed + (for the cases when they are not in default locations, or on Windows) + - 3RDPARTY_USE_\: select to use optional libraries + - Other options in 3RDPARTY group can be used to fine-tune paths to + 3rd-party libraries + + - BUILD_TYPE: configuration to build (Debug or Release) + - BUILD_BITNESS: bitness (32 or 64) + - BUILD_TOOLKITS: optional string containing list of toolkits to be built + in addition to those included in completely built modueles + - BUILD_\: select to build corresponding OCCT module + + - INSTALL_DIR: directory to install OCCT + - INSTALL_\: select to copy corresponding 3rd-party library to OCCT + install dir + +5. Run Generate + + This will create makefiles or project files for your build system. + +6. Build OCCT: + + - on Windows with MSVC: open solution OCCT.sln and build it, when build project INSTALL_ALL explicitly to have binaries and headers installed + - on Linux with make files: run 'make install' + + + \ No newline at end of file diff --git a/dox/dev_guides/building/code_blocks.md b/dox/dev_guides/building/code_blocks.md new file mode 100644 index 0000000000..919edc222a --- /dev/null +++ b/dox/dev_guides/building/code_blocks.md @@ -0,0 +1,64 @@ +Building with Code::Blocks on Mac OS X {#dev_guides__building__code_blocks} +====================================== + +This file describes steps to build OCCT libraries from complete source package +on Mac OS X with Code::Blocks. + +If you are building OCCT from bare sources (as in Git repository), or do some +changes affecting CDL files, you need to use WOK to re-generate header files +and build scripts / projects. See file \ref wok "WOK" for instructions. + +Before building OCCT, you need to install required third-party libraries; see +OCCT_Build3rdParty_OSX.pdf for details. + +1. Add paths to the mandatory 3rd-party products (Tcl/Tk and FreeType) in file + custom.sh located in \. For this: + + 1.1. Add paths to the includes in variable "CSF_OPT_INC"; + + 1.2. Add paths to the binary libraries in variable "CSF_OPT_LIB64"; + + All paths should be separated by ":" symbol. + +2. Add paths to the optional 3rd-party libraries (TBB, gl2ps and FreeImage) + in the aforementioned environment variables "CSF_OPT_INC" and + "CSF_OPT_LIB64" from file custom.sh. + + If you want to build OCCT without the optional libraries perform the + following steps: + + 2.1 Disable unnecessary library in custom.sh by setting the corresponding + variable HAVE_\ to "false". + + export HAVE_GL2PS=false + + 2.2 Remove this library from Linker settings in Code::Blocks for each project + that uses it: right click on the required project, choose "Build options", + go to "Linker settings" tab in the opened window , select unnecessary + libraries and click "Delete" button. + +3. Open Terminal application + +4. Enter \: + + cd \ + +5. To start Code::Blocks, run the command /codeblocks.sh + +6. To build all toolkits, click "Build->Build workspace" in the menu bar. + + +To start DRAWEXE, which has been built with Code::Blocks on Mac OS X, perform +the following steps: + +1. Open Terminal application + +2. Enter \: + + cd \ + +3. Run script + + ./draw_cbp.sh cbp [d] + + Option "d" is used if OCCT has been built in Debug mode. diff --git a/dox/dev_guides/building/msvc.md b/dox/dev_guides/building/msvc.md new file mode 100644 index 0000000000..3a84422ae0 --- /dev/null +++ b/dox/dev_guides/building/msvc.md @@ -0,0 +1,31 @@ +Building with MS Visual C++ {#dev_guides__building__msvc} +=========================== + +This file describes steps to build OCCT libraries from complete source +archive on Windows with MS Visual C++. + +If you are building OCCT from bare sources (as in Git repository), or do some +changes affecting CDL files, you need to use WOK to re-generate header files +and build scripts / projects. See file \ref wok "WOK" for instructions. + +Before building OCCT, you need to install required third-party libraries; see +OCCT_Build3rdParty_Windows.pdf for instructions. + +1. Edit file custom.bat to define environment: + + - VCVER - version of Visual Studio (vc8, vc9, vc10 or vc11), + and relevant VCVARS path + - ARCH - architecture (32 or 64), affects only PATH variable for execution + - HAVE_* - flags to enable or disable use of optional third-party products + - CSF_OPT_* - paths to search for includes and binaries of all used + third-party products + +2. Launch msvc.bat to start Visual Studio with all necessary environment + variables defined. + + Note: the MSVC project files are located in folders adm\\msvc\\vc[9-11]. + Binaries are produced in win32 or win64 folders. + +3. Build with Visual Studio + +To start DRAW, launch draw.bat. diff --git a/dox/dev_guides/building/xcode.md b/dox/dev_guides/building/xcode.md new file mode 100644 index 0000000000..e1ba093f9a --- /dev/null +++ b/dox/dev_guides/building/xcode.md @@ -0,0 +1,71 @@ +Building with Xcode {#dev_guides__building__xcode} +=================== + +This file describes steps to build OCCT libraries from complete source package +on Mac OS X with Xcode. + +If you are building OCCT from bare sources (as in Git repository), or do some +changes affecting CDL files, you need to use WOK to re-generate header files +and build scripts / projects. See file \ref wok "WOK" for instructions. + +Before building OCCT, you need to install required third-party libraries; see +OCCT_Build3rdParty_OSX.pdf for details. + +1. Add paths to the mandatory 3rd-party products (Tcl/Tk and FreeType) + in file custom.sh located in \. For this: + + 1.1. Add paths to the includes in variable "CSF_OPT_INC"; + + 1.2. Add paths to the binary libraries in variable "CSF_OPT_LIB64"; + + All paths should be separated by ":" symbol. + +2. Add paths to the optional 3rd-party libraries (TBB, gl2ps and FreeImage) + in the aforementioned environment variables "CSF_OPT_INC" and + "CSF_OPT_LIB64" from file custom.sh. + + If you want to build OCCT without the optional libraries perform the + following steps: + + 2.1 Disable unnecessary library in custom.sh by setting the corresponding + variable HAVE_ to "false". + + export HAVE_GL2PS=false + + 2.2 Remove this library from Project navigator in Xcode for each project that + uses it: choose the required project, right click on the unnecessary + library and select "Delete" button. + +3. Open Terminal application. + +4. Enter \: + + cd \ + +5. To start Xcode, run the command /xcode.sh + +6. To build a certain toolkit, select it in "Scheme" drop-down list in Xcode + toolbar, press "Product" in the menu and click "Build" button. + + To build the entire OCCT, create a new empty project (select "File -> + New -> Project -> "Empty project" in the menu. Input the project name, + e.g. "OCCT", click "Next" and "Create" buttons). Drag and drop the "OCCT" + folder in the created "OCCT" project in the Project navigator. Select + "File -> New -> Target -> Aggregate" in the menu. Enter the project name + (e.g. "OCCT") and click "Finish". The "Build Phases" tab will open. + Click "+" button to add the necessary toolkits to the target project. + It is possible to select all toolkits by pressing "Command+A" combination. + +To start DRAWEXE, which has been built with Xcode on Mac OS X, perform the following steps: + +1. Open Terminal application + +2. Enter \: + + cd \ + +3. Run script + + ./draw_cbp.sh xcd [d] + + Option "d" is used if OCCT has been built in Debug mode. diff --git a/dox/dev_guides/cdl/cdl.md b/dox/dev_guides/cdl/cdl.md new file mode 100644 index 0000000000..bde49759c6 --- /dev/null +++ b/dox/dev_guides/cdl/cdl.md @@ -0,0 +1,1876 @@ + Component Definition Language (CDL) {#dev_guides__cdl} +============================== + +@section occt_1819379591_354121062 CDL and Application Architecture + +CDL is the component definition language of the Open CASCADE Technology (**OCCT**) programming platform. Some components, which CDL allows you to create, are specific to OCCT application architecture. These and other components, which you can define using CDL include the following: + + * Class (including enumeration, exception) + * Package + * Schema + * Executable + * Client. +A** class** is the fundamental software component in object-oriented development. Because of a very large number of resources used in large-scale applications, the **class **itself is too small to be used as a basic management unit. + +So, while the class is the basic data component defined in CDL, this language also provides a way to group classes, **enumerations**, and **exceptions **together – the **package**. A package groups together a number of classes, which have semantic links. For example, a geometry package would contain Point, Line, and Circle classes. A package can also contain enumerations, exceptions, and package methods. In practice, a class name is prefixed with the name of its package e.g. Geom_Circle. + +Using the services described in the **packages**, you can construct an **executable**. You can also group together services provided by **packages**. + +To save data in a file, you need to define persistent classes. Then, you group these classes in a schema, which provides the necessary read/write tools. + + + + + + + + + +
+ +
+ + + ![](/devs_guide/cdl/images/cdl_image003.jpg) +
+Figure 1. Building an Open CASCADE Technology application +@section occt_1819379591_986437237 2. Introduction to CDL +@subsection occt_1819379591_98643723721 Purposes of the Language +You can use CDL to **define data **in the Open CASCADE Technology environment. CDL allows you to define various kinds of data types supporting the application architecture and development methodology, which you envision. CDL is neither an analysis formalism (e.g. Booch methodology) nor a data manipulation language (e.g. C++). + +You use CDL in the **design phase **of a development process to define a set of software components which best model the concepts stated in the application specification. + + + + + + + + + +
+ +
+ + + ![](/devs_guide/cdl/images/cdl_image004.jpg) +
+ +Figure 2. The Development Process + +From a structural point of view, CDL is an object-oriented language. It is centered on the notion of the **class **- a data type, which represents an elementary concept. CDL offers various means of organizing classes, mostly under the fundamental form of **packages**. A package contains a set of classes, which share some semantic relationship. This greatly simplifies your task of managing individual classes when confronted with a very large number of them. + +Once you have defined the classes and packages using CDL, you can implement their **methods **- i.e., their functionality - in one of the data manipulation languages supported by the OCCT environment (currently C++). + +Even though you can describe classes directly in C++ and save them as header files (.hxx), to do so would forfeit all the advantages of using CDL. These are: + + * Precise, complete, and easy-to-read description of the software components. + * Creation of a link with the database; object persistence forms part of the predefined environment of the language. + * Multi-language access to the services of an application engine – a specific architectural form created using the CDL tools, which serves as the motor of an application. +@subsection occt_1819379591_98643723722 Overview of CDL + +CDL is an object-oriented language. In other words, it structures a system around data types rather than around the actions carried out on them. In this context, an **object **is an **instance **of a data type, and its definition determines how you can use it. Each data type is implemented by one or more classes, which make up the basic elements of the system. +@subsubsection occt_1819379591_986437237221 Classes + +A class is an implementation of a **data type**. It defines its **behavior **and its **representation**. + +The behavior of a class is its programming interface - the services offered by its **methods**. The representation of a class is its data structure - the **fields**,** **which store its data. + +Every object is an **instance **of its class. For example, the object *p *of the data type *Point *is an instance of the class Point. + +The class Point could be defined as in the example below: + +@code +class Point from GeomPack +@endcode +@code + ---Purpose: represents a point in 3D space. +@endcode +@code + is +@endcode +@code + Create returns Point; +@endcode +@code +fields +@endcode +@code + x, y, z : Real; +@endcode +@code +end Point; +@endcode + +The definition of this class comprises two sections: + + * one starting with the keywords **is** + * one starting with the keyword **fields**. + +The first section contains a list of methods available to the clients of the class. The second section defines the way in which instances are represented. Once this class has been compiled you could **instantiate **its data type in a C++ test program as in the example below: + + + +@code +GeomPack_Point p; +@endcode +@subsubsection occt_1819379591_986437237222 Categories of Types + +You declare the variables of a **data manipulation language **as being of certain data types. These fall into two categories: + + * Data types manipulated by handle (or reference) + * Data types manipulated by value + + + + + + + + +
+ +
+ + + ![](/devs_guide/cdl/images/cdl_image005.jpg) +
+ +Figure 3. Manipulation of data types + + +As seen above, you implement data types using classes. However, classes not only define their data representation and methods available for their instances, but they also define how the instances will be manipulated: + * A data type manipulated by value contains the instance itself. + * A data type manipulated by handle contains a reference to the instance. + +The most obvious examples of data types manipulated by value are the predefined **primitive types**: Boolean, Character, Integer, Real ... + +A variable of a data type manipulated by handle, which is not attached to an object, is said to be **null**. To reference an object, you need to instantiate the class with one of its constructors. This is done in C++ as in the following syntax: + + + +@subsubsection occt_1819379591_986437237223 Persistence + +An object is called **persistent **if it can be permanently stored. In other words, you can use the object again at a later date, both in the application, which created it, and in another application. + +In order to make an object persistent, you need to declare it in CDL as inheriting from the **Persistent** class, or to have one of its parent classes inheriting from the **Persistent **class. + +Note that the classes inheriting from the Persistent class are handled by reference. + +**Example** + +In this example, building the application, you add the Watch class to the corresponding schema of data types. +If, running the application, you instantiate an object of the Watch class, you have the possibility of storing it in a file. +You cannot store objects instantiated from classes, which inherit from the **Storable** class. However, you can store them as fields of an object, which inherits from Persistent. + +Note that the objects inheriting from Storable are handled by value. +**Example** + +If +class WatchSpring inherits Storable +//then this could be stored as a field of a Watch +//object: +class Watch inherits Persistent +is...... +fields +name : ConstructorName; +powersource : WatchSpring; +end; + + +@subsubsection occt_1819379591_986437237224 Packages + +In large-scale long-term development the task of marshalling potentially thousands of classes is likely to quickly prove unmanageable. CDL introduces the notion of **package **of classes containing a set of classes, which have some semantic or syntactic relationship. For example, all classes representing a particular set of electronic components might make up a package called Diode. + +As the package name prefixes the class name when implementing such class (in C++ for example), classes belonging to different packages can have the same name. For example, two packages, one dealing with finance and the other dealing with aircraft maneuvers, might both contain a class called Bank, without any possibility of confusion. +**Example** + +Finance_Bank +Attitude_Bank + + + +@subsubsection occt_1819379591_986437237225 Inheritance + +The purpose of inheritance is to reduce development workload. The inheritance mechanisms allow you to declare a new class as already containing the characteristics of an existing class. This new class can then be rapidly specialized for a task at hand. This eliminates the necessity of developing each component “from scratch”. + +For example, having already developed a class BankAccount, you can quickly specialize new classes - SavingsAccount, LongTermDepositAccount, MoneyMarketAccount, RevolvingCreditAccount, etc.. + +As a consequence, when two or more classes inherit from a parent (or ancestor) class, all these classes surely inherit the behavior of their parent (or ancestor). For example, if the parent class BankAccount contains the method Print that tells it to print itself out, then all its descendent classes offer the same service. + +One way of ensuring the use of inheritance is to declare classes at the top of a hierarchy as being **deferred**. In such classes, the inherited methods are not implemented. This forces you to create a new class used to redefine the methods. In this way, you guarantee a certain minimum common behavior among descendent classes. +**Example** + +deferred class BankAccount inherits Persistent +is +....... +fields +name : AccountHolderName; +balance : CreditBalance; +end; + + +@subsubsection occt_1819379591_986437237226 Genericity + +You will often wish to model a certain type of behavior as a class. For example, you will need a list modeled as a class. + +In order to be able to list different objects, the class **List **must be able to accept different data types as parameters. This is where genericity comes in: you first declare a list declared as the generic class **List**, willing to accept any data type (or only a particular set of acceptable data types). Then, when you want to make a list of a certain type of object, you instantiate the class **List **with the appropriate data type. +**Example** + +generic class NewList (Item) +inherits OldList +is +..... +end ; + +Items may be of any type, an Integer or a Real for example. + +When defining the package, add the following line: +**Example** + +class NewListOfInteger instantiates +NewList (Integer); + + +@subsubsection occt_1819379591_986437237227 Exceptions + +The behavior of any object is implemented by methods, which you define in its class declaration. The definition of these methods includes not only their signature (their programming interface) but also their domain of validity. + +In CDL, this domain is expressed by **exceptions**. Exceptions are raised under various error conditions. This mechanism is a safeguard of software quality. +@subsubsection occt_1819379591_986437237228 Completeness + +You use CDL to define data types. Such definitions are not considered complete unless they contain the required amount of structured commentary. + +The compiler does not enforce this required degree of completeness, so it is the responsibility of the developer to ensure that all CDL codes are properly annotated. + +Completeness is regarded as an essential component of long-term viability of a software component. + + +@subsection occt_1819379591_98643723723 Lexical Conventions +@subsubsection occt_1819379591_986437237231 Syntax notation + +In this manual, CDL declarations are described using a simple variant of the Backus-Naur formalism. Note the following: + + * Italicized words, which may also be hyphenated, denote syntactical categories, for example: + +*declaration-of-a-non-generic-class* + + * Keywords appear in bold type: + +**class** + + * Brackets enclose optional elements: + +identifier [**from **package-name] + + * Curly braces enclose repeated elements. The element may appear zero or many times: + +integer ::= digit{digit} + + * Vertical bars separate alternatives: + +passing-method ::= [**in**] | **out **| **in out** + + * Two apostrophes enclose a character or a string of characters, which must appear: + +exponent ::= ’E’[’+’]integer | ’E-’ integer + +NOTE +So as to introduce ideas progressively, the examples presented in this manual may be incomplete, and thus not compilable by the CDL compiler. + + +@subsubsection occt_1819379591_986437237232 Lexical elements + +A CDL source is composed of text from one or more compiled units. The text of each compiled unit is a string of separate lexical elements: **identifiers**, **keywords**, **constants**, and **separators**. The separators (blank spaces, end of line, format characters) are ignored by the CDL compiler, but these are often necessary for separating identifiers, keywords, and constants. + + +@subsubsection occt_1819379591_986437237233 Comments + +With CDL, you cannot use the expression of all useful information about a development unit. In particular, certain information is more easily expressed in natural language. You can add such information to the CDL description of a data type. + +Rubrics and free comments are to be differentiated: + +**Free comments **are preceded by the characters “--” (two hyphens), and they terminate at the end of the line in which they appear. +**Example** + +--This is a comment + +Unlike rubrics, free comments can appear before or after any lexical element. The first written character of the comment itself *must not *be a hyphen. If a hyphen is necessary make sure it is preceded by a blank. +**Example** + +-- -List item + +**Rubrics **are various types of comments attached to CDL components. A rubric is a comment made up of three hyphens, name of the rubric (without any intermediary space) and then a colon and a space. It is terminated by the beginning of the following rubric, or by the end of the commentary. +**Example** + +---Purpose:This is an example of a +--rubric composed of a +--comment which extends to +--four lines. + +The different categories of rubrics and the form of their content do not depend on the Component Description Language, but on the tool for which it is intended. + +The use of commentary is generally governed by the internal programming standards of an enterprise. You are encouraged to use various well-defined rubrics, such as Purpose, Warning, Example, References, Keywords, etc. + +These rubrics can be attached to: + + * Packages + * Classes + * Methods + * Schemas + * Executables + * Clients + +@subsubsection occt_1819379591_986437237234 Identifiers + +An identifier is an arbitrary chain of characters, either letters or digits, but it must begin with a letter. + +The underscore “_” is considered to be a letter as long as it doesn’t appear at the beginning or the end of an identifier. +Capital and small letters are not equivalent (i.e. AB, Ab, aB, ab are four different identifiers). + + +@subsubsection occt_1819379591_986437237235 Keywords + +The following is a list of keywords. + +alias                      any                   as                     asynchronous +class                     client                deferred            end +enumeration           exception          executable        external +fields                     friends              from                 generic +immutable              imported           inherits              instantiates +is                          library               like                   me +mutable                 myclass            out                   package +pointer                   primitive            private              protected +raises                    redefined          returns              schema +static                     to                     uses                 virtual + +In a CDL file, the following characters are used as punctuation: +; : , = ( ) [ ] ‘ “ + +@subsubsection occt_1819379591_986437237236 Constants + +There are three categories of constants: + + * Numeric + * Literal + * Named + +***Numeric Constants*** + +There are two types of numeric constants: integer and real. +An **integer **constant consists of a string of digits, which may or may not be preceded by a sign. Integer constants express whole numbers. +**Examples** + +1995         0           -273         +78 + +A **real **constant may or may not be preceded by a sign, and consists of an integral part followed by a decimal point and a fractional part (either one or both parts may be null, but both parts must always be present). It may also be followed by the letter E to indicate that the following figures represent the exponent (also optionally signed). +**Examples** + +5.0        0.0          -0.8E+3          5.67E-12 + +***Literal Constants*** + +Literal constants include individual characters and strings of characters. + +An **individual character **constant is a single printable character enclosed by two apostrophes. (See the definition of the class Character in the Standard Package). +**Examples** + + ‘B’      ‘y’      ‘&’      ‘*’      ‘’’ ‘‘ + +A **string **constant is composed of printable characters enclosed by quotation marks. +**Examples** + +’’G’’     ’’jjjj’’     ’’This is a character string, isn’t it?’’ + +The **quotation mark **can itself appear within a character string as long as it is preceded by a backslash. +**Examples** + +’’This film was originally called \’’Gone with the Tide\’’.’’ + +***Named Constants*** + +Named constants are sub-divided into two categories: Booleans and enumerations. + +**Booleans **can be of two types: True or False. + +An **enumeration **constant is an identifier, which appears in the description of an enumeration. + +@section occt_1819379591_1718435309 3. Software Components + + + +@subsection occt_1819379591_171843530931 Predefined Resources +@subsubsection occt_1819379591_1718435309311 Primitive types + +Primitive types are predefined in the language and they are **manipulated by value**. + +Four of these primitives are known to the schema of the database because they inherit from the class **Storable**. In other words, they can be used in the implementation of persistent objects, either when contained in entities declared within the methods of the object, or when they form part of the internal representation of the object. + +The primitives inheriting from Storable are the following: + +**Boolean                **Is used to represent logical data. It has only two values: +*True *and *False*. +**Byte                      **8-bit number. +**Character              **Designates any ASCII character. +**ExtCharacter         **Is an extended character. +**Integer                  **Is an integer number. +**Real                                  **Denotes a real number (i.e. one with a whole and a fractional part, either of which may be null). +**ShortReal              **Real with a smaller choice of values and memory size. + +There are also non-storable primitives. They are: + +**CString                 **Is used for literal constants. +**ExtString              **Is an extended string. +**Address                **Represents a byte address of undetermined size. + +The services offered by each of these types are described in the Standard Package. + + +@subsubsection occt_1819379591_1718435309312 Manipulating types by reference (by handle) + +Two types are manipulated by handle: + + * Types defined using classes inheriting from the **Persistent **class are storable in a file. + + * Types defined using classes inheriting from the **Transient **class. +These types are not storable as such in a file. + +![](/devs_guide/cdl/images/cdl_image006.jpg) + +Figure 4. Manipulation of a data type by reference + + +@subsubsection occt_1819379591_1718435309313 Manipulating types by value + +Types, which are manipulated by value, behave in a more direct fashion than those manipulated by handle. As a consequence, they can be expected to perform operations faster, but they cannot be stored independently in a file. + +You can store types known to the schema (i.e. either primitives or inheriting from Storable) and manipulated by value inside a persistent object as part of the representation. This is the only way for you to store objects “manipulated by value” in a file. + + + + + + + + + + +
+ +
+ + + ![](/devs_guide/cdl/images/cdl_image007.jpg) +
+Figure 5. Manipulation of a data type by value +Three types are manipulated by value: + + * Primitive types + * Enumerated types + * Types defined by classes not inheriting from Persistent or Transient, whether directly or not + +@subsubsection occt_1819379591_1718435309314 Summary of properties + +**Figure 6. Summary of the relationship for the various data** +**types between how they are handled and their storability.** + + +@subsection occt_1819379591_171843530932 Classes + +@subsubsection occt_1819379591_1718435309321 Class declaration + +The class is the main system for creating data types under CDL. By analyzing any CDL-based software, you find that classes are the modular units that make up packages. When you describe a new class, you introduce a new data type. + +Whatever the category of the described type (manipulated by value, Storable or not, manipulated by handle, Persistent or not) the structure of the class definition remains the same. The syntax below illustrates it: +**Example** + +-- declaration-of-a-simple-class ::= +class class-name from package-name +[uses data-type { ’,’ data-type } ] +[raises exception-name { ’,’ exception-name} ] +is class-definition +end [ class-name ] ’;’ +data-type ::= enumeration-name | class-name | +exception-name | primitive-type +package-name ::= identifier +class-name ::= identifier +class-definition ::= +[{member-method}] +[declaration-of-fields] +[declaration-of-friends] + +Class name becomes a new data type, which you can use inside its own definition. Other types appearing in the definition must either be primitive types, previously declared classes, exceptions, or enumerations. + +Apart from the types defined in the Standard Package, which are **implicitly visible **everywhere, you need to declare the data types after the keyword **uses**. This concerns both the class behavior and its internal representation. + +**Exceptions **are declared after the word **raises**. +**Example** + +class Line from GeomPack +usesPoint, Direction, Transformation +raisesNullDirection, IdenticalPoints +is-- class definition follows here +-- using Point, Direction and +-- Transformation objects,and the +-- NullDirection and Identical- +-- -Points exceptions. +end Line; + +The elements, which make up the definition of a class, are divided into four parts: + + * the behavior + * the invariants + * the internal representation + * the friend methods and friend classes. + + + + + + + + +
+ +
+ + + ![](/devs_guide/cdl/images/cdl_image009.jpg) +
+**Figure 7. Contents of a class** +*** a deferred class does not have to contain a constructor** + + +@subsubsection occt_1819379591_1718435309322 Categories of classes + +Classes fall into three categories: + + * Ordinary classes + * Deferred classes + * Generic classes + +

Deferred classes

+ +The principal characteristic of a **deferred class **is that you cannot instantiate it. Its purpose is to provide you with a given behavior shared by a hierarchy of classes and dependent on the implementation of the descendents. This allows you to guarantee a certain base of inherited behavior common to all classes based on a particular deferred class. Deferred classes are declared as in the following syntax: +**Example** + +-- declaration-of-a-deferred-class ::= +deferred class class-name +[inherits class-name {’,’ class-name}] +[uses data-type {’,’ data-type}] +[raises exception-name {’,’ exception-name}] +is class-definition +end [class-name]’;’ + + +

Generic classes

+ +The principal characteristic of a **generic class **is that it offers you a set of functional behavior allowing you to manipulate other data types. To instantiate a generic class you need to pass a data type in argument. Generic classes are declared as in the following syntax: +**Example** + +-- declaration-of-a-generic-class ::= +[deferred] generic class class-name ’(’generic-type +{’,’ generic-type}’)’ +[inheritsclass-name {’,’ class-name}] +[usesdata-type {’,’ data-type}] +[raisesexception-name {’,’ exception-name}] +[{[visibility] declaration-of-a-class}] +is class-definition +end [class-name]’;’ +generic-type ::= identifier as type-constraint +identifier ::= letter{[underscore]alphanumeric} +type-constraint ::= any | class-name [’(’data-type {’,’ +data-type}’)’] + + + +@subsection occt_1819379591_171843530933 Packages + +@subsubsection occt_1819379591_1718435309331 Package declaration + + **Packages** are used to group   classes, which have some logical coherence. For example, the Standard Package groups together all the predefined resources of the language. In its simplest form, a package contains the declaration of all data types, which it introduces. You may also use a package to offer public methods and hide its internal classes by declaring them private. +** ** +**Example** + +-- package-declaration ::= +**package **package-name +[**uses **package-name {’,’ package-name}] +**is **package-definition +**end **[package-name]’;’ +-- package-name ::= +identifier +-- package-definition ::= +[{type-declaration}] +[{package-method}] +-- type-declaration ::= +[**private**] declaration-of-an-enumeration | +[**private**] declaration-of-a-class | +declaration-of-an-exception +-- package-method ::= +identifier [simple-formal-part][returned-type +-declaration] +[error-declaration] +[***is private***]’;’ + +The data types described in a package *may *include one or more of the following data types: + + * Enumerations + * Object classes + * Exceptions + * Pointers to other object classes. + +Inside a package, two data types *cannot *have the same name. + +You declare data types before using them in the definition of other data types. + +When two classes are **mutually recursive**, one of the two *must *be first declared in an incomplete fashion. + +Grouped behind the keyword **uses **are the names of all the packages containing definitions of classes of which the newly introduced data types are clients. + +The methods you declare in a package do not belong to any particular class. **Package methods ***must *carry a name different from the data types contained in the package. Like any other method, they can be overloaded. With the exception of the keyword **me **and the visibility (a package method can *only *be either public or private) package methods are described in the same way as **instance methods**. + +![](/devs_guide/cdl/images/cdl_image010.jpg) +Figure 8. Contents of a package + +The example of the package below includes some of the basic data structures: +**Example** + +package Collection +uses +Standard +is +exception NoSuchObject inherits Failure; +exception NoMoreObject inherits Failure; +generic class SingleList; +generic class Set; +end Collection; + +Note that the class Set is declared after the declarations of the NoSuchObject and NoMoreObject exceptions and the SingleList class of which Set is a client. In the same way, the classes Failure, Persistent, and the exception NoSuchObject are defined before they are used. They are defined in the Standard package, which appears after the keyword **uses**. + +@subsubsection occt_1819379591_1718435309332 Name space + +The **name space **or **scope **of a class extends from the beginning of its declaration up to the end of the package in which it appears. + +Sometimes, two classes, which come from separate packages, are both visible to a third package and carry the same name. For example, there might be two different classes both called “Window” in a screen generator package and in an architectural package. As a client of a data type, you can find yourself in the position of having to remove the ambiguity over the origin of this type; you do this by means of the keyword **from**. +**Example** + +-- class-name ::= +identifier [**from **package-name] +-- exception-name ::= +identifier [**from **package-name] +-- enumeration-name ::= +identifier [**from **package-name] + +You can use the keyword **from **everywhere the name of a class, exception, or enumeration appears. As a consequence, as a client of the class “Window” you could write wherever necessary: +**Example** + +Window from ScreenGenerator +-- or +Window from ArchitecturalFeatures + +NOTES +***Within the description of a package the keyword *****from**** *must be used when referencing any data type that is not defined in this package.*** + +Here is a further example: +**Example** + +class Line from Geom +uses +Point from Geom2d, +Point from Geom3d +is +-- class definition using +-- Point from AppropriatePackage +-- wherever Point appears +end; + + +@subsubsection occt_1819379591_1718435309333 Declaration of classes + +You cannot describe a package in one single file. You need to describe it in different units and send them separately to the CDL compiler. Each compilation unit can contain the declaration of a class or of a package. When you describe a class in a unit different than that, which describes its package, you need to specify which package the class belongs to. You do this using the keyword **from**. + +If the **from **clause appears in the **uses **clause of the package, it does not need to be repeated elsewhere. + +The following example takes the package “Collection” which was presented above, but this time it is divided into three compilation units. +**Example** + +-- First compilation unit, the package “Collection” : +package Collection +uses +Standard +is +exception NoMoreObject inherits Failure from Standard; +exception NoSuchObject inherits Failure from Standard; +generic class SingleList; +generic class Set, Node, Iterator; +end Collection; +-- Second compilation unit, the class “SingleList” : +generic class SingleList from Collection (Item as +Storable) +inherits +Persistent from Standard +raises +NoSuchObject from Collection +is +-- definition of the SingleList class +end SingleList; +-- Third compilation unit, the class “Set” : +generic class Set from Collection (Item as Storable) +  inherits +Persistent from Standard; +raises +NoSuchObject from Collection, +NoMoreObject from Collection +private class Node instantiates SingleList +from Collection (Item); +-- etc.... + end Set; + + +NOTE +It is not explicitly stated that the “Node” class belongs to the “Collection” package. In fact any nested class necessarily belongs to the package of the class, which encompasses it. + +Note that a package can hide certain classes (just as it can hide methods) by declaring them **private**. To make a class private, you prefix its description with the keyword **private**. In the example of the “Collection” package, the “SingleList” class serves only to implement the “Set” class. It is recommended to make it private. You write this as in the following syntax: +**Example** + +package Collection +uses +Standard +is +generic class Set, Node, Iterator; +private generic class SingleList; +exception NoMoreObject inherits Failure from Standard; +end Collection; + + + + +@subsection occt_1819379591_171843530934 Other Data Types + +These are: + + * Enumerations + * Imports + * Aliases + * Exceptions + * Pointers + +@subsubsection occt_1819379591_1718435309341 Enumerations + +The **enumerated types **are the second type, which is manipulated by value. Unlike the primitive types they are extensible because they are defined by the user under the form of enumerations. An enumeration is an ordered sequence of named whole constant values called enumeration constants. +**Example** + +declaration-of-an-enumeration ::= +**numeration **enumeration-name +**is **identifier {’,’ identifier} +[**end **[enumeration-name]]’;’ +enumeration-name ::= identifier + +The declaration of an enumeration creates an enumerated type. An object of this type can successively take the value of any one of the constants cited in the list. +**Example** + +enumeration MagnitudeSign is Negative, Null, Positive; + + +Inside a package, two enumeration constants cannot have the same name, even if they belong to different enumerated types. +**Example** + +enumeration Cars is +Honda, +Ford, +Volkswagen, +Renault +end; +enumeration AmericanPresidents is +Nixon, +Reagan, +Ford, -- Error: ‘Ford’ already defined +Carter +end; + + +@subsubsection occt_1819379591_1718435309342 Imports + +An **imported type **is one of which which has not been defined in CDL. It is up to the supplier of this data type to ensure compatibility with the CDL language by providing services which allow CDL to recognize the imported data type. + +The CDL syntax for declaring an imported type is: + +declaration-of-an-imported-type::= +[**private**] **imported **typename ; +**Example** + +-- You can define an imported type as follows: +-- In the MyPack.cdl file, you declare the imported +type: +-- package MyPack +.... +imported MyImport; +.... +end Mypack; +-- In the MyPack_MyImport.hxx file, you write the +following +-- C++ code: +#ifndef _MyPack_MyImport_HeaderFile +#define _MyPack_MyImport_HeaderFile +#include Standard_Type.hxx +typedef unsigned long MyPack_MyImport; +extern const Handle(Standard_Type)& TYPE +(MyPack_MyImport); +-- In the MyPack_MyImport.cxx file, you write the +following +-- C++ code: +#ifndef _MyPack_MyImport_HeaderFile +#include MyPack_MyImport.hxx +#endif +const Handle(Standard_Type)& TYPE (MyPack_MyImport) + +{ +static Handle(Standard_Type) _aType = +new Standard_Type (“MyPack_MyImport”,sizeof +(MyPack_MyImport)) + return _aType; +} + +Then, add the names of these two files (MyPack_MyImport.hxx, MyPack_MyImport.cxx) to a file called FILES in the src subdirectory of the package. If the file does not exist you must create it. + + +@subsubsection occt_1819379591_1718435309343 Aliases + +An **alias **is an extra name for a type, which is already known. It is declared as in the following syntax: + +declaration-of-an-alias::= +[**private**] **alias **type1 **is **type2 [**from **apackage] ; +**Example** + +alias Mass is Real; +---Purpose: +-- Defined as a quantity of matter. +-- Gives rise to the inertial and +-- gravitational properties of a body. +-- It is measured in kilograms. + +Having defined *Mass *as a type of *Real*, you can use either *Mass *or *Real *to type an argument when defining a method. + + +@subsubsection occt_1819379591_1718435309344 Exceptions + +In the model recommended by CDL, the principal characteristic of errors is that they are treated in a different place from the place where they appear. In other words, the methods recovering and those raising a given exception are written independently from each other. + +Subsequently this poses the problem of communication between the two programs. The principle adopted consists in viewing the exception as both a class and an object. The exception class (by means of one of its instances) is used to take control of an exception, which has been raised. + +Consequently, error conditions are defined by means of **classes of exceptions**. Exception classes are arranged hierarchically so as to be able to recover them in groups. They are all descendents of a single root class called “Failure”, and it is at the level of this class that the behavior linked to the raising of exceptions is implemented. + +declaration-of-an-exception ::= +**exception **exception-name **inherits **exception-name + +All exceptions share identical behavior, that of the class “Failure”. Here are some examples of exception classes: +exception NumericError inherits Failure; +exception Overflow inherits NumericError; +exception Underflow inherits NumericError; + +The use of exceptions as a means to interrupt the normal execution of one program and then take control of another one depends on the programming language used to implement the methods. See the following chapter “Defining the Software Components” on page 32. + + +@subsection occt_1819379591_171843530935 Schemas + +The purpose of a **schema **is to list persistent data types, which will be stored in files by the application. A schema groups together persistent packages. A persistent package is one, which contains at least one persistent class. + +declaration-of-a-schema ::= +**schema **SchemaName +is +{**package **PackageName;} +{**class **ClassName;} +**end**; +**Example** + +schema Bicycle +---Purpose: Defines the Bicycle schema. +is +package FrameComponents; +package WheelComponents; +end; + +***NOTE*** +Note that it is unnecessary to specify all the dependencies of the packages. It is sufficient to specify the highest level ones. The others on which they depend are automatically supplied. +@subsection occt_1819379591_171843530936 Executables + +The purpose of an **executable **is to make an executable program without a front-end. It can be used to test more than one package at a time. An executable is written in a .cdl file as a set of packages. +**Example** + +definition-of-an-executable ::= +executable ExecutableName +is +{ +executable ExecutablePart +[uses [Identifier as external] +[{’,’ Identifier as external}] +[UnitName as library] +[{’,’ UnitName as library}] +is +{FileName [as C++|c|fortran|object];} +end; +} +end; +**Example** + +executable MyExecUnit +---Purpose: +-- Describes the executable MyExecUnit +is +executable myexec +-- the binary file +uses +Tcl_Lib as external +is +myexec; +-- the C++ file +end; +-- several binaries can be specified in one .cdl file. +executable myex2 +is +myex2; +end; +end; + +@section occt_1819379591_1972310108 4. Defining the Software Components + +@subsection occt_1819379591_197231010841 Behavior + +The behavior of an object class is defined by a list of **methods, **which are either **functions **or **procedures**. Functions return an object, whereas procedures only communicate by passing arguments. In both cases, when the transmitted object is an instance manipulated by a handle, its identifier is passed. There are three categories of methods: + +**Object constructor            **Creates an instance of the described class. A class will have one or more object constructors with various arguments or none. + +**Instance method               **Operates on the instance which owns it. + +**Class method                    **Does not work on individual instances, only on the class                                                     itself. + +@subsubsection occt_1819379591_1972310108411 Object Constructors + +A constructor is a function, which allows the **creation of instances **of the class it describes. +**Example** + +constructor-declaration ::= +Create [ simple-formal-part ] declaration-ofconstructed- +type +[ exception-declarations ] +simple-formal-part ::= +’(’ initialization-parameter {’;’ initialization parameter}’)’ +initialization-parameter ::= +identifier {’,’ identifier} ’:’ parameter-access datatype +[ ’=’ initial-value ] +parameter-access ::= +**mutable **| [ **immutable **] +initial_value ::= +numeric-constant | literal-constant | named-constant +declaration-of-constructed-type ::= +**returns **[ **mutable **] class-name + +The name of the constructors is fixed: “Create”. The object returned by a constructor  is always of the type of the described class. If that type is manipulated by a handle, you *must *declare it as **mutable**, in which case the content of the instance it references is accessible for further modification. + +For example, the constructor of the class “Point” +**Example** + +Create (X, Y, Z : Real) +returns mutable Point; + +With the exception of the types predefined by the language, all types of initialization parameters *must *appear in the **uses **clause of the class of which the constructor is a member. + +When an initialization parameter is of a type which is manipulated by a handle, an access right *must *be associated with it so as to express if the internal representation of the referenced object is modifiable (**mutable**) or not (**immutable**). The default option is **immutable**. For example, the constructor of the persistent class “Line”. +**Example** + +Create (P : mutable Point; D : mutable Direction) +returns mutable Line; + +In the above example “P” and “D” must be mutable because the constructor stores them in the internal representation of the created line, which is mutable itself. An alternative would be to accept immutable initialization parameters and then copy them into the constructor in a mutable form. + +The parameters of a native type can have a default value: this is expressed by assigning a constant of the same type to the parameter concerned. Parameters, which have a default value, may not be present when the call to the constructor is made, in which case they take the value specified in the declaration. For this reason, they must all be grouped at the end of the list. For example, the constructor of the persistent class “Vector”. +**Example** + +Create (D : mutable Direction; M : Real = 1.0) +returns mutable Vector; + +A class can have many constructors (in this case, you say they are **overloaded**) provided that they differ in their syntax and that the presence of parameters having default values does not create ambiguities. + +The restrictions on their use are expressed by a list of **exceptions **against which each constructor is protected. + +Each class must have at least one constructor to be able to create objects of its type. +@subsubsection occt_1819379591_1972310108412 Instance Methods + +An instance method is a function or procedure, which applies to any instance of the class, which describes it. +**Example** + +declaration-of-an-instance-method ::= +identifier formal-part-of-instance-method +[ declaration-of-returned-type ] +[ exception-declaration ] +formal-part-of-instance-method ::= + ’(’ me [’:’ passing-mode parameter-access ] {’;’ +parameter}’)’ +parameter ::= +identifier {’,’ identifier} ’:’ passing-mode +parameter-access +data-type [ ’=’ initial-value ] +passing-mode ::= +[ in ] | out | in out +parameter-access ::= +mutable | [immutable] +declaration-of-returned-type ::= +returns return-access data-type +return-access ::= +mutable |[ immutable ]| any + +The name **me **denotes the object to which the method is applied: you call this the “principal object” of the method. The passing mode expresses whether the direct content of the principal object or a parameter is either: + + * read + * created and returned + * read then updated and returned by the method. + +Remember that the direct content of an argument of a type which is manipulated by value contains the internal representation of the object itself. Thus, when the argument is of this type, **out **and **in out **mean that the content of the object will undergo a modification. When the method is a function (as is the case for constructors), all the arguments must be **in **(read). This is the default mode. + +In case of an argument of a type manipulated by a handle, the direct content being an object identifier, the passing mode addresses itself to the handle, and no longer to the internal representation of the object, the modification of which is controlled by the access right. An argument of this type declared **mutable **may see its internal representation modified. If declared **immutable**, it is protected. When a parameter is both **in out **and **mutable**, the identifiers passed and returned denote two distinct modifiable objects. + +When the returned object is manipulated by a handle it can be declared modifiable or not, or indeterminate (**any**). To return an object with an indeterminate access right means that the method transmits the identifier without changing its state and that the method has no right to alter the access right. This functionality is particularly useful in the case of collections; temporarily storing an object in a structure and unable to modify its state. + +With the exception of the types predefined by the language, all types of parameters and returned objects, whether manipulated by a handle or by value, *must *appear in the **uses **clause of the class of which the method is a member. +As is the case for constructors, some parameters can have a default value, provided that they are of primitive or enumerated type. They are passed in the **in **mode, and they are found at the end of the list of arguments. + +Overloading of instance methods and use of exceptions and post-conditions is allowed and respects the same rules than constructors. + +Note the overloading of “Coord” in the following example of instance methods associated with the persistent class “Point”: +**Example** + +Coord (me; X, Y, Z : out Real); +---Purpose: returns the coordinates of me + +Coord (me; i : Integer) returns Real; +---Purpose: returns the abscissa (i=1), the +-- ordinate (i=2) or the value (i=3) of me + +SetCoord (me : mutable; X, Y, Z : Real); +---Purpose: modifies the coordinates of me + +Distance (me; P : Point) returns Real +---Purpose: returns the distance to a point + +In all these cases, **me **is implicitly an object of type Point. Only “SetCoord” is able to modify the internal representation of a point. + +@subsubsection occt_1819379591_1972310108413 Class Methods + +A class method is a function or procedure relative to the class it describes, but does not apply to a particular instance of the class. + +declaration-of-a-class-method ::= +identifier formal-part-of-class-method +[ declaration-of-returned-type ] +[ exception-declaration ] +formal-part-of-class-method ::= +’(’ **myclass **{’;’ parameter}’)’ + +The first parameter **myclass **indicates that the method does not apply to a previously created instance, but to the class itself. The rest of the syntax is identical to that of the instance methods. In particular, access rights (**mutable**, **immutable**, **any**) and the argument passing mode (**in**, **out**, **in out**) must remain unchanged. With the exception of the types predefined by the language, all types of parameters must appear in the **uses **clause of the class of which the method is a member. Overloading of class methods and the use of exceptions and post-conditions is allowed, and it follows the same rules as for constructors and instance methods. +Examples of class methods associated with the class “Real”: +**Example** + +First (myclass) returns Real; +---Purpose: returns lower limit of reals + +Last (myclass) returns Real; +---Purpose: returns upper limit of reals + + +@subsubsection occt_1819379591_1972310108414 Package Methods + +Package methods are methods which are members of a package. They are frequently used for library or application initialization, or for offering an application programming interface to the sources to the package. They are sometimes methods used for development purposes but which are not made available to final end-users of the package. + +package-method ::= +identifier [simple-formal-part][returned-type-declaration] +[exception-declaration] +[**is private**]’;’ + + +@subsubsection occt_1819379591_1972310108415 Sensitivity to Overloading + +When there is more than one method of a class, several methods share the same name but have different syntax, you say the method is overloaded. + +In order that the methods can be considered distinct, they must differ either in the number of parameters, or one of their parameters must be of a different type. In particular, you *cannot *overload a method if you merely modify it as follows: + + * The type of the returned object when the method behaves as a function + * The name or the mode of passing a parameter +(**in**, **out**, or **in out**) + * The mutability of passed objects +(**mutable**, **immutable**, **any**) + * Default value of a parameter. +@subsection occt_1819379591_197231010842 Internal Representation + +Each object contains its own state in a private space in the memory. This state consists of a set of **fields**,** **which include or reference other objects. +**Example** + +declaration-of-the-internal-representation-of-a-class +::= +**fields **field {field} +field ::= +identifier {’,’ identifier} ’:’ data-type [’[’integer +{’,’integer}’]’]’;’ + +A copy of all the defined fields exists locally in each instance of the class. This group of fields will be initialized by the class constructors when the object is instantiated. + +Fields *must not *have the same name as any method of the class in which they appear. When the field type is followed by a list of integer constants between square brackets, the data will take the form of a multi-dimensional array containing objects of this type. + +The following example shows two equivalent ways of describing three fields of the “Real” type: +**Example** + +fields +x, y, z: Real; +coord: Real[3]; + +Depending on their type, Object fields have one of the two forms. When the field is of the “manipulated by handle” type, it corresponds to an identifier. In this case, the contents of the object can be shared by other objects or by a handle in a program. When the field is of a “manipulated by value” type, it contains the value of the object. In this case you say the object is **embedded**. + +@subsection occt_1819379591_197231010843 Exceptions +  +Exceptions describe exceptional situations, which can arise during the execution of a method. With the raising of an exception, the normal course of program execution is interrupted. The actions carried out in response to this situation are called  treatment of exception. + +exception-treatment ::= **raises **exception-name {’,’ +exception-name} + +Each exception name corresponds to a class of exceptions previously defined as being susceptible to being raised by the method under which it appears. Exception classes must all appear in the **raises **clause of the class of which the method is a member. The class of exceptions is analogous to the class of objects described in this manual. + +Take for example the method which returns the x, y, or z coordinate of a point. +**Example** + +Coord (me; i : Integer) returns Real +---Purpose: +-- Returns the abscissa (i=1) +-- the ordinate (i=2) +-- or the value (i=3) +-- of me. +raises OutOfRange; +-- if i is not equal to 1, 2, or 3. + +Instance methods are likely to raise certain exceptions called **systematic exceptions **which do not have to appear. They are: + +**NullObject                         **Raised when the principal object does not exist. + +**ImmutableObject                          **Raised when a method tries to modify an immutable principal object. + +**TypeMismatch                              **Raised if an argument typed by association is of an unsuitable type. + +These exceptions are described in the Standard Package (System Toolkits). + + +@subsection occt_1819379591_197231010844 Inheritance + +@subsubsection occt_1819379591_1972310108441 Overview + +The notion of inheritance comes from a development strategy according to which you begin by modeling data in the most general fashion. Then you specialize it more and more so as to correspond to more and more precise cases. + +For example, to develop a basic geometry, you can first of all consider the group of geometric objects, and then differentiate the points, vectors, and curves. You can specialize the latter into conic sections, and then decompose them into circles, ellipses, and hyperbolae. Then, the class of conics is considered as a sub-class of curves, and a super-class of circles. + +A sub-class has at least the behavior of its super-classes. Thus, a circle could be viewed as a conic, a curve, or even as a geometric object. In each case, the applicable methods belong to the level where you view the class. In this case, you say that the sub-class inherits the behavior from its super-classes. +**Example** + +declaration-of-a-sub-class ::= +**class **class-name +**inherits **class-name +[**uses **data-type {’,’ data-type}] +[**raises **exception-name {’,’ exception-name}] +**is **class-definition +**end **[class-name]’;’ + +A class cannot inherit one of its descendent classes; nor can it inherit a native type. All the classes of a system can be described in a non-cyclic diagram called the **inheritance graph**. + +The definition of a sub-class is identical to that of a simple class. Note that a super-class *must not *appear in the **uses **clause of the sub-class, even if it appears in the definition of the sub-class. The behavior of a sub-class includes as a minimum all  instance methods and protected methods of its super-classes. + +NOTE +Note that constructors and class methods are never inherited. + + +@subsubsection occt_1819379591_1972310108442 Redefining methods + +Certain inherited methods can be redefined. +**Example** + +declaration-of-a-redefined-method ::= +identifier formal-part-of-instance-method [returnedtype- +declaration] +[declaration-of-exceptions] +**  is redefined **[visibility]’;’ + +A redefined method must conform to the syntax described in the super-class where it appears. The exceptions contained in the super-class can be renewed, and others may be added as long as they inherit from an ancestor class. + +The **redefined **attribute can be applied neither to a constructor, nor to a class method, since neither of them can be inherited. If the redefined method is private or protected, the visibility must be exactly repeated in the redefinition. For further details on visibility, refer to “Visibility” on page 48. +**Example** + +SquareDistance (me; P : Point) returns Real +is redefined private; + +With regards to the internal representation, all fields defined in the super-classes are, by default, inherited, but they can also be redefined. + +@subsubsection occt_1819379591_1972310108443 Non-redefinable methods + +Instance methods, which are declared virtual are redefinable in descendent classes, and you can force this redefinition by making a method **deferred**. For more details, see the next section. +**Example** + +declaration-of-a-non-redefinable-method ::= +identifier formal-part-of-instance-method [returnedtype- +declaration] +[declaration-of-exceptions] +** is virtual **[visibility]’;’ + +All methods are static by default. To enable redefinition in all the child classes, add “**is virtual;**“ when declaring the method. + +You must also be able to forbid redefinition. A redefinable method can become non-redefinable if you declare: **is redefined static**. + + +@subsubsection occt_1819379591_1972310108444 Deferred Classes and Methods + +The presence of certain classes in the inheritance graph can be justified purely by their ability to force certain behavior on other classes, in other words, to make other classes provide various services. + +The CDL language allows you to describe a class, which introduces methods without implementing them, so as to force its descendent classes to define them. These are called **deferred classes**; the non-implemented methods are also termed **deferred methods**. +**Example** + +declaration-of-a-deferred-class ::= +**deferred class **class-name + [**inherits **class-name +[**uses **data-type {’,’ data-type}] +[**raises **exception-name {’,’ exception-name}] +**is **class-definition +**end **[class-name]’;’ +declaration-of-a-deferred-method ::= +identifier formal-part-of-instance-method [returnedtype- +declaration] +[declaration-of-exceptions] +**is deferred **[visibility]’;’ + +Only instance methods can be deferred. + +It is sufficient for a class to contain one deferred method for it to be a deferred class. It can contain any number of deferred methods (or none). + +A deferred class may still have an internal representation but one or more **non-** **protected **constructors would be necessary to initialize them. The constructors must be visible in the sub-classes. + +The constructors of a deferred class are called **Initialize **(not **Create**). They are **protected **by default, and do not return any object. You cannot create an object of a deferred class type. +For example, consider the class “Point”, and its declaration as deferred. +**Example** + +deferred class Point inherits Geometry is +Initialize; +---Purpose: Initializes the point. +Coord (me; X, Y, Z : out Real) +---Purpose: Returns the coordinates +is deferred; +SetCoord (me : mutable; X, Y, Z : Real) +---Purpose: Modifies the coordinates +is deferred; +Distance (me; P : Point) returns Real; +---Purpose: Returns the distance from the point P +end Point; + +Notice that the function “Distance” is not deferred. Although this class contains no representation, this method is programmable by calling “Coord”. + +In a sub-class of a deferred class, all deferred methods, which have been inherited, *must *be implemented, then redeclared (the attribute **redefined **is useless for this purpose), unless the sub-class is itself deferred. + +A non-deferred method can be redefined as a deferred one, in which case it will be declared as follows: **is redefined deferred**. + +The notion of deferred class is very useful. The advantage of introducing it, as was previously shown in the deferred class “Point”, is that the corresponding resources will be available even before being implemented. Later, you can add different representations to Point (for example, spherical or Cartesian coordinates) without having to modify client programs. + +Thanks to the possibility of redefining methods, this approach does not have any negative impact on performance: a method implemented at the level of a deferred class can be reprogrammed in one of its sub-classes while taking into account the data representation. +@subsubsection occt_1819379591_1972310108445 Declaration by Association + +At the heart of a class hierarchy, object identifiers are compatible in the ascendant sense. Since the Conic class is descended from the Curve class, an identifier of type Curve can reference an object of type Conic (remember that the behavior of Curve is applicable to Conic). In other words, you can assign a reference to a Conic to an identifier of type Curve, but *not *vice versa. + +For example, once the classes have been compiled you could write a C++ test program in which you instantiate a Conic but reference it with a handle to a Curve: + +**Example** + +Handle(Curve) c = new Conic + +This same rule applies to parameters of methods; that is to say, you can call a method with identifiers corresponding to a sub-type of that specified in its declaration. To illustrate this, you go back to the “Distance” method of the “Point” class: +**Example** + +Distance (me; P : point) returns Real; + +Conforming to the rule of type compatibility, you could make a call to the method “Distance” with reference to an object from a class descended from “Point”. Consequently, if “SphericPoint” is a sub-class of “Point” and therefore inherits this method, it will be possible to calculate the distance between two “SphericPoint”, or between a “SphericPoint” and a “Point”, without having to redefine the method. + +On the other hand, sometimes you may want to force two parameters to be exactly of the same type, and thus not apply the rule of type compatibility. To do this, you need to associate the type of the concerned parameters in the method declaration. +**Example** + +association-typing ::= +**like **associated-parameter +associated-parameter ::= +**me **| identifier + + +NOTE +***Note that identifier is the name of a parameter, which appears*** +***first in the formal part of the declaration of the method.*** + + +You can use this technique, which consists in declaring by association, to declare a method that will exchange the content of two objects, or a method, which copies another object: +**Example** + +Swap (me : mutable; With : mutable like me); +DeepCopy (me) returns mutable like me; + +Make sure *not *to write the Swap method as in the syntax below: + +**Example** + +Swap (me : mutable; With : mutable Point); + +In this case **me **may be a CartesianPoint or a SphericalPoint, while “With” can only be a Point. +@subsubsection occt_1819379591_1972310108446 Redefinition of Fields + +The creation of a hierarchy of classes should be viewed as a means to specialize their behavior, (e.g. a circle is more specialized than a conic section). The more you specialize the object classes, the more it is justified to call into question the inherited fields in order to obtain greater optimization. So, in the description of the internal representation of a sub-class, it is possible not to inherit all of the fields of the super-classes. You then say the fields have been redefined. +**Example** + +redefinition-of-the-representation-of-a-class ::= +**redefined **redefinition-of-a-field {’,’ redefinition-of-a- +field}’,’ +redefinition-of-a-field ::= +[field-name] **from **[**class**] class-name + +Redefinition of fields can *only *be done in classes manipulated by a handle. + +This declaration appears at the beginning of the definition of the internal representation of the sub-class, which breaks the field inheritance. The non-inherited fields are all those which come from the class specified behind the rubric **from**. + + +@subsection occt_1819379591_197231010845 Genericity + +@subsubsection occt_1819379591_1972310108451 Overview + +Inheritance is a powerful mechanism for extending a system, but it does not always allow you to avoid code duplication, particularly in the case where two classes differ only in the type of objects they manipulate (you certainly encounter this phenomenon in all basic structures). In such cases, it is convenient to send arbitrary parameters representing types to a class. Such a class is called a **generic class**. Its parameters are the generic types of the class. + +Generic classes are implemented in two steps. You first declare the generic class to establish the model, and then instantiate this class by giving information about the generic types. + +@subsubsection occt_1819379591_1972310108452 Declaration of a Generic Class + +The syntax is as follows: +**Example** + +declaration-of-a-generic-class ::= +[**deferred**] **generic class **class-name ’(’generic-type +{’,’generic-type}’)’ +[**inherits **class-name +[**uses **data-type {’,’ data-type}] +[**raises **exception-name {’,’ exception-name}] +**is **class-definition +**end **[class-name]’;’ +generic-type ::= +identifier **as **type-constraint +type-constraint ::= +**any **| class-name [’(’data-type {’,’data-type}’)’] + +The names of generic types become new types, which are usable in the definition of a class, both in its behavior (methods) and its representation (fields). The generic type is only visible inside the generic class introducing it. As a result, it is possible to have another generic class using the same generic type within the same package. +When you specify the type constraint under the form of a class name, you impose a minimum set of behavior on the manipulated object. + +This shows that the generic type has as a minimum the services defined in the class. This can be any kind of a previously defined class, including another generic class, in which case you state exactly with what types they are instantiated. + +When the generic type is constrained by the attribute **any**, the generic class is intended to be used for any type at all, and thus corresponds to classes whether manipulated by a handle or by value. + +No class can inherit from a generic class. + +A generic class can be a deferred class. A generic class can also accept a deferred class as its argument. In both these cases any class instantiated from it will also be deferred. The resulting class can then be inherited by another class. + +Below is a partial example of a generic class: a persistent singly linked list. +**Example** + +generic class SingleList (Item as Storable) +inherits Persistent +raises NoSuchObject +is +Create returns mutable SingleList; +    ---Purpose: Creates an empty list +IsEmpty (me) returns Boolean; +    ---Purpose: Returns true if the list me is empty +SwapTail (me : mutable; S : in out mutable +SingleList) +    ---Purpose: Exchanges the tail of list me with S +-- Exception NoSuchObject raised when me is +empty +raises NoSuchObject; +   Value (me) returns Item +   ---Purpose: Returns first element of the list me +-- Exception NoSuchObject raised when me is +empty +raises NoSuchObject; +   Tail (me) returns mutable SingleList +---Purpose: Returns the tail of the list me +-- Exception NoSuchObject raised when me is +empty +raises NoSuchObject; +   fields +Data : Item; +   Next : SingleList; +   end SingleList; + +Even though no object of the type “SingleList” IS created, the class contains a constructor. This class constitutes a model, which will be recopied at instantiation time to create a new class which will generate objects. The constructor will then be required. +**Example** + +generic class Sequence(Item as any, Node as +SingleList(Item)) +inherits Object +. . . +end Sequence + +In the above example, there are two generic types: Item & Node. The first imposes no restriction. The second must at least have available the services of the class SingleList instantiated with the type with which Sequence will itself be instantiated. + +In the **incomplete declaration of a generic class**, the keyword **generic **must appear. +**Example** + +generic class SingleList; +generic class Sequence; +@subsubsection occt_1819379591_1972310108453 Instantiation of a Generic Class + +The syntax is as follows: +**Example** + +instantiation-of-a-generic-class ::= +[**deferred**] **class **class-name +**     instantiates **class-name ’(’data-type {’,’ +data-type}’);’ + +Instantiation is said to be **static**. In other words, it must take place before any use can be made of the type of the instantiated class. Each data type is associated term by term with those declared at the definition of the generic class. These latter ones, when they are not of the type **any**, restrict instantiation to those classes, which have a behavior at least equal to that of the class specified in the type constraint, including constructors. Note that this is not guaranteed by inheritance itself. + +For example, let’s instantiate the class “Sequence” for the type “Point”: +**Example** + +class SingleListOfPoint instantiates SingleList(Point); +class Sequence instantiates +Sequence(Point,SingleListOfPoint); + +The instantiation of a generic deferred class is a deferred class (the **deferred **attribute must be present during instantiation). An instantiated class cannot be declared in an incomplete fashion. + +@subsubsection occt_1819379591_1972310108454 Nested Generic Classes + +It often happens that many classes are linked by a common generic type. This is the case when a base structure provides an iterator, for example, in the class “Graph”. A graph is made up of arcs, which join together the nodes, which reference objects of any type. This type is generic both for the graph and for the node. In this context, it is necessary to make sure that the group of linked generic classes is indeed instantiated for the same type of object. So as to group the instantiation, CDL allows the declaration of certain classes to be nested. +**Example** + +declaration-of-a-generic-class ::= +   [**deferred**] **generic class **class-name ’(’generic- +type{’,’generic-type}’)’ +   [**inherits **class-name {’,’ class-name}] +   [**uses **data-type {’,’ data-type}] +   [**raises **exception-name {’,’ exception-name}] +   [{[visibility] class-declaration}] +**   is **class-definition +**end **[class-name]’;’ +   class-declaration ::= +   incomplete-declaration-of-a-class | +   declaration-of-a-non-generic-class | +  instantiation-of-a-generic-class + +**Nested classes**, even though they are described as non-generic classes, are generic by construction, being inside the class of which they are a part. As a consequence, the generic types introduced by the **encompassing class **can be used in the definition of the nested class. This is true even if the generic type is only used in a nested class. The generic types still* must *appear as an argument of the encompassing class. All other types used by a nested class *must *appear in its **uses **or **raises **clauses, just as if it were an independent class. + +Nested classes are, by default, **public**. In other words, they can be used by the clients of the encompassing class. On the other hand, when one of the nested classes is declared **private **or **protected**, this class *must not *appear in any of the public methods of the other classes. It cannot be used in a protected field because then it could be used in a sub-class, which implies it would not be private. + +The following example shows how to write the Set class with its iterator. +**Example** + +generic class Set (Item as Storable) +inherits Persistent +private class Node instantiates SingleList (Item); +class Iterator +   uses Set, Node +   raises NoSuchObject, NoMoreObject +   is +   Create (S : Set) returns mutable Iterator; +---Purpose: Creates an iterator on the group S +   More (me) returns Boolean; +---Purpose: Returns true if there are still elements +   -- to explore +   Next (me) raises NoMoreObject; +---Purpose: Passes to the following element +   Value (me) returns any Item raises NoSuchObject; +---Purpose: Returns the current element +   fields +   Current : Node; +end Iterator; +is +   Create returns mutable Set; +---Purpose: Creates an empty group +   IsEmpty (me) returns Boolean; +---Purpose: Returns true if the group is empty +   Add (me : mutable; T : Item); +---Purpose: Adds an item to the group me +   Remove (me : mutable; T : item) raises +NoSuchObject; +---Purpose: Removes an item from the group me +   etc. +   fields +   Head : Node; +end Set; + +Note that in their fields, both “Set” and “Iterator” are clients of another class, “Node”. This last can be effectively declared **private **for it only appears in fields which are themselves private. + +The instantiation of a generic class containing nested classes remains unchanged. The same declaration is used to instantiate the encompassing class and the nested classes. These latter will have their name suffixed by the name supplied at instantiation, separated by “Of”. For example, you instantiate the class “Set” described above for the type “Point” as follows: +**Example** + +class SetOfPoint instantiates Set(Point); + +In doing so, you implicitly describe the classes “NodeOfSetOfPoint” and “IteratorOfSetOfPoint”, which are respectively the result of the concatenation of “Node” and “Iterator” with “Of” then “SetOfPoint”. + +Note that in the incomplete declaration of an encompassing class, all the names of the nested classes *must *appear behind that of the encompassing class. + +incomplete-declaration-of-a-generic-class ::= +[**deferred**] **generic **class-name {’,’ class-name}; + +For example, an incomplete declaration of the above class “Set” would be as in the example below: +**Example** + +generic class Set, Node, Iterator; + +Only the encompassing class can be deferred. In the above example only the class “Set” can be deferred. + + + +@subsection occt_1819379591_197231010846 Visibility + +@subsubsection occt_1819379591_1972310108461 Overview + +A field, method, class, or package method is only available for use if it is **visible**. +Each of these components has a default visibility, which can be explicitly modified during class or package declaration. The three possible states of visibility are: + + * Public + * Private + * Protected + +@subsubsection occt_1819379591_1972310108462 Visibility of Fields + +A field is **private**. It can never be public - this would destroy the whole concept of data encapsulation. The attribute **private **is redundant when it is applied to a field. This means that a field is only visible to methods within its own class. +A field can be declared **protected **which means that it becomes visible in subclasses of its own class. Its contents can be modified by methods in subclasses. + +field ::= +identifier {’,’ identifier} ’:’ data-type +[’[’integer{’,’integer}’]’] +[**is protected**]’;’ +Example + +fields +   Phi, Delta, Gamma : AngularMomenta [3] +   is protected ; + + +@subsubsection occt_1819379591_1972310108463 Visibility of Methods + +Methods act on fields. Only methods belonging to a class can act on the fields of the class; this stems from the principle of object encapsulation. Methods can be characterized in three ways: by default, methods are **public**. Methods can be declared **private **or **protected **to restrict their usage. + +**Public methods                            **Are the default and are generally the most common. They describe the behavior of a class or a package, and they are callable by any part of a program. + +**Private methods                            **Exist only for the internal structuring of their class or their package. Private class methods can only be called by methods belonging to the same class. Private package methods can only be called by all methods belonging to the same package and its classes. + +**Protected methods            **Are private methods, which are also callable from the interior of descendent classes. + +If you want to restrict the usage of a method, you associate with it a visibility as follows : + +-- declaration-of-the-visibility ::= +**is **visibility +visibility ::= **private **| **protected** + +The declaration of the visibility of a method appears at the end of its definition, before the final semi-colon. The attribute **private **indicates that the method will only be visible to the behavior of the class of which the method is a member; **protected **will propagate the visibility among the sub-classes of this class. + +For example, add to the class “Line” an internal method allowing the calculation of the perpendicular distance to the power of two, from the line to a point. +**Example** + +SquareDistance (me; P : Point) returns Real +@subsubsection occt_1819379591_1972310108464 Visibility of Classes, Exceptions, & Enumerations + +The visibility of a class is the facility to be able to use this class in the definition of another class. The visibility of a class extends from the beginning of its declaration up to the end of the package in which it appears. You have seen that the keyword **uses **allows extension of this visibility to other packages. + +As was explained in the section on “Name Space”, any ambiguity, which arises from having two classes with the same name coming from different packages, is dealt with by the use of the keyword **from**. + +A class declared **private **is only available within its own package. + +@subsubsection occt_1819379591_1972310108465 Friend Classes & Methods + +In certain cases, methods need to have direct access to the private or protected parts of classes of which they are clients. Such a method is called a **friend **of the class, which is accessed. For example, you declare a method to be a friend when a service can only be obtained via the use of another non-descendent class, or perhaps when this will help to improve performance. + +Classes can also be declared friends of other classes. In this case all the methods of the friend class will have access to the fields and methods of the host class. The right is **not reciprocal**. + +Friend classes or methods are declared inside the class, which reveals its private and protected data or methods to them. This helps in managing the continuing evolution of a class, helping to recognize and to avoid the creation of side effects. +**Example** + +declaration-of-friends ::= +**friends **friend {’,’friend} +   friend ::= +   identifier **from **[**class**] class-name [formal-part] | +**Defining the Software Components 67** +identifier **from **[**package**] package-name [formal-part] | +**   class**] class-name +   formal-part ::= +   simple-formal-part | +   formal-part-of-instance-method | +   formal-part-of-class-method + +The formal part *must *be presented if the method contains one; thus this can be overloaded without necessarily propagating the friend relationship among its homonyms. The keyword **class **allows you to avoid certain ambiguities. For example, it removes any confusion between “method M from class C” and “method M from package P”. + +As an example, take a method, which calculates the perpendicular distance between a line and a point. Suppose this method needs to access the fields of the point. In the class “Point” you would write: +**Example** + +friends Distance from Line (me; P : Point) + +A method can be a friend to many classes. The class to which the method belongs does *not *need to appear in the **uses **clause of other classes of which it is a friend. + + + + + + + + +
+ +
+ + + ![](/devs_guide/cdl/images/cdl_image011.jpg) +
When the methods of a class are all friends of another class, you can establish the friendship at the level of the class. + + + +Figure 9. Visibility of various components +@section occt_1819379591_858765726 Appendix A. Syntax Summary + + + +This summary of the CDL syntax will aid in the comprehension of the language, but does *not *constitute an exact definition thereof. In particular, the grammar described here accepts a super-set of CDL constructors semantically validated. + +(1) capital ::= +’A’ | ’B’ | ’C’ | ’D’ | ’E’ | ’F’ | ’G’ | ’H’ | +’I’ | ’J’ | ’K’ | ’L’ | ’M’ | ’N’ | +’O’ | ’P’ | ’Q’ | ’R’ | ’S’ | ’T’ | ’U’ | ’V’ | +’W’ | ’X’ | ’Y’ | ’Z’ + +(2) non-capital ::= +’a’ | ’b’ | ’c’ | ’d’ | ’e’ | ’f’ | ’g’ | ’h’ | +’i’ | ’j’ | ’k’ | ’l’ | ’m’ | ’n’ | +’o’ | ’p’ | ’q’ | ’r’ | ’s’ | ’t’ | ’u’ | ’v’ | +’w’ | ’x’ | ’y’ | ’z’ + +(3) digit ::= +’0’ | ’1’ | ’2’ | ’3’ | ’4’ | ’5’ | ’6’ | ’7’ | +’8’ | ’9’ + +(4) underscore ::= +’_’ + +(5) special character ::= +’ ’ | ’!’ | ’”’ | ’#’ | ’$’ | ’%’ | ’&’ | ’’’ | +’(’ | ’)’ | ’*’ | ’+’ | ’,’ | ’-’ | +’.’ | ’/’ | ’:’ | ’;’ | ’’ | ’=’ | ’’ | ’?’ | +’@’ | ’[’ | ’\’ | ’]’ | ’^’ | ’‘’ | +’{’ | ’|’ | ’}’ | ’~’ + +(6) printable character::= +capitals | non-capitals | digits | underscore | +special characters + +(7) letter ::= +capital | non-capital + +(8) alphanumeric ::= +letter | digit + +(9) identifier ::= +letter{[underscore]alphanumeric} + +(10) integer ::= +digit{digit} + +(11) exponent ::= +’E’[’+’]integer | ’E-’integer + +(12) numeric-constant ::= +[’+’]integer ’.’ integer[exponent] | ’-’integer +’.’ integer[exponent] + + +(13) literal-constant ::= +’’’printable character’’’ | ’~’{printable +character}’~’ + +(14) package-name ::= +identifier + +(15) enumeration-name ::= +identifier [**from**** **package-name] + +(16) class-name ::= +identifier [**from**** **package-name] + +(17) exception-name ::= +identifier [**from**** **package-name] + +(18) constructor-name ::= +’Create’ | ’Initialize’ + +(19) primitive-type ::= +’Boolean’ | ’Character’ | ’Integer’ | ’Real’ + +(20) data-type ::= +enumeration-name | class-name | exception-name +| primitive-type + +(21) passed-type ::= +data-type | **like me**** **| **like**** **identifier + +(22) passing-mode ::= +[**in**] | **out**** **| **in out** + +(23) parameter-access ::= +**mutable**** **| [**immutable**] + +(23A) return-access ::= +**mutable**** **| [**immutable**]| **any** + +(24) value ::= +numeric-constant | literal-constant | +identifier + +(25) parameter ::= +identifier {’,’ identifier} ’:’ passing-mode +access-right passed-type [’=’ value] + +(26) simple-formal-part ::= +’(’parameter {’;’ parameter}’)’ + +(27) formal-part-of-instance-method ::= +’(’**me**** **[’:’ passing-mode access-right] {’;’ +parameter}’)’ + +(28) formal-part-of-class-method ::= +’(’**myclass**** **{’;’ parameter}’)’ + +(29) visibility ::= +**private**** **| **protected** +(30) redefinition ::= +**static**** **| **deferred** +(31) definition-level ::= +redefinition |** ****redefined**** **[redefinition] + +(32) declaration-of-constructed-type ::= +**returns**** **[**mutable**] class-name + +(33) declaration-of-returned-type ::= +**returns**** **return-access passed-type + +(34) declaration-of-errors ::= +**raises**** **exception-name {’,’ exception-name} + +(35) declaration-of-visibility ::= +**is****  **visibility + +(36) declaration-of-attributes-of-instance-method ::= +**is**** **visibility | **is **definition-of-level +[visibility] + +(37) constructor ::= +constructor-name [simple-formal-part] +[declaration-of-constructed-type] +[declaration-of-errors] +[declaration-of-visibility]’;’ + +(38) instance-method ::= +identifier formal-part-of-instance-method +[declaration of returned type] +[declaration-of-errors] +[declaration-of-attributes-of-instancemethod]’;’ + +(39) class-method ::= +identifier formal-part-of-the-class-method +[declaration of returned type] +[declaration-of-errors] +[declaration-of-visibility]’;’ + +(40) package-method ::= +identifier [simple-formal-part] +[declaration-of-returned-type] +[declaration-of-errors] +[**is private**]’;’ + +(41) member-method ::= +constructor | instance-method | class-method + +(42) formal-part ::= +simple-formal-part | +formal-part-of-instance-method| +formal-part-of-class-method + +(43) friend ::= +identifier **from**** **[**class**] class-name [formal-part] +| +identifier **from**** **[**package**] package-name [formal- +part] | +[**class**] class-name + +(44) field ::= +identifier {’,’ identifier} ’:’ data-type +[’[’integer {’,’ integer}’]’] +[**is protected**]’;’ + +45) redefinition-of-field ::= +[field-name] **from**** **[**class**] class-name + +(46) declaration-of-fields ::= +**fields**** **[**redefined**** **redefinition-of-field {’,’ +redefinition-of-field}’;’] +field {field} + +(47) declaration-of-an-alias::= +[**private**] **alias**** **class-name1 **is**** **class-name2 [**from** +package-name] + +(48) declaration-of-friends ::= +**friends**** **friend {’,’ friend} + +(49) class-definition ::= +[{member-method}] +[declaration-of-fields] +[declaration-of-friends] + +(50) declaration-of-an-exception ::= +**exception**** **exception-name +**inherits**** **exception-name + +(51) declaration-of-an-enumeration ::= +**enumeration**** **enumeration-name +**is**** **identifier {’,’ identifier} +[**end**** **[enumeration-name]]’;’ + +(52) incomplete-declaration-of-a-non-generic-class ::= +[**deferred**] **class**** **class-name’;’ + +(53) incomplete-declaration-of-a-generic-class ::= +[**deferred**] **generic class**** **class-name {’,’ class-name}’;’ + +(54) declaration-of-a-non-generic-class ::= +[**deferred**] **class**** **class-name +[**inherits**** **class-name +[**uses**** **data-type {’,’ data-type}] +[**raises**** **exception-name {’,’ exception-name}] +**   is **definition-of-a-class +**end **[class-name]’;’ + +(55) type-constraint ::= +**any**** **| class-name [’(’data-type {’,’ data-type}’)’] + +(56) generic-type ::= +identifier **as**** **type-constraint +@section occt_1819379591_2139552861 Appendix B. + + + +@subsection occt_1819379591_213955286151 Comparison of CDL & C++ Syntax for Data Types manipulated by Handle and by Value + + + + + + + + + +
+ +
+ + + ![](/devs_guide/cdl/images/cdl_image012.jpg) +
+ diff --git a/dox/dev_guides/cdl/images/cdl_image001.jpg b/dox/dev_guides/cdl/images/cdl_image001.jpg new file mode 100644 index 0000000000000000000000000000000000000000..0e782cab77acff25a6036d54ba65f069d489b6a6 GIT binary patch literal 6870 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 m*2l*OQXOT`qhpC@6q? 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
|P#5?ll%n9dwW#iFtWiBYD_$<{CS;|b1 z_#htus20&M$IILKllxg%^Jx>YjYAZm`d9(s7gD*3aqJgT;`in!2Fv*PMr_9wL|mu( z4TK2GgA3phA`VA-eqtqP9emlj2w8XL)nK8O%9@(Dn!cRNZ8u)o*b=$bKX|EWdL$#6 zqZwP8QYltY&<5>ecz=M#5@bps{rasF0k&~zI2P>_Ka4W^KAsh|Me1p02Ro|4CRexq zjL&%^LC$9N^PzT%agqaUY_W4Xjx5N^dj#bnQf(}rNTd1%Z)h@(>c>?x*Exm#%5Vim z+9e7iA8y8D7F%LQirO7Y!#&2VdhC={p&fIQKvxS7!z#6BuBoQkSLthcGa7A^Gsg; zSOS!6z=QgHg7}Z@>upIGaPMA6h<46oKm?MTl*IAZn&8KQ;ts55gYAJs^MtIc)42> zCFNE`LpF~ki|M}di(+yqWtQ;(pT&s^GD-&{bx=e6aGG;ipp!4`>(l8t0V zhYHmor<5WA&3rF_V>vG^^}u#cR#I?!HT1mv#A2@&6wAIeJ-*Sm9NXzCpnv-ci^6RR zFmJA?RbLl!{HzxzPiP+Hl<@*v$1Hi2bi>(~JAOIH8CC$7`so_~^`Ai|`I|^cN*(d1 z5M$H2D_it@2g>Ft()Ui{!{zAmB`Fs??`)cmkQ9?4H%@cVg>}hDxa;f$9Vrgn`#z6kweSVJSLsjkN4!QZ^?`MG=%da@PMKZ2BvmZ?t}r<<9LN8XWdVY^pnAQCjUJ1(SoEc|;kPTLVdKh4d_-P%THuko{mg(Z15JosgQf)`}Ks&k;8gDat3KrlQ>MDsVh|*(!4hzs$>LW|NBx7h2)OmM6l;EiX_F-Cc+UQ>|sVgBxY1rzgF} z3Vaho$WHHGrA&-yHOY?IaJZCZS$pt|TA@+K7a3AAvbJ=god*MZg!r|ErIp){MLg{9 zpO86`Q(lKS_;l)<4Uecs-{FzJ8AEDuO@fZDa5?>P+KR%Dk@Y(oCb?50`4?X7%*q-N zk#qbxYqj#|oL=DIgmVGgX=1$78;Qi=F}IKdk2zW0;je>J*enhJuVHJ;q9A~x+}sE7 zh$g_fTf1L;6N4Sa@Ef{YN(4+8?hb<`0GzqcRhoam{N{ZGJzmtcUeE>m0#Ad@;24~X zJ^KOznok}mOd)_PJ!fGaaDM(jfmf0y!51!dWev>IiQRmu%n|Sg48xu_}-C?dOok)NZHRc?ui=@s1y4 zIHVyzv;P0*fPd$v+V?*n)UU3x|MNNg=C1ocpTqyn&%tC>jA4s0aL)j5tanE5;e&t? et5(PISQ4F$)6BM>O`2o4k%7Y7Ht`#$)4 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 literal 0 HcmV?d00001 diff --git a/dox/dev_guides/cdl/images/cdl_image005.jpg b/dox/dev_guides/cdl/images/cdl_image005.jpg new file mode 100644 index 0000000000000000000000000000000000000000..04f85ee40e74ad4f2a5142eb5c2c5f5928c4fad0 GIT binary patch literal 15958 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 iFxgH*Wm8%?rwMI@6&z$ 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 CQKb$5 literal 0 HcmV?d00001 diff --git a/dox/dev_guides/cdl/images/cdl_image007.jpg b/dox/dev_guides/cdl/images/cdl_image007.jpg new file mode 100644 index 0000000000000000000000000000000000000000..370ed264afe8f46e07832c05847e6e663cc4ea72 GIT binary patch literal 20016 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 D$O4&5 literal 0 HcmV?d00001 diff --git a/dox/dev_guides/cdl/images/cdl_image008.jpg b/dox/dev_guides/cdl/images/cdl_image008.jpg new file mode 100644 index 0000000000000000000000000000000000000000..6648804378d178ebbb665f2d21f16b36c0911f2d GIT binary patch literal 17403 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 S9mDg_2avY9zFL(kCj396_+cOb literal 0 HcmV?d00001 diff --git a/dox/overview/tutorial/images/tutorial_image010.png b/dox/overview/tutorial/images/tutorial_image010.png new file mode 100644 index 0000000000000000000000000000000000000000..899e224749fdeb451c71fb2591190ffd687d622a GIT binary patch literal 4364 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 P2Lqs~rmI?|VjcN^lzrqU literal 0 HcmV?d00001 diff --git a/dox/overview/tutorial/images/tutorial_image011.png b/dox/overview/tutorial/images/tutorial_image011.png new file mode 100644 index 0000000000000000000000000000000000000000..741a6714ac96f3f57bef6ca8c28435d4a53604f8 GIT binary patch literal 2794 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 literal 0 HcmV?d00001 diff --git a/dox/overview/tutorial/images/tutorial_image012.png b/dox/overview/tutorial/images/tutorial_image012.png new file mode 100644 index 0000000000000000000000000000000000000000..4d68528a0d1e8358c4f9f1febba4f33d098374fc GIT binary patch literal 3221 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 literal 0 HcmV?d00001 diff --git a/dox/overview/tutorial/images/tutorial_image013.png b/dox/overview/tutorial/images/tutorial_image013.png new file mode 100644 index 0000000000000000000000000000000000000000..af84d793dee3e62a20a295c936189e188037a4dc GIT binary patch literal 2633 zcmeHJ`&*KC6n}YpQ`Ahah^7$QJS|K0uo(0IYd6t@_Wt=OT5 zQUGA7^xuc-V%0JbogysI|I754sn-+Vlm`QWZ#2`j02f# zBu>nvKQi!aGD_6)6rP&;y7ea*Hg-i8HAp|lV|Hf~uTR)7<$EBO%|#i4xD@+e80Y>D z2D!TLwcEFV2~Z4|exk#xOz>d2r=}R1Bo^H~aT0nKBry-u&iG)VBDYu`$L(kefxQuN zQNN?Y77TGv2?%4?u>2Hzl^{hwmWc6WW z_LB+S>{sineJdwJLyw6{C59X^d{?09S*UlsK> zY1UVjk+zDDKN8(>OPX+VOrF_Fp~FsCV}2Z^o^AlILfE z63O5DTSF_++92vK(%Osu*+kN}7eT%S$o;+dQX!gwQ3(oH-}I~I1N6;5yAePa2wr=` z@-s{#UgBiy`N_qnT72q@Pc!oWzDQoHH5l5+n&B$!t+#?LiH^#5pRqh1uR+&2!X*h$ zoKEjLG^g`?-4crljegv1Gz#~hbhv`k%}qG%Kyz*R{XFxaHju?)%@-LCO1ndd=GHf@ zaC{<9cLXwxe~{Se zWhVFDF8VDBK~Gz~jw@0`7@<&&exmQuj zTCx(eQW@S)Pv1%EET*0!3tgMV1Etd;%u_DD8@p1%(>PSaLAP0-tNXiWuF-cGv>$F? zEzRZXtW6wI`oVk@noNz&pthMs(honp6I(Wh!sN&)5Bd8w{vAM zyGM$`{*_CO@Qdv_=S6xUztT}_-b0@}_neF#a=YKZ#l)`6T{P#JN1Pi?`T}|uuIlRG hanz&=ENJNnJ59;fD}2hGmm=pM5Ec{>SRW9Z^A90+c=`YU literal 0 HcmV?d00001 diff --git a/dox/overview/tutorial/images/tutorial_image014.png b/dox/overview/tutorial/images/tutorial_image014.png new file mode 100644 index 0000000000000000000000000000000000000000..f9635174f96b9c5be3e327baa97e4c4c68400635 GIT binary patch literal 3333 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 literal 0 HcmV?d00001 diff --git a/dox/overview/tutorial/images/tutorial_image016.png b/dox/overview/tutorial/images/tutorial_image016.png new file mode 100644 index 0000000000000000000000000000000000000000..8ea559a9a6acd5a12ba511e2cd2c63bcd1845053 GIT binary patch literal 4158 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 IM6N<$f-E=WG5`Po literal 0 HcmV?d00001 diff --git a/dox/overview/tutorial/images/tutorial_image017.png b/dox/overview/tutorial/images/tutorial_image017.png new file mode 100644 index 0000000000000000000000000000000000000000..5beaf94edaac8d8e580b7d595bef1f37f36d61ed GIT binary patch literal 5864 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 E1GRnTr2qf` literal 0 HcmV?d00001 diff --git a/dox/overview/tutorial/images/tutorial_image018.png b/dox/overview/tutorial/images/tutorial_image018.png new file mode 100644 index 0000000000000000000000000000000000000000..0ac10c975ac25cbe91521d5ed6513d25cc49c049 GIT binary patch literal 2876 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 literal 0 HcmV?d00001 diff --git a/dox/overview/tutorial/tutorial.md b/dox/overview/tutorial/tutorial.md new file mode 100644 index 0000000000..ea2a9cf3a3 --- /dev/null +++ b/dox/overview/tutorial/tutorial.md @@ -0,0 +1,843 @@ + Tutorial {#overview__tutorial} +======= + +@section sec1 Overview + + +This tutorial will teach you how to use Open CASCADE Technology services to model a 3D object. The purpose of this tutorial is not to describe all Open CASCADE Technology classes but to help you start thinking in terms of Open CASCADE Technology as a tool. + + +@subsection OCCT_TUTORIAL_SUB1_1 Prerequisites + +This tutorial assumes that you have experience in using and setting up C++. +From a programming standpoint, Open CASCADE Technology is designed to enhance your C++ tools with 3D modeling classes, methods and functions. The combination of all these resources will allow you to create substantial applications. + +@subsection OCCT_TUTORIAL_SUB1_2 The Model + +To illustrate the use of classes provided in the 3D geometric modeling toolkits, you will create a bottle as shown: + +![](/overview/tutorial/images/tutorial_image001.png "") + +In the tutorial we will create, step-by-step, a function that will model a bottle as shown above. You will find the complete source code of this tutorial, including the very function *MakeBottle* in the distribution of Open CASCADE Technology. The function body is provided in the file samples/qt/Tutorial/src/MakeBottle.cxx. + +@subsection OCCT_TUTORIAL_SUB1_3 Model Specifications + +We first define the bottle specifications as follows: + +| Object Parameter | Parameter Name | Parameter Value | +| :--------------: | :------------: | :-------------: | +| Bottle height | MyHeight | 70mm | +| Bottle width | MyWidth | 50mm | +| Bottle thickness | MyThickness | 30mm | + +In addition, we decide that the bottle's profile (base) will be centered on the origin of the global Cartesian coordinate system. + +![](/overview/tutorial/images/tutorial_image002.png "") + +This modeling requires four steps: + + * build the bottle's Profile + * build the bottle's Body + * build the Threading on the bottle's neck + * build the result compound + + +@section sec2 Building the Profile + +@subsection OCCT_TUTORIAL_SUB2_1 Defining Support Points + +To create the bottle's profile, you first create characteristic points with their coordinates as shown below in the (XOY) plane. These points will be the supports that define the geometry of the profile. + +![](/overview/tutorial/images/tutorial_image003.png "") + +There are two classes to describe a 3D Cartesian point from its X, Y and Z coordinates in Open CASCADE Technology: + + * the primitive geometric *gp_Pnt* class + * the transient *Geom_CartesianPoint* class manipulated by handle + +A handle is a type of smart pointer that provides automatic memory management. +To choose the best class for this application, consider the following: + + * *gp_Pnt* is manipulated by value. Like all objects of its kind, it will have a limited lifetime. + * *Geom_CartesianPoint* is manipulated by handle and may have multiple references and a long lifetime. + +Since all the points you will define are only used to create the profile's curves, an object with a limited lifetime will do. Choose the *gp_Pnt* class. +To instantiate a *gp_Pnt* object, just specify the X, Y, and Z coordinates of the points in the global cartesian coordinate system: + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{.cpp} + gp_Pnt aPnt1(-myWidth / 2., 0, 0); + gp_Pnt aPnt2(-myWidth / 2., -myThickness / 4., 0); + gp_Pnt aPnt3(0, -myThickness / 2., 0); + gp_Pnt aPnt4(myWidth / 2., -myThickness / 4., 0); + gp_Pnt aPnt5(myWidth / 2., 0, 0); +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Once your objects are instantiated, you can use methods provided by the class to access and modify its data. For example, to get the X coordinate of a point: + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{.cpp} +Standard_Real xValue1 = aPnt1.X(); +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +@subsection OCCT_TUTORIAL_SUB2_2 Profile: Defining the Geometry +With the help of the previously defined points, you can compute a part of the bottle's profile geometry. As shown in the figure below, it will consist of two segments and one arc. + +![](/overview/tutorial/images/tutorial_image004.png "") + +To create such entities, you need a specific data structure, which implements 3D geometric objects. This can be found in the Geom package of Open CASCADE Technology. +In Open CASCADE Technology a package is a group of classes providing related functionality. The classes have names that start with the name of a package they belong to. For example, *Geom_Line* and *Geom_Circle* classes belong to the *Geom* package. The *Geom* package implements 3D geometric objects: elementary curves and surfaces are provided as well as more complex ones (such as *Bezier* and *BSpline*). +However, the *Geom* package provides only the data structure of geometric entities. You can directly instantiate classes belonging to *Geom*, but it is easier to compute elementary curves and surfaces by using the *GC* package. +This is because the *GC* provides two algorithm classes which are exactly what is required for our profile: + + * Class *GC_MakeSegment* to create a segment. One of its constructors allows you to define a segment by two end points P1 and P2 + * Class *GC_MakeArcOfCircle* to create an arc of a circle. A useful constructor creates an arc from two end points P1 and P3 and going through P2. + +Both of these classes return a *Geom_TrimmedCurve* manipulated by handle. This entity represents a base curve (line or circle, in our case), limited between two of its parameter values. For example, circle C is parameterized between 0 and 2PI. If you need to create a quarter of a circle, you create a *Geom_TrimmedCurve* on C limited between 0 and M_PI/2. + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{.cpp} + Handle(Geom_TrimmedCurve) aArcOfCircle = GC_MakeArcOfCircle(aPnt2,aPnt3,aPnt4); + Handle(Geom_TrimmedCurve) aSegment1 = GC_MakeSegment(aPnt1, aPnt2); + Handle(Geom_TrimmedCurve) aSegment2 = GC_MakeSegment(aPnt4, aPnt5); +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +All *GC* classes provide a casting method to obtain a result automatically with a function-like call. Note that this method will raise an exception if construction has failed. To handle possible errors more explicitly, you may use the *IsDone* and *Value* methods. For example: + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{.cpp} + GC_MakeSegment mkSeg (aPnt1, aPnt2); + Handle(Geom_TrimmedCurve) aSegment1; + if(mkSegment.IsDone()){ + aSegment1 = mkSeg.Value(); + } + else { + // handle error + } +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + +@subsection OCCT_TUTORIAL_SUB2_3 Profile: Defining the Topology + + +You have created the support geometry of one part of the profile but these curves are independent with no relations between each other. +To simplify the modeling, it would be right to manipulate these three curves as a single entity. +This can be done by using the topological data structure of Open CASCADE Technology defined in the *TopoDS* package: it defines relationships between geometric entities which can be linked together to represent complex shapes. +Each object of the *TopoDS* package, inheriting from the *TopoDS_Shape* class, describes a topological shape as described below: + +| Shape | Open CASCADE Technology Class | Description | +| :-------- | :---------------------------- | :------------------------------------------------------------ | +| Vertex | TopoDS_Vertex | Zero dimensional shape corresponding to a point in geometry. | +| Edge | TopoDS_Edge | One-dimensional shape corresponding to a curve and bounded by a vertex at each extremity.| +| Wire | TopoDS_Wire | Sequence of edges connected by vertices. | +| Face | TopoDS_Face | Part of a surface bounded by a closed wire(s). | +| Shell | TopoDS_Shell | Set of faces connected by edges. | +| Solid | TopoDS_Solid | Part of 3D space bounded by Shells. | +| CompSolid | TopoDS_CompSolid | Set of solids connected by their faces. | +| Compound | TopoDS_Compound | Set of any other shapes described above. | + +Referring to the previous table, to build the profile, you will create: + + * Three edges out of the previously computed curves. + * One wire with these edges. + +![](/overview/tutorial/images/tutorial_image005.png "") + +However, the *TopoDS* package provides only the data structure of the topological entities. Algorithm classes available to compute standard topological objects can be found in the *BRepBuilderAPI* package. +To create an edge, you use the BRepBuilderAPI_MakeEdge class with the previously computed curves: + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{.cpp} + TopoDS_Edge aEdge1 = BRepBuilderAPI_MakeEdge(aSegment1); + TopoDS_Edge aEdge2 = BRepBuilderAPI_MakeEdge(aArcOfCircle); + TopoDS_Edge aEdge3 = BRepBuilderAPI_MakeEdge(aSegment2); +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +In Open CASCADE Technology, you can create edges in several ways. One possibility is to create an edge directly from two points, in which case the underlying geometry of this edge is a line, bounded by two vertices being automatically computed from the two input points. For example, aEdge1 and aEdge3 could have been computed in a simpler way: + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{.cpp} + TopoDS_Edge aEdge1 = BRepBuilderAPI_MakeEdge(aPnt1, aPnt3); + TopoDS_Edge aEdge2 = BRepBuilderAPI_MakeEdge(aPnt4, aPnt5); +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +To connect the edges, you need to create a wire with the *BRepBuilderAPI_MakeWire* class. There are two ways of building a wire with this class: + + * directly from one to four edges + * by adding other wire(s) or edge(s) to an existing wire (this is explained later in this tutorial) + +When building a wire from less than four edges, as in the present case, you can use the constructor directly as follows: + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{.cpp} + TopoDS_Wire aWire = BRepBuilderAPI_MakeWire(aEdge1, aEdge2, aEdge3); +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + +@subsection OCCT_TUTORIAL_SUB2_4 Profile: Completing the Profile + + +Once the first part of your wire is created you need to compute the complete profile. A simple way to do this is to: + + * compute a new wire by reflecting the existing one. + * add the reflected wire to the initial one. + +![](/overview/tutorial/images/tutorial_image006.png "") + +To apply a transformation on shapes (including wires), you first need to define the properties of a 3D geometric transformation by using the gp_Trsf class. This transformation can be a translation, a rotation, a scale, a reflection, or a combination of these. +In our case, we need to define a reflection with respect to the X axis of the global coordinate system. An axis, defined with the gp_Ax1 class, is built out of a point and has a direction (3D unitary vector). There are two ways to define this axis. +The first way is to define it from scratch, using its geometric definition: + + * X axis is located at (0, 0, 0) - use the *gp_Pnt* class. + * X axis direction is (1, 0, 0) - use the *gp_Dir* class. A *gp_Dir* instance is created out of its X, Y and Z coordinates. + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{.cpp} + gp_Pnt aOrigin(0, 0, 0); + gp_Dir xDir(1, 0, 0); + gp_Ax1 xAxis(aOrigin, xDir); +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +The second and simplest way is to use the geometric constants defined in the gp package (origin, main directions and axis of the global coordinate system). To get the X axis, just call the *gp::OX* method: + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{.cpp} + gp_Ax1 xAxis = gp::OX(); +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +As previously explained, the 3D geometric transformation is defined with the *gp_Trsf* class. There are two different ways to use this class: + + * by defining a transformation matrix by all its values + * by using the appropriate methods corresponding to the required transformation (SetTranslation for a translation, SetMirror for a reflection, etc.): the matrix is automatically computed. + +Since the simplest approach is always the best one, you should use the SetMirror method with the axis as the center of symmetry. + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{.cpp} + gp_Trsf aTrsf; + aTrsf.SetMirror(xAxis); +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +You now have all necessary data to apply the transformation with the BRepBuilderAPI_Transform class by specifying: + + * the shape on which the transformation must be applied. + * the geometric transformation + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{.cpp} + BRepBuilderAPI_Transform aBRepTrsf(aWire, aTrsf); +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +*BRepBuilderAPI_Transform* does not modify the nature of the shape: the result of the reflected wire remains a wire. But the function-like call or the *BRepBuilderAPI_Transform::Shape* method returns a *TopoDS_Shape* object: + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{.cpp} + TopoDS_Shape aMirroredShape = aBRepTrsf.Shape(); +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +What you need is a method to consider the resulting reflected shape as a wire. The *TopoDS* global functions provide this kind of service by casting a shape into its real type. To cast the transformed wire, use the *TopoDS::Wire* method. + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{.cpp} + TopoDS_Wire aMirroredWire = TopoDS::Wire(aMirroredShape); +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +The bottle's profile is almost finished. You have created two wires: *aWire* and *aMirroredWire*. You need to concatenate them to compute a single shape. To do this, you use the *BRepBuilderAPI_MakeWire* class as follows: + + * create an instance of *BRepBuilderAPI_MakeWire*. + * add all edges of the two wires by using the *Add* method on this object. + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{.cpp} + BRepBuilderAPI_MakeWire mkWire; + mkWire.Add(aWire); + mkWire.Add(aMirroredWire); + TopoDS_Wire myWireProfile = mkWire.Wire(); +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + +@section sec3 Building the Body + + +@subsection OCCT_TUTORIAL_SUB3_1 Prism the Profile + + +To compute the main body of the bottle, you need to create a solid shape. The simplest way is to use the previously created profile and to sweep it along a direction. The *Prism* functionality of Open CASCADE Technology is the most appropriate for that task. It accepts a shape and a direction as input and generates a new shape according to the following rules: + +| Shape | Generates | +| :----- | :----------------- | +| Vertex | Edge | +| Edge | Face | +| Wire | Shell | +| Face | Solid | +| Shell | Compound of Solids | + +![](/overview/tutorial/images/tutorial_image007.png "") + +Your current profile is a wire. Referring to the Shape/Generates table, you need to compute a face out of its wire to generate a solid. +To create a face, use the *BRepBuilderAPI_MakeFace* class. As previously explained, a face is a part of a surface bounded by a closed wire. Generally, *BRepBuilderAPI_MakeFace* computes a face out of a surface and one or more wires. +When the wire lies on a plane, the surface is automatically computed. + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{.cpp} + TopoDS_Face myFaceProfile = BRepBuilderAPI_MakeFace(myWireProfile); +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +The *BRepPrimAPI* package provides all the classes to create topological primitive constructions: boxes, cones, cylinders, spheres, etc. Among them is the *BRepPrimAPI_MakePrism* class. As specified above, the prism is defined by: + + * the basis shape to sweep; + * a vector for a finite prism or a direction for finite and infinite prisms. + +You want the solid to be finite, swept along the Z axis and to be myHeight height. The vector, defined with the *gp_Vec* class on its X, Y and Z coordinates, is: + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{.cpp} + gp_Vec aPrismVec(0, 0, myHeight); +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +All the necessary data to create the main body of your bottle is now available. Just apply the *BRepPrimAPI_MakePrism* class to compute the solid: + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{.cpp} + TopoDS_Shape myBody = BRepPrimAPI_MakePrism(myFaceProfile, aPrismVec); +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + +@subsection OCCT_TUTORIAL_SUB3_2 Applying Fillets + + +The edges of the bottle's body are very sharp. To replace them by rounded faces, you use the *Fillet* functionality of Open CASCADE Technology. +For our purposes, we will specify that fillets must be: + + * applied on all edges of the shape + * have a radius of *myThickness* / 12 + +![](/overview/tutorial/images/tutorial_image008.png "") + +To apply fillets on the edges of a shape, you use the *BRepFilletAPI_MakeFillet* class. This class is normally used as follows: + + * Specify the shape to be filleted in the *BRepFilletAPI_MakeFillet* constructor. + * Add the fillet descriptions (an edge and a radius) using the *Add* method (you can add as many edges as you need). + * Ask for the resulting filleted shape with the *Shape* method. + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{.cpp} +BRepFilletAPI_MakeFillet mkFillet(myBody); +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +To add the fillet description, you need to know the edges belonging to your shape. The best solution is to explore your solid to retrieve its edges. This kind of functionality is provided with the *TopExp_Explorer* class, which explores the data structure described in a *TopoDS_Shape* and extracts the sub-shapes you specifically need. +Generally, this explorer is created by providing the following information: + + * the shape to explore + * the type of sub-shapes to be found. This information is given with the *TopAbs_ShapeEnum* enumeration. + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{.cpp} +TopExp_Explorer anEdgeExplorer(myBody, TopAbs_EDGE); +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +An explorer is usually applied in a loop by using its three main methods: + + * *More()* to know if there are more sub-shapes to explore. + * *Current()* to know which is the currently explored sub-shape (used only if the *More()* method returns true). + * *Next()* to move onto the next sub-shape to explore. + + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{.cpp} + while(anEdgeExplorer.More()){ + TopoDS_Edge anEdge = TopoDS::Edge(anEdgeExplorer.Current()); + //Add edge to fillet algorithm + ... + anEdgeExplorer.Next(); + } +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +In the explorer loop, you have found all the edges of the bottle shape. Each one must then be added in the *BRepFilletAPI_MakeFillet* instance with the *Add()* method. Do not forget to specify the radius of the fillet along with it. + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{.cpp} + mkFillet.Add(myThickness / 12., anEdge); +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Once this is done, you perform the last step of the procedure by asking for the filleted shape. + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{.cpp} + myBody = mkFillet.Shape(); +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + +@subsection OCCT_TUTORIAL_SUB3_3 Adding the Neck + + +To add a neck to the bottle, you will create a cylinder and fuse it to the body. The cylinder is to be positioned on the top face of the body with a radius of *myThickness* / 4. and a height of *myHeight* / 10. + +![](/overview/tutorial/images/tutorial_image009.png "") + +To position the cylinder, you need to define a coordinate system with the *gp_Ax2* class defining a right-handed coordinate system from a point and two directions - the main (Z) axis direction and the X direction (the Y direction is computed from these two). +To align the neck with the center of the top face, being in the global coordinate system (0, 0, *myHeight*), with its normal on the global Z axis, your local coordinate system can be defined as follows: + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{.cpp} + gp_Pnt neckLocation(0, 0, myHeight); + gp_Dir neckAxis = gp::DZ(); + gp_Ax2 neckAx2(neckLocation, neckAxis); +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +To create a cylinder, use another class from the primitives construction package: the *BRepPrimAPI_MakeCylinder* class. The information you must provide is: + + * the coordinate system where the cylinder will be located; + * the radius and height. + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{.cpp} + Standard_Real myNeckRadius = myThickness / 4.; + Standard_Real myNeckHeight = myHeight / 10; + BRepPrimAPI_MakeCylinder MKCylinder(neckAx2, myNeckRadius, myNeckHeight); + TopoDS_Shape myNeck = MKCylinder.Shape(); +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +You now have two separate parts: a main body and a neck that you need to fuse together. +The *BRepAlgoAPI* package provides services to perform Boolean operations between shapes, and especially: *common* (Boolean intersection), *cut* (Boolean subtraction) and *fuse* (Boolean union). +Use *BRepAlgoAPI_Fuse* to fuse the two shapes: + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{.cpp} + myBody = BRepAlgoAPI_Fuse(myBody, myNeck); +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + +@subsection OCCT_TUTORIAL_SUB3_4 Creating a Hollowed Solid + + +Since a real bottle is used to contain liquid material, you should now create a hollowed solid from the bottle's top face. +In Open CASCADE Technology, a hollowed solid is called a *Thick* *Solid* and is internally computed as follows: + + * Remove one or more faces from the initial solid to obtain the first wall W1 of the hollowed solid. + * Create a parallel wall W2 from W1 at a distance D. If D is positive, W2 will be outside the initial solid, otherwise it will be inside. + * Compute a solid from the two walls W1 and W2. + +![](/overview/tutorial/images/tutorial_image010.png "") + +To compute a thick solid, you create an instance of the *BRepOffsetAPI_MakeThickSolid* class by giving the following information: + + * The shape, which must be hollowed. + * The tolerance used for the computation (tolerance criterion for coincidence in generated shapes). + * The thickness between the two walls W1 and W2 (distance D). + * The face(s) to be removed from the original solid to compute the first wall W1. + +The challenging part in this procedure is to find the face to remove from your shape - the top face of the neck, which: + + * has a plane (planar surface) as underlying geometry; + * is the highest face (in Z coordinates) of the bottle. + +To find the face with such characteristics, you will once again use an explorer to iterate on all the bottle's faces to find the appropriate one. + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{.cpp} + for(TopExp_Explorer aFaceExplorer(myBody, TopAbs_FACE) ; aFaceExplorer.More() ; aFaceExplorer.Next()){ + TopoDS_Face aFace = TopoDS::Face(aFaceExplorer.Current()); + } +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +For each detected face, you need to access the geometric properties of the shape: use the *BRep_Tool* class for that. The most commonly used methods of this class are: + + * *Surface* to access the surface of a face; + * *Curve* to access the 3D curve of an edge; + * *Point* to access the 3D point of a vertex. + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{.cpp} +Handle(Geom_Surface) aSurface = BRep_Tool::Surface(aFace); +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +As you can see, the *BRep_Tool::Surface* method returns an instance of the *Geom_Surface* class manipulated by handle. However, the *Geom_Surface* class does not provide information about the real type of the object *aSurface*, which could be an instance of *Geom_Plane*, *Geom_CylindricalSurface*, etc. +All objects manipulated by handle, like *Geom_Surface*, inherit from the *Standard_Transient* class which provides two very useful methods concerning types: + + * *DynamicType* to know the real type of the object + * *IsKind* to know if the object inherits from one particular type + +DynamicType returns the real type of the object, but you need to compare it with the existing known types to determine whether *aSurface* is a plane, a cylindrical surface or some other type. +To compare a given type with the type you seek, use the *STANDARD_TYPE* macro, which returns the type of a class: + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{.cpp} + if(aSurface->DynamicType() == STANDARD_TYPE(Geom_Plane)){ + // + } +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +If this comparison is true, you know that the *aSurface* real type is *Geom_Plane*. You can then convert it from *Geom_Surface* to *Geom_Plane* by using the *DownCast()* method provided by each class inheriting *Standard_Transient*. As its name implies, this static method is used to downcast objects to a given type with the following syntax: + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{.cpp} + Handle(Geom_Plane) aPlane = Handle(Geom_Plane)::DownCast(aSurface); +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Remember that the goal of all these conversions is to find the highest face of the bottle lying on a plane. Suppose that you have these two global variables: + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{.cpp} + TopoDS_Face faceToRemove; + Standard_Real zMax = -1; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +You can easily find the plane whose origin is the biggest in Z knowing that the location of the plane is given with the *Geom_Plane::Location* method. For example: + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{.cpp} + gp_Pnt aPnt = aPlane->Location(); + Standard_Real aZ = aPnt.Z(); + if(aZ > zMax){ + zMax = aZ; + faceToRemove = aFace; + } +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +You have now found the top face of the neck. Your final step before creating the hollowed solid is to put this face in a list. Since more than one face can be removed from the initial solid, the *BRepOffsetAPI_MakeThickSolid* constructor takes a list of faces as arguments. +Open CASCADE Technology provides many collections for different kinds of objects: see *TColGeom* package for collections of objects from *Geom* package, *TColgp* package for collections of objects from gp package, etc. +The collection for shapes can be found in the *TopTools* package. As *BRepOffsetAPI_MakeThickSolid* requires a list, use the *TopTools_ListOfShape* class. + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{.cpp} + TopTools_ListOfShape facesToRemove; + facesToRemove.Append(faceToRemove); +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +All the necessary data are now available so you can create your hollowed solid by calling the *BRepOffsetAPI_MakeThickSolid* constructor: + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{.cpp} + MyBody = BRepOffsetAPI_MakeThickSolid(myBody, facesToRemove, -myThickness / 50, 1.e-3); +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + +@section sec4 Building the Threading + + +@subsection OCCT_TUTORIAL_SUB4_1 Creating Surfaces + + +Up to now, you have learned how to create edges out of 3D curves. +You will now learn how to create an edge out of a 2D curve and a surface. +To learn this aspect of Open CASCADE Technology, you will build helicoidal profiles out of 2D curves on cylindrical surfaces. The theory is more complex than in previous steps, but applying it is very simple. +As a first step, you compute these cylindrical surfaces. You are already familiar with curves of the *Geom* package. Now you can create a cylindrical surface (*Geom_CylindricalSurface*) using: + + * a coordinate system; + * a radius. + +Using the same coordinate system *neckAx2* used to position the neck, you create two cylindrical surfaces *Geom_CylindricalSurface* with the following radii: + +![](/overview/tutorial/images/tutorial_image011.png "") + +Notice that one of the cylindrical surfaces is smaller than the neck. There is a good reason for this: after the thread creation, you will fuse it with the neck. So, we must make sure that the two shapes remain in contact. + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{.cpp} + Handle(Geom_CylindricalSurface) aCyl1 = new Geom_CylindricalSurface(neckAx2, myNeckRadius * 0.99); + + Handle(Geom_CylindricalSurface) aCyl2 = new Geom_CylindricalSurface(neckAx2, myNeckRadius * 1.05); +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + +@subsection OCCT_TUTORIAL_SUB4_2 Defining 2D Curves + + +To create the neck of the bottle, you made a solid cylinder based on a cylindrical surface. You will create the profile of threading by creating 2D curves on such a surface. +All geometries defined in the *Geom* package are parameterized. This means that each curve or surface from Geom is computed with a parametric equation. +A *Geom_CylindricalSurface* surface is defined with the following parametric equation: + +P(U, V) = O + R * (cos(U) * xDir + sin(U) * yDir) + V * zDir, where : + + * P is the point defined by parameters (U, V). + * O, *Dir, yDir and zDir are respectively the origin, the X direction, Y direction and Z direction of the cylindrical surface local coordinate system. + * R is the radius of the cylindrical surface. + * U range is [0, 2PI] and V is infinite. + +![](/overview/tutorial/images/tutorial_image012.png "") + +The advantage of having such parameterized geometries is that you can compute, for any (U, V) parameters of the surface: + + * the 3D point; + * the derivative vectors of order 1, 2 to N at this point. + +There is another advantage of these parametric equations: you can consider a surface as a 2D parametric space defined with a (U, V) coordinate system. For example, consider the parametric ranges of the neck's surface: + +![](/overview/tutorial/images/tutorial_image013.png "") + +Suppose that you create a 2D line on this parametric (U, V) space and compute its 3D parametric curve. Depending on the line definition, results are as follows: + +| Case | Parametric Equation | Parametric Curve | +| :------------ | :----------------------------------------------------------- | :---------------------------------------------------------------------------- | +| U = 0 | P(V) = O + V * zDir | Line parallel to the Z direction | +| V = 0 | P(U) = O + R * (cos(U) * xDir + sin(U) * yDir) | Circle parallel to the (O, X, Y) plane | +| U != 0 V != 0 | P(U, V) = O + R * (cos(U) * xDir + sin(U) * yDir) + V * zDir | Helicoidal curve describing the evolution of height and angle on the cylinder | + +The helicoidal curve type is exactly what you need. On the neck's surface, the evolution laws of this curve will be: + + * In V parameter: between 0 and myHeighNeck for the height description + * In U parameter: between 0 and 2PI for the angle description. But, since a cylindrical surface is U periodic, you can decide to extend this angle evolution to 4PI as shown in the following drawing: + +![](/overview/tutorial/images/tutorial_image014.png "") + +In this (U, V) parametric space, you will create a local (X, Y) coordinate system to position the curves to be created. This coordinate system will be defined with: + + * A center located in the middle of the neck's cylinder parametric space at (2*PI, myNeckHeight / 2) in U, V coordinates. + * A X direction defined with the (2*PI, myNeckHeight/4) vector in U, V coordinates, so that the curves occupy half of the neck's surfaces. + +![](/overview/tutorial/images/tutorial_image015.png "") + +To use 2D primitive geometry types of Open CASCADE Technology for defining a point and a coordinate system, you will once again instantiate classes from gp: + + * To define a 2D point from its X and Y coordinates, use the *gp_Pnt2d* class. + * To define a 2D direction (unit vector) from its X and Y coordinates, use the gp_Dir2d class. The coordinates will automatically be normalized. + * To define a 2D right-handed coordinate system, use the *gp_Ax2d* class, which is computed from a point (origin of the coordinate system) and a direction - the X direction of the coordinate system. The Y direction will be automatically computed. + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{.cpp} + gp_Pnt2d aPnt(2. * M_PI, myNeckHeight / 2.); + gp_Dir2d aDir(2. * M_PI, myNeckHeight / 4.); + gp_Ax2d anAx2d(aPnt, aDir); +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +You will now define the curves. As previously mentioned, these thread profiles are computed on two cylindrical surfaces. In the following figure, curves on the left define the base (on *aCyl1* surface) and the curves on the right define the top of the thread's shape (on *aCyl2* surface). + +![](/overview/tutorial/images/tutorial_image016.png "") + +You have already used the *Geom* package to define 3D geometric entities. For 2D, you will use the *Geom2d* package. As for *Geom*, all geometries are parameterized. For example, a *Geom2d_Ellipse* ellipse is defined from: + + * a coordinate system whose origin is the ellipse center; + * a major radius on the major axis defined by the X direction of the coordinate system; + * a minor radius on the minor axis defined by the Y direction of the coordinate system. + +Supposing that: + + * Both ellipses have the same major radius of 2*PI, + * Minor radius of the first ellipse is myNeckHeight / 10, + * And the minor radius value of the second ellipse is a fourth of the first one, + +Your ellipses are defined as follows: + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{.cpp} + Standard_Real aMajor = 2. * M_PI; + Standard_Real aMinor = myNeckHeight / 10; + Handle(Geom2d_Ellipse) anEllipse1 = new Geom2d_Ellipse(anAx2d, aMajor, aMinor); + Handle(Geom2d_Ellipse) anEllipse2 = new Geom2d_Ellipse(anAx2d, aMajor, aMinor / 4); +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +To describe portions of curves for the arcs drawn above, you define *Geom2d_TrimmedCurve* trimmed curves out of the created ellipses and two parameters to limit them. +As the parametric equation of an ellipse is P(U) = O + (MajorRadius * cos(U) * XDirection) + (MinorRadius * sin(U) * YDirection), the ellipses need to be limited between 0 and M_PI. + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{.cpp} + Handle(Geom2d_TrimmedCurve) anArc1 = new Geom2d_TrimmedCurve(anEllipse1, 0, M_PI); + Handle(Geom2d_TrimmedCurve) anArc2 = new Geom2d_TrimmedCurve(anEllipse2, 0, M_PI); +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +The last step consists in defining the segment, which is the same for the two profiles: a line limited by the first and the last point of one of the arcs. +To access the point corresponding to the parameter of a curve or a surface, you use the Value or D0 method (meaning 0th derivative), D1 method is for first derivative, D2 for the second one. + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{.cpp} + gp_Pnt2d anEllipsePnt1 = anEllipse1->Value(0); + gp_Pnt2d anEllipsePnt2; + anEllipse1->D0(M_PI, anEllipsePnt2); +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +When creating the bottle's profile, you used classes from the *GC* package, providing algorithms to create elementary geometries. +In 2D geometry, this kind of algorithms is found in the *GCE2d* package. Class names and behaviors are similar to those in *GC*. For example, to create a 2D segment out of two points: + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{.cpp} + Handle(Geom2d_TrimmedCurve) aSegment = GCE2d_MakeSegment(anEllipsePnt1, anEllipsePnt2); +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + +@subsection OCCT_TUTORIAL_SUB4_3 Building Edges and Wires + + +As you did when creating the base profile of the bottle, you can now: + + * compute the edges of the neck's threading. + * compute two wires out of these edges. + +![](/overview/tutorial/images/tutorial_image017.png "") + +Previously, you have built: + + * two cylindrical surfaces of the threading + * three 2D curves defining the base geometry of the threading + +To compute the edges out of these curves, once again use the *BRepBuilderAPI_MakeEdge* class. One of its constructors allows you to build an edge out of a curve described in the 2D parametric space of a surface. + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{.cpp} + TopoDS_Edge anEdge1OnSurf1 = BRepBuilderAPI_MakeEdge(anArc1, aCyl1); + TopoDS_Edge anEdge2OnSurf1 = BRepBuilderAPI_MakeEdge(aSegment, aCyl1); + TopoDS_Edge anEdge1OnSurf2 = BRepBuilderAPI_MakeEdge(anArc2, aCyl2); + TopoDS_Edge anEdge2OnSurf2 = BRepBuilderAPI_MakeEdge(aSegment, aCyl2); +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Now, you can create the two profiles of the threading, lying on each surface. + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{.cpp} + TopoDS_Wire threadingWire1 = BRepBuilderAPI_MakeWire(anEdge1OnSurf1, anEdge2OnSurf1); + TopoDS_Wire threadingWire2 = BRepBuilderAPI_MakeWire(anEdge1OnSurf2, anEdge2OnSurf2); +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Remember that these wires were built out of a surface and 2D curves. +One important data item is missing as far as these wires are concerned: there is no information on the 3D curves. Fortunately, you do not need to compute this yourself, which can be a difficult task since the mathematics can be quite complex. +When a shape contains all the necessary information except 3D curves, Open CASCADE Technology provides a tool to build them automatically. In the BRepLib tool package, you can use the *BuildCurves3d* method to compute 3D curves for all the edges of a shape. + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{.cpp} + BRepLib::BuildCurves3d(threadingWire1); + BRepLib::BuildCurves3d(threadingWire2); +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + +@subsection OCCT_TUTORIAL_SUB4_4 Creating Threading + + +You have computed the wires of the threading. The threading will be a solid shape, so you must now compute the faces of the wires, the faces allowing you to join the wires, the shell out of these faces and then the solid itself. This can be a lengthy operation. +There are always faster ways to build a solid when the base topology is defined. You would like to create a solid out of two wires. Open CASCADE Technology provides a quick way to do this by building a loft: a shell or a solid passing through a set of wires in a given sequence. +The loft function is implemented in the *BRepOffsetAPI_ThruSections* class, which you use as follows: + +![](/overview/tutorial/images/tutorial_image018.png "") + + * Initialize the algorithm by creating an instance of the class. The first parameter of this constructor must be specified if you want to create a solid. By default, *BRepOffsetAPI_ThruSections* builds a shell. + * Add the successive wires using the AddWire method. + * Use the *CheckCompatibility* method to activate (or deactivate) the option that checks whether the wires have the same number of edges. In this case, wires have two edges each, so you can deactivate this option. + * Ask for the resulting loft shape with the Shape method. + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{.cpp} + BRepOffsetAPI_ThruSections aTool(Standard_True); + aTool.AddWire(threadingWire1); aTool.AddWire(threadingWire2); + aTool.CheckCompatibility(Standard_False); + TopoDS_Shape myThreading = aTool.Shape(); +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + +@section sec5 Building the Resulting Compound + + +You are almost done building the bottle. Use the *TopoDS_Compound* and *BRep_Builder* classes to build single shape from *myBody* and *myThreading*: + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{.cpp} + TopoDS_Compound aRes; + BRep_Builder aBuilder; + aBuilder.MakeCompound (aRes); + aBuilder.Add (aRes, myBody); + aBuilder.Add (aRes, myThreading); +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Congratulations! Your bottle is complete. Here is the result snapshot of the Tutorial application: + +![](/overview/tutorial/images/tutorial_image019.png "") + +We hope that this tutorial has provided you with a feel for the industrial strength power of Open CASCADE Technology. +If you want to know more and develop major projects using Open CASCADE Technology, we invite you to study our training, support, and consulting services on our site at http://www.opencascade.org/support. Our professional services can maximize the power of your Open CASCADE Technology applications. + + +@section sec6 Appendix + + +Complete definition of MakeBottle function (defined in the file src/MakeBottle.cxx of the Tutorial): + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{.cpp} + TopoDS_Shape MakeBottle(const Standard_Real myWidth, const Standard_Real myHeight, + const Standard_Real myThickness) + { + // Profile : Define Support Points + gp_Pnt aPnt1(-myWidth / 2., 0, 0); + gp_Pnt aPnt2(-myWidth / 2., -myThickness / 4., 0); + gp_Pnt aPnt3(0, -myThickness / 2., 0); + gp_Pnt aPnt4(myWidth / 2., -myThickness / 4., 0); + gp_Pnt aPnt5(myWidth / 2., 0, 0); + + // Profile : Define the Geometry + Handle(Geom_TrimmedCurve) anArcOfCircle = GC_MakeArcOfCircle(aPnt2,aPnt3,aPnt4); + Handle(Geom_TrimmedCurve) aSegment1 = GC_MakeSegment(aPnt1, aPnt2); + Handle(Geom_TrimmedCurve) aSegment2 = GC_MakeSegment(aPnt4, aPnt5); + + // Profile : Define the Topology + TopoDS_Edge anEdge1 = BRepBuilderAPI_MakeEdge(aSegment1); + TopoDS_Edge anEdge2 = BRepBuilderAPI_MakeEdge(anArcOfCircle); + TopoDS_Edge anEdge3 = BRepBuilderAPI_MakeEdge(aSegment2); + TopoDS_Wire aWire = BRepBuilderAPI_MakeWire(anEdge1, anEdge2, anEdge3); + + // Complete Profile + gp_Ax1 xAxis = gp::OX(); + gp_Trsf aTrsf; + + aTrsf.SetMirror(xAxis); + BRepBuilderAPI_Transform aBRepTrsf(aWire, aTrsf); + TopoDS_Shape aMirroredShape = aBRepTrsf.Shape(); + TopoDS_Wire aMirroredWire = TopoDS::Wire(aMirroredShape); + + BRepBuilderAPI_MakeWire mkWire; + mkWire.Add(aWire); + mkWire.Add(aMirroredWire); + TopoDS_Wire myWireProfile = mkWire.Wire(); + + // Body : Prism the Profile + TopoDS_Face myFaceProfile = BRepBuilderAPI_MakeFace(myWireProfile); + gp_Vec aPrismVec(0, 0, myHeight); + TopoDS_Shape myBody = BRepPrimAPI_MakePrism(myFaceProfile, aPrismVec); + + // Body : Apply Fillets + BRepFilletAPI_MakeFillet mkFillet(myBody); + TopExp_Explorer anEdgeExplorer(myBody, TopAbs_EDGE); + while(anEdgeExplorer.More()){ + TopoDS_Edge anEdge = TopoDS::Edge(anEdgeExplorer.Current()); + //Add edge to fillet algorithm + mkFillet.Add(myThickness / 12., anEdge); + anEdgeExplorer.Next(); + } + + myBody = mkFillet.Shape(); + + // Body : Add the Neck + gp_Pnt neckLocation(0, 0, myHeight); + gp_Dir neckAxis = gp::DZ(); + gp_Ax2 neckAx2(neckLocation, neckAxis); + + Standard_Real myNeckRadius = myThickness / 4.; + Standard_Real myNeckHeight = myHeight / 10.; + + BRepPrimAPI_MakeCylinder MKCylinder(neckAx2, myNeckRadius, myNeckHeight); + TopoDS_Shape myNeck = MKCylinder.Shape(); + + myBody = BRepAlgoAPI_Fuse(myBody, myNeck); + + // Body : Create a Hollowed Solid + TopoDS_Face faceToRemove; + Standard_Real zMax = -1; + + for(TopExp_Explorer aFaceExplorer(myBody, TopAbs_FACE); aFaceExplorer.More(); aFaceExplorer.Next()){ + TopoDS_Face aFace = TopoDS::Face(aFaceExplorer.Current()); + // Check if is the top face of the bottle's neck + Handle(Geom_Surface) aSurface = BRep_Tool::Surface(aFace); + if(aSurface->DynamicType() == STANDARD_TYPE(Geom_Plane)){ + Handle(Geom_Plane) aPlane = Handle(Geom_Plane)::DownCast(aSurface); + gp_Pnt aPnt = aPlane->Location(); + Standard_Real aZ = aPnt.Z(); + if(aZ > zMax){ + zMax = aZ; + faceToRemove = aFace; + } + } + } + + TopTools_ListOfShape facesToRemove; + facesToRemove.Append(faceToRemove); + myBody = BRepOffsetAPI_MakeThickSolid(myBody, facesToRemove, -myThickness / 50, 1.e-3); + // Threading : Create Surfaces + Handle(Geom_CylindricalSurface) aCyl1 = new Geom_CylindricalSurface(neckAx2, myNeckRadius * 0.99); + Handle(Geom_CylindricalSurface) aCyl2 = new Geom_CylindricalSurface(neckAx2, myNeckRadius * 1.05); + + // Threading : Define 2D Curves + gp_Pnt2d aPnt(2. * M_PI, myNeckHeight / 2.); + gp_Dir2d aDir(2. * M_PI, myNeckHeight / 4.); + gp_Ax2d anAx2d(aPnt, aDir); + + Standard_Real aMajor = 2. * M_PI; + Standard_Real aMinor = myNeckHeight / 10; + + Handle(Geom2d_Ellipse) anEllipse1 = new Geom2d_Ellipse(anAx2d, aMajor, aMinor); + Handle(Geom2d_Ellipse) anEllipse2 = new Geom2d_Ellipse(anAx2d, aMajor, aMinor / 4); + Handle(Geom2d_TrimmedCurve) anArc1 = new Geom2d_TrimmedCurve(anEllipse1, 0, M_PI); + Handle(Geom2d_TrimmedCurve) anArc2 = new Geom2d_TrimmedCurve(anEllipse2, 0, M_PI); + gp_Pnt2d anEllipsePnt1 = anEllipse1->Value(0); + gp_Pnt2d anEllipsePnt2 = anEllipse1->Value(M_PI); + + Handle(Geom2d_TrimmedCurve) aSegment = GCE2d_MakeSegment(anEllipsePnt1, anEllipsePnt2); + // Threading : Build Edges and Wires + TopoDS_Edge anEdge1OnSurf1 = BRepBuilderAPI_MakeEdge(anArc1, aCyl1); + TopoDS_Edge anEdge2OnSurf1 = BRepBuilderAPI_MakeEdge(aSegment, aCyl1); + TopoDS_Edge anEdge1OnSurf2 = BRepBuilderAPI_MakeEdge(anArc2, aCyl2); + TopoDS_Edge anEdge2OnSurf2 = BRepBuilderAPI_MakeEdge(aSegment, aCyl2); + TopoDS_Wire threadingWire1 = BRepBuilderAPI_MakeWire(anEdge1OnSurf1, anEdge2OnSurf1); + TopoDS_Wire threadingWire2 = BRepBuilderAPI_MakeWire(anEdge1OnSurf2, anEdge2OnSurf2); + BRepLib::BuildCurves3d(threadingWire1); + BRepLib::BuildCurves3d(threadingWire2); + + // Create Threading + BRepOffsetAPI_ThruSections aTool(Standard_True); + aTool.AddWire(threadingWire1); + aTool.AddWire(threadingWire2); + aTool.CheckCompatibility(Standard_False); + + TopoDS_Shape myThreading = aTool.Shape(); + + // Building the Resulting Compound + TopoDS_Compound aRes; + BRep_Builder aBuilder; + aBuilder.MakeCompound (aRes); + aBuilder.Add (aRes, myBody); + aBuilder.Add (aRes, myThreading); + + return aRes; + } +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ diff --git a/dox/resources/occt_logo.png b/dox/resources/occt_logo.png new file mode 100644 index 0000000000000000000000000000000000000000..0e5a04cacb8cf9782077c24dcc92869cfa3ee2af GIT binary patch literal 17506 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 source dox/start.tcl [arguments] + +source [file join [file dirname [info script]] occdoc.tcl] +occdoc {*}$argv \ No newline at end of file diff --git a/dox/technical_overview/images/technical_overview_over.png b/dox/technical_overview/images/technical_overview_over.png new file mode 100644 index 0000000000000000000000000000000000000000..a24710aaa38baf40379e63cc1716cae0ff87f173 GIT binary patch literal 9737 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 literal 0 HcmV?d00001 diff --git a/dox/technical_overview/technical_overview.md b/dox/technical_overview/technical_overview.md new file mode 100644 index 0000000000..dbe751f2f5 --- /dev/null +++ b/dox/technical_overview/technical_overview.md @@ -0,0 +1,3017 @@ +Technical Overview {#technical_overview} +======================================== + +@section OCCT_TOVW_SECTION_1 Product Overview + +Open CASCADE Technology is an object-oriented C++ class librarLzlz ljky designed for rapid +production of sophisticated domain-specific design applications. A typical application +developed using OCCT deals with two or three-dimensional (2D or 3D) geometric modeling +in general-purpose or specialized Computer Aided Design (CAD) systems, manufacturing +or analysis applications, simulation applications, or illustration tools. OCCT Object +Libraries help you to develop your applications significantly faster. + +![](/technical_overview/images/technical_overview_over.png "") + +The OCCT Library provides the following services: + + + * 2D and 3D geometric modeling toolkits which allow you to model any type of object: + * Creating primitives such as prism, cylinder, cone and torus + * Performing Boolean operations (addition, subtraction and intersection) + * Tweaking constructions using fillets, chamfers and drafts + * Modeling constructions using offsets, shelling, hollowing and sweeps + * Computing properties such as surface, volume, center of gravity, curvature + * Computing geometry using projection, interpolation, approximation + * Visualization services that allow you to manage object display and manipulate views, for example: + * 3D rotation + * Zoom + * Shading + * The application framework features: + * Association between non-geometric application data and geometry + * Parameterization of models + * Java Application Desktop (JAD), a framework for creating your Graphical User Interfaces (GUI) + * Data exchange providing import and export functions of OCCT models to and from standard formats such as IGES and STEP + +OCCT Library is developed and marketed by OPEN CASCADE Company. The library is designed +to be truly modular and extensible. As such, they separate C++ classes for: + + * Defining data structures (geometric modeling, display and graphic selection) + * Implementing complex algorithms + * Providing Application Programming Interfaces (APIs) + + +Related classes are grouped into packages to prevent any class-name conflicts; +C++ class-names are prefixed by a package name. For example, all classes defining +3D geometric objects belong to the Geompackage. +In Geom, the class implementing Bezier surfaces is called BezierSurface, and its full name is Geom_BezierSurface. + +Packages are then archived into libraries, to which you can link your application. + +Finally, libraries are grouped into six modules: Foundation Classes, +Modeling Data, Modeling Algorithms, Visualization, Data Exchange and Application Framework. + +In addition Draw Test Harness (Draw) provides testing tools for the Visualization, +Modeling Algorithms, Application Framework and Data Exchange modules. +These tools include a wide range of interpreted commands which allow experimenting with OCCT. + +Refer to the Technical Overview and OCCT documentation for details about the services provided in each module. + +@section OCCT_TOVW_SECTION_2 Foundation Classes + + +Foundation Classes provide a variety of general-purpose services such as: + + * Primitive types, strings and various types of quantities + * Automated management of heap memory + * Exception handling + * Classes for manipulating data collections + * Math tools such as vectors, matrices and primitive geometric types + * Basic services for saving data in ASCII files + +These services are organized into the following libraries: + + * Kernel Classes + * Math Utilities + * Basic Persistence  + +The technical overview provides only a basic description of the libraries. Please, refer for more details to Foundation Classes User's guide + +See also: our web site at E-learning and Training. + +@subsection OCCT_TOVW_SECTION_2_1 Kernel Classes + + +Root Classes +------------ + +Root Classes, primarily implemented in the Standard package, are the predefined classes on which +all other Open CASCADE Technology classes are built. They provide: + + * Primitive types such as Boolean, Character, Integer or Real + * Memory manager based on reference counting for optimizing the allocation and deallocation of large numbers of small C++ objects + * Standard_Transient class automating memory management through smart pointers + * OCCT Handle; most of OCCT classes inherit from this base class. + * Management of exceptions, + * Encapsulation of C++ streams. + +Quantities +----------- + +Quantity classes provide the following services: + + * Definition of primitive types representing most of mathematical and physical quantities + * Unit conversion tools. + * Resources to manage time information such as dates and time periods + * Resources to manage color definition + +A mathematical quantity is characterized by the name and the value (real). +A physical quantity is characterized by the name, the value (real) and the unit. +The unit may be either an international unit complying with the International Unit System (SI) +or a user defined unit. The unit is managed by the physical quantity user. + +The fact that both physical and mathematical quantities are manipulated as real +values means that : + + * They are defined as aliases of real values, so all functions provided by the Standard_Real class are available on each quantity. + * It is possible to mix several physical quantities in a mathematical or physical formula involving real values. + +Quantity package includes all commonly used basic physical quantities. + +Exceptions +---------- + +Exception classes list all the exceptions, which can be raised by any OCCT function. + +Each exception inherits from Standard_Failure either directly or by inheriting from +another exception. + +Exceptions describe anomalies which can occur during the execution of a method. With +the raising of an exception, the normal course of program execution is abandoned. +The execution of actions in response to this situation is called the treatment of +the exception. + + +The methods try & catch are redefined in OCCT to work properly on any platform. Nevertheless +they call native mechanisms each time it is possible. The only reason not to use +native exceptions is that they may not work properly on some compilers. In this case, +a specific OCCT code is used instead. + + +Strings +------- + +Strings are classes that handle dynamically sized sequences of characters based on +ASCII/Unicode UTF-8 (normal 8-bit character type) +and UTF-16/UCS-2 (16-bit character type). They provide editing operations with built-in +memory management which make the relative objects easier to use than ordinary character +arrays. + +String classes provide the following services to manipulate character strings: + * Editing operations on string objects, using a built-in string manager + * Handling of dynamically-sized sequences of characters + * Conversion from/to ASCII and UTF-8 strings. + +Strings may also be manipulated by handles and therefore, can be shared. + +These classes are implemented in TCollection and NCollection packages. + + +Collections +----------- + +Apart from strings, the TCollection package contains classes of dynamically sized +aggregates of data. They include a wide range of collections. + + * Arrays (unidimensional and bidimensional) are generally used for quick access to an item. + Note that an array is a fixed-sized aggregate. + * Sequences are ordered collections of non-unique objects. + A sequence item is longer to access than an array item: only an exploration in sequence + is efficient (but sequences are not adapted for numerous explorations). + Arrays and sequences are commonly used as data structures for more complex objects. + * Maps are dynamic structures where the size is constantly adapted to the number of inserted + items and access to an item is the fastest. Maps structures are commonly used in + cases of numerous explorations: they are typically internal data structures for complex + algorithms. Sets generate the same results as maps but computation time is considerable. + * Lists, queues and stacks, which are minor structures similar to sequences but with different + algorithms to explore them + * Specific iterators for sequences, maps, and stacks. + +Most collections follow value semantics: their instances are the actual collections, +not handles to a collection. Only arrays, sequences and sets may also be manipulated +by handle, and therefore shared. + + +Collection classes are generic (C++ template-like), so they can contain +a variety of objects which do not necessarily inherit from +a unique root class. When you need to use a collection of a given object type, you +must instantiate the collection for this specific type. Once the code for this declaration +is compiled, all functions available on the generic collection are available on your +instantiated class. + +Each collection directly used as an argument in Open CASCADE Technology public syntax +is instantiated in an OCCT component using the corresponding generic class in package + TCollection, by means of compiling the CDL declaration of the instance. +Thus OCCT generic classes require compilation of definitions in the CDL language and therefore +can only be instantiated in WOK. + +If you are not using CDL in your project (CDL compilation under WOK is necessary +to instantiate any generic Collection from package TCollection), then you should +use the Collections defined in NCollection package. It contains definitions of the +same generic collection classes described above, but in a form of C++ templates. +Therefore, to instantiate any collection type no additional support is required beyond +the ANSI C++ compiler. + +@subsection OCCT_TOVW_SECTION_2_2 Math Utilities + + +Vectors and Matrices +-------------------- + +The Vector and Matrix classes provide commonly used mathematical algorithms which +include: + + * Basic calculations involving vectors and matrices; + * Computation of eigenvalues and eigenvectors of a square matrix; + * Solvers for a set of linear algebraic equations; + * Algorithms to find the roots of a set of non-linear equations; + * Algorithms to find the minimum function of one or more independent variables. + +These classes also provide a data structure to represent any expression, +relation, or function used in mathematics, including the assignment of variables. + +Vectors and matrices have arbitrary ranges which must be defined at declaration time +and cannot be changed after declaration. + +~~~ + math_Vector v(1, 3); + // a vector of dimension 3 with range (1..3) + + math_Matrix m(0, 2, 0, 2); + // a matrix of dimension 3x3 with range (0..2, 0..2) + + math_Vector v(N1, N2); + // a vector of dimension N2-N1+1 with range (N1..N2) +~~~ + +Vector and Matrix objects follow "value semantics", that is, they cannot be shared +and are copied though assignment. + +~~~ + math_Vector v1(1, 3), v2(0, 2); + + v2 = v1; // v1 is copied into v2 +           // a modification of v1 does not affect v2 +~~~ + +Vector and Matrix elements can be retrieved using indexes, which must be in the range +defined upon Vector/Matrix creation. The elements can be initialized with some numerical +value upon creation as well. + +~~~ + math_Vector v(1, 3); + math_Matrix m(1, 3, 1, 3); + Standard_Real value; + + v(2) = 1.0; + value = v(1); + m(1, 3) = 1.0; + value = m(2, 2); +~~~ + +Some operations on Vector and Matrix objects may not be legal. In this case an exception +is raised. Two standard exceptions are used: + *  Standard_DimensionError exception is raised when two matrices or vectors involved +in an operation are of incompatible dimensions. + *  Standard_RangeError exception is raised if an attempt to access outside the range +defined upon creation of a vector or a matrix is made. + +~~~ + math_Vector v1(1, 3), v2(1, 2), v3(0, 2); + + v1 = v2;    // error: +           // Standard_DimensionError is raised + + v1 = v3;    // OK: ranges are not equal +           // but dimensions are compatible + + v1(0) = 2.0; // error: +           // Standard_RangeError is raised +~~~ + + +Fundamental Geometry Types +------------------------- + +The Fundamental Geometry Types component groups the following packages: + + * geometric processor package gp; + * GeomAbs package, which provides enumerations generally used in geometry. + +gp package is a STEP-compliant implementation of basic geometric and algebraic +entities, used to define and manipulate elementary data structures. + +In particular, gp provides: + + * descriptions of primitive geometric shapes, such as: + * Points; + * Vectors; + * Lines; + * Circles and conics; + * Planes and elementary surfaces; + * positioning of these shapes in space or in a plane by means of an axis or a coordinate system; + * definition and application of geometric transformations to these shapes: + * Translations; + * Rotations; + * Symmetries; + * Scaling transformations; + * Composed transformations; + * Tools (coordinates and matrices) for algebraic computation. + +These functions are defined in 3D space and in the plane. + + gp curves and surfaces are analytic: there is no parameterization and no orientation +on gp entities, i.e. these entities do not provide functions which work with these properties. +If you need, you may use more evolved data structures provided by Geom +(in 3D space) and Geom2d (in the plane). However, the definition of gp entities +is identical to the one of equivalent Geom and Geom2d entities, and they are located +in the plane or in space with the same kind of positioning systems. +They implicitly contain the orientation, which they express +on the Geom and Geom2d entities, and they induce the definition of their parameterization. + + +Therefore, it is easy to give an implicit parameterization to gp curves and surfaces, +which is the parametarization of the equivalent Geom or Geom2d entity. This property +is particularly useful when computing projections or intersections, or for operations +involving complex algorithms where it is particularly important to manipulate the +simplest data structures, i.e. those of gp. Thus, the ElCLib and ElSLib packages +provide functions to compute: + + * the point of parameter u on a 2D or 3D gp curve, + * the point of parameter (u,v) on a gp elementary surface, and + * any derivative vector at this point. + +Note: the gp entities cannot be shared when they are inside more complex data structures. + + +Common Mathematical Algorithms +---------------------- + +Common mathematical algorithms provided in OCCT include: + + * Algorithms to solve a set of linear algebraic equations, + * Algorithms to find the minimum of a function of one or more independent variables, + * Algorithms to find roots of one or of a set of non-linear equations, + * An algorithm to find the eigenvalues and eigenvectors of a square matrix. + + +@section OCCT_TOVW_SECTION_3 Modeling Data + +Modeling Data supplies data structures to represent 2D and 3D geometric models. + +![](/technical_overview/images/technical_overview_md.png "") + +These services are organized into the following libraries: + + * 2D Geometry + * 3D Geometry + * Geometry Utilities + * Topology + +The technical overview provides only a basic description of the libraries. Please, +refer for more details to Modeling Data User's guide + +3D geometric models are stored in OCCT native BREP format. It is possible to learn +more about it in BREP Format Description White Paper + +See also: our web site at E-learning and Training. + +@subsection OCCT_TOVW_SECTION_3_1 2D Geometry Types + + Geom2d package provides an implementation of 2D geometric objects complying with +STEP, part 42. In particular, it provides functions for: + + * description of points, vectors and curves, + * their positioning in the plane using coordinate systems, + * their geometric transformation, by applying translations, rotations, symmetries, scaling transformations and combinations thereof. + +The key characteristic of Geom2d curves is that they are parameterized. +Each class provides functions to work with the parametric equation of the curve, +and, in particular, to compute the point of parameter u on a curve and the derivative vectors of order 1, 2.., N at this point. + +As a consequence of the parameterization, a Geom2d curve is naturally oriented. + +Parameterization and orientation differentiate elementary Geom2d curves from their +equivalent as provided by gp package. Geom2d package provides conversion +functions to transform a Geom2d object into a gp object, and vice-versa, when this is possible. + +Moreover, Geom2d package provides more complex curves, including Bezier curves, +BSpline curves, trimmed curves and offset curves. + + Geom2d objects are organized according to an inheritance structure over several levels. +Thus, an ellipse (specific class Geom2d_Ellipse) is also a conical curve and inherits +from the abstract class Geom2d_Conic, while a Bezier curve (concrete class Geom2d_BezierCurve) +is also a bounded curve and inherits from the abstract class Geom2d_BoundedCurve; +both these examples are also curves (abstract class Geom2d_Curve). Curves, points +and vectors inherit from the abstract class Geom2d_Geometry, which describes the properties +common to any geometric object from the Geom2d package. + +This inheritance structure is open and it is possible to describe new objects which +inherit from those provided in the Geom2d package, provided that they respect the +behavior of the classes from which they are to inherit. + +Finally, Geom2d objects can be shared within more complex data structures. +This is why they are used within topological data structures, for example. + + Geom2d package uses the services of the gp package to: + + * implement elementary algebraic calculus and basic analytic geometry, + * describe geometric transformations which can be applied to Geom2d objects, + * describe the elementary data structures of Geom2d objects. + +However, the Geom2d package essentially provides data structures and not algorithms. +You can refer to the GCE2d package to find more evolved construction algorithms for Geom2d objects. + +@subsection OCCT_TOVW_SECTION_3_2 3D Geometry Types + +The Geom package provides an implementation of 3D geometric objects complying with +STEP, part 42. In particular, it provides functions for: + + * description of points, vectors, curves and surfaces, + * their positioning in 3D space using axis or coordinate systems, and + * their geometric transformation, by applying translations, rotations, symmetries, scaling transformations and combinations thereof. + +The key characteristic of Geom curves and surfaces is that they are parameterized. +Each class provides functions to work with the parametric equation of the curve or +surface, and, in particular, to compute: + + * the point of parameter u on a curve, or + * the point of parameters (u, v) on a surface. + +together with the derivative vectors of order 1, 2, ... N at this point. + +As a consequence of this parameterization, a Geom curve or surface is naturally oriented. + +Parameterization and orientation differentiate elementary Geom curves and surfaces from the classes of the same (or similar) names found in the gp package. +The Geom package also provides conversion functions to transform a Geom object into a gp object, and vice-versa, when such transformation is possible. + +Moreover, the Geom package provides more complex curves and surfaces, including: + * Bezier and BSpline curves and surfaces, + * swept surfaces, for example surfaces of revolution and surfaces of linear extrusion, + * trimmed curves and surfaces, and + * offset curves and surfaces. + +Geom objects are organized according to an inheritance structure over several levels. +Thus, a sphere (concrete class Geom_SphericalSurface) is also an elementary surface and inherits from the abstract class Geom_ElementarySurface, while a Bezier surface (concrete class Geom_BezierSurface) is also a bounded surface and inherits from the abstract class Geom_BoundedSurface; both these examples are also surfaces (abstract class Geom_Surface). Curves, points and vectors inherit from the abstract class Geom_Geometry, which describes the properties common to any geometric object from the Geom package. + +This inheritance structure is open and it is possible to describe new objects, which inherit from those provided in the Geom package, on the condition that they respect the behavior of the classes from which they are to inherit. + +Finally, Geom objects can be shared within more complex data structures. This is why they are used within topological data structures, for example. + +The Geom package uses the services of the gp package to: + * implement elementary algebraic calculus and basic analytic geometry, + * describe geometric transformations which can be applied to Geom objects, + * describe the elementary data structures of Geom objects. + +However, the Geom package essentially provides data structures and not algorithms. +You can refer to the GC package to find more evolved construction algorithms for +Geom objects. + + +Adaptors for Curves and Surfaces +----------------- + +Some Open CASCADE Technology general algorithms may work theoretically on numerous types of curves or surfaces. +To do this, they simply get the services required of the analysed curve or surface through an interface so as to a single API, whatever the type of curve or surface. These interfaces are called adaptors. +For example, Adaptor3d_Curve is the abstract class which provides the required services by an algorithm which uses any 3d curve. + + GeomAdaptor package provides interfaces: + + * On a Geom curve; + * On a curve lying on a Geom surface; + * On a Geom surface; + + Geom2dAdaptor package provides interfaces : + + * On a Geom2d curve. + + BRepAdaptor package provides interfaces: + + * On a Face + * On an Edge + +When you write an algorithm which operates on geometric objects, use Adaptor3d (or Adaptor2d) objects. +As a result, you can use the algorithm with any kind of object, +if you provide for this object, an interface derived from Adaptor3d or Adaptor2d. +These interfaces are easy to use: simply create an adapted curve or surface from a Geom2d curve, +and then use this adapted curve as an argument for the algorithm which requires it. + + +@subsection OCCT_TOVW_SECTION_3_3 Geometry Utilities + +This library provides standard high-level functions in 2D and 3D geometry such as: + + * Direct construction of algorithms; + * Approximation of curves and surfaces from points; + * Conversion of more elementary geometry to BSpline curves and surfaces; + * Calculation of points on a 2D or 3D curve; + * Calculation of extrema between two geometries. + +Direct Construction +------- + +The gp, Geom2d and Geom packages describe elementary data structures of simple geometric +objects. The constructors of these objects are elementary: the construction arguments +are fields by which the objects are represented in their data structure. + + +On the other hand, the gce, GCE2d and GC packages provided +by the Direct Construction component construct the same types of objects +as gp, Geom2d and Geom respectively. +However, the former implement geometric construction algorithms that translate the +constructor's arguments into the data structure specific to each object. + + +Algorithms implemented by these packages are simple: there is no creation of objects +defined by advanced positional constraints (for more information on this subject, +see Geom2dGcc and GccAna which describe geometry by constraints). + + + gce, GCE2d and GC each offer a series of classes of construction algorithms. + + +For example, the class gce_MakeCirc provides a framework +for defining eight problems encountered in the geometric construction of circles, +and implementing the eight related construction algorithms. + +The object created (or implemented) is an algorithm which can be consulted to find out, in particular: + + * its result, which is a gp_Circ, and + * its status. Here, the status indicates whether or not the construction was successful. + +If it was unsuccessful, the status gives the reason for the failure. + +~~~~ + gp_Pnt P1 (0.,0.,0.); + gp_Pnt P2 (0.,10.,0.); + gp_Pnt P3 (10.,0.,0.); + gce_MakeCirc MC (P1,P2,P3); + if (MC.IsDone()) { +     const gp_Circ& C = MC.Value(); + } +~~~~ + +In addition, gce, GCE2d and GC each have a Root class. This class is the root of +all the classes in the package which return a status. The returned status (successful +construction or construction error) is described by the enumeration gce_ErrorType. + +Note: classes which construct geometric transformations do not return a status, and +therefore do not inherit from Root. + +Approximations +----------- + +Approximation of Curves and Surfaces groups together a variety of functions used in 2D and 3D geometry for: + + * the interpolation of a set of 2D points using a 2D BSpline or Bezier curve; + * the approximation of a set of 2D points using a 2D BSpline or Bezier curve; + * the interpolation of a set of 3D points using a 3D BSpline or Bezier curve, or a BSpline surface; + * the approximation of a set of 3D points using a 3D BSpline or Bezier curve, or a BSpline surface. + +You can program approximations in two ways: + + * Using high-level functions, designed to provide a simple method for obtaining approximations with minimal programming, + * Using low-level functions, designed for users requiring more control over the approximations. + +The low-level functions provide a second API with functions to: + + * Define compulsory tangents for an approximation. These tangents have origins and extremities. + * Approximate a set of curves in parallel to respect identical parameterization. + * Smooth approximations. This is to produce a faired curve. + +The classes AppDef_MultiPointConstraints and AppDef_MultiLines allow organizing the data. +The classes AppDef_Compute, AppDef_BSplineCompute and AppDef_TheVariational +classes perform the approximation itself using Bezier curves, BSpline curves, and smooth BSpline curves, respectively. + +You can also find functions to compute: + + * The minimal box which includes a set of points + * The mean plane, line or point of a set of coplanar, collinear or coincident points. + +Conversion to and from BSplines +---------------------------- + +The Conversion to and from BSplines component has the following two distinct purposes: + * Firstly, it provides a homogenous formulation which can be used to describe any curve or surface. + This is useful for writing algorithms for a single data structure model. + The BSpline formulation can be used to represent most basic geometric objects provided + by the components which describe geometric data structures ("Fundamental Geometry Types", "2D Geometry Types" and "3D Geometry Types" components). + * Secondly, it can be used to divide a BSpline curve or surface into a series of curves or surfaces, + thereby providing a higher degree of continuity. This is useful for writing algorithms + which require a specific degree of continuity in the objects to which they are applied. + Discontinuities are situated on the boundaries of objects only. + +The "Conversion to and from BSplines" component is composed of three packages. + +The Convert package provides algorithms to convert the following into a BSpline curve or surface: + + * a bounded curve based on an elementary 2D curve (line, circle or conic) from the gp package, + * a bounded surface based on an elementary surface (cylinder, cone, sphere or torus) from the gp package, + * a series of adjacent 2D or 3D Bezier curves defined by their poles. + +These algorithms compute the data needed to define the resulting BSpline curve or surface. +This elementary data (degrees, periodic characteristics, poles and weights, knots and multiplicities) +may then be used directly in an algorithm, or can be used to construct the curve or the surface +by calling the appropriate constructor provided by the classes Geom2d_BSplineCurve, Geom_BSplineCurve or Geom_BSplineSurface. + +The Geom2dConvert package provides the following: + + * a global function which is used to construct a BSpline curve from a bounded curve based on a 2D curve from the Geom2d package, + * a splitting algorithm which computes the points at which a 2D BSpline curve should be cut in order to obtain arcs with the same degree of continuity, + * global functions used to construct the BSpline curves created by this splitting algorithm, or by other types of segmentation of the BSpline curve, + * an algorithm which converts a 2D BSpline curve into a series of adjacent Bezier curves. + +The GeomConvert package also provides the following: + + * a global function used to construct a BSpline curve from a bounded curve based on a curve from the Geom package, + * a splitting algorithm, which computes the points at which a BSpline curve should be cut in order to obtain arcs with the same degree of continuity, + * global functions to construct BSpline curves created by this splitting algorithm, or by other types of BSpline curve segmentation, + * an algorithm, which converts a BSpline curve into a series of adjacent Bezier curves, + * a global function to construct a BSpline surface from a bounded surface based on a surface from the Geom package, + * a splitting algorithm, which determines the curves along which a BSpline surface should be cut in order to obtain patches with the same degree of continuity, + * global functions to construct BSpline surfaces created by this splitting algorithm, or by other types of BSpline surface segmentation, + * an algorithm, which converts a BSpline surface into a series of adjacent Bezier surfaces, + * an algorithm, which converts a grid of adjacent Bezier surfaces into a BSpline surface. + +Points on Curves +-------- + +The Making Points on Curves component comprises high level functions providing an Application Programming Interface for complex algorithms that compute points on a 2D or 3D curve. The functions use various methods. + +The algorithms result in the following: + + * a point on a curve, situated at a given curvilinear distance from another point on the curve + * a distribution of points situated at constant curvilinear intervals along a curve + * a distribution of points at a constant rise (i.e. respecting a criterion of maximum rise between the curve and the polygon that results from the computed points) along a curve + * the length of a curve. + +@subsection OCCT_TOVW_SECTION_3_4 Topology + +Topological library allows you to build pure topological data structures.. + +Topology defines relationships between simple geometric entities. In this way, +you can model complex shapes as assemblies of simpler entities. +Due to a built-in non-manifold (or mixed-dimensional) feature, you can build models mixing: + + * 0D entities such as points; + * 1D entities such as curves; + * 2D entities such as surfaces; + * 3D entities such as volumes. + +You can, for example, represent a single object made of several distinct bodies +containing embedded curves and surfaces connected or non-connected to an outer boundary. + +Abstract topological data structure describes a basic entity - a shape, +which can be divided into the following component topologies: + + * Vertex * a zero-dimensional shape corresponding to a point in geometry; + * Edge * a shape corresponding to a curve, and bound by a vertex at each extremity; + * Wire * a sequence of edges connected by their vertices; + * Face * part of a plane (in 2D geometry) or a surface (in 3D geometry) bounded by a closed wire; + * Shell * a collection of faces connected by some edges of their wire boundaries; + * Solid * a part of 3D space bound by a shell; + * Compound solid * a collection of solids. + +The wire and the solid can be either infinite or closed. + +A face with 3D underlying geometry may also refer to a collection of connected triangles +that approximate the underlying surface. The surfaces can be undefined +leaving the faces represented by triangles only. If so, the model is purely polyhedral. + +Topology defines the relationship between simple geometric entities, +which can thus be linked together to represent complex shapes. + +Abstract Topology is provided by six packages. +The first three packages describe the topological data structure used in Open CASCADE Technology: + + * TopAbs package provides general resources for topology-driven applications. It contains enumerations that are used to describe basic topological notions: topological shape, orientation and state. It also provides methods to manage these enumerations. + * TopLoc package provides resources to handle 3D local coordinate systems: Datum3Dand Location. Datum3D describes an elementary coordinate system, while Location comprises a series of elementary coordinate systems. + * TopoDS package describes classes to model and build data structures that are purely topological. + +Three additional packages provide tools to access and manipulate this abstract topology: + + * TopTools package provides basic tools to use on topological data structures. + * TopExp package provides classes to explore and manipulate the topological data structures described in the TopoDS package. + * BRepTools package provides classes to explore, manipulate, read and write BRep data structures. These more complex data structures combine topological descriptions with additional geometric information, and include rules for evaluating equivalence of different possible representations of the same object, for example, a point. + +@subsection OCCT_TOVW_SECTION_3_5 Properties of Shapes + +Local Properties of Shapes +---------------------- + +BRepLProp package provides the Local Properties of Shapes component, +which contains algorithms computing various local properties on edges and faces in a BRep model. + +The local properties which may be queried are: + + * for a point of parameter u on a curve which supports an edge : + * the point, + * the derivative vectors, up to the third degree, + * the tangent vector, + * the normal, + * the curvature, and the center of curvature; + * for a point of parameter (u, v) on a surface which supports a face : + * the point, + * the derivative vectors, up to the second degree, + * the tangent vectors to the u and v isoparametric curves, + * the normal vector, + * the minimum or maximum curvature, and the corresponding directions of curvature; + * the degree of continuity of a curve which supports an edge, built by the concatenation of two other edges, at their junction point. + +Analyzed edges and faces are described as BRepAdaptor curves and surfaces, +which provide shapes with an interface for the description of their geometric support. +The base point for local properties is defined by its u parameter value on a curve, or its (u, v) parameter values on a surface. + +Local Properties of Curves and Surfaces +------------------------------------ + +The "Local Properties of Curves and Surfaces" component provides algorithms for computing various local +properties on a Geom curve (in 2D or 3D space) or a surface. It is composed of: + + * Geom2dLProp package, which provides local properties on 2D curves + * GeomLProp package, which provides local properties on 3D curves and surfaces + * LProp package, which provides an enumeration used to characterize a particular point on a 2D curve. + +Curves are either Geom_Curve curves (in 3D space) or Geom2d_Curve curves (in the plane). +Surfaces are Geom_Surface surfaces. The point on which local properties are calculated +is defined by its u parameter value on a curve, and its (u,v) parameter values on a surface. + +It is possible to query the same local properties for points as mentioned above, and additionally for 2D curves: + + * the points corresponding to a minimum or a maximum of curvature; + * the inflection points. + +Global Properties of Shapes +------------------ +The Global Properties of Shapes component provides algorithms for computing the global +properties of a composite geometric system in 3D space, and frameworks to query the computed results. + +The global properties computed for a system are : + + * mass, + * mass center, + * matrix of inertia, + * moment about an axis, + * radius of gyration about an axis, + * principal properties of inertia such as principal axis, principal moments, and principal radius of gyration. + +Geometric systems are generally defined as shapes. Depending on the way they are analyzed, these shapes will give properties of: + + * lines induced from the edges of the shape, + * surfaces induced from the faces of the shape, or + * volumes induced from the solid bounded by the shape. + +The global properties of several systems may be brought together to give the global properties of the system composed of the sum of all individual systems. + +The Global Properties of Shapes component is composed of : + + * seven functions for computing global properties of a shape: one function for lines, two functions for surfaces and four functions for volumes. The choice of functions depends on input parameters and algorithms used for computation ( BRepGProp global functions), + * a framework for computing global properties for a set of points ( GProp_PGProps), + * and a general framework to : + * bring together the global properties retained by several more elementary frameworks, and + * provide a general programming interface to consult computed global properties. + +@subsection OCCT_TOVW_SECTION_3_6 Examples + +How to compute the curve length +---------------------- + +To compute curve length, use the method AbscissaPoint::Length from GCPnts. + +This function is used only for initializing a framework to compute the length of a curve (or a series of curves). + +The adapted curves are: + + * Adaptor_Curve2d for 2D curves + * Adaptor_Curve for 3D curves. + +The adapted curve is created in the following way: + +In 2D: + +~~~~~~~~~~~ + Handle(Geom2d_Curve) mycurve = ... ; + Geom2dAdaptor_Curve C (mycurve) ; +~~~~~~~~~~~ + +In 3D: + +~~~~~~~~~ + Handle(Geom_Curve) mycurve = ... ; + GeomAdaptor_Curve C (mycurve) ; +~~~~~~~~~ + + +The length of the curve is then computed using this curve object: + +~~~~~~~~ + GCPnts_AbscissaPoint myAlgo () ; + Standard_Real L = myAlgo.Length( C ) ; +~~~~~~~~ + +How to check the surface concavity +-------------------------------- + +To check the concavity of a surface, proceed as follows: + + 1. Sample the surface and compute at each point the Gaussian curvature. + 2. If the value of the curvature changes of sign, the surface is concave or convex depending on the point of view. + 3. To compute a Gaussian curvature, use the class SLprops from GeomLProp, which instantiates the generic class SLProps from LProp and use the method GaussianCurvature. + +How to approximate a curve with respect to tangencies +-------------------------------------------- + +To approximate a curve with respect to tangencies, follow these steps: + + 1. Create an object of type AppDef_MultiPointConstraints from the set of points to approximate and use the method SetTang to set the tangency vectors. + 2. Create an object of type AppDef_MultiLine from the AppDef_MultiPointConstraint. + 3. Use AppDef_BSplineCompute, which instantiates Approx_BSplineComputeLine to perform the approximation. + +How to extract the underlying geometry from shapes +-------------------------------------- + +To extract the underlying geometry from a Shape, use the following methods: + + * BRep_Tool::Surface to get the geometric surface from a face. + * BRep_Tool::Curve to get the 3d geometric curve from an edge. + * BRep_Tool::CurveOnSurface to get the 2d geometric curve of an edge, defined in the parametric space of a face. + * BRep_Tool::Pnt to get the 3D point from a vertex. + +Some of these methods have a location as argument. + +For example, when you use S1 = BRep_Tool::Surface(F,L), you then get the surface stored in TShape. + +To use this surface in the same position as the face, you have to apply +a transformation to it corresponding to the location of the face as follows: + +~~~~~~~~~~~~ + gp_Trsf T(L) ; + S2 = S1->Moved(T) ; +~~~~~~~~~~~~ + +The same method used without location as argument is S3 = BRep_Tool : : Surface(F) +returns a Surface in position, according to the location. S3 and S2 are geometrically equivalent surfaces. + +Warning: with the first method, you get a pointer on the surface stored in the shape. +Do not modify the surface because you will modify the shape and may produce an inconsistent model. +With the second method, you get a copy of the surface on which the location has been applied. +Note: you can use also a topological object directly just as if it +were a geometric one by using the services of BRepAdaptor classes. + +How to get the coordinates of a vertex +----------------------------------- + +To recover the UV coordinates of vertices, +use BRep_Tool::Parameters const TopoDS_Vertex& V,const TopoDS_Face& F), +which returns the U and V parameters of the vertex V on the face F as a gp_Pnt2d. + +How to explore a Wire +--------------------- + +To explore the edges of a wire in a contiguous order, use BrepTools_WireExplorer class. + +~~~~ + TopoDS_Wire myWire =&ldots;. + BRepTools_WireExplorer Ex; + for (Ex.Init(myWire); Ex.More(); Ex.Next()) { + TopoDS_Edge currentedge = Ex.Current(); + // Process current edge + } +~~~~ + +How to merge bspline curves +-------------------------- + +To merge joined bspline curves use the following methods: + +~~~~ + void GeomConvert::ConcatG1 + TColGeom_Array1OfBSplineCurve& ArrayOfCurves, + const TColStd_Array1OfReal& ArrayOfToler, + Handle(TColGeom_HArray1OfBSplineCurve) & ArrayOfConcatenated, + const Standard_Boolean ClosedG1Flag, + const Standard_Real ClosedTolerance) +~~~~ + +This method concatenates according to G1 (tangency continuity along the curve) the +ArrayOfCurves as far as possible. The following arguments are used: + + * ArrayOfCurves must have dimension bounds [0, N-1], N * number of curves to be merged. + * ArrayOfToler contains the biggest tolerance of the two points shared by two consecutive curves. Its dimension is: [0, N-2]. + * ArrayOfConcatenated contains results of operation: one or more, when impossible to merge all curves from ArrayOfCurves into one, new bspline curves are created. + * ClosedG1Flag indicates if the ArrayOfCurves is closed or not. + * If ClosedG1Flag = Standard_True, ClosedTolerance contains the biggest tolerance of the two points which are at the closure, otherwise its value is 0.0. + +~~~~ + void GeomConvert::ConcatC1 + TColGeom_Array1OfBSplineCurve& ArrayOfCurves, + const TColStd_Array1OfReal& ArrayOfToler, + Handle(TColStd_HArray1OfInteger)& ArrayOfIndices, + Handle(TColGeom_HArray1OfBSplineCurve)& ArrayOfConcatenated, + const Standard_Boolean ClosedG1Flag, + const Standard_Real ClosedTolerance, + const Standard_Real AngularTolerance) +~~~~ + +This method concatenates according to C1 (first derivative continuity along the curve) the +ArrayOfCurves as far possible. The following arguments are used (additionally to the mentioned above): + +* ArrayOfIndices contains indices that define curves from ArrayOfCurves which are beginning curves for each group of curves merged into a new curve. +* AngularTolerance is used to check the continuity of tangencies. + +~~~~ + void GeomConvert::ConcatC1 + TColGeom_Array1OfBSplineCurve& ArrayOfCurves, + const TColStd_Array1OfReal& ArrayOfToler, + Handle(TColStd_HArray1OfInteger)& ArrayOfIndices, + Handle(TColGeom_HArray1OfBSplineCurve)& ArrayOfConcatenated, + const Standard_Boolean ClosedG1Flag, + const Standard_Real ClosedTolerance) +~~~~ +This method is the same as the previous one, except for that AngularTolerance = Precision::Angular() + +It is also possible to use class GeomConvert_CompCurveToBSplineCurve. +This class provides methods to concatenate several restricted curves to a bspline curve. +Non-bspline curves are converted to bspline before concatenation. + +Constructor: +~~~~~~~~~~ + GeomConvert_CompCurveToBSplineCurve:: + GeomConvert_CompCurveToBSplineCurve(const Handle(Geom_BoundedCurve)& BasisCurve, const Convert_ParameterisationType Parameterization) + BasisCurve * beginning curve; +~~~~~~~~~~ + +Parameterization defines the ways of conversion in bspline (by default Convert_TgtThetaOver2). + +The method to add a new curve is: +~~~~ + Standard_Boolean GeomConvert_CompCurveToBSplineCurve:: + Add(const Handle(Geom_BoundedCurve)& NewCurve, + const Standard_Real Tolerance, + const Standard_Boolean After, + const Standard_Boolean WithRatio, + const Standard_Integer MinM) +~~~~ + +It returns False if the curve is not C0 with the BSplineCurve. + +Tolerance is used to check the continuity and decrease the Multiplicity +at the common Knot until MinM . If MinM = 0 , the common Knot can be removed. + +The parameter after defines the place for a new curve when it is possible to put +the new curve before or after the BasisCurve (in fact, it is case when concatenated curve can be closed). +It does not change the shape of the curve, but defines its first and last points. + +If WithRatio = Standard_True the algorithm tries to reach C1 continuity. + +The method to get a result is Handle(Geom_BSplineCurve) GeomConvert_CompCurveToBSplineCurve::BSplineCurve() const + +@section OCCT_TOVW_SECTION_4 Modeling Algorithms + +Modeling Algorithms module groups a wide range of +topological algorithms used in modeling and geometric algorithms, called by them. + +These services are organized into the following libraries: + + * Geometric Tools + * Topological Tools + * Construction of Primitives + * Boolean Operations + * Fillets and Chamfers + * Offsets and Drafts + * Features + * Hidden Line Removal + * Shape Healing + +![](/technical_overview/images/technical_overview_ma.png "") + +The technical overview provides only a basic description of the libraries. +Please, refer for more details to Modeling Algorithms User's guide + +See also: our web site at E-learning and Training. + +@subsection OCCT_TOVW_SECTION_4_1 Geometric Tools + +This library provides algorithms to: + + * Calculate the intersection of two 2D curves, surfaces, or a 3D curve and a surface; + * Project points onto 2D and 3D curves, points onto surfaces, and 3D curves onto surfaces; + * Construct lines and circles from constraints; + * Construct curves and surfaces from constraints; + * Construct curves and surfaces by interpolation + +OPEN CASCADE company also provides a product known as Surfaces from Scattered Points +(SSP), which allows constructing surfaces from scattered points. This algorithm accepts +or constructs an initial B-Spline surface and looks for its deformation (finite elements +method) which would satisfy the constraints. Using optimized computation methods, +this algorithm is able to construct a surface from more than 500 000 points. + +SSP product is not supplied with Open CASCADE Technology, but can be purchased separately. + +@subsubsection OCCT_TOVW_SECTION_4_1_1 Intersections + +The Intersections component is used to compute intersections between 2D or 3D geometrical +objects: + + * the intersections between two 2D curves + * the self-intersections of a 2D curve + * the intersection between a 3D curve and a surface + * the intersection between two surfaces. + +@subsubsection OCCT_TOVW_SECTION_4_1_2 Projections + +The Projections component provides functionality for 2D and 3D geometry objects for computing the following: + + * the projections of a 2D point onto a 2D curve + * the projections of a 3D point onto a 3D curve or surface + * the projection of a 3D curve onto a surface. + * the planar curve transposition from the 3D to the 2D parametric space of an underlying plane and v. s. + * the positioning of a 2D gp object in the 3D geometric space.  + +@subsubsection OCCT_TOVW_SECTION_4_1_3 Lines and Circles from Constraints + +The Lines and Circles from Constraints component provides numerous +construction algorithms for 2D circles or lines described with numeric or +geometric constraints in relation to other curves. These constraints enable the following to be imposed: + + * the radius of a circle, + * the angle that a straight line makes with another straight line, + * the tangency of a straight line or circle in relation to a curve, + * the passage of a straight line or circle through a point, + * the centering of a circle on a point or curve. + +For example, these algorithms enable to easily construct a circle of a given radius, +centered on a straight line and tangential to another circle. + +The implemented algorithms are more complex than those provided +by the Direct Constructions component for building 2D circles or lines. + +The expression of a tangency problem generally leads to several results, according +to the relative positions of the solution and the circles or straight lines in relation +to which the tangency constraints are expressed. For example, consider the following +case of a circle of a given radius (a small one) which is tangential to two secant +circles C1 and C2: + +![](/technical_overview/images/technical_overview_occ_0005.png "Example of a Tangency Constraint") + +This diagram clearly shows that there are 8 possible solutions. + +In order to limit the number of solutions, we can try to express the relative position +of the required solution in relation to the circles to which it is tangential. For +example, if we specify that the solution is inside the circle C1 and outside the +circle C2, only two solutions referenced 3 and 4 on the diagram respond to the problem +posed. + +This technique of qualification of a solution, in relation to the curves to which +it is tangential, can be used in all algorithms for constructing a circle or a straight +line by geometric constraints. Four qualifiers are used, which specify the following: + + * the solution(s) must enclose the argument, or + * the solution(s) must be enclosed by the argument, or + * the solution(s) and the argument must be external to one another, or + * the relative position is not qualified, i.e. all solutions apply. + +These definitions are very easy to interpret on a circle, where it is easy to identify +the interior and exterior sides. In fact, for any kind of curve the interior is defined +as the left-hand side of the curve in relation to its orientation. + +OCCT implements several categories of algorithms: + + * analytic algorithms, where solutions are obtained by the resolution of an equation, such algorithms are used when the geometries which are worked on (tangency arguments, position of the center, etc.) are points, lines or circles; + * geometric algorithms, where the solution is generally obtained by calculating the intersection of parallel or bisecting curves built from geometric arguments; + * iterative algorithms, where the solution is obtained by a process of iteration. + +For each kind of geometric construction of a constrained line or circle, OCCT provides +two types of access to the user: + + * algorithms from the package Geom2dGcc automatically select the algorithm best suited to the problem to be treated, both in the general case and in all types of specific cases; the arguments used are Geom2d objects; the solutions computed are gp objects; + * algorithms from the package GccAna resolve the problem analytically, and can only be used when the geometries to be worked on are lines or circles; the arguments used and solutions computed are gp objects. + +The provided algorithms compute all solutions, which correspond to the stated geometric +problem, unless the solution is found by an iterative algorithm. + +Iterative algorithms compute only one solution, closest to an initial +position. They can be used in the following cases: + + * to build a circle, when an argument is more complex than a line or a circle, and where + the radius is not known or difficult to determine: this is the case for a circle tangential + to three geometric elements, or tangential to two geometric elements and centered on a curve; + * to build a line, when a tangency argument is more complex than a line or a circle. + +Qualified curves (for tangency arguments) are provided either by: + + * the GccEnt package, for direct use by GccAna algorithms, or + * the Geom2dGcc package, for general use by Geom2dGcc algorithms. + +The GccEnt and Geom2dGcc packages also provide simple functions for building qualified curves in a very efficient way. + +The GccAna package also provides algorithms for constructing bisecting loci between +circles, lines or points. Bisecting loci between two geometric objects are such that +each of their points is at the same distance from the two geometric objects. They +are typically curves, such as circles, lines or conics for GccAna algorithms. +Each elementary solution is given as an elementary bisecting locus object (line, circle, +ellipse, hyperbola, parabola), described by the GccInt package. + +Note: Curves used by GccAna algorithms to define the geometric problem to be solved, +are 2D lines or circles from the gp package: they are not explicitly parameterized. +However, these lines or circles retain an implicit parameterization, corresponding +to that which they induce on equivalent Geom2d objects. This induced parameterization +is the one used when returning parameter values on such curves, for instance with +the functions Tangency1, Tangency2, Tangency3, Intersection2 and CenterOn3 provided +by construction algorithms from the GccAna or Geom2dGcc packages. + +@subsubsection OCCT_TOVW_SECTION_4_1_4 Curves and Surfaces from Constraints + +The Curves and Surfaces from Constraints component groups together high level functions +used in 2D and 3D geometry for: + + * creation of faired and minimal variation 2D curves + * construction of ruled surfaces + * construction of pipe surfaces + * filling of surfaces + * construction of plate surfaces + * extension of a 3D curve or surface beyond its original bounds. + +2D Curves from constraints +---------------------- + +Elastic beam curves have their origin in traditional methods of modeling applied +in boat-building, where a long thin piece of wood, a lathe, was forced to pass +between two sets of nails and in this way, take the form of a curve based on the +two points, the directions of the forces applied at those points, and the properties +of the wooden lathe itself. + +Maintaining these constraints requires both longitudinal and transversal forces to +be applied to the beam in order to compensate for its internal elasticity. The longitudinal +forces can be a push or a pull and the beam may or may not be allowed to slide over +these fixed points. + +The class Batten produces curves defined on the basis of one or more constraints +on each of the two reference points. These include point and angle of tangency settings. +The class MinimalVariation produces curves with minimal variation in curvature. +The exact degree of variation is provided by curvature settings. + +Ruled Surfaces +---------------- +A ruled surface is built by ruling a line along the length of two curves. + +Pipe Surfaces +-------------- + +A pipe is built by sweeping a curve (the section) along another curve (the path). + +The following types of construction are available: + * pipes with a circular section of constant radius, + * pipes with a constant section, + * pipes with a section evolving between two given curves. + + +Surface filling +-------------- + +It is often convenient to create a surface from two or more curves which will form +the boundaries that define the new surface. + +A case in point is the intersection of two fillets at a corner. If the radius of +the fillet on one edge is different from that of the fillet on another, it becomes +impossible to sew together all the edges of the resulting surfaces. This leaves a +gap in the overall surface of the object which you are constructing. + +![](/technical_overview/images/technical_overview_occ_0006.png "Intersecting filleted edges with differing radiuses") + +These algorithms allow you to fill this gap from two, three or four curves. This +can be done with or without constraints, and the resulting surface will be either +a Bezier or a BSpline surface in one of a range of filling styles. + + +This package was designed with a view to handling gaps produced during fillet construction. +Satisfactory results cannot be guaranteed for other uses. + +Plate surfaces +------------------ + +In CAD, it is often necessary to generate a surface which has no exact mathematical +definition, but which is defined by respective constraints. These can be of a mathematical, +a technical or an aesthetic order. + + +Essentially, a plate surface is constructed by deforming a surface so that it conforms +to a given number of curve or point constraints. In the figure below, you can see +four segments of the outline of the plane, and a point which have been used as the +curve constraints and the point constraint respectively. The resulting surface can +be converted into a BSpline surface by using the function MakeApprox . + + +The surface is built using a variational spline algorithm. It uses the principle +of deformation of a thin plate by localised mechanical forces. If not already given +in the input, an initial surface is calculated. This corresponds to the plate prior +to deformation. Then, the algorithm is called to calculate the final surface. It +looks for a solution satisfying constraints and minimizing energy input. + +![](/technical_overview/images/technical_overview_occ_0007.png "Surface generated from four curves and a point") + +![](/technical_overview/images/technical_overview_occ_0008.png "Surface generated from two curves and a point") + +Extension of a 3D curve or surface beyond its original bounds +---------------------------------------- + +The extension is performed according to a geometric requirement and a continuity +constraint. It should be a small extension with respect to the size of the original +curve or surface. + +@sub?ubsection OCCT_TOVW_SECTION_4_1_5 Interpolation + +The Interpolation Laws component provides definitions of functions: y=f(x) . + +In particular, it provides definitions of: + + * a linear function, + * an S function, and + * an interpolation function for a range of values. + +Such functions can be used to define, for example, the evolution law of a fillet along the edge of a shape. + +Warning +------- +The validity of the function built is never checked: the Law package does not know for what +application or to what end the function will be used. In particular, if the function is used +as the evolution law of a fillet, it is important that the function is always positive. The user must check this. + +@subsection OCCT_TOVW_SECTION_4_2 Topological Tools + +This library provides algorithms to: + + * Tessellate shapes + * Validate shapes + * Determine the local properties of shapes + * Determine the global properties of shapes + * Perform geometric transformations + * Find planes in which edges are located + * Convert shapes to NURBS geometry. + +It also furnishes a complete brep data structure for topological data structures defined +in the Topology library of the Modeling Data module. +This linAllows you to create standard topological objects such as: + + * Vertices + * Edges + * Faces + * Wires + * Polygonal wires + * Shells + * Solids. + +The API provides classes to build objects: + + * The constructors of classes provide different construction methods; + * The class retains different tools used to build objects as fields; + * The class provides a casting method to obtain the result automatically with a function-like call. + +For example, to build a vertex V on a point P, you can use: + +~~~ + V = BRepBuilderAPI_MakeVertex(P); +~~~ +or + +~~~ + BRepBuilderAPI_MakeVertex MV(P); + V = MV.Vertex(); +~~~ + +For error handling, the BRepBuilderAPI commands raise only the + 0StdFail_NotDone exception. When IsDone is false for a command, +the error description can be requested from the command. + +@subsection OCCT_TOVW_SECTION_4_3 Construction of Primitives + +This library contained in BRepPrimAPI package provides an API (Application Programming Interface) for: + + * Construction of primitives such as: + * Boxes; + * Cones; + * Cylinders; + * Prisms. + * Construction by sweeping along a profile: + * Linear; + * Rotational (through an angle of rotation). + +Sweeps are objects obtained by sweeping a profile along a path. +The profile can be any topology and the path is usually a curve or a wire. +The profile generates objects according to the following rules: + + * Vertices generate Edges + * Edges generate Faces. + * Wires generate Shells. + * Faces generate Solids. + * Shells generate Composite Solids. + +It is not allowed to sweep Solids and Composite Solids. + +Swept constructions along complex profiles such as +BSpline curves are also available in the BRepOffsetAPI package. + +This API provides simple, high level calls for the most common operations. + +@subsection OCCT_TOVW_SECTION_4_4 Boolean Operations + +Boolean operations to create new shapes from old ones by using: + + * Common + * Cut + * Fuse + * Section + +There are two libraries for Boolean Operations: + + * Old Boolean Operations (BOA) provided by BRepAlgo package designed and developed in Open CASCADE 6x in 2000; its architecture and content are out of date. + * New Boolean Operations (NBOA) provided by BRepAlgoAPI package designed and developed in 2009 and completely revised in 2013. + +Major benefits of New Boolean Operations +------------------------------------------ + + * The NBOA has an expandable architecture of inner sub-algorithms, which allows to create specific algorithms for the Customers using existing inner sub-algorithms as root algorithms and to reduce the time for the development. + * The architecture of inner sub-algorithms of NBOA provides their reusability with maximal independence from the environment of NBOA. The fact allows to create specific algorithms for the Customers using these sub-algorithms as they are or as root classes and thus to reduce the time for the development. + * The architecture of NBOA is history-based. The implementation of NBOA internally sets up a correspondence between any sub-shape of the argument and its image in the result. The history is not imposed and thus it is not error-prone as it was in BOA. The fact allows direct and safely usage of the algorithm in parametric modeling. + * NBOA is a general algorithm. It correctly processes without using the workarounds even the cases that cannot be properly processed by BOA. + * The implementation of NBOA is based on NCollection classes. The usage of opportunities given by local memory allocators ( NCollection_IncAllocator) allows improving memory management and saving memory resources. + * NBOA uses modern algorithms of OCC as auxiliary tools. For e.g. the algorithm of unbalanced binary tree of overlapped bounding boxes NCollection_UBTree. The usage of the algorithm allows to improve the performance of NBOA if there is a big number of sub-shapes in the arguments. + +The shape type of a Boolean Operation result and types of the arguments +------------------------------------------------- + +For arguments having the same shape type (e.g. SOLID / SOLID) +the type of the resulting shape will be a COMPOUND, containing shapes of this type; + +For arguments having different shape types (e.g. SHELL / SOLID) +the type of the resulting shape will be a COMPOUND, +containing shapes of the type that is the same as that +of the low type of the argument. Example: For SHELL/SOLID the result is a COMPOUND of SHELLs. + +For arguments with different shape types some of Boolean Operations +can not be done using the default implementation, because of a non-manifold type +of the result. Example: the FUSE operation for SHELL and SOLID can not be done, +but the CUT operation can be done, where SHELL is the object and SOLID is the tool. + +It is possible to perform Boolean Operations on arguments of the COMPOUND shape type. +In this case each compound must not be heterogeneous, i.e. +it must contain equidimensional shapes (EDGEs or/and WIREs, FACEs or/and SHELLs, SOLIDs). +SOLIDs inside the COMPOUND must not contact (intersect or touch) each other. +The same condition should be respected for SHELLs or FACEs, WIREs or EDGEs. + +It does not support Boolean Operations for COMPSOLID type of shape. + +@subsection OCCT_TOVW_SECTION_4_5 Features + +This library contained in BRepFeat package is necessary for the creation +and manipulation of both form and mechanical features in a Boundary Representation framework. + +The form features are depressions or protrusions including the following types: + + * Cylinder; + * Draft Prism; + * Prism; + * Revolved feature; + * Pipe. + +Depending on whether you wish to make a depression or a protrusion, +you can choose either to remove matter (Boolean cut: Fuse equal to 0) or to add it (Boolean fusion: Fuse equal to 1). + +The semantics of form feature creation is based on the construction of shapes: + + * for a certain length in a certain direction; + * up to the limiting face; + * from the limiting face at a height; + * above and/or below a plane. + +The shape defining the construction of a feature can be +either a supporting edge or a concerned area of a face. + +In case of supporting edge, this contour can be attached to a face +of the basis shape by binding. When the contour is bound to this face, +the information that the contour will slide on the face becomes available +to the relevant class methods. In case of the concerned area of a face, you could, +for example, cut it out and move it at a different height, +which will define the limiting face of a protrusion or depression. + +Topological definition with local operations of this sort makes calculations simpler +and faster than a global operation. The latter would entail a second phase +of removing unwanted matter to get the same result. + +Mechanical features include ribs, protrusions and grooves (or slots), +depressions along planar (linear) surfaces or revolution surfaces. + +The semantics of mechanical features is based on giving thickness to a contour. +This thickness can either be + + * unilateral + * on one side of the contour + * or bilateral + * on both sides. + +As in the semantics of form features, the thickness is defined +by construction of shapes in specific contexts. + +However, in case of mechanical features, development contexts differ. +Here they include extrusion: + + * to a limiting face of the basis shape; + * to or from a limiting plane; + * to a height. + +@subsection OCCT_TOVW_SECTION_4_6 Hidden Line Removal + +This library provides two algorithms: HLRBRep_Algo and HLRBRep_PolyAlgo to define the lines of a shape hidden in a given projection. These lines can be shown or hidden to have the precision required in industrial design. To do this, the Hidden Line Removal component provides + +These algorithms remove or indicate lines hidden by surfaces. +For a given projection, they calculate a set of lines characteristic of the object being represented. They are also used in conjunction with extraction utilities, which reconstruct a new, simplified shape from a selection of calculation results. +This new shape is made up of edges, which represent the lines of the visualized shape in a plane. This plane is the projection plane. + +The algorithm HLRBRep_Algo allows working with the shape itself, while HLRBRep_PolyAlgo works with its polyhedral simplification. When you use HLRBRep_Algo, you obtain an exact result, whereas, when you use HLRBRep_PolyAlgo, you reduce computation time but obtain polygonal segments. + +@subsection OCCT_TOVW_SECTION_4_7 Shape Healing + +Shape Healing library provides algorithms to modify the geometry and topology of OCCT shapes. +Shape Healing adapts shapes to make them maximally appropriate for use by OCCT, for example: + + * analyze shape characteristics and, in particular, identify the shapes that do not comply with OCCT validity rules; + * fix incorrect or problem shapes; + * upgrade and change shape characteristics if needed, for example a C0 supporting surface can become C1 continuous. + +It has several sub-domains, each with its own scope of functionality: + + * analysis - exploring shape properties, computing shape features, detecting violation of OCCT requirements (the shape itself is not modified); + * fixing - fixing shape to meet the OCCT requirements (the shape may change its original form: modifying, removing, constructing sub-shapes, etc.); + * upgrade - shape improvement for better usability in OCCT or other algorithms (the shape is replaced with a new one, but geometrically they are the same); + * customization - modifying shape representation to fit specific needs (the shape is not modified, only the form of its representation is modified); + * processing - mechanism of shape modification via a user-editable resource file. + +The technical overview provides only a basic description of the libraries. Please, refer for more details to Shape Healing User's guide + +See also: our web site at E-learning and Training. + + +@subsection OCCT_TOVW_SECTION_4_8 Miscellaneous modelling algorithms. + +Fillets and Chamfers +--------------------- + +This library provides algorithms to make fillets and chamfers on shape edges. +The following cases are addressed: + + * Corners and apexes with different radii; + * Corners and apexes with different concavity. + +If there is a concavity, both surfaces that need to be extended and those, which do not, are processed. + +Offsets, Drafts, Sewing and Sweeps +---------------------------------- + +These classes provide the following services: + + * Creation of offset shapes and their variants such as: + * Hollowing; + * Shelling; + * Lofting; + * Creation of tapered shapes using draft angles + * Sewing + * Creation of sweeps + + +@subsection OCCT_TOVW_SECTION_4_9 Examples + +How to compute the state of a point on a face: +--------------------------------------------- + +Use BRepTools::Pnt to get the point from your vertex. +Your shape must be of the TopoDS_Shape type. +If it is, you can use BRepTopAdaptor_FClass2d class. For example: + +~~~~~ + BRepTopAdaptor_FClass2d::Load (to load the solid ) + BRepTopAdaptor_FClass2d::Perform (to compute the state of the point ) + BRepTopAdaptor_FClass2d::State (to get the TopAbs_State). +~~~~~ + + +How to compute the state of a point in a solid: +--------------------------------------- + +Use BRepTools::Pnt to get the point from your vertex. +Your shape must be of the TopoDS_Solid type. + +If it is, you can use the BRepClass3d_SolidClassifier class, for example: + +~~~~~ + BRepClass3d_SolidClassifier::Load (to load the solid) + BRepClass3d_SolidClassifier::Perform (to compute the state of the point) + BRepClass3d_SolidClassifier::State (to get a TopAbs_State object) + BRepClass3d_SolidClassifier inherits BRepclass3d_SClassifier +~~~~~ + +How to connect a set of contiguous but independent faces +------------------------------------------ + +A unique topological object can be obtained in this way using the class + Sewing from the BRepOffsetAPI package which produces a shell as a result. + +~~~~~ + BRepOffsetAPI_Sewing Sew; + Sew.Add(Face1); + Sew.Add(Face2); + ... + Sew.Add(Facen); + Sew.Perform(); + TopoDS_Shape result= Sew.SewedShape(); +~~~~~ + +@note The sewing algorithm uses a tolerance to assemble the faces by sewing them along common edges. You must therefore check the gap between faces before sewing or adjust the value of the tolerance according to the real gap of the geometry. + +If all faces have been sewed correctly, the result is a shell. Otherwise, it is a compound. After a successful sewing operation all faces have a coherent orientation. + +For more information, refer to the entry for this class in reference documentation. + +How to check the orientation of a solid +-------------------------------------- + +If you want to create a solid from a closed shell, you must first check the orientation to determine if you have to reverse the shell or not (for example after creating a closed shell from a sewing operation). To do this, use the PerformInfinitePoint method from the BrepClass3D_SolidClassifier class. + +~~~~~ + BRepClass3d_SolidClassifier clas3d(aShell); + clas3d.PerformInfinitePoint(Precision::Confusion()); + if (clas3d.State() == TopAbs_IN) + newShell.Reverse(); + BRepBuilderAPI_MakeSolid aSolid(aShell); +~~~~~ + +@section OCCT_TOVW_SECTION_5 Visualization + +Visualization in Open CASCADE Technology is based on the separation of modeling data you want to display and select, and on the graphical presentation of its structure. + +For visualizing data structures, OCCT provides ready-to-use algorithms, which create graphic presentations from geometric models. These data structures may be used with the viewers supplied, and can be customized to take the specificity of your application into account. + +Displaying is managed through presentation services, and selection in its turn is managed through selection services. With these services, data structures and algorithms are provided to display objects of an application, and to support graphical selection of these objects. + +Application Interactive Services (AIS) are provided to manage displaying, detection and selection of graphical presentations. These services associate data structures and interactive objects. + +Please, refer for more details to Visualization User's guide + +See also: our web site at E-learning and Training. + +![](/technical_overview/images/technical_overview_viz.png "") + +@subsection OCCT_TOVW_SECTION_5_1 3D Graphics + +3D Graphics provided by Graphic3d package supports three-dimensional manipulation of 3d graphic objects called structures. Structures, are made up of groups that unite primitives, such as polylines, planar polygons with or without holes, text and markers, and attributes, such as color, transparency, reflection, line type, line width, and text font.  +A group is the smallest editable element of a structure. + +A structure can be displayed, erased, highlighted and transformed. +Structures can be connected to form a hierarchy of structures, composed by transformations. +The viewer can perform global manipulation of structures. + + Visual3d package contains the group of classes required to implement commands for 3D viewer. The viewer manages views and light sources. + +Most types of primitives supported by Graphic3d can be dumped to a vector file format such as PDF and PostScript. Export to vector formats is implemented with help of GL2PS library. + +@subsection OCCT_TOVW_SECTION_5_2 3D Visualization + +This library provides services for: + + * Selection of 3D data structures + * Presentation of 3D data structures + +Access to 3D presentation and selection is provided through AIS (Application Interactive Services). +This package is a high-level interface that offers access to the lower-level presentation and selection services. +AIS expand this underlying functionality with standard 3D selection attributes, presentation management, and standard 3D presentation attributes, and manages it in the definition of GUI viewers. To implement these services, AIS package includes the following: + + * Interactive context + * Interactive objects + * A graphic attributes manager + * Selection filters + +Interactive Context +------------------- + +Interactive context pilots 3D visualizations and selections. +The interactive context allows you to manage, in a transparent way, graphic and "selectable" behavior of interactive objects which is not yet defined in the predefined types of these objects. + +AIS have two operating context types. The default neutral point type allows easily visualizing and selecting entire interactive objects, which have been loaded into the context. +Opening a local context allows preparing and using a temporary selection environment to select a part of an interactive object. + +Interactive Objects +------------------- + +Entities which are visualized and selected in the AIS viewer are objects. They connect the underlying reference geometry of a model to its graphic representation in AIS. You can use predefined OCCT classes of standard interactive objects for which all necessary functions have already been programmed, or, in case you are an advanced user, you can implement your own classes of interactive objects. + +Graphic Attributes Manager +-------------------------- + +Graphic attributes manager, or AIS Drawer, stores graphic attributes for specific interactive objects and for interactive objects controlled by interactive context. + +Initially, all drawer attributes are filled out with the predefined values which will define the default 3D object appearance. + +When an interactive object is visualized, the required graphic attributes are first taken from its own drawer if one exists, or from the context drawer if no specific drawer for that type of object exists. + +Selection Filters +----------------- + +An important aspect in selection is the filtering of entities you to select. +Selection filters allow you to refine the dynamic detection context, which you want to put into effect. Some of these filters can be used at the Neutral Point, others in an open local context only. You can also program your own filters and load them into the context. + + +@subsection OCCT_TOVW_SECTION_5_3 Application Interactive Services (AIS) + +Application Interactive Services provide the means to create links between an application GUI viewer and the packages which are used to manage selection and presentation. The tools AIS defined for this include different sorts of entities: the selectable viewable objects themselves and the context and attribute managers to define their selection and display. + +To orient the user as he works in a modeling environment, views and selections must be comprehensible. +There must be several different sorts of selectable and viewable object defined. +These must also be interactive, that is, connecting graphic representation and the underlying reference geometry. These entities are called Interactive Objects, and are divided into four types: + * the Datum + * the Relation + * the Object + * None. + +The Datum groups together the construction elements such as lines, circles, points, trihedrons, plane trihedrons, planes and axes. +The Relation is made up of constraints on one or more interactive shapes and the corresponding reference geometry. For example, you might want to constrain two edges in a parallel relation. This constraint is considered as an object in its own right, and is shown as a sensitive primitive. This takes the graphic form of a perpendicular arrow marked with the || symbol and lying between the two edges. + +The Object type includes topological shapes, and connections between shapes. + +None, in order not to eliminate the object, tells the application to look further until it finds an object definition in its generation which is accepted. + +Inside these categories, you have the possibility of an additional characterization by means of a signature. The signature provides an index to the further characterization. By default, the Interactive Object has a None type and a signature of 0 (equivalent to None.) +If you want to give a particular type and signature to your interactive object, you must redefine the two virtual methods: Type and Signature. + +In the C++ inheritance structure of the package, each class representing a specific Interactive Object inherits AIS_InteractiveObject. Among these inheriting classes, AIS_Relation functions as the abstract mother class for inheriting classes defining display of specific relational constraints and types of dimension. Some of these include: + + * display of constraints based on relations of symmetry, tangency, parallelism and concentricity + * display of dimensions for angles, offsets, diameters, radii and chamfers. + +No viewer can show everything at once with any coherence or clarity. +Views must be managed carefully both sequentially and at any given instant. +Another function of the view is that of a context to carry out design in. +The design changes are applied to the objects in the view and then extended +to the underlying reference geometry by a solver. +To make sense of this complicated visual data, several display and selection tools are required. +To facilitate management, each object and each construction element has a selection priority. +There are also means to modify the default priority. + +To define an environment of dynamic detection, you can use standard filter classes or create your own. +A filter questions the owner of the sensitive primitive in local context to determine +if it has the desired qualities. If it answers positively, it is kept. If not, it is rejected. + +The standard filters supplied in AIS include: + + * AIS_AttributeFilter + * AIS_SignatureFilter + * AIS_TypeFilter. + +Only the type filter can be used in the default operating mode, the neutral point. +The others can only be used in open local contexts. + +Neutral point and local context constitute the two operating modes of the +central entity which pilots visualizations and selections, the Interactive Context. +It is linked to a main viewer and if you like, a trash bin viewer as well. + +The neutral point, which is the default mode, allows you to easily visualize and select interactive objects which have been loaded into the context. Opening local contexts allows you to prepare and use a temporary selection environment without disturbing the neutral point. +A set of functions allows you to choose the interactive objects which you want to act on, the selection modes which you want to activate, and the temporary visualizations which you will execute. When the operation is finished, you close the current local context and return to the state in which you were before opening it (neutral point or previous local context). + +An interactive object can have a certain number of graphic attributes, which are specific to it, such as visualization mode, color, and material. By the same token, the interactive context has a set of graphic attributes, the Drawer which is valid by default for the objects it controls. +When an interactive object is visualized, the required graphic attributes are first taken from the object's own Drawer if one exists, or from the context drawer for the others. + + +@subsection OCCT_TOVW_SECTION_5_4 Presentation + +Presentation Management +---------------------- + + PrsMgr package provides low level services and is only to be used when you do not want to use the services provided by AIS. It manages the display through the following services: + * supplying a graphic structure for the object to be presented + * recalculating presentations when required, e.g. by moving the object or changing its color + * defining the display mode of the object to be presented; in the case of AIS_Shape, for example, this determines whether the object is to be displayed in: + wireframe 0 + shading 1. + +Note that each new Interactive Object must have all its display modes defined. + +Presentations of Geometry +------------------------- +The Presentations of Geometry component provides services for advanced programmers to extend the Application Interactive Services component, AIS. +This would prove necessary in situations where new Interactive Objects were required. + +The StdPrs package provides standard display tools for specific geometries and topologies whereas Prs3d provides those for generic objects. +Among these classes are definitions of the display of the specific geometry or topology in various display modes such as wireframe, shading or hidden line removal mode. + +Presentation of Dimensions +-------------------------- + DsgPrs package provides tools for display of dimensions, relations and XYZ trihedrons. + +@subsection OCCT_TOVW_SECTION_5_5 Selection + +Selection of 3D data structures is provided using various algorithms. + +Basic Selection +--------------- + +The SelectBasics package provides the following services: + + * the root definition of the sensitive primitive, a selectable entity in a view + * the definition of the owner of a sensitive primitive; this entity relates the primitive to the application entity which is to be selected in the view. + +Standard Selections +------------------- + +The StdSelect package provides the following services: + + * definition of selection modes for topological shapes + * definition of several filter standard Selection2d.ap classes + * 3D viewer selectors. + +Note that each new Interactive Object must have all its selection modes defined. +The Select3D package provides the following services: + + * definition of standard 3D sensitive primitives such as points, curves and faces; + * recovery of the bounding boxes in the 2D graphic selection space, if required; + * a 3D-2D projector. + +Selection Management +-------------------- + +The SelectMgr package provides low level services and the classes + SelectMgr_SelectionManager and SelectMgr_ViewerSelector +in particular are only to be used when you do not want to use the services provided by AIS. + + SelectMgr manages the process of dynamic selection through the following services: + + * activating and deactivating selection modes for Interactive Objects + * adding and removing viewer selectors + * definitions of abstract filter classes + +The principle of graphic selection consists in representing the objects which you want +to select by a bounding box in the selection view. +The object is selected when you use the mouse to designate the zone produced by the object. + +To realize this, the application creates a selection structure +which is independent of the point of view. This structure is made up +of sensitive primitives which have one owner object associated to each of them. +The role of the sensitive primitive is to reply to the requests of the selection algorithm +whereas the owner's purpose is to make the link between +the sensitive primitive and the object to be selected. +Each selection structure corresponds to a selection mode which defines the elements that can be selected. + +For example, to select a complete geometric model, +the application can create a sensitive primitive for each face +of the interactive object representing the geometric model. +In this case, all the primitives share the same owner. +On the other hand, to select an edge in a model, +the application must create one sensitive primitive per edge. + +~~~~ + +void InteractiveBox::ComputeSelection + (const Handle(SelectMgr_Selection)& Sel, + const Standard_Integer Mode){ + +switch(Mode){ +case 0: +// locating the whole box by making its faces sensitive ... + { + Handle(SelectMgr_EntityOwner) Ownr = new + SelectMgr_EntityOwner(this,5); + for(Standard_Integer I=1;I<=Nbfaces;I++){ + Sel->Add(new Select3D_SensitiveFace + (Ownr,[array of the vertices] face I); + break; + } + +case 1: // locates the edges + { + + for(Standard_Integer i=1;i<=12;i++){ + // 1 owner per edge... + Handle(mypk_EdgeOwner) Ownr = + new mypk_EdgeOwner(this,i,6); + // 6->priority + Sel->Add(new + Select3D_SensitiveSegment + (Ownr,firstpt(i),lastpt(i)); + } + } +} + +~~~~ + +The algorithms for creating selection structures store the sensitive primitives in a + SelectMgr_Selection object. To do this, a set of ready-made sensitive primitives is supplied +in the Select2D and Select3D packages. New sensitive primitives can be defined through inheritance +from SensitiveEntity. For the application to make its own objects selectable, + it must define owner classes inheriting SelectMgr_EntityOwner. + +For any object inheriting from AIS_InteractiveObject, you redefine +its ComputeSelection functions. In the example below there are different modes +of selection on the topological shape contained within the interactive object, +selection of the shape itself, the vertices, the edges, the wires, the faces. + +~~~~ + void MyPack_MyClass::ComputeSelection( + const Handle(SelectMgr_Selection)& aSelection, + const Standard_Integer aMode) + { + switch(aMode){ + case 0: + StdSelect_BRepSelectionTool::Load( + aSelection,this,myShape,TopAbs_SHAPE); + break; + } + case 1: + StdSelect_BRepSelectionTool::Load( + aSelection,this,myShape,TopAbs_VERTEX); + break; + } + case 2: + StdSelect_BRepSelectionTool::Load( + aSelection,this,myShape,TopAbs_EDGE); + break; + } + case 3: + StdSelect_BRepSelectionTool::Load( + aSelection,this,myShape,TopAbs_WIRE); + break; + } + case 4: + StdSelect_BRepSelectionTool::Load( + aSelection,this,myShape,TopAbs_FACE); + break; + } + } +~~~~ + +The StdSelect_BRepSelectionTool object provides a high level service +which will make the shape myShape selectable when the AIS_InteractiveContext is asked to display your object. + +Note: + +The traditional way of highlighting selected entity owners +adopted by Open CASCADE Technology assumes that each entity owner +highlights itself on its own. This approach has two drawbacks: + + * each entity owner has to maintain its own Prs3d_Presentation object, that results in large memory overhead for thousands of owners; + * drawing selected owners one by one is not efficient from the OpenGL usage viewpoint. + +That is why a different method has been introduced. +On the basis of SelectMgr_EntityOwner::IsAutoHilight() return value + AIS_LocalContext object either uses the traditional way of highlighting +( IsAutoHilight() returned true) or groups such owners according to their +Selectable Objects and finally calls SelectMgr_SelectableObject::HilightSelected() or + ClearSelected(), passing a group of owners as an argument. + +Hence, an application can derive its own interactive object and redefine HilightSelected(), + ClearSelected() and HilightOwnerWithColor() virtual methods + to take advantage of such OpenGL technique as arrays of primitives. + In any case, these methods should at least have empty implementation. + + The AIS_LocalContext::UpdateSelected(const Handle(AIS_InteratciveObject)&, Standard_Boolean) + method can be used for efficient redrawing a selection presentation for a given interactive object from an application code. + +Additionally, the SelectMgr_SelectableObject::ClearSelections() +method now accepts an optional Boolean argument. +This parameter defines whether all object selections should be flagged for further update or not. +This improved method can be used to re-compute an object selection (without redisplaying the object completely) +when some selection mode is activated not for the first time. + + +@subsection OCCT_TOVW_SECTION_5_6 Attribute Management + +The Attribute Management tool-kit provides services for advanced programmers to extend +the Application Interactive Services component, AIS. This would prove necessary +in situations where new Interactive Objects were required. + +The Prs3d package provides the following services: + + * a presentation object (the context for all modifications to the display, its presentation will be displayed in every view of an active viewer) + * an attribute manager governing how objects such as color, width, and type of line are displayed; these are generic objects, whereas those in StdPrs are specific geometries and topologies. + * generic algorithms providing default settings for objects such as points, curves, surfaces and shapes + * a root object which provides the abstract framework for the DsgPrs definitions at work in display of dimensions, relations and trihedrons. + + +@subsection OCCT_TOVW_SECTION_5_7 Mesh Visualization Services + + MeshVS (Mesh Visualization Service) component extends 3D visualization capabilities +of Open CASCADE Technology. It provides flexible means of displaying meshes along with associated pre- and post-processor data. + +From a developer's point of view, it is easy to integrate the MeshVS component i +nto any mesh-related application with the help of the following guidelines: + +Derive a data source class from the MeshVS_DataSource class. +Re-implement its virtual methods, so as to give the MeshVS component access +to the application data model. This is the most important part of the job, +since visualization performance is affected by performance of data retrieval methods of your data source class. + +Create an instance of the MeshVS_Mesh class. + +Create an instance of your data source class and pass it to a MeshVS_Mesh object through the SetDataSource() method. + +Create one or several objects of MeshVS_PrsBuilder-derived classes +(either standard, included in the MeshVS package, or your custom ones). +Each PrsBuilder is responsible for drawing a MeshVS_Mesh presentation +in certain display mode(s) specified as a PrsBuilder constructor's argument. +Display mode is treated by MeshVS classes as a combination of bit flags +(two least significant bits are used to encode standard display modes: wireframe, shading and shrink). +Pass these objects to the MeshVS_Mesh::AddBuilder() method. MeshVS_Mesh +takes advantage of improved selection highlighting mechanism: it highlights its selected entities itself, +with the help of so called "highlighter" object. You can set one of PrsBuilder +objects to act as a highlighter with the help of a corresponding argument of the AddBuilder() method. + +Visual attributes of the MeshVS_Mesh object (such as shading color, shrink coefficient and so on) +are controlled through MeshVS_Drawer object. It maintains a map "Attribute ID --> attribute value" +and can be easily extended with any number of custom attributes. + +In all other respects, MeshVS_Mesh is very similar to any other class derived +from AIS_InteractiveObject and it should be used accordingly +(refer to the description of AIS package in the documentation). + +@subsection OCCT_TOVW_SECTION_5_8 Images and Drivers + +Images +-------- + +The Image package provides PseudoColorImage +and ColorImage definitions, and a set of key functions from the image fields. + +The AlienImage package allows importing images from other formats into OCCT format. + +Drivers +--------- +The Xw package contains the common X graphic interface. It uses XWindow bitmap fonts that cannot be modified. + +The WNT package contains the common Windows NT graphic interface. + +The Cocoa package provides interaction with Cocoa API on Mac OS X. + +@subsection OCCT_TOVW_SECTION_5_9 New Interactive Services (NIS) + +New Interactive Services package provides the API similar to the traditional AIS but with some important differences/improvements: + + * Each type of InteractiveObject should have a corresponding Drawer class that defines the presentation of the Object type using direct OpenGl calls. This is a much faster way to display 3D objects, providing for more than 1 million separate selectable entities in one view. + * The abstract type NIS_InteractiveObject does not support any properties (color, material, other aspects). The relevant properties should be defined in the specializations of the Drawer class, and the API to set/modify should be implemented in the specializations of InteractiveObject class. + * Interactive selection is managed by InteractiveObject methods instead of special selector classes and data types. This is possible since in NIS the selection is based on 3D representation (by a ray or a box corresponding to the view direction) without intermediate 2D projection. + * Many InteractiveContext instances can be attached to a V3d_View, these instances being independent containers of interactive objects; removal (detaching) of InteractiveContext instance destroys the contained objects. + * All data types and algorithms are designed to provide the best performance for both OpenGl (server side) and application. On the other hand, the API is open to any feature supported by any version of OpenGl. This allows building custom presentations quickly and efficiently. + * Standard NIS_View subclasses V3d_View thus providing all its public API, such as scene definition (view orientation, lights, background, etc.) and the standard view transformations (pan/zoom/rotate,fitAll,...). The traditional AIS-based presentations (e.g., AIS_Shape) are also supported, they can be rendered together with NIS presentations in the same view window. + +The DRAW test plugin, TKViewerTest, has been modified +to manage AIS_InteractiveContext and NIS_InteractiveContext together in one view window. + +@subsection OCCT_TOVW_SECTION_5_10 Voxels + +A voxel is a sub-volume box with constant scalar/vector value. +The object in voxel representation is split into many small sub-volumes (voxels) and its properties are distributed through voxels. + +Voxels are used for analysis and visualization of 3D-dimensional distribution of data. +Medicine (mainly, tomography), computational physics (hydrodynamics, aerodynamics, nuclear physics) +and many other industries use voxels for 3D data visualization and analysis of physical processes. + +Open CASCADE Technology provides several basic data containers for voxels +with fast access to the data and optimal allocation of data in memory. +Also, a special visualization toolkit allows visualizing voxels +as colored or black/white points and cubes, displaying only the voxels visible from the user's point of view. + +Please, see for more information Voxels User's Guide white paper. + +@subsection OCCT_TOVW_SECTION_5_11 Examples + +How to change graphic attributes of an interactive object +------------------------------------------------ +The set of graphic attributes of an interactive object is defined in AIS_Drawer. +Each interactive object can have its own visualization attributes. + +By default, the interactive object takes the graphic attributes of +the interactive context in which it is visualized +(visualization mode, deflection, values for the calculation of presentations, +number of isoparametric lines, color, type of line, material, etc.) + +In the AIS_InteractiveObject abstract class, several standard attributes +have been privileged. These include: color, thickness of line, material, and transparency. +Consequently, a certain number virtual functions which allow us to act on these attributes have been proposed. +Each new class of interactive object can use them as they are or +can redefine these functions to bring about the changes it should produce in the behavior of the class. + +Other attributes can be changed by acting directly on the drawer of the object. +An interactive object has a specific drawer as soon as you change an attribute on it. +If you do not modify any graphic attribute on it, the default drawer of the interactive context is referenced and used. + +To get the AIS_Drawer of an object, call method AIS_InteractiveObject::Attributes . + +To set the AIS_Drawer of an object, call method AIS_InteractiveObject::SetLocalAttributes . + +How to dump a scene from the viewer +---------------------------- + +You can dump the contents of a V3D_View in a file with the same scale or +with a different scale according to the required paper size (format) +and the aspect ratio of the view. This is provided by method V3d_View::Dump. For example: + +~~~~ +CString filename ("myView3D.bmp"); +myView->Dump (filename, Aspect_FOSP_A4); +~~~~ + + myView is a V3d_View, where OCCT objects are displayed using, for example, AIS services. + +Please, note: + + * The file name extension can be any among ".xwd", ".png", or ".bmp" formats both on UNIX or NT. + * Be careful about dump time requirements of the resulting file, especially for the A formats. + * The GIF format generates very small files, BMP and XWD generates much larger files (4 to 6 times the size of a GIF). + * The time to generate these files is very short with the XWD format but 2 to 4 times longer for the other formats. + * After getting an image file of your view, you can use any standard application for editing or sending the image file to a printer (i.e.: Microsoft Photo Editor on Windows or Image Viewer on SUN system) + +How to add and remove objects from Selections +--------------------------------------------- + +You can add or remove an object from a selection in one of two ways. You can use: + + * AIS_InteractiveContext::AddOrRemoveCurrentObject method at neutral points; + * AddOrRemoveCurrent method if a local context is opened. + + +How to detect overlapped objects +-------------------------------- + +When objects overlap each other and cause difficulties in selection, +you can use the mechanism provided with the AIS_InteractiveContext +to successively highlight all the objects found under the selection. +This allows you to choose and validate the required object. + +~~~~ + If ( myAISContext->HasNextDetected()) { + + // if up key is pressed + myAISContext ->HilightNextDetected(myView); + + // if down key is pressed + myAISContext ->HilightPreviousDetected(myView); + + } +~~~~ + + + +Get mouse coordinates in 3D view +-------------------------------- + +To switch from pixel mouse position on the screen to 3D coordinates +in V3d_View, use V3d_View::Convert method. + +~~~~ + Handle(V3d_View) aview + aView->Convert(Xp,Yp,X,Y,Z) +~~~~ + +Where Xp, Yp are the mouse coordinates in pixels and X,Y,Z the real coordinates in 3D space. + +3D Viewer Objects +----------------- + +The V3d package contains the set of commands and services of the 3D Viewer. +It provides a set of high level commands to control views and viewing modes. +This package is complementary to the Visual3D graphic package. + + CSF_WALKTHROUGH variable enables you to manage the perspective of the view +in the viewer by defining setenv CSF_WALKTHROUGH "Yes". + +If you use the syntax unsetenv CSF_WALKTHROUGH , you make sure that the variable +is deactivated. In this case, the eye is located outside the 3D bounding box of the view. +This is the default behavior for managing the view perspective. + +@section OCCT_TOVW_SECTION_6 Data Exchange + +Data Exchange is a key factor in using Open CASCADE Technology (as well as applications based thereon) +concurrently with other software such as CAD systems. It provides the openness of OCCT in a multi-software environment, +by allowing it to process external data and providing a good level of integration. + +This means obtaining results of good quality, and covering the needs of exchanges +from OCCT-based applications regardless of external data quality or requirements, +in particular in respect of allowed data types and arrangements between them, accepted gaps between geometries. + +This matter is addressed by Data Exchange Module, which is organized in a modular way. + +![](/technical_overview/images/technical_overview_de.png "") + +Data Exchange interfaces in OCCT allow software based on OCCT +to exchange data with various CAD software, thus ensuring a good level of interoperability. + +Data Exchange interfaces function either in accordance with the standards (IGES, STEP), +which can be used by various software packages for CAD, PDM etc., or as direct connectors to proprietary formats. + +Standardized Data Exchange +-------------------------- + +* STEP (AP203 : Mechanical Design, this covers General 3D CAD; AP214: Automotive Design) +* IGES (up to 5.3) +* STL +* VRML + +Data Exchange interfaces (STEP, IGES) allow to query and examine a file, +results of conversion and its validity. They are designed to support extensions (like new standards) in a common modular architecture. + +Extended data exchange +---------------------- + +Extended data exchange (XDE) allows you to extend the scope of exchange by translating + additional data attached to geometric ("BREP") data, thereby improving the interoperability with external software. +Data types such as colors, assembly descriptions and validation properties +(i.e. center of gravity, etc.) are supported. These data are stored together with shapes in an OCAF (XCAF) document. + + +Proprietary Data Exchange +------------------------ + +In addition to standard Data Exchange interfaces, separate components are available +to provide direct mapping and data adaptation (using Shape Healing) with CAD software supporting the following formats: + +* ACIS SAT +* Parasolid X_T +* DXF + +These components are based on the same architecture as interfaces with STEP and IGES. + +Translating a shape to STL Format +--------------------------------- + +OCCT includes a module for translating OCCT shapes to STL (Stereolithography) format. +STL is a format designed for rapid prototyping. +It is intended to send geometric data (volumic) to stereolithography machines, +which can read and interpret such data. These machines can transform a volumic model +to a physical prototype made of plastic, by using laser to coagulate material, +which corresponds to the volume, and set free the material around. +STL defines these surfaces by triangles. +Thus, no machining is required to switch from a virtual model to a physical one. + +Since STL files can only include solids described by their mesh structures, +OCCT shapes, which are intended to be written, must be solids, +components of solids or closed shells with a correct orientation. + +When translating shapes to STL format, remember that all references +to shapes mean references to OCCT shapes unless otherwise explicitly defined. +In addition, sets of faces or unclosed shells may also be translated but visualization in foreign viewers may be incorrect. + +Translating a shape to VRML Format +---------------------------------- + +The Virtual Reality Modeling Language (VRML) is a language +for describing multi-participant interactive simulations +* virtual worlds networked via the Internet and hyperlinked +with the World Wide Web. VRML is a format designed for animated visualization of solids. + +OCCT includes a module for translating OCCT shapes to VRML (Virtual Reality Modeling Language). +OCCT shapes may be translated in two representations (states): shaded or wireframe. +Since shaded VRML format files include only solids described by their mesh structures, the OCCT shapes intended to be written must be solids, components of solids or closed shells with a correct orientation. + +@subsection OCCT_TOVW_SECTION_6_1 General Definitions + +OCCT general definitions for Data Exchange include several enumerations and classes used by IGES and STEP data exchange interfaces. + +To define translation parameters and file headers, you can use: + + * Interface_InterfaceModel + * Interface_Static + +To manage Message display, use class Mesage_Messenger. + +To define the type of analysis of the source file, and to ensure the success +of the loading operation, you use the following enumerations from the IFSelect package: + + * PrintCount + * ReturnStatus + +To read and write attributes such as names, colors, layers for IGES and STEP +and validation properties and structure of assemblies for STEP, you can use an XDE document. + +It is possible to learn more about XDE documents from XDE User's guide + +See also: our web site at E-learning and Training. + + +@subsection OCCT_TOVW_SECTION_6_2 IGES + +The IGES interface reads IGES files and translates them to Open CASCADE Technology models. +IGES files produced in accordance with IGES standard versions up to and including version 5.3 can be read. +The interface is able to translate one entity, a group of entities or a whole file. +Before beginning a translation, you can set a range of parameters to manage the translation process. +If you like, you can also check file consistency before translation. + +The IGES interface also translates OCCT models to IGES files. +IGES files produced by this component conform to IGES standard version 5.3. + +Other kinds of data such as colors and names can be read or written +with the help of XDE tools IGESCAFControl_Reader and IGESCAFControl_Writer. + +Please, note: + + * an IGES model is an IGES file that has been loaded into memory. + * an IGES entity is an entity in the IGES normal sense. + * a root entity is the highest level entity of any given type, e.g. type 144 for surfaces and type 186 for solids. Roots are not referenced by other entities. + +It is possible to learn more about the IGES interface from IGES User's guide + +See also: our web site at E-learning and Training. + +@subsection OCCT_TOVW_SECTION_6_3 STEP + +The STEP interface reads STEP files produced in accordance with STEP Application Protocol 214 +(Conformance Class 2 both CD and DIS versions of schema) and translates them +to Open CASCADE Technology models. STEP Application Protocol 203 is also supported. + +The STEP interface also translates OCCT models to STEP files. STEP files that are produced +by this interface conform to STEP AP 203 or AP 214 ( +Conformance Class 2, either CD or DIS version of the schema) depending on the user's option. + +Basic interface reads and writes geometrical, topological STEP data and assembly structures. + +The interface is able to translate one entity, a group of entities or a whole file. + +Other kinds of data such as colors, validation properties, layers, names +and the structure of assemblies can be read or written +with the help of XDE tools - STEPCAFControl_Reader and STEPCAFControl_Writer. + +To choose a translation mode when exporting to a STEP format, use STEPControl_STEPModelType. + +There is a set of parameters that concern the translation and can be set before the beginning of the translation. + +Please, note: +* a STEP model is a STEP file that has been loaded into memory; +* all references to shapes indicate OCCT shapes unless otherwise explicitly stated; +* a root entity is the highest level entity of any given type, i.e. an entity that is not referenced by any other one. + +It is possible to learn more about the STEP interface from STEP User's guide +See also: our web site at E-learning and Training. + +@subsection OCCT_TOVW_SECTION_6_4 STL + +The STL component translates Open CASCADE Technology shapes to STL files. STL (Stereolithography) format is widely used for rapid prototyping. + +As STL files can only include solids described by their mesh structure, +the OCCT shapes to be written must be solids, components of solids or closed shells with a correct orientation. + +Note All references to shapes indicate OCCT shapes unless otherwise explicitly stated. + +Sets of faces or unclosed shells may also be translated to STL format but visualization with foreign viewers may be incorrect. + +@subsection OCCT_TOVW_SECTION_6_5 VRML + +The VRML component translates Open CASCADE Technology shapes to VRML 1.0 files +(Virtual Reality Modeling Language). OCCT shapes may be translated in two representations: +shaded or wireframe. A shaded representation present shapes as sets of triangles +computed by a mesh algorithm while a wireframe representation present shapes as sets of curves. + +As shaded VRML format files only include solids described by their mesh structures, +the OCCT shapes to be written must be solids, components of solids or closed shells with a correct orientation. + +Please, note: + + * all references to shapes indicate OCCT shapes unless otherwise explicitly stated; + * sets of faces or unclosed shells may also be translated to shaded VRML format but visualization with foreign viewers may be incorrect. + +@section OCCT_TOVW_SECTION_7 Application Framework + +The Application Framework uses an associativity engine to simplify the development of a CAD application. +Based on application/document architecture, it does this due to the following features: + + * Application data is handled by the mechanism of attributes + * Attributes may be organized according to your development needs + * Multiple documents can be managed by an application + * Ready-to-use modeling data attributes common to CAD/CAM applications + * Document modification and recomputation + * Data storage services + * A ready-to-use Undo-Redo and Copy-Paste functions + +Since OCAF handles your application structure, your only major development task is the creation +of application-specific data and GUIs. It is the organization of application data +due to which OCAF differs from any other CAD framework. In OCAF, data structures are not shape-driven, +but reference-key driven. In this respect, attributes such as shape data, color, material, +are attached to a deeper invariant structure of a model than the shapes themselves. +Then OCAF organizes and embeds these attributes in a document. +For example, a geometry becomes the value of the Shape attribute, +in the same way as a number is the value of the Integer attribute and a string is the value of the Name attribute. + +OCAF documents are in their turn managed by an OCAF application. + +Please, refer for more details to OCAF User's guide and the OCAF white papers: +* Application Framework +* Distribution of Data through OCAF Tree +* Application Framework Function Mechanism + +See also: our web site at E-learning and Training. + +@subsection OCCT_TOVW_SECTION_7_1 How to start working with OCAF + +To create a useful OCAF-based application, it is necessary to redefine the following +two deferred methods: Formats and ResourcesName + +In the Formats method, it is necessary to add the format +of the documents to be read by the application and which may have been built in other applications. + +For example: + +~~~~ + void myApplication::Formats(TColStd_SequenceOfExtendedString& Formats) + { + Formats.Append(TCollection_ExtendedString ("OCAF-myApplication")); + } +~~~~ + +In the ResourcesName method, you only define the name of the resource file. This +file contains several definitions for the saving and opening mechanisms associated +with each format and calling of the plug-in file. + +~~~~ + Standard_CString myApplication::ResourcesName() + { + return Standard_CString ("Resources"); + } +~~~~ + +To obtain the saving and opening mechanisms, it is necessary to set two environment +variables: CSF_PluginDefaults, which defines the path of the plug-in file and CSF_ResourcesDefault, which defines the resource file: + +~~~~ + SetEnvironmentVariable ( "CSF_ResourcesDefaults",myDirectory); + SetEnvironmentVariable ( "CSF_PluginDefaults",myDirectory); +~~~~ + +The plugin and the resource files of the application will be located in myDirector. +The name of the plugin file must be Plugin. + +Resource File +-------------- + +The resource file describes the documents (type and extension) and +the type of data that the application can manipulate +by identifying the storage and retrieval drivers appropriate for this data. + +Each driver is unique and identified by a GUID generated, for example, with the uuidgen tool in Windows. + +Five drivers are required to use all standard attributes provided within OCAF: + + * the schema driver (ad696002-5b34-11d1-b5ba-00a0c9064368) + * the document storage driver (ad696000-5b34-11d1-b5ba-00a0c9064368) + * the document retrieval driver (ad696001-5b34-11d1-b5ba-00a0c9064368) + * the attribute storage driver (47b0b826-d931-11d1-b5da-00a0c9064368) + * the attribute retrieval driver (47b0b827-d931-11d1-b5da-00a0c9064368) + +These drivers are provided as plug-ins and are located in the PappStdPlugin library. + + +For example, this is a resource file, which declares a new model document OCAF-MyApplication: + +~~~~ +formatlist:OCAF-MyApplication +OCAF-MyApplication.Description: MyApplication Document Version 1.0 +OCAF-MyApplication.FileExtension: sta +OCAF-MyApplication.StoragePlugin: ad696000-5b34-11d1-b5ba-00a0c9064368 +OCAF-MyApplication.RetrievalPlugin: ad696001-5b34-11d1-b5ba-00a0c9064368 +OCAF-MyApplicationSchema: ad696002-5b34-11d1-b5ba-00a0c9064368 +OCAF-MyApplication.AttributeStoragePlugin: 47b0b826-d931-11d1-b5da-00a0c9064368 +OCAF-MyApplication.AttributeRetrievalPlugin: 47b0b827-d931-11d1-b5da-00a0c9064368 +~~~~ + + +Plugin File +----------- + +The plugin file describes the list of required plug-ins to run the application and the +libraries in which plug-ins are located. + +You need at least the FWOSPlugin and the plug-in drivers to run an OCAF application. + +The syntax of each item is Identification.Location Library_Name, where: +* Identification is GUID. +* Location defines the location of the Identification (where its definition is found). +* Library_Name is the name (and path to) the library, where the plug-in is located. + +For example, this is a Plugin file: + +~~~~ +a148e300-5740-11d1-a904-080036aaa103.Location: FWOSPlugin +! base document drivers plugin +ad696000-5b34-11d1-b5ba-00a0c9064368.Location: PAppStdPlugin +ad696001-5b34-11d1-b5ba-00a0c9064368.Location: PAppStdPlugin +ad696002-5b34-11d1-b5ba-00a0c9064368.Location: PAppStdPlugin +47b0b826-d931-11d1-b5da-00a0c9064368.Location: PAppStdPlugin +47b0b827-d931-11d1-b5da-00a0c9064368.Location: PAppStdPlugin +~~~~ + +@subsection OCCT_TOVW_SECTION_7_2 Data Attributes + +The following ready-to-use attributes are provided: + * Shape attributes, which contain shapes and their evolution + * Standard attributes, a collection of common CAD/CAM attributes including: + * Real + * Integer + * Name + * Constrain + * Visualization attributes implement the Application Interactive Services in the context of Open CASCADE Application Framework. + * Function attributes which regenerate any data affected by modifications made in a +document + +Shape Attributes +---------------- + +A topological attribute can be seen as a hook into the topological structure. To +this hook, data can be attached and references defined. + + +It is used for keeping and access to topological objects and their evolution. All +topological objects are stored in the one user-protected TNaming_UsedShapes attribute +at the root label of the data framework. This attribute contains map with all topological +shapes, used in this document. + +TNaming_NamedShape attribute can be added to any other attribute. This attribute contains +references (hooks) to shapes from the TNaming_UsedShapes attribute and evolution +of these shapes. TNaming_NamedShape attribute contains a set of pairs of hooks: old +shape and new shape (see the figure below). It allows not only get the topological +shapes by the labels, but also trace evolution of the shapes and correctly resolve +dependent shapes by the changed one. + +If a shape is newly created, the old shape for the corresponding named shape is an empty +shape. If a shape is deleted, then the new shape in this named shape is empty. + +![](/technical_overview/images/technical_overview_shapeattrib.png "") + + +Shape attributes in data framework. +------------------------------- + +Algorithms can dispose sub-shapes of the result shape at the individual +label depending on necessity: + + * If a sub-shape must have some extra attributes (material of each face or color of each edge). In this case a specific sub-shape is placed to the separate label (usually, sub-label of the result shape label) with all attributes of this sub-shape. + * If topological naming is needed, a necessary and sufficient (for selected sub-shapes identification) set of sub-shapes is placed to the child labels of the result shape label. As usual, as far as basic solids and closed shells are concerned, all faces of the shape are disposed. Edges and vertices sub-shapes can be identified as intersection of contiguous faces. Modified/generated shapes may be placed to one named shape and identified as this named shape and source named shape that also can be identified with used algorithms. + + TNaming_NamedShape may contain a few pairs of hooks with the same evolution. In this +case topology shape, which belongs to the named shape, is a compound of new shapes. + +The data model contains both the topology and the hooks, and functions handle both +topological entities and hooks. Consider the case of a box function, which creates +a solid with six faces and six hooks. Each hook is attached to a face. If you want, +you can also have this function create hooks for edges and vertices as well as for +faces. + +Not all functions can define explicit hooks for all topological entities they create, +but all topological entities can be turned into hooks when necessary. This is where +topological naming is necessary. + +Consider the following example. A box defines six hooks for the six faces, but a +protrusion created on a face of the box can only define two hooks, one for the top +face, and one for all the lateral faces. As the basic wire defining the protrusion +may change in the future the protrusion function cannot designate the lateral faces +without ambiguity, their number may change. Figure 6 illustrates this example, faces +F1 to F6 of the box each have a hook. Faces F7 to F10, the lateral faces of the protrusion, +share a single hook, and face F11, the top face, has one hook. + +![](/technical_overview/images/technical_overview_occ_0068.png "") + +This structure raises two problems: + + * the value of the face F6 attribute-hook has changed; + * no data can be attached to F7. + +When a hook designates multiple faces like F7-F10 (or the hook on F6 if F6 was split) +it is impossible to attach data to an individual face like F7. + +In fact, the protrusion has a trimmed face F6. As a result, the value of this face +has changed and the current value of the hook attached to it needs to be found. Note +that this face could have been split in two faces (for example if the function had +been a slot) and both new faces would have been attached to the same hook. + + +Standard Attributes +------------------- + +Standard attributes are already existing ready-to-use attributes, which allow you +to create and modify labels and attributes for many basic data types. + +To find an attribute attached to a specific label, you use the GUID of the type of +attribute you are looking for. For this, find this information using the method + GetID and the method Find for the label as follows: + +~~~~ + Standard_GUID anID = MyAttributeClass::GetID(); + Standard_Boolean HasAttribute = aLabel.Find(anID,anAttribute); +~~~~ + + +Function Attributes +------------------- + +A model consists of data and algorithms manipulating with data. OCAF attributes store +data. A Function attribute stores data corresponding to a Function (see the white +paper OCAF Function Mechanism User's Guide). This mechanism manipulates with algorithms +computing the model in the optimal way following the modifications. + +@subsection OCCT_TOVW_SECTION_7_2 Persistent Data Storage + +There are three schemas of persistence, which you can use to store and retrieve OCAF data (documents): + + * Standard persistence schema, compatible with previous OCAF applications + * XmlOcaf persistence, allowing the storage of all OCAF data in XML form + * BinOcaf persistence, allowing the storage of all OCAF data in binary format form + + +All schemes are independent of each other, but they guarantee that the standard OCAF +attributes stored and retrieved by one schema will be storable and retrievable by +the other. Therefore in any OCAF application you can use any persistence schema or +even all three of them. The choice is made by the Format string of stored OCAF documents +or automatically by the file header data - * on retrieval. + +Persistent data storage in OCAF using the Standard package is presented in: + + * Basic Data Storage + * Persistent Collections + +Persistent storage of shapes is presented in the following chapters: + + * Persistent Geometry + * Persistent Topology + +Finally, information about opening and saving persistent data is presented in Standard +Documents. + + +@subsubsection OCCT_TOVW_SECTION_7_2_1 Basic Data Storage + +Normally, all data structures provided by Open CASCADE Technology are run-time structures, +in other words, transient data. As transient data, they exist only while an application +is running and are not stored permanently. However, the Data Storage module provides +resources, which enable an application to store data on disk as persistent data. + +Data storage services also provide libraries of persistent classes and translation +functions needed to translate data from transient to persistent state and vice-versa. + +Libraries of persistent classes +------------------------------- + +Libraries of persistent classes are extensible libraries of elementary classes you +use to define the database schema of your application. They include: +* Unicode (8-bit or 16-bit character type) strings +* Collections of any kind of persistent data such as arrays, stacks, queues, and graphs. + +All persistent classes are derived from the \b Persistent base class, which defines +a unique way of creating and handling persistent objects. You create new persistent +classes by inheriting from this base class. + +Translation Functions +--------------------- + +Translation functions allow you to convert persistent objects to transient ones and +vice-versa. These translation functions are used to build Storage and Retrieval drivers +of an application. + +For each class of 2D and 3D geometric types, and for the general shape class in the +topological data structure library, there are corresponding persistent class libraries, +which allow you to translate your data with ease. + +Creation of Persistent Classes +------------------------------- + +If you are using Unix platforms as well as WOK and CDL, you can create your own persistent +classes. In this case, data storage is achieved by implementing Storage and Retrieval +drivers. + +The Storage package is used to write and read persistent objects. +These objects are read and written by a retrieval or storage algorithm +( Storage_Schema object) in a container (disk, memory, network ...). +Drivers ( FSD_File objects) assign a physical container for data to be stored or retrieved. + +The standard procedure for an application in reading a container is as follows: + + *open the driver in reading mode, + *call the Read function from the schema, setting the driver as a parameter. This function returns an instance of the Storage_Data class which contains the data being read, + *close the driver. + +The standard procedure for an application in writing a container is as follows: + + *open the driver in writing mode, + *create an instance of the Storage_Data class, then add the persistent data to write with the function AddRoot , + *call the function Write from the schema, setting the driver and the Storage_Data instance as parameters, + *close the driver. + +@subsubsection OCCT_TOVW_SECTION_7_2_2 Persistent Collections + +Persistent collections are classes which handle dynamically sized collections of +data that can be stored in the database. These collections provide three categories +of service: + + * persistent strings, + * generic arrays of data, + * commonly used instantiations of arrays. + +Persistent strings are concrete classes that handle sequences of characters based +on both ASCII (normal 8-bit) and Unicode (16-bit) character sets. + +Arrays are generic classes, that is, they can hold a variety of objects not necessarily +inheriting from a unique root class. These arrays can be instantiated with any kind +of storable or persistent object, and then inserted into the persistent data model +of a user application. + +The purpose of these data collections is simply to convert transient data into its +persistent equivalent so that it can be stored in the database. To this end, the +collections are used to create the persistent data model and assure the link with +the database. They do not provide editing or query capabilities because it is more +efficient, within the operative data model of the application, to work with transient +data structures (from the TCollection package). + +For this reason: + + * the persistent strings only provide constructors and functions to convert between transient and persistent strings, and + * the persistent data collections are limited to arrays. In other words, PCollection does not include sequences, lists, queues, sets, stacks and so on (unlike TCollection). + +Persistent string and array classes are found in the PCollection package. +In addition, PColStd package provides standard, +and frequently used, instantiations of persistent arrays, for very simple objects. + +@subsubsection OCCT_TOVW_SECTION_7_2_3 Persistent Geometry + +The Persistent Geometry component describes geometric data structures which can be +stored in the database. These packages provide a way to convert data from the transient +"world" to the persistent "world". + +Persistent Geometry consists of a set of atomic data models parallel to the geometric +data structures described in the geometry packages. Geometric data models, independent +of each other, can appear within the data model of any application. The system provides +the means to convert each atomic transient data model into a persistent one, but +it does not provide a way for these data models to share data. + +Consequently, you can create a data model using these components, store data in, +and retrieve it from a file or a database, using the geometric components provided +in the transient and persistent "worlds". In other words, you customize the system +by declaring your own objects, and the conversion of the geometric components from +persistent to transient and vice versa is automatically managed for you by the system. + +However, these simple objects cannot be shared within a more complex data model. +To allow data to be shared, you must provide additional tools. + +Persistent Geometry is provided by several packages. + +The PGeom package describes geometric persistent objects in 3D space, such as points, +vectors, positioning systems, curves and surfaces. + +These objects are persistent versions of those provided by the Geom package: for +each type of transient object provided by Geom there is a corresponding type of persistent +object in the PGeom package. In particular the inheritance structure is parallel. + +However the PGeom package does not provide any functions to construct, edit or access +the persistent objects. Instead the objects are manipulated as follows: + + * Persistent objects are constructed by converting the equivalent transient Geom objects. To do this you use the MgtGeom::Translate function. + * Persistent objects created in this way are used to build persistent data structures that are then stored in a file or database. + * When these objects are retrieved from the file or database, they are converted back into the corresponding transient objects from the Geom package. To do this, you use MgtGeom::Translate function. + +In other words, you always edit or query transient data structures within the transient +data model supplied by the session. +Consequently, the documentation for the PGeom package consists simply of a list of available objects. + +The PGeom2d package describes persistent geometric objects in 2D space, such as points, +vectors, positioning systems and curves. This package provides the same type of services +as the PGeom package, but for the 2D geometric objects provided by the Geom2d package. +Conversions are provided by the MgtGeom::Translate function. + +~~~~ +//Create a coordinate system +Handle(Geom_Axis2Placement) aSys; + + +//Create a persistent coordinate PTopoDS_HShape.cdlsystem +Handle(PGeom_Axis2placement) + aPSys = MgtGeom::Translate(aSys); + +//Restore a transient coordinate system +Handle(PGeom_Axis2Placement) aPSys; + +Handle(Geom_Axis2Placement) + aSys = MgtGeom::Translate(aPSys); +~~~~ + + +@subsubsection OCCT_TOVW_SECTION_7_2_4 Persistent Topology + +The Persistent Topology component describes topological data structures which can be stored in the database. These packages provide a way to convert data from the transient "world" to the persistent "world". + +Persistent Topology is based on the BRep concrete data model provided by the topology packages. Unlike the components of the Persistent Geometry package, topological components can be fully shared within a single model, as well as between several models. + +Each topological component is considered to be a shape: a TopoDS_Shape object. The system's capacity to convert a transient shape into a persistent shape and vice-versa applies to all objects, irrespective of their complexity: vertex, edge, wire, face, shell, solid, and so on. + +When a user creates a data model using BRep shapes, he uses the conversion functions that the system provides to store the data in, and retrieve it from the database. The data can also be shared. + +Persistent Topology is provided by several packages. + +The PTopoDS package describes the persistent data model associated with any BRep shape; it is the persistent version of any shape of type TopoDS_Shape. As is the case for persistent geometric models, this data structure is never edited or queried, it is simply stored in or retrieved from the database. It is created or converted by the MgtBRep::Translate function. + +The MgtBRepAbs and PTColStd packages provide tools used by the conversion functions of topological objects. + +~~~~ +//Create a shape +TopoDS_Shape aShape; + +//Create a persistent shape +PtColStd_DoubleTransientPersistentMap aMap; + +Handle(PTopoDS_HShape) aPShape = + aMap.Bind2(MgtBRep::Translate + aShape,aMap,MgtBRepAbs_WithTriangle)); + +aPShape.Nullify(); + +//Restore a transient shape +Handle(PTopoDS_HShape) aPShape; + +Handle(TopoDS_HShape) aShape = + aMap.Bind1(MgtBRep::Translate + (aPShape,aMap,MgtBRepAbs_WithTriangle)); + +aShape.Nullify(); +~~~~ + +@subsubsection OCCT_TOVW_SECTION_7_2_5 Standard Documents + +Standard documents offer you a ready-to-use document containing a TDF-based data +structure. The documents themselves are contained in a class inheriting from TDocStd_Application +which manages creation, storage and retrieval of documents. + +You can implement undo and redo in your document, and refer from the data framework +of one document to that of another one. This is done by means of external link attributes, +which store the path and the entry of external links. To sum up, standard documents +alone provide access to the data framework. They also allow you to: +*Update external links; +*Manage the saving and opening of data; +*Manage undo/redo functionality. + +@section OCCT_TOVW_SECTION_8 FAQ + +Dynamic library loading problem +------------------------------- + +Open CASCADE Technology uses a dynamic library loading mode. +Sometimes, the error message such as the following appears: + +~~~~ + "cannot map libname.so .. under any of the filenames .." +~~~~ + +When this happens, check your PATH under Windows, LD_LIBRARY_PATH under UNIX , + SHLIB_PATH under HP-UX or LIBPATH under IBM AIX . +It should contain the path where the required dynamic library is located. + +Running Draw under Windows +--------------------------- + +When running DRAWEXE and using axo in the Command window you may see the "Invalid command name "axo" " message : + +Make sure that the OCCT directory name does not contain any blank spaces. +It causes some problems when reading the OCCT description TCL Commands files. +If you have set DRAWHOME and DRAWDEFAULT, replace \ by / in the variable. + +Error on application start on Windows +-------------------------------------- +If Windows shows an error message with the text *Application failed to initialize properly* +upon launching the application, check access rights for all libraries used in the application, in particular, third-party libraries. + +Make sure that you have all rights necessary to access these libraries. +It is recommended to use option *Inherit access rights from parent*. + +Problems with 3D viewer +-------------------- + +If the 3D viewer fails to display the scene properly, or works very slowly, or exhibits +another problem, make sure to have the latest version of the graphics card driver +installed. If this is not possible or does not help, try to decrease +hardware acceleration level (usually found in Troubleshooting section of the graphics card properties). + +Fatal error during graphic initialization +---------------------------------------- + +If you get the Fatal error during graphic initialization message when running +an Open CASCADE Technology based application, or if the application crashes +without displaying error messages, you must set the environment variable CSF_GRAPHICSHR as follows: + + * On Windows, if we suppose that OCCT is installed in D:\OpenCASCADE6.3.0 + +~~~~ + Set CSF_GraphicShr= D:\OpenCASCADE6.3.1\ros\win32\bin\TkOpenGl.dll +~~~~ + + * On Linux or Unix, if we suppose that OCCT is installed in .../mydisk/ OpenCASCADE6.3.0 + +~~~~ + Setenv CSF_GraphicsShr /mydisk/ OpenCASCADE6.3.0ros/lin/lib/libTKOpenGl.so +~~~~ + +@subsection OCCT_TOVW_SECTION_8_1 Memory Management + +In a work-session, geometry modeling applications create and delete a certain number +of C++ objects. In this context, memory allocation and de-allocation standard functions +are not suited to the system's requirements and for this reason a specialized Memory +Manager is implemented into Open CASCADE Technology. The Memory Manager is based +on the following principles: + + * small memory arrays are grouped into clusters and then recycled (clusters are never released to the system), + * large arrays are allocated and de-allocated through the standard functions of the system (the arrays are released to system when they are no longer used). + +The Reference Counter +------------------- +To lighten usual programming difficulties linked to the management of object life duration, before deleting an object, the user must ensure the object is no longer referenced and the delete function is secured by a reference counter. +A smart-pointer +called a Handle automates reference counter management and automatically deletes +an object when it is no longer referenced – the application never calls the delete +operator explicitly. To benefit from the memory manager in OCCT, transient classes +must inherit from TShared. The principle of allocation is as follows: + +~~~~ + Handle (TColStd_HSequenceOfInteger) H1 = new TColStd_HSequenceOfInteger; + // H1 has one reference and corresponds to 48 bytes of memory + { + Handle (TColStd_HSequenceOfInteger) H2; + H2 = H1; // H1 has two references + if (argc == 3) + { + Handle (TColStd_HSequenceOfInteger) H3; + H3 = H1; + // Here, H1 has three references + } + // Here, H1 has two references + } + // Here, H1 has 1 reference + } + // Here, H1 has no reference but the 48 bytes of memory are kept. + Handle (TColStd_HSequenceOfInteger) H1 = new TColStd_HSequenceOfInteger; + // Here, H1 has one reference and corresponds to the preceding 48 bytes of + // memory. In this case, there is no allocation of memory. +~~~~ + +Cycles +------ +As cycles are objects which reference one another, memory management is impossible +if the data structure contains any cycles, particularly if there are back references. + +For example, objects in a graph include primitives and each one of these primitives +has to know the graphic object to which it belongs (i.e. a reference to this graphic +object). With normal references, the classical handle is used. With back references, +a pointer is used. + +Memory Consumption +------------------ + +As a general rule, it is advisable to allocate memory through significant blocks. +In this way, the user can work with blocks of contiguous data and it facilitates +memory page manager processing. + +@subsection OCCT_TOVW_SECTION_8_2 How to define a handled object without CDL + +You can create a class manipulated by handle even if you do not use CDL (Open CASCADE Definition Language). +To do that you have to use the Define_Standard_Handle macro which is defined in the include file Standard_DefineHandle.hxx. + +Here is an example which shows how to define a class SamplePoint manipulated by handle. + +~~~~ + +Sample_Point.hxx: +--------------- + + #ifndef _Sample_Point_HeaderFile + #define _Sample_Point_HeaderFile + #ifndef _Standard_Macro_HeaderFile + #include + #endif + #include + #include + // Handle definition + // + + DEFINE_STANDARD_HANDLE(Sample_Point,MMgt_TShared) + class Sample_Point: public MMgt_TShared { + public: + Sample_Point(); + Sample_Point(const Standard_Real, const + Standard_Real); + void SetX(const Standard_Real x) { + myX = x; + } + void SetY(const Standard_Real y) { + myY = y; + } + Standard_Real X() const { + return myX; + } + Standard_Real Y() const { + return myY; + } + // some methods like DynamicType() or + IsKind() + // + DEFINE_STANDARD_RTTI(Sample_Point) + private: + Standard_Real myX; + Standard_Real myY; + }; + #endif + +Sample_Point.cxx: +---------------- + + #include + + // Implementation of Handle and type mgt + + IMPLEMENT_STANDARD_HANDLE(Sample_Point,MMgt_TShared) + IMPLEMENT_STANDARD_RTTI(Sample_Point,MMgt_TShared) + + // For ancestors, we add a IMPLEMENT_STANDARD_SUPERTYPE and + // a IMPLEMENT_STANDARD_SUPERTYPE_ARRAY_ENTRY macro. + // We must respect the order: from the direct ancestor class to the base class. + + IMPLEMENT_STANDARD_TYPE(Sample_Point) + IMPLEMENT_STANDARD_SUPERTYPE(MMgt_TShared) + IMPLEMENT_STANDARD_SUPERTYPE(Standard_Transient) + IMPLEMENT_STANDARD_SUPERTYPE_ARRAY() + IMPLEMENT_STANDARD_SUPERTYPE_ARRAY_ENTRY(MMgt_TShared) + IMPLEMENT_STANDARD_SUPERTYPE_ARRAY_ENTRY(Standard_Transient) + IMPLEMENT_STANDARD_SUPERTYPE_ARRAY_END() + IMPLEMENT_STANDARD_TYPE_END(Sample_Point) + + // Constructors implementation + + Sample_Point::Sample_Point(const + Standard_Real x, const Standard_Real y) + { + myX = x; + myY = y; + } + Sample_Point::Sample_Point() + { + myX = 0.0; + myY = 0.0; + } +~~~~ + +@subsection OCCT_TOVW_SECTION_8_3 When is it necessary to use a handle? + +When designing an object, the user is faced with the choice of manipulating that +object by value, or by handle. + + * If your object may have a long lifetime within the application and you want to make multiple references to it, it would be preferable to manipulate this object with a handle. The memory for the object will be allocated on the heap. The handle which points to that memory is a light object which can be rapidly passed in argument. This avoids the penalty of copying a large object. + * If your object will have a limited lifetime, for example, used within a single algorithm, it would be preferable to manipulate this object by value, non-regarding its size, because this object is allocated on the stack and the allocation and de-allocation of memory is extremely rapid, which avoids the implicit calls to 'new' and 'delete' occasioned by allocation on the heap. + * Finally, if an object will be created only once during, but will exist throughout the lifetime of the application, the best choice may be a class manipulated by handle or a value declared as a global variable. + + +@subsection OCCT_TOVW_SECTION_8_4 How to cast shape handle to void + +You can easily cast a reference to the handle object to void* by defining the following: + +~~~~ + void *pointer; + Handle(Some_class) aHandle; + // Here only a pointer will be copied + Pointer = &aHandle; + // Here the Handle object will be copied + aHandle = * (Handle(Some_Class) *)pointer; +~~~~ + +@subsection OCCT_TOVW_SECTION_8_5 How to test correct ending of OCCT algorithms + +Generally OCCT algorithms implement IsDone method, which returns true +if computation has been performed successfully from beginning to end or false if computation has failed. + +When IsDone returns true, the computation is successful regarding +to the input data, but it does not necessary mean that you get a result. For example, if +you perform a cut algorithm between two shapes without any common part, the IsDone +method will return true, but the result will be empty. + +So, in some cases, it can be necessary to analyse the structure of a result before +using it again in following computations. These tests are not done systematically +into algorithms to get faster computations. The application performs necessary tests +depending on the context. + +@subsection OCCT_TOVW_SECTION_8_6 How to cut, copy and paste inside a document + +To cut, copy and paste inside a document, you must use the CopyLabel class from the TDF package. +In fact, you must define a Label which contains the temporary value a cut or +copy operation (say, in Lab_Clipboard). You must also define two other labels: + +* One containing the data (e.g. Lab_source) +* One for the destination of the copy (e.g. Lab_ Target ) + +~~~~ + Copy = copy (Lab_Source => Lab_Clipboard) + Cut = copy + Lab_Source.ForgetAll() // command clear the contents of LabelSource. + Paste = copy (Lab_Clipboard => Lab_target) +~~~~ + +So we need a tool to copy all (or a part) of the content of a label and its sub-label, +to another place defined by a label. + +~~~~ + TDF_CopyLabel aCopy; + TDF_IDFilter aFilter (Standard_False); + + //Don't copy TDataStd_TreeNode attribute + + aFilter.Ignore(TDataStd_TreeNode::GetDefaultTreeID()); + aCopy.Load(aSource, aTarget); aCopy.UseFilter(aFilter); aCopy.Perform(); + + // copy the data structure to clipboard + + return aCopy.IsDone(); } +~~~~ + +The filter is used to forbid copying a specified type of attribute. +You can also have a look at TDF_Closure*, +which can be useful to determine the dependencies of the part you want to cut from the document. \ No newline at end of file diff --git a/dox/user_guides/draw_test_harness/draw_test_harness.md b/dox/user_guides/draw_test_harness/draw_test_harness.md new file mode 100644 index 0000000000..85ed40da9f --- /dev/null +++ b/dox/user_guides/draw_test_harness/draw_test_harness.md @@ -0,0 +1,7457 @@ +Draw Test Harness {#user_guides__test_harness} +=============================== + +@section occt_2142243456_1775316760 Introduction + +This manual explains how to use Draw, the test harness for Open CASCADE Technology (**OCCT**). It provides basic documentation on using Draw. For advanced information on Draw and its applications, see our offerings on our web site at http://www.opencascade.org/support/training + +Draw is a command interpreter based on TCL and a graphical system used to test and demonstrate Open CASCADE Technology modeling libraries. + + +@subsection occt_2142243456_17753167601 Overview + +Draw is a test harness for Open CASCADE Technology. It provides a flexible and easy to use means of testing and demonstrating the OCCT modeling libraries. + +Draw can be used interactively to create, display and modify objects such as curves, surfaces and topological shapes. + +Scripts may be written to customize Draw and perform tests. New types of objects and new commands may be added using the C++ programing language. + +Draw consists of: + + * A command interpreter based on the TCL command language. + * A 3d graphic viewer based on the X system. + * A basic set of commands covering scripts, variables and graphics. + * A set of geometric commands allowing the user to create and modify curves and surfaces and to use OCCT geometry algorithms. This set of commands is optional. + * A set of topological commands allowing the user to create and modify BRep shapes and to use the OCCT topology algorithms. + + +There is also a set of commands for each delivery unit in the modeling libraries: + +GEOMETRY, TOPOLOGY, ADVALGOS, GRAPHIC, PRESENTATION. + + +@subsection occt_2142243456_17753167602 Contents of this documentation + +This documentation describes: + + * The command language. + * The basic set of commands. + * The graphical commands. + * The Geometry set of commands. + * The Topology set of commands. + +This document does not describe other sets of commands and does not explain how to extend Draw using C++. + +This document is a reference manual. It contains a full description of each command. All descriptions have the format illustrated below for the exit command. +**Example** + +**exit** +Syntax: exit + +Terminates the Draw, TCL session. If the commands are read from a file using the source command, this will terminate the file. + +**Example** + +# this is a very short example +exit + + + +@subsection occt_2142243456_17753167603 Getting started + +Install Draw and launch Emacs. Get a command line in Emacs using *Esc x *and key in *woksh*. + +Since version 5.1.1 Open CASCADE Technology introduces a single executable in the DRAW Test Harness that supersedes the several separate executables that existed before. Respectively the user does not need to have his own executables to activate his custom commands. All he needs to do is to implement the commands themselves, they will be activated in the common executable. This executable is now called **DRAWEXE**. + +Commands grouped in toolkits can now be loaded at run-time thereby implementing dynamically loaded plug-ins. Thus, the user can work only with those commands that suit his needs adding these commands dynamically without leaving the Test Harness session. + +Declaration of available plug-ins is done through the special resource file(s). The **pload** command loads the plug-in in accordance with the specified resource file and activates the commands implemented in the plug-in. +The whole process of using new advantages of the plug-in mechanism as well as instructions for extending Test Harness are described below. + + +@subsubsection occt_2142243456_177531676031 Launching DRAW Test Harness + +Test Harness executable DRAWEXE is located in the $CASROOT/platform/bin directory (where platform is win32 for Windows, SunOS for Sun Solaris and Linux for Linux operating systems). Prior to launching it is important to make sure the environment is correctly set-up (usually this is done automatically after the installation process on Windows or after launching specific scripts on Unix/Linux) - refer to Technical Documentation for details. + + +@subsubsection occt_2142243456_177531676032 Plug-in resource file + +Open CASCADE Technology is shipped with the DrawPlugin resource file located in the $CASROOT/src/DrawResources directory. +The format of the file is compliant with standard Open CASCADE Technology resource files (see the Resource_Manager.cdl file for details). + +Each key defines a sequence of either further (nested) keys or a name of the dynamic library. Keys can be nested down to an arbitrary level. However, cyclic dependencies between the keys are not checked. +**Example** (excerpt from DrawPlugin): +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{.cpp} +OCAF               : VISUALIZATION, OCAFKERNEL +VISUALIZATION      : AISV +OCAFKERNEL         : DCAF + +DCAF               : TKDCAF +AISV               : TKViewerTest +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +@subsubsection occt_2142243456_177531676033 Activation of commands implemented in the plug-in + +To load a plug-in declared in the resource file and to activate the commands the following command must be used in Test Harness: + +pload [-PluginFileName] [[Key1] [Key2]...], where: + +-PluginFileName        Defines the name of a plug-in resource file (prefix ;-; is mandatory) described above. +If this parameter is omitted then the default name DrawPlugin is used. + +Key…                       Defines the key(s) enumerating plug-ins to be loaded. +If no keys are specified then the key named DEFAULT is used (if there is no such key in the file then no plug-ins are loaded). +According to the OCCT resource file management rules, to access the resource file the environment variable CSF_PluginFileNameDefaults (and optionally CSF_PluginFileNameUserDefaults) must be set and point to the directory storing the resource file. If it is omitted then the plug-in resource file will be searched in the $CASROOT/src/DrawResources directory. +**Examples:** + +Draw[]        pload -DrawPlugin OCAF +Will search the resource file DrawPlugin using variable CSF_DrawPluginDefaults (and CSF_DrawPluginUserDefaults) and will start with the OCAF key. Since the DrawPlugin is the file shipped with Open CASCADE Technology it will be found in the $CASROOT/src/DrawResources directory (unless this location is redefined by user's variables). The OCAF key will be recursively extracted into two toolkits/plug-ins: TKDCAF and TKViewerTest (e.g. on Windows they correspond to TKDCAF.dll and TKViewerTest.dll). Thus, commands implemented for Visualization and OCAF will be loaded and activated in Test Harness. + +Draw[]        pload (equivalent to pload -DrawPlugin DEFAULT). +Will find the default DrawPlugin file and the DEFAULT key. The latter finally maps to the TKTopTest toolkit which implements basic modeling commands. + + +@subsubsection occt_2142243456_177531676034 Mapping between former separate Test Harness executables and the new plug-ins + +Before version 5.1.1 Open CASCADE Technology used to be shipped with several separate executables providing different sets of commands. The following table represents the mapping between former executables and new plug-ins. + + +For instance, in order to activate commands available in the former AISViewer executable, now it is enough to use the command pload VISUALIZATION. + +When you have the tclsh prompt, key in the library references: + +*wokcd MDL:k1deb:ref:DRAWEXE*. At the prompt, key in the environment +(*@@ -setenv *in Unix). Draw displays a prompt. Here is a sample session: + +**Example** +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{.cpp} +# create two views, one 2d the other axonometric. Use either the command line or the Draw taskbar (*Views/av2d*). +Draw[1]av2d + +# create a 2d circle +Draw[2]circle c 0 0 1 0 5 +# trim the circle and dump it +Draw[3] trim c c 0 pi/2 +Draw[4] dump c +==***** Dump of c ***** +==Trimmed curve +==Parameters : 0 1.5707963267949 +==Basis curve : +==Circle +== Center :0, 0 +== XAxis :1, 0 +== YAxis :-0, 1 +== Radius :5 +# make a 3d circle from it, and turn it into a bspline +Draw[6] to3d c1 c +Draw[7] fit +Draw[8] convert c2 c1 +Draw[9] dump c2 +***** Dump of c2 ***** +BSplineCurve rational +Degree 2, 3 Poles, 2 Knots +Poles : +1 : 5, 0, 0 1 +2 : 5, 5, 0 0.707106781186548 +3 : 3.06161699786838e-16, 5, 0 1 +Knots : +1 : 0 3 +2 : 1.5707963267949 3 + +# make a surface of revolution from the spline +Draw[10] fit +Draw[11] help rev +reverse : reverse name ... +revsurf : revsurf name curvename x y z dx dy dz +# here you must click on the curve with the mouse +Draw[12] revsurf s . 5 5 0 -1 1 0 +Pick an object +Draw[13] fit +# rotate the view +Draw[14] u +Draw[15] erase c +# make a bspline surface and intersect with a plane +Draw[20] convert s s +Draw[21] fit +Draw[22] plane p 5 5 5 1 1 1 1 0 0 +Draw[23] intersect c p s +# pick one of the intersection curves +# you may get c_2 onstead of c_1 +Draw[24] whatis . +Pick an object +c_1 is a a 3d curve +Draw[25] clear +Draw[27] rename c_1 c +Draw[28] fit +# save the curve, use datadir (p. 32) to specify the +directory you want to save your file in. +Draw[29] save c +Draw[30] exit +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +In this example some geometrical operations have been performed. Objects displayed and written to files. +@section occt_2142243456_1668530729 The Command Language + + + + + +@subsection occt_2142243456_16685307294 Overview + +The command language used in Draw is Tcl. Tcl[1] documentation such as ;TCL and the TK Toolkit; by John K. Ousterhout (Addison-Wesley) will prove useful if you intend to use Draw extensively. + +This chapter is designed to give you a short outline of both the TCL language and some extensions included in Draw. The following topics are covered: + + * Syntax of the TCL language. + * Accessing variables in TCL and Draw. + * Control structures. + * Procedures. + +@subsection occt_2142243456_16685307295 Syntax of TCL + +TCL is an interpreted command language, not a structured language like C, Pascal, LISP or Basic. It uses a shell similar to that of csh. TCL is, however, easier to use than csh because control structures and procedures are easier to define. As well, because TCL does not assign a process to each command, it is faster than csh. + +The basic program for TCL is a script. A script consists of one or more commands. Commands are separated by new lines or semicolons. +**Example** +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{.cpp} +set a 24 +set b 15 +set a 25; set b 15 +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +Each command consists of one or more *words*; the first word is the name of a command and additional words are arguments to that command. + +Words are separated by spaces or tabs. In the preceding example each of the four commands has three words. A command may contain any number of words and each word is a string of arbitrary length. + +The evaluation of a command by TCL is done in two steps. In the first step, the command is parsed and broken into words. Some substitutions are also performed. In the second step, the command procedure corresponding to the first word is called and the other words are interpreted as arguments. In the first step, there is only string manipulation, The words only acquire *meaning* in the second step by the command procedure. + +The following substitutions are performed by TCL: + +**1. **Variable substitution is triggered by the $ character (as with csh), the content of the variable is substitued; { } may be used as in csh to enclose the name of the variable. +**Example** +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{.cpp} +# set a variable value +set file documentation +puts $file #to display file contents on the screen + +# a simple substitution, set psfile to documentation.ps +set psfile $file.ps +puts $psfile + +# another substitution, set pfile to documentationPS +set pfile ${file}PS + +# a last one, +# delete files NEWdocumentation and OLDdocumentation +foreach prefix {NEW OLD} {rm $prefix$file} +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +**2. **Command substitution is triggered by the [ ] characters. The brackets must enclose a valid script. The script is evaluated and the result is substituted. +Compare command construction in csh. + +**Example** +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{.cpp} +set degree 30 +set pi 3.14159265 +# expr is a command evaluating a numeric expression +set radian [expr $pi*$degree/180] +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +**3. **Backslash substitution is triggered by the backslash character. It is used to insert special characters like $, [ , ] , etc. It is also useful to insert a new line, a backslash terminated line is continued on the following line. +TCL uses two forms of *quoting* to prevent substitution and word breaking. + +**4. **Double quote *quoting* enables the definition of a string with space and tabs as a single word. Substitutions are still performed inside the inverted commas ; ;. + +**Example** +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{.cpp} +# set msg to ;the price is 12.00; +set price 12.00 +set msg ;the price is $price; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +**5. **Braces *quoting* prevents all substitutions. Braces are also nested. The main use of braces is to defer evaluation when defining procedures and control structures. Braces are used for a clearer presentation of TCL scripts on several lines. +**Example** +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{.cpp} +set x 0 +# this will loop for ever +# because while argument is ;0 3; +while ;$x 3; {set x [expr $x+1]} +# this will terminate as expected because +# while argument is {$x 3} +while {$x 3} {set x [expr $x+1]} +# this can be written also +while {$x 3} { +set x [expr $x+1] +} +# the following cannot be written +# because while requires two arguments +while {$x 3} +{ +set x [expr $x+1] +} +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +Comments start with a # character as the first non-blank character in a command. To add a comment at the end of the line, the comment must be preceded by a semi-colon to end the preceding command. +**Example** +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{.cpp} +# This is a comment +set a 1 # this is not a comment +set b 1; # this is a comment +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +The number of words is never changed by substitution when parsing in TCL. For example, the result of a substitution is always a single word. This is different from csh but convenient as the behavior of the parser is more predictable. It may sometimes be necessary to force a second round of parsing. **eval **accomplishes this: it accepts several arguments, concatenates them and executes the resulting script. + + +**Example** +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +# I want to delete two files + +set files ;foo bar; + +# this will fail because rm will receive only one argument +# and complain that ;foo bar; does not exit + +exec rm $files + +# a second evaluation will do it +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +@subsection occt_2142243456_16685307296 Accessing variables in TCL and Draw + +TCL variables have only string values. Note that even numeric values are stored as string literals, and computations using the **expr **command start by parsing the strings. Draw, however, requires variables with other kinds of values such as curves, surfaces or topological shapes. + +TCL provides a mechanism to link user data to variables. Using this functionality, Draw defines its variables as TCL variables with associated data. + +The string value of a Draw variable is meaningless. It is usually set to the name of the variable itself. Consequently, preceding a Draw variable with a *$ *does not change the result of a command. The content of a Draw variable is accessed using appropriate commands. + +There are many kinds of Draw variables, and new ones may be added with C++. Geometric and topological variables are described below. + +Draw numeric variables can be used within an expression anywhere a Draw command requires a numeric value. The **expr **command is useless in this case as the variables are stored not as strings but as floating point values. + +**Example** +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{.cpp} +# dset is used for numeric variables +# pi is a predefined Draw variable +dset angle pi/3 radius 10 +point p radius*cos(angle) radius*sin(angle) 0 +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +It is recommended that you use TCL variables only for strings and Draw for numerals. That way, you will avoid the **expr **command. As a rule, Geometry and Topology require numbers but no strings. + +@subsubsection occt_2142243456_166853072961 set, unset + +Syntax:                  set varname [value] +unset varname [varname varname ...] + +**set **assigns a string value to a variable. If the variable does not already exist, it is ñreated. + +Without a value, **set **returns the content of the variable. + +**unset **deletes variables. It is is also used to delete Draw variables. +**Example** +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{.cpp} +set a ;Hello world; +set b ;Goodbye; +set a +== ;Hello world; +unset a b +set a +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +

NOTE

+*The set command can set only one variable, unlike the dset command.* + + +See also: **dset**, **dval** + + +@subsubsection occt_2142243456_166853072962 dset, dval + +Syntax                   dset var1 value1 vr2 value2 ... +dval name + +**dset **assigns values to Draw numeric variables. The argument can be any numeric expression including Draw numeric variables. Since all Draw commands expect a numeric expression, there is no need to use $ or **expr**. The **dset **command can assign several variables. If there is an odd number of arguments, the last variable will be assigned a value of 0. If the variable does not exist, it will be created. + +**dval **evaluates an expression containing Draw numeric variables and returns the result as a string, even in the case of a single variable. This is not used in Draw commands as these usually interpret the expression. It is used for basic TCL commands expecting strings. +**Example** +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{.cpp} +# z is set to 0 +dset x 10 y 15 z +== 0 + +# no $ required for Draw commands +point p x y z + +# *puts* prints a string +puts ;x = [dval x], cos(x/pi) = [dval cos(x/pi)]; +== x = 10, cos(x/pi) = -0.99913874099467914 +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +

NOTE

+*In TCL, parentheses are not considered to be special characters. Do not forget to quote an expression if it contains spaces in order to avoid parsing different words. (a + b) is parsed as three words:;(a + b); or (a+b) are correct.* + +See also: **set**, **unset** + + + +@subsection occt_2142243456_16685307297 lists + +TCL uses lists. A list is a string containing elements separated by spaces or tabs. If the string contains braces, the braced part accounts as one element. + +This allows you to insert lists within lists. +**Example** +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{.cpp} +# a list of 3 strings +;a b c; + +# a list of two strings the first is a list of 2 +;{a b} c; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +Many TCL commands return lists and **foreach **is a useful way to create loops on list elements. + +@subsubsection occt_2142243456_166853072971 Control Structures + +TCL allows looping using control structures. The control structures are implemented by commands and their syntax is very similar to that of their C counterparts (**if**, **while**, **switch**, etc.). In this case, there are two main differences between TCL and C: + +2. You use braces instead of parentheses to enclose conditions. +3. You do not start the script on the next line of your command. + + +@subsubsection occt_2142243456_166853072911 if + +Syntax       if condition script [elseif script .... else script] + +**If **evaluates the condition and the script to see whether the condition is true. +**Example** +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{.cpp} +if {$x 0} { +puts ;positive; +} elseif {$x == 0} { +puts ;null; +} else { +puts ;negative; +} +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +@subsubsection occt_2142243456_166853072912 while, for, foreach + +Syntax:                  while condition script +for init condition reinit script +foreach varname list script + +The three loop structures are similar to their C or csh equivalent. It is important to use braces to delay evaluation. **foreach **will assign the elements of the list to the variable before evaluating the script. +**Example** +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{.cpp} +# while example +dset x 1.1 +while {[dval x] 100} { + circle c 0 0 x + dset x x*x +} +# for example +# incr var d, increments a variable of d (default 1) +for {set i 0} {$i 10} {incr i} { + dset angle $i*pi/10 + point p$i cos(angle0 sin(angle) 0 +} +# foreach example +foreach object {crapo tomson lucas} {display $object} +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +See also: **break**, **continue** + + +@subsubsection occt_2142243456_166853072913 break, continue + +Syntax:                  break +continue + +Within loops, the **break **and **continue **commands have the same effect as in C. + +**break **interrupts the innermost loop and **continue **jumps to the next iteration. +**Example** +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{.cpp} +# search the index for which t$i has value ;secret; +for {set i 1} {$i = 100} {incr i} { + if {[set t$i] == ;secret;} break; +} +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +@subsection occt_2142243456_16685307292 Procedures + +TCL can be extended by defining procedures using the **proc **command, which sets up a context of local variables, binds arguments and executes a TCL script. + +The only problematic aspect of procedures is that variables are strictly local, and as they are implicitly created when used, it may be difficult to detect errors. + +There are two means of accessing a variable outside the scope of the current procedures: **global **declares a global variable (a variable outside all procedures); **upvar **accesses a variable in the scope of the caller. Since arguments in TCL are always string values, the only way to pass Draw variables is by reference, i.e. passing the name of the variable and using the **upvar **command as in the following examples. + +As TCL is not a strongly typed language it is very difficult to detect programing errors and debugging can be tedious. TCL procedures are, of course, not designed for large scale software development but for testing and simple command or interactive writing. + + +@subsubsection occt_2142243456_166853072921 proc + +Syntax:                  proc argumentlist script + +**proc **defines a procedure. An argument may have a default value. It is then a list of the form {argument value}. The script is the body of the procedure. + +**return **gives a return value to the procedure. +**Example** +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{.cpp} +# simple procedure +proc hello {} { + puts ;hello world; +} +# procedure with arguments and default values +proc distance {x1 y1 {x2 0} {y2 0}} { + set d [expr (x2-x1)*(x2-x1) + (y2-y1)*(y2-y1)] + return [expr sqrt(d)] +} +proc fact n { + if {$n == 0} {return 1} else { + return [expr n*[fact [expr n -1]]] + } +} +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +See also: **global**, **upvar** + + +@subsubsection occt_2142243456_166853072922 global, upvar + +Syntax:                  global varname [varname ...] +upvar varname localname [varname localname ...] + +**global **accesses high level variables. Unlike C, global variables are not visible in procedures. + +**upvar **gives a local name to a variable in the caller scope. This is useful when an argument is the name of a variable instead of a value. This is a call by reference and is the only way to use Draw variables as arguments. + +

NOTE

+*Note in the following examplesthat the $ character is always* +*necessarily used to access the arguments.* +**Example** +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{.cpp} +# convert degree to radian +# pi is a global variable +proc deg2rad (degree} { + return [dval pi*$degree/2.] +} +# create line with a point and an angle +proc linang {linename x y angle} { + upvar linename l + line l $x $y cos($angle) sin($angle) +} +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +@section occt_2142243456_967049381 Basic Commands + +This chapter describes all the commands defined in the basic Draw package. Some are TCL commands, but most of them have been formulated in Draw. These commands are found in all Draw applications. The commands are grouped into four sections: + + * General commands, which are used for Draw and TCL management. + * Variable commands, which are used to manage Draw variables such as storing and dumping. + * Graphic commands, which are used to manage the graphic system, and so pertain to views. + * Variable display commands, which are used to manage the display of objects within given views. + +Note that Draw also features a GUI taskbar providing an alternative way to give certain general, graphic and display commands + + + +@subsection occt_2142243456_9670493811 General commands + +This section describes several useful commands: **help **to get information, **source **to eval a script from a file, **spy **to capture the commands in a file, **cpulimit **to limit the process cpu time, **wait **to waste some time, **chrono **to time commands. + + +@subsubsection occt_2142243456_96704938111 help + +Syntax:                  help [command [helpstring group]] + +Provides help or modifies the help information. + +**help **without arguments lists all groups and the commands in each group. + +Specifying the command returns its syntax and in some cases, information on the command, The joker,*, is automatically added at the end so that all completing commands are returned as well. +**Example** +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{.cpp} +# Gives help on all commands starting with *a* +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +@subsubsection occt_2142243456_96704938112 source + +Syntax:                  source filename + +Executes a file. + +The **exit **command will terminate the file. + +See also: exit + + +@subsubsection occt_2142243456_96704938113 spy + +Syntax:                  spy [filename] + +Saves interactive commands in the file. If spying has already been performed, the current file is closed. **spy **without an argument closes the current file and stops spying. If a file already exists, the file is overwritten. Commands are not appended. +If a command returns an error it is saved with a comment mark. + +The file created by **spy **can be executed with the **source **command. +**Example** +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{.cpp} +# all commands will be saved in the file ;session; +spy session +# the file ;session; is closed and commands are not saved +spy +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +See also: **source** + + +@subsubsection occt_2142243456_96704938114 cpulimit + +Syntax:                  cpulimit [nbseconds] + +**cpulimit **limits a process after the number of seconds specified in *nbseconds. *It is used in tests to avoid infinite loops. **cpulimit **without arguments removes all existing limits. +**Example** +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{.cpp} +#limit cpu to one hour +cpulimit 3600 +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +@subsubsection occt_2142243456_96704938115 wait + +Syntax:                  wait [nbseconds] + +Suspends execution for the number of seconds specified in *nbseconds*. The default value is ten (10) seconds. This is a useful command for a slide show. + +
Example
+ +# You have ten seconds ... +wait + +@subsubsection occt_2142243456_96704938116 chrono + +Syntax:                  chrono [ name start/stop/reset/show] + +Without arguments, **chrono **activates Draw chronometers. The elapsed time ,cpu system and cpu user times for each command will be printed. + +With arguments, **chrono **is used to manage activated chronometers. You can perform the following actions with a chronometer. + + * run the chronometer (start). + * stop the chronometer (stop). + * reset the chronometer to 0 (reset). + * display the current time (show). + +**Example** +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{.cpp} +chrono +==Chronometers activated. +ptorus t 20 5 +==Elapsed time: 0 Hours 0 Minutes 0.0318 Seconds +==CPU user time: 0.01 seconds +==CPU system time: 0 seconds +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +@subsection occt_2142243456_9670493812  Variable management commands + +@subsubsection occt_2142243456_96704938121 isdraw, directory + +Syntax:                  isdraw varname +directory [pattern] + +**isdraw **tests to see if a variable is a Draw variable. **isdraw **will return 1 if there is a Draw value attached to the variable. +Use **directory **to return a list of all Draw global variables matching a pattern. + +**Example** +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{.cpp} +set a 1 +isdraw a +=== 0 + +dset a 1 +isdraw a +=== 1 + +circle c 0 0 1 0 5 +isdraw c +=== 1 + +# to destroy all Draw objects with name containing curve +foreach var [directory *curve*] {unset $var} +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +See also: **whatis** + + +@subsubsection occt_2142243456_96704938122 whatis, dump + +Syntax:                  whatis varname [varname ...] +dump varname [varname ...] + +**whatis **returns short information about a Draw variable. This is usually the type name. + +**dump **returns a brief type description, the coordinates, and if need be, the parameters of a Draw variable. + +**Example** +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{.cpp} +circle c 0 0 1 0 5 +whatis c +c is a 2d curve + +dump c + +***** Dump of c ***** +Circle +Center :0, 0 +XAxis :1, 0 +YAxis :-0, 1 +Radius :5 +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +

NOTE

+*The behavior of whatis on other variables (not Draw) is not* +*excellent.* + + +@subsubsection occt_2142243456_96704938123 rename, copy + +Syntax:      rename varname tovarname [varname tovarname ...] +copy varname tovarname [varname tovarname ...] + +**rename **changes the name of a Draw variable. The original variable will no longer exist. Note that the content is not modified. Only the name is changed. + +**copy **creates a new variable with a copy of the content of an existing variable. The exact behavior of **copy **is type dependent; in the case of certain topological variables, the content may still be shared. +**Example** +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{.cpp} +circle c1 0 0 1 0 5 +rename c1 c2 + +# curves are copied, c2 will not be modified +copy c2 c3 +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +@subsubsection occt_2142243456_96704938124 datadir, save, restore + +Syntax:                  datadir [directory] +save variable [filename] +restore filename [variablename] + +**datadir **without arguments prints the path of the current data directory. +**datadir **with an argument sets the data directory path. +If the path starts with a dot (.) only the last directory name will be changed in the path. + +**save **writes a file in the data directory with the content of a variable. By default the name of the file is the name of the variable. To give a different name use a second argument. + +**restore **reads the content of a file in the data directory in a local variable. By default, the name of the variable is the name of the file. To give a different name, use a second argument. + +The exact content of the file is type-dependent. They are usually ASCII files and so, architecture independent. +**Example** +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{.cpp} +# note how TCL accesses shell environment variables +# using $env() +datadir +==. + +datadir $env(WBCONTAINER)/data/default +==/adv_20/BAG/data/default + +box b 10 20 30 +save b theBox +==/adv_20/BAG/data/default/theBox + +# when TCL does not find a command it tries a shell command +ls [datadir] +== theBox + +restore theBox +== theBox +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +@subsection occt_2142243456_9670493813 User defined commands + +DrawTrSurf provides commands to create and display a Draw **geometric **variable from a Geom_Geometry object and also get a Geom_Geometry object from a Draw geometric variable name. + +DBRep provides commands to create and display a Draw **topological **variable from a TopoDS_Shape object and also get a TopoDS_Shape object from a Draw topological variable name. + +@subsubsection occt_2142243456_96704938131 set + +**DrawTrSurf Package:** +Syntax: + +void Set(Standard_CString& Name,const gp_Pnt& G) ; +void Set(Standard_CString& Name,const gp_Pnt2d& G) ; +void Set(Standard_CString& Name, +const Handle(Geom_Geometry)& G) ; +void Set(Standard_CString& Name, +const Handle(Geom2d_Curve)& C) ; +void Set(Standard_CString& Name, +const Handle(Poly_Triangulation)& T) ; +void Set(Standard_CString& Name, +const Handle(Poly_Polygon3D)& P) ; +void Set(Standard_CString& Name, +const Handle(Poly_Polygon2D)& P) ; + +**DBRep Package:** +Syntax: + +void Set(const Standard_CString Name, +const TopoDS_Shape& S) ; + +**Example: DrawTrSurf** + +Handle(Geom2d_Circle) C1 = new Geom2d_Circle +(gce_MakeCirc2d (gp_Pnt2d(50,0,) 25)); +DrawTrSurf::Set(char*, C1); + +**Example: DBRep** + +TopoDS_Solid B; +B = BRepPrimAPI_MakeBox (10,10,10); +DBRep::Set(char*,B); + +See also: **get** + +@subsubsection occt_2142243456_96704938132 get + +**DrawTrSurf Package:** +Syntax: + +Handle_Geom_Geometry Get(Standard_CString& Name) ; + +**DBRep Package:** +Syntax: + +TopoDS_Shape Get(Standard_CString& Name, +const TopAbs_ShapeEnum Typ = TopAbs_SHAPE, +const Standard_Boolean Complain += Standard_True) ; +**Example: DrawTrSurf** + +Standard_Integer MyCommand +(Draw_Interpretor& theCommands, +Standard_Integer argc, char** argv) +{...... +// Creation of a Geom_Geometry from a Draw geometric +// name +Handle (Geom_Geometry) aGeom= DrawTrSurf::Get(argv[1]); +} + +**Example: DBRep** + +Standard_Integer MyCommand +(Draw_Interpretor& theCommands, +Standard_Integer argc, char** argv) +{...... +// Creation of a TopoDS_Shape from a Draw topological +// name +TopoDS_Solid B = DBRep::Get(argv[1]); +} +See also: **set** + +@section occt_2142243456_445622066 Graphic Commands + +Graphic commands are used to manage the Draw graphic system. Draw provides a 2d and a 3d viewer with up to 30 views. Views are numbered and the index of the view is displayed in the window’s title. Objects are displayed in all 2d views or in all 3d views, depending on their type. 2d objects can only be viewed in 2d views while 3d objects – only in 3d views correspondingly. + +@subsection occt_2142243456_4456220661 Axonometric viewer + +@subsubsection occt_2142243456_44562206611 view, delete + +Syntax:                  view index type [X Y W H] +delete [index] + +**view **is the basic view creation command: it creates a new view with the given index. If a view with this index already exits, it is deleted. The view is created with default parameters and X Y W H are the position and dimensions of the window on the screen. Default values are 0, 0, 500, 500. + +As a rule it is far simpler either to use the procedures **axo**, **top**, **left **or to click on the desired view type in the menu under *Views *in the taskbar.. + +**delete **deletes a view. If no index is given, all the views are deleted. + +Type selects from the following range: + + * AXON: Axonometric view + * PERS: Perspective view + * +X+Y: View on both axes (i.e. a top view), other codes are -X+Y, +Y-Z etc. + * -2D- : 2d view + +The index, the type, the current zoom are displayed in the window title . +**Example** +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{.cpp} +# this is the content of the mu4 procedure +proc mu4 {} { +delete +view 1 +X+Z 320 20 400 400 +view 2 +X+Y 320 450 400 400 +view 3 +Y+Z 728 20 400 400 +view 4 AXON 728 450 400 400 +} +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +See also: **axo, pers, top, bottom, left, right, front, back, mu4, v2d, av2d, smallview** + +@subsubsection occt_2142243456_44562206612  axo, pers, top, ... + +Syntax:      axo +pers +... +smallview type + +All these commands are procedures used to define standard screen layout. They delete all existing views and create new ones. The layout usually complies with the European convention, i.e. a top view is under a front view. + + * **axo **creates a large window axonometric view. + * **pers **creates a large window perspective view. + * **top**, **bottom**, **left**, **right**, **front**, **back **create a large window axis view + * **mu4 **creates four small window viewsview: front, left, top and axo. + * **v2d**: creates a large window 2d view. + * **av2d **creates two small window views, one 2d and one axo +**smallview **creates a view at the bottom right of the screen of the given type. + +See also: **view**, **delete** + + +@subsubsection occt_2142243456_44562206613 mu, md, 2dmu, 2dmd, zoom, 2dzoom + +Syntax:                  mu [index] value +2dmu [index] value +zoom [index] value +wzoom + +**mu **(magnify up) increases the zoom in one or several views by a factor of 10%. +**md **(magnify down) decreases the zoom by the inverse factor. **2dmu **and **2dmd** +perform the same on one or all 2d views. + +**zoom **and **2dzoom **set the zoom factor to a value specified by you. The current +zoom factor is always displayed in the window’s title bar. Zoom 20 represents a +full screen view in a large window; zoom 10, a full screen view in a small one. + +**wzoom **(window zoom) allows you to select the area you want to zoom in on with the mouse. You will be prompted to give two of the corners of the area that you want to magnify and the rectangle so defined will occupy the window of the view. + +**Example** +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{.cpp} +# set a zoom of 2.5 +zoom 2.5 + +# magnify by 10% +mu 1 + +# magnify by 20% +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +See also: **fit**, **2dfit** + + +@subsubsection occt_2142243456_44562206614 pu, pd, pl, pr, 2dpu, 2dpd, 2dpl, 2dpr + +Syntax:                  pu [index] +pd [index] + +The **p_ **commands are used to pan. **pu **and **pd **pan up and down respectively;**pl **and **pr **pan left and right respectively. Each time the view is displaced by 40 pixels.When no index is given, all views will pan in the direction specified. + +**Example** +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{.cpp} +# you have selected one anonometric view +pu +# or +pu 1 + +# you have selected an mu4 view; the object in the third +# view will pan up +pu 3 +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +See also: **fit**, **2dfit** + + +@subsubsection occt_2142243456_44562206615 fit, 2dfit + +Syntax:      fit [index] +2dfit [index] + +**fit **computes the best zoom and pans on the content of the view. The content of the view will be centered and fit the whole window. + +When fitting all views a unique zoom is computed for all the views. All views are on the same scale. + +**Example** +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{.cpp} +# fit only view 1 +fit 1 +# fit all 2d views +2dfit +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +See also: **zoom**, **mu**, **pu** + + +@subsubsection occt_2142243456_44562206616 u, d, l, r + +Syntax:      u [index] +d [index] +l [index] +r [index] + +**u**, **d**, **l**, **r **Rotate the object in view around its axis by five degrees up, down, left or right respectively. This command is restricted to axonometric and perspective views. + +**Example** +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{.cpp} +# rotate the view up +u +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +@subsubsection occt_2142243456_44562206617 focal, fu, fd + +Syntax:                  focal [f] +fu [index] +fd [index] +**focal **changes the vantage point in perspective views. A low f value increases the perspective effect; a high one give a perspective similar to that of an axonometric view. The default value is 500. + +Use **fu **and **fd **to increase or decrease the focal value by 10%. **fd **makes the eye closer to the object. +**Example** +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{.cpp} +pers +repeat 10 fd +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +*NOTE* +*Do not use a negative or null focal value.* + +See also: **pers** + + +@subsubsection occt_2142243456_44562206618 color + +Syntax: color index name + +**color **sets the color to a value. The index of the color is a value between 0 and 15. The name is an X window color name. The list of these can be found in the file rgb.txt in the X library directory. + +The default values are 0 White, 1 Red, 2 Green, 3 Blue, 4 Cyan, 5 Gold, 6 Magenta, 7 Marron, 8 Orange, 9 Pink, 10 Salmon, 11 Violet, 12 Yellow, 13 Khaki, 14 Coral. +**Example** +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{.cpp} +# change the value of blue +color 3 ;navy blue; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +

NOTE

+*The color change will be visible on the next redraw of the* +*views, for example after fit or mu, etc.* + + +@subsubsection occt_2142243456_44562206619 dtext + +Syntax:      dtext [x y [z]] string + +**dtext **displays a string in all 3d or 2d views. If no coordinates are given, a graphic selection is required. If two coordinates are given, the text is created in a 2d view at the position specified. With 3 coordinates, the text is created in a 3d view. + +The coordinates are real space coordinates. + +**Example** +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{.cpp} +# mark the origins +dtext 0 0 bebop +dtext 0 0 0 bebop +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +@subsubsection occt_2142243456_445622066110 hardcopy, hcolor, xwd + +Syntax:      hardcopy [index] +hcolor index width gray +xwd [index] filename + +**hardcopy **creates a postcript file called a4.ps in the current directory. This file contains the postscript description of the view index, and will allow you to print the view. + +**hcolor **lets you change the aspect of lines in the postscript file. It allows to specify a width and a gray level for one of the 16 colors. **width **is measured in points with default value as 1, **gray **is the gray level from 0 = black to 1 = white with default value as 0. All colors are bound to the default values at the beginning. + +**xwd **creates an X window xwd file from an active view. By default, the index is set to1. To visualize anxwd file, use the unix command **xwud**. +**Example** +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{.cpp} +# all blue lines (color 3) +# will be half-width and gray +hcolor 3 0.5 + +# make a postscript file and print it +hardcopy +lpr a4.ps + +# make an xwd file and display it +xwd theview +xwud -in theview +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +

NOTE

+*When more than one view is present, specify the index of the view.* +*Only use a postscript printer to print postscript files.* + +See also: **color** + + +@subsubsection occt_2142243456_445622066111 wclick, pick + +Syntax:      wclick +pick index X Y Z b [nowait] + +**wclick **defers an event until the mouse button is clicked. The message ;just click; is displayed. + +Use the **pick **command to get graphic input. The arguments must be names for variables where the results are stored. + + * index: index of the view where the input was made. + * X,Y,Z: 3d coordinates in real world. + * b: b is the mouse button 1,2 or 3. + +When there is an extra argument, its value is not used and the command does not wait for a click; the value of b may then be 0 if there has not been a click. + +This option is useful for tracking the pointer. + +*NOTE* +*The results are stored in Draw numeric variables.* +**Example** +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{.cpp} +# make a circle at mouse location +pick index x y z b +circle c x y z 0 0 1 1 0 0 0 30 + +# make a dynamic circle at mouse location +# stop when a button is clicked +# (see the repaint command) + +dset b 0 +while {[dval b] == 0} { +pick index x y z b nowait +circle c x y z 0 0 1 1 0 0 0 30 +repaint +} +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +See also: **repaint** + + +Draw provides commands to manage the display of objects. **display**, **donly **are used to display, **erase**, **clear**, **2dclear **to erase. The **autodisplay **command is used to check whether variables are displayed when created. + +The variable name ;.; (dot) has a special status in Draw. Any Draw command expecting a Draw object as argument can be passed a dot. The meaning of the dot is the following. + + * If the dot is an input argument, a graphic selection will be made. Instead of getting the object from a variable, Draw will ask you to select an object in a view. + * If the dot is an output argument, an unnamed object will be created. Of course this makes sense only for graphic objects: if you create an unnamed number you will not be able to access it. This feature is used when you want to create objects for display only. + * If you do not see what you expected while executing loops or sourcing files, use the **repaint **and **dflush **commands. + +**Example** +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{.cpp} +# OK use dot to dump an object on the screen +dump . + +point . x y z + +#Not OK. display points on a curve c +# with dot no variables are created +for {set i 0} {$i = 10} {incr i} { +cvalue c $i/10 x y z +point . x y z +} + +# point p x y z +# would have displayed only one point +# because the precedent variable content is erased + +# point p$i x y z +# is an other solution, creating variables +# p0, p1, p2, .... + +# give a name to a graphic object +rename . x +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +@subsubsection occt_2142243456_445622066112 autodisplay + +Syntax:      autodisplay [0/1] + +By default, Draw automatically displays any graphic object as soon as it is created. This behavior known as autodisplay can be removed with the command **autodisplay**. Without arguments, **autodisplay **toggles the autodisplay mode. The command always returns the current mode. + +When **autodisplay **is off, using the dot return argument is ineffective. +**Example** +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{.cpp} +# c is displayed +circle c 0 0 1 0 5 + +# toggle the mode +autodisplay +== 0 +circle c 0 0 1 0 5 + +# c is erased, but not displayed +display c +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +See also: **display** + +@subsubsection occt_2142243456_445622066113 display, donly + +Syntax:      display varname [varname ...] +donly varname [varname ...] + +**display **makes objects visible. + +**donly **(*display only*) makes objects visible and erases all other objects. It is very useful to extract one object from a messy screen. +**Example** +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{.cpp} +# to see all objects +foreach var [directory] {display $var} + +# to select two objects and erase the other ones +donly . . +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +See also: **erase** + + +@subsubsection occt_2142243456_445622066114 erase, clear, 2dclear + +Syntax:      erase [varname varname ...] +clear +2dclear + +**erase **removes objects from all views. **erase **without arguments erases everything in 2d and 3d. + +**clear **erases only 3d objects and **2dclear, **only 2d objects. **erase **without arguments is similar to ; clear; 2dclear;. +**Example** +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{.cpp} +# erase eveerything with a name starting with c_ +foreach var [directory c_*] {erase $var} + +# clear 2d views +2d clear +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +See also: **display** +@subsubsection occt_2142243456_445622066115 repaint, dflush + +Syntax:      repaint +dflush + +**repaint **forces repainting of views. + +**dflush **flushes the graphic buffers. + +These commands are useful within loops or in scripts. + +When an object is modified or erased, the whole view must be repainted. To avoid doing this too many times, Draw sets up a flag and delays the repaint to the end of the command in which the new prompt is issued. In a script, you may want to display the result of a change immediately. If the flag is raised, **repaint **will repaint the views and clear the flag. + +Graphic operations are buffered by Draw (and also by the X system). Usually the buffer is flushed at the end of a command and before graphic selection. If you want to flush the buffer from inside a script, use the **dflush **command. +**Example** +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{.cpp} +# See the example with the pick command +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{.cpp} +See also: **pick** + +@subsection occt_2142243456_4456220662 AIS viewer – view commands + + +@subsubsection occt_2142243456_44562206621 vinit + +Syntax:                  vinit + +Creates the 3D viewer window + +@subsubsection occt_2142243456_44562206622 vhelp + +Syntax:                  vhelp + +Displays help in the 3D viewer window. The help consists in a list of hotkeys and their functionalities. + +@subsubsection occt_2142243456_44562206623 vtop + +Syntax:                  vtop + +Displays top view in the 3D viewer window. +**Example** +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{.cpp} +vinit +box b 10 10 10 +vdisplay b +vfit +vtop +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +@subsubsection occt_2142243456_44562206624 vaxo + +Syntax:                  vaxo + +Displays axonometric view in the 3D viewer window. +**Example** +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{.cpp} +vinit +box b 10 10 10 +vdisplay b +vfit +vaxo +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +@subsubsection occt_2142243456_44562206625 vsetbg + +Syntax:                  vsetbg imagefile [filltype] + +Loads image file as background. **filltype** must be **NONE, CENTERED, TILED or STRETCH**. +**Example** + +vinit +vsetbg myimage.brep CENTERED + +@subsubsection occt_2142243456_44562206626 vclear + +Syntax:                  vclear + +Removes all objects from the viewer. + +@subsubsection occt_2142243456_44562206627 vrepaint + +Syntax:                  vrepaint + +Forcedly redisplays the shape in the 3D viewer window. + +@subsubsection occt_2142243456_44562206628 vfit + +Syntax:                  vfit + +Automatic zoom/panning. Objects in the view are visualized to occupy the maximum surface. + +@subsubsection occt_2142243456_44562206629 vzfit + +Syntax:                  vzfit + +Automatic depth panning. Objects in the view are visualized to occupy the maximum 3d space. + + +@subsection occt_2142243456_4456220663 AIS viewer – display commands + +@subsubsection occt_2142243456_44562206631 vdisplay + +Syntax:                  vdisplay name1 [name2] … [name n] + +Displays named objects. +**Example** + +vinit +box b 40 40 40 10 10 10 +psphere s 20 +vdisplay s b +vfit + + +@subsubsection occt_2142243456_44562206632 vdonly + +Syntax:                  vdonly [name1] … [name n] + +Displays only selected or named objects. If there are no selected or named objects, nothing is done. +**Example** + +vinit +box b 40 40 40 10 10 10 +psphere s 20 +vdonly b +vfit +@subsubsection occt_2142243456_44562206633 vdisplayall + +Syntax:                  vdisplayall + +Displays all created objects. +**Example** + +vinit +box b 40 40 40 10 10 10 +psphere s 20 +vdisplayall +vfit +@subsubsection occt_2142243456_44562206634 verase + +Syntax:                  verase [name1] [name2] … [name n] + +Erases some selected or named objects. If there are no selected or named objects, the whole viewer is erased. +**Example** + +vinit +box b1 40 40 40 10 10 10 +box b2 -40 -40 -40 10 10 10 +psphere s 20 +vdisplayall +vfit +# erase only first box +verase b1 +# erase second box and sphere +verase +@subsubsection occt_2142243456_44562206635 veraseall + +Syntax:                  veraseall + +Erases all objects displayed in the viewer. +**Example** +vinit +box b1 40 40 40 10 10 10 +box b2 -40 -40 -40 10 10 10 +psphere s 20 +vdisplayall +vfit +# erase only first box +verase b1 +# erase second box and sphere +verseall + +@subsubsection occt_2142243456_44562206636 vsetdispmode + +Syntax:                  vsetdispmode [name] mode(0,1,2,3) + +Sets display mode for all, selected or named objects. +**mode** is **0** (**WireFrame**), **1** (**Shading**), **2** (**Quick HideLineremoval**), **3** (**Exact HideLineremoval**). +**Example** + +vinit +box b 10 10 10 +vdisplay b +vsetdispmode 1 +vfit +@subsubsection occt_2142243456_44562206637 vdisplaytype + +Syntax:                  vdisplaytype type + +Displays all objects of a given type. +Possible **type**s are **;Point;, ;Axis;, ;Trihedron;, ;PlaneTrihedron;, ;Line;, ;Circle;, ;Plane;, ;Shape;, ;ConnectedShape;, ;MultiConn.Shape;, ;ConnectedInter.;, ;MultiConn.;, ;Constraint; **and** ;Dimension; **(see **vtypes**). + +@subsubsection occt_2142243456_44562206638 verasetype + +Syntax:                  verasetype type + +Erases all objects of a given type. +Possible** type**s are **;Point;, ;Axis;, ;Trihedron;, ;PlaneTrihedron;, ;Line;, ;Circle;, ;Plane;, ;Shape;, ;ConnectedShape;, ;MultiConn.Shape;, ;ConnectedInter.;, ;MultiConn.;, ;Constraint; **and **;Dimension; **(see **vtypes**). + +@subsubsection occt_2142243456_44562206639 vtypes + +Syntax:                  vtypes + +Makes a list of known types and signatures in AIS. + +@subsubsection occt_2142243456_445622066310 vsetcolor + +Syntax:                  vsetcolor [shapename] colorname + +Sets color for all, selected or named shapes. +Possible **colorname**s are **;BLACK;, ;MATRAGRAY;, ;MATRABLUE;, ;ALICEBLUE;, ;ANTIQUEWHITE;, ;ANTIQUEWHITE1;, ;ANTIQUEWHITE2;, ;ANTIQUEWHITE3;, ;ANTIQUEWHITE4;, ;AQUAMARINE1;, ;AQUAMARINE2;, ;AQUAMARINE4;, ;AZURE;, ;AZURE2;, ;AZURE3;, ;AZURE4;, ;BEIGE;, ;BISQUE;, ;BISQUE2;, ;BISQUE3;, ;BISQUE4;, ;BLANCHEDALMOND;, ;BLUE1;, ;BLUE2;, ;BLUE3;, ;BLUE4;, ;BLUEVIOLET;, ;BROWN;, ;BROWN1;, ;BROWN2;, ;BROWN3;, ;BROWN4;, ;BURLYWOOD;, ;BURLYWOOD1;, ;BURLYWOOD2;, ;BURLYWOOD3;, ;BURLYWOOD4;, ;CADETBLUE;, ;CADETBLUE1;, ;CADETBLUE2;, ;CADETBLUE3;, ;CADETBLUE4;, ;CHARTREUSE;, ;CHARTREUSE1;, ;CHARTREUSE2;, ;CHARTREUSE3;, ;CHARTREUSE4;, ;CHOCOLATE;, ;CHOCOLATE1;, ;CHOCOLATE2;, ;CHOCOLATE3;, ;CHOCOLATE4;, ;CORAL;, ;CORAL1;, ;CORAL2;, ;CORAL3;, ;CORAL4;, ;CORNFLOWERBLUE;, ;CORNSILK1;, ;CORNSILK2;, ;CORNSILK3;, ;CORNSILK4;, ;CYAN1;, ;CYAN2;, ;CYAN3;, ;CYAN4;, ;DARKGOLDENROD;, ;DARKGOLDENROD1;, ;DARKGOLDENROD2;, ;DARKGOLDENROD3;, ;DARKGOLDENROD4;, ;DARKGREEN;, ;DARKKHAKI;, ;DARKOLIVEGREEN;, ;DARKOLIVEGREEN1;, ;DARKOLIVEGREEN2;, ;DARKOLIVEGREEN3;, ;DARKOLIVEGREEN4;, ;DARKORANGE;, ;DARKORANGE1;, ;DARKORANGE2;, ;DARKORANGE3;, ;DARKORANGE4;, ;DARKORCHID;, ;DARKORCHID1;, ;DARKORCHID2;, ;DARKORCHID3;, ;DARKORCHID4;, ;DARKSALMON;, ;DARKSEAGREEN;, ;DARKSEAGREEN1;, ;DARKSEAGREEN2;, ;DARKSEAGREEN3;, ;DARKSEAGREEN4;, ;DARKSLATEBLUE;, ;DARKSLATEGRAY1;, ;DARKSLATEGRAY2;, ;DARKSLATEGRAY3;, ;DARKSLATEGRAY4;, ;DARKSLATEGRAY;, ;DARKTURQUOISE;, ;DARKVIOLET;, ;DEEPPINK;, ;DEEPPINK2;, ;DEEPPINK3;, ;DEEPPINK4;, ;DEEPSKYBLUE1;, ;DEEPSKYBLUE2;, ;DEEPSKYBLUE3;, ;DEEPSKYBLUE4;, ;DODGERBLUE1;, ;DODGERBLUE2;, ;DODGERBLUE3;, ;DODGERBLUE4;, ;FIREBRICK;, ;FIREBRICK1;, ;FIREBRICK2;, ;FIREBRICK3;, ;FIREBRICK4;, ;FLORALWHITE;, ;FORESTGREEN;, ;GAINSBORO;, ;GHOSTWHITE;, ;GOLD;, ;GOLD1;, ;GOLD2;, ;GOLD3;, ;GOLD4;, ;GOLDENROD;, ;GOLDENROD1;, ;GOLDENROD2;, ;GOLDENROD3;, ;GOLDENROD4;, ;GRAY;, ;GRAY0;, ;GRAY1;, ;GRAY10;, ;GRAY11;, ;GRAY12;, ;GRAY13;, ;GRAY14;, ;GRAY15;, ;GRAY16;, ;GRAY17;, ;GRAY18;, ;GRAY19;, ;GRAY2;, ;GRAY20;, ;GRAY21;, ;GRAY22;, ;GRAY23;, ;GRAY24;, ;GRAY25;, ;GRAY26;, ;GRAY27;, ;GRAY28;, ;GRAY29;, ;GRAY3;, ;GRAY30;, ;GRAY31;, ;GRAY32;, ;GRAY33;, ;GRAY34;, ;GRAY35;, ;GRAY36;, ;GRAY37;, ;GRAY38;, ;GRAY39;, ;GRAY4;, ;GRAY40;, ;GRAY41;, ;GRAY42;, ;GRAY43;, ;GRAY44;, ;GRAY45;, ;GRAY46;, ;GRAY47;, ;GRAY48;, ;GRAY49;, ;GRAY5;, ;GRAY50;, ;GRAY51;, ;GRAY52;, ;GRAY53;, ;GRAY54;, ;GRAY55;, ;GRAY56;, ;GRAY57;, ;GRAY58;, ;GRAY59;, ;GRAY6;, ;GRAY60;, ;GRAY61;, ;GRAY62;, ;GRAY63;, ;GRAY64;, ;GRAY65;, ;GRAY66;, ;GRAY67;, ;GRAY68;, ;GRAY69;, ;GRAY7;, ;GRAY70;, ;GRAY71;, ;GRAY72;, ;GRAY73;, ;GRAY74;, ;GRAY75;, ;GRAY76;, ;GRAY77;, ;GRAY78;, ;GRAY79;, ;GRAY8;, ;GRAY80;, ;GRAY81;, ;GRAY82;, ;GRAY83;, ;GRAY85;, ;GRAY86;, ;GRAY87;, ;GRAY88;, ;GRAY89;, ;GRAY9;, ;GRAY90;, ;GRAY91;, ;GRAY92;, ;GRAY93;, ;GRAY94;, ;GRAY95;, ;GREEN;, ;GREEN1;, ;GREEN2;, ;GREEN3;, ;GREEN4;, ;GREENYELLOW;, ;GRAY97;, ;GRAY98;, ;GRAY99;, ;HONEYDEW;, ;HONEYDEW2;, ;HONEYDEW3;, ;HONEYDEW4;, ;HOTPINK;, ;HOTPINK1;, ;HOTPINK2;, ;HOTPINK3;, ;HOTPINK4;, ;INDIANRED;, ;INDIANRED1;, ;INDIANRED2;, ;INDIANRED3;, ;INDIANRED4;, ;IVORY;, ;IVORY2;, ;IVORY3;, ;IVORY4;, ;KHAKI;, ;KHAKI1;, ;KHAKI2;, ;KHAKI3;, ;KHAKI4;, ;LAVENDER;, ;LAVENDERBLUSH1;, ;LAVENDERBLUSH2;, ;LAVENDERBLUSH3;, ;LAVENDERBLUSH4;, ;LAWNGREEN;, ;LEMONCHIFFON1;, ;LEMONCHIFFON2;, ;LEMONCHIFFON3;, ;LEMONCHIFFON4;, ;LIGHTBLUE;, ;LIGHTBLUE1;, ;LIGHTBLUE2;, ;LIGHTBLUE3;, ;LIGHTBLUE4;, ;LIGHTCORAL;, ;LIGHTCYAN1;, ;LIGHTCYAN2;, ;LIGHTCYAN3;, ;LIGHTCYAN4;, ;LIGHTGOLDENROD;, ;LIGHTGOLDENROD1;, ;LIGHTGOLDENROD2;, ;LIGHTGOLDENROD3;, ;LIGHTGOLDENROD4;, ;LIGHTGOLDENRODYELLOW;, ;LIGHTGRAY;, ;LIGHTPINK;, ;LIGHTPINK1;, ;LIGHTPINK2;, ;LIGHTPINK3;, ;LIGHTPINK4;, ;LIGHTSALMON1;, ;LIGHTSALMON2;, ;LIGHTSALMON3;, ;LIGHTSALMON4;, ;LIGHTSEAGREEN;, ;LIGHTSKYBLUE;, ;LIGHTSKYBLUE1;, ;LIGHTSKYBLUE2;, ;LIGHTSKYBLUE3;, ;LIGHTSKYBLUE4;, ;LIGHTSLATEBLUE;, ;LIGHTSLATEGRAY;, ;LIGHTSTEELBLUE;, ;LIGHTSTEELBLUE1;, ;LIGHTSTEELBLUE2;, ;LIGHTSTEELBLUE3;, ;LIGHTSTEELBLUE4;, ;LIGHTYELLOW;, ;LIGHTYELLOW2;, ;LIGHTYELLOW3;, ;LIGHTYELLOW4;, ;LIMEGREEN;, ;LINEN;, ;MAGENTA1;, ;MAGENTA2;, ;MAGENTA3;, ;MAGENTA4;, ;MAROON;, ;MAROON1;, ;MAROON2;, ;MAROON3;, ;MAROON4;, ;MEDIUMAQUAMARINE;, ;MEDIUMORCHID;, ;MEDIUMORCHID1;, ;MEDIUMORCHID2;, ;MEDIUMORCHID3;, ;MEDIUMORCHID4;, ;MEDIUMPURPLE;, ;MEDIUMPURPLE1;, ;MEDIUMPURPLE2;, ;MEDIUMPURPLE3;, ;MEDIUMPURPLE4;, ;MEDIUMSEAGREEN;, ;MEDIUMSLATEBLUE;, ;MEDIUMSPRINGGREEN;, ;MEDIUMTURQUOISE;, ;MEDIUMVIOLETRED;, ;MIDNIGHTBLUE;, ;MINTCREAM;, ;MISTYROSE;, ;MISTYROSE2;, ;MISTYROSE3;, ;MISTYROSE4;, ;MOCCASIN;, ;NAVAJOWHITE1;, ;NAVAJOWHITE2;, ;NAVAJOWHITE3;, ;NAVAJOWHITE4;, ;NAVYBLUE;, ;OLDLACE;, ;OLIVEDRAB;, ;OLIVEDRAB1;, ;OLIVEDRAB2;, ;OLIVEDRAB3;, ;OLIVEDRAB4;, ;ORANGE;, ;ORANGE1;, ;ORANGE2;, ;ORANGE3;, ;ORANGE4;, ;ORANGERED;, ;ORANGERED1;, ;ORANGERED2;, ;ORANGERED3;, ;ORANGERED4;, ;ORCHID;, ;ORCHID1;, ;ORCHID2;, ;ORCHID3;, ;ORCHID4;, ;PALEGOLDENROD;, ;PALEGREEN;, ;PALEGREEN1;, ;PALEGREEN2;, ;PALEGREEN3;, ;PALEGREEN4;, ;PALETURQUOISE;, ;PALETURQUOISE1;, ;PALETURQUOISE2;, ;PALETURQUOISE3;, ;PALETURQUOISE4;, ;PALEVIOLETRED;, ;PALEVIOLETRED1;, ;PALEVIOLETRED2;, ;PALEVIOLETRED3;, ;PALEVIOLETRED4;, ;PAPAYAWHIP;, ;PEACHPUFF;, ;PEACHPUFF2;, ;PEACHPUFF3;, ;PEACHPUFF4;, ;PERU;, ;PINK;, ;PINK1;, ;PINK2;, ;PINK3;, ;PINK4;, ;PLUM;, ;PLUM1;, ;PLUM2;, ;PLUM3;, ;PLUM4;, ;POWDERBLUE;, ;PURPLE;, ;PURPLE1;, ;PURPLE2;, ;PURPLE3;, ;PURPLE4;, ;RED;, ;RED1;, ;RED2;, ;RED3;, ;RED4;, ;ROSYBROWN;, ;ROSYBROWN1;, ;ROSYBROWN2;, ;ROSYBROWN3;, ;ROSYBROWN4;, ;ROYALBLUE;, ;ROYALBLUE1;, ;ROYALBLUE2;, ;ROYALBLUE3;, ;ROYALBLUE4;, ;SADDLEBROWN;, ;SALMON;, ;SALMON1;, ;SALMON2;, ;SALMON3;, ;SALMON4;, ;SANDYBROWN;, ;SEAGREEN;, ;SEAGREEN1;, ;SEAGREEN2;, ;SEAGREEN3;, ;SEAGREEN4;, ;SEASHELL;, ;SEASHELL2;, ;SEASHELL3;, ;SEASHELL4;, ;BEET;, ;TEAL;, ;SIENNA;, ;SIENNA1;, ;SIENNA2;, ;SIENNA3;, ;SIENNA4;, ;SKYBLUE;, ;SKYBLUE1;, ;SKYBLUE2;, ;SKYBLUE3;, ;SKYBLUE4;, ;SLATEBLUE;, ;SLATEBLUE1;, ;SLATEBLUE2;, ;SLATEBLUE3;, ;SLATEBLUE4;, ;SLATEGRAY1;, ;SLATEGRAY2;, ;SLATEGRAY3;, ;SLATEGRAY4;, ;SLATEGRAY;, ;SNOW;, ;SNOW2;, ;SNOW3;, ;SNOW4;, ;SPRINGGREEN;, ;SPRINGGREEN2;, ;SPRINGGREEN3;, ;SPRINGGREEN4;, ;STEELBLUE;, ;STEELBLUE1;, ;STEELBLUE2;, ;STEELBLUE3;, ;STEELBLUE4;, ;TAN;, ;TAN1;, ;TAN2;, ;TAN3;, ;TAN4;, ;THISTLE;, ;THISTLE1;, ;THISTLE2;, ;THISTLE3;, ;THISTLE4;, ;TOMATO;, ;TOMATO1;, ;TOMATO2;, ;TOMATO3;, ;TOMATO4;, ;TURQUOISE;, ;TURQUOISE1;, ;TURQUOISE2;, ;TURQUOISE3;, ;TURQUOISE4;, ;VIOLET;, ;VIOLETRED;, ;VIOLETRED1;, ;VIOLETRED2;, ;VIOLETRED3;, ;VIOLETRED4;, ;WHEAT;, ;WHEAT1;, ;WHEAT2;, ;WHEAT3;, ;WHEAT4;, ;WHITE;, ;WHITESMOKE;, ;YELLOW;, ;YELLOW1;, ;YELLOW2;, ;YELLOW3;, ;YELLOW4; and ;YELLOWGREEN;**. + + + +@subsubsection occt_2142243456_445622066311 vunsetcolor + +Syntax:                  vunsetcolor [shapename] + +Sets default color for all, selected or named shapes. + +@subsubsection occt_2142243456_445622066312 vsettransparency + +Syntax:                  vsettransparency [shapename] coeficient + +Sets transparency for all selected or named shapes. The **Coefficient** may be between 0.0 (opaque) and 1.0 (fully transparent). Warning: at 1.0 the shape becomes invisible. +**Example** + +vinit +box b 10 10 10 +psphere s 20 +vdisplay b s +vfit +vsetdispmode 1 +vsettransparency b 0.5 + +@subsubsection occt_2142243456_445622066313 vunsettransparency + +Syntax:                  vunsettransparency [shapename] + +Sets default transparency (0.0) for all selected or named shapes. + +@subsubsection occt_2142243456_445622066314 vsetmaterial + +Syntax:                  vsetmaterial [shapename] materialname + +Sets material for all selected or named shapes. +**materialname** is ***BRASS*, *BRONZE*, *COPPER*, *GOLD*, *PEWTER*, *PLASTER*, *PLASTIC*, *SILVER*, *STEEL*, *STONE*, *SHINY_PLASTIC*, *SATIN*, *METALIZED*, *NEON_GNC*, *CHROME*, *ALUMINIUM*, *OBSIDIAN*, *NEON_PHC*, *JADE*.** +**Example** + +vinit +psphere s 20 +vdisplay s +vfit +vsetdispmode 1 +vsetmaterial s JADE + +@subsubsection occt_2142243456_445622066315 vunsetmaterial + +Syntax:                  vunsetmaterial [shapename] + +Sets default material for all selected or named shapes. + +@subsubsection occt_2142243456_445622066316 vsetwidth + +Syntax:                  vsetwidth [shapename] coeficient + +Sets width of the edges for all selected or named shapes. +The **Coefficient** may be between 0.0 and 10.0. +**Example** + +vinit +box b 10 10 10 +vdisplay b +vfit +vsetwidth b 5 + +@subsubsection occt_2142243456_445622066317 vunsetwidth + +Syntax:                  vunsetwidth [shapename] + +Sets default width of edges (0.0) for all selected or named shapes. + +@subsubsection occt_2142243456_445622066318 vsetshading + +Syntax:                  vsetshading shapename [coefficient] + +Sets deflection coefficient that defines the quality of the shape’s representation in the shading mode. Default coefficient is 0.0008. +**Example** + +vinit +psphere s 20 +vdisplay s +vfit +vsetdispmode 1 +vsetshading s 0.005 +@subsubsection occt_2142243456_445622066319 vunsetshading + +Syntax:                  vunsetshading [shapename] + +Sets default deflection coefficient (0.0008) that defines the quality of the shape’s representation in the shading mode. Default coefficient is 0.0008. + +@subsubsection occt_2142243456_445622066320 vsetam + +Syntax:                  vsetam [shapename] mode + +Activates selection mode for all selected or named shapes. +**mode** is **0** for **shape** itself, **1** for **vertices**, **2** for **edges**, **3** for **wires**, **4** for **faces**, **5** for **shells**, **6** for **solids**, **7** for **compounds**. +**Example** + +vinit +box b 10 10 10 +vdisplay b +vfit +vsetam b 2 +@subsubsection occt_2142243456_445622066321 vunsetam + +Syntax:                  vunsetam + +Deactivates all selection modes for all shapes. + +@subsubsection occt_2142243456_445622066322 vdump + +Syntax:                  vdump filename.{png|xwd|bmp} + +Extracts the contents of the viewer window to a png, XWD or BMP file. + +@subsubsection occt_2142243456_445622066323 vdir + +Syntax:                  vdir + +Displays the list of displayed objects. + +@subsubsection occt_2142243456_445622066324 vsub + +Syntax:                  vsub 0/1(on/off)[shapename] + +Hilights/unhilights named or selected objects which are displayed at neutral state with subintensity color. +**Example** + +vinit +box b 10 10 10 +psphere s 20 +vdisplay b s +vfit +vsetdispmode 1 +vsub b 1 + +@subsubsection occt_2142243456_445622066325 vardis + +Syntax:                  vardis + +Displays active areas (for each activated sensitive entity, one or several 2D bounding boxes are displayed, depending on the implementation of a particular entity). + +@subsubsection occt_2142243456_445622066326 varera + +Syntax:                  varera + +Erases active areas. + +@subsubsection occt_2142243456_445622066327 vsensdis + +Syntax:                  vsensdis + +Displays active entities (sensitive entities of one of the standard types corresponding to active selection modes). + +Standard entity types are those defined in Select3D package: + * sensitive box + * sensitive face + * sensitive curve + * sensitive segment + * sensitive circle + * sensitive point + * sensitive triangulation + * sensitive triangle +Custom (application-defined) sensitive entity types are not processed by this command. + +@subsubsection occt_2142243456_445622066328 vsensera + +Syntax:                  vsensera + +Erases active entities. + +@subsubsection occt_2142243456_445622066329 vperf + +Syntax:                  vperf shapename 1/0 (Transformation/Loacation) 1/0 (Primitives sensibles ON/OFF) + +Tests the animation of an object along a predefined trajectory. +**Example** + +vinit +box b 10 10 10 +psphere s 20 +vdisplay b s +vfit +vsetdispmode 0 +vperf b 1 1 +@subsubsection occt_2142243456_445622066330 vr + +Syntax:                  vr filename + +Reads shape from BREP-format file and displays it in the viewer. +**Example** + +vinit +vr myshape.brep +@subsubsection occt_2142243456_445622066330331 vstate + +Syntax:                  vstate [name1] … [name n] + +Makes a list of the status (**Displayed** or **Not Displayed**) of some selected or named objects. + + + +@subsection occt_2142243456_4456220663304 AIS viewer – object commands + +@subsubsection occt_2142243456_44562206633041 vtrihedron + +Syntax:                  vtrihedron name [X0] [Y0] [Z0] [Zu] [Zv] [Zw] [Xu] [Xv] [Xw] + +Creates a new AIS_Trihedron object. If no argument is set, the default trihedron (0XYZ) is created. +**Example** + +vinit +vtrihedron tr + +@subsubsection occt_2142243456_44562206633042 vplanetri + +Syntax:                  vplanetri name + +Creates a plane from a trihedron selection. + + +@subsubsection occt_2142243456_44562206633043 vsize + +Syntax:                  vsize [name] [size] + +Changes the size of a named or selected trihedron. If the name is not defined: it affects the selected trihedrons otherwise nothing is done. If the value is not defined, it is set to 100 by default. +**Example** + +vinit +vtrihedron tr1 +vtrihedron tr2 0 0 0 1 0 0 1 0 0 +vsize tr2 400 + +@subsubsection occt_2142243456_44562206633044 vaxis + +Syntax:                  vaxis name [Xa Ya Za Xb Yb Zb] + +Creates an axis. If  the values are not defined, an axis is created by interactive selection of two vertices or one edge +**Example** + +vinit +vtrihedron tr +vaxis axe1 0 0 0 1 0 0 + +@subsubsection occt_2142243456_44562206633045 vaxispara + +Syntax:                  vaxispara nom + +Creates an axis by interactive selection of an edge and a vertex. + +@subsubsection occt_2142243456_44562206633046 vaxisortho + +Syntax:                  vaxisotrho name + +Creates an axis by interactive selection of an edge and a vertex. The axis will be orthogonal to the selected edge. + +@subsubsection occt_2142243456_44562206633047 vpoint + +Syntax:                  vpoint name [Xa Ya Za] + +Creates a point from coordinates. If the values are not defined, a point is created by interactive selection of a vertice or an edge (in the center of the edge). +**Example** + +vinit +vpoint p 0 0 0 + +@subsubsection occt_2142243456_44562206633048 vplane + +Syntax:                  vplane name [AxisName] [PointName] +                        vplane name [PointName] [PointName] [PointName] +                        vplane name [PlaneName] [PointName] + +Creates a plane from named or interactively selected entities. +**Example** + +vinit +vpoint p1 0 50 0 +vaxis axe1 0 0 0 0 0 1 +vtrihedron tr +vplane plane1 axe1 p1 + +@subsubsection occt_2142243456_44562206633049 vplanepara + +Syntax:                  vplanepara name + +Creates a plane from interactively selected vertex and face. + +@subsubsection occt_2142243456_445622066330410 vplaneortho + +Syntax:                  vplaneortho name + +Creates a plane from interactive selected face and coplanar edge. + +@subsubsection occt_2142243456_445622066330411 vline + +Syntax:                  vline name [PointName] [PointName] +                        vline name [Xa Ya Za Xb Yb Zb] + +Creates a line from coordinates, named or interactively selected vertices. +**Example** + +vinit +vtrihedron tr +vpoint p1 0 50 0 +vpoint p2 50 0 0 +vline line1 p1 p2 +vline line2 0 0 0 50 0 1 + +@subsubsection occt_2142243456_445622066330412 vcircle + +Syntax:      vcircle name [PointName PointName PointName IsFilled] +vcircle name [PlaneName PointName Radius IsFilled] + +Creates a circle from named or interactively selected entities. Parameter IsFilled is defined as 0 or 1. +**Example** + +vinit +vtrihedron tr +vpoint p1 0 50 0 +vpoint p2 50 0 0 +vpoint p3 0 0 0 +vcircle circle1 p1 p2 p3 1 + + +@subsubsection occt_2142243456_445622066330413 vtri2d + +Syntax:                  vtri2d name + +Creates a plane with a 2D trihedron from an interactively selected face. + +@subsubsection occt_2142243456_445622066330414 vselmode + +Syntax:                  vselmode [object] mode On/Off + +Sets the selection mode for an object. If the object value is not defined, the selection mode is set for all displayed objects. +Value On is defined as 1 and Off – as 0. +**Example** + +vinit +vpoint p1 0 0 0 +vpoint p2 50 0 0 +vpoint p3 25 40 0 +vtriangle triangle1 p1 p2 p3 +@subsubsection occt_2142243456_445622066330415 vconnect, vconnectsh + +Syntax:                  vconnect name object Xo Yo Zo Xu Xv Xw Zu Zv Zw +                             vconnectsh name shape Xo Yo Zo Xu Xv Xw Zu Zv Zw + +Creates and displays an object with input location connected to a named entity. +The difference between these two commands is that the object created by vconnect does not support the selection modes differrent from 0. +**Example** + +Vinitvinit +vpoint p1 0 0 0 +vpoint p2 50 0 0 +vsegment segment p1 p2 +restore CrankArm.brep obj +vdisplay obj +vconnectsh new obj 100100100 1 0 0 0 0 1 + + + +@subsubsection occt_2142243456_445622066330416 vtriangle + +Syntax:                  vtriangle name PointName PointName PointName + +Creates and displays a filled triangle from named points. +**Example** + +vinit +vpoint p1 0 0 0 +vpoint p2 50 0 0 +vpoint p3 25 40 0 +vtriangle triangle1 p1 p2 p3 + +@subsubsection occt_2142243456_445622066330417 vsegment + +Syntax:                  vsegment name PointName PointName + +Creates and displays a segment from named points. +**Example** + +Vinit +vpoint p1 0 0 0 +vpoint p2 50 0 0 +vsegment segment p1 p2 + + +**MeshVS **(Mesh Visualization Service) component provides flexible means of displaying meshes with associated pre- and post- processor data. + + + +@subsection occt_2142243456_4456220663305 AIS viewer – Mesh Visualization Service + +@subsubsection occt_2142243456_44562206633051 meshfromstl + +Syntax:                  meshfromstl meshname file + +Creates a MeshVS_Mesh object based on STL file data. The object will be displayed immediately. +**Example** + +meshfromstl mesh myfile.stl + +@subsubsection occt_2142243456_44562206633052 meshdispmode + +Syntax:                  meshdispmode meshname displaymode + +Changes the display mode of object **meshname**. The **displaymode** is integer, which can be **1** (for wireframe), **2** (for shading mode) or **3** (for shrink mode). +**Example** + +vinit +meshfromstl mesh myfile.stl +meshdispmode mesh 2 + +@subsubsection occt_2142243456_44562206633053 meshselmode + +Syntax:                  meshselmode meshname selectionmode + +Changes the selection mode of object **meshname**. The **selectionmode** is integer OR-combination of mode flags. The basic flags are the following: +**1** – node selection, +**2** – 0D elements (not suppored in STL) +**4** – links (not supported in STL) +**8** – faces +**Example** + +vinit +meshfromstl mesh myfile.stl +meshselmode mesh 1 + +@subsubsection occt_2142243456_44562206633054 meshshadcolor + +Syntax:                  meshshadcolor meshname red green blue + +Changes the face interior color of object **meshname**. The **red**, **green** and **blue** are real values between **0** and **1**. +**Example** + +vinit +meshfromstl mesh myfile.stl +meshshadcolormode mesh 0.5 0.5 0.5 + +@subsubsection occt_2142243456_44562206633055 meshlinkcolor + +Syntax:                  meshlinkcolor meshname red green blue + +Changes the color of face borders for object **meshname**. The **red**, **green** and **blue** are real values between **0** and **1**. +**Example** + +vinit +meshfromstl mesh myfile.stl +meshlinkcolormode mesh 0.5 0.5 0.5 + +@subsubsection occt_2142243456_44562206633056 meshmat + +Syntax:                  meshmat meshname material + +Changes the material of object **meshname**. **material** is represented with an integer value as follows (equivalent to enumeration Graphic3d_NameOfMaterial): +**0 – BRASS,** +**1 – BRONZE,** +**2 - COPPER,** +**3 - GOLD,** +**4 - PEWTER,** +**5 - PLASTER,** +**6 - PLASTIC,** +**7 - SILVER,** +**8 - STEEL,** +**9 - STONE,** +**10 - SHINY_PLASTIC,** +**11 - SATIN,** +**12 - METALIZED,** +**13 - NEON_GNC,** +**14 - CHROME,** +**15 - ALUMINIUM,** +**16 - OBSIDIAN,** +**17 - NEON_PHC,** +**18 - JADE,** +**19 - DEFAULT,** +**20 - UserDefined** +**Example** + +vinit +meshfromstl mesh myfile.stl +meshmat mesh JADE + +@subsubsection occt_2142243456_44562206633057 meshshrcoef + +Syntax:                  meshshrcoef meshname shrinkcoefficient + +Changes the value of shrink coefficient used in the shrink mode. In the shrink mode the face is shown as a congruent part of a usual face, so that **shrinkcoefficient** controls the value of this part. The **shrinkcoefficient** is a positive real number. +**Example** + +vinit +meshfromstl mesh myfile.stl +meshshrcoef mesh 0.05 + +@subsubsection occt_2142243456_44562206633058 meshshow + +Syntax:                  meshshow meshname + +Displays **meshname** in the viewer (if it is erased). +**Example** + +vinit +meshfromstl mesh myfile.stl +meshshow mesh + +@subsubsection occt_2142243456_44562206633059 meshhide + +Syntax:                  meshhide meshname + +Hides **meshname** in the viewer. +**Example** + +vinit +meshfromstl mesh myfile.stl +meshhide mesh + +@subsubsection occt_2142243456_445622066330510 meshhidesel + +Syntax:                  meshhidesel meshname + +Hides only selected entities. The other part of **meshname** remains visible. + +@subsubsection occt_2142243456_445622066330511 meshshowsel + +Syntax:                  meshshowsel meshname + +Shows only selected entities. The other part of **meshname** becomes invisible. + +@subsubsection occt_2142243456_445622066330512 meshshowall + +Syntax:                  meshshowall meshname + +Changes the state of all entities to visible for **meshname**. + +@subsubsection occt_2142243456_445622066330513 meshdelete + +Syntax:                  meshdelete meshname + +Deletes MeshVS_Mesh object **meshname**. +**Example** + +vinit +meshfromstl mesh myfile.stl +meshdelete mesh + + + + +@subsection occt_2142243456_4456220663306 AIS viewer – 2D viewer – view commands + +@subsubsection occt_2142243456_44562206633061 v2dinit + +Syntax:                  v2dinit + +**v2dinit **creates the 2D viewer window. + +@subsubsection occt_2142243456_44562206633062 v2dsetbg + +Syntax:                  v2dsetbg imagefile [filletype] + +**v2dsetbg** loads **imagefile** as background. **filletype** is **NONE**, **CENTERED**, **TILED**, **STRETCH**. +**Example** + +v2dinit +v2dsetbg myimage.brep CENTERED + +@subsubsection occt_2142243456_44562206633063 v2dfit + +Syntax:                  v2dfit + +Fits all shapes to the size of the window. + +@subsubsection occt_2142243456_44562206633064 v2drepaint + +Syntax:                  v2drepaint + +Forcedly repaints all shapes. + +@subsubsection occt_2142243456_44562206633065 v2dclear + +Syntax:                  v2dclear + +Clears the 2D viewer window + +@subsubsection occt_2142243456_44562206633066 v2dtext + +Syntax:                  v2dtext text x y [angle scale fontindex] + +Creates a new object with the name **text_i** (i – integer value) and displays **text** at the position** x**, **y.** The text can be displayed at a certain **angle**, on a certain **scale** and with a certain **fontindex**. +Default values are: **angle=0.0, scale=1.0, fontindex=0**. +**Example** + +v2dinit +v2dtext *My text* 10 10 +@subsubsection occt_2142243456_44562206633067 v2dsettextcolor + +Syntax:                  v2dsettextcolor text_name colorindex + +Changes the color of **text_name** object (**name** must be an integer value). +**Example** + +v2dinit +v2dtext *My text* 10 10 +# Change color to red +v2dsettextcolor text_0 3 +@subsubsection occt_2142243456_44562206633068 v2dpick + +Syntax:                  v2dpick + +Displays mouse coordinates and color after clicking the mouse button in the 2D viewer window. + + +@subsubsection occt_2142243456_44562206633069 v2dgrid + +Syntax:                  v2dgrid [type x y xstep ystep angle [drawmode]] +     v2dgrid [type x y radiusstep division angle [drawmode]] + +Loads a grid in the 2D viewer window. +**type** is **Rect** or **Circ**. +**drawmode** is **Lines**, **Points** or **None**. +**Example** + +v2dinit +v2dgrid Circ 0 0 250 12 0 Lines +v2drmgrid +v2dgrid Rect 0 0 200 200 0 Lines +@subsubsection occt_2142243456_445622066330610 v2rmgrid + +Syntax:                  v2rmgrid + +Unloads a grid from the window. + +@subsubsection occt_2142243456_445622066330611 v2dpickgrid + +Syntax:                  v2dpickgrid [mouse_x mouse_y [grid_x grid_y]] + +Gets coordinates of a grid point near the mouse button click in the 2D viewer window and sets it to **grid_x**, **grid_y** variables. + +@subsubsection occt_2142243456_445622066330612 v2dpsout + +Syntax:                  v2dpsout imagefile [scale colorspace] +                                                     [width height [xcenter ycenter]] + +Exports **imagefile**. You can set its the scale, width, height and colorspace. +**colorspace** can be **RGB, BlackAndWhite, GreyScale**. + +@subsubsection occt_2142243456_445622066330612613 v2ddir + +Syntax:                  v2ddir + +Makes aLlist of the displayed objects. + + +@subsection occt_2142243456_4456220663306127 Ais viewer – 2D viewer – display commands + +@subsubsection occt_2142243456_44562206633061271 v2ddisplay + +Syntax:                  v2ddisplay name [projection] + +Projection: origin_x origin_y origin_z normal_x normal_y normal_z dx_x dx_y dx_z. + +Displays named objects. +**Example** + +v2dinit +box b 10 10 10 +psphere s 20 +v2ddisplay s +v2ddisplay b +v2dfit +@subsubsection occt_2142243456_44562206633061272 v2ddonly + +Syntax:                  v2ddonly [name1] … [name n] + +Displays only selected or named objects. If there are no selected or named objects, nothing is done. +**Example** + +v2dinit +box b 10 10 10 +psphere s 20 +v2ddisplay b +v2ddisplay s +v2ddonly s +v2dfit +@subsubsection occt_2142243456_44562206633061273 v2ddisplayall + +Syntax:                  v2ddisplayall + +Displays all created objects. +**Example** + +v2dinit +box b 10 10 10 +psphere s 20 +v2ddisplay b +v2ddisplay s +v2ddonly +v2ddisplayall +v2dfit +@subsubsection occt_2142243456_44562206633061274 v2derase + +Syntax:                  v2derase name1 [name2] … [name n] + +Erases some selected or named objects. If there are no selected or named objects, the whole viewer is erased. +**Example** + +v2dinit +box b 10 10 10 +psphere s 20 +v2ddisplay b +v2ddisplay s +v2derase b +v2dfit +@subsubsection occt_2142243456_44562206633061275 v2deraseall + +Syntax:                  v2deraseall + +Erases all objects displayed in the viewer. +**Example** + +v2dinit +box b 10 10 10 +psphere s 20 +v2ddisplay b +v2ddisplay s +v2deraseall +v2dfit +@subsubsection occt_2142243456_44562206633061276 v2dsetcolor + +Syntax:                  v2dsetcolor [shapename] colorname + +Sets color for all, selected or named shapes. +Values of **colorname** see **vsetcolor**. +**Example** + +v2dinit +box b 10 10 10 +v2ddisplay b +v2ddisplay s +v2dsetcolor b RED +v2dfit +@subsubsection occt_2142243456_44562206633061277 v2dunsetcolor + +Syntax:                  v2dunsetcolor [shapename] + +Sets default color for all, selected or named shapes. +**Example** + +v2dinit +box b 10 10 10 +v2ddisplay b +v2ddisplay s +v2dsetcolor RED +v2dunsetcolor b +v2dfit +@subsubsection occt_2142243456_44562206633061278 v2dsetbgcolor + +Syntax:                  v2dsetbgcolor colorname + +Sets background color. +See **vsetcolor** for the values of **colorname.**. +**Example** + +v2dinit +box b 10 10 10 +v2ddisplay b +v2ddisplay s +v2dsetbgcolor RED +v2dfit +@subsubsection occt_2142243456_44562206633061279 v2dsetwidth + +Syntax:                  v2dsetwidth [shapename] widthenum + +Set width of the edges for all, selected or named shapes. +**widthenum** may be one of: **THIN, MEDIUM, THICK, VERYTHICK**. +**Example** + +v2dinit +box b 10 10 10 +v2ddisplay b +v2ddisplay s +v2dsetwidth b THICK +v2dfit +@subsubsection occt_2142243456_445622066330612710 v2dunsetwidth + +Syntax:                  vunsetwidth [shapename] + +Sets default width of the edges for all, selected or named shapes. +**Example** + +v2dinit +box b 10 10 10 +v2ddisplay b +v2ddisplay s +v2dsetwidth THICK +v2dunsetwidth b +v2dfit + +@section occt_2142243456_930384826 OCAF commands + + +This chapter contains a set of commands for Open CASCADE Technology Application Framework (OCAF). + + +@subsection occt_2142243456_9303848261 Application commands + + +@subsubsection occt_2142243456_93038482611 NewDocument + +Syntax:       NewDocument docname [format] + +Creates a new **docname** document with MDTV-Standard or described format. +**Example** + +# Create new document with default (MDTV-Standard) format +NewDocument D + +# Create new document with BinOcaf format +NewDocument D2 BinOcaf + +@subsubsection occt_2142243456_93038482612 IsInSession + +Syntax:       IsInSession path + +**I**Returns **0**, if **path** document is managed by the application session, **1** – otherwise. +**Example** + +IsInSession /myPath/myFile.std + +@subsubsection occt_2142243456_93038482613 ListDocuments + +Syntax:       ListDocuments + +Makes a list of documents handled during the session of the application. + + +@subsubsection occt_2142243456_93038482614 Open + +Syntax:       Open path docname + +Retrieves the document of file **docname** in the path **path**. Overwrites the document, if it is already in session. +**Example** + +Open /myPath/myFile.std D + +@subsubsection occt_2142243456_93038482615 Close + +Syntax:       Close docname + +Closes **docname** document. The document is no longer handled by the applicative session. +**Example** + +Close D + +@subsubsection occt_2142243456_93038482616 Save + +Syntax:       Save docname + +Saves **docname** active document. +**Example** + +Save D + +@subsubsection occt_2142243456_93038482617 SaveAs + +Syntax:       SaveAs docname path + +Saves the active document in the file **docname** in the path **path**. Overwrites the file if it already exists. +**Example** + +SaveAs D /myPath/myFile.std + +@subsection occt_2142243456_9303848262 Basic commands + + +@subsubsection occt_2142243456_930384826521 Label + +Syntax:       Label docname entry + +Creates the label expressed by **entry** if it does not exist. +**Example** + +Label D 0:2 + +@subsubsection occt_2142243456_930384826522 NewChild + +Syntax:       NewChild docname [taggerlabel = Root label] + +Finds (or creates) a TagSource attribute located at father label of **taggerlabel** and makes a new child label. +**Example** + +# Create new child of root label +NewChild D + +# Create new child of existing label +Label D 0:2 +NewChild D 0:2 + +@subsubsection occt_2142243456_930384826523 Children + +Syntax:       Children docname label + +Returns the list of attributes of **label**. +**Example** + +Children D 0:2 + +@subsubsection occt_2142243456_930384826524 ForgetAll + +Syntax:       ForgetAll docname label + +Forgets all attributes of the label. +**Example** + +ForgetAll D 0:2 + +@subsection occt_2142243456_93038482653 Application commands + + +@subsubsection occt_2142243456_930384826531 Main + +Syntax:       Main docname + +Returns the main label of the framework. +**Example** + +Main D + +@subsubsection occt_2142243456_930384826532 UndoLimit + +Syntax:       UndoLimit docname [value=0] + + +Sets the limit on the number of Undo Delta stored. 0 will disable Undo on the document. A negative **value** means that there is no limit. Note that by default Undo is disabled. Enabling it will take effect with the next call to NewCommand. Of course, this limit is the same for Redo +**Example** + +UndoLimit D 100 + +@subsubsection occt_2142243456_930384826533 Undo + +Syntax:       Undo docname [value=1] + +Undoes **value** steps. +**Example** + +Undo D + +@subsubsection occt_2142243456_930384826534 Redo + +Syntax:       Redo docname [value=1] + +Redoes **value** steps. +**Example** + +Redo D + +@subsubsection occt_2142243456_930384826535 OpenCommand + +Syntax:       OpenCommand docname + +Opens a new command transaction. +**Example** + +OpenCommand D + +@subsubsection occt_2142243456_930384826536 CommitCommand + +Syntax:       CommitCommand docname + +Commits the Command transaction. +**Example** + +CommitCommand D + +@subsubsection occt_2142243456_930384826537 NewCommand + +Syntax:       NewCommand docname + +This is a short-cut for Commit and Open transaction. +**Example** + +NewCommand D + +@subsubsection occt_2142243456_930384826538 AbortCommand + +Syntax:       AbortCommand docname + +Aborts the Command transaction. +**Example** + +AbortCommand D + +@subsubsection occt_2142243456_930384826539 Copy + +Syntax:       Copy docname entry Xdocname Xentry + +Copies the contents of **entry** to **Xentry**. No links are registred. +**Example** + +Copy D1 0:2 D2 0:4 + +@subsubsection occt_2142243456_9303848265310 UpdateLink + +Syntax:       UpdateLink docname [entry] + +Updates external reference set at **entry**. +**Example** + +UpdateLink D + +@subsubsection occt_2142243456_9303848265311 CopyWithLink + +Syntax:       CopyWithLink docname entry Xdocname Xentry + +Aborts the Command transaction. +Copies the content of **entry** to **Xentry**. The link is registred with an Xlink attribute at ** Xentry** label. +**Example** + +CopyWithLink D1 0:2 D2 0:4 + +@subsubsection occt_2142243456_9303848265312 UpdateXLinks + +Syntax:       UpdateXLinks docname entry + +Sets modifications on labels impacted by external references to the **entry**. The **document** becomes invalid and must be recomputed +**Example** + +UpdateXLinks D 0:2 + +@subsubsection occt_2142243456_9303848265313 DumpDocument + +Syntax:       DumpDocument docname + +Displays parameters of **docname** document. +**Example** + +DumpDocument D + +@subsection occt_2142243456_93038482654 Data Framework commands + + +@subsubsection occt_2142243456_930384826541 MakeDF + +Syntax:       MakeDF dfname + +Creates a new data framework. +**Example** + +MakeDF D + +@subsubsection occt_2142243456_930384826542 ClearDF + +Syntax:       ClearDF dfname + +Clears a data framework. +**Example** + +ClearDF D + +@subsubsection occt_2142243456_930384826543 CopyDF + +Syntax:       CopyDF dfname1 entry1 [dfname2] entry2 + +Copies a data framework. +**Example** + +CopyDF D 0:2 0:4 + +@subsubsection occt_2142243456_930384826544 CopyLabel + +Syntax:       CopyLabel dfname fromlabel tolablel + +Copies a label. +**Example** + +CopyLabel D1 0:2 0:4 + +@subsubsection occt_2142243456_930384826545 MiniDumpDF + +Syntax:       MiniDumpDF dfname + +Makes a mini-dump of a data framework. +**Example** + +MiniDumpDF D + +@subsubsection occt_2142243456_930384826546 XDumpDF + +Syntax:       XDumpDF dfname + +Makes an extended dump of a data framework. +**Example** + +XDumpDF D + +@subsection occt_2142243456_93038482655 General attributes commands + + +@subsubsection occt_2142243456_930384826551 SetInteger + +Syntax:       SetInteger dfname entry value + +Finds or creates an Integer attribute at **entry** label and sets **value**. +**Example** + +SetInteger D 0:2 100 + +@subsubsection occt_2142243456_930384826552 GetInteger + +Syntax:       GetInteger dfname entry [drawname] + +Gets a value of an Integer attribute at **entry** label and sets it to **drawname** variable, if it is defined. +**Example** + +GetInteger D 0:2 Int1 + +@subsubsection occt_2142243456_930384826553 SetReal + +Syntax:       SetReal dfname entry value + +Finds or creates a Real attribute at **entry** label and sets **value**. +**Example** + +SetReal D 0:2 100. + +@subsubsection occt_2142243456_930384826554 GetReal + +Syntax:       GetReal dfname entry [drawname] + +Gets a value of a Real attribute at **entry** label and sets it to **drawname** variable, if it is defined. +**Example** + +GetReal D 0:2 Real1 + +@subsubsection occt_2142243456_930384826555 SetIntArray + +Syntax:       SetIntArray dfname entry lower upper value1 value2 … + +Finds or creates an IntegerArray attribute at **entry** label with lower and upper bounds and sets **value1, **.** value2…** +**Example** + +SetIntArray D 0:2 1 4 100 200 300 400 + +@subsubsection occt_2142243456_930384826556 GetIntArray + +Syntax:       GetIntArray dfname entry + +Gets a value of an IntegerArray attribute at **entry** label. +**Example** + +GetIntArray D 0:2 + +@subsubsection occt_2142243456_930384826557 SetRealArray + +Syntax:       SetRealArray dfname entry lower upper value1 value2 … + +Finds or creates a RealArray attribute at **entry** label with lower and upper bounds and sets **value1, **.** value2…** +**Example** + +GetRealArray D 0:2 1 4 100. 200. 300. 400. + +@subsubsection occt_2142243456_930384826558 GetRealArray + +Syntax:       GetRealArray dfname entry + +Gets a value of a RealArray attribute at **entry** label. +**Example** + +GetRealArray D 0:2 + +@subsubsection occt_2142243456_930384826559 SetComment + +Syntax:       SetComment dfname entry value + +Finds or creates a Comment attribute at **entry** label and sets **value**. +**Example** + +SetComment D 0:2 *My comment* + +@subsubsection occt_2142243456_9303848265510 GetComment + +Syntax:       GetComment dfname entry + +Gets a value of a Comment attribute at **entry** label. +**Example** + +GetComment D 0:2 + +@subsubsection occt_2142243456_9303848265511 SetExtStringArray + +Syntax:       SetExtStringArray dfname entry lower upper value1 value2 … + +Finds or creates an ExtStringArray attribute at **entry** label with lower and upper bounds and sets **value1, **.** value2…** +**Example** + +SetExtStringArray D 0:2 1 3 *string1* *string2* *string3* + +@subsubsection occt_2142243456_9303848265512 GetExtStringArray + +Syntax:       GetExtStringArray dfname entry + +Gets a value of an ExtStringArray attribute at **entry** label. +**Example** + +GetExtStringArray D 0:2 + +@subsubsection occt_2142243456_9303848265513 SetName + +Syntax:       SetName dfname entry value + +Finds or creates a Name attribute at **entry** label and set **value**. +**Example** + +SetName D 0:2 *My name* + +@subsubsection occt_2142243456_9303848265514 GetName + +Syntax:       GetName dfname entry + +Gets a value of a Name attribute at **entry** label. +**Example** + +GetName D 0:2 + +@subsubsection occt_2142243456_9303848265515 SetReference + +Syntax:       SetReference dfname entry reference + +Creates a Reference attribute at **entry** label and sets **reference**. +**Example** + +SetReference D 0:2 0:4 + +@subsubsection occt_2142243456_9303848265516 GetReference + +Syntax:       GetReference dfname entry + +Gets a value of a Reference attribute at **entry** label. +**Example** + +GetReference D 0:2 + +@subsubsection occt_2142243456_9303848265517 SetUAttribute + +Syntax:       SetUAttribute dfname entry localGUID + +Creates a UAttribute attribute at **entry** label with **localGUID**. +**Example** + +set localGUID *c73bd076-22ee-11d2-acde-080009dc4422* +SetUAttribute D 0:2 ${localGUID} + +@subsubsection occt_2142243456_9303848265518 GetUAttribute + +Syntax:       GetUAttribute dfname entry loacalGUID + +Finds a UAttribute at **entry** label with **localGUID**. +**Example** + +set localGUID *c73bd076-22ee-11d2-acde-080009dc4422* +GetUAttribute D 0:2 ${localGUID} + +@subsubsection occt_2142243456_9303848265519 SetFunction + +Syntax:       SetFunction dfname entry ID failure + +Finds or creates a Function attribute at **entry** label with driver ID and **failure** index. +**Example** + +set ID *c73bd076-22ee-11d2-acde-080009dc4422* +SetFunction D 0:2 ${ID} 1 + +@subsubsection occt_2142243456_9303848265520 GetFunction + +Syntax:       GetFunction dfname entry ID failure + +Finds a Function attribute at **entry** label and sets driver ID to **ID** variable and failure index to **failure** variable. +**Example** + +GetFunction D 0:2 ID failure + +@subsubsection occt_2142243456_9303848265521 NewShape + +Syntax:       NewShape dfname entry [shape] + + +Finds or creates a Shape attribute at **entry** label. Creates or updates the associated NamedShape attribute by **shape** if **shape** is defined. +**Example** + +box b 10 10 10 +NewShape D 0:2 b + +@subsubsection occt_2142243456_9303848265522 SetShape + +Syntax:       SetShape dfname entry shape + +Creates or updates a NamedShape attribute at **entry** label by **shape**. +**Example** + +box b 10 10 10 +SetShape D 0:2 b + +@subsubsection occt_2142243456_9303848265523 GetShape + +Syntax:       GetShape2 dfname entry shape + +Sets a shape from NamedShape attribute associated with **entry** label to **shape** draw variable. +**Example** + +GetShape2 D 0:2 b + +@subsection occt_2142243456_93038482656 Geometric attributes commands + + +@subsubsection occt_2142243456_930384826561 SetPoint + +Syntax:       SetPoint dfname entry point + +Finds or creates a Point attribute at **entry** label and sets **point** as generated in the associated NamedShape attribute. +**Example** + +point p 10 10 10 +SetPoint D 0:2 p + +@subsubsection occt_2142243456_930384826562 GetPoint + +Syntax:       GetPoint dfname entry [drawname] + +Gets a vertex from NamedShape attribute at **entry** label and sets it to **drawname** variable, if it is defined. +**Example** + +GetPoint D 0:2 p + +@subsubsection occt_2142243456_930384826563 SetAxis + +Syntax:       SetAxis dfname entry axis + +Finds or creates an Axis attribute at **entry** label and sets **axis** as generated in the associated NamedShape attribute. +**Example** + +line l 10 20 30 100 200 300 +SetAxis D 0:2 l + +@subsubsection occt_2142243456_930384826564 GetAxis + +Syntax:       GetAxis dfname entry [drawname] + +Gets a line from NamedShape attribute at **entry** label and sets it to **drawname** variable, if it is defined. +**Example** + +GetAxis D 0:2 l + +@subsubsection occt_2142243456_930384826565 SetPlane + +Syntax:       SetPlane dfname entry plane + +Finds or creates a Plane attribute at **entry** label and sets **plane** as generated in the associated NamedShape attribute. +**Example** + +plane pl 10 20 30 –1 0 0 +SetPlane D 0:2 pl + +@subsubsection occt_2142243456_930384826566 GetPlane + +Syntax:       GetPlane dfname entry [drawname] + +Gets a plane from NamedShape attribute at **entry** label and sets it to **drawname** variable, if it is defined. +**Example** + +GetPlane D 0:2 pl + +@subsubsection occt_2142243456_930384826567 SetGeometry + +Syntax:       SetGeometry dfname entry [type] [shape] + + +Creates a Geometry attribute at **entry** label and sets **type** and **shape** as generated in the associated NamedShape attribute if they are defined. **type** must be one of the following: **any/pnt/lin/cir/ell/spl/pln/cyl**. +**Example** + +point p 10 10 10 +SetGeometry D 0:2 pnt p + +@subsubsection occt_2142243456_930384826568 GetGeometryType + +Syntax:       GetGeometryType dfname entry + +Gets a geometry type from Geometry attribute at **entry** label. +**Example** + +GetGeometryType D 0:2 + +@subsubsection occt_2142243456_930384826569 SetConstraint + +Syntax:       SetConstraint dfname entry keyword geometrie [geometrie …] +            SetConstraint dfname entry *plane* geometrie +            SetConstraint dfname entry *value* value  + +1. Creates a Constraint attribute at **entry** label and sets **keyword** constraint between geometry(ies). +**keyword** must be one of the following: +**rad/dia/minr/majr/tan/par/perp/concentric/equal/dist/angle/eqrad/symm/midp/ eqdist/fix/rigid** +or +**from/axis/mate/alignf/aligna/axesa/facesa/round/offset** + +2. Sets plane for the existing constraint. + +3. Sets value for the existing constraint. +**Example** + +SetConstraint D 0:2 *value* 5 + +@subsubsection occt_2142243456_9303848265610 GetConstraint + +Syntax:       GetConstraint dfname entry + +Dumps a Constraint attribute at **entry** label +**Example** + +GetConstraint D 0:2 + +@subsubsection occt_2142243456_9303848265611 SetVariable + +Syntax:       SetVariable dfname entry isconstant(0/1) units + +Creates a Variable attribute at **entry** label and sets **isconstant** flag and **units** as a string. +**Example** + +SetVariable D 0:2 1 *mm* + +@subsubsection occt_2142243456_9303848265612 GetVariable + +Syntax:       GetVariable dfname entry isconstant units + +Gets an **isconstant** flag and **units** of a Variable attribute at **entry** label. +**Example** + +GetVariable D 0:2 isconstant units +puts *IsConstant=${isconstant}* +puts *Units=${units}* + + +@subsection occt_2142243456_93038482657 Tree attributes commands + + +@subsubsection occt_2142243456_930384826571 RootNode + +Syntax:       RootNode dfname treenodeentry [ID] + +Returns ultimate father of TreeNode attribute identified by its **treenodeentry** and its **ID** (or default ID, if **ID** is not defined). + + +@subsubsection occt_2142243456_930384826572 SetNode + +Syntax:       SetNode dfname treenodeentry [ID] + +Creates a TreeNode attribute on the **treenodeentry** label with its tree **ID** (or assigns a default ID, if the **ID** is not defined). + + +@subsubsection occt_2142243456_930384826573 AppendNode + +Syntax:       AppendNode dfname fatherentry childentry [fatherID] + + +Inserts a TreeNode attribute with its tree **fatherID** (or default ID, if **fatherID** is not defined) on **childentry** as last child of **fatherentry**. + + + + +@subsubsection occt_2142243456_930384826574 PrependNode + +Syntax:       PrependNode dfname fatherentry childentry [fatherID] + + +Inserts a TreeNode attribute with its tree **fatherID** (or default ID, if **fatherID** is not defined) on **childentry** as first child of **fatherentry**. + + +@subsubsection occt_2142243456_930384826575 InsertNodeBefore + +Syntax:       InsertNodeBefore dfname treenodeentry beforetreenode [ID] + +Inserts a TreeNode attribute with tree **ID** (or default ID, if **ID** is not defined) **beforetreenode** before **treenodeentry**. + + +@subsubsection occt_2142243456_930384826576 InsertNodeAfter + +Syntax:       InsertNodeAfter dfname treenodeentry aftertreenode [ID] + +Inserts a TreeNode attribute with tree **ID** (or default ID, if **ID** is not defined) **aftertreenode** after **treenodeentry**. + + +@subsubsection occt_2142243456_930384826577 DetachNode + +Syntax:       DetachNode dfname treenodeentry [ID] + +Removes a TreeNode attribute with tree **ID** (or default ID, if **ID** is not defined) from **treenodeentry**. + + +@subsubsection occt_2142243456_930384826578 ChildNodeIterate + +Syntax:       ChildNodeIterate dfname treenodeentry alllevels(0/1) [ID] + + +Iterates on the tree of TreeNode attributes with tree **ID** (or default ID, if **ID** is not defined). If **alllevels** is set to **1** it explores not only the first, but all the sub Step levels. +**Example** + +Label D 0:2 +Label D 0:3 +Label D 0:4 +Label D 0:5 +Label D 0:6 +Label D 0:7 +Label D 0:8 +Label D 0:9 + +# Set root node +SetNode D 0:2 + +AppendNode D 0:2 0:4 +AppendNode D 0:2 0:5 +PrependNode D 0:4 0:3 +PrependNode D 0:4 0:8 +PrependNode D 0:4 0:9 + +InsertNodeBefore D 0:5 0:6 +InsertNodeAfter D 0:4 0:7 + +DetachNode D 0:8 + + +# List all levels +ChildNodeIterate D 0:2 1 + +==0:4 +==0:9 +==0:3 +==0:7 +==0:6 +==0:5 + + +# List only first levels +ChildNodeIterate D 0:2 1 + +==0:4 +==0:7 +==0:6 +==0:5 + +@subsubsection occt_2142243456_930384826579 InitChildNodeIterator + +Syntax:       InitChildNodeIterator dfname treenodeentry alllevels(0/1) [ID] + + +Initializes the iteration on the tree of TreeNode attributes with tree **ID** (or default ID, if **ID** is not defined). If **alllevels** is set to **1** it explores not only the first, but also all sub Step levels. +**Example** + +InitChildNodeIterate D 0:5 1 +set aChildNumber 0 +for {set i 1} {$i 100} {incr i} { +    if {[ChildNodeMore] == *TRUE*} { +        puts *Tree node = [ChildNodeValue]* +        incr aChildNumber +        ChildNodeNext +    } +} +puts *aChildNumber=$aChildNumber* + +@subsubsection occt_2142243456_9303848265710 ChildNodeMore + +Syntax:       ChildNodeMore + +Returns TRUE if there is a current item in the iteration. + + +@subsubsection occt_2142243456_9303848265711 ChildNodeNext + +Syntax:       ChildNodeNext + +Moves to the next Item. + + +@subsubsection occt_2142243456_9303848265712 ChildNodeValue + +Syntax:       ChildNodeValue + +Returns the current treenode of ChildNodeIterator. + + +@subsubsection occt_2142243456_9303848265713 ChildNodeNextBrother + +Syntax:       ChildNodeNextBrother + +Moves to the next Brother. If there is none, goes up. This method is interesting only with ;allLevels; behavior. + + +@subsection occt_2142243456_93038482658 Standard presentation commands + + +@subsubsection occt_2142243456_930384826581 AISInitViewer + +Syntax:       AISInitViewer docname + +Creates and sets AISViewer attribute at root label, creates AIS viewer window. +**Example** + +AISInitViewer D + +@subsubsection occt_2142243456_930384826582 AISRepaint + +Syntax:       AISRepaint docname + +Updates the AIS viewer window. +**Example** + +AISRepaint D + +@subsubsection occt_2142243456_930384826583 AISDisplay + +Syntax:       AISDisplay docname entry [not_update] + + +Displays a presantation of AISobject from **entry** label in AIS viewer. If **not_update** is not defined then AISobject is recomputed and all visualization settings are applied. +**Example** + +AISDisplay D 0:5 + +@subsubsection occt_2142243456_930384826584 AISUpdate + +Syntax:       AISUpdate docname entry + +Recomputes a presantation of AISobject from **entry** label and applies the visualization setting in AIS viewer. +**Example** + +AISUpdate D 0:5 + +@subsubsection occt_2142243456_930384826585 AISErase + +Syntax:       AISErase docname entry + +Erases AISobject of **entry** label in AIS viewer. +**Example** + +AISErase D 0:5 + +@subsubsection occt_2142243456_930384826586 AISRemove + +Syntax:       AISRemove docname entry + +Erases AISobject of **entry** label in AIS viewer, then AISobject is removed from AIS_InteractiveContext. +**Example** + +AISRemove D 0:5 + +@subsubsection occt_2142243456_930384826587 AISSet + +Syntax:       AISSet docname entry ID + + +Creates AISPresentation attribute at **entry** label and sets as driver ID. ID must be one of the following: **A** (axis), **C** (constraint), **NS** (namedshape), **G** (geometry), **PL** (plane), **PT** (point). +**Example** + +AISSet D 0:5 NS + +@subsubsection occt_2142243456_930384826588 AISDriver + +Syntax:       AISDriver docname entry [ID] + + +Returns DriverGUID stored in AISPresentation attribute of an **entry** label or sets a new one. ID must be one of the following: **A** (axis), **C** (constraint), **NS** (namedshape), **G** (geometry), **PL** (plane), **PT** (point). +**Example** + +# Get Driver GUID +AISDriver D 0:5 + +@subsubsection occt_2142243456_930384826589 AISUnset + +Syntax:       AISUnset docname entry + +Deletes AISPresentation attribute (if it exists) of an **entry** label. +**Example** + +AISUnset D 0:5 + +@subsubsection occt_2142243456_9303848265810 AISTransparency + +Syntax:       AISTransparency docname entry [transparency] + +Sets (if **transparency** is defined) or gets the value of transparency for AISPresentation attribute of an **entry** label. +**Example** + +AISTransparency D 0:5 0.5 + +@subsubsection occt_2142243456_9303848265811 AISHasOwnTransparency + +Syntax:       AISHasOwnTransparency docname entry + +Tests AISPresentation attribute of an **entry** label by own transparency. +**Example** + +AISHasOwnTransparency D 0:5 + +@subsubsection occt_2142243456_9303848265812 AISMaterial + +Syntax:       AISMaterial docname entry [material] + + +Sets (if **material** is defined) or gets the value of transparency for AISPresentation attribute of an **entry** label. **material** is integer from 0 to 20 (see **meshmat**). +**Example** + +AISMaterial D 0:5 5 + +@subsubsection occt_2142243456_9303848265813 AISHasOwnMaterial + +Syntax:       AISHasOwnMaterial docname entry + +Tests AISPresentation attribute of an **entry** label by own material. +**Example** + +AISHasOwnMaterial D 0:5 + +@subsubsection occt_2142243456_9303848265814 AISColor + +Syntax:       AISColor docname entry [color] + +Sets (if **color** is defined) or gets value of color for AISPresentation attribute of an **entry** label. **color** is integer from 0 to 516 (see color names in **vsetcolor**). +**Example** + +AISColor D 0:5 25 + +@subsubsection occt_2142243456_9303848265815 AISHasOwnColor + +Syntax:       AISHasOwnColor docname entry + +Tests AISPresentation attribute of an **entry** label by own color. +**Example** + +AISHasOwnColor D 0:5 + + + +@section occt_2142243456_1101404852 Geometry commands + + + + +@subsection occt_2142243456_110140485261 Overview + +Draw provides a set of commands to test geometry libraries. These commands are found in the TGEOMETRY executable, or in any Draw executable which includes GeometryTest commands. + +In the context of Geometry, Draw includes the following types of variable: + + * 2d and 3d points + * The 2d curve, which corresponds to *Curve *in *Geom2d*. + * The 3d curve and surface, which correspond to *Curve *and *Surface *in *Geom *[2]. +Draw geometric variables never share data; the **copy **command will always make a complete copy of the content of the variable. + +The following topics are covered in the nine sections of this chapter: + + * **Curve creation **deals with the various types of curves and how to create them. + * **Surface creation **deals with the different types of surfaces and how to create them. + * **Curve and surface modification **deals with the commands used to modify the definition of curves and surfaces, most of which concern modifications to bezier and bspline curves. + * **Geometric transformations **covers translation, rotation, mirror image and point scaling transformations. + * **Curve and Surface Analysis **deals with the commands used to compute points, derivatives and curvatures. + * **Intersections **presents intersections of surfaces and curves. + * **Approximations **deals with creating curves and surfaces from a set of points. + * **Constraints **concerns construction of 2d circles and lines by constraints such as tangency. + * **Display **describes commands to control the display of curves and surfaces. + +Where possible, the commands have been made broad in application, i.e. they apply to 2d curves, 3d curves and surfaces. For instance, the **circle **command may create a 2d or a 3d circle depending on the number of arguments given. + +Likewise, the **translate **command will process points, curves or surfaces, depending on argument type. You may not always find the specific command you are looking for in the section where you expect it to be. In that case, look in another section. The **trim **command, for example, is described in the surface section. It can, nonetheless, be used with curves as well. + + + +@subsection occt_2142243456_110140485262 Curve creation + +This section deals with both points and curves. Types of curves are: + + * Analytical curves such as lines, circles, ellipses, parabolas, and hyperbolas. + * Polar curves such as bezier curves and bspline curves. + * Trimmed curves and offset curves made from other curves with the **trim **and **offset **commands. Because they are used on both curves and surfaces, the **trim **and **offset **commands are described in the *surface creation *section. + * NURBS can be created from other curves using **convert **in the *Surface Creation *section. + * Curves can be created from the isoparametric lines of surfaces by the **uiso **and **viso **commands. + * 3d curves can be created from 2d curves and vice versa using the **to3d **and **to2d **commands. The **project **command computes a 2d curve on a 3d surface. + +Curves are displayed with an arrow showing the last parameter. + + +@subsubsection occt_2142243456_1101404852621 point + +Syntax:      point name x y [z] + +**point **creates a 2d or 3d point, depending on the number of arguments. +
Example
+ +# 2d point +point p1 1 2 + +# 3d point +point p2 10 20 -5 + + +@subsubsection occt_2142243456_1101404852622 line + +Syntax:      line name x y [z] dx dy [dz] + +**line **creates a 2d or 3d line. x y z are the coordinates of the line’s point of origin; dx, dy, dz give the direction vector. + +A 2d line will be represented asl x y dx dy, and a 3d line asl x y z dx dy dz. A line is parameterized along its length starting from the point of origin along the direction vector. The direction vector is normalized and must not be null. Lines are infinite, even though their representation is not. +**Example** + +# a 2d line at 45 degrees of the X axis +line l 2 0 1 1 + +# a 3d line through the point 10 0 0 and parallel to Z +line l 10 0 0 0 0 1 + + +@subsubsection occt_2142243456_1101404852623 circle + +Syntax:      circle name x y [z [dx dy dz]] [ux uy [uz]] radius + +**circle **creates a 2d or a 3d circle. + +In 2d, x, y are the coordinates of the center and ux, uy define the vector towards the point of origin of the parameters. By default, this direction is (1,0). The X Axis of the local coordinate system defines the origin of the parameters of the circle. Use another vector than the x axis to change the origin of parameters. + +In 3d, x, y, z are the coordinates of the center; dx, dy, dz give the vector normal to the plane of the circle. By default, this vector is (0,0,1) i.e. the Z axis (it must not be null). ux, uy, uz is the direction of the origin; if not given, a default direction will be computed. This vector must neither be null nor parallel to dx, dy, dz. + +The circle is parameterized by the angle in [0,2*pi] starting from the origin and. Note that the specification of origin direction and plane is the same for all analytical curves and surfaces. + +**Example** + +# A 2d circle of radius 5 centered at 10,-2 +circle c1 10 -2 5 + +# another 2d circle with a user defined origin +# the point of parameter 0 on this circle will be +# 1+sqrt(2),1+sqrt(2) +circle c2 1 1 1 1 2 + +# a 3d circle, center 10 20 -5, axis Z, radius 17 +circle c3 10 20 -5 17 + +# same 3d circle with axis Y +circle c4 10 20 -5 0 1 0 17 + +# full 3d circle, axis X, origin on Z +circle c5 10 20 -5 1 0 0 0 0 1 17 + + +@subsubsection occt_2142243456_1101404852624 ellipse + +Syntax: ellipse name x y [z [dx dy dz]] [ux uy [uz]] firstradius secondradius **ellipse **creates a 2d or 3d ellipse. In a 2d ellipse, the first two arguments define the center; in a 3d ellipse, the first three. The axis system is given by *firstradius*, the major radius, and *secondradius*, the minor radius. The parameter range of the ellipse is [0,2.*pi] starting from the X axis and going towards the Y axis. The Draw ellipse is parameterized by an angle: + +P(u) = O + firstradius*cos(u)*Xdir + secondradius*sin(u)*Ydir + +where: + + * P is the point of parameter u, + * O, Xdir and Ydir are respectively the origin, *X Direction* and *Y Direction* of its local coordinate system. +
Example
+ +# default 2d ellipse +ellipse e1 10 5 20 10 + +# 2d ellipse at angle 60 degree +ellipse e2 0 0 1 2 30 5 + +# 3d ellipse, in the XY plane +ellipse e3 0 0 0 25 5 + +# 3d ellipse in the X,Z plane with axis 1, 0 ,1 +ellipse e4 0 0 0 0 1 0 1 0 1 25 5 + +See also: **circle** +@subsubsection occt_2142243456_1101404852625 hyperbola + +Syntax:      hyperbola name x y [z [dx dy dz]] [ux uy [uz]] firstradius secondradius + +**hyperbola **creates a 2d or 3d conic. The first arguments define the center. The axis system is given by *firstradius*, the major radius, and *secondradius*, the minor radius. Note that the hyperbola has only one branch, that in the X direction. + +The Draw hyperbola is parameterized as follows: + +P(U) = O + firstradius*Cosh(U)*XDir + secondradius*Sinh(U)*YDir + +where: + + * P is the point of parameter U, + * O, XDir and YDir are respectively the origin, *X Direction* and *Y + +Direction* of its local coordinate system. +**Example** + +# default 2d hyperbola, with asymptotes 1,1 -1,1 +hyperbola h1 0 0 30 30 + +# 2d hyperbola at angle 60 degrees +hyperbola h2 0 0 1 2 20 20 + +# 3d hyperbola, in the XY plane +hyperbola h3 0 0 0 50 50 + +See also: **circle** + + +@subsubsection occt_2142243456_1101404852626 parabola + +Syntax:      parabola name x y [z [dx dy dz]] [ux uy [uz]] FocalLength + +**parabola **creates a 2d or 3d parabola. in the axis system defined by the first arguments.The origin is the apex of the parabola. + +The Geom_Parabola parabola is parameterized as follows: + +P(u) = O + u*u/(4.*F)*XDir + u*YDir + +where: + * P is the point of parameter u, + * O, XDir and YDir are respectively the origin, *X Direction* and *Y Direction* of its local coordinate system, + * F is the focal length of the parabola. +**Example** + +# 2d parabola +parabola p1 0 0 50 + +# 2d parabola with convexity +Y +parabola p2 0 0 0 1 50 + +# 3d parabola in the Y-Z plane, convexity +Z +parabola p3 0 0 0 1 0 0 0 0 1 50 + +See also: **circle** + + +@subsubsection occt_2142243456_1101404852627 beziercurve, dbeziercurve + +Syntax:      beziercurve name nbpole pole, [weight] +2dbeziercurve name nbpole pole, [weight] + +**beziercurve **creates a 3d rational or non-rational Bezier curve. Give the number of poles (control points,) and the coordinates of the poles (x1 y1 z1 [w1] x2 y2 z2 [w2]). The degree will be nbpoles-1. To create a rational curve, give weights with the poles. You must give weights for all poles or for none. If the weights of all the poles are equal, the curve is polynomial, and therefore non-rational. +**Example** + +# a rational 2d bezier curve (arc of circle) +2dbeziercurve ci 3 0 0 1 10 0 sqrt(2.)/2. 10 10 1 + +# a 3d bezier curve, not rational +beziercurve cc 4 0 0 0 10 0 0 10 0 10 10 10 10 + + +@subsubsection occt_2142243456_1101404852628 bsplinecurve, dbsplinecurve, pbsplinecurve, dpbsplinecurve + +Syntax:      bsplinecurve name degree nbknots knot, umult pole, weight 2dbsplinecurve name degree nbknots knot, umult pole, weight pbsplinecurve name degree nbknots knot, umult pole, weight(periodic) +2dpbsplinecurve name degree nbknots knot, umult pole, weight (periodic) + +**bsplinecurve **creates 2d or 3d bspline curves; the **pbsplinecurve **and **2dpbsplinecurve **commands create periodic bspline curves. + +A bspline curve is defined by its degree, its periodic or non-periodic nature, a table of knots and a table of poles (i.e. control points). Consequently, specify the degree, the number of knots, and for each knot, the multiplicity, for each pole, the weight. In the syntax above, the commas link the adjacent arguments which they fall between: knot and multiplicities, pole and weight. + +The table of knots is an increasing sequence of reals without repetition. +Multiplicities must be lower or equal to the degree of the curve. For non-periodic curves, the first and last multiplicities can be equal to degree+1. For a periodic curve, the first and last multiplicities must be equal. + +The poles must be given with their weights, use weights of 1 for a non rational curve, the number of poles must be: + + * For a non periodic curve: Sum of multiplicities - degree + 1 + * For a periodic curve: Sum of multiplicities - last multiplicity +**Example** + +# a bspline curve with 4 poles and 3 knots +bsplinecurve bc 2 3 0 3 1 1 2 3 \ +10 0 7 1 7 0 7 1 3 0 8 1 0 0 7 1 +# a 2d periodic circle (parameter from 0 to 2*pi !!) +dset h sqrt(3)/2 +2dpbsplinecurve c 2 \ +4 0 2 pi/1.5 2 pi/0.75 2 2*pi 2 \ +0 -h/3 1 \ +0.5 -h/3 0.5 \ +0.25 h/6 1 \ +0 2*h/3 0.5 \ +-0.25 h/6 1 \ +-0.5 -h/3 0.5 \ +0 -h/3 1 + +

NOTE

+*You can create the **NURBS **subset of bspline curves and* +*surfaces by trimming analytical curves and surfaces and* +*executing the command *convert*; see below.* + + +@subsubsection occt_2142243456_1101404852629 uiso, viso + +Syntax:      uiso name surface u +viso name surface u + +Use these commands to create a U or V isoparametric curve from a surface. +**Example** + +# create a cylinder and extract iso curves + +cylinder c 10 +uiso c1 c pi/6 +viso c2 c + +*NOTE* +*Cannot be done from offset surfaces.* + + +@subsubsection occt_2142243456_11014048526210 tod, tod + +Syntax:      to3d name curve2d [plane] +to2d name curve3d [plane] + +The **to3d **and **to2d **commands are used to create respectively a 3d curve from a 2d curve and a 2d curve from a 3d curve. The transformation uses a planar surface to define the XY plane in 3d (by default this plane is the default OXYplane). **to3d **always gives a correct result, but as **to2d **is not a projection, it may surprise you. It is always correct if the curve is planar and parallel to the plane of projection. The points defining the curve are projected on the plane. A circle, however, will remain a circle and will not be changed to an ellipse. +**Example** + +# the following commands +circle c 0 0 5 +plane p -2 1 0 1 2 3 +to3d c c p + +# will create the same circle as +circle c -2 1 0 1 2 3 5 + +See also: **project** + + +@subsubsection occt_2142243456_11014048526211 project + +Syntax:      project name curve3d surface + +**project **computes a 2d curve in the parametric space of a surface corresponding to a 3d curve. This can only be used on analytical surfaces. +**Example** + +# intersect a cylinder and a plane +# and project the resulting ellipse on the cylinder +# this will create a 2d sinusoid-like bspline +cylinder c 5 +plane p 0 0 0 0 1 1 +intersect i c p +project i2d i c + +@subsection occt_2142243456_110140485263 Surface creation + +Types of surfaces are: + + * Analytical surfaces: plane, cylinder, cone, sphere, torus. + * Polar surfaces: bezier surfaces, bspline surfaces + * Trimmed and Offset surfaces; see **trim**, **trimu**, **trimv**, **offset**. + * Surfaces produced by Revolution and Extrusion, created from curves with the **revsurf **and **extsurf**. + * NURBS surfaces. + +Surfaces are displayed with isoparametric lines. To show the parameterization, a small parametric line with a length 1/10 of V is displayed at 1/10 of U. + + +@subsubsection occt_2142243456_1101404852631 plane + +Syntax:      plane name [x y z [dx dy dz [ux uy uz]]] + +Uses this command to create an infinite plane. A plane is the same as a 3d coordinate system, x,y,z is the origin, dx, dy, dz is the Z direction and ux, uy, uz is the X direction. The plane is perpendicular to Z and X is the U parameter. dx,dy,dz and ux,uy,uz must not be null and not colinear. ux,uy,uz will be modified to be orthogonal to dx,dy,dz. There are default values for the coordinate system. If no arguments are given, the global system (0,0,0), (0,0,1), (1,0,0). If only the origin is given, the axes are those given by default(0,0,1), (1,0,0). If the origin and the Z axis are given, the X axis is generated perpendicular to the Z axis. Note that this definition will be used for all analytical surfaces. +**Example** + +# a plane through the point 10,0,0 perpendicular to X +# with U direction on Y +plane p1 10 0 0 1 0 0 0 1 0 + +# an horixontal plane with origin 10, -20, -5 +plane p2 10 -20 -5 + + +@subsubsection occt_2142243456_1101404852632 cylinder + +Syntax:      cylinder name [x y z [dx dy dz [ux uy uz]]] radius + +A cylinder is defined by a coordinate system, and a radius. The surface generated is an infinite cylinder with the Z axis as the axis. The U parameter is the angle starting from X going in the Y direction. +See also: **plane** +**Example** + +# a cylinder on the default Z axis, radius 10 +cylinder c1 10 + +# a cylinder, also along the Z axis but with origin 5, +10, -3 +cylinder c2 5 10 -3 10 + +# a cylinder through the origin and on a diagonal +# with longitude pi/3 and latitude pi/4 (euler angles) +dset lo pi/3. la pi/4. +cylinder c3 0 0 0 cos(la)*cos(lo) cos(la)*sin(lo) +sin(la) 10 + + +@subsubsection occt_2142243456_1101404852633 cone + +Syntax:      cone name [x y z [dx dy dz [ux uy uz]]] semi-angle radius + +Creates a cone in the infinite coordinate system along the Z-axis. The radius is that of the circle at the intersection of the cone and the XY plane. The semi-angle is the angle formed by the cone relative to the axis; it should be between –90° and 90°. If the radius is 0, the vertex is the origin. +See also: **plane** +**Example** + +# a cone at 45 degrees at the origin on Z +cone c1 45 0 + +# a cone on axis Z with radius r1 at z1 and r2 at z2 +cone c2 0 0 z1 180.*atan2(r2-r1,z2-z1)/pi r1 + +@subsubsection occt_2142243456_1101404852634 sphere + +Syntax:      sphere name [x y z [dx dy dz [ux uy uz]]] radius + +Creates a sphere in the local coordinate system defined in the **plane **command. The sphere is centered at the origin. To parameterize the sphere, u is the angle from X to Y, between o and 2*pi. v is the angle in the half-circle at angle u in the plane containing the Z axis. v is between -pi/2 and pi/2. The poles are the points Z = +/- radius; their parameters are u,+/-pi/2 for any u in 0,2*pi. +**Example** +# a sphere at the origin +sphere s1 10 +# a sphere at 10 10 10, with poles on the axis 1,1,1 +sphere s2 10 10 10 1 1 1 10 + +See also: **plane** + + +@subsubsection occt_2142243456_1101404852635 torus + +Syntax:      torus name [x y z [dx dy dz [ux uy uz]]] major minor + +Creates a torus in the local coordinate system with the given major and minor radii. Z is the axis for the major radius. The major radius may be lower in value than the minor radius. + +To parameterize a torus, u is the angle from X to Y; v is the angle in the plane at angle u from the XY plane to Z. u and v are in 0,2*pi. +**Example** + +# a torus at the origin +torus t1 20 5 + +# a torus in another coordinate system +torus t2 10 5 -2 2 1 0 20 5 + +See also: **plane** + + +@subsubsection occt_2142243456_1101404852636 beziersurf + +Syntax:      beziersurf name nbupoles nbvolpes pole, [weight] + +Use this command to create a bezier surface, rational or non-rational. First give the numbers of poles in the u and v directions. + +Then give the poles in the following order: pole(1, 1), pole(nbupoles, 1), pole(1, nbvpoles) and pole(nbupoles, nbvpoles). + +Weights may be omitted, but if you give one weight you must give all of them. +**Example** + +# a non-rational degree 2,3 surface +beziersurf s 3 4 \ +0 0 0 10 0 5 20 0 0 \ +0 10 2 10 10 3 20 10 2 \ +0 20 10 10 20 20 20 20 10 \ +0 30 0 10 30 0 20 30 0 + +See also: **beziercurve** + +@subsubsection occt_2142243456_1101404852637  bsplinesurf, upbsplinesurf, vpbsplinesurf, uvpbsplinesurf + +Syntax:      bsplinesurf name udegree nbuknots uknot umult ... nbvknot vknot +vmult ... x y z w ... +upbsplinesurf ... +vpbsplinesurf ... +uvpbsplinesurf ... + +**bsplinesurf **generates bspline surfaces. **upbsplinesurf **creates a bspline surface periodic in u; **vpbsplinesurf **creates one periodic in v; and **uvpbsplinesurf **creates one periodic in uv. + +The syntax is similar to the **bsplinecurve **command. First give the degree in u and the knots in u with their multiplicities, then do the same in v. The poles follow. The number of poles is the product of the number in u and the number in v. See **bsplinecurve **to compute the number of poles, the poles are first given in U as in the beziersurf command. You must give weights if the surface is rational. +**Example** + +# create a bspline surface of degree 1 2 +# with two knots in U and three in V +bsplinesurf s \ +1 2 0 2 1 2 \ +2 3 0 3 1 1 2 3 \ +0 0 0 1 10 0 5 1 \ +0 10 2 1 10 10 3 1 \ +0 20 10 1 10 20 20 1 \ +0 30 0 1 10 30 0 1 + +See also: **bsplinecurve**, **beziersurf**, **convert** + + +@subsubsection occt_2142243456_1101404852638 trim, trimu, trimv + +Syntax:      trim newname name [u1 u2 [v1 v2]] +trimu newname name +trimv newname name + +The **trim **commands create trimmed curves or trimmed surfaces. Note that trimmed curves and surfaces are classes of the *Geom *package. The **trim **command creates either a new trimmed curve from a curve or a new trimmed surface in u and v from a surface. **trimu **creates a u-trimmed surface, and **trimv **a v-trimmed surface. After an initial trim, a second execution with no parameters given recreates the basis curve. The curves can be either 2d or 3d. If the trimming parameters decrease and if the curve or surface is not periodic, the direction is reversed. +

NOTE

+*Note that a trimmed curve or surface contains a copy of the* +*basis geometry: modifying that will not modify the trimmed* +*geometry. Trimming trimmed geometry will not create* +*multiple levels of trimming. The basis geometry will be used.* +**Example** + +# create a 3d circle +circle c 0 0 0 10 + +# trim it, use the same variable, the original is +deleted +trim c c 0 pi/2 + +# the original can be recovered! +trim orc c + +# trim again +trim c c pi/4 pi/2 + +# the original is not the trimmed curve but the basis +trim orc c + +# as the circle is periodic, the two following commands +are identical +trim cc c pi/2 0 +trim cc c pi/2 2*pi + +# trim an infinite cylinder +cylinder cy 10 +trimv cy cy 0 50 + +See also: **reverse** + + +@subsubsection occt_2142243456_1101404852639 offset + +Syntax:      offset name basename distance [dx dy dz] + +Creates offset curves or surfaces at a given distance from a basis curve or surface. Offset curves and surfaces are classes from the *Geom *package. + +The curve can be a 2d or a 3d curve. To compute the offsets for a 3d curve, you must also give a vector dx,dy,dz. For a planar curve, this vector is usually the normal to the plane containing the curve. + +The offset curve or surface copies the basic geometry, which can be modified later. +**Example** + +# graphic demonstration that the outline of a torus +# is the offset of an ellipse +smallview +X+Y +dset angle pi/6 +torus t 0 0 0 0 cos(angle) sin(angle) 50 20 +fit +ellipse e 0 0 0 50 50*sin(angle) +# note that the distance can be negative +offset l1 e 20 0 0 1 +@subsubsection occt_2142243456_11014048526310 revsurf + +Syntax:      revsurf name curvename x y z dx dy dz + +Creates a surface of revolution from a 3d curve. A surface of revolution or revolved surface is obtained by rotating a curve (called the *meridian*) through a complete revolution about an axis (referred to as the *axis of revolution*). The curve and the axis must be in the same plane (the *reference plane* of the surface). Give the point of origin x,y,z and the vector dx,dy,dz to define the axis of revolution. To parameterize a surface of revolution: u is the angle of rotation around the axis. Its origin is given by the position of the meridian on the surface. v is the parameter of the meridian. +**Example** + +# another way of creating a torus like surface +circle c 50 0 0 20 +revsurf s c 0 0 0 0 1 0 + + +@subsubsection occt_2142243456_11014048526311 extsurf + +Syntax:      extsurf newname curvename dx dy dz + +Use the **extsurf **command to create a surface of linear extrusion from a 3d curve. The basis curve is swept in a given direction,the *direction of extrusion* defined by a vector. In the syntax, dx,dy,dz gives the direction of extrusion. To parameterize a surface of extrusion: u is the parameter along the extruded curve; the v parameter is along the direction of extrusion. +**Example** + +# an elliptic cylinder +ellipse e 0 0 0 10 5 +extsurf s e 0 0 1 +# to make it finite +trimv s s 0 10 + + +@subsubsection occt_2142243456_11014048526312 convert + +Syntax:      convert newname name + +**convert **creates a 2d or 3d NURBS curve or a NURBS surface from any 2d curve, 3d curve or surface. In other words, conics, beziers and bsplines are turned into NURBS. Offsets are not processed. +**Example** + +# turn a 2d arc of a circle into a 2d NURBS +circle c 0 0 5 +trim c c 0 pi/3 +convert c1 c + +# an easy way to make a planar bspline surface +plane p +trim p p -1 1 -1 1 +convert p1 p + +

NOTE

+*Offset curves and surfaces are not treated by this command.* + + + +@subsection occt_2142243456_110140485264 Curve and surface modifications + +Draw provides commands to modify curves and surfaces, some of them are general, others restricted to bezier curves or bsplines. + +General modifications: + + * Reversing the parametrization: **reverse**, **ureverse**, **vreverse** + +Modifications for both bezier curves and bsplines: + + * Exchanging U and V on a surface: **exchuv** + * Segmentation: **segment**, **segsur** + * Increasing the degree: **incdeg**, **incudeg**, **incvdeg** + * Moving poles: **cmovep**, **movep**, **movecolp**, **moverowp** + +Modifications for bezier curves: + + * Adding and removing poles: **insertpole**, **rempole**, **remcolpole**, **remrowpole** + +Modifications for bspline: + + * Inserting and removing knots: **insertknot**, **remknot**, **insertuknot**, **remuknot**, **insetvknot**, **remvknot** + * Modifying periodic curves and surfaces: **setperiodic**, **setnotperiodic**, **setorigin**, **setuperiodic**, **setunotperiodic**, **setuorigin**, **setvperiodic**, **setvnotperiodic**, **setvorigin** + + + + + +@subsubsection occt_2142243456_1101404852641 reverse, ureverse, vreverse + + +Syntax:            reverse curvename +ureverse surfacename +vreverse surfacename + +The **reverse **command reverses the parameterization and inverses the orientation of a 2d or 3d curve. Note that the geometry is modified. To keep the curve or the surface, you must copy it before modification. + +**ureverse **or **vreverse **reverse the u or v parameter of a surface. Note that the new parameters of the curve may change according to the type of curve. For instance, they will change sign on a line or stay 0,1 on a bezier. + +Reversing a parameter on an analytical surface may create an indirect coordinate system. +**Example** + +# reverse a trimmed 2d circle +circle c 0 0 5 +trim c c pi/4 pi/2 +reverse c + +# dumping c will show that it is now trimmed between +# 3*pi/2 and 7*pi/4 i.e. 2*pi-pi/2 and 2*pi-pi/4 + + +@subsubsection occt_2142243456_1101404852642 exchuv + +Syntax:                  exchuv surfacename + +For a bezier or bspline surface this command exchanges the u and v parameters. +**Example** + +# exchanging u and v on a spline (made from a cylinder) +cylinder c 5 +trimv c c 0 10 +convert c1 c +exchuv c1 + + +@subsubsection occt_2142243456_1101404852643 segment, segsur + +Syntax:                  segment curve Ufirst Ulast +segsur surface Ufirst Ulast Vfirst Vlast + +**segment **and **segsur **segment a bezier curve and a bspline curve or surface respectively. These commands modify the curve to restrict it between the new parameters: the starting point of the modified curve, Ufirst, and the end point, Ulast. Ufirst is less than Ulast. + +This command must not be confused with **trim **which creates new geometry. + +**Example** + +# segment a bezier curve in half +beziercurve c 3 0 0 0 10 0 0 10 10 0 +segment c ufirst ulast + + +@subsubsection occt_2142243456_1101404852644 iincudeg, incvdeg + +Syntax:      incudeg surfacename newdegree +incvdeg surfacename newdegree + +**incudeg **and **incvdeg **increase the degree in the U or V parameter of a bezier or bspline surface. +**Example** + +# make a planar bspline and increase the degree to 2 3 +plane p +trim p p -1 1 -1 1 +convert p1 p +incudeg p1 2 +incvdeg p1 3 + +

NOTE

+*The geometry is modified.* + + +@subsubsection occt_2142243456_1101404852645 cmovep, movep, movecolp, moverowp + +Syntax:      cmovep curve index dx dy [dz] +movep surface uindex vindex dx dy dz +movecolp surface uindex dx dy dz +moverowp surface vindex dx dy dz + +**move **methods translate poles of a bezier curve, a bspline curve or a bspline surface. **cmovep **and **movep **translate one pole with a given index. + +**movecolp **and **moverowp **translate a whole column (expressed by the uindex) or row (expressed by the vindex) of poles. +**Example** + +# start with a plane +# transform to bspline, raise degree and add relief +plane p +trim p p -10 10 -10 10 +convert p1 p +incud p1 2 +incvd p1 2 +movecolp p1 2 0 0 5 +moverowp p1 2 0 0 5 +movep p1 2 2 0 0 5 + + +@subsubsection occt_2142243456_1101404852646 insertpole, rempole, remcolpole, remrowpole + +Syntax:                  insertpole curvename index x y [z] [weight] +rempole curvename index +remcolpole surfacename index +remrowpole surfacename index + +**insertpole **inserts a new pole into a 2d or 3d bezier curve. You may add a weight for the pole. The default value for the weight is 1. The pole is added at the position after that of the index pole. Use an index 0 to insert the new pole before the first one already existing in your drawing. + +**rempole **removes a pole from a 2d or 3d bezier curve. Leave at least two poles in the curves. + +**remcolpole **and **remrowpole **remove a column or a row of poles from a bezier surface. A column is in the v direction and a row in the u direction The resulting degree must be at least 1; i.e there will be two rows and two columns left. +**Example** + +# start with a segment, insert a pole at end +# then remove the central pole +beziercurve c 2 0 0 0 10 0 0 +insertpole c 2 10 10 0 +rempole c 2 + + +@subsubsection occt_2142243456_1101404852647 insertknot, insertuknot, insertvknot + +Syntax:                  insertknot name knot [mult = 1] [knot mult ...] +insertuknot surfacename knot mult +insertvknot surfacename knot mult + +**insertknot **inserts knots in the knot sequence of a bspline curve. You must give a knot value and a target multiplicity. The default multiplicity is 1. If there is already a knot with the given value and a multiplicity lower than the target one, its multiplicity will be raised. **insertuknot **and **insertvknot **insert knots in a surface. + + + + +**Example** + +# create a cylindrical surface and insert a knot +cylinder c 10 +trim c c 0 pi/2 0 10 +convert c1 c +insertuknot c1 pi/4 1 + +@subsubsection occt_2142243456_1101404852648 remknot, remuknot, remvknot + +Syntax:      remknot index [mult] [tol] +remuknot index [mult] [tol] +remvknot index [mult] [tol] + +**remknot **removes a knot from the knot sequence of a curve or a surface. Give the index of the knot and optionally, the target multiplicity. If the target multiplicity is not 0, the multiplicity of the knot will be lowered. As the curve may be modified, you are allowed to set a tolerance to control the process. If the tolerance is low, the knot will only be removed if the curve will not be modified. + +By default, if no tolerance is given, the knot will always be removed. +**Example** + +# bspline circle, remove a knot +circle c 0 0 5 +convert c1 c +incd c1 5 +remknot c1 2 + +*NOTE* +*Curves or Surfaces may be modified.* + + +@subsubsection occt_2142243456_1101404852649 setperiodic, setnotperiodic, setuperiodic, setunotperiodic, setvperiodic, setvnotperiodic + +Syntax:      setperiodic curve +setnotperiodic curve +setuperiodic surface +setunotperiodic surface +setvperiodic surface +setvnotperiodic surface + +**setperiodic **turns a bspline curve into a periodic bspline curve; the knot vector stays the same and excess poles are truncated. The curve may be modified if it has not been closed. **setnotperiodic **removes the periodicity of a periodic curve. The pole table mau be modified. Note that knots are added at the beginning and the end of the knot vector and the multiplicities are knots set to degree+1 at the start and the end. + +**setuperiodic **and **setvperiodic **make the u or the v parameter of bspline surfaces periodic; **setunotperiodic**, and **setvnotperiodic **remove periodicity from the u or the v parameter of bspline surfaces. +**Example** + +# a circle deperiodicized +circle c 0 0 5 +convert c1 c +setnotperiodic c1 +@subsubsection occt_2142243456_11014048526410 setorigin, setuorigin, setvorigin + +Syntax:      setorigin curvename index +setuorigin surfacename index +setuorigin surfacename index + +These commands change the origin of the parameters on periodic curves or surfaces. The new origin must be an existing knot. To set an origin other than an existing knot, you must first insert one with the **insertknot **command. +**Example** + +# a torus with new U and V origins +torus t 20 5 +convert t1 t +setuorigin t1 2 +setvorigin t1 2 + + +@subsection occt_2142243456_110140485265 Transformations + +Draw provides commands to apply linear transformations to geometric objects: they include translation, rotation, mirroring and scaling. + +@subsubsection occt_2142243456_1101404852651 translate, dtranslate + +Syntax:                  translate name [names ...] dx dy dz +2dtranslate name [names ...] dx dy + +The **Translate **command translates 3d points, curves and surfaces along a vector dx,dy,dz. You can translate more than one object with the same command. + +For 2d points or curves, use the **2dtranslate **command. +**Example** + +# 3d tranlation +point p 10 20 30 +circle c 10 20 30 5 +torus t 10 20 30 5 2 +translate p c t 0 0 15 +*NOTE* +*Objects are modified by this command.* + +@subsubsection occt_2142243456_1101404852652 rotate, drotate + +Syntax:      rotate name [name ...] x y z dx dy dz angle +2drotate name [name ...] x y angle +The **rotate **command rotates a 3d point curve or surface. You must give an axis of rotation with a point x,y,z, a vector dx,dy,dz, and an angle in degrees. + +For a 2d rotation, you need only give the center point and the angle. In 2d or 3d, the angle can be negative. +**Example** + +# make a helix of circles. create a scripte file with +this code and execute it using **source**. +circle c0 10 0 0 3 +for {set i 1} {$i = 10} {incr i} { +copy c[expr $i-1] c$i +translate c$i 0 0 3 +rotate c$i 0 0 0 0 0 1 36 +} + +@subsubsection occt_2142243456_1101404852653 pmirror, lmirror, smirror, dpmirror, dlmirror + +Syntax:      pmirror name [names ...] x y z +lmirror name [names ...] x y z dx dy dz +smirror name [names ...] x y z dx dy dz +2dpmirror name [names ...] x y +2dlmirror name [names ...] x y dx dy + +The mirror commands perform a mirror transformation of 2d or 3d geometry. + +**pmirror **is the point mirror, mirroring 3d curves and surfaces about a point of symmetry. **lmirror **is the line mirror commamd, mirroring 3d curves and surfaces about an axis of symmetry. **smirror **is the surface mirror, mirroring 3d curves and surfaces about a plane of symmetry. In the last case, the plane of symmetry is perpendicular to dx,dy,dz. + +In 2d, only **2dpmirror**, point symmetry mirroring, and **2dlmirror**, axis symmetry mirroring, are available. +**Example** + +# build 3 images of a torus +torus t 10 10 10 1 2 3 5 1 +copy t t1 +pmirror t1 0 0 0 +copy t t2 +lmirror t2 0 0 0 1 0 0 +copy t t3 +smirror t3 0 0 0 1 0 0 + +@subsubsection occt_2142243456_1101404852654 pscale, dpscale + +Syntax:                  pscale name [name ...] x y z s +2dpscale name [name ...] x y s +The **pscale **and **2dpscale **commands transform an object by point scaling. You must give the center and the scaling factor. Because other scalings modify the type of the object, they are not provided. For example, a sphere may be transformed into an ellipsoid. Using a scaling factor of -1 is similar to using **pmirror**. +**Example** + +# double the size of a sphere +sphere s 0 0 0 10 +pscale s 0 0 0 2 + +@subsection occt_2142243456_110140485266 Curve and surface analysis + +**Draw **provides methods to compute information about curves and surfaces: + + * **coord **to find the coordinates of a point. + * **cvalue **and **2dcvalue **to compute points and derivatives on curves. + * **svalue **to compute points and derivatives on a surface. + * **localprop **and **minmaxcurandif **to compute the curvature on a curve. + * **parameters **to compute (u,v) values for a point on a surface. + * **proj **and **2dproj **to project a point on a curve or a surface. + * **surface_radius **to compute the curvature on a surface. + +@subsubsection occt_2142243456_1101404852661 coord + +Syntax:            coord P x y [z] + +The **coord **command will set the coordinates of the point P. x, y (and optionally z) +**Example** + +# translate a point +point p 10 5 5 +translate p 5 0 0 +coord p x y z +# x value is 15 +See also: **point** +@subsubsection occt_2142243456_1101404852662  cvalue, dcvalue + +Syntax:      cvalue curve U x y z [d1x d1y d1z [d2x d2y d2z]] +2dcvalue curve U x y [d1x d1y [d2x d2y]] + +For a curve at a given parameter, and depending on the number of arguments, **cvalue **computes: the coordinates in x,y,z, the first derivative in d1x,d1y,d1z and the second derivative in d2x,d2y,d2z. +
Example
+ +# on a bezier curve at parameter 0 +# the point is the first pole +# the derivative is the vector first to second pole +# multiplied by the degree +# the second derivative is the difference +# first to second pole, second to third pole +# multipied by degree * degree-1 +2dbeziercurve c 4 0 0 1 1 2 1 3 0 +2dcvalue c 0 x y d1x d1y d2x d2y + +# values of x y d1x d1y d2x d2y +# are 0 0 3 3 0 -6 + + +@subsubsection occt_2142243456_1101404852663 svalue + +Syntax: svalue surfname U v x y z [dux duy duz dvx dvy dvz [d2ux d2uy d2uz d2vx d2vy d2vz d2uvx d2uvy d2uvz]] + +**svalue **computes points and derivatives on a surface for a pair of parameter values. The result depends on the number of arguments. You can compute first and second derivatives. +**Example** + +# display points on a sphere +sphere s 10 +for {dset t 0} {[dval t] = 1} {dset t t+0.01} { +svalue s t*2*pi t*pi-pi/2 x y z +point . x y z +} + + +@subsubsection occt_2142243456_1101404852664 localprop, minmaxcurandinf + +Syntax:      localprop curvename U +minmaxcurandinf curve + +The **localprop **command computes the curvature of a curve. +**minmaxcurandinf **computes and prints the parameters of the points where the curvature is minimum and maximum on a 2d curve. +**Example** + +# show curvature at the center of a bezier curve +beziercurve c 3 0 0 0 10 2 0 20 0 0 +localprop c 0.5 +== Curvature : 0.02 + +See also: **surface_radius** + + +@subsubsection occt_2142243456_1101404852665 parameters + +Syntax:      parameters surf/curve x y z U [V] + +The **parameters **command returns the parameters on the surface of the 3d point x,y,z in variables u and v . This command may only be used on analytical surfaces: plane, cylinder, cone, sphere and torus. +**Example** + +# Compute parameters on a plane +plane p 0 0 10 1 1 0 +parameters p 5 5 5 u v +# the values of u and v are : 0 5 + + +@subsubsection occt_2142243456_1101404852666 proj, dproj + +Syntax:      proj name x y z +2dproj name xy + +Use **proj **to project a point on a 3d curve or a surface and **2dproj **for a 2d curve. + +The command will compute and display all points in the projection. The lines joining the point to the projections are created with the names ext_1, ext_2, ... +**Example** + +# project point on a torus +torus t 20 5 +proj t 30 10 7 +== ext_1 ext_2 ext_3 ext_4 + + +@subsubsection occt_2142243456_1101404852667 surface_radius + +Syntax:      surface_radius surface u v [c1 c2] + +The **surface_radius **command computes the main curvatures of a surface at parameters (u,v). If there are extra arguments, their curvatures are stored in variables c1 and c2. +**Example** + +# computes curvatures of a cylinder +cylinder c 5 +surface_radius c pi 3 c1 c2 +== Min Radius of Curvature : -5 +== Min Radius of Curvature : infinite + + + +@subsection occt_2142243456_110140485267 Intersections + +The **intersect **command computes intersections of surfaces; the **2dintersect **command, intersections of 2d curves. + + +@subsubsection occt_2142243456_1101404852671 intersect + +Syntax:      intersect name surface1 surface2 + +The **intersect **command intersects two surfaces. If there is one intersection curve it will be named ;name;, if there are more than one they will be named ;name_1;, ;name_2;, ... +**Example** + +# create an ellipse +cone c 45 0 +plane p 0 0 40 0 1 5 +intersect e c p + + +@subsubsection occt_2142243456_1101404852672 dintersect + +Syntax:      2dintersect curve1 curve2 + +**2dintersect **displays the intersection points between two 2d curves. +**Example** + +# intersect two 2d ellipses +ellipse e1 0 0 5 2 +ellipse e2 0 0 0 1 5 2 +2dintersect e1 e2 +@subsection occt_2142243456_110140485268 Approximations + +Draw provides command to create curves and surfaces by approximation. + +**2dapprox **fits a curve through 2d points, **appro **fits a curve through 3d points, **surfapp **and **grilapp **fits a surface through 3d points, **2dinterpolate **may be used to interpolate a curve. + +@subsubsection occt_2142243456_1101404852681  appro, dapprox + +Syntax:      appro result nbpoint [curve] +2dapprox result nbpoint [curve / x1 y1 x2 y2] + +These commands fit a curve through a set of points. First give the number of points, then choose one of the three ways available to get the points. If you have no arguments, click on the points. If you have a curve argument or a list of points, the command launches computation of the points on the curve. +**Example** + +# pick points and they will be fitted +2dapprox c 10 + + +@subsubsection occt_2142243456_1101404852682 surfapp, grilapp + + +Syntax: surfapp name nbupoints nbvpoints x y z .... +grilapp name nbupoints nbvpoints xo dx yo dy z11 z12 ... + +**surfapp **fits a surface through an array of u and v points, nbupoints*nbvpoints. + +**grilapp **has the same function, but the x,y coordinates of the points are on a grid starting at x0,y0 with steps dx,dy. +**Example** + +# a surface using the same data as in the beziersurf +example sect 4.4 +surfapp s 3 4 \ +0 0 0 10 0 5 20 0 0 \ +0 10 2 10 10 3 20 10 2 \ +0 20 10 10 20 20 20 20 10 \ +0 30 0 10 30 0 20 30 0 + + + + + +@subsection occt_2142243456_110140485269 Constraints + +The **cirtang **command is used to construct 2d circles tangent to curves and **lintan **to construct 2d lines tangent to curves. + + +@subsubsection occt_2142243456_1101404852691 cirtang + +Syntax: cirtang cname curve/point/radius curve/point/radius curve/point/radius + +The **cirtang **command will build all circles satisfying the three constraints which are either a curve (the circle must be tangent to that curve), a point (the circle must pass through that point), or a radius for the circle. Only one constraint can be a radius. The solutions will be stored in variables *name_1*, *name_2*, etc. +**Example** + +# a point, a line and a radius. 2 solutions +point p 0 0 +line 1 10 0 -1 1 +cirtang c p 1 4 +== c_1 c_2 + + +@subsubsection occt_2142243456_1101404852692 lintan + +Syntax:      lintan name curve curve [angle] + +The **lintan **command will build all 2d lines tangent to two curves. If a third angle argument is given the second curve must be a line and **lintan **will build all lines tangent to the first curve and forming the given angle with the line. The angle is given in degrees. The solutions are named name_1, name_2, etc. +**Example** + +# lines tangent to 2 circles, 4 solutions +circle c1 -10 0 10 +circle c2 10 0 5 +lintan l c1 c2 + +# lines at 15 degrees tangent to a circle and a line, 2 +solutions: l1_1 l1_2 +circle c1 -10 0 1 +line l 2 0 1 1 +lintan l1 c1 l 15 + + + + +@subsection occt_2142243456_1101404852610 Display + +Draw provides commands to control the display of geometric objects. Some display parameters are used for all objects, others are valid for surfaces only, some for bezier and bspline only, and others for bspline only. + +On curves and surfaces, you can control the mode of representation with the **dmode **command. You can control the parameters for the mode with the **defle **command and the **discr **command, which control deflection and discretization respectively. + +On surfaces, you can control the number of isoparametric curves displayed on the surface with the **nbiso **commands. + +On bezier and bspline curve and surface you can toggle the display of the control points with the **clpoles **and **shpoles **commands. + +On bspline curves and surfaces you can toggle the display of the knots with the **shknots **and **clknots **commands. + + +@subsubsection occt_2142243456_11014048526101 dmod, discr, defle + +Syntax:      dmode name [name ...] u/d +discr name [name ...] nbintervals +defle name [name ...] deflection + +**dmode **allows you to choose the display mode for a curve or a surface. + +In mode ;u;, or *uniform deflection*, the points are computed to keep the polygon at a distance lower than the deflection of the geometry. The deflection is set with the **defle **command. This mode involves intensive use of computational power. + +In ;d;, or discretization mode, a fixed number of points is computed. This number is set with the **discr **command. This is the default mode. On a bspline, the fixed number of points is computed for each span of the curve. (A span is the interval between two knots). + +If the curve or the isolines seem to present too many angles, you can either increase the discretization or lower the deflection, depending on the mode. This will increase the number of points. +**Example** + +# increment the number of points on a big circle +circle c 0 0 50 50 +discr 100 + +# change the mode +dmode c u + + +@subsubsection occt_2142243456_11014048526102  nbiso + +Syntax:      nbiso name [names...] nuiso nviso + +**nbiso **changes the number of isoparametric curves displayed on a surface in the U and V directions. On a bspline surface, isoparametric curves are displayed by default at knot values. Use **nbiso **to turn this feature off. +**Example** + +# display 35 meridians and 15 parallels on a spere +sphere s 20 +nbiso s 35 15 + + +@subsubsection occt_2142243456_11014048526103 clpoles, shpoles + +Syntax:      clpoles name +shpoles name + +On bezier and bspline curves and surfaces, the control polygon is displayed by default: **clpoles **erases it and **shpoles **restores it. +**Example** + +# make a bezier curve and erase the poles +beziercurve c 3 0 0 0 10 0 0 10 10 0 +clpoles c + + +@subsubsection occt_2142243456_11014048526104 clknots, shknots + +Syntax:   clknots name +shknots name + +By default, knots on a bspline curve or surface are displayed with markers at the points with parametric value equal to the knots. **clknots **removes them and **shknots **restores them. +**Example** + +# hide the knots on a bspline curve +bsplinecurve bc 2 3 0 3 1 1 2 3 \ +10 0 7 1 7 0 7 1 3 0 8 1 0 0 7 1 +clknots bc +@section occt_2142243456_1869436669 Topology commands + + + + + + + +Draw provides a set of commands to test OCCT Topology libraries. The Draw commands are found in the DRAWEXE executable or in any executable including the BRepTest commands. + +Topology defines the relationship between simple geometric entities, which can thus be linked together to represent complex shapes. The type of variable used by Topology in Draw is the shape variable. + +The different topological shapes[3] include: + + * COMPOUND: A group of any type of topological object. + * COMPSOLID: A set of solids connected by their faces. This expands the notions of WIRE and SHELL to solids. + * SOLID: A part of space limited by shells. It is three dimensional. + * SHELL: A set of faces connected by their edges. A shell can be open or closed. + * FACE: In 2d, a plane; in 3d, part of a surface. Its geometry is constrained (trimmed) by contours. It is two dimensional. + * WIRE: A set of edges connected by their vertices. It can be open or closed depending on whether the edges are linked or not. + * EDGE: A topological element corresponding to a restrained curve. An edge is generally limited by vertices. It has one dimension. + * VERTEX: A topological element corresponding to a point. It has a zero dimension. + +Shapes are usually shared. **copy **will create a new shape which shares its representation with the original. Nonetheless, two shapes sharing the same topology can be moved independently (see the section on **transformation**). + +The following topics are covered in the eight sections of this chapter: + + * Basic shape commands to handle the structure of shapes and control the display. + * Curve and surface topology, or methods to create topology from geometry and vice versa. + * Primitive construction commands: box, cylinder, wedge etc. + * Sweeping of shapes. + * Transformations of shapes: translation, copy, etc. + * Topological operations, or booleans. + * Drafting and blending. + * Analysis of shapes. + + + +@subsection occt_2142243456_186943666971 Basic topology + +The set of basic commands allows simple operations on shapes, or step-by-step construction of objects. These commands are useful for analysis of shape structure and include: + + * **isos **and **discretisation **to control display of shape faces by isoparametric curves . + * **orientation**, **complement **and **invert **to modify topological attributes such as orientation. + * **explode**, **exwire **and **nbshapes **to analyze the structure of a shape. + * **emptycopy**, **add**, **compound **to create shapes by stepwise construction. + +In Draw, shapes are displayed using isoparametric curves. There is color coding for the edges: + + * a red edge is an isolated edge, which belongs to no faces. + * a green edge is a free boundary edge, which belongs to one face, + * a yellow edge is a shared edge, which belongs to at least two faces. + + +@subsubsection occt_2142243456_1869436669711 isos, discretisation + +Syntax:                  isos [name ...][nbisos] +discretisation nbpoints +**isos **determines or changes the number of isoparametric curves on shapes. + +The same number is used for the u and v directions. With no arguments, **isos **prints the current default value. To determine, the number of isos for a shape, give it name as the first argument. + +**discretisation **changes the default number of points used to display the curves. The default value is 30. +**Example** + +# Display only the edges (the wireframe) +isos 0 + +

NOTE

+Don’t confuse *isos* and *discretisation* with the geometric +*commands *nbisos* and *discr*.* + + +@subsubsection occt_2142243456_1869436669712 orientation, complement, invert, normals, range + +Syntax:      orientation name [name ...] F/R/E/I +complement name [name ...] +invert name +normals s (length = 10), disp normals +range name value value + +**orientation **assigns the orientation of shapes - simple and complex - to one of the following four values: FORWARD, REVERSED, INTERNAL, EXTERNAL. + +**complement **changes the current orientation of shapes to its complement, FORWARD - REVERSED, INTERNAL - EXTERNAL. + +**invert **creates a new shape which is a copy of the original with the orientation all subshapes reversed. For example, it may be useful to reverse the normals of a solid. + +**normals **returns the assignment of colors to orientation values. + +**range **defines the length of a selected edge by defining the values of a starting point and an end point. +**Example** + +# invert normals of a box +box b 10 20 30 +normals b 5 +invert b +normals b 5 + +# to assign a value to an edge +box b1 10 20 30 +# to define the box as edges +explode b1 e +b_1 b_2 b_3 b_4 b_5 b_6 b_7 b_8 b_9 b_10 b_11 b_12 +# to define as an edge +makedge e 1 +# to define the length of the edge as starting from 0 +and finishing at 1 +range e 0 1 + + +@subsubsection occt_2142243456_1869436669713 explode, exwire, nbshapes + +Syntax:      explode name [C/So/Sh/F/W/E/V] +exwire name +nbshapes name + +**explode **extracts subshapes from an entity. The subshapes will be named *name_1*, *name_2*, ... Note that they are not copied but shared with the original. + +With name only, **explode **will extract the first sublevel of shapes: the shells of a solid or the edges of a wire, for example. With one argument, **explode **will extract all subshapes of that type: *C *for compounds, *So *for solids, *Sh *for shells, *F *for faces, *W *for wires, *E *for edges, *V *for vertices. + +**exwire **is a special case of **explode **for wires, which extracts the edges in an ordered way,if possible. Each edge, for example, is connected to the following one by a vertex. + +**nbshapes **counts the number of shapes of each type in an entity. +**Example** + +# on a box +box b 10 20 30 + +# whatis returns the type and various information +whatis b += b is a shape SOLID FORWARD Free Modified + +# make one shell +explode b +whatis b_1 += b_1 is a shape SHELL FORWARD Modified Orientable +Closed + +# extract the edges b_1, ... , b_12 +explode b e +==b_1 ... b_12 + +# count subshapes +nbshapes b +== +Number of shapes in b +VERTEX : 8 +EDGE : 12 +WIRE : 6 +FACE : 6 +SHELL : 1 +SOLID : 1 +COMPSOLID : 0 +COMPOUND : 0 +SHAPE : 34 + + +@subsubsection occt_2142243456_1869436669714 emptycopy, add, compound + +Syntax:                  emptycopy [newname] name +add name toname +compound [name ...] compoundname + +**emptycopy **returns an empty shape with the same orientation, location, and geometry as the target shape, but with no sub-shapes. If the newname argument is not given, the new shape is stored with the same name. This command is used to modify a frozen shape. A frozen shape is a shape used by another one. To modify it, you must emptycopy it. Its subshape may be reinserted with the **add **command. + +**add **inserts shape C into shape S. Verify that C and S reference compatible types of objects: + + * Any *Shape *can be added to a *Compound*. + * Only a *Solid *can be added to a *CompSolid*. + * Only a *Shell*, an *Edge *or a *Vertex *can be added into a *Solid*. + * Only a *Face *can be added to a *Shell*. + * Only a *Wire *and *Vertex *can be added in a *Solid*. + * Only an *Edge *can be added to a *Wire*. + * Only a *Vertex *can be added to an *Edge*. + * Nothing can be added to a *Vertex*. + +Care should be taken using **emptycopy **and **add**. + +On the other hand, **compound **is a safe way to achieve a similar result. It creates a compound from shapes. If no shapes are given, the compound is empty. +**Example** + +# a compound with three boxes +box b1 0 0 0 1 1 1 +box b2 3 0 0 1 1 1 +box b3 6 0 0 1 1 1 +compound b1 b2 b3 c + + +@subsubsection occt_2142243456_1869436669715 checkshape + +Syntax:                  checkshape [-top] shape [result] [-short] + +Where: +*-top* – check only topological validity of a shape. +*shape *– the only required parameter which represents the name of the shape to check. +*result* – optional parameter which is the prefix of the output shape names. +*-short* – short description of check. + + +**checkshape **examines the selected object for topological and geometric coherence. The object should be a three dimensional shape. +**Example** + +# checkshape returns a comment valid or invalid +box b1 0 0 0 1 1 1 +checkshape b1 +# returns the comment +this shape seems to be valid + +

NOTE

+*This test is performed using the tolerance set in the algorithm.* + + + + + +@subsection occt_2142243456_186943666972 Curve and surface topology + +This group of commands is used to create topology from shapes and to extract shapes from geometry. + + * To create vertices, use the **vertex **command. + * To create edges use, the **edge**, **mkedge **commands. + * To create wires, use the **wire**, **polyline**, **polyvertex **commands. + * To create faces, use the **mkplane**, **mkface **commands. + * To extract the geometry from edges or faces, use the **mkcurve **and **mkface **commands. + * To extract the 2d curves from edges or faces, use the **pcurve **command. + + +@subsubsection occt_2142243456_1869436669721 vertex + +Syntax:      vertex name [x y z / p edge] + +Creates a vertex at either a 3d location x,y,z or the point at parameter p on an edge. +**Example** + +vertex v1 10 20 30 + + +@subsubsection occt_2142243456_1869436669722 edge, mkedge, uisoedge, visoedge + +Syntax:      edge name vertex1 vertex2 +mkedge edge curve [surface] [pfirst plast] [vfirst [pfirst] vlast [plast]] +uisoedge edge face u v1 v2 +visoedge edge face v u1 u2 + +**edge **creates a straight line edge between two vertices. + +**mkedge **generates edges from curves[4].Two parameters can be given for the vertices: the first and last parameters of the curve are given by default. Vertices can also be given with their parameters, this option allows you to block the creation of new vertices. If the parameters of the vertices are not given, they are computed by projection on the curve. Instead of a 3d curve, a 2d curve and a surface can be given. +**Example** + +# straight line edge +vertex v1 10 0 0 +vertex v2 10 10 0 +edge e1 v1 v2 + +# make a circular edge +circle c 0 0 0 5 +mkedge e2 c 0 pi/2 + +# A similar result may be achieved by trimming the curve +# The trimming is removed by mkedge +trim c c 0 pi/2 +mkedge e2 c + +**visoedge **and **uisoedge **are commands that generate a uiso parameter edge +or a viso parameter edge. + +**Example** + +# to create an edge between v1 and v2 at point u +# to create the example plane +plane p +trim p p 0 1 0 1 +convert p p +incudeg p 3 +incvdeg p 3 +movep p 2 2 0 0 1 +movep p 3 3 0 0 0.5 +mkface p p +# to create the edge in the plane at the u axis point +0.5, and between the v axis points v=0.2 and v =0.8 +uisoedge e p 0.5 0.20 0.8 + + +@subsubsection occt_2142243456_1869436669723 wire, polyline, polyvertex + +Syntax:      wire wirename e1/w1 [e2/w2 ...] +polyline name x1 y1 z1 x2 y2 z2 ... +polyvertex name v1 v2 ... + +**wire **creates a wire from edges or wires. The order of the elements should ensure that the wire is connected, and vertex locations will be compared to detect connection. If the vertices are different, new edges will be created to ensure topological connectivity. The original edge may be copied in the new one. + +**polyline **creates a polygonal wire from point coordinates. To make a closed wire, you should give the first point again at the end of the argument list. + +**polyvertex **creates a polygonal wire from vertices. +**Example** + +# create two polygonal wires +# glue them and define as a single wire +polyline w1 0 0 0 10 0 0 10 10 0 +polyline w2 10 10 0 0 10 0 0 0 0 +wire w w1 w2 + + +@subsubsection occt_2142243456_1869436669724 profile + +Syntax       profile name [code values] [code values] ... + +**Code**                                 **Values **            **Action** +O                                      X Y Z                Sets the origin of the plane +P                           DX DY DZ UX UY UZ    Sets the normal and X of the plane +F                                       X Y                   Sets the first point +X                                       DX                   Translates a point along X +Y                                      DY                   Translates a point along Y +L                                       DL                    Translates a point along direction +XX                                    X                      Sets point X coordinate +YY                                    Y                      Sets point Y coordinate +T                                       DX DY              Translates a point +TT                                     X Y                   Sets a point +R                                       Angle                Rotates direction +RR                                    Angle                Sets direction +D                                      DX DY              Sets direction +IX                                      X                      Intersects with vertical +IY                                      Y                      Intersects with horizontal +C                                 Radius Angle          Arc of circle tangent to direction + +
Suffix
+No suffix               Makes a closed face +W                          Make a closed wire +WW                       Make an open wire + + +**profile **builds a profile in a plane using a moving point and direction. By default, the profile is closed and a face is created. The original point is 0 0, and direction is 1 0 situated in the XY plane. + +Codes and values are used to define the next point or change the direction. When the profile changes from a straight line to a curve, a tangent is created. All angles are in degrees and can be negative. + +The point [code values] can be repeated any number of times and in any order to create the profile contour. + +The profile shape definition is the suffix; no suffix produces a face, **w **is a closed wire, **ww **is an open wire. + +Code letters are not case-sensitive. +**Example** + +# to create a trianglular plane using a vertex at the +origin, in the xy plane +profile p O 0 0 0 X 1 Y 0 x 1 y 1 +**Example** + +# to create a contour using the different code +possibilities + +# two vertices in the xy plane +profile p F 1 0 x 2 y 1 ww + +# to view from a point normal to the plane +top + +# add a circular element of 45 degrees +profile p F 1 0 x 2 y 1 c 1 45 ww + +# add a tangential segment with a length value 1 +profile p F 1 0 x 2 y 1 c 1 45 l 1 ww + +# add a vertex with xy values of 1.5 and 1.5 +profile p F 1 0 x 2 y 1 c 1 45 l 1 tt 1.5 1.5 ww + +# add a vertex with the x value 0.2, y value is constant +profile p F 1 0 x 2 y 1 c 1 45 l 1 tt 1.5 1.5 xx 0.2 ww + +# add a vertex with the y value 2 x value is constant +profile p F 1 0 x 2 y 1 c 1 45 l 1 tt 1.5 1.5 yy 2 ww + +# add a circular element with a radius value of 1 and a circular value of 290 degrees +profile p F 1 0 x 2 y 1 c 1 45 l 1 tt 1.5 1.5 xx 0.2 yy 2 c 1 290 + +# wire continues at a tangent to the intersection x = 0 +profile p F 1 0 x 2 y 1 c 1 45 l 1 tt 1.5 1.5 xx 0.2 yy 2 c 1 290 ix 0 ww + +# continue the wire at an angle of 90 degrees until it intersects the y axis at y= -o.3 +profile p F 1 0 x 2 y 1 c 1 45 l 1 tt 1.5 1.5 xx 0.2 yy 2 c 1 290 ix 0 r 90 ix -0.3 ww + +#close the wire +profile p F 1 0 x 2 y 1 c 1 45 l 1 tt 1.5 1.5 xx 0.2 yy 2 c 1 290 ix 0 r 90 ix -0.3 w + +# to create the plane with the same contour +profile p F 1 0 x 2 y 1 c 1 45 l 1 tt 1.5 1.5 xx 0.2 yy 2 c 1 290 ix 0 r 90 ix -0.3 + + +@subsubsection occt_2142243456_1869436669725  bsplineprof + +Syntax:      bsplineprof name [S face] [W WW] + +for an edge : digitizes ... mouse button 2 +to end profile : mouse button 3 + +Build a profile in the XY plane from digitizes +By default the profile is closed and a face is built. + +W              Make a closed wire +WW           Make an open wires + +**bsplineprof **creates a 2d profile from bspline curves using the mouse as the input. MB1 creates the points, MB2 finishes the current curve and starts the next curve, MB3 closes the profile. + +The profile shape definition is the suffix; no suffix produces a face, **w **is a closed wire, **ww **is an open wire. +**Example** + +#to view the xy plane +top +#to create a 2d curve with the mouse +bsplineprof res +# click mb1 to start the curve +# click mb1 to create the second vertex +# click mb1 to create a curve +== +#click mb2 to finish the curve and start a new curve +== +# click mb1 to create the second curve +# click mb3 to create the face + + +@subsubsection occt_2142243456_1869436669726 mkoffset + +Syntax:      mkoffset result face/compound of wires nboffset stepoffset + +**mkoffset **creates a parallel wire in the same plane using a face or an existing continuous set of wires as a reference. The number of occurences is not limited. + +The offset distance defines the spacing and the positionning of the occurences. +**Example** + +#Create a box and select a face +box b 1 2 3 +explode b f +#Create three exterior parallel contours with an offset +value of 2 +mkoffset r b_1 3 2 +Create one interior parallel contour with an offset +value of +0.4 +mkoffset r b_1 1 -0.4 + +NOTE +*The mkoffset command must be used with prudence, angular contours produce offset contours with fillets. Interior parallel contours can produce more than one wire, normally these are refused. In the following example, any increase in the offset value is refused* +**Example** + +# to create the example contour +profile p F 0 0 x 2 y 4 tt 1 1 tt 0 4 w +# to create an incoherent interior offset +mkoffset r p 1 -0.50 +==p is not a FACE but a WIRE +BRepFill_TrimEdgeTool: incoherent intersection +# to create two incoherent wires +mkoffset r p 1 -0.50 + + +@subsubsection occt_2142243456_1869436669727 mkplane, mkface + +Syntax:      mkplane name wire +mkface name surface [ufirst ulast vfirst vlast] + +**mkplane **generates a face from a planar wire. The planar surface will be constructed with an orientation which keeps the face inside the wire. + +**mkface **generates a face from a surface. Parameter values can be given to trim a rectangular area. The default boundaries are those of the surface. +**Example** + +# make a polygonal face +polyline f 0 0 0 20 0 0 20 10 0 10 10 0 10 20 0 0 20 0 0 0 0 +mkplane f f + +# make a cylindrical face +cylinder g 10 +trim g g -pi/3 pi/2 0 15 +mkface g g + + +@subsubsection occt_2142243456_1869436669728 mkcurve, mksurface + +Syntax:      mkcurve curve edge +mksurface name face + +**mkcurve **creates a 3d curve from an edge. The curve will be trimmed to the edge boundaries. + +**mksurface **creates a surface from a face. The surface will not be trimmed. +**Example** + +# make a line +vertex v1 0 0 0 +vertex v2 10 0 0 +edge e v1 v2 + + +@subsubsection occt_2142243456_1869436669729 pcurve + +Syntax:      pcurve [name edgename] facename + +**pcurve **extracts the 2d curve of an edge on a face. If only the face is specified, the command extracts all the curves and colors them according to their orientation. This is useful in checking to see if the edges in a face are correctly oriented, i.e. they turn counterclockwise. To make curves visible, use a fitted 2d view. +**Example** + +# view the pcurves of a face +plane p +trim p p -1 1 -1 1 +mkface p p +av2d; # a 2d view +pcurve p +2dfit + + +@subsubsection occt_2142243456_18694366697210 chfid + +Syntax:      chfi2d result face [edge1 edge2 (F radius/CDD d1 d2/CDA d ang) .... + +chfi2d creates chamfers and fillets on 2D objects. Select t:wo adjacent edges and: + + * a radius value + * two respective distance values + * a distance value and an angle + +The radius value produces a fillet between the two faces. + +The distance is the length value from the edge between the two selected faces in a normal direction. + +**Example** + +# to create a 2d fillet +top +profile p x 2 y 2 x -2 +chfi2d cfr p . . F 0.3 +==Pick an object +#select an edge +==Pick an object +#select an edge +**Example** + +# to create a 2d chamfer using two distances +profile p x 2 y 2 x -2 +chfi2d cfr p . . CDD 0.3 0.6 +==Pick an object +#select an edge +==Pick an object +#select an edge +**Example** + +# to create a 2d chamfer using a defined distance and +angle +top +profile p x 2 y 2 x -2 +chfi2d cfr p . . CDA 0.3 75 +==Pick an object +#select an edge +==Pick an object +#select an edge + + +@subsubsection occt_2142243456_18694366697211 nproject + +Syntax:      nproject pj e1 e2 e3 ... surf -g -d [dmax] [Tol +[continuity [maxdeg [maxseg]]] + +**nproject **creates a shape projection which is normal to the target surface. +
Example
+ +# create a curved surface +line l 0 0 0 1 0 0 +trim l l 0 2 +convert l l + +incdeg l 3 +cmovep l 1 0 0.5 0 +cmovep l 3 0 0.5 0 +copy l ll +translate ll 2 -0.5 0 +mkedge e1 l +mkedge e2 ll +wire w e1 e2 +prism p w 0 0 3 +donl p +#display in four views +mu4 +fit +# create the example shape +circle c 1.8 -0.5 1 0 1 0 1 0 0 0.4 +mkedge e c +donly p e +# create the normal projection of the shape(circle) +nproject r e p + + + +@subsection occt_2142243456_186943666973 Primitives + +Primitive commands make it possible to create simple shapes. They include: + + * **box **and **wedge **commands. + * **pcylinder**, **pcone**, **psphere**, **ptorus **commands. + * **halfspace **command + + +@subsubsection occt_2142243456_1869436669731 box, wedge + +Syntax:      box name [x y z] dx dy dz +wedge name dx dy dz ltx / xmin zmin xmax xmax + +**box **creates a box parallel to the axes with dimensions dx,dy,dz. x,y,z is the corner of the box. It is the default origin. + +**wedge **creates a box with five faces called a wedge. One face is in the OXZ plane, and has dimensions dx,dz while the other face is in the plane y = dy. This face either has dimensions ltx, dz or is bounded by xmin,zmin,xmax,zmax. + +The other faces are defined between these faces. The face in the y=yd plane may be degenerated into a line if ltx = 0, or a point if xmin = xmax and ymin = ymax. In these cases, the line and the point both have 5 faces each. To position the wedge use the **ttranslate **and **trotate **commands. +**Example** + +# a box at the origin +box b1 10 20 30 + +# another box +box b2 30 30 40 10 20 30 + +# a wedge +wedge w1 10 20 30 5 + +# a wedge with a sharp edge (5 faces) +wedge w2 10 20 30 0 + +# a pyramid +wedge w3 20 20 20 10 10 10 10 + + +@subsubsection occt_2142243456_1869436669732 pcylinder, pcone, psphere, ptorus + +Syntax:      pcylinder name [plane] radius height [angle] +pcone name [plane] radius1 radius2 height [angle] +pcone name [plane] radius1 radius2 height [angle] +psphere name [plane] radius1 [angle1 angle2] [angle] +ptorus name [plane] radius1 radius2 [angle1 angle2] [angle] + +All these commands create solid blocks in the default coordinate system, using the Z axis as the axis of revolution and the X axis as the origin of the angles. To use another system, translate and rotate the resulting solid or use a plane as first argument to specify a coordinate system. All primitives have an optional last argument which is an angle expreesed in degrees and located on the Z axis, starting from the X axis. The default angle is 360. + +**pcylinder **creates a cylindrical block with the given radius and height. + +**pcone **creates a truncated cone of the given height with radius1 in the plane z = 0 and radius2 in the plane z = height. Neither radius can be negative, but one of them can be null. + +**psphere **creates a solid sphere centered on the origin. If two angles, *angle1 *and *angle2, *are given, the solid will be limited by two planes at latitude *angle1 *and *angle2*. The angles must be increasing and in the range -90,90. + +**ptorus **creates a solid torus with the given radii, centered on the origin, which is a point along the z axis. If two angles increasing in degree in the range 0 – 360 are given, the solid will be bounded by two planar surfaces at those positions on the circle. +**Example** + +# a can shape +pcylinder cy 5 10 + +# a quarter of a truncated cone +pcone co 15 10 10 90 + +# three-quarters of sphere +psphere sp 10 270 + +# half torus +ptorus to 20 5 0 90 +@subsubsection occt_2142243456_1869436669733 halfspace + +Syntax:      halfspace result face/shell x y z + +**halfspace **creates an infinite solid volume based on a face in a defined direction. This volume can be used to perform the boolean operation of cutting a solid by a face or plane. +**Example** + +box b 0 0 0 1 2 3 +explode b f +==b_1 b_2 b_3 b_4 b_5 b_6 +halfspace hr b_3 0.5 0.5 0.5 + + + +@subsection occt_2142243456_186943666974 Sweeping + +Sweeping creates shapes by sweeping out a shape along a defined path: + + * **prism **sweeps along a direction. + * **revol **sweeps around an axis. + * **pipe **sweeps along a wire. + * **mksweep **and **buildsweep **are commands to create sweeps by defining the arguments and algorithms. + * **thrusections **creates a sweep from wire in different planes. + + +@subsubsection occt_2142243456_1869436669741 prism + +Syntax:      prism result base dx dy dz [Copy | Inf | SemiInf] + +**prism **creates a new shape by sweeping a shape in a direction. Any shape can be swept: a vertex gives an edge; an edge gives a face; and a face gives a solid. + +The shape is swept along the vector dx dy dz. The original shape will be shared in the result unless *Copy *is specified. If *Inf *is specified the prism is infinite in both directions. If *SemiInf *is specified the prism is infinite in the dx,dy,dz direction, and the length of the vector has no importance. +**Example** + +# sweep a planar face to make a solid +polyline f 0 0 0 10 0 0 10 5 0 5 5 0 5 15 0 0 15 0 0 0 0 +mkplane f f + + +@subsubsection occt_2142243456_1869436669742 revol + +Syntax:      revol result base x y z dx dy dz angle [Copy] + +**revol **creates a new shape by sweeping a base shape through an angle along the axis x,y,z dx,dy,dz. As with the prism command, the shape can be of any type and is not shared if *Copy *is specified. +**Example** + +# shell by wire rotation +polyline w 0 0 0 10 0 0 10 5 0 5 5 0 5 15 0 0 15 0 +revol s w 20 0 0 0 1 0 90 + + + +@subsubsection occt_2142243456_1869436669743 pipe + +Syntax:      pipe name wire_spine Profile + +**pipe **creates a new shape by sweeping a shape known as the profile along a wire known as the spine. +**Example** + +# sweep a circle along a bezier curve to make a solid +pipe + +beziercurve spine 4 0 0 0 10 0 0 10 10 0 20 10 0 +mkedge spine spine +wire spine spine +circle profile 0 0 0 1 0 0 2 +mkedge profile profile +wire profile profile +mkplane profile profile +pipe p spine profile + + +@subsubsection occt_2142243456_1869436669744 mksweep, deletesweep, buildsweep, simulsweep + +Syntax:      mksweep wire +addsweep wire[vertex][-M][-C] [auxiilaryshapedeletesweep wire +setsweep options [arg1 [arg2 [...]]] + +options are : + +-FR : Tangent and Normal are defined by a Frenet trihedron +-CF : Tangent is given by Frenet, +the Normal is computed to minimize the torsion +-DX Surf : Tangent and Normal are given by Darboux trihedron, +Surf must be a shell or a face +-CN dx dy dz : BiNormal is given by dx dy dz +-FX Tx Ty TZ [Nx Ny Nz] : Tangent and Normal are fixed +-G guide 0|1(AC +simulsweep r [n] [option] +buildsweep [r] [option] [Tol] + +These commands are used to create a shape from wires. One wire is designated as the contour that defines the direction; it is called the spine. At least one other wire is used to define the the sweep profile. + +**mksweep **initializes the sweep creation and defines the wire to be used as the spine. + +**addsweep **defines the wire to be used as the profile. + +**deletesweep **cancels the choice of profile wire, without leaving the mksweep mode. You can re-select a profile wire. + +**setsweep **commands the algorithms used for the construction of the sweep. + +**simulsweep **can be used to create a preview of the shape. [n] is the number of sections that are used to simulate the sweep. + +**buildsweep **creates the sweep using the arguments defined by all the commands. +**Example** + +#create a sweep based on a semi-circular wire using the +Frenet algorithm +#create a circular figure +circle c2 0 0 0 1 0 0 10 +trim c2 c2 -pi/2 pi/2 +mkedge e2 c2 +donly e2 +wire w e2 +whatis w +mksweep w +# to display all the options for a sweep +setsweep +#to create a sweep using the Frenet algorithm where the +#normal is computed to minimise the torsion +setsweep -CF +addsweep w -R +# to simulate the sweep with a visual approximation +simulsweep w 3 + + +@subsubsection occt_2142243456_1869436669745 thrusections + +Syntax:  thrusections [-N] result issolid isruled wire1 wire2 [..wire..] + +**thrusections **creates a shape using wires that are positioned in different planes. Each wire selected must have the same number of edges and vertices. +A bezier curve is generated between the vertices of each wire. The option [-N] means no check is made on wires for direction. +**Example** + +#create three wires in three planes +polyline w1 0 0 0 5 0 0 5 5 0 2 3 0 +polyline w2 0 1 3 4 1 3 4 4 3 1 3 3 +polyline w3 0 0 5 5 0 5 5 5 5 2 3 5 +# create the shape +thrusections th issolid isruled w1 w2 w3 +==thrusections th issolid isruled w1 w2 w3 +Tolerances obtenues   -- 3d : 0 +-- 2d : 0 + + + + + +@subsection occt_2142243456_186943666975 Topological transformation + +Transformations are applications of matrices. When the transformation is nondeforming, such as translation or rotation, the object is not copied. The topology localcoordinate system feature is used. The copy can be enforced with the **tcopy **command. + + * **tcopy **makes a copy of the structure of a shape. + * **ttranslate**, **trotate**, **tmove**, **reset **move a shape. + * **tmirror**, **tscale **always modify the shape. + + +@subsubsection occt_2142243456_1869436669751  tcopy + +Syntax: tcopy name toname [name toname ...] + +Copies the structure of one shape, including the geometry, into another, newer shape. +**Example** + +# create an edge from a curve and copy it +beziercurve c 3 0 0 0 10 0 0 20 10 0 +mkedge e1 c +ttranslate e1 0 5 0 +tcopy e1 e2 +ttranslate e2 0 5 0 +# now modify the curve, only e1 and e2 will be modified + +@subsubsection occt_2142243456_1869436669752  tmove, treset + +Syntax:      tmove name [name ...] shape +reset name [name ...] + +**tmove **and **reset **modify the location, or the local coordinate system of a shape. + +**tmove **applies the location of a given shape to other shapes. **reset **restores one or several shapes it to its or their original coordinate system(s). +**Example** + +# create two boxes +box b1 10 10 10 +box b2 20 0 0 10 10 10 +# translate the first box +ttranslate b1 0 10 0 +# and apply the same location to b2 +tmove b2 b1 +# return to original positions +reset b1 b2 + + +@subsubsection occt_2142243456_1869436669753  ttranslate, trotate + +Syntax:      ttranslate [name ...] dx dy dz +trotate [name ...] x y z dx dy dz angle + +**ttranslate **translates a set of shapes by a given vector, and **trotate **rotates them by a given angle around an axis. Both commands only modify the location of the shape. +When creating multiple shapes, the same location is used for all the shapes. (See toto.tcl example below. Note that the code of this file can also be directly executed in interactive mode.) + +Locations are very economic in the data structure because multiple occurences of an object share the topological description. +**Example** +# make rotated copies of a sphere in between two cylinders +# create a file source toto.tcl +# toto.tcl code: +for {set i 0} {$i 360} {incr i 20} { +copy s s$i +trotate s$i 0 0 0 0 0 1 $i +} + +# create two cylinders +pcylinder c1 30 5 +copy c1 c2 +ttranslate c2 0 0 20 + +#create a sphere +psphere s 3 +ttranslate s 25 0 12.5 + +# call the source file for multiple copies +source toto.tcl + + +@subsubsection occt_2142243456_1869436669754  tmirror, tscale + +Syntax:      tmirror name x y z dx dy dz +tscale name x y z scale + +**tmirror **makes a mirror copy of a shape about a plane x,y,z dx,dy,dz. **Tscale **applies a central homotopic mapping to a shape. +**Example** + +# mirror a portion of cylinder about the YZ plane +pcylinder c1 10 10 270 +copy c1 c2 +tmirror c2 15 0 0 1 0 0 +# and scale it +tscale c1 0 0 0 0.5 + + + +@subsection occt_2142243456_186943666976 Old Topological operations + + + + * **fuse**, **cut**, **common **are boolean operations. + * **section**, **psection **compute sections. + * **sewing **joins two or more shapes. + + +@subsubsection occt_2142243456_1869436669761 fuse, cut, common + +Syntax:      fuse name shape1 shape2 +cut name shape1 shape2 +common name shape1 shape2 + +**fuse **creates a new shape by a boolean operation on two existing shapes. The new shape contains both originals intact. + +**cut **creates a new shape which contains all parts of the second shape but only the first shape without the intersection of the two shapes. + +**common **creates a new shape which contains only what is in common between the two original shapes in their intersection. +**Example** + +# all four boolean operations on a box and a cylinder + +box b 0 -10 5 20 20 10 +pcylinder c 5 20 + +fuse s1 b c +ttranslate s1 40 0 0 + +cut s2 b c +ttranslate s2 -40 0 0 + +cut s3 c b +ttranslate s3 0 40 0 + +common s4 b c +ttranslate s4 0 -40 0 + + + +@subsubsection occt_2142243456_1869436669762 section, psection + +Syntax:      section result shape1 shape2 +psection name shape plane + +**section **creates a compound object consisting of the edges for the intersection curves on the faces of two shapes. + +**psection **creates a planar section consisting of the edges for the intersection curves on the faces of a shape and a plane. +**Example** + +# section line between a cylinder and a box +pcylinder c 10 20 +box b 0 0 5 15 15 15 +trotate b 0 0 0 1 1 1 20 +section s b c + +# planar section of a cone +pcone c 10 30 30 +plane p 0 0 15 1 1 2 +psection s c p + + +@subsubsection occt_2142243456_1869436669763 sewing + +Syntax:      sewing result [tolerance] shape1 shape2 ... + +**Sewing **joins shapes by connecting their adjacent or near adjacent edges. Adjacency can be redefined by modifying the tolerance value. + +**Example** + +# create two adjacent boxes +box b 0 0 0 1 2 3 +box b2 0 2 0 1 2 3 +sewing sr b b2 +whatis sr +sr is a shape COMPOUND FORWARD Free Modified + + +@subsection occt_2142243456_186943666977 New Topological operations + + +The new algorithm of Boolean operations avoids a large number of weak points and limitations presented in the old boolean operation algorithm. + + +@subsubsection occt_2142243456_1869436669771 bop, bopfuse, bopcut, boptuc, bopcommon, + +**bop** defines **shape1** and **shape2** subject to ulterior Boolean operations + +**bopfuse **creates a new shape by a boolean operation on two existing shapes. The new shape contains both originals intact. + +**bopcut **creates a new shape which contains all parts of the second shape but only the first shape without the intersection of the two shapes. + +**boptuc **is a reverced** bopcut**. + +**bopcommon **creates a new shape which contains only whatever is in common between the two original shapes in their intersection. + + +Syntax:      bop shape1 shape2 +bopcommon result +bopfuse result +bopcut result +boptuc result + +These commands have short variants: + +bcommon result shape1 shape2 +bfuse result shape1 shape2 +bcut result shape1 shape2 + + +**bop** fills data structure (DS) of boolean operation for **shape1** and **shape2**. +**bopcommon, bopfuse, bopcut, boptuc **commands used after **bop** command. After one **bop** command it is possible to call several commands from the list above. For example: **bop** S1 S2; **bopfuse** R. + +**Example** + +# all four boolean operations on a box and a cylinder + +box b 0 -10 5 20 20 10 +pcylinder c 5 20 + +# fills data structure +bop b c + +bopfuse s1 +ttranslate s1 40 0 0 + +bopcut s2 +ttranslate s2 -40 0 0 + +boptuc s3 +ttranslate s3 0 40 0 + +bopcommon s4 +ttranslate s4 0 -40 0 + + +Short variants of commands: + +bfuse s11 b c +ttranslate s11 40 0 100 + +bcut s12 b c +ttranslate s12 -40 0 100 + +bcommon s14 b c +ttranslate s14 0 -40 100 + +@subsubsection occt_2142243456_1869436669772 bopsection + +**bopsection **creates a compound object consisting of the edges for the intersection curves on the faces of two shapes. + + +Syntax:      bop shape1 shape2 +bopsection result + + + +Short variant: + +bsection result shape1 shape2 [-2d/-2d1/-2s2] [-a] + + +**bop** fills data structure (DS) of boolean operation for **shape1** and **shape2**. +**bopsection** command used after **bop** command. + +**-2d**  -  PCurves are computed on both parts. +**-2d1** - PCurves are computed on first part. +**-2d2 **- PCurves are computed on second part. +**-a**  -    geometries built are approximated. + + +**Example** + +# section line between a cylinder and a box +pcylinder c 10 20 +box b 0 0 5 15 15 15 +trotate b 0 0 0 1 1 1 20 +bop b c +bopsection s +# Short variant: +bsection s2 b c + + +@subsubsection occt_2142243456_1869436669773 bopcheck, bopargshape + +Syntax:      bopcheck shape +bopargcheck shape1 [[shape2] [-F/O/C/T/S/U] [/R|F|T|V|E|I|P]] [#BF] + + +**bopcheck** checks a shape for self-interference. + +**bopargcheck** checks the validity of argument(s) for boolean operations. + +-Boolean Operation + **F** (fuse) + **O** (common) + **C** (cut) + **T** (cut21) + **S** (section) + **U** (unknown) +By default a section is made. + + /Test Options + **R** (disable small edges (shrank range) test) + **F** (disable faces verification test) + **T** (disable tangent faces searching test) + **V** (disable test possibility to merge vertices) + **E** (disable test possibility to merge edges) + **I** (disable self-interference test) + **P** (disable shape type test) +By default all options are enabled. + + #Additional Test Options + **B** (stop test on first faulty found); default OFF + **F** (full output for faulty shapes); +**By **default the output is made in a short format. + + NOTE: Boolean Operation and Test Options are used only for a couple of argument shapes, except for **I** and **P** options that are always used to test a couple of shapes as well as a single shape. + +**Example** + +# checks a shape on self-interference +box b1 0 0 0 1 1 1 +bopcheck b1 + +# checks the validity of argument for boolean cut operations +box b2 0 0 0 10 10 10 +bopargcheck b1 b2 -C + + +@subsection occt_2142243456_186943666978 Drafting and blending + +Drafting is creation of a new shape by tilting faces through an angle. + +Blending is the creation of a new shape by rounding edges to create a fillet. + + * Use the **depouille **command for drafting. + * Use the **chamf **command to add a chamfer to an edge + * Use the **blend **command for simple blending. + * Use **fubl **for a fusion + blending operation. + * Use **buildevol**, **mkevol**, **updatevol **to realize varying radius blending. + + +@subsubsection occt_2142243456_1869436669781 depouille + +Syntax: dep result shape dirx diry dirz face angle x y x dx dy dz [face angle...] + +**depouille **creates a new shape by drafting one or more faces of a shape. + +Identify the shape(s) to be drafted, the drafting direction, and the face(s) with an angle and an axis of rotation for each face. You can use dot syntax to identify the faces. +**Example** +# draft a face of a box +box b 10 10 10 +explode b f +== b_1 b_2 b_3 b_4 b_5 b_6 + +dep a b 0 0 1 b_2 10 0 10 0 1 0 5 + + +@subsubsection occt_2142243456_1869436669782 chamf + +Syntax:      chamf newname shape edge face S dist +chamf newname shape edge face dist1 dist2 +chamf newname shape edge face A dist angle + +**chamf **creates a chamfer along the edge between faces using: + + * a equal distances from the edge + * the edge, a face and distance, a second distance + * the edge, a reference face and an angle + +Use the dot syntax to select the faces and edges. +
Example
+ +# to create a chamfer based on equal distances from the +edge (45 degree angle) +# create a box +box b 1 2 3 +chamf ch b . . S 0.5 +==Pick an object +# select an edge +==Pick an object +# select an adjacent face +**Example** + +# to create a chamfer based on different distances from +the selected edge +box b 1 2 3 +chamf ch b . . 0.3 0.4 +==Pick an object +# select an edge +==Pick an object +# select an adjacent face +**Example** + +# to create a chamfer based on a distance from the edge +and an angle +box b 1 2 3 +chamf ch b . . A 0.4 30 +==Pick an object +# select an edge +==Pick an object +# select an adjacent face + + +@subsubsection occt_2142243456_1869436669783 blend + +Syntax:      blend result object rad1 ed1 rad2 ed2 ... [R/Q/P] + +**blend **creates a new shape by filleting the edges of an existing shape. The edge must be inside the shape. You may use the dot syntax. Note that the blend is propagated to the edges of tangential planar, cylindrical or conical faces. +**Example** + +# blend a box, click on an edge +box b 20 20 20 +blend b b 2 . +==tolerance ang : 0.01 +==tolerance 3d : 0.0001 +==tolerance 2d : 1e-05 +==fleche : 0.001 +==tolblend 0.01 0.0001 1e-05 0.001 +==Pick an object +# click on the edge you want ot fillet + +==COMPUTE: temps total 0.1s dont : +==- Init + ExtentAnalyse 0s +==- PerformSetOfSurf 0.02s +==- PerformFilletOnVertex 0.02s +==- FilDS 0s +==- Reconstruction 0.06s +==- SetRegul 0s + + +@subsubsection occt_2142243456_1869436669784 fubl + +Syntax:      fubl name shape1 shape2 radius +**     ** +**fubl **creates a boolean fusion of two shapes and then blends (fillets) the intersection edges using the given radius. +**Example** + +# fuse-blend two boxes +box b1 20 20 5 +copy b1 b2 +ttranslate b2 -10 10 3 +fubl a b1 b2 1 +See also: **fuse**, **blend** + + +@subsubsection occt_2142243456_1869436669785 mkevol, updatevol, buildevol + +Syntax:      mkevol result object (then use updatevol) [R/Q/P] +updatevol edge u1 radius1 [u2 radius2 ...] +buildevol + +These three commands work together to create fillets with evolving radii. + +**mkevol **allows you to specify the shape and the name of the result. It returns the tolerances of the fillet. + +**updatevol **allows you to describe the filleted edges you want to create. For each edge, you give a set of coordinates: parameter and radius and the command prompts you to pick the edge of the shape which you want to modify. The parameters will be calculated along the edges and the radius function applied to the whole edge. + +**buildevol **produces the result described previously in **mkevol **and **updatevol**. +**Example** + +# makes an evolved radius on a box +box b 10 10 10 +mkevol b b +==tolerance ang : 0.01 +==tolerance 3d : 0.0001 +==tolerance 2d : 1e-05 +==fleche : 0.001 +==tolblend 0.01 0.0001 1e-05 0.001 + +# click an edge +updatevol . 0 1 1 3 2 2 +==Pick an object + +buildevol +==Dump of SweepApproximation +==Error 3d = 1.28548881203818e-14 +==Error 2d = 1.3468326936926e-14 , +==1.20292299999388e-14 +==2 Segment(s) of degree 3 + +==COMPUTE: temps total 0.91s dont : +==- Init + ExtentAnalyse 0s +==- PerformSetOfSurf 0.33s +==- PerformFilletOnVertex 0.53s +==- FilDS 0.01s +==- Reconstruction 0.04s +==- SetRegul 0s + + + +@subsection occt_2142243456_186943666979 Topological analysis + +Analysis of shapes includes commands to compute length, area, volumes and inertial properties. + + * Use **lprops**, **sprops**, **vprops **to compute integral properties. + * Use **bounding **to display the bounding box of a shape. + * Use **distmini **to calculate the minimum distance between two shapes. + + + + +@subsubsection occt_2142243456_1869436669791 lprops, sprops, vprops + +Syntax:      lprops shape +sprops shape +vprops shape + +**lprops **computes the mass properties of all edges in the shape with a linear density of 1, **sprops **of all faces with a surface density of 1 and **vprops **of all solids with a density of 1. + +All three commands print the mass, the coordinates of the center of gravity, the matrix of inertia and the moments. Mass is either the length, the area or the volume. The center and the main axis of inertia are displayed. +**Example** + +# volume of a cylinder +pcylinder c 10 20 +vprops c +== results +Mass : 6283.18529981086 + +Center of gravity : +X = 4.1004749224903e-06 +Y = -2.03392858349861e-16 +Z = 9.9999999941362 + +Matrix of Inertia : +366519.141445068                    5.71451850691484e-12 +0.257640437382627 +5.71451850691484e-12                366519.141444962 +2.26823064169991e-10                0.257640437382627 +2.26823064169991e-10                314159.265358863 + +Moments : +IX = 366519.141446336 +IY = 366519.141444962 +I.Z = 314159.265357595 + + + +@subsubsection occt_2142243456_1869436669792  bounding + +Syntax:      bounding shape + +Displays the bounding box of a shape. The bounding box is a cuboid created with faces parallel to the x, y, and z planes. The command returns the dimension values of the the box, *xmin ymin zmin xmax ymax zmax.* +**Example** + +# bounding box of a torus +ptorus t 20 5 +bounding t +==-27.059805107309852              -27.059805107309852 - +5.0000001000000003 +==27.059805107309852               27.059805107309852 +5.0000001000000003 + + +@subsubsection occt_2142243456_1869436669793 distmini + +Syntax:      distmini name Shape1 Shape2 + +**distmini **calculates the minimum distance between two shapes. The calculation returns the number of solutions, If more than one solution exists. The options are displayed in the viewer(red) and the results are listed in the shell window. The distmini lines are considered as shapes which have a value v. +**Example** + +box b 0 0 0 10 20 30 +box b2 30 30 0 10 20 30 +distmini d1 b b2 +==the distance value is : 22.3606797749979 +==the number of solutions is :2 + +==solution number 1 +==the type of the solution on the first shape is 0 +==the type of the solution on the second shape is 0 +==the coordinates of the point on the first shape are: +==X=10 Y=20 Z=30 +==the coordinates of the point on the second shape +are: +==X=30 Y=30 Z=30 + +==solution number 2: +==the type of the solution on the first shape is 0 +==the type of the solution on the second shape is 0 +==the coordinates of the point on the first shape are: +==X=10 Y=20 Z=0 +==the coordinates of the point on the second shape +are: +==X=30 Y=30 Z=0 + +==d1_val d1 d12 + + + + +@subsection occt_2142243456_1869436669710 Surface creation + +Surface creation commands include surfaces created from boundaries and from spaces between shapes. + + * gplate creates a surface from a boundary definition. + * filling creates a surface from a group of surfaces. + + +@subsubsection occt_2142243456_18694366697101  gplate, + +Syntax: gplate result nbrcurfront nbrpntconst [SurfInit] [edge 0] [edge tang (1:G1;2:G2) surf]...[point] [u v tang (1:G1;2:G2) surf] ... + +**gplate **creates a surface from a defined boundary. The boundary can be defined using edges, points, or other surfaces. +
Example
+ +plane p +trim p p -1 3 -1 3 +mkface p p + +beziercurve c1 3 0 0 0 1 0 1 2 0 0 +mkedge e1 c1 +tcopy e1 e2 +tcopy e1 e3 + +ttranslate e2 0 2 0 +trotate e3 0 0 0 0 0 1 90 +tcopy e3 e4 +ttranslate e4 2 0 0 +# create the surface +gplate r1 4 0 p e1 0 e2 0 e3 0 e4 0 +== +======== Results =========== +DistMax=8.50014503228635e-16 +* GEOMPLATE END* +Calculation time: 0.33 +Loop number: 1 +Approximation results +Approximation error : 2.06274907619957e-13 +Criterium error : 4.97600631215754e-14 + +#to create a surface defined by edges and passing through a point +# to define the border edges and the point +plane p +trim p p -1 3 -1 3 +mkface p p + +beziercurve c1 3 0 0 0 1 0 1 2 0 0 +mkedge e1 c1 +tcopy e1 e2 +tcopy e1 e3 + +ttranslate e2 0 2 0 +trotate e3 0 0 0 0 0 1 90 +tcopy e3 e4 +ttranslate e4 2 0 0 +# to create a point +point pp 1 1 0 +# to create the surface +gplate r2 4 1 p e1 0 e2 0 e3 0 e4 0 pp +== +======== Results =========== +DistMax=3.65622157610934e-06 +* GEOMPLATE END* +Calculculation time: 0.27 +Loop number: 1 +Approximation results +Approximation error : 0.000422195884750181 +Criterium error : 3.43709808053967e-05 + +@subsubsection occt_2142243456_18694366697102  filling, fillingparam + +Syntax:      filling result nbB nbC nbP [SurfInit] [edge][face]order... +edge[face]order... point/u v face order... + +**filling **creates a surface between borders. It uses the **gplate **algorithm but creates a surface that is tangential to the adjacent surfaces. The result is a smooth continuous surface based on the G1 criterion. + +To define the surface border: + + * enter the number of edges, constraints, and points + * enumerate the edges, constraints and points + +The surface can pass through other points. These are defined after the border definition. + +You can use the **fillingparam **command to access the filling parameters. + +The options are: + +-l : to list current values + +-i : to set default values + +-r deg nbPonC nbIt anis : to set filling options + +-c t2d t3d tang tcur : to set tolerances + +-a maxdeg maxseg : Approximation option +**Example** + +# to create four curved survaces and a point +plane p +trim p p -1 3 -1 3 +mkface p p + +beziercurve c1 3 0 0 0 1 0 1 2 0 0 +mkedge e1 c1 +tcopy e1 e2 +tcopy e1 e3 + +ttranslate e2 0 2 0 +trotate e3 0 0 0 0 0 1 90 +tcopy e3 e4 +ttranslate e4 2 0 0 + +point pp 1 1 0 + +prism f1 e1 0 -1 0 +prism f2 e2 0 1 0 +prism f3 e3 -1 0 0 +prism f4 e4 1 0 0 + +# to create a tangential surface +filling r1 4 0 0 p e1 f1 1 e2 f2 1 e3 f3 1 e4 f4 1 +# to create a tangential surface passing through point pp +filling r2 4 0 1 p e1 f1 1 e2 f2 1 e3 f3 1 e4 f4 1 pp# +# to visualise the surface in detail +isos r2 40 +# to display the current filling parameters +fillingparam -l +== +Degree = 3 +NbPtsOnCur = 10 +NbIter = 3 +Anisotropie = 0 +Tol2d = 1e-05 +Tol3d = 0.0001 +TolAng = 0.01 +TolCurv = 0.1 + +MaxDeg = 8 +MaxSegments = 9 + + + + +@subsection occt_2142243456_1869436669711 Complex Topology + +Complex topology is the group of commands that modify the topology of shapes. This includes feature modeling. + + +@subsubsection occt_2142243456_18694366697111 offsetshape, offsetcompshape + +Syntax:      offsetshape r shape offset [tol] [face ...] +offsetcompshape r shape offset [face ...] + +**offsetshape **and **offsetcompshape **assigns a thickness to the edges of a shape. The **offset **value can be negative or positive. This value defines the thickness and direction of the resulting shape. Each face can be removed to create a hollow object. + +The resulting shape is based on a calculation of intersections. In case of simple shapes such as a box, only the adjacent intersections are required and you can use the **offsetshape **command. + +In case of complex shapes, where intersections can occur from non-adjacent edges and faces, use the **offsetcompshape **command. **comp **indicates complete and requires more time to calculate the result. + + +The opening between the object interior and exterior is defined by the argument face or faces. +**Example** + +box b1 10 20 30 +explode b1 f +== b1_1 b1_2 b1_3 b1_4 b1_5 b1_6 +offsetcompshape r b1 -1 b1_3 + +Syntax:      offsetparameter tolerance intersection(c/p) join(a/i) +offsetload      shape offset [face1 face2 …] +offsetonface    face1 offset1 face2 offset2 … +offsetperform   result + +**offsetparameter** sets the values of parameters and options for the following command **offsetload**: + * *tolerance* defines the coincidence tolerance criterion for generated shapes; + * *intersection* defines the mode of intersection: *c* means complete intersection, *p* means partial intersection; + * *join* defines the mode of connecting new adjacent faces: *a* means GeomAbs_Arc, *i* means GeomAbs_Intersection. + +**offsetload** loads shape, offset value and, if necessary,  a set of faces to remove from the shape. These data are later used by command **offsetperform**. +**offsetonface** indicates the faces of shape (loaded earlier by command **offsetload**) that should be shifted with special offset value. This command is optional. **Warning:** this command should be called only after **offsetload** and it takes effect only if parameter join = GeomAbs_Intersection. + +**offsetperform** performs the result of 3d-offset algorithm using the data loaded by previous commands. +**Example** + +box b1 10 20 30 +explode b1 f +== b1_1 b1_2 b1_3 b1_4 b1_5 b1_6 +offsetparameter 1e-7 p i +offsetload b1 2 b1_1 b1_2 +offsetonface b1_3 5 +offsetperform result + + + +@subsubsection occt_2142243456_18694366697112 featprism, featdprism, featrevol, featlf, featrf + +Syntax:      featprism shape element skface Dirx Diry Dirz Fuse(0/1/2) Modify(0/1) +featdprism shape face skface angle Fuse(0/1/2) Modify(0/1) +featrevol shape element skface Ox Oy Oz Dx Dy Dz Fuse(0/1/2) Modify(0/1) +featlf shape wire plane DirX DirY DirZ DirX DirY DirZ Fuse(0/1/2) Modify(0/1) +featrf shape wire plane X Y Z DirX DirY DirZ Size Size Fuse(0/1/2) Modify(0/1) +featperform prism/revol/pipe/dprism/lf result [[Ffrom] Funtil] +featperformval prism/revol/dprism/lf result value + +**featprism **loads the arguments for a prism with contiguous sides normal to the face. + +**featdprism **loads the arguments for a prism which is created in a direction normal to the face and includes a draft angle. + +**featrevol **loads the arguments for a prism with a circular evolution. + +**featlf **loads the arguments for a linear rib or slot. This feature uses planar faces and a wire as a guideline. + +**featrf **loads the arguments for a rib or slot with a curved surface. This feature uses a circular face and a wire as a guideline. + +**featperform **loads the arguments to create the feature. + +**featperformval **uses the defined arguments to create a feature with a limiting value. + +All the features are created from a set of arguments which are defined when you initialize the feature context. Negative values can be used to create depressions. +**Example** + +# to create a feature prism with a draft angle and a +normal direction +# create a box with a wire contour on the upper face +box b 1 1 1 +profil f O 0 0 1 F 0.25 0.25 x 0.5 y 0.5 x -0.5 +explode b f +# loads the feature arguments defining the draft angle +featdprism b f b_6 5 1 0 +# create the feature +featperformval dprism r 1 +==BRepFeat_MakeDPrism::Perform(Height) +BRepFeat_Form::GlobalPerform () +Gluer +still Gluer +Gluer result + +# to create a feature prism with circular direction +# create a box with a wire contour on the upper face +box b 1 1 1 +profil f O 0 0 1 F 0.25 0.25 x 0.5 y 0.5 x -0.5 +explode b f +# loads the feature arguments defining a rotation axis +featrevol b f b_6 1 0 1 0 1 0 1 0 +featperformval revol r 45 +==BRepFeat_MakeRevol::Perform(Angle) +BRepFeat_Form::GlobalPerform () +Gluer +still Gluer +Gluer result + +# to create a slot using the linear feature +#create the base model using the multi viewer +mu4 +profile p x 5 y 1 x -3 y -0.5 x -1.5 y 0.5 x 0.5 y 4 x -1 y -5 +prism pr p 0 0 1 +# create the contour for the linear feature +vertex v1 -0.2 4 0.3 +vertex v2 0.2 4 0.3 +vertex v3 0.2 0.2 0.3 +vertex v4 4 0.2 0.3 +vertex v5 4 -0.2 0.3 +edge e1 v1 v2 +edge e2 v2 v3 +edge e3 v3 v4 +edge e4 v4 v5 +wire w e1 e2 e3 e4 +# define a plane +plane pl 0.2 0.2 0.3 0 0 1 +# loads the linear feature arguments +featlf pr w pl 0 0 0.3 0 0 0 0 1 +featperform lf result + +# to create a rib using the revolution feature +#create the base model using the multi viewer +mu4 +pcylinder c1 3 5 +# create the contour for the revolution feature +profile w c 1 190 WW +trotate w 0 0 0 1 0 0 90 +ttranslate w -3 0 1 +trotate w -3 0 1.5 0 0 1 180 +plane pl -3 0 1.5 0 1 0 +# loads the revolution feature arguments +featrf c1 w pl 0 0 0 0 0 1 0.3 0.3 1 1 +featperform rf result + + +@subsubsection occt_2142243456_18694366697113 draft + +Syntax: draft result shape dirx diry dirz angle shape/surf/length [-IN/-OUT] [Ri/Ro] [-Internal] + +**draft **computes a draft angle surface from a wire. The surface is determined by the draft direction, the inclination of the draft surface, a draft angle, and a limiting distance. + + * The draft angle is measured in radians. + * The draft direction is determined by the argument -INTERNAL + * The argument Ri/Ro deftermines wether the corner edges of the + +draft surface are angular or rounded. + + * Arguments that can be used to define the surface distance are: + * length, a defined distance + * shape, until the surface contacts a shape + * surface, until the surface contacts a surface. + +

NOTE

+*The original aim of adding a draft angle to a shape is to* +*produce a shape which can be removed easily from a mould.* +*The Examples below use larger angles than are used normally* +*and the calculation results returned are not indicated.* + +**Example** + +# to create a simple profile +profile p F 0 0 x 2 y 4 tt 0 4 w +# creates a draft with rounded angles +draft res p 0 0 1 3 1 -Ro +# to create a profile with an internal angle +profile p F 0 0 x 2 y 4 tt 1 1.5 tt 0 4 w +# creates a draft with rounded external angles +draft res p 0 0 1 3 1 -Ro + + +@subsubsection occt_2142243456_18694366697114 deform, nurbsconvert + +Syntax:      deform newname name CoeffX CoeffY CoeffZ + +**deform **modifies the shape using the x, y, and z coefficients. You can reduce or magnify the shape in the x,y, and z directions. + +Syntax nurbsconvert result name [result name] + +**nurbsconvert **changes the NURBS curve definition of a shape to a Bspline curve definition. This conversion is required for assymetric deformation and prepares the arguments for other commands such as **deform. **The conversion can be necessary when transferring shape data to other applications. +**Example** + +pcylinder c 20 20 +deform a c 1 3 5 +# the conversion to bspline is followed by the +deformation + + + +@subsection occt_2142243456_1869436669712 Texture Mapping to a Shape + +Texture mapping allows you to map textures on a shape. Textures are texture image files and several are predefined. You can control the number of occurrences of the texture on a face, the position of a texture and the scale factor of the texture. + +@subsubsection occt_2142243456_18694366697121 vtexture + +Syntax       vtexture NameOfShape TextureFile +vtexture NameOfShape +vtexture NameOfShape ? +vtexture NameOfShape IdOfTexture + +**TextureFile **identifies the file containing the texture you want. The same syntax without **TextureFile **disables texture mapping. The question-mark ***?* **lists available textures. **IdOfTexture **allows you to apply predefined textures. + +@subsubsection occt_2142243456_18694366697122 vtexscale + +Syntax:      vtexscale NameOfShape ScaleU ScaleV +vtexscale NameOfShape ScaleUV +vtexscale NameOfShape + +**ScaleU **and **Scale V **allow you to scale the texture according to the U and V parameters individually, while **ScaleUV **applies the same scale to both parameters. The same syntax without **ScaleU**, **ScaleV **or **ScaleUV **disables texture scaling. + +@subsubsection occt_2142243456_18694366697123 vtexorigin + +Syntax       vtexorigin NameOfShape UOrigin VOrigin +vtexorigin NameOfShape UVOrigin +vtexorigin NameOfShape + +**UOrigin **and **VOrigin **allow you to place the texture according to the U and V parameters individually while **UVOrigin **applies the same position value to both parameters. The same syntax without **UOrigin**, **VOrigin **or **UVOrigin **disables origin positioning. + +@subsubsection occt_2142243456_18694366697124 vtexrepeat + +Syntax       vtexrepeat NameOfShape URepeat VRepeat +vtexrepeat NameOfShape UVRepeat +vtexrepeat NameOfShape + +**URepeat **and **VRepeat **allow you to repeat the texture along the U and V parameters individually while **UVRepeat **applies the same number of repetitions for both parameters. The same syntax without **URepeat**, **VRepeat **or **UVRepeat **disables texture repetition. + +@subsubsection occt_2142243456_18694366697125 vtexdefault + +Syntax       vtexdefault NameOfShape + +**Vtexdefault **sets or resets the texture mapping default parameters. + +The defaults are: + +URepeat = VRepeat = 1 = no repetition +UOrigin = VOrigin = 1 = origin set at (0,0) +UScale = VScale = 1 = texture covers 100% of the face +@section occt_2142243456_1866931135 Data Exchange commands + + +@subsection occt_2142243456_186693113581 General + +This paragraph presents some general information about Data Exchange (DE) operations. + +DE commands are intended for translation files of various formats (IGES,STEP) into OCCT shapes with their attributes (colors, layers etc.) + +This files include a number of entities. Each entity has its own number in the file which we call label and denote as # for a STEP file and D for an IGES file. Each file has entities called roots (one or more). A full description of such entities is contained in the Users’s Guide for a corresponding format. + +Each Draw session has an interface model – some structure for keeping various information. +First step of translation – loading information from a file into a model. +Second step – creation of an OpenCASCADE shape from this model. +Each entity from file has its own number in the model (num). +During the translation a map of correspondences between labels(from file) and numbers (from model) is created. +The model and the mentioned map are used for working with most of DE commands. + +@subsection occt_2142243456_186693113582 IGES commands + +These commands are used during the translation of IGES models. + + +@subsubsection occt_2142243456_1866931135821 igesread + +Syntax:      igesread file_name result_shape_name [selection] + +Read an IGES file to an OCCT shape. +This command will interactively ask the user to select a set of entities to be converted: + + +After the selected set of entities is loaded the user will be asked how loaded entities should be converted into OCCT shapes (e.g., one shape per root or one shape for all the entities). It is also possible to save loaded shapes in files, and to cancel loading. +The second parameter of this command defines the name of the loaded shape. If several shapes are created, they will get indexed names. For instance, if the last parameter was ‘s’, they will be s_1, ... s_N. +selection specifies the scope of selected entities in the model, it is xst-transferrable-roots by default. More about selection see in the *IGES FORMAT User’s Guide*. +If we use symbol * as selection all roots will be translated. +
Example
+ +# translation all roots from file +igesread /disk01/files/model.igs a * + +@subsubsection occt_2142243456_1866931135822  tplosttrim + +Syntax:      tplosttrim [IGES_type] + +Sometimes the trimming contours of IGES faces (i.e., entity 141 for 143, 142 for 144) can be lost during translation due to fails. This command gives us a number of lost trims and the number of corresponding IGES entities. +It outputs the rank and numbers of faces that lost their trims and their numbers for each type (143, 144, 510) and their total number. If a face lost several of its trims it is output only once. +Optional parameter IGES_type can be TrimmedSurface, BoundedSurface or Face to specify the only type of IGES faces. +
Example
+ +tplosttrim TrimmedSurface + +@subsubsection occt_2142243456_1866931135823 brepiges + +Syntax:      brepiges shape_name filename.igs + +Writes an OCCT shape to an IGES file. +**Example** +    +# write shape with name aa to IGES file +brepiges aa /disk1/tmp/aaa.igs +== unit (write) : MM +== mode  write  : Faces +==   To modifiy : command  param +== 1 Shapes written, giving 345 Entities +==  Now, to write a file, command : writeall filename +==  Output on file : /disk1/tmp/aaa.igs +==  Write OK + + + +@subsection occt_2142243456_186693113583 STEP commands + +These commands are used during the translation of STEP models. + + +@subsubsection occt_2142243456_1866931135831 stepread + +Syntax:      stepread file_name result_shape_name [selection] + +Read a STEP file to an OCCT shape. +This command will interactively ask the user to select a set of entities to be converted: + + +After the selected set of entities is loaded the user will be asked how loaded entities should be converted into OCCT shapes. +The second parameter of this command defines the name of the loaded shape. If several shapes are created, they will get indexed names. For instance, if the last parameter was ‘s’, they will be s_1, ... s_N. +selection specifies the scope of selected entities in the model. More about selection see in the *STEP FORMAT User’s Guide*. +If as selection we use symbol * all roots will be translated. +
Example
+ +# translation all roots from file +stepread /disk01/files/model.stp a * + +@subsubsection occt_2142243456_1866931135832  stepwrite + +Syntax:      stepwrite mode shape_name file_name + +Writes an OCCT shape to a STEP file. +The available modes are the following: +     0 or ‘a’  - ;as is; mode – mode is selected automatically depending on type & geometry of the shape +     1 or ‘m’ - manifold_solid_brep or brep_with_voids +     2 or ‘f’ - faceted_brep +     3 or ‘w’ - geometric_curve_set +     4 or ‘s’ - shell_based_surface_model +For further information see ;STEP FORMAT User’s Guide ;. +
Example
+ +# write shape with name a to STEP file with mode 0 +stepwrite 0 a /disk1/tmp/aaa.igs + + + +@subsection occt_2142243456_186693113584 General commands + +These commands are auxilary commands. Most of them are used for the analysis of result of translation of IGES and STEP files. + +@subsubsection occt_2142243456_1866931135841 count + +Syntax:      count counter [selection] + +Is used to calculate statistics on the entities in the model. +Gives us a count of entities. +The optional selection argument, if specified, defines a subset of entities, which are to be taken into account. The first argument should be one of the currently defined counters (for example): + +
Example
+ +count xst-types + +@subsubsection occt_2142243456_1866931135842 data + +Syntax:      data symbol + +Is used to obtain general statistics on the loaded data. +Information printed by this command depends on the symbol specified: +
Example
+ +# print full information about warnings and fails +data c + +@subsubsection occt_2142243456_1866931135843 elabel + +Syntax:      elabel num + +Entities in the IGES and STEP files are numbered in the succeeding order. An entity can be identified either by its number or by its label. Label is the letter ‘#'(for STEP, for IGES use ‘D’) followed by the rank. This command gives us a label for an entity with a known number. +
Example
+ +elabel 84 + +@subsubsection occt_2142243456_1866931135844 entity + +Syntax:      entity #(D)_or_num level_of_information + +The content of an IGES or STEP entity can be obtained by using this command. +Entity can be determined by its number or label. +level_of_information has range [0-6]. You can get more information about this level using this command without parameters. +
Example
+ +# full information for STEP entity with label 84 +entity #84 6 + +@subsubsection occt_2142243456_1866931135845 enum + +Syntax:      enum #(D) + +Prints a number for the entity with a given label. +
Example
+ +# give a number for IGES entity with label 21 +enum D21 + +@subsubsection occt_2142243456_1866931135846 estatus + +Syntax:      estatus #(D)_or_num + +The list of entities referenced by a given entity and the list of entities referencing to it can be obtained by this command. +
Example
+ +estatus #315 + +@subsubsection occt_2142243456_1866931135847 fromshape + +Syntax:      fromshape shape_name + +Gives us the number of an IGES or STEP entity corresponding to an OCCT shape. If no corresponding entity can be found and if OCCT shape is a compound the command explodes it to subshapes and try to find corresponding entities for them. +
Example
+ +fromshape a_1_23 + +@subsubsection occt_2142243456_1866931135848 givecount + +Syntax:      givecount selection_name [selection_name] + +
Example
+ +givecount xst-model-roots + +@subsubsection occt_2142243456_1866931135849 givelist + +Syntax:      givelist selection_name + +Prints a list of a subset of loaded entities defined by the selection argument: + +
Example
+ +# give a list of all entities of the model +givelist xst-model-all + +@subsubsection occt_2142243456_18669311358410 listcount + +Syntax:      listcount counter [selection ...] + +Prints a list of entities per each type matching the criteria defined by arguments. +Optional selection argument, if specified, defines a subset of entities, which are to be taken into account. Argument counter should be one of the currently defined counters: + +
Example
+ +listcount xst-types + +@subsubsection occt_2142243456_18669311358411 listitems + +Syntax:      listitems + +This command prints a list of objects (counters, selections etc.) defined in the current session. +
Example
+ +listitems + +@subsubsection occt_2142243456_18669311358412 listtypes + +Syntax:      listtypes [selection_name ...] + +Gives a list of entity types which were encountered in the last loaded file (with a number of entities of each type). The list can be shown not for all entities but for a subset of them. This subset is defined by an optional selection argument. +
Example
+ +# full list of all entities with thier counts +listtypes + +@subsubsection occt_2142243456_18669311358413 newmodel + +Syntax:      newmodel + +Clears the current model. +
Example
+ +newmodel + +@subsubsection occt_2142243456_18669311358414 param + +Syntax:      param [parameter] [value] + +This command is used to manage translation parameters. +Command without arguments gives us a full list of parameters with current values. +Command with parameter (without value) gives us the current value of this parameter and all possible values for it. Command with value sets this new value to parameter. +For more information about translation parameters see the corresponding User’s Guide. +
Example
+ +# info about possible schemes for writing STEP file +param write.step.schema + +@subsubsection occt_2142243456_18669311358415 sumcount + +Syntax:      sumcount counter [selection ...] + +Prints only a number of entities per each type matching the criteria defined by arguments. +
Example
+ +sumcount xst-types + +@subsubsection occt_2142243456_18669311358416 tpclear + +Syntax:      tpclear + +Clears the map of correspondences between IGES or STEP entities and OCCT shapes. +
Example
+ +tpclear + +@subsubsection occt_2142243456_18669311358417 tpdraw + +Syntax:      tpdraw #(D)_or_num + +
Example
+ +tpdraw 57 + +@subsubsection occt_2142243456_18669311358418 tpent + +Syntax:      tpent #(D)_or_num + +
Example
+ +tpent #23 + +@subsubsection occt_2142243456_18669311358419 tpstat + +Syntax:      tpstat [*|?]symbol [selection] + +Gives all statistics on the last transfer, including the list of transferred entities with mapping from IGES or STEP to OCCT types, as well as fail and warning messages. The parameter *symbol *defines what information will be printed: + + +The sign ‘*’ before the parameters **n**, **s**, **b**, **t**, **r** makes it work on all entities (not only on roots). The sign ‘?’ before **n**, **s**, **b**, **t** limits the scope of information to invalid entities. +Optional argument selection can limit the action of the command with a selected subset of entities. +
Example
+ +# translation ratio on IGES faces +tpstat *l iges-faces + +@subsubsection occt_2142243456_18669311358420 xload + +Syntax:      xload file_name + +This command loads an IGES or STEP file into memory (i.e. to fill the model with data from the file) without creation of an OCCT shape. +
Example
+ +xload /disk1/tmp/aaa.stp + + + +@subsection occt_2142243456_186693113585 Overview of XDE commands + +These commands are used for translation of IGES and STEP files into an XCAF document (special document is inherited from CAF document and is intended for Extended Data Exchange (XDE) ) and working with it. XDE translation allows reading and writing of shapes with additional attributes – colors, layers etc. All commands can be divided into the following groups: + * **XDE translation commands** + * **XDE general commands** + * **XDE shape’s commands** + * **XDE color’s commands** + * **XDE layer’s commands** + * **XDE property’s commands** + + + +@subsection occt_2142243456_186693113586 XDE translation commands + +Reminding: All operations of translation are performed with parameters managed by command param (see above) + +@subsubsection occt_2142243456_1866931135861 ReadIges + +Syntax:      ReadIges document file_name + +Reads information from an IGES file to an XCAF document. +
Example
+ +ReadIges D /disk1/tmp/aaa.igs +== Document saved with name D + +@subsubsection occt_2142243456_1866931135862 ReadStep + +Syntax:      ReadStep document file_name + +Reads information from a STEP file to an XCAF document. +
Example
+ +ReadStep D /disk1/tmp/aaa.stp +== Document saved with name D + +@subsubsection occt_2142243456_1866931135863 WriteIges + +Syntax:      WriteIges document file_name + +
Example
+ +WriteIges D /disk1/tmp/aaa.igs + +@subsubsection occt_2142243456_1866931135864 WriteStep + +Syntax:      WriteStep document file_name + +Writes information from an XCAF document to a STEP file. +
Example
+ +WriteStep D /disk1/tmp/aaa.stp + +@subsubsection occt_2142243456_1866931135865 XFileCur + +Syntax:      XFileCur + +Returns the name of file which is set as the current one in the Draw session. +
Example
+ +XFileCur +== *as1-ct-203.stp* + +@subsubsection occt_2142243456_1866931135866 XFileList + +Syntax:      XFileList + +Returns a list all files that were transferred by the last transfer. This command is  meant (assigned) for the assemble step file. +
Example
+ +XFileList +== *as1-ct-Bolt.stp* +== *as1-ct-L-Bracktet.stp* +== *as1-ct-LBA.stp* +== *as1-ct-NBA.stp* +== … + +@subsubsection occt_2142243456_1866931135867 XFileSet + +Syntax:      XFileSet filename + +Sets the current file taking it from the components list of the assemble file. +
Example
+ +XFileSet as1-ct-NBA.stp + +@subsubsection occt_2142243456_1866931135868 XFromShape + +Syntax:      XFromShape shape + +This command is similar to command *fromshape* (see above) but gives additional information about the name of file. It is useful in the case when a shape was translated from several files. +
Example
+ +XFromShape a +== Shape a: imported from entity 217:#26 in file as1-ct-Nut.stp + + +@subsection occt_2142243456_186693113587 XDE general commands + +@subsubsection occt_2142243456_1866931135871 XNewDoc + +Syntax:      XNewDoc document + +Creates a new XCAF document. +
Example
+ +XNewDoc D + +@subsubsection occt_2142243456_1866931135872 XShow + +Syntax:      XShow document [ label1 … ] + +Shows a shape from a given label in the 3D viewer. If the label is not given – shows all shapes from the document. +
Example
+ +# show shape from label 0:1:1:4 from document D +XShow D 0:1:1:4 + +@subsubsection occt_2142243456_1866931135873 XStat + +Syntax:      XStat document + +Prints common information from an XCAF document. +
Example
+ +XStat D +==Statistis of shapes in the document: +==level N 0 : 9 +==level N 1 : 18 +==level N 2 : 5 +==Total number of labels for shapes in the document = 32 +==Number of labels with name = 27 +==Number of labels with color link = 3 +==Number of labels with layer link = 0 +==Statistis of Props in the document: +==Number of Centroid Props = 5 +==Number of Volume Props = 5 +==Number of Area Props = 5 +==Number of colors = 4 +==BLUE1 RED YELLOW BLUE2 +==Number of layers = 0 + +@subsubsection occt_2142243456_1866931135874 XWdump + +Syntax:      XWdump document filename + +Saves the contents of the viewer window as an image (XWD, png or BMP file). +filename must have a corresponding extention. +
Example
+ +XWdump D /disk1/tmp/image.png + +@subsubsection occt_2142243456_1866931135875 Xdump + +Syntax:      Xdump document [int deep {0|1}] + +Prints information about the tree structure of the document. If parameter 1 is given, then the tree is printed with a link to shapes. +
Example
+ +Xdump D 1 +== ASSEMBLY 0:1:1:1 L-BRACKET(0xe8180448) +== ASSEMBLY 0:1:1:2 NUT(0xe82151e8) +== ASSEMBLY 0:1:1:3 BOLT(0xe829b000) +== ASSEMBLY 0:1:1:4 PLATE(0xe8387780) +== ASSEMBLY 0:1:1:5 ROD(0xe8475418) +== ASSEMBLY 0:1:1:6 AS1(0xe8476968) +==    ASSEMBLY 0:1:1:7 L-BRACKET-ASSEMBLY(0xe8476230) +==       ASSEMBLY 0:1:1:1 L-BRACKET(0xe8180448) +==       ASSEMBLY 0:1:1:8 NUT-BOLT-ASSEMBLY(0xe8475ec0) +==               ASSEMBLY 0:1:1:2 NUT(0xe82151e8) +==               ASSEMBLY 0:1:1:3 BOLT(0xe829b000) +etc. + + +@subsection occt_2142243456_186693113588 XDE shape’s commands + +@subsubsection occt_2142243456_1866931135881 XAddComponent + +Syntax:      XAddComponent document label shape + +Adds a component shape to assembly. +
Example
+ +# Add shape b as component shape to assembly shape from +# label 0:1:1:1 +XAddComponent D 0:1:1:1 b + +@subsubsection occt_2142243456_1866931135882 XAddShape + +Syntax:      XAddShape document shape [makeassembly=1] + +Adds a shape (or an assembly) to a document. If this shape already exists in the document, then prints the label which points to it. By default, a new shape is added as an assembly (i.e. last parameter 1), otherwise it is necessary to pass 0 as the last parameter. +
Example
+ +# add shape b to document D +XAddShape D b 0 +== 0:1:1:10 +# if pointed shape is compound and last parameter in +# XAddShape command is used by default (1), then for +# each subshapes new label is created + +@subsubsection occt_2142243456_1866931135883 XFindComponent + +Syntax:      XFindComponent document shape + +Prints a sequence of labels of the assembly path. +
Example
+ +XFindComponent D b + +@subsubsection occt_2142243456_1866931135884 XFindShape + +Syntax:      XFindShape document shape + +Finds and prints a label with an indicated top-level shape. +
Example
+ +XFindShape D a + +@subsubsection occt_2142243456_1866931135885 XGetFreeShapes + +Syntax:      XGetFreeShapes document [shape_prefix] + +Print labels or create DRAW shapes for all free shapes in the document. +If [shape_prefix] is absent – prints labels, else – creates DRAW shapes with names +[shape_prefix]_num (i.e. for example: there are 3 free shapes and [shape_prefix] = a therefore shapes will be created with names a_1, a_2 and a_3). +Note: a free shape is a shape to which no other shape refers to. +
Example
+ +XGetFreeShapes D +== 0:1:1:6 0:1:1:10 0:1:1:12 0:1:1:13 + +XGetFreeShapes D sh +== sh_1 sh_2 sh_3 sh_4 + +@subsubsection occt_2142243456_1866931135886 XGetOneShape + +Syntax:      XGetOneShape shape document + +Creates one DRAW shape for all free shapes from a document. +
Example
+ +XGetOneShape a D + +@subsubsection occt_2142243456_1866931135887 XGetReferredShape + +Syntax:      XGetReferredShape document label + +Prints a label that contains a top-level shape that corresponds to a shape at a given label. +
Example
+ +XGetReferredShape D 0:1:1:1:1 + +@subsubsection occt_2142243456_1866931135888 XGetShape + +Syntax:      XGetShape result document label + +Puts a shape from the indicated label in document to result. +
Example
+ +XGetShape b D 0:1:1:3 + +@subsubsection occt_2142243456_1866931135889 XGetTopLevelShapes + +Syntax:      XGetTopLevelShapes document + +Prints labels that contain top-level shapes. +
Example
+ +XGetTopLevelShapes D +== 0:1:1:1 0:1:1:2 0:1:1:3 0:1:1:4 0:1:1:5 0:1:1:6 0:1:1:7 +0:1:1:8 0:1:1:9 + +@subsubsection occt_2142243456_18669311358810 XLabelInfo + +Syntax:      XLabelInfo document label + +Prints information about a shape, stored at an indicated label. +**Example** +    +XLabelInfo D 0:1:1:6 +== There are TopLevel Shape. There are an Assembly. This Shape don’t used. + +@subsubsection occt_2142243456_18669311358811 XNewShape + +Syntax:      XNewShape document + +Creates a new empty top-level shape. +
Example
+ +XNewShape D + +@subsubsection occt_2142243456_18669311358812 XRemoveComponent + +Syntax:      XRemoveComponent document label + +Removes a component from the components label. +
Example
+ +XRemoveComponent D 0:1:1:1:1 + +@subsubsection occt_2142243456_18669311358813 XRemoveShape + +Syntax:      XRemoveShape document label + +Removes a shape from a document (by it’s label). +
Example
+ +XRemoveShape D 0:1:1:2 + +@subsubsection occt_2142243456_18669311358814 XSetShape + +Syntax:      XSetShape document label shape + +Sets a shape at the indicated label. +
Example
+ +XSetShape D 0:1:1:3 b + + +@subsection occt_2142243456_186693113589 XDE color’s commands + +@subsubsection occt_2142243456_1866931135891 XAddColor + +Syntax:      XAddColor document R G B + +Adds color in document to the color table. Parameters R,G,B are real. +
Example
+ +XAddColor D 0.5 0.25 0.25 + +@subsubsection occt_2142243456_1866931135892 XFindColor + +Syntax:      XFindColor document R G B + +Finds a label where the indicated color is situated. +
Example
+ +XFindColor D 0.25 0.25 0.5 +== 0:1:2:2 + +@subsubsection occt_2142243456_1866931135893 XGetAllColors + +Syntax:      XGetAllColors document + +Prints all colors that are defined in the document. +
Example
+ +XGetAllColors D +== RED DARKORANGE BLUE1 GREEN YELLOW3 + +@subsubsection occt_2142243456_1866931135894 XGetColor + +Syntax:      XGetColor document label + +Returns a color defined at the indicated label from the color table. +
Example
+ +XGetColor D 0:1:2:3 +== BLUE1 + +@subsubsection occt_2142243456_1866931135895 XGetObjVisibility + +Syntax:      XGetObjVisibility document {label|shape} + +Returns the visibility of a shape. +
Example
+ +XGetObjVisibility D 0:1:1:4 + +@subsubsection occt_2142243456_1866931135896 XGetShapeColor + +Syntax:      XGetShapeColor document label colortype(s|c) + +Returns the color defined by label. If colortype=’s’ – returns surface color, else – returns curve color. +
Example
+ +XGetShapeColor D 0:1:1:4 c + +@subsubsection occt_2142243456_1866931135897 XRemoveColor + +Syntax:      XRemoveColor document label + +Removes a color from the color table in a document. +
Example
+ +XRemoveColor D 0:1:2:1 + +@subsubsection occt_2142243456_1866931135898 XSetColor + +Syntax:      XSetColor document {label|shape} R G B + +Sets an RGB color to a shape given by label. +
Example
+ +XsetColor D 0:1:1:4 0.5 0.5 0. + +@subsubsection occt_2142243456_1866931135899 XSetObjVisibility + +Syntax:      XSetObjVisibility document {label|shape} {0|1} + +Sets the visibility of a shape. +
Example
+ +# set shape from label 0:1:1:4 as invisible +XSetObjVisibility D 0:1:1:4 0 + +@subsubsection occt_2142243456_18669311358910 XUnsetColor + +Syntax:      XUnsetColor document {label|shape} colortype + +Unset a color given??? type (‘s’ or ‘c’) for the indicated shape. +
Example
+ +XUnsetColor D 0:1:1:4 s + + +@subsection occt_2142243456_1866931135810 XDE layer’s commands + +@subsubsection occt_2142243456_18669311358101 XAddLayer + +Syntax:      XAddLayer document layer + +Adds a new layer in an XCAF document. layer - name of new layer (string). +
Example
+ +XAddLayer D layer2 + +@subsubsection occt_2142243456_18669311358102 XFindLayer + +Syntax:      XFindLayer document layer + +Prints a label where a layer is situated. +
Example
+ +XFindLayer D Bolt +== 0:1:3:2 + +@subsubsection occt_2142243456_18669311358103 XGetAllLayers + +Syntax:      XGetAllLayers document + +Prints all layers in an XCAF document. +
Example
+ +XGetAllLayers D +== *0:1:1:3* *Bolt* *0:1:1:9* + +@subsubsection occt_2142243456_18669311358104 XGetLayers + +Syntax:      XGetLayers document {shape|label} + +Returns names of layers, which are pointed to by links of an indicated shape. +
Example
+ +XGetLayers D 0:1:1:3 +== *bolt* *123* + +@subsubsection occt_2142243456_18669311358105 XGetOneLayer + +Syntax:      XGetOneLayer document label + +Prints the name of a layer at a given label. +
Example
+ +XGetOneLayer D 0:1:3:2 + +@subsubsection occt_2142243456_18669311358106 XIsVisible + +Syntax:      XIsVisible document {label|layer} + +Returns 1 if the indicated layer is visible, else returns 0. +
Example
+ +XIsVisible D 0:1:3:1 + +@subsubsection occt_2142243456_18669311358107 XRemoveAllLayers + +Syntax:      XRemoveAllLayers document + +Removes all layers from an XCAF document. +
Example
+ +XRemoveAllLayers D + +@subsubsection occt_2142243456_18669311358108 XRemoveLayer + +Syntax:      XRemoveLayer document {label|layer} + +Removes the indicated layer from an XCAF document. +
Example
+ +XRemoveLayer D layer2 + +@subsubsection occt_2142243456_18669311358109 XSetLayer + +Syntax:      XSetLayer document {shape|label} layer +                  [shape_in_one_layer {0|1}] + +Sets a reference between a shape and a layer (adds a layer if it is necessary). +Parameter shape_in_one_layer shows whether a shape could be in a number of layers or only in one (0 by default). +
Example
+ +XSetLayer D 0:1:1:2 layer2 + +@subsubsection occt_2142243456_186693113581010 XSetVisibility + +Syntax:      XSetVisibility document {label|layer} isvisible {0|1} + +Sets the visibility of a layer. +
Example
+ +# set layer at label 0:1:3:2 as invisible +XSetVisibility D 0:1:3:2 0 + +@subsubsection occt_2142243456_186693113581011 XUnSetAllLayers + +Syntax:      XUnSetAllLayers document {label|shape} + +Unsets a shape from all layers. +
Example
+ +XUnSetAllLayers D 0:1:1:2 + +@subsubsection occt_2142243456_186693113581012 XUnSetLayer + +Syntax:      XUnSetLayer document {label|shape} layer + +Unsets a shape from the indicated layer. +
Example
+ +XUnSetLayer D 0:1:1:2 layer1 + + +@subsection occt_2142243456_1866931135811 XDE property’s commands + +@subsubsection occt_2142243456_18669311358111 XCheckProps + +Syntax:      XCheckProps document [ {0|deflection} [shape|label] ] + +Gets properties for a given shape (volume, area and centroid) and compares them with the results after internal calculations. If the second parameter is 0, the standard OCCT tool is used for the computation of properties. If the second parameter is not 0, it is treated as a deflection. If the deflection is positive the computation is done by triangulations, if it is negative – meshing is forced. +
Example
+ +# check properties for shapes at label 0:1:1:1 from +# document using standard Open CASCADE Technology tools +XCheckProps D 0 0:1:1:1 +== Label 0:1:1:1      ;L-BRACKET* +==  Area defect:        -0.0 (  0%) +==  Volume defect:       0.0 (  0%) +==  CG defect: dX=-0.000, dY=0.000, dZ=0.000 + +@subsubsection occt_2142243456_18669311358112 XGetArea + +Syntax:      XGetArea document {shape|label} + +Returns the area of a given shape. +
Example
+ +XGetArea D 0:1:1:1 +== 24628.31815094999 + +@subsubsection occt_2142243456_18669311358113 XGetCentroid + +Syntax:      XGetCentroid document {shape|label} + +Returns the center of gravity coordinates of a given shape. +
Example
+ +XGetCentroid D 0:1:1:1 + +@subsubsection occt_2142243456_18669311358114 XGetVolume + +Syntax:      XGetVolume document {shape|label} + +Returns the volume of a given shape. +
Example
+ +XGetVolume D 0:1:1:1 + +@subsubsection occt_2142243456_18669311358115 XSetArea + +Syntax:      XSetArea document {shape|label} area + +Sets new area to attribute list ??? given shape. +
Example
+ +XSetArea D 0:1:1:1 2233.99 + +@subsubsection occt_2142243456_18669311358116 XSetCentroid + +Syntax:      XSetCentroid document {shape|label} x y z + +Sets new center of gravity  to the attribute list ??? given shape. +
Example
+ +XSetCentroid D 0:1:1:1 0. 0. 100. + +@subsubsection occt_2142243456_18669311358117 XSetMaterial + +Syntax:      XSetMaterial document {shape|label} name +                  density(g/cu sm) + +Adds a new label with material into the material table in a document, and adds a link to this material to the attribute list of agiven shape or a given label. The last parameter sets the density of a pointed material. +
Example
+ +XSetMaterial D 0:1:1:1 Titanium 8899.77 + +@subsubsection occt_2142243456_18669311358118 XSetVolume + +Syntax:      XSetVolume document {shape|label} volume + +Sets new volume to the attribute list ??? given shape. +
Example
+ +XSetVolume D 0:1:1:1 444555.33 + +@subsubsection occt_2142243456_18669311358119 XShapeMassProps + +Syntax:      XShapeMassProps document [ deflection [{shape|label}] ] + +Computes and returns real mass and real center of gravity for a given shape or for all shapes in a document. The second parameter is used for calculation of the volume and CG(center of gravity). If it is 0, then the standard CASCADE tool (geometry) is used for computation, otherwise - by triangulations with a given deflection. +
Example
+ +XShapeMassProps D +== Shape from label : 0:1:1:1 +== Mass = 193.71681469282299 +== CenterOfGravity X = 14.594564763807696,Y = +    20.20271885211281,Z = 49.999999385313245 +== Shape from label : 0:1:1:2 not have a mass +etc. + +@subsubsection occt_2142243456_186693113581110 XShapeVolume + +Syntax:      XShapeVolume shape deflection + +Calculates the real volume of a pointed shape with a given deflection. +
Example
+ +XShapeVolume a 0 + +@section occt_2142243456_1672096717 Shape Healing commands + + + +@subsection occt_2142243456_16720967171 General commands + +@subsubsection occt_2142243456_1672096717111 bsplres + +Syntax:      bsplres result shape tol3d tol2d reqdegree reqnbsegments continuity3d continuity2d PriorDeg RationalConvert + +Performs approximations of a given shape (BSpline curves and surfaces or other surfaces) to BSpline with given required parameters. The specified continuity can be reduced if the approximation with a specified continuity was not done successfully. Results are put into the shape, which is given as a parameter result. For a more detailed description see the ShapeHealing User’s Guide (operator: BSplineRestriction). + +@subsubsection occt_2142243456_1672096717112 checkfclass2d + +Syntax:      checkfclass2d face ucoord vcoord + +Shows where a point which is given by coordinates is located in relation to a given face – outbound, inside or at the bounds. +
Example
+ +checkfclass2d f 10.5 1.1 +== Point is OUT + +@subsubsection occt_2142243456_1672096717113 checkoverlapedges + +Syntax:      checkoverlapedges edge1 edge2 [toler domaindist] + +Checks the overlapping of two given edges. If the distance between two edges is less than the given value of tolerance then edges are overlapped. Parameter domaindist sets length of part of edges on which edges are overlapped. +
Example
+ +checkoverlapedges e1 e2 + +@subsubsection occt_2142243456_1672096717114 comtol + +Syntax:      comptol shape [nbpoints] [prefix] + +Compares the real value of tolerance on curves with the value calculated by standard (using 23 points). The maximal value of deviation of 3d curve from pcurve at given simple points is taken as a real value (371 is by default). Command returns the maximal, minimal and average value of tolerance for all edges and difference between real values and set values. Edges with the maximal value of tolerance and relation will be saved if the ‘prefix’ parameter is given. +**Example** +    +comptol h 871 t + +== Edges tolerance computed by 871 points: +== MAX=8.0001130696523449e-008 AVG=6.349346868091096e-009 +    MIN=0 +== Relation real tolerance / tolerance set in edge +== MAX=0.80001130696523448 AVG=0.06349345591805905 MIN=0 +== Edge with max tolerance saved to t_edge_tol +== Concerned faces saved to shapes t_1, t_2 + + +@subsubsection occt_2142243456_1672096717115 convtorevol + +Syntax:      convtorevol result shape + +Converts all elementary surfaces of a given shape into surfaces of revolution. +Results are put into the shape, which is given as theresult parameter. +
Example
+ +convtorevol r a + +@subsubsection occt_2142243456_1672096717116 directfaces + +Syntax:      directfaces result shape + +Converts indirect surfaces and returns the results into the shape, which is given as the result parameter. +
Example
+ +directfaces r a + +@subsubsection occt_2142243456_1672096717117 expshape + +Syntax:   expshape shape maxdegree maxseg + +Gives statistics for a given shape. This test command is working with Bezier and BSpline entities. +
Example
+ +expshape a 10 10 +== Number of Rational Bspline curves 128 +== Number of Rational Bspline pcurves 48 + +@subsubsection occt_2142243456_1672096717118 fixsmall + +Syntax:      fixsmall result shape [toler=1.] + +Fixes small edges in given shape by merging adjacent edges with agiven tolerance. Results are put into the shape, which is given as the result parameter. +
Example
+ +fixsmall r a 0.1 + +@subsubsection occt_2142243456_1672096717119 fixsmalledges + +Syntax:      fixsmalledges result shape [toler mode maxangle] + +Searches at least one small edge at a given shape. If such edges have been found, then small edges are merged with a given tolerance. If parameter mode is equal to Standard_True (can be given any values, except 2), then  small edges, which can not be merged, are removed, otherwise they are to be kept (Standard_False is used by default). Parameter maxangle sets a maximum possible angle for merging two adjacent edges, by default no limit angle is applied (-1).Results are put into the shape, which is given as parameter result. +
Example
+ +fixsmalledges r a 0.1 1 + +@subsubsection occt_2142243456_16720967171110 fixshape + +Syntax:      fixshape result shape [preci [maxpreci]] [{switches}] + +Performs fixes of all sub-shapes (such as Solids, Shells, Faces, Wires and Edges) of a given shape. Parameter preci sets a basic precision value, maxpreci sets the maximal allowed tolerance. Results are put into the shape, which is given as parameter result. +{switches} allows to tune parameters of ShapeFix +The following syntax is used: symbolparameter +- symbol may be - to set parameter off, + to set on or * to set default +- parameters are identified by letters: +l - FixLackingMode +o - FixOrientationMode +h - FixShiftedMode +m - FixMissingSeamMode +d - FixDegeneratedMode +s - FixSmallMode +i - FixSelfIntersectionMode +n - FixNotchedEdgesMode +For enhanced message output, use switch '+?' +
Example
+ +fixshape r a 0.001 + +@subsubsection occt_2142243456_16720967171111 fixwgaps + +Syntax:      fixwgaps result shape [toler=0] + +Fixes gaps between ends of curves of adjacent edges (both 3d and pcurves) in wires in a given shape with a given tolerance. Results are put into the shape, which is given as parameter result. +
Example
+ +fixwgaps r a + +@subsubsection occt_2142243456_16720967171112 offsetcurve, offset2dcurve + +Syntax:      offsetcurve result curve offset direction(as point) +                  offset2dcurve result curve offset + +Both commands are intended to create a new offset curve by copying the given curve to distance, given by parameter offset. Parameter direction defines direction of the offset curve. It is created as a point. For correct work of these commands the direction of normal of the offset curve must be perpendicular to the plane, the basis curve is located there. Results are put into the curve, which is given as parameter result.  **offsetcurve **works with the curve in 3d space, **offset2dcurve **in 2d space accordingly. +
Example
+ +point pp 10 10 10 +offsetcurve r c 20 pp + +@subsubsection occt_2142243456_16720967171113 projcurve + +Syntax:      projcurve edge|curve3d|curve3d first last  X Y Z + +**projcurve **returns the projection of a given point on a given curve. The curve may be defined by three ways: by giving the edge name, giving the 3D curve and by giving the unlimited curve and limiting it by pointing its start and finish values. +**Example** +    +projcurve k_1 0 1 5 +==Edge k_1 Params from 0 to 1.3 +==Precision (BRepBuilderAPI) : 9.9999999999999995e-008  ==Projection : 0  1  5 +==Result : 0  1.1000000000000001  0 +==Param = -0.20000000000000001  Gap = 5.0009999000199947 + + +@subsubsection occt_2142243456_16720967171114 projface + +Syntax:      projface face X Y [Z] + +Returns the projection of a given point to a given face in 2d or 3d space. If two coordinates (2d space) are given then returns coordinates projection of this point in 3d space and vice versa. +
Example
+ +projface a_1 10.0 0.0 +==  Point UV  U = 10  V = 0 +==   =   proj  X = -116  Y = -45  Z = 0 + +@subsubsection occt_2142243456_16720967171115 scaleshape + +Syntax:   scaleshape result shape scale + +
Example
+ +scaleshape r a_1 0.8 + +@subsubsection occt_2142243456_16720967171116 settolerance + +Syntax:      settolerance shape [mode=v-e-w-f-a] val(fix value) or +                   tolmin tolmax + +Sets new values of tolerance for a given shape. If the given second parameter (mode) is given, then the atolerance value is set only for these sub shapes. +
Example
+ +settolerance a 0.001 + +@subsubsection occt_2142243456_16720967171117 splitface + +Syntax:      splitface result face [u usplit1 usplit2...] [v vsplit1 vsplit2 ...] + +Splits a given face in parametric space and puts the result into the given parameter result. +Returns the status of split face. +
Example
+ +# split face f by parameter u = 5 +splitface r f u 5 +== Splitting by   U:   ,5 +== Status:  DONE1 + +@subsubsection occt_2142243456_16720967171118 statshape + +Syntax:      statshape shape [particul] + +Returns the number of sub-shapes, which compose the given shape. For example, the number of solids, number of faces etc.  It also returns the number of geometrical objects or sub-shapes with a specified type, example, number of free faces, number of C0 surfaces. The last parameter becomes out of date. +
Example
+ +statshape a +== Count     Item +== -----     ---- +== 402     Edge (oriented) +== 402     Edge (Shared) +== 74      Face +== 74      Face (Free) +== 804     Vertex (Oriented) +== 402     Vertex (Shared) +== 78      Wire +== 4      Face with more than one wire +== 34     bspsur: BSplineSurface + +@subsubsection occt_2142243456_16720967171119 tolerance + +Syntax:      tolerance shape [mode:D v e f c] [tolmin tolmax:real] + +Returns tolerance (maximal, avg and minimal values)  of all given shapes and tolerance of their Faces, Edges and Vertices. If parameter tolmin or tolmax or both of them are given, then sub-shapes are returned as a result of analys of this shape, which satisfy the given tolerances. If a particular value of entity (all shapes (D) (v) vertices (e) edges (f) faces (c) combined (faces)) is given as the second parameter then only this group will be analyzed for tolerance. +
Example
+ +tolerance a +== Tolerance MAX=0.31512672416608001 AVG=0.14901359484722074 MIN=9.9999999999999995e-08 +== FACE    : MAX=9.9999999999999995e-08 AVG=9.9999999999999995e-08 MIN=9.9999999999999995e-08 +== EDGE    : MAX=0.31512672416608001 AVG=0.098691334511810405 MIN=9.9999999999999995e-08 +== VERTEX  : MAX=0.31512672416608001 AVG=0.189076074499648 MIN=9.9999999999999995e-08 + +tolerance a v 0.1 0.001 +==  Analysing Vertices gives 6 Shapes between tol1=0.10000000000000001 and tol2=0.001 , named tol_1 to tol_6 + + + +@subsection occt_2142243456_16720967172 Convertion commands +More detailed information about using here classes can be found into Shape Healing documentation. All this commands are created for testing. + +@subsubsection occt_2142243456_1672096717121 DT_ClosedSplit + +Syntax:      DT_ClosedSplit result shape + +Divides all closed faces in the shape (for example cone) and returns result of given shape into shape, which is given as parameter result. Number of faces in resulting shapes will be increased. +Note: Closed face – it’s face with one or more seam. +
Example
+ +DT_ClosetSplit r a + +@subsubsection occt_2142243456_1672096717122 DT_ShapeConvert, DT_ShapeConvertRev + +Syntax:      DT_ShapeConvert result shape convert2d convert3d +                  DT_ShapeConvertRev result shape convert2d convert3d + +Both commands are intended for the conversion of 3D, 2D curves to Bezier curves and surfaces to Bezier based surfaces. Parameters convert2d and convert3d take on a value 0 or 1. If the given value is 1, then the conversion will be performed, otherwise it will not be performed. The results are put into the shape, which is given as parameter Result. Command **DT_ShapeConvertRev **differs from **DT_ShapeConvert **by converting all elementary surfaces into surfaces of revolution first. +
Example
+ +DT_ShapeConvert r a 1 1 +== Status: DONE1 + +@subsubsection occt_2142243456_1672096717123 DT_ShapeDivide + +Syntax:      DT_ShapeDivide result shape tol + +Divides the shape with C1 criterion and returns the result of geometry conversion of a given shape into the shape, which is given as parameter result. This command illustrates how class ShapeUpgrade_ShapeDivideContinuity works. This class allows to convert geometry with a continuity less than the specified continuity to geometry with target continuity. If conversion is not possible then the geometrical object is split into several ones, which satisfy the given tolerance. It also returns the  status shape splitting: +OK      : no splitting was done +Done1 : Some edges were split +Done2 : Surface was split +Fail1    : Some errors occurred +
Example
+ +DT_ShapeDivide r a 0.001 +== Status: OK + +@subsubsection occt_2142243456_1672096717124 DT_SplitAngle + +Syntax:      DT_SplitAngle result shape [MaxAngle=95] + +Works with all revolved surfaces, like cylinders, surfaces of revolution etc. This command divides given revolved surfaces into segments so that each resulting segment covers not more than the given MaxAngle degrees and puts the result of splitting into the shape, which is given as parameter result. Values of returned status are given above. +This command illustrates how class ShapeUpgrade_ShapeDivideAngle works. +
Example
+ +DT_SplitAngle r a +== Status: DONE2 + +@subsubsection occt_2142243456_1672096717125 DT_SplitCurve + +Syntax:      DT_SplitCurve curve tol split(0|1) + +Divides the 3d curve with C1 criterion and returns the result of splitting of the given curve into a new curve. If the curve had been divided by segments, then each segment is put to an individual result.  This command can correct a given curve at a knot with the given tolerance, if it is impossible, then the given surface is split at that knot. If the last parameter is 1, then 5 knots are added at the given curve, and its surface is split by segments, but this will be performed not for all parametric spaces. +
Example
+ +DT_SplitCurve r c + +@subsubsection occt_2142243456_1672096717126 DT_SplitCurve2d + +Syntax:      DT_SplitCurve2d Curve Tol Split(0/1) + +Works just as DT_SplitCurve (see above), only with 2d curve. +
Example
+ +DT_SplitCurve2d r c + +@subsubsection occt_2142243456_1672096717127 DT_SplitSurface + +Syntax:      DT_SplitSurface result Surface|GridSurf tol split(0|1) + +Divides surface with C1 criterion and returns the result of splitting of a given surface into surface, which is given as parameter result. If the surface has been divided into segments, then each segment is put to an individual result.  This command can correct a given C0 surface at a knot with a given tolerance, if it is impossible, then the given surface is split at that knot. If the last parameter is 1, then 5 knots are added to the given surface, and its surface is split by segments, but this will be performed not for all parametric spaces. +**Example** +    +# split surface with name ‘su’ +DT_SplitSurface res su 0.1 1 +== single surf +== appel a SplitSurface::Init +== appel a SplitSurface::Build +== appel a SplitSurface::GlobalU/VKnots +== nb GlobalU;nb GlobalV=7 2 0 1 2 3 4 5 6.2831853072 0 1 +== appel a Surfaces +== transfert resultat +== res1_1_1 res1_2_1 res1_3_1 res1_4_1 res1_5_1 res1_6_1 + + +@subsubsection occt_2142243456_1672096717128 DT_ToBspl + +Syntax:      DT_ToBspl result shape + +Converts a surface of linear extrusion, revolution and offset surfaces into BSpline surfaces. Returns the result into the shape, which is given as parameter result. +**Example** +    +DT_ToBspl res sh +== error = 5.20375663162094e-08   spans = 10 +==  Surface is aproximated with continuity 2 + +@section occt_2142243456_1640587828 Performance evaluation commands + + +@subsubsection occt_2142243456_16405878281.1 VDrawSphere + +Syntax:      vdrawsphere shapeName Fineness [X=0.0 Y=0.0 Z=0.0] [Radius=100.0] [ToEnableVBO=1] [NumberOfViewerUpdate=1] [ToShowEdges=0] + +Calculates and displays in a given number of steps a sphere with given coordinates, radius and fineness. Returns the information about the properties of the sphere, the time and the amount of memory required to build it. + +This command can be used for visualization performance evaluation instead of the outdated Visualization Performance Meter. +**Example** + +vdrawsphere s 200 1 1 1 500 1 == Compute Triangulation... == NumberOfPoints: 39602 == NumberOfTriangles: 79200 == Amount of memory required for PolyTriangulation without Normals: 2 Mb == Amount of memory for colors: 0 Mb == Amount of memory for PolyConnect: 1 Mb == Amount of graphic card memory required: 2 Mb == Number of scene redrawings: 1 == CPU user time: 15.6000999999998950 msec == CPU system time: 0.0000000000000000 msec == CPU average time of scene redrawing: 15.6000999999998950 msec + + + +@section occt_2142243456_713659999 Extending Test Harness with custom commands + + +The following chapters explain how to extend Test Harness with custom commands and how to activate them using a plug-in mechanism. + + +@subsection occt_2142243456_7136599991 Custom command implementation + +Custom command implementation has not undergone any changes since the introduction of the plug-in mechanism. The syntax of every command should still be like in the following example. +**Example** + +static Standard_Integer myadvcurve(Draw_Interpretor& di, +Standard_Integer n, +char** a) +{ +... +} + +For examples of existing commands refer to Open CASCADE Technology (e.g. GeomliteTest.cxx). + + +@subsection occt_2142243456_7136599992 Registration of commands in Test Harness + +To become available in the Test Harness the custom command must be registered in it. This should be done as follows. +**Example** + +void MyPack::CurveCommands(Draw_Interpretor& theCommands) +{ +... +char* g = ;Advanced curves creation;; + + +                  theCommands.Add ( ;myadvcurve;, ;myadvcurve name p1 p2 p3 – +                              Creates my advanced curve from points;, +__FILE__, myadvcurve, g); +... +} + +@subsection occt_2142243456_7136599993 Creating a toolkit (library) as a plug-in + +All custom commands are compiled and linked into a dynamic library (.dll on Windows, or .so on Unix/Linux). To make Test Harness recognize it as a plug-in it must respect certain conventions. Namely, it must export function PLUGINFACTORY() accepting the Test Harness interpreter object (Draw_Interpretor). This function will be called when the library is dynamically loaded during the Test Harness session. +This exported function PLUGINFACTORY() must be implemented only once per library. +For convenience the DPLUGIN macro (defined in the Draw_PluginMacro.hxx file) has been provided. It implements the PLUGINFACTORY() function as a call to the Package::Factory() method and accepts Package as an argument. Respectively, this Package::Factory() method must be implemented in the library and activate all implemented commands. +**Example** + +#include Draw_PluginMacro.hxx + +void MyPack::Factory(Draw_Interpretor& theDI) +{ +... +// +MyPack::CurveCommands(theDI); +... +} + +// Declare entry point PLUGINFACTORY +DPLUGIN(MyPack) + + +@subsection occt_2142243456_7136599994 Creation of the plug-in resource file + +As mentioned above, the plug-in resource file must be compliant with Open CASCADE Technology requirements (see Resource_Manager.cdl file for details). In particular, it should contain keys separated from their values by a colon (;:;). +For every created plug-in there must be a key. For better readability and comprehension it is recommended to have some meaningful name. +Thus, the resource file must contain a line mapping this name (key) to the library name. The latter should be without file extension (.dll on Windows, .so on Unix/Linux) and without the ;lib; prefix on Unix/Linux. +For several plug-ins one resource file can be created. In such case, keys denoting plug-ins can be combined into groups, these groups - into their groups and so on (thereby creating some hierarchy). Any new parent key must have its value as a sequence of child keys separated by spaces, tabs or commas. Keys should form a tree without cyclic dependencies. +**Examples** (file MyDrawPlugin): + +! Hierarchy of plug-ins +ALL                : ADVMODELING, MESHING +DEFAULT            : MESHING +ADVMODELING        : ADVSURF, ADVCURV + +! Mapping from naming to toolkits (libraries) +ADVSURF            : TKMyAdvSurf +ADVCURV            : TKMyAdvCurv +MESHING            : TKMyMesh + + +For other examples of the plug-in resource file refer to the *;Plug-in resource file;* chapter above or to the $CASROOT/src/DrawPlugin file shipped with Open CASCADE Technology. + + +@subsection occt_2142243456_7136599995 Dynamic loading and activation + +Loading a plug-in and activating its commands is described in the *;Activation of the commands implemented in the plug-in;* chapter. + +The procedure consists in defining the system variables and using the pload commands in the Test Harness session. + +**Example** + +Draw[] set env(CSF_MyDrawPluginDefaults) /users/test + + diff --git a/dox/user_guides/draw_test_harness/images/draw_test_harness_image001.jpg b/dox/user_guides/draw_test_harness/images/draw_test_harness_image001.jpg new file mode 100644 index 0000000000000000000000000000000000000000..0e782cab77acff25a6036d54ba65f069d489b6a6 GIT binary patch literal 6870 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 m*2l*OQXOT`qhpC@6q? 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.opencascade.org/support/training/ +Foundation Classes provide a variety of general-purpose services such as automated dynamic memory management (manipulation of objects by handle), collections, exception handling, genericity by downcasting and plug-in creation. +Foundation Classes include the following: + +Root Classes +------------ +Root classes are the basic data types and classes on which all the other classes are built. They provide: + * fundamental types such as Boolean, Character, Integer or Real, + * safe handling of dynamically created objects, ensuring automatic deletion of unreferenced objects (see the Standard_Transient class), + * configurable optimized memory manager increasing the performance of applications that intensively use dynamically created objects, + * extended run-time type information (RTTI) mechanism facilitating the creation of complex programs, + * management of exceptions, + * encapsulation of C++ streams. +Root classes are mainly implemented in the **Standard** and **MMgt** packages. + +Strings +------- +Strings are classes that handle dynamically sized sequences of characters based on both ASCII (normal 8-bit character type) and Unicode (16-bit character type). +Strings may also be manipulated by handles, and consequently be shared. +Strings are implemented in the **TCollection** package. + +Collections +----------- +Collections are the classes that handle dynamically sized aggregates of data. +Collection classes are *generic*, that is, they define a structure and algorithms allowing to hold a variety of objects which do not necessarily inherit from a unique root class (similarly to C++ templates). When you need to use a collection of a given type of object, you must *instantiate* it for this specific type of element. Once this declaration is compiled, all functions available on the generic collection are available on your *instantiated class*. + +Collections include a wide range of generic classes such as run-time sized arrays, lists, stacks, queues, sets and hash maps. +Collections are implemented in the **TCollection** and **NCollection** packages. + +Collections of Standard Objects +------------------------------ +The **TColStd** package provides frequently used instantiations of generic classes from the **TCollection** package with objects from the **Standard** package or strings from the **TCollection** package. + +Vectors and Matrices +--------------------- + +These classes provide commonly used mathematical algorithms and basic calculations (addition, multiplication, transposition, inversion, etc.) involving vectors and matrices. + +Primitive Geometric Types +------------------------- +Open CASCADE Technology primitive geometric types are a STEP-compliant implementation of basic geometric and algebraic entities. +They provide: + * Descriptions of elementary geometric shapes: + * Points, + * Vectors, + * Lines, + * Circles and conics, + * Planes and elementary surfaces, + * Positioning of these shapes in space or in a plane by means of an axis or a coordinate system, + * Definition and application of geometric transformations to these shapes: + * Translations + * Rotations + * Symmetries + * Scaling transformations + * Composed transformations + * Tools (coordinates and matrices) for algebraic computation. + +Common Math Algorithms +---------------------- + +Open CASCADE Technology common math algorithms provide a C++ implementation of the most frequently used mathematical algorithms. +These include: + * Algorithms to solve a set of linear algebraic equations, + * Algorithms to find the minimum of a function of one or more independent variables, + * Algorithms to find roots of one, or of a set, of non-linear equations, + * Algorithms to find the eigen-values and eigen-vectors of a square matrix. + +Exceptions +---------- +A hierarchy of commonly used exception classes is provided, all based on class Failure, the root of exceptions. +Exceptions describe exceptional situations, which can arise during the execution of a function. With the raising of an exception, the normal course of program execution is abandoned. The execution of actions in response to this situation is called the treatment of the exception. +Quantities +---------- +These are various classes supporting date and time information and fundamental types representing most physical quantities such as length, area, volume, mass, density, weight, temperature, pressure etc. + +Application services +-------------------- +Foundation Classes also include implementation of several low-level services that facilitate the creation of customizable and user-friendly applications with Open CASCADE Technology. These include: + * Unit conversion tools, providing a uniform mechanism for dealing with quantities and associated physical units: check unit compatibility, perform conversions of values between different units and so on (see package UnitsAPI). + * Basic interpreter of expressions that facilitates the creation of customized scripting tools, generic definition of expressions and so on (see package ExprIntrp) + * Tools for dealing with configuration resource files (see package Resource) and customizable message files (see package Message), making it easy to provide a multi-language support in applications + * Progress indication and user break interfaces, giving a possibility even for low-level algorithms to communicate with the user in a universal and convenient way. + + +@subsection occt_fcug_1_2 Fundamental Concepts +An object-oriented language structures a system around data types rather than around the actions carried out on this data. In this context, an **object** is an **instance** of a data type and its definition determines how it can be used. Each data type is implemented by one or more classes, which make up the basic elements of the system. +In Open CASCADE Technology the classes are usually defined using CDL (CASCADE Definition Language) that provides a certain level of abstraction from pure C++ constructs and ensures a definite level of similarity in the implementation of classes. See *CDL User’s Guide* for more details. +This chapter introduces some basic concepts most of which are directly supported by CDL and used not only in Foundation Classes, but throughout the whole OCCT library. + +@subsubsection occt_fcug_1_2_1 Modules and toolkits +The whole OCCT library is organized in a set of modules. The first module, providing most basic services and used by all other modules, is called Foundation Classes and described by this manual. +Every module consists primarily of one or several toolkits (though it can also contain executables, resource units etc.). Physically a toolkit is represented by a shared library (e.g. .so or .dll). The toolkit is built from one or several packages. +@subsubsection occt_fcug_1_2_2 Packages +A **package** groups together a number of classes which have semantic links. For example, a geometry package would contain Point, Line, and Circle classes. A package can also contain enumerations, exceptions and package methods (functions). In practice, a class name is prefixed with the name of its package e.g. +*Geom_Circle*. +Data types described in a package *may *include one or more of the following data types: + * Enumerations + * Object classes + * Exceptions + * Pointers to other object classes +Inside a package, two data types *cannot *bear the same name. + +![](/user_guides/foundation_classes/images/foundation_classes_image003.jpg "Contents of a package") + +**Methods** are either **functions** or **procedures**. Functions return an object, whereas procedures only communicate by passing arguments. In both cases, when the transmitted object is an instance manipulated by a handle, its identifier is passed. There are three categories of methods: +* **Object constructor** Creates an instance of the described class. A class will have one or more object constructors with various different arguments or none. +* **Instance method** Operates on the instance which owns it. +* **Class method** Does not work on individual instances, only on the class itself. + +@subsubsection occt_fcug_1_2_3 Classes +The fundamental software component in object-oriented software development is the class. A class is the implementation of a **data type**. It defines its **behavior** (the services offered by its functions) and its **representation** (the data structure of the class – the fields, which store its data). + +Categories of Classes +------------------------ +Classes fall into three categories: + * Ordinary classes. + * Deferred classes. A **deferred class** cannot be instantiated. The purpose of having such classes is to have a given behavior shared by a hierarchy of classes and dependent on the implementation of the descendants. This is a way of guaranteeing a certain base of inherited behavior common to all the classes based on a particular deferred class. The C++ equivalent of a deferred CDL class is an abstract class. + * Generic classes. A **generic class** offers a set of functional behaviors to manipulate other data types. Instantiation of a generic class requires that a data type is given for its argument(s). The generic classes in CDL perform the same mission as template classes in C++. + + + + +@subsubsection occt_fcug_1_2_4 Genericity +Generic classes are implemented in two steps. First you declare the generic class to establish the model, then you instantiate this class by giving information about the generic types. + +Declaring a Generic Class +--------------------------- +The generic classes in Open CASCADE Technology are similar by their intent to C++ templates with explicit instantiation. +A generic class is declared in CDL as operating on data items of non-fixed types which are declared as arguments of the generic class. It is possible to put a restriction on these data types to be of subtype of some definite class. Definition of the generic class does not create new class type in C++ terms; it only defines a pattern for generation (instantiation) of the real classes. + +Instantiation of a Generic Class +-------------------------------- +When a generic class is instantiated, its argument types are substituted by actually existing data types (elementary types or classes). The result of instantiation is a new C++ class with an arbitrary name (specified in the instantiating declaration). By convention, the name of the instantiated class is usually constructed from the name of the generic class and names of actual argument types. As for any other class, the name of the class instantiating a generic type is prefixed by the name of the package in which instantiation is declared. +@code +class Array1OfReal instantiates Array1 from TCollection (Real); +@endcode + +This declaration located in a CDL file of the *TColStd* package defines a new C++ class *TColStd_Array1OfReal* as the instantiation of generic class *TCollection_Array1* for *Real* values. +More than one class can be instantiated from the same generic class with the same argument types. Such classes will be identical by implementation, but considered as two different classes by C++. +No class can inherit from a generic class. +A generic class can be a deferred class. A generic class can also accept a deferred class as its argument. In both these cases, any class instantiated from it will also be deferred. The resulting class can then be inherited by another class. + +Nested Generic Classes +---------------------- +It often happens that many classes are linked by a common generic type. This is the case when a base structure furnishes an iterator. In this context, it is necessary to make sure that the group of linked generic classes is indeed instantiated for the same type of object. In order to group the instantiation, you may declare certain classes as being nested. +When generic class is instantiated, its nested classes are instantiated as well. The name of the instantiation of the nested class is constructed from the name of that nested class and name of the main generic class, connected by ‘Of’. +@code +class MapOfReal instantiates Map from TCollection (Real,MapRealHasher); +@endcode +This declaration in *TColStd* defines not only class *TColStd_MapOfReal*, but also class *TColStd_MapIteratorOfMapOfReal*, which is instantiated from nested class *MapIterator* of the generic class *TCollection_Map*. Note that instantiation of the nested class is separate class, it is not nested class to the instantiation of the main class. +**Nested classes**, even though they are described as non-generic classes, are generic by construction being inside the class they are a member of. +@subsubsection occt_fcug_1_2_5 Inheritance +The purpose of inheritance is to reduce the development workload. The inheritance mechanism allows a new class to be declared already containing the characteristics of an existing class. This new class can then be rapidly specialized for the task in hand. This avoids the necessity of developing each component “from scratch”. +For example, having already developed a class *BankAccount* you could quickly specialize new classes: *SavingsAccount, LongTermDepositAccount, MoneyMarketAccount, RevolvingCreditAccount*, etc.... +The corollary of this is that when two or more classes inherit from a parent (or ancestor) class, all these classes guarantee as a minimum the behavior of their parent (or ancestor). For example, if the parent class BankAccount contains the method Print which tells it to print itself out, then all its descendent classes guarantee to offer the same service. +One way of ensuring the use of inheritance is to declare classes at the top of a hierarchy as being **deferred**. In such classes, the methods are not implemented. This forces the user to create a new class which redefines the methods. This is a way of guaranteeing a certain minimum of behavior among descendent classes. + +@subsubsection occt_fcug_1_2_6 Categories of Data Types +The data types in Open CASCADE Technology fall into two categories: + * Data types manipulated by handle (or reference) + * Data types manipulated by value + +![](/user_guides/foundation_classes/images/foundation_classes_image004.jpg "Manipulation of data types") + +A data type is implemented as a class. The class not only defines its data representation and the methods available on instances, but it also suggests how the instance will be manipulated. + * A variable of a type manipulated by value contains the instance itself. + * A variable of a type manipulated by handle contains a reference to the instance. +The first examples of types manipulated by values are the predefined **primitive types**: *Boolean, Character, Integer, Real*, etc. +A variable of a type manipulated by handle which is not attached to an object is said to be **null**. To reference an object, we instantiate the class with one of its constructors. For example, in C++: + +~~~~~ +Handle(myClass) m = new myClass; +~~~~~ + +In Open CASCADE Technology, the Handles are specific classes that are used to safely manipulate objects allocated in the dynamic memory by reference, providing reference counting mechanism and automatic destruction of the object when it is not referenced. + +@subsubsection occt_fcug_1_2_7 Exceptions +The behavior of any object is implemented by the methods, which were defined in its class declaration. The definition of these methods includes not only their signature (their programming interface) but also their domain of validity. +This domain is expressed by **exceptions**. Exceptions are raised under various error conditions. This mechanism is a safeguard of software quality. + +@subsubsection occt_fcug_1_2_8 Persistence and Data Schema +The data schema is the structure used by an application to store its data. Data schemas consist of persistent classes. +An object is called **persistent** if it can be permanently stored. Thus, the object can be reused at a later date by the application, which created it, or by another application. +In order for an object to be persistent for CDL, its type must be declared as inheriting from the class *Standard_Persistent* or have a parent class inheriting from the *Standard_Persistent* class. Note that classes inheriting from *Standard_Persistent* are handled by a reference. +Objects instantiated from classes which inherit from the Standard_Storable class cannot themselves be stored individually, but they can be stored as fields of an object which inherits from *Standard_Persistent*. Note that objects inheriting from *Standard_Storable* are handled by a value. + +@section occt_fcug_2 Basics +This chapter deals with basic services such as memory management, programming with handles, primitive types, exception handling, genericity by downcasting and plug-in creation. +@subsection occt_fcug_2_1 Data Types +@subsubsection occt_fcug_2_1_1 Primitive Types +The primitive types are predefined in the language and they are **manipulated by value**. +Some of these primitives inherit from the **Storable** class. This means they can be used in the implementation of persistent objects, either contained in entities declared within the methods of the object, or they form part of the internal representation of the object. +The primitives inheriting from *Standard_Storable* are the following: +* **Boolean** is used to represent logical data. It may have only two values: *Standard_True* and *Standard_False*. +* **Character** designates any ASCII character. +* **ExtCharacter** is an extended character. +* **Integer** is a whole number. +* **Real** denotes a real number (i.e. one with whole and a fractional part, either of which may be null). +* **ShortReal** is a real with a smaller choice of values and memory size. +There are also non-Storable primitives. They are: +* **CString** is used for literal constants. +* **ExtString** is an extended string. +* **Address** represents a byte address of undetermined size. +The services offered by each of these types are described in the **Standard** Package. +The table below presents the equivalence existing between C++ fundamental types and OCCT primitive types. + +**Table 1: Equivalence between C++ Types and OCCT Primitive Types** +|C++ Types | OCCT Types | +|----------:|------------:| +|int | Standard_Integer | +| double | Standard_Real | +|float | Standard_ShortReal | +|unsigned int | Standard_Boolean | +|char | Standard_Character | +| short | Standard_ExtCharacter | +| char* | Standard_CString | +| void* | Standard_Address | +|short* | Standard_ExtString | + +* pointer + + +**Reminder of the classes listed above:** + +* Standard_Integer: fundamental type representing 32-bit integers yielding negative, positive or null values. **Integer** is implemented as a **typedef** of the C++ **int** fundamental type. As such, the algebraic operations +, -, *, / as well as the ordering and equivalence relations <, <=, ==, !=, >=, > are defined on it. +* Standard_Real: fundamental type representing real numbers with finite precision and finite size. **Real** is implemented as a **typedef** of the C++ **double** (double precision) fundamental type. As such, the algebraic operations +, -, *, /, unary- and the ordering and equivalence relations <, <=, ==, !=, >=, > are defined on reals. +* Standard_ShortReal: fundamental type representing real numbers with finite precision and finite size. **ShortReal** is implemented as a **typedef** of the C++ **float** (simple precision) fundamental type. As such, the algebraic operations +, -, *, /, unary- and the ordering and equivalence relations <, <=, ==, !=, >=, > are defined on reals. +* Standard_Boolean: **Boolean** is a fundamental type representing logical expressions. It has two values, false and true. **Boolean** is implemented as a **typedef** of the C++ **unsigned int** fundamental type. As such, the algebraic operations and, or, xor, not as well as equivalence relations ==, != are defined on Booleans. +* Standard_Character: **Character** is a fundamental type representing the normalized ASCII character set. It may be assigned the values of the 128 ASCII characters. **Character** is implemented as a **typedef** of the C++ **char** fundamental type. As such, the ordering and equivalence relations <, <=, ==, !=, >=, > are defined on characters using the order of the ASCII chart (ex: A B). +* Standard_ExtCharacter: **ExtCharacter** is a fundamental type representing the Unicode character set. It is a 16-bit character type. **ExtCharacter** is implemented as a **typedef** of the C++ **short** fundamental type. As such, the ordering and equivalence relations <, <=, ==, !=, >=, > are defined on extended characters using the order of the UNICODE chart (ex: A B). +* Standard_CString: **CString** is a fundamental type representing string literals. A string literal is a sequence of ASCII (8 bits) characters enclosed in double quotes. **CString** is implemented as a **typedef** of the C++ **char* ** fundamental type. +* Standard_Address : **Address** is a fundamental type representing a generic pointer. **Address** is implemented as a **typedef** of the C++ **void* ** fundamental type. +* Standard_ExtString : **ExtString** is a fundamental type representing string literals as sequences of Unicode (16 bits) characters. **ExtString** is implemented as a **typedef** of the C++ **short* ** fundamental type. + +@subsubsection occt_fcug_2_1_2 Types manipulated by value +There are three categories of types which are manipulated by value: + * Primitive types + * Enumerated types + * Types defined by classes not inheriting from Standard_Persistent or Standard_Transient, whether directly or not. +Types which are manipulated by value behave in a more direct fashion than those manipulated by handle and thus can be expected to perform operations faster, but they cannot be stored independently in a file. + +![](/user_guides/foundation_classes/images/foundation_classes_image005.jpg "Manipulation of a data type by value") + +Types that are known to the schema (i.e. they are either **primitives**or they inherit from **Storable**) and are manipulated by value, can be stored inside a persistent object as part of the representation. Only in this way can a “manipulated by value” object be stored in a file. + + + +@subsubsection occt_fcug_2_1_3 Types manipulated by reference (handle) +There are two categories of types which are manipulated by handle: + * Types defined by classes inheriting from the **Persistent**class, which are therefore storable in a file. + * Types defined by classes inheriting from the **Transient**class. + +![](/user_guides/foundation_classes/images/foundation_classes_image006.jpg "Manipulation of a data type by reference") + +@subsubsection occt_fcug_2_1_4 Summary of properties + +The following table summarizes how various data types are handled and stored. + +| | Manipulated by handle | Manipulated by value | +|--------:|----------------------:|---------------------:| +| storable | Persistent | Primitive, Storable (if nested in a persistent class)| +|temporary | Transient | Other | + + +@subsection occt_fcug_2_2 Programming with Handles +@subsubsection occt_fcug_2_2_1 Handle Definition +A handle may be compared with a C++ pointer. Several handles can reference the same object. Also, a single handle may reference several objects, but only one at a time. To have access to the object it refers to, the handle must be de-referenced just as with a C++ pointer. +Transient and Persistent classes may be manipulated either with handles or with values. Handles which reference non-persistent objects are called non-storable handles; therefore, a persistent object cannot contain a non-storable handle. + +Organization of Classes +----------------------- +Classes used with handles are persistent or transient. +Classes that inherit from *Standard_Transient* are transient while classes that inherit from *Standard_Persistent* are persistent. +In this chapter we will discuss only transient classes and relevant handles. Persistent classes and their handles are organized in a similar manner. +Class *Standard_Transient* is a root of a big hierarchy of OCCT classes that are said to be operable by handles. It provides a reference counter field, inherited by all its descendant classes, that is used by associated *Handle()* classes to track a number of handles pointing to this instance of the object. +For every class derived (directly or indirectly) from *Transient*, CDL extractor creates associated class *Handle()* whose name is the same as the name of that class prefixed by *Handle_*. Open CASCADE Technology provides pre-processor macro *Handle()* that produces a name of a *Handle()* class for a given transient class name. + +Using a Handle +-------------- + +A handle is characterized by the object it references. +Before performing any operation on a transient object, you must declare the handle. +For example, if Point and Line are two transient classes from the Geom package, you would write: +~~~~~ +Handle(Geom_Point) p1, p2; +~~~~~ +Declaring a handle creates a null handle that does not refer to any object. The handle may be checked to be null by its method *IsNull()*. To nullify a handle, use method *Nullify()*. +To initialize a handle, either a new object should be created or the value of another handle can be assigned to it, on condition that their types are compatible. +**Note** that handles should only be used for object sharing. For all local operations, it is advisable to use classes manipulated by values. + +@subsubsection occt_fcug_2_2_2 Type Management + +General +------- + +Open CASCADE Technology provides a means to describe the hierarchy of data types in a generic way, with a possibility to check the exact type of the given object at run-time (similarly to C++ RTTI). For every class type derived from *Standard_Transient*, CDL extractor creates a code instantiating single instance of the class *Standard_Type* (type descriptor) that holds information on that type: its name and list of ancestor types. +That instance (actually, a handle on it) is returned by the virtual method *DynamicType()* of the class derived from *Standard_Transient*. The other virtual method *IsKind()* provides a means to check whether a given object has specified type or inherits it. +In order to refer to the type descriptor object for a given class type, use macros *STANDARD_TYPE()* with argument being a name of the class. + +Type Conformity +--------------- +The type used in the declaration of a handle is the static type of the object, the type seen by the compiler. A handle can reference an object instantiated from a subclass of its static type. Thus, the dynamic type of an object (also called the actual type of an object) can be a descendant of the type which appears in the handle declaration through which it is manipulated. +Consider the persistent class *CartesianPoint*, a sub-class of *Point*; the rule of type conformity can be illustrated as follows: + +~~~~~ +Handle (Geom_Point) p1; +Handle (Geom_CartesianPoint) p2; +p2 = new Geom_CartesianPoint; +p1 = p2;  // OK, the types are compatible +~~~~~ + + +The compiler sees p1 as a handle to *Point* though the actual object referenced by *p1* is of the *CartesianPoint* type. + +Explicit Type Conversion +------------------------ + +According to the rule of type conformity, it is always possible to go up the class hierarchy through successive assignments of handles. On the other hand, assignment does not authorize you to go down the hierarchy. Consequently, an explicit type conversion of handles is required. +A handle can be converted explicitly into one of its sub-types if the actual type of the referenced object is a descendant of the object used to cast the handle. If this is not the case, the handle is nullified (explicit type conversion is sometimes called a “safe cast”). Consider the example below. + +~~~~~~ +Handle (Geom_Point) p1; +Handle (Geom_CartesianPoint) p2, p3; +p2 = new Geom_CartesianPoint; +p1 = p2; // OK, standard assignment +p3 = Handle (Geom_CartesianPoint)::DownCast (p1); +// OK, the actual type of p1 is CartesianPoint, although the static type of the handle is Point +~~~~~~ + +If conversion is not compatible with the actual type of the referenced object, the handle which was “cast” becomes null (and no exception is raised). So, if you require reliable services defined in a sub-class of the type seen by the handle (static type), write as follows: + +~~~~~~ +void MyFunction (const Handle(A) & a) +{ +  Handle(B) b = Handle(B)::Downcast(a); +  if (! b.IsNull()) { +    // we can use “b” if class B inherits from A +  } +  else { +    // the types are incompatible +  } +} +~~~~~~ +Downcasting is used particularly with collections of objects of different types; however, these objects should inherit from the same root class. +For example, with a sequence of SequenceOfTransient transient objects and two classes A and B that both inherit from Standard_Transient, you get the following syntax: + +~~~~~ +Handle (A) a; +Handle (B) b; +Handle (Standard_Transient) t; +SequenceOfTransient s; +a = new A; +s.Append (a); +b = new B; +s.Append (b); +t = s.Value (1); +// here, you cannot write: +// a = t; // ERROR ! +// so you downcast: +a = Handle (A)::Downcast (t) +if (! a.IsNull()) { +        // types are compatible, you can use a +} +else { +       // the types are incompatible +} +~~~~~ + +@subsubsection occt_fcug_2_2_3 Using Handles to Create Objects +To create an object which is manipulated by handle, declare the handle and initialize it with the standard C++ **new** operator, immediately followed by a call to the constructor. The constructor can be any of those specified in the source of the class from which the object is instanced. + +~~~~~ +Handle (Geom_CartesianPoint) p; +p = new Geom_CartesianPoint (0, 0, 0); +~~~~~ + +Unlike for a pointer, the **delete** operator does not work on a handle; the referenced object is automatically destroyed when no longer in use. + +@subsubsection occt_fcug_2_2_4 Invoking Methods +Once you have a handle on a persistent or transient object, you can use it like a pointer in C++. To invoke a method which acts on the referenced object, you translate this method by the standard *arrow* operator, or alternatively, by function call syntax when this is available. +To test or to modify the state of the handle, the method is translated by the *dot* operator. +The example below illustrates how to access the coordinates of an (optionally initialized) point object: + +~~~~~ +Handle (Geom_CartesianPoint) centre; +Standard_Real x, y, z; +if (centre.IsNull()) { +  centre = new PGeom_CartesianPoint (0, 0, 0); +} +centre->Coord(x, y, z); +~~~~~ + +The example below illustrates how to access the type object of a Cartesian point: + +~~~~~ +Handle(Standard_Transient) p = new Geom_CartesianPoint(0.,0.,0.); +if ( p->DynamicType() == STANDARD_TYPE(Geom_CartesianPoint) ) +  cout << ;Type check OK; << endl; +else +  cout << ;Type check FAILED; << endl;   +~~~~~ + +*NullObject* exception will be raised if a field or a method of an object is accessed via a *Null* handle. + +Invoking Class Methods +---------------------- +A class method is called like a static C++ function, i.e. it is called by the name of the class of which it is a member, followed by the “::” operator and the name of the method. + +For example, we can find the maximum degree of a Bezier curve: + +~~~~~ +Standard_Integer n; +n = Geom_BezierCurve::MaxDegree(); +~~~~~ + +@subsubsection occt_fcug_2_2_5 Handle de-allocation +Before you delete an object, you must ensure it is no longer referenced. To reduce the programming load related to this management of object life, the delete function in Open CASCADE Technology is secured by a **reference counter** of classes manipulated by handle. A handle automatically deletes an object when it is no longer referenced. Normally you never call the delete operator explicitly on instances of subclasses of Standard_Transient. +When a new handle to the same object is created, the reference counter is incremented. When the handle is destroyed, nullified, or reassigned to another object, that counter is decremented. The object is automatically deleted by the handle when reference counter becomes 0. +The principle of allocation can be seen in the example below. + +~~~~~ +... +{ +Handle (TColStd_HSequenceOfInteger) H1 = new TColStd_HSequenceOfInteger; +  // H1 has one reference and corresponds to 48 bytes of memory +  { +    Handle (TColStd_HSequenceOfInteger) H2; +    H2 = H1; // H1 has two references +    if (argc == 3) { +      Handle (TColStd_HSequenceOfInteger) H3; +      H3 = H1; +      // Here, H1 has three references +      ... +    } +    // Here, H1 has two references +  } +  // Here, H1 has 1 reference +} +// Here, H1 has no reference and the referred TColStd_HSequenceOfInteger object is deleted. +~~~~~ + +Cycles +------ +Cycles appear if two or more objects reference each other by handles (stored as fields). In this condition automatic destruction will not work. +Consider for example a graph, whose objects (primitives) have to know the graph object to which they belong, i.e. a primitive must have a reference to complete graph object. If both primitives and the graph are manipulated by handle and they refer to each other by keeping a handle as a field, the cycle appears. +The graph object will not be deleted when the last handle to it is destructed in the application, since there are handles to it stored inside its own data structure (primitives). +There are two approaches how to avoid such situation: + * Use C++ pointer for one kind of references, e.g. from a primitive to the graph + * Nullify one set of handles (e.g. handles to a graph in primitives) when a graph object needs to be destroyed + +@subsubsection occt_fcug_2_2_6 Creating Transient Classes without CDL + +Though generation of Handle class and related C++ code is normally performed by CDL extractor, it is also possible to define a class managed by handle without CDL. To facilitate that, several macros are provided in the file Standard_DefineHandle.hxx: + +* **DEFINE_STANDARD_HANDLE(class_name,ancestor_name)** - declares Handle class for a class *class_name* that inherits class *ancestor_name* (for instance, *Standard_Transient*). This macro should be put in a header file; the declaration of the handle to a base class must be available (usually put before or after the declaration of the class *class_name*, or into a separate header file). +* **IMPLEMENT_STANDARD_HANDLE(class_name,ancestor_name)** - implements method *DownCast()* of the *Handle* class. Should be located in a C++ file (normally the file where methods of the class *class_name* are implemented). +* **DEFINE_STANDARD_RTTI(class_name)** - declares methods required for RTTI in the class *class_name* declaration; should be in public: section. +* **IMPLEMENT_STANDARD_RTTIEXT(class_name,ancestor_name)** - implements above methods. Usually put into the C++ file implementing class class_name. +Note that it is important to ensure correctness of macro arguments, especially the ancestor name, otherwise the definition may be inconsistent (no compiler warnings will be issued in case of mistake). + +In *Appli_ExtSurface.hxx* file: +~~~~~ +#include +class Appli_ExtSurface : public Geom_Surface +{ +. . . +public: +  DEFINE_STANDARD_RTTI(Appli_ExtSurface) +} +DEFINE_STANDARD_HANDLE(Appli_ExtSurface,Geom_Surface) +~~~~~ + +In *Appli_ExtSurface.cxx* file: +~~~~~ +#include +IMPLEMENT_STANDARD_HANDLE(Appli_ExtSurface,Geom_Surface) +IMPLEMENT_STANDARD_RTTIEXT(Appli_ExtSurface,Geom_Surface) +~~~~~ + + +@subsection occt_fcug_2_3 Memory Management in Open CASCADE Technology +In the course of a work session, geometric modeling applications create and delete a considerable number of C++ objects allocated in the dynamic memory (heap). In this context, performance of standard functions for allocating and de-allocating memory may be not sufficient. For this reason, Open CASCADE Technology employs a specialized memory manager implemented in the Standard package. + +@subsubsection occt_fcug_2_3_1. Usage +To use the Open CASCADE Technology memory manager to allocate memory in a C code, just use method *Standard::Allocate()* instead of *malloc()* and method *Standard::Free()* instead of *free()*. In addition, method *Standard::Reallocate()* is provided to replace C function *realloc()*. +In C++, operators *new()* and *delete()* for a class may be defined so as to allocate memory using *Standard::Allocate()* and free it using *Standard::Free()*. In that case all objects of that class and all inherited classes will be allocated using the OCCT memory manager. +CDL extractor defines *new()* and *delete()* in this way for all classes declared with CDL. Thus all OCCT classes (apart from a few exceptions) are allocated using the OCCT memory manager. +Since operators *new()* and *delete()* are inherited, this is also true for any class derived from an OCCT class, for instance, for all classes derived from *Standard_Transient*. +**NOTE** +It is possible (though not recommended unless really unavoidable) to redefine *new()* and *delete()* functions for some class inheriting Standard_Transient. If that is done, the method *Delete()* should be also redefined to apply operator *delete* to *this* pointer. This will ensure that appropriate *delete()* function will be called, even if the object is manipulated by a handle to a base class. + +@subsubsection occt_fcug_2_3_2 Configuring the memory manager +The OCCT memory manager may be configured to apply different optimization techniques to different memory blocks (depending on their size), or even to avoid any optimization and use C functions *malloc()* and *free()* directly. +The configuration is defined by numeric values of the following environment variables: + * *MMGT_OPT*: if set to 0 (default) every memory block is allocated in C memory heap directly (via *malloc()* and *free()* functions). In this case, all other options except for *MMGT_CLEAR* are ignored; if set to 1 the memory manager performs optimizations as described below; if set to 2, Intel ® TBB optimized memory manager is used. + * *MMGT_CLEAR*: if set to 1 (default), every allocated memory block is cleared by zeros; if set to 0, memory block is returned as it is. + * *MMGT_CELLSIZE*: defines the maximal size of blocks allocated in large pools of memory. Default is 200. + * *MMGT_NBPAGES*: defines the size of memory chunks allocated for small blocks in pages (operating-system dependent). Default is 1000. + * *MMGT_THRESHOLD*: defines the maximal size of blocks that are recycled internally instead of being returned to the heap. Default is 40000. + * *MMGT_MMAP*: when set to 1 (default), large memory blocks are allocated using memory mapping functions of the operating system; if set to 0, they will be allocated in the C heap by *malloc()*. + * MMGT_REENTRANT: when set to 1 (default), all calls to the optimized memory manager will be secured against possible simultaneous access from different execution threads. This variable should be set in any multithreaded application that uses an optimized memory manager (*MMGT_OPT=1*) and has more than one thread potentially calling OCCT functions. If set to 0, OCCT memory management and exception handling routines will skip the code protecting from possible concurrency in multi-threaded environment. This can yield some performance gain in some applications, but can lead to unpredictable results if used in a multithreaded application. +**NOTE** +For applications that use OCCT memory manager from more than one thread, on multiprocessor hardware, it is recommended to use options *MMGT_OPT=2* and *MMGT_REENTRANT=1*. +@subsubsection occt_fcug_2_3_3 Implementation details +When *MMGT_OPT* is set to 1, the following optimization techniques are used: + * Small blocks with a size less than *MMGT_CELLSIZE*, are not allocated separately. Instead, a large pools of memory are allocated (the size of each pool is *MMGT_NBPAGES* pages). Every new memory block is arranged in a spare place of the current pool. When the current memory pool is completely occupied, the next one is allocated, and so on. +In the current version memory pools are never returned to the system (until the process finishes). However, memory blocks that are released by the method *Standard::Free()* are remembered in the free lists and later reused when the next block of the same size is allocated (recycling). + * Medium-sized blocks, with a size greater than *MMGT_CELLSIZE* but less than *MMGT_THRESHOLD*, are allocated directly in the C heap (using *malloc()* and *free()*). When such blocks are released by the method *Standard::Free()* they are recycled just like small blocks. +However, unlike small blocks, the recycled medium blocks contained in the free lists (i.e. released by the program but held by the memory manager) can be returned to the heap by method *Standard::Purge()*. + * Large blocks with a size greater than *MMGT_THRESHOLD*, including memory pools used for small blocks, are allocated depending on the value of *MMGT_MMAP*: if it is 0, these blocks are allocated in the C heap; otherwise they are allocated using operating-system specific functions managing memory mapped files. +Large blocks are returned to the system immediately when *Standard::Free()* is called. +Benefits and drawbacks +---------------------- +The major benefit of the OCCT memory manager is explained by its recycling of small and medium blocks that makes an application work much faster when it constantly allocates and frees multiple memory blocks of similar sizes. In practical situations, the real gain on the application performance may be up to 50%. +The associated drawback is that recycled memory is not returned to the operating system during program execution. This may lead to considerable memory consumption and even be misinterpreted as a memory leak. To minimize this effect, the method Standard::Purge() shall be called after the completion of memory-intensive operations. +The overhead expenses induced by the OCCT  memory manager are: + * size of every allocated memory block is rounded up to 8 bytes (when MMGT_OPT is 0 (default), the rounding is defined by the CRT; the typical value for 32-bit platforms is 4 bytes) + * additional 4 bytes (or 8 on 64-bit platforms) are allocated in the beginning of every memory block to hold its size (or address of the next free memory block when recycled in free list) only when MMGT_OPT is 1 +Note that these overheads may be greater or less than overheads induced by the C heap  memory manager, so overall memory consumption may be greater in either optimized or standard modes, depending on circumstances. +As a general rule, it is advisable to allocate memory through significant blocks. In this way, you can work with blocks of contiguous data, and processing is facilitated for the memory page manager. +In multithreaded mode (*MMGT_REENTRANT=1*), the OCCT memory manager uses mutex to lock access to free lists, therefore it may have less performance than non-optimized mode in situations when different threads often make simultaneous calls to the memory manager. The reason is that modern implementations of malloc() and free() employ several allocation arenas and thus avoid delays waiting mutex release, which are possible in such situations. + +@subsection occt_fcug_2_4 Exception Handling +Exception handling provides a means of transferring control from a given point in a program being executed to an **exception handler **associated with another point previously executed. +A method may raise an exception which interrupts its normal execution and transfers control to the handler catching this exception. +Open CASCADE Technology provides a hierarchy of exception classes with a root class being class Standard_Failure from the Standard package. The CDL extractor generates exception classes with standardized interface. +Open CASCADE Technology also provides support for converting system signals (such as access violation or division by zero) to exceptions, so that such situations can be safely handled with the same uniform approach. +However, in order to support this functionality on various platforms, some special methods and workarounds are used. Though the implementation details are hidden and handling of OCCT exceptions is done basically in the same way as with C++, some peculiarities of this approach shall be taken into account and some rules must be respected. +The following paragraphs describe recommended approaches for using exceptions when working with Open CASCADE Technology. +@subsubsection occt_fcug_2_4_1 Raising an Exception + +“C++ like” Syntax +----------------- +To raise an exception of a definite type method Raise() of the appropriate exception class shall be used. +~~~~~ +DomainError::Raise(“Cannot cope with this condition”); +~~~~~ + +raises an exception of DomainError type with the associated message “Cannot cope with this condition”, the message being optional. This exception may be caught by a handler of some DomainError type as follows: +~~~~~ +try { +  OCC_CATCH_SIGNALS +  // try block +} +catch(DomainError) { +// handle DomainError exceptions here +} +~~~~~ + +Regular usage +------------- +Exceptions should not be used as a programming technique, to replace a “goto” statement for example, but as a way to protect methods against misuse. The caller must make sure its condition is such that the method can cope with it. +Thus, + * No exception should be raised during normal execution of an application. + * A method which may raise an exception should be protected by other methods allowing the caller to check on the validity of the call. +For example, if you consider the TCollection_Array1 class used with: + * a Value function to extract an element + * a Lower function to extract the lower bound of the array + * an Upper function to extract the upper bound of the array, +then, the Value function may be implemented as follows: + +~~~~~ +Item TCollection_Array1::Value (const Standard_Integer&index) const +{ +  // where r1 and r2 are the lower and upper bounds of the array +  if(index r1 || index > r2) { +    OutOfRange::Raise(“Index out of range in Array1::Value”); +  } +  return contents[index]; +} +~~~~~ + +Here validity of the index is first verified using the Lower and Upper functions in order to protect the call. +Normally the caller ensures the index being in the valid range before calling Value(). In this case the above implementation of Value is not optimal since the test done in Value is time-consuming and redundant. +It is a widely used practice to include that kind of protections in a debug build of the program and exclude in release (optimized) build. To support this practice, the macros Raise_if() are provided for every OCCT exception class: +~~~~~ +_Raise_if(condition, “Error message”); +~~~~~ +where ErrorTypeName is the exception type, condition is the logical expression leading to the raise of the exception, and Error message is the associated message.  +The entire call may be removed by defining one of the pre-processor symbols No_Exception or No_ at compile-time: + +~~~~~ +#define No_Exception /* remove all raises */ +~~~~~ + +Using this syntax, the Value function becomes: + +~~~~~ +Item TCollection_Array1::Value (const Standard_Integer&index) const +     { +  OutOfRange_Raise_if(index r1 || index > r2, +                      “index out of range in Array1::Value”); +  return contents[index]; +} +~~~~~ + +@subsubsection occt_fcug_2_4_2 Handling an Exception +When an exception is raised, control is transferred to the nearest handler of a given type in the call stack, that is: + * the handler whose try block was most recently entered and not yet exited, + * the handler whose type matches the raise expression. +A handler of T exception type is a match for a raise expression with an exception type of E if: + * T and E are of the same type, or + * T is a supertype of E. +In order to handle system signals as exceptions, make sure to insert macro OCC_CATCH_SIGNALS somewhere in the beginning of the relevant code. The recommended location for it is first statement after opening brace of try {} block. +As an example, consider the exceptions of type NumericError, Overflow, Underflow and ZeroDivide where NumericError is the supertype of the three others. + +~~~~~ +void f(1) + { +  try { +    OCC_CATCH_SIGNALS +    // try block +  } +  catch(Standard_Overflow) { // first handler +    // ... +  } +  catch(Standard_NumericError) { // second handler +    // ... +  } +} +~~~~~ + +Here, the first handler will catch exceptions of Overflow type and the second one – exceptions of NumericError type and all exceptions derived from it, including Underflow and Zerodivide. +The handlers are checked in order of appearance, from the nearest to the most distant try block, until one matches the raise expression. For a try block, it would be a mistake to place a handler for a base exception type ahead of a handler for its derived type since that would ensure that the handler for the derived exception would never be invoked. + +~~~~~ +void f(1) +{ +  int i = 0; +  { +    try { +      OCC_CATCH_SIGNALS +      g(i);// i is accessible +    } +    // statement here will produce compile-time errors ! +    catch(Standard_NumericError) { +      // fix up with possible reuse of i +    } +    // statement here may produce unexpected side effect +  } +  . . . +} +~~~~~ + +The exceptions form a hierarchy tree completely separated from other user defined classes. One exception of type Failure is the root of the entire exception hierarchy. Thus, using a handler with Failure type catches any OCCT exception. It is recommended to set up such a handler in the main routine. +The main routine of a program would look like this: + +~~~~~ +#include +#include +#include +int main (int argc, char* argv[]) +{ +  try { +    OCC_CATCH_SIGNALS +    // main block +    return 0; +  } +  catch(Standard_Failure) { +    Handle(Standard_Failure) error = Standard_Failure::Caught (); +    cout error end1; +  } +  return 1; +} +~~~~~ + +In this example function Caught is a static member of Failure that returns an exception object containing the error message built in the raise expression. Note that this method of accessing a raised object is used in Open CASCADE Technology instead of usual C++ syntax (receiving the exception in catch argument). + +**NOTE** +Though standard C++ scoping rules and syntax apply to try block and handlers, note that on some platforms Open CASCADE Technology may be compiled in compatibility mode when exceptions are emulated by long jumps (see below). In this mode it is required that no statement precedes or follows any handler. Thus it is highly recommended to always include a try block into additional {} braces. Also this mode requires that header file Standard_ErrorHandler.hxx be included in your program before a try block, otherwise it may fail to handle Open CASCADE Technology exceptions; furthermore catch() statement does not allow passing exception object as argument. + +Catching signals +---------------- +In order for the application to be able to catch system signals (access violation, division by zero, etc.) in the same way as other exceptions, the appropriate signal handler shall be installed in the runtime by the method +OSD::SetSignal(); +Normally this method is called in the beginning of the main() function. It installs a handler that will convert system signals into OCCT exceptions. +In order to actually convert signals to exceptions, macro OCC_CATCH_SIGNALS shall be inserted in the source code. The typical place where this macro is put is beginning of the try{} block which catches such exceptions. + +@subsubsection occt_fcug_2_4_3 Implementation details +The exception handling mechanism in Open CASCADE Technology is implemented in different ways depending on the preprocessor macros NO_CXX_EXCEPTIONS and OCC_CONVERT_SIGNALS, which shall be consistently defined by compilation procedures for both Open CASCADE Technology and user applications: +1. On Windows and DEC, these macros are not defined by default, and normal C++ exceptions are used in all cases, including throwing from signal handler. Thus the behavior is as expected in C++. +2. On SUN and Linux, macro OCC_CONVERT_SIGNALS is defined by default. The C++ exception mechanism is used for catching exceptions and for throwing them from normal code. Since it is not possible to throw C++ exception from system signal handler function, that function makes a long jump to the nearest (in the execution stack) invocation of macro OCC_CATCH_SIGNALS, and only there the C++ exception gets actually thrown. The macro OCC_CATCH_SIGNALS is defined in the file Standard_ErrorHandler.hxx. Therefore, including this file is necessary for successful compilation of a code containing this macro. +This mode differs from standard C++ exception handling only for signals: + + macro OCC_CATCH_SIGNALS is necessary (besides call to OSD::SetSignal() described above) for conversion of signals into exceptions; + + the destructors for automatic C++ objects created in the code after that macro and till the place where signal is raised will not be called in case of signal, since no C++ stack unwinding is performed by long jump. +3.On SUN and Linux Open CASCADE Technology can also be compiled in compatibility mode (which was default till Open CASCADE Technology 6.1.0). In that case macro NO_CXX_EXCEPTIONS is defined and the C++ exceptions are simulated with C long jumps. As a consequence, the behavior is slightly different from that expected in the C++ standard. +While exception handling with NO_CXX_EXCEPTIONS is very similar to C++ by syntax, it has a number of peculiarities that should be taken into account: + * try and catch are actually macros defined in the file Standard_ErrorHandler.hxx. Therefore, including this file is necessary for handling OCCT exceptions; + * due to being a macro, catch cannot contain a declaration of the exception object after its type; only type is allowed in the catch statement. Use method Standard_Failure::Caught() to access an exception object; + * catch macro may conflict with some STL classes that might use catch(…) statements in their header files. So STL headers should not be included after Standard_ErrorHandler.hxx; + * Open CASCADE Technology try/catch block will not handle normal C++ exceptions; however this can be achieved using special workarounds; + * the try macro defines a C++ object that holds an entry point in the exception handler. Therefore if exception is raised by code located immediately after the try/catch block but on the same nesting level as *try*, it may be handled by that *catch*. This may lead to unexpected behavior, including infinite loop. To avoid that, always surround the try/catch block in {} braces; + * the destructors of the C++ objects allocated on the stack after handler initialization are not called by exception raising. +In general, for writing platform-independent code it is recommended to insert macros OCC_CATCH_SIGNALS in try {} blocks or other code where signals may happen. For compatibility with previous versions of Open CASCADE Technology the limitations described above for NO_CXX_EXCEPTIONS shall be assumed. + +@subsection occt_fcug_2_5 Plug-In Management +@subsubsection occt_fcug_2_5_1 Distribution by Plug-Ins +A plug-in is a component that can be loaded dynamically into a client application, not requiring to be directly linked to it. The plug-in is not bound to its client, i.e. the plug-in knows only how its connection mechanism is defined and how to call the corresponding services. +A plug-in can be used to: + * implement the mechanism of a *driver*, i.e dynamically changing a driver implementation according to the current transactions (for example, retrieving a document stored in another version of an application), + * restrict processing resources to the minimum required (for example, it does not load any application services at run-time as long as the user does not need them), + * facilitate development de-synchronization (an application can be delivered with base functions while some advanced capabilities will be added as plug-ins when they are available). +The plug-in is identified with the help of the global universal identifier (GUID). The GUID includes lower case characters and cannot end with a blank space. +Once it has been loaded, the call to the services provided by the plug-in is direct (the client is implemented in the same language as the plug-in). + +C++ Plug-In Implementation +--------------------------- +The C++ plug-in implements a service as an object with functions defined in an abstract class (this abstract class and its parent classes with the GUID are the only information about the plug-in implemented in the client application). The plug-in consists of a sharable library including a method named Factory which creates the C++ object (the client cannot instantiate this object because the plug-in implementation is not visible). +Foundation classes provide in the package **Plugin** a method named Load(), which enables the client to access the required service through a library. +That method reads the information regarding available plug-ins and their locations from the resource file Plugin found by environment variable CSF_PluginDefaults: + +~~~~~ +$CSF_PluginDefaults/.Plugin +~~~~~ + +The Load method looks for the library name in the resource file or registry through its GUID, for example, on UNIX: +~~~~~ +! METADATADRIVER whose value must be OS or DM. + +! FW +a148e300-5740-11d1-a904-080036aaa103.Location: + +libFWOSPlugin.so +a148e300-5740-11d1-a904-080036aaa103.CCL: +/adv_44/CAS/BAG/FW-K4C/inc/FWOS.ccl + +! FWDM +a148e301-5740-11d1-a904-080036aaa103.Location: +libFWDMPlugin.so +a148e301-5740-11d1-a904-080036aaa103.CCL: +/adv_44/CAS/BAG/DESIGNMANAGER-K4C/inc/DMAccess.ccl|/ +adv_44/CAS/BAG/DATABASE-K4C/inc/FWDMCommands.ccl +a148e301-5740-11d1-a904-080036aaa103.Message: /adv_44/CAS/ +BAG/DESIGNMANAGER-K4C/etc/locale/DMAccess + +! Copy-Paste +5ff7dc00-8840-11d1-b5c2-00a0c9064368.Location: +libCDMShapeDriversPlugin.so +5ff7dc01-8840-11d1-b5c2-00a0c9064368.Location: +libCDMShapeDriversPlugin.so +5ff7dc02-8840-11d1-b5c2-00a0c9064368.Location: +libCDMShapeDriversPlugin.so +5ff7dc03-8840-11d1-b5c2-00a0c9064368.Location: +libCDMShapeDriversPlugin.so +5ff7dc04-8840-11d1-b5c2-00a0c9064368.Location: +libCDMShapeDriversPlugin.so + +! Plugs 2d plotters: +d0d722a2-b4c9-11d1-b561-0000f87a4710.location: FWOSPlugin +d0d722a2-b4c9-11d1-b561-0000f87a4710.CCL: /adv_44/CAS/BAG/ +VIEWERS-K4C/inc/CCLPlotters.ccl +d0d722a2-b4c9-11d1-b561-0000f87a4710.Message: /adv_44/CAS/ +BAG/VIEWERS-K4C/etc/locale/CCLPlotters + +!SHAPES +e3708f72-b1a8-11d0-91c2-080036424703.Location: +libBRepExchangerPlugin.so +e3708f72-b1a8-11d0-91c2-080036424703.CCL: /adv_44/CAS/BAG/ +FW-K4C/inc/BRep.ccl +~~~~~ + + +Then the Load method loads the library according to the rules of the operating system of the host machine (for example, by using environment variables such as LD_LIBRARY_PATH with Unix and PATH with Windows). After that it invokes the Factory method to return the object which supports the required service. +The client may then call the functions supported by this object. + +C++ Client Plug-In Implementation +---------------------------------- +To invoke one of the services provided by the plug-in, you may call the Plugin::ServiceFactory global function with the Standard_GUID of the requested service as follows: + +~~~~~ +Handle(FADriver_PartStorer)::DownCast +(PlugIn::ServiceFactory +(PlugIn_ServiceId(yourStandardGUID))) +~~~~~ + +Let us take **FAFactory.cxx** as an example: + +~~~~~ +#include + +#include +#include +#include +#include +#include +#include +#include + +PLUGIN(FAFactory) + +static Standard_GUID +       StorageDriver(“45b3c690-22f3-11d2-b09e-0000f8791463”); +static Standard_GUID +       RetrievalDriver(“45b3c69c-22f3-11d2-b09e-0000f8791463”); +static Standard_GUID +       Schema(“45b3c6a2-22f3-11d2-b09e-0000f8791463”); + +//====================================================== +// function : Factory +// purpose : +//====================================================== + +Handle(Standard_Transient) FAFactory::Factory(const Standard_GUID& aGUID) +{ +  if(aGUID == StorageDriver) { +    cout “FAFactory : Create store driver” endl; +    static Handle(FADriver_PartStorer) sd = new FADriver_PartStorer(); +    return sd; +  } + +  if(aGUID == RetrievalDriver) { +    cout “FAFactory : Create retrieve driver” endl; +    static Handle(FADriver_PartRetriever) +    rd = new FADriver_PartRetriever(); +    return rd; +  } + +  if(aGUID == Schema) { +    cout “FAFactory : Create schema” endl; +    static Handle(FirstAppSchema) s = new FirstAppSchema(); +    return s; +  } + +  Standard_Failure::Raise(“FAFactory: unknown GUID”); +  Handle(Standard_Transient) t; +  return t; +} +~~~~~ + +Without using the Software Factory +------------------------------- + +To create a factory without using the Software Factory, define a **dll **project under Windows or a library under UNIX by using a source file as specified above. The **FAFactory **class is implemented as follows: + +~~~~~ +#include +#include +class Standard_Transient; +class Standard_GUID; +class FAFactory { +public: +  Standard_EXPORT static Handle_Standard_Transient +                  Factory(const Standard_GUID& aGUID) ; +  . . . +}; +~~~~~ + + +@section occt_fcug_3 Collections, Strings and Unit Conversion +@subsection occt_fcug_3_1. Collections +@subsubsection occt_fcug_3_1_1 Overview +The **Collections** component contains the classes that handle dynamically sized aggregates of data. They include a wide range of collections such as arrays, lists and maps. +Collections classes are *generic*, that is, they can hold a variety of objects which do not necessarily inherit from a unique root class. When you need to use a collection of a given type of object you must *instantiate* it for this specific type of element. Once this declaration is compiled, all the functions available on the generic collection are available on your *instantiated class*. Note however: + * Each collection directly used as an argument in OCCT public syntax is instantiated in an OCCT component. + * The **TColStd** package (**Collections of Standard Objects** component) provides numerous instantiations of these generic collections with objects from the **Standard** package or from the **Strings** component. +The **Collections** component provides a wide range of generic collections: + * *Arrays*are generally used for a quick access to the item, however an array is a fixed sized aggregate. + * *Sequences* are variable-sized structures, they avoid the use of large and quasi-empty arrays. A sequence item is longer to access than an array item: only an exploration in sequence is effective (but sequences are not adapted for numerous explorations). Arrays and sequences are commonly used as data structures for more complex objects. + * On the other hand, *maps *are dynamic structures where the size is constantly adapted to the number of inserted items and the access time for an item is effective. Maps structures are commonly used in cases of numerous explorations: they are typically internal data structures for complex algorithms. *Sets *generate the same results as maps but computation time is considerable. + * *Lists, queues *and *stacks *are minor structures similar to sequences but with other exploration algorithms. +Most collections follow *value semantics*: their instances are the actual collections, not *handles *to a collection. Only arrays and sequences may also be manipulated by handle, and therefore shared. + +@subsubsection occt_fcug_3_1_2 Generic general-purpose Aggregates + +TCollection_Array1 +------------------ +Unidimensional arrays similar to C arrays, i.e. of fixed size but dynamically dimensioned at construction time. +As with a C array, the access time for an **Array1 **indexed item is constant and is independent of the array size. Arrays are commonly used as elementary data structures for more complex objects. +**Array1** is a generic class which depends on **Item**, the type of element in the array. +**Array1** indexes start and end at a user-defined position. Thus, when accessing an item, you must base the index on the lower and upper bounds of the array. + +TCollection_Array2 +------------------ +Bi-dimensional arrays of fixed size but dynamically dimensioned at construction time. +As with a C array, the access time for an **Array2 **indexed item is constant and is independent of the array size. Arrays are commonly used as elementary data structures for more complex objects. +**Array2 **is a generic class which depends on **Item**, the type of element in the array. +**Array2 **indexes start and end at a user-defined position. Thus, when accessing an item, you must base the index on the lower and upper bounds of the array. + +TCollection_HArray1 +------------------- +Unidimensional arrays similar to C arrays, i.e. of fixed size but dynamically dimensioned at construction time. +As with a C array, the access time for an **HArray1** or **HArray2** indexed item is constant and is independent of the array size. Arrays are commonly used as elementary data structures for more complex objects. +**HArray1** objects are *handles *to arrays. + * **HArray1 **arrays may be shared by several objects. + * You may use a **TCollection_Array1 **structure to have the actual array. +**HArray1 **is a generic class which depends on two parameters: + * **Item**, the type of element in the array, + * **Array**, the actual type of array handled by **HArray1**. This is an instantiation with **Item **of the **TCollection_Array1 **generic class. +**HArray1 **indexes start and end at a user-defined position. Thus, when accessing an item, you must base the index on the lower and upper bounds of the array. + +TCollection_HArray2 +------------------- +Bi-dimensional arrays of fixed size but dynamically dimensioned at construction time. +As with a C array, the access time for an **HArray2 **indexed item is constant and is independent of the array size. Arrays are commonly used as elementary data structures for more complex objects. +**HArray2 **objects are *handles *to arrays. + * **HArray2 **arrays may be shared by several objects. + * You may use a **TCollection_Array2 **structure to have the actual array. +**HArray2 **is a generic class which depends on two parameters: + * **Item**, the type of element in the array, + * **Array**, the actual type of array handled by **HArray2**. This is an instantiation with **Item **of the **TCollection_Array2 **generic class. + +TCollection_HSequence +--------------------- + +A sequence of items indexed by an integer. +Sequences have about the same goal as unidimensional arrays (**TCollection_HArray1**): they are commonly used as elementary data structures for more complex objects. But a sequence is a structure of *variable size*: sequences avoid the use of large and quasi-empty arrays. Exploring a sequence data structure is effective when the exploration is done *in sequence; *elsewhere a sequence item is longer to read than an array item. Note also that sequences are not effective when they have to support numerous algorithmic explorations: a map is better for that. +**HSequence **objects are *handles *to sequences. + * **HSequence **sequences may be shared by several objects. + * You may use a **TCollection_Sequence **structure to have the actual sequence. +**HSequence **is a generic class which depends on two parameters: + * **Item**, the type of element in the sequence, + * **Seq**, the actual type of sequence handled by **HSequence**. This is an instantiation with **Item **of the **TCollection_Sequence **generic class. + +TCollection_HSet +---------------- +Collection of non-ordered items without any duplicates. At each transaction, the system ckecks to see that there are no duplicates. +**HSet **objects are *handles *to sets. +**HSet **is a generic class which depends on two parameters: + * **Item**, the type of element in the set, + * **Set**, the actual type of set handled by **HSet**. This is an instantiation with **TCollection_Set **generic class. + +TCollection_List +---------------- +Ordered lists of non-unique objects which can be accessed sequentially using an iterator. +Item insertion in a list is very fast at any position. But searching for items by value may be slow if the list is long, because it requires a sequential search. +**List **is a generic class which depends on **Item**, the type of element in the structure. +Use a **ListIterator **iterator to explore a **List **structure. +An iterator class is automatically instantiated from the **TCollection_ListIterator **class at the time of instantiation of a **List **structure. +A sequence is a better structure when searching for items by value. +Queues and stacks are other kinds of list with a different access to data. + +TCollection_Queue +----------------- +A structure where items are added at the end and removed from the front. The first item entered will be the first removed (**FIFO** structure: First In First Out). **Queue** is a generic class which depends on **Item**, the type of element in the structure. + +TCollection_Sequence +-------------------- +A sequence of items indexed by an integer. +Sequences have about the same goal as unidimensional arrays (**TCollection_Array1**): they are commonly used as elementary data structures for more complex objects. But a sequence is a structure of *variable size*: sequences avoid the use of large and quasi-empty arrays. Exploring a sequence data structure is effective when the exploration is done *in sequence*; elsewhere a sequence item is longer to read than an array item. Note also that sequences are not effective when they have to support numerous algorithmic explorations: a map is better for that. +**Sequence **is a generic class which depends on **Item**, the type of element in the sequence. + +TCollection_Set +--------------- +Collection of non-ordered items without any duplicates. At each transaction, the system ckecks there are no duplicates. +A set generates the same result as a map. A map is more effective; so it is advisable to use maps instead of sets. +**Set **is a generic class which depends on **Item**, the type of element in the set. +Use a **SetIterator **iterator to explore a **Set **structure. + +TCollection_Stack +------------------ +A structure where items are added and removed from the top. The last item entered will be the first removed (;**LIFO**; structure: Last In First Out). +**Stack**is a generic class which depends on **Item**, the type of element in the structure. +Use a **StackIterator **iterator to explore a **Stack **structure. + +@subsubsection occt_fcug_3_1_3 Generic Maps + +Maps are dynamically extended data structures where data is quickly accessed with a key. TCollection_BasicMap is a root class for maps. + +General properties of maps +-------------------------- + +Map items may contain complex non-unitary data, thus it can be difficult to manage them with an array. The map allows a data structure to be indexed by complex data. +The size of a map is dynamically extended. So a map may be first dimensioned for a little number of items. Maps avoid the use of large and quasi-empty arrays. +The access time for a map item is much better than the one for a sequence, list, queue or stack item. It is comparable with the access time for an array item. It depends on the size of the map and on the quality of the user redefinable function (the *hashing function*) to find quickly where is the item. + +The performance of a map exploration may be better of an array exploration because the size of the map is adapted to the number of inserted items. +That is why maps are commonly used as internal data structures for algorithms. + +Definitions +----------- +A map is a data structure for which data are addressed by *keys*. +Once inserted in the map, a map item is referenced as an *entry *of the map. +Each entry of the map is addressed by a key. Two different keys address two different entries of the map. +The position of an entry in the map is called a *bucket*. +A map is dimensioned by its number of buckets, i.e. the maximum number of entries in the map. The performance of a map is conditioned by the number of buckets. +The *hashing function *transforms a key into a bucket index. The number of values that can be computed by the hashing function is equal to the number of buckets of the map. +Both the hashing function and the equality test between two keys are provided by a *hasher *object. +A map may be explored by a *map iterator*. This exploration provides only inserted entries in the map (i.e. non empty buckets). + +Collections of generic maps +------------------------ +The **Collections **component provides numerous generic derived maps. +These maps include automatic management of the number of *buckets*: they are automatically resized when the number of *keys *exceeds the number of buckets. If you have a fair idea of the number of items in your map, you can save on automatic resizing by specifying a number of buckets at the time of construction, or by using a resizing function. This may be considered for crucial optimization issues. +*Keys, items* and *hashers* are parameters of these generic derived maps. +**TCollection_MapHasher** class describes the functions required by any *hasher *which is to be used with a map instantiated from the **Collections **component. +An iterator class is automatically instantiated at the time of instantiation of a map provided by the **Collections **component if this map is to be explored with an iterator. Note that some provided generic maps are not to be explored with an iterator but with indexes (*indexed maps*). + +TCollection_DataMap +------------------- +A map used to store keys with associated items. An entry of **DataMap **is composed of both the key and the item. +The **DataMap **can be seen as an extended array where the keys are the indexes. +**DataMap **is a generic class which depends on three parameters: + * **Key **is the type of key for an entry in the map, + * **Item **is the type of element associated with a key in the map, + * **Hasher **is the type of hasher on keys. +Use a **DataMapIterator **iterator to explore a DataMap map. +An iterator class is automatically instantiated from the +**TCollection_DataMapIterator **generic class at the time of instantiation of a **DataMap **map. +**TCollection_MapHasher **class describes the functions required for a **Hasher **object. + +TCollection_DoubleMap +--------------------- +A map used to bind pairs of keys (Key1,Key2) and retrieve them in linear time. +Key1 is referenced as the *first key *of the **DoubleMap **and Key2 as the *second key*. +An entry of a **DoubleMap **is composed of a pair of two keys: the first key and the second key. +**DoubleMap **is a generic class which depends on four parameters: + * **Key1 **is the type of the first key for an entry in the map, + * **Key2 **is the type of the second key for an entry in the map, + * **Hasher1 **is the type of hasher on first keys, + * **Hasher2 **is the type of hasher on second keys. +Use a **DoubleMapIterator **to explore a **DoubleMap **map. +An iterator class is automatically instantiated from the **TCollection_DoubleMapIterator **class at the time of instantiation of a **DoubleMap **map. +**TCollection_MapHasher **class describes the functions required for a **Hasher1 **or a **Hasher2 **object. + +TCollection_IndexedDataMap +-------------------------- +A map to store keys with associated items and to bind an index to them. +Each new key stored in the map is assigned an index. Indexes are incremented as keys (and items) stored in the map. A key can be found by the index, and an index can be found by the key. No key but the last can be removed, so the indexes are in the range 1...Upper where Upper is the number of keys stored in the map. An item is stored with each key. +An entry of an **IndexedDataMap **is composed of both the key, the item and the index. An **IndexedDataMap **is an ordered map, which allows a linear iteration on its contents. It combines the interest: + * of an array because data may be accessed with an index, + * and of a map because data may also be accessed with a key. + +**IndexedDataMap **is a generic class which depends on three parameters: + * **Key **is the type of key for an entry in the map, + * **Item **is the type of element associated with a key in the map, + * **Hasher **is the type of hasher on keys. + +TCollection_IndexedMap +---------------------- +A map used to store keys and to bind an index to them. +Each new key stored in the map is assigned an index. Indexes are incremented as keys stored in the map. A key can be found by the index, and an index by the key. No key but the last can be removed, so the indexes are in the range 1...Upper where Upper is the number of keys stored in the map. +An entry of an **IndexedMap **is composed of both the key and the index. An **IndexedMap **is an ordered map, which allows a linear iteration on its contents. But no data is attached to the key. An **IndexedMap **is typically used by an algorithm to know if some action is still performed on components of a complex data structure. +**IndexedMap **is a generic class which depends on two parameters: + * **Key **is the type of key for an entry in the map, + * **Hasher **is the type of hasher on keys. + +TCollection_Map +--------------- + +A basic hashed map, used to store and retrieve keys in linear time. +An entry of a **Map **is composed of the key only. No data is attached to the key. A **Map **is typically used by an algorithm to know if some action is still performed on components of a complex data structure. +**Map **is a generic class which depends on two parameters: + * **Key **is the type of key in the map, + * **Hasher **is the type of hasher on keys. +Use a **MapIterator **iterator to explore a **Map **map. + +TCollection_MapHasher +--------------------- +A hasher on the *keys *of a map instantiated from the **Collections **component. +A hasher provides two functions: + * The *hashing function *(**HashCode**) transforms a *key *into a *bucket *index in the map. The number of values that can be computed by the hashing function is equal to the number of buckets in the map. + * **IsEqual **is the equality test between two keys. Hashers are used as parameters in generic maps provided by the **Collections **component. +**MapHasher **is a generic class which depends on the type of keys, providing that **Key **is a type from the **Standard **package. In such cases **MapHasher **may be directly instantiated with **Key**. Note that the package **TColStd **provides some of these instantiations. +Elsewhere, if **Key **is not a type from the **Standard **package you must consider **MapHasher **as a template and build a class which includes its functions, in order to use it as a hasher in a map instantiated from the **Collections **component. +Note that **TCollection_AsciiString **and **TCollection_ExtendedString **classes correspond to these specifications, in consequence they may be used as hashers: when **Key **is one of these two types you may just define the hasher as the same type at the time of instantiation of your map. + +@subsubsection occt_fcug_3_1_4 Iterators + +TCollection_BasicMapIterator +---------------------------- +Root class for map iterators. A map iterator provides a step by step exploration of all the entries of a map. + +TCollection_DataMapIterator +--------------------------- +Functions used for iterating the contents of a **DataMap **map. +A map is a non-ordered data structure. The order in which entries of a map are explored by the iterator depends on its contents and change when the map is edited. +It is not recommended to modify the contents of a map during the iteration: the result is unpredictable. + +TCollection_DoubleMapIterator +----------------------------- +Functions used for iterating the contents of a **DoubleMap **map. + +TCollection_ListIterator +------------------------ +Functions used for iterating the contents of a **List **data structure. +A **ListIterator **object can be used to go through a list sequentially, and as a bookmark to hold a position in a list. It is not an index, however. Each step of the iteration gives the *current position *of the iterator, to which corresponds the *current item *in the list. The *current position *is *undefined *if the list is empty, or when the exploration is finished. +An iterator class is automatically instantiated from this generic class at the time of instantiation of a **List **data structure. + +TCollection_MapIterator +------------------------ +Functions used for iterating the contents of a **Map **map. +An iterator class is automatically instantiated from this generic class at the time of instantiation of a **Map **map. + +TCollection_SetIterator +----------------------- +Functions used for iterating the contents of a **Set **data structure. +An iterator class is automatically instantiated from this generic class at the time of instantiation of a **Set **structure. + +TCollection_StackIterator +------------------------- +Functions used for iterating the contents of a **Stack **data structure. +An iterator class is automatically instantiated from this generic class at the time of instantiation of a **Stack **structure. + +@subsection occt_fcug_3_2 Collections of Standard Objects +@subsubsection occt_fcug_3_2_1 Overview +While generic classes of the **TCollection **package are the root classes that describe the generic purpose of every type of collection, classes effectively used are extracted from the **TColStd **package. +The **TColStd **and **TShort **packages provide frequently used instantiations of generic classes with objects from the **Standard **package or strings from the **TCollection **package. + +@subsubsection occt_fcug_3_2_2 Description +These instantiations are the following: + * Unidimensional arrays: instantiations of the **TCollection_Array1 **generic class with **Standard **Objects and **TCollection **strings. + * Bidimensional arrays: instantiations of the **TCollection_Array2 **generic class with **Standard **Objects. + * Unidimensional arrays manipulated by handles: instantiations of the **TCollection_HArray1 **generic class with **Standard **Objects and **TCollection **strings. + * Bidimensional arrays manipulated by handles: instantiations of the **TCollection_HArray2 **generic class with **Standard **Objects. + * Sequences: instantiations of the **TCollection_Sequence **generic class with **Standard **objects and **TCollection **strings. + * Sequences manipulated by handles: instantiations of the **TCollection_HSequence **generic class with **Standard **objects and **TCollection **strings. + * Lists: instantiations of the **TCollection_List **generic class with **Standard **objects. + * Queues: instantiations of the **TCollection_Queue **generic class with **Standard **objects. + * Sets: instantiations of the **TCollection_Set **generic class with **Standard **objects. + * Sets manipulated by handles: instantiations of the **TCollection_HSet **generic class with **Standard **objects. + * Stacks: instantiations of the **TCollection_Stack **generic class with **Standard **objects. + * Hashers on map keys: instantiations of the **TCollection_MapHasher **generic class with **Standard **objects. + * Basic hashed maps: instantiations of the **TCollection_Map **generic class with **Standard **objects. + * Hashed maps with an additional item: instantiations of the **TCollection_DataMap **generic class with **Standard **objects. + * Basic indexed maps: instantiations of the **TCollection_IndexedMap **generic class with **Standard **objects. + * Indexed maps with an additional item: instantiations of the **TCollection_IndexedDataMap **generic class with **Standard_Transient **objects. + * Class **TColStd_PackedMapOfInteger** provides alternative implementation of map of integer numbers, optimized for both performance and memory usage (it uses bit flags to encode integers, which results in spending only 24 bytes per 32 integers stored in optimal case). This class also provides Boolean operations with maps as sets of integers (union, intersection, subtraction, difference, checks for equality and containment). + +@subsection occt_fcug_3_3 NCollections +@subsubsection occt_fcug_3_3_1 Overview + +NCollection package allows to not use WOK development environment in projects. Though it is quite natural to develop a code based on OCCT in any environment accepted in the industry, there is still one limitation: the so-called OCCT generic classes provided in TCollection package require compilation of the definitions in the CDL language and therefore can only be instantiated in WOK development environment. + +The NCollection library provides a full replacement of all TCollection generic classes so that any OCCT collection could be instantiated via C++ template or macro definitions. It can be used in WOK as a package development unit, or in any other configuration, since it only uses the standard capabilities of C++ compiler. + +Macro definitions of these classes are stored in *NCollection_Define*.hxx* files. These definitions are now obsolete though still can be used, particularly for compatibility with the existing code. On the contrary, template classes in *NCollection_*.hxx* files are recommended, they are supported by OPEN CASCADE Company and further developed according to various needs. + +The technology used in this unit continues and complements the one offered in the header file Standard_DefineHandle – allowing to implement outside CDL the classes managed by Handle, also providing OCCT RTTI support. + +@subsubsection occt_fcug_3_3_2 Instantiation of collection classes + +Now we are going to implement the definitions from NCollection in the code, taking as an example a sequence of points (analogue of *TColgp_SequenceOfPnt*). + +Definition of a new collection class +------------------------------------ + +Let the header file be *MyPackage_SequenceOfPnt.hxx* : + +Template class instantiaton +~~~~~ +#include +#include +typedef NCollection_Sequence MyPackage_SequenceOfPnt; +~~~~~ + +Macro instantiation +~~~~~ +#include +#include +~~~~~ + +The following line defines the class "base collection of points" +~~~~~ +DEFINE_BASECOLLECTION(MyPackage_BaseCollPnt, gp_Pnt) +~~~~~ + +The following line defines the class MyPackage_SequenceOfPnt + +~~~~~ +DEFINE_SEQUENCE (MyPackage_SequenceOfPnt, MyPackage_BaseCollPnt , gp_Pnt) +~~~~~ + +Definition of a new collection class managed by Handle +------------------------------------------------------ + +It is necessary to provide relevant statements both in the header ( .hxx file) and the C++ source ( .cxx file). + +Header file MyPackage_HSequenceOfPnt.hxx: + +~~~~~ +#include +#include +~~~~~ + +The following line defines the class "base collection of points" + +~~~~~ +DEFINE_BASECOLLECTION(MyPackage_BaseCollPnt, gp_Pnt) +~~~~~ + +The following line defines the class MyPackage_SequenceOfPnt + +~~~~~ +DEFINE_SEQUENCE (MyPackage_SequenceOfPnt, MyPackage_BaseCollPnt, gp_Pnt) +~~~~~ + +The following line defines the classes MyPackage_HSequenceOfPnt and Handle(MyPackage_HSequenceOfPnt) + +~~~~~ +DEFINE_HSEQUENCE (MyPackage_HSequenceOfPnt, MyPackage_SequenceOfPnt) +~~~~~ + +Source code file will be MyPackage_HSequenceOfPnt.cxx or any other .cxx file (once in the whole project): + +~~~~~ +IMPLEMENT_HSEQUENCE (MyPackage_HSequenceOfPnt) +~~~~~ + +@subsubsection occt_fcug_3_3_3 Class architecture + +Architecture +------------ + +To understand the basic architecture of the classes instantiated from NCollection macros, please refer to the documentation on TCollection package, particularly to CDL files. Almost all API described there is preserved in NCollection. Changes are described in corresponding NCollection_Define*.hxx files. + +Nevertheless the internal structure of NCollection classes is more complex than that of TCollection ones, providing more capabilities. The advanced layer of architecture is described in the next chapter Features. + +There are two principal changes: +* In TCollection some classes ( Stack, List, Set, Map, DataMap, DoubleMap ) define the Iterator type, the name of Iterator being like MyPackage_DoubleMapIteratorOfDoubleMapOfIntegerReal. In NCollection each Iterator is always defined as subtype of the collection (MyPackage_DoubleMapOfIntegerReal::Iterator). +* Hashed collections (of type Map* ) require in TCollection that the special class Map*Hasher is defined. In NCollection it is only required that the global functions IsEqual and HashCode are defined. + +Interface to classes defined in CDL +----------------------------------- +The classes defined above can be used as types for fields, parameters of methods and return values in CDL definitions. In our example, if MyPackage is a CDL package, you will need to create the file MyPackage_SequenceOfPnt.hxx containing or including the above definitions, and then to add the line: imported SequenceOfPnt to file MyPackage.cdl; + +Then the new collection type can be used in any CDL definition under the name *SequenceOfPnt* from *MyPackage*. + +@subsubsection occt_fcug_3_3_4 New collection types + +There are 4 collection types provided as template classes: +* NCollection_Vector +* NCollection_UBTree +* NCollection_SparseArray +* NCollection_CellFilter + +Type Vector +----------- + +This type is implemented internally as a list of arrays of the same size. Its properties: +* Direct (constant-time) access to members like in Array1 type; data are allocated in compact blocks, this provides faster iteration. +* Can grow without limits, like List, Stack or Queue types. +* Once having the size LEN, it cannot be reduced to any size less than LEN – there is no operation of removal of items. + +Insertion in a Vector-type class is made by two methods: +* _SetValue(ind, theValue)_ – array-type insertion, where ind is the index of the inserted item, can be any non-negative number. If it is greater than or equal to Length(), then the vector is enlarged (its Length() grows). +* _Append(theValue)_ – list-type insertion equivalent to _myVec.SetValue(myVec.Length(), theValue)_ – incrementing the size of the collection. + +Other essential properties coming from List and Array1 type collections: +* Like in List, the method Clear() destroys all contained objects and releases the allocated memory. +* Like in Array1, the methods Value() and ChangeValue() return a contained object by index. Also, these methods have the form of overloaded operator (). + +Type UBTree +----------- + +The name of this type stands for “Unbalanced Binary Tree”. It stores the members in a binary tree of overlapped bounding objects (boxes or else). +Once the tree of boxes of geometric objects is constructed, the algorithm is capable of fast geometric selection of objects. The tree can be easily updated by adding to it a new object with bounding box. +The time of adding to the tree of one object is O(log(N)), where N is the total number of objects, so the time of building a tree of N objects is O(N(log(N)). The search time of one object is O(log(N)). + +Defining various classes inheriting NCollection_UBTree::Selector we can perform various kinds of selection over the same b-tree object. + +The object may be of any type allowing copying. Among the best suitable solutions there can be a pointer to an object, handled object or integer index of object inside some collection. The bounding object may have any dimension and geometry. The minimal interface of TheBndType (besides public empty and copy constructor and operator =) used in UBTree algorithm as follows: + +~~~~~ + class MyBndType + { + public: + inline void Add (const MyBndType& other); + // Updates me with other bounding type instance + + inline Standard_Boolean IsOut (const MyBndType& other) const; + // Classifies other bounding type instance relatively me + + inline Standard_Real SquareExtent() const; + // Computes the squared maximal linear extent of me (for a box it is the squared diagonal of the box). + }; + +This interface is implemented in types of Bnd package: Bnd_Box, Bnd_Box2d, Bnd_B2x, Bnd_B3x. + +To select objects you need to define a class derived from UBTree::Selector that should redefine the necessary virtual methods to maintain the selection condition. Usually this class instance is also used to retrieve selected objects after search. +The class UBTreeFiller is used to randomly populate an UBTree instance. The quality of a tree is better (considering the speed of searches) if objects are added to it in a random order trying to avoid the addition of a chain of nearby objects one following another. +Instantiation of UBTreeFiller collects objects to be added, and then adds them at once to the given UBTree instance in a random order using the Fisher-Yates algorithm. +Below is the sample code that creates an instance of NCollection_UBTree indexed by 2D boxes (Bnd_B2f), then a selection is performed returning the objects whose bounding boxes contain the given 2D point. + +~~~~~ +typedef NCollection_UBTree UBTree; +typedef NCollection_List ListOfSelected; +//! Tree Selector type +class MyTreeSelector : public UBTree::Selector +{ +public: + // This constructor initializes the selection criterion (e.g., a point) + + MyTreeSelector (const gp_XY& thePnt) : myPnt(thePnt) {} + // Get the list of selected objects + + const ListOfSelected& ListAccepted () const + { return myList; } + // Bounding box rejection - definition of virtual method. @return True if theBox is outside the selection criterion. + + Standard_Boolean Reject (const Bnd_B2f& theBox) const + { return theBox.IsOut(myPnt); } + // Redefined from the base class. Called when the bounding of theData conforms to the selection criterion. This method updates myList. + + Standard_Boolean Accept (const MyData& theData) + { myList.Append(theData); } + private: + gp_XY myPnt; + ListOfSelected myList; +}; +. . . +// Create a UBTree instance and fill it with data, each data item having the corresponding 2D box. + +UBTree aTree; +NCollection_UBTreeFiller aTreeFiller(aTree); +for(;;) { + const MyData& aData = …; + const Bnd_B2d& aBox = aData.GetBox(); + aTreeFiller.Add(aData, aBox); +} +aTreeFiller.Fill(); +. . . +// Perform selection based on ‘aPoint2d’ +MyTreeSelector aSel(aPoint2d); +aTree.Select(aSel); +const ListOfSelected = aSel.ListAccepted(); +~~~~~ + + +Type SparseArray +---------------- + +This type has almost the same features as Vector but it allows to store items having scattered indices. In Vector, if you set an item with index 1000000, the container will allocate memory for all items with indices in the range 0-1000000. In SparseArray, only one small block of items will be reserved that contains the item with index 1000000. + +This class can be also seen as equivalence of DataMap with the only one practical difference: it can be much less memory-expensive if items are small (e.g. Integer or Handle). + +This type has both interfaces of DataMap and Vector to access items. + +Type CellFilter +--------------- + +This class represents a data structure for sorting geometric objects in n-dimensional space into cells, with associated algorithm for fast checking of coincidence (overlapping, intersection, etc.) with other objects. It can be considered as a functional alternative to UBTree, as in the best case it provides the direct access to an object like in an n-dimensional array, while search with UBTree provides logarithmic law access time. + +@subsubsection occt_fcug_3_3_5 Features + +NCollection defines some specific features, in addition to the public API inherited from TCollection classes. + +Iterators +--------- +Every collection defines its Iterator class capable of iterating the members in some predefined order. Every Iterator is defined as a subtype of the particular collection type (e.g., MyPackage_StackOfPnt::Iterator ). The order of iteration is defined by a particular collection type. The methods of Iterator are: + +* _void Init (const MyCollection&)_ - initializes the iterator on the collection object; +* _Standard_Boolean More () const_ - makes a query if there is another non-iterated member; +* _void Next ()_ - increments the iterator; +* _const ItemType& Value () const_ - returns the current member; +* _ItemType& ChangeValue () const_ - returns the mutable current member + +~~~~~ +typedef Ncollection_Sequence +MyPackage_SequenceOfPnt +void Perform (const MyPackage_SequenceOfPnt& theSequence) +{ + MyPackage_SequenceOfPnt::Iterator anIter (theSequence); + for (; anIter.More(); anIter.Next()) { + const gp_Pnt aPnt& = anIter.Value(); +.... + } +} +This feature is present only for some classes in TCollection (Stack, List, Set, Map, DataMap, DoubleMap). In NCollection it is generalized. + + +Class BaseCollection +-------------------- + +There is a common abstract base class for all collections for a given item type (e.g., gp_Pnt). Developer X can arbitrarily name this base class like MyPackage_BaseCollPnt in the examples above. This name is further used in the declarations of any (non-abstract) collection class to designate the C++ inheritance. + +This base class has the following public API: +* abstract class Iterator as the base class for all Iterators descried above; +* _Iterator& CreateIterator () const_ - creates and returns the Iterator on this collection; +* _Standard_Integer Size () const_ - returns the number of items in this collection; +* void Assign (const NCollection_BaseCollection& theOther) - copies the contents of the Other to this collection object; + +These members enable accessing any collection without knowing its exact type. In particular, it makes possible to implement methods receiving objects of the abstract collection type: + +~~~~~ +#include +typedef NCollection_Map MyPackage_MapOfPnt; +typedef NCollection_BaseCollection MyPackage_BaseCollPnt; +MyPackage_MapOfPnt aMapPnt; +.... +gp_Pnt aResult = COG (aMapPnt); +.... +gp_Pnt COG(const MyPackage_BaseCollPnt& theColl) +{ + gp_XYZ aCentreOfGravity(0., 0., 0.); +// create type-independent iterator (it is abstract type instance) + MyPackage_BaseCollString::Iterator& anIter = theColl.CreateIterator(); + for (; anIter.More(); anIter.Next()) { + aCentreOfGravity += anIter.Value().XYZ(); + } + return aCentreOfGravity / theColl.Size(); +} +~~~~~ + +Note that there are fundamental differences between the shown type-independent iterator and the iterator belonging to a particular non-abstract collection: +* Type-independent iterator can only be obtained via the call CreateIterator(); the typed iterator - only via the explicit construction. +* Type-independent iterator is an abstract class, so it is impossible to copy it or to assign it to another collection object; the typed iterators can be copied and reassigned using the method Init() . +* Type-independent iterator is actually destroyed when its collection object is destroyed; the typed iterator is destroyed as any other C++ object in the corresponding C++ scope. + +The common point between them is that it is possible to create any number of both types of iterators on the same collection object. + +Heterogeneous Assign +-------------------- + +The semantics of the method Assign() has been changed in comparison to TCollection. In NCollection classes the method Assign() is virtual and it receives the object of the abstract BaseCollection class (see the previous section). Therefore this method can be used to assign any collection type to any other if only these collections are instantiated on the same ItemType. + +For example, conversion of Map into Array1 is performed like this: + +~~~~~ +#include +#include +typedef NCollection_Map MyPackage_MapOfPnt; +typedef NCollection_Array1 MyPackage_Array1OfPnt; +.... +MyPackage_MapOfPnt aMapPnt; +.... +MyPackage_Array1OfPnt anArr1Pnt (1, aMapPnt.Size()); +anArr1Pnt.Assign (aMapPnt); // heterogeneous assignment +~~~~~ + +There are some aspects to mention: +* Unlike in TCollection, in NCollection the methods Assign and operator= do not coincide. The former is a virtual method defined in the BaseCollection class. The latter is always defined in instance classes as a non-virtual inline method and it corresponds exactly to the method Assign in TCollection classes. Therefore it is always profitable to use operator= instead of Assign wherever the types on both sides of assignment are known. +* If the method Assign copies to Array1or Array2 structure, it first checks if the size of the array is equal to the number of items in the copied collection object. If the sizes differ, an exception is thrown, as in TCollection_Array1.gxx. +* Copying to Map, IndexedMap, DataMap and IndexedDataMap can bring about a loss of data: when two or more copied data items have the same key value, only one item is copied and the others are discarded. It can lead to an error in the code like the following: + +~~~~~ +MyPackage_Array1OfPnt anArr1Pnt (1, 100); +MyPackage_MapOfPnt aMapPnt; +.... +aMapPnt.Assign(anArr1Pnt); +anArr1Pnt.Assign(aMapPnt); +~~~~~ + +Objects of classes parameterised with two types (DoubleMap, DataMap and IndexedDataMap) cannot be assigned. Their method Assign throws the exception Standard_TypeMismatch (because it is impossible to check if the passed BaseCollection parameter belongs to the same collection type). + +Allocator +--------- + +All constructors of NCollection classes receive the Allocator Object as the last parameter. This is an object of a type managed by Handle, inheriting NCollection_BaseAllocator, with the following (mandatory) methods redefined: + +~~~~~ +Standard_EXPORT virtual void* Allocate (const size_t size); +Standard_EXPORT virtual void Free (void * anAddress); +~~~~~ + +It is used internally every time when the collection allocates memory for its item(s) and releases this memory. The default value of this parameter (empty Handle) designates the use of NCollection_BaseAllocator X where the functions Standard::Allocate and Standard::Free are called. Therefore if the user of NCollection does not specify any allocator as a parameter to the constructor of his collection, the memory management will be identical to the one in TCollection and other Open CASCADE Technology classes. + +Nevertheless, the it is possible to define a custom Allocator type to manage the memory in the most optimal or convenient way for his algorithms. + +As one possible choice, the class NCollection_IncAllocator is included. Unlike BaseAllocator, it owns all memory it allocates from the system. Memory is allocated in big blocks (about 20kB) and the allocator keeps track of the amount of occupied memory. The method Allocate just increments the pointer to non-occupied memory and returns its previous value. Memory is only released in the destructor of IncAllocator, the method Free is empty. If used efficiently, this Allocator can greatly improve the performance of OCCT collections. + + + +@subsection occt_fcug_3_4 Strings + +The **Strings **component provides services to manipulate character strings. +**Strings** are classes that handle dynamically sized sequences of characters based on both ASCII (normal 8-bit character type) and Unicode (16-bit character type). They provide editing operations with built-in memory management which make the relative objects easier to use than ordinary character arrays. +*Strings *may also be manipulated by *handle*, and therefore shared. + +@subsubsection occt_fcug_3_4_1 Examples +TCollection_AsciiString +----------------------- +A variable-length sequence of ASCII characters (normal 8-bit character type). It provides editing operations with built-in memory management to make **AsciiString **objects easier to use than ordinary character arrays. +**AsciiString **objects follow ;value semantics;, that is, they are the actual strings, not handles to strings, and are copied through assignment. You may use **HAsciiString **objects to get handles to strings. +TCollection_ExtendedString +-------------------------- +A variable-length sequence of ;extended; (UNICODE) characters (16-bit character type). It provides editing operations with built-in memory management to make **ExtendedString **objects easier to use than ordinary extended character arrays. +**ExtendedString **objects follow ;value semantics;, that is, they are the actual strings, not handles to strings, and are copied through assignment. You may use **HExtendedString **objects to get handles to strings. +TCollection_HAsciiString +------------------------ +A variable-length sequence of ASCII characters (normal 8-bit character type). It provides editing operations with built-in memory management to make **HAsciiString **objects easier to use than ordinary character arrays. +**HAsciiString **objects are *handles *to strings. + * **HAsciiString **strings may be shared by several objects. + * You may use an **AsciiString **object to get the actual string. +**HAsciiString **objects use an **AsciiString **string as a field. + +TCollection_HExtendedString +--------------------------- +A variable-length sequence of ;extended; (UNICODE) characters (16-bit character type). It provides editing operations with built-in memory management to make **ExtendedString **objects easier to use than ordinary extended character arrays. +**HExtendedString **objects are *handles *to strings. + * **HExtendedString **strings may be shared by several objects. + * You may use an **ExtendedString **object to get the actual string. +**HExtendedString **objects use an **ExtendedString **string as a field. + +@subsubsection occt_fcug_3_4_2 Conversion +Resource_Unicode +---------------- +Functions used to convert a non-ASCII *C string *given in ANSI, EUC, GB or SJIS +format, to a Unicode string of extended characters, and vice versa. + +@subsection occt_fcug_3_5 Unit Conversion + +The **UnitsAPI **global functions are used to convert a value from any unit into another unit. Conversion is executed among three unit systems: + * the **SI System**, + * the user’s **Local System**, + * the user’s **Current System**. +The **SI System **is the standard international unit system. It is indicated by *SI *in the signatures of the **UnitsAPI **functions. +The OCCT (former MDTV) System corresponds to the SI international standard but *the length unit and all its derivatives use the millimeter *instead of the meter. +Both systems are proposed by Open CASCADE Technology; the SI System is the standard option. By selecting one of these two systems, you define your **Local System **through the **SetLocalSystem **function. The **Local System **is indicated by *LS *in the signatures of the **UnitsAPI **functions. +The Local System units can be modified in the working environment. You define your **Current System **by modifying its units through the **SetCurrentUnit **function. The Current System is indicated by *Current *in the signatures of the **UnitsAPI **functions. +A physical quantity is defined by a string (example: LENGTH). + + +@section occt_occt_fcug_4 Math Primitives and Algorithms +@subsection occt_occt_fcug_4_1 Overview +Math primitives and algorithms available in Open CASCADE Technology include: + * Vectors and matrices + * Geometric primitives + * Math algorithms +@subsection occt_occt_fcug_4_2 Vectors and Matrices +The Vectors and Matrices component provides a C++ implementation of the fundamental types Matrix and Vector, currently used to define more complex data structures. The Vector and Matrix classes support vectors and matrices of real values with standard operations such as addition, multiplication, transposition, inversion etc. +Vectors and matrices have arbitrary ranges which must be defined at declaration time and cannot be changed after declaration. + +~~~~~ +math_Vector v(1, 3); +// a vector of dimension 3 with range (1..3) +math_Matrix m(0, 2, 0, 2); +// a matrix of dimension 3x3 with range (0..2, 0..2) +math_Vector v(N1, N2); +// a vector of dimension N2-N1+1 with range (N1..N2) +~~~~~ + +Vector and Matrix objects use value semantics. In other words, they cannot be shared and are copied through assignment. + +~~~~~ +math_Vector v1(1, 3), v2(0, 2); +v2 = v1; +// v1 is copied into v2. a modification of v1 does not affect v2 +~~~~~ + +Vector and Matrix values may be initialized and obtained using indexes which must lie within the range definition of the vector or the matrix. + +~~~~~ +math_Vector v(1, 3); +math_Matrix m(1, 3, 1, 3); +Standard_Real value; + +v(2) = 1.0; +value = v(1); +m(1, 3) = 1.0; +value = m(2, 2); +~~~~~ + +Some operations on Vector and Matrix objects may not be legal. In this case an exception is raised. Two standard exceptions are used: + * Standard_DimensionError exception is raised when two matrices or vectors involved in an operation are of incompatible dimensions. + * Standard_RangeError exception is raised if an access outside the range definition of a vector or of a matrix is attempted. + +~~~~~~ +math_Vector v1(1, 3), v2(1, 2), v3(0, 2); +v1 = v2; +// error: Standard_DimensionError is raised + +v1 = v3; +// OK: ranges are not equal but dimensions are +// compatible + +v1(0) = 2.0; +// error: Standard_RangeError is raised +~~~~~~ + +@subsection occt_occt_fcug_4_3 Primitive Geometric Types +@subsubsection occt_occt_fcug_4_3_1 Overview +Before creating a geometric object, you must decide whether you are in a 2d or in a 3d context and how you want to handle the object. +The *gp *package offers classes for both 2d and 3d objects which are handled by value rather than by reference. When this sort of object is copied, it is copied entirely. Changes in one instance will not be reflected in another. +@subsubsection occt_occt_fcug_4_3_2 gp +The *gp *package defines the basic non-persistent geometric entities used for algebraic calculation and basic analytical geometry in 2d & 3d space. It also provides basic transformations such as identity, rotation, translation, mirroring, scale transformations, combinations of transformations, etc. Entities are handled by value. +The available geometric entities are: + * 2d & 3d Cartesian coordinates (x, y, z) + * Matrices + * Cartesian points + * Vector + * Direction + * Axis + * Line + * Circle + * Ellipse + * Hyperbola + * Parabola + * Plane + * Infinite cylindrical surface + * Spherical surface + * Toroidal surface + * Conical surface. + +@subsection occt_occt_fcug_4_4 Collections of Primitive Geometric Types +Before creating a geometric object, you must decide whether you are in a 2d or in a 3d context and how you want to handle the object. +If you do not need a single instance of a geometric primitive but a set of them then the package which deals with collections of this sort of object, *TColgp*, will provide the necessary functionality. +In particular, this package provides standard and frequently used instantiations of generic classes with geometric objects. +@subsubsection occt_occt_fcug_4_4_1 TColgp +The *TColgp *package provides instantiations of the TCollection classes with the classes from *gp *i.e. *XY*, *XYZ*, *Pnt*, *Pnt2d*, *Vec*, *Vec2d*, *Lin*, *Lin2d*, *Circ*, *Circ2d.* +These are non-persistent classes. +@subsection occt_occt_fcug_4_5 Basic Geometric Libraries +There are various library packages available which offer a range of basic computations on curves and surfaces. +If you are dealing with objects created from the *gp *package, the useful algorithms are in the elementary curves and surfaces libraries - the *ElCLib *and *ElSLib *packages. +The *Precision *package describes functions for defining the precision criterion used to compare two numbers. +@subsubsection occt_occt_fcug_4_5_1 EICLib +Methods for analytic curves. A library of simple computations on curves from the *gp *package (Lines, Circles and Conics). Computes points with a given parameter. Computes the parameter for a point. +@subsubsection occt_occt_fcug_4_5_2 EISLib +Methods for analytic surfaces . A library of simple computations on surfaces from the package *gp *(Planes, Cylinders, Spheres, Cones, Tori). Computes points with a given pair of parameters. Computes the parameter for a point. There is a library for calculating normals on curves and surfaces. +@subsubsection occt_occt_fcug_4_5_3 Bnd +Package Bnd provides a set of classes and tools to operate with bounding boxes of geometric objects in 2d and 3d space. +@subsection occt_occt_fcug_4_6 Common Math Algorithms +The common math algorithms library provides a C++ implementation of the most frequently used mathematical algorithms. These include: + * Algorithms to solve a set of linear algebraic equations, + * Algorithms to find the minimum of a function of one or more independent variables, + * Algorithms to find roots of one, or of a set, of non-linear equations, + * An algorithm to find the eigenvalues and eigenvectors of a square matrix. +@subsubsection occt_occt_fcug_4_6_1 Implementation of Algorithms +All mathematical algorithms are implemented using the same principles. They contain: +A constructor performing all, or most of, the calculation, given the appropriate arguments. All relevant information is stored inside the resulting object, so that all subsequent calculations or interrogations will be solved in the most efficient way. +A function IsDone returning the boolean true if the calculation was successful. +A set of functions, specific to each algorithm, enabling all the various results to be obtained. +Calling these functions is legal only if the function IsDone answers true, otherwise the exception StdFail_NotDone is raised. +The example below demonstrates the use of the Gauss class, which implements the Gauss solution for a set of linear equations.The following definition is an extract from the header file of the class math_Gauss: + +~~~~~~ +class Gauss { +public: +  Gauss (const math_Matrix& A); +  Standard_Boolean IsDone() const; +  void Solve (const math_Vector& B, +  math_Vector& X) const; +}; +~~~~~~ + +Now the main program uses the Gauss class to solve the equations a*x1=b1 and a*x2=b2: + +~~~~~ +#include +#include +main () +{ +  math_Vector a(1, 3, 1, 3); +  math_Vector b1(1, 3), b2(1, 3); +  math_Vector x1(1, 3), x2(1, 3); +  // a, b1 and b2 are set here to the appropriate values +  math_Gauss sol(a);              // computation of the +  // LU decomposition of A +  if(sol.IsDone()) {              // is it OK ? +    sol.Solve(b1, x1);      // yes, so compute x1 +    sol.Solve(b2, x2);      // then x2 +    ... +  } +  else {                    // it is not OK: +    // fix up +    sol.Solve(b1, x1);            // error: +    // StdFail_NotDone is raised +  } +} +~~~~~ + +The next example demonstrates the use of the BissecNewton class, which implements a combination of the Newton and Bissection algorithms to find the root of a function known to lie between two bounds.The definition is an extract from the header file of the class math_BissecNewton: + +~~~~~ +class BissecNewton { + public: + BissecNewton (math_FunctionWithDerivative& f, + const Standard_Real bound1, + const Standard_Real bound2, + const Standard_Real tolx); + Standard_Boolean IsDone() const; + Standard_Real Root(); +}; +~~~~~ + +The abstract class math_FunctionWithDerivative describes the services which have to be implemented for the function f which is to be used by a BissecNewton algorithm. The following definition corresponds to the header file of the abstract class math_FunctionWithDerivative: + +~~~~~ +class math_FunctionWithDerivative { + public: + virtual Standard_Boolean Value + (const Standard_Real x, Standard_Real& f) = 0; + virtual Standard_Boolean Derivative + (const Standard_Real x, Standard_Real& d) = 0; + virtual Standard_Boolean Values + (const Standard_Real x, + Standard_Real& f, + Standard_Real& d) = 0; +}; +~~~~~ + +Now the test sample uses the BissecNewton class to find the root of the equation f(x)=x**2-4 in the interval [1.5, 2.5]:the function to solve is implemented in the class myFunction which inherits from the class math_FunctionWithDerivative,then the main program finds the required root. + +~~~~~ +#include +#include +class myFunction : public math_FunctionWithDerivative +{ +  Standard_Real coefa, coefb, coefc; + +  public: +    myFunction (const Standard_Real a, const Standard_Real b, +                const Standard_Real c) : +      coefa(a), coefb(b), coefc(c) +    {} + +    virtual Standard_Boolean Value (const Standard_Real x, +                                    Standard_Real& f) +    { +      f = coefa * x * x + coefb * x + coefc; +    } + +    virtual Standard_Boolean Derivative (const Standard_Real x, +                                         Standard_Real& d) +    { +      d = coefa * x * 2.0 + coefb; +    } + +    virtual Standard_Boolean Values (const Standard_Real x, +                                     Standard_Real& f, Standard_Real& d) +    { +      f = coefa * x * x + coefb * x + coefc; +      d = coefa * x * 2.0 + coefb; +    } +}; + +main() +{ +  myFunction f(1.0, 0.0, 4.0); +  math_BissecNewton sol(F, 1.5, 2.5, 0.000001); + if(Sol.IsDone()) { // is it OK ? +    Standard_Real x = sol.Root(); // yes. +  } +  else { // no +  } +~~~~~ + +@subsection occt_occt_fcug_4_7 Precision + +On the OCCT platform, each object stored in the database should carry its own precision value. This is important when dealing with systems where objects are imported from other systems as well as with various associated precision values. +The *Precision *package addresses the daily problem of the geometric algorithm developer: what precision setting to use to compare two numbers. Real number equivalence is clearly a poor choice. The difference between the numbers should be compared to a given precision setting. +Do not write _if (X1 == X2),_ instead write _if (Abs(X1-X2) < Precision)._ +Also, to order real numbers, keep in mind that _if (X1 < X2 - Precision)_ is incorrect. +_if (X2 - X1 > Precision)_ is far better when *X1 *and *X2 *are high numbers. +This package proposes a set of methods providing precision settings for the most commonly encountered situations. +In Open CASCADE Technology, precision is usually not implicit; low-level geometric algorithms accept precision settings as arguments. Usually these should not refer directly to this package. +High-level modeling algorithms have to provide a precision setting to the low level geometric algorithms they call. One way is to use the settings provided by this package. The high-level modeling algorithms can also have their own strategy for managing precision. As an example the Topology Data Structure stores precision values which are later used by algorithms. When a new topology is created, it takes the stored value. +Different precision settings offered by this package cover the most common needs of geometric algorithms such as *Intersection *and *Approximation*. +The choice of a precision value depends both on the algorithm and on the geometric space. The geometric space may be either: + * a ;real; space, 3d or 2d where the lengths are measured in meters, micron, inches, etc. + * a ;parametric; space, 1d on a curve or 2d on a surface where numbers have no dimension. +The choice of precision value for parametric space depends not only on the accuracy of the machine, but also on the dimensions of the curve or the surface. +This is because it is desirable to link parametric precision and real precision. If you are on a curve defined by the equation *P(t)*, you would want to have equivalence between the following: + +~~~~~ +Abs(t1-t2) < ParametricPrecision +Distance (P(t1),P(t2)) < RealPrecision. +~~~~~ + +@subsubsection occt_occt_fcug_4_7_1 The Precision package +The Precision package offers a number of package methods and default precisions for use in dealing with angles, distances, intersections, approximations, and parametric space. +It provides values to use in comparisons to test for real number equalities. + * Angular precision compares angles. + * Confusion precision compares distances. + * Intersection precision is used by intersection algorithms. + * Approximation precision is used by approximation algorithms. + * Parametric precision gets a parametric space precision from a 3D precision. + * *Infinite *returns a high number that can be considered to be infinite. Use *-Infinite *for a high negative number. + +@subsubsection occt_occt_fcug_4_7_2 Standard Precision values +This package provides a set of real space precision values for algorithms. The real space precisions are designed for precision to *0.1* nanometers. The only unit available is the millimeter. +The parametric precisions are derived from the real precisions by the *Parametric *function. This applies a scaling factor which is the length of a tangent to the curve or the surface. You, the user, provide this length. There is a default value for a curve with *[0,1] *parameter space and a length less than 100 meters. +The geometric packages provide Parametric precisions for the different types of curves. +The Precision package provides methods to test whether a real number can be considered to be infinite. + +Precision::Angular +------------------ +This method is used to compare two angles. Its current value is *Epsilon(2 * PI) *i.e. the smallest number *x *such that *2*PI + x *is different of *2* PI*. + +It can be used to check confusion of two angles as follows: +_Abs(Angle1 - Angle2) < Precision::Angular()_ + +It is also possible to check parallelism of two vectors (_Vec_ from _gp_) as follows _V1.IsParallel(V2,Precision::Angular())_ + +Note that *Precision::Angular()* can be used on both dot and cross products because for small angles the *Sine* and the *Angle* are equivalent. So to test if two directions of type *gp*_*Dir* are perpendicular, it is legal to use the following code: +_Abs(D1 * D2) < Precision::Angular()_ + +Precision::Confusion +-------------------- +This method is used to test 3D distances. The current value is *1.e-7*, in other words, 1/10 micron if the unit used is the millimeter. + +It can be used to check confusion of two points (_Pnt_ from _gp_) as follows: +_P1.IsEqual(P2,Precision::Confusion())_ + +It is also possible to find a vector of null length (_Vec_ from _gp_) : +_V.Magnitude() < Precision::Confusion()_ + +Precision::Intersection +----------------------- +This is reasonable precision to pass to an Intersection process as a limit of refinement of Intersection Points. *Intersection* is high enough for the process to converge quickly. *Intersection* is lower than *Confusion* so that you still get a point on the intersected geometries. The current value is *Confusion() / 100*. + +Precision::Approximation +------------------------ +This is a reasonable precision to pass to an approximation process as a limit of refinement of fitting. The approximation is greater than the other precisions because it is designed to be used when the time is at a premium. It has been provided as a reasonable compromise by the designers of the Approximation algorithm. The current value is *Confusion() * 10*. +Note that Approximation is greater than Confusion, so care must be taken when using Confusion in an approximation process. + +@section occt_fcug_5 Data Storage +@subsection occt_fcug_5_1 Saving and Opening Files + +![](/user_guides/foundation_classes/images/foundation_classes_image007.jpg "Example of Saving-Opening workflow") + +In the example, the roots of the transferable transient objects *TopoDS_Shape, Geom_Geometry* and *Geom2d_Geometry* are used in algorithms, they contain data and temporary results. +The associated objects in the persistent domain are here PTopoDS_HShape, PGeom_Geometry and PGeom2d_Geometry. They contain a real data structure which is stored in a file. +Note that when an object is stored, if it contains another stored object, the references to the contained object are also managed. +![](/user_guides/foundation_classes/images/foundation_classes_image008.jpg "Saving-Opening mechanism") + + +@subsection occt_fcug_5_2 Basic Storage Procedures +That is how the storage and retrieval mechanisms work on shapes. + +@subsubsection occt_fcug_5_2_1 Saving + +The storage procedure of a transient object follows five main steps. +1. Create an I/O driver for files. For example, *FSD_File f()*; +2. Instance the data schema, which will process your persistent information. The schema is used for read/write operations. If ShapeSchema is the name of your schema: +~~~~~ +Handle(ShapeSchema) s = new ShapeSchema; +~~~~~ + +3.Create a persistent shape from a transient shape. +~~~~~ +TopoDS_Shape aShape; +PTColStd_TransientPersistentMap aMap; +Handle(PTopoDS_HShape) aPShape = MgtBRep::Translate + (aShape, aMap, MgtBRep_WithoutTriangle); +~~~~~ + +4.Create a new container and fill it using the *AddRoot()* method. +~~~~~ +Handle(Storage_Data) d = new Storage_Data; +d -> AddRoot (“ObjectName”, aPShape); +~~~~~ +You may add as many objects as you want in this container. + +5. Save to the archive. +~~~~~ +s -> Write (f,d); +~~~~~ + +@subsubsection occt_fcug_5_2_2 Opening +The retrieval mechanism is the opposite of the storage mechanism. The procedure for retrieving an object is as follows: + +1. Create an I/O driver and instance a data schema (if not done). +2. Read the persistent object from the archive and get the list of objects using Roots() method. +~~~~~ +Handle(Storage_Data) d = s -> Read(f); +Handle(Storage_HSeqOfRoot) roots = d-> Roots(); +~~~~~ +3. Loop on root objects to get Standard_Persistent objects (the following sequence only gets the first root). +~~~~~ +Handle(Standard_Persistent) p; +Handle(Standard_Root) r; +if(roots -> Length() >= 1) { +  r = roots -> Value(1); +  p = r -> Object(); +} +~~~~~ +4. DownCast the persistent object to a PTopoDS_Hshape. +~~~~~ +Handle(PTopoDS_HShape) aPShape; +aPShape = Handle(PTopoDS_HShape)::DownCast(p); +~~~~~ +5. Create the TopoDS_Shape. +~~~~~ +TopoDS_Shape aShape; +PTColStd_PersistentTransientMap aMap;   +MgtBRep::Translate (aPShape, aMap, aShape, MgtBRep_WithoutTriangle); +~~~~~ + + + diff --git a/dox/user_guides/foundation_classes/images/foundation_classes_image001.jpg b/dox/user_guides/foundation_classes/images/foundation_classes_image001.jpg new file mode 100644 index 0000000000000000000000000000000000000000..0e782cab77acff25a6036d54ba65f069d489b6a6 GIT binary patch literal 6870 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 m*2l*OQXOT`qhpC@6q? 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 literal 0 HcmV?d00001 diff --git a/dox/user_guides/foundation_classes/images/foundation_classes_image004.jpg b/dox/user_guides/foundation_classes/images/foundation_classes_image004.jpg new file mode 100644 index 0000000000000000000000000000000000000000..719dfddc064cf523c4b7d66e5b9391dfc4b4a69b GIT binary patch literal 16149 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 literal 0 HcmV?d00001 diff --git a/dox/user_guides/foundation_classes/images/foundation_classes_image005.jpg b/dox/user_guides/foundation_classes/images/foundation_classes_image005.jpg new file mode 100644 index 0000000000000000000000000000000000000000..d3b604ea80ed00e6a746e557690f9262dcd59bc8 GIT binary patch literal 19383 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 z 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

{&i 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 Mot0{(VSJzYUm*}j?*IS* literal 0 HcmV?d00001 diff --git a/dox/user_guides/foundation_classes/images/foundation_classes_image008.jpg b/dox/user_guides/foundation_classes/images/foundation_classes_image008.jpg new file mode 100644 index 0000000000000000000000000000000000000000..823d6461d43916fbb4d4a7f3b436dc6155892fb6 GIT binary patch literal 48407 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.opencascade.org/support/training/ + +IGES files up to and including IGES version 5.3 can be read. IGES files that are produced by this interface conform to IGES version 5.3 (Initial Graphics Exchange Specification, IGES 5.3. ANS US PRO/IPO-100-1996). +This manual principally deals with two OCCT classes: + * The Reader class, which loads IGES files and translates their contents to OCCT shapes, + * The Writer class, which translates OCCT shapes to IGES entities and then writes these entities to IGES files. +File translation is performed in the programming mode, via C++ calls, and the resulting OCCT objects are shapes. +All definitions in IGES version 5.3 are recognized but only 3D geometric entities are translated. When the processor encounters data, which is not translated, it ignores it and writes a message identifying the types of data, which was not handled. This message can be written either to a log file or to screen output. +@section occt_1856844696_804874798 Reading IGES +@subsection occt_1856844696_804874798_1 Procedure +You can translate an IGES file to an OCCT shape by following the steps below: + -# Load the file, + -# Check file consistency, + -# Set the translation parameters, + -# Perform the file translation, + -# Fetch the results. +@subsection occt_1856844696_804874798_2 Domain covered +@subsubsection occt_1856844696_804874798_21 Translatable entities +The types of IGES entities, which can be translated, are: + * Points + * Lines + * Curves + * Surfaces + * B-Rep entities + * Structure entities (groups). Each entity in the group outputs a shape. There can be a group of groups. + * Subfigures. Each entity defined in a subfigure outputs a shape + * Transformation Matrix. +***NOTE*** +*All non-millimeter length unit values in the IGES file are converted to millimeters.* +@subsubsection occt_1856844696_804874798_22 Attributes +Entity attributes in the Directory Entry Section of the IGES file (such as layers, colors and thickness) are translated to Open CASCADE Technology using XDE. +@subsubsection occt_1856844696_804874798_23 Administrative data +Administrative data, in the Global Section of the IGES file (such as the file name, the name of the author, the date and time a model was created or last modified) is not translated to Open CASCADE Technology. Administrative data can, however, be consulted in the IGES file. + + +@subsection occt_1856844696_804874798_3 Description of the process +@subsubsection occt_1856844696_804874798_31 Loading the IGES file +Before performing any other operation, you have to load the file using the syntax below. +IGESControl_Reader reader; +IFSelect_ReturnStatus stat = reader.ReadFile(“filename.igs”); +The loading operation only loads the IGES file into computer memory; it does not translate it. +@subsubsection occt_1856844696_804874798_32 Checking the IGES file +This step is not obligatory. Check the loaded file with: +Standard_Boolean ok = reader.Check(Standard_True); +The variable “ok is True” is returned if no fail message was found; “ok is False” is returned if there was at least one fail message. +reader.PrintCheckLoad (failsonly, mode); +Error messages are displayed if there are invalid or incomplete IGES entities, giving you information on the cause of the error. +Standard_Boolean failsonly = Standard_True or Standard_False; +If you give True, you will see fail messages only. If you give False, you will see both fail and warning messages. +Your analysis of the file can be either message-oriented or entity-oriented. Choose your preference with: +IFSelect_PrintCount mode = IFSelect_xxx +Where xxx can be any of the following: +ItemsByEntity     gives a sequential list of all messages per IGES entity. +CountByItem       gives the number of IGES entities with their types per message. +ShortByItem       gives the number of IGES entities with their types per message and displays rank numbers of the first five IGES entities per message. +ListByItem        gives the number of IGES entities with their type and rank numbers per message. +EntitiesByItem    gives the number of IGES entities with their types, rank numbers and Directory Entry numbers per message. + +@subsubsection occt_1856844696_804874798_33 Setting translation parameters +The following parameters can be used to translate an IGES file to an OCCT shape. If you give a value that is not within the range of possible values, it will be ignored. +

read.iges.bspline.continuity

+manages the continuity of BSpline curves (IGES entities 106, 112 and 126) after translation to Open CASCADE Technology (Open CASCADE Technology requires that the curves in a model be at least C1 continuous; no such requirement is made by IGES). +0:    no change; the curves are taken as they are in the IGES file. C0 entities of Open CASCADE Technology may be produced. +1:    if an IGES BSpline, Spline or CopiousData curve is C0 continuous, it is broken down into pieces of C1 continuous Geom_BSplineCurve. +2:    This option concerns IGES Spline curves only. IGES Spline curves are broken down into pieces of C2 continuity. If C2 cannot be ensured, the Spline curves will be broken down into pieces of C1 continuity. +Read this parameter with: +Standard_Integer ic = Interface_Static::IVal(;read.iges.bspline.continuity;); +Modify this value with: +if (!Interface_Static::SetIVal (;read.iges.bspline.continuity;,2)) +.. error ..; +Default value is 1. +*This parameter does not change the continuity of curves that are used in the construction of IGES BRep entities. In this case, the parameter does not influence the continuity of the resulting OCCT curves (it is ignored). * +

read.precision.mode

+reads the precision value. +     ;File; (0)       the precision value is read in the IGES file header (default). +     ;User; (1)     the precision value is that of the read.precision.val parameter. +Read this parameter with: +Standard_Integer ic = Interface_Static::IVal(;read.precision.mode;); +Modify this value with: +if (!Interface_Static::SetIVal (;read.precision.mode;,1)) +.. error ..; +Default value is ;File; (0). +

read.precision.val

+user precision value. This parameter gives the precision used during translation when the read.precision.mode parameter value is 1. +     0.0001: default. +     any real positive (non null) value. +This value is a basis value for computation tolerances for TopoDS_Vertex, TopoDS_Edge and TopoDS_Face entities. +This value is in the measurement unit defined in the IGES file header. +Read this parameter with: +Standard_Real rp = Interface_Static::RVal(;read.precision.val;); +Modify this parameter with: +if (!Interface_Static::SetRVal (;read.precision.val;,0.001)) +.. error ..; +Default value is 0.0001. +*The value given to this parameter is a target value that is applied to TopoDS_Vertex, TopoDS_Edge and TopoDS_Face entities. The processor does its best to reach it. Under certain circumstances, the value you give may not be attached to all of the entities concerned at the end of processing. IGES-to-OCCT translation does not improve the quality of the geometry in the original IGES file. This means that the value you enter may be impossible to attain the given quality of geometry in the IGES file.* +Value of tolerance used for computation is calculated by multiplying the value of read.precision.val and the value of coefficient of transfer from the file units to millimeters. +

read.maxprecision.mode

+defines the mode of applying the maximum allowed tolerance. Its possible values are: +;Preferred;(0)           maximum tolerance is used as a limit but sometimes it can be exceeded (currently, only for deviation of a 3D curve of an edge from its pcurves and from vertices of such edge) to ensure shape validity +;Forced;(1)               maximum tolerance is used as a rigid limit, i.e. it can not be exceeded and, if this happens, tolerance is trimmed to suit the maximum-allowable value. +Read this parameter with: +Standard_Integer mv = Interface_Static::IVal(;read.maxprecision.mode;); +Modify this parameter with: +if (!Interface_Static::SetIVal (;read.maxprecision.mode;,1)) +.. error ..; +Default value is ;Preferred; (0). + +

read.maxprecision.val

+defines the maximum allowable tolerance (in mm) of the shape. It should be not less than the basis value of tolerance set in processor (either Resolution from the file or read.precision.val). Actually, the maximum between read.maxprecision.val and basis tolerance is used to define maximum allowed tolerance. +Read this parameter with: +Standard_Real rp = Interface_Static::RVal(;read.maxprecision.val;); +Modify this parameter with: +if (!Interface_Static::SetRVal (;read.maxprecision.val;,0.1)) +.. error ..; +Default value is 1. + +

read.stdsameparameter.mode

+defines the using of BRepLib::SameParameter. Its possible values are: +0 (;Off;) - BRepLib::SameParameter is not called, +1 (;On;) - BRepLib::SameParameter is called. +Functionality of BRepLib::SameParameter is used through ShapeFix_Edge::SameParameter. It ensures that the resulting edge will have the lowest tolerance taking pcurves either unmodified from the IGES file or modified by BRepLib::SameParameter. +Read this parameter with: +Standard_Integer mv = Interface_Static::IVal(;read.stdsameparameter.mode;); +Modify this parameter with: +if (!Interface_Static::SetIVal (;read.stdsameparameter.mode;,1)) +.. error ..; +Deafault value is 0 (;Off;). + +

read.surfacecurve.mode

+preference for the computation of curves in case of 2D/3D inconsistency in an entity which has both 2D and 3D representations. +Here we are talking about entity types 141 (Boundary), 142 (CurveOnSurface) and 508 (Loop). These are entities representing a contour lying on a surface, which is translated to a TopoDS_Wire, formed by TopoDS_Edges. Each TopoDS_Edge must have a 3D curve and a 2D curve that reference the surface. +The processor also decides to re-compute either the 3D or the 2D curve even if both curves are translated successfully and seem to be correct, in case there is inconsistency between them. The processor considers that there is inconsistency if any of the following conditions is satisfied: + * the number of sub-curves in the 2D curve is different from the number of sub-curves in the 3D curve. This can be either due to different numbers of sub-curves given in the IGES file or because of splitting of curves during translation. + * 3D or 2D curve is a Circular Arc (entity type 100) starting and ending in the same point (note that this case is incorrect according to the IGES standard) +The parameter read.surfacecurve.mode defines which curve (3D or 2D) is used for re-computing the other one: +1.       ;Default; (0): use the preference flag value in the entity's Parameter Data section. The flag values are: + * 0: no preference given, + * 1: use 2D for 142 entities and 3D for 141 entities, + * 2: use 3D for 142 entities and 2D for 141 entities, + * 3: both representations are equally preferred. +2.       ;2DUse_Preferred; (2): the 2D is used to rebuild the 3D in case of their inconsistency, +3.       ;2DUse_Forced; (-2): the 2D is always used to rebuild the 3D (even if 2D is present in the file), +4.       ;3DUse_Preferred; (3): the 3D is used to rebuild the 2D in case of their inconsistency, +5.       ;3DUse_Forced; (-3): the 3D is always used to rebuild the 2D (even if 2D is present in the file), +If no preference is defined (if the value of read.surfacecurve.mode is ;Default; and the value of the preference flag in the entity's Parameter Data section is 0 or 3), an additional analysis is performed. +The 3D representation is preferred to the 2D in two cases: + * if 3D and 2D contours in the file have a different number of curves, + * if the 2D curve is a Circular Arc (entity type 100) starting and ending in the same point and the 3D one is not. +In any other case, the 2D representation is preferred to the 3D. + +If either a 3D or a 2D contour is absent in the file or cannot be translated, then it is re-computed from another contour. If the translation of both 2D and 3D contours fails, the whole curve (type 141 or 142) is not translated. If this curve is used for trimming a face, the face will be translated without this trimming and will have natural restrictions. +Read this parameter with: +Standard_Integer ic = Interface_Static::IVal(;read.surfacecurve.mode;); +Modify this value with: +if (!Interface_Static::SetIVal (;read.surfacecurve.mode;,3)) +.. error ..; +Default value is ;Default; (0). +

read.encoderegularity.angle

+This parameter is used within the BRepLib::EncodeRegularity() function which is called for a shape read from an IGES or a STEP file at the end of translation process. This function sets the regularity flag of an edge in a shell when this edge is shared by two faces. This flag shows the continuity, which these two faces are connected with at that edge. +Read this parameter with: +Standard_Real era =  Interface_Static::RVal(;read.encoderegularity.angle;); +Modify this parameter with: +if (!Interface_Static::SetRVal (;read.encoderegularity.angle;,0.1)) +.. error ..; +Default value is 0.01. +

read.iges.bspline.approxd1.mode

+This parameter is obsolete (it is rarely used in real practice). If set to True, it affects the translation of bspline curves of degree 1 from IGES: these curves (which geometrically are polylines) are split by duplicated points, and the translator attempts to convert each of the obtained parts to a bspline of a higher continuity. +Read this parameter with: +Standard_Real bam =  Interface_Static::CVal(;read.iges.bspline.approxd1.mode;); +Modify this parameter with: +if (!Interface_Static::SetRVal (;read.encoderegularity.angle;,;On;)) +.. error ..; +Default value is Off. +

read.iges.resource.name

+

read.iges.sequence

+These two parameters define the name of the resource file and the name of the sequence of operators (defined in that file) for Shape Processing, which is automatically performed by the IGES translator. The Shape Processing is a user-configurable step, which is performed after the translation and consists in application of a set of operators to a resulting shape. This is a very powerful tool allowing to customize the shape and to adapt it to the needs of a receiving application. By default, the sequence consists of a single operator ShapeFix * that is how Shape Healing is called from the IGES translator. +Please find an example of the resource file for IGES (which defines parameters corresponding to the sequence applied by default, i.e. if the resource file is not found) in the Open CASCADE Technology installation, by the path %CASROOT%/src/XSTEPResource/IGES ($CASROOT/src/XSTEPResource/IGES). +In order for the IGES translator to use that file, you have to define the environment variable CSF_IGESDefaults, which should point to the directory where the resource file resides. Note that if you change parameter read.iges.resource.name, you should change the name of the resource file and the name of the environment variable correspondingly. The variable should contain a path to the resource file. +Default values:  read.iges.resource.name - IGES, read.iges.sequence - FromIGES. +

read.scale.unit

+This parameter is obsolete (the parameter xstep.cascade.unit should be used instead when necessary). If it is set to 'M', the shape is scaled 0.001 times (as if it were in meters) after translation from IGES or STEP. +Default value is MM.  +

xstep.cascade.unit

+This parameter defines units to which a shape should be converted when translated from IGES or STEP to CASCADE. Normally it is MM; only those applications that work internally in units other than MM should use this parameter.  +Default value is MM. +@subsubsection occt_1856844696_804874798_34 Selecting entities +A list of entities can be formed by invoking the method IGESControl_Reader::GiveList. +Handle(TColStd_HSequenceOfTransient) list = reader.GiveList(); +Several predefined operators can be used to select a list of entities of a specific type. +To make a selection, you use the method IGESControl_Reader::GiveList with the selection type in quotation marks as an argument. You can also make cumulative selections. For example, you would use the following syntax: +1.       Requesting the faces in the file: +faces = Reader.GiveList(;iges-faces;); +2.       Requesting the visible roots in the file +visibles = Reader.GiveList(;iges-visible-roots;); +3.       Requesting the visible faces +visfac = Reader.GiveList(;iges-visible-roots;,faces); +Using a signature, you can define a selection dynamically, filtering the string by means of a criterion. When you request a selection using the method GiveList, you can give either a predefined selection or a selection by signature. You make your selection by signature using the predefined signature followed by your criterion in parentheses as shown in the example below. The syntaxes given are equivalent to each other. +faces = Reader.GiveList(“xst-type(SurfaceOfRevolution)”); +faces = Reader.GiveList(“iges-type(120)”); +You can also look for: + * values returned by your signature which match your criterion exactly +faces = Reader.GiveList(“xst-type(=SurfaceOfRevolution)”); + * values returned by your signature which do not contain your criterion +faces = Reader.GiveList(“xst-type(!SurfaceOfRevolution)”); + * values returned by your signature which do not exactly match your criterion. +faces = Reader.GiveList(“xst-type(!=SurfaceOfRevolution)”); + +

List of predefined operators that can be used:

+ * xst-model-all +Selects all entities. + * xst-model-roots +Selects all roots. + * xst-transferrable-all +Selects all translatable entities. + * xst-transferrable-roots +Selects all translatable roots (default). + * xst-sharing + selection +Selects all entities sharing at least one entity selected by selection. + * xst-shared + selection +Selects all entities shared by at least one entity selected by selection. + * iges-visible-roots +Selects all visible roots, whether translatable or not. + * iges-visible-transf-roots +Selects all visible and translatable roots. + * iges-blanked-roots +Selects all blank roots, whether translatable or not. + * iges-blanked-transf-roots +Selects all blank and translatable roots. + * iges-status-independant +Selects entities whose IGES Subordinate Status = 0. + * iges-bypass-group +Selects all root entities. If a root entity is a group (402/7 or 402/9), the entities in the group are selected. + * iges-bypass-subfigure +Selects all root entities. If a root entity is a subfigure definition (308), the entities in the subfigure definition are selected. + * iges-bypass-group-subfigure +Selects all root entities. If a root entity is a group (402/7 or 402/9) or a subfigure definition (308), the entities in the group and in the subfigure definition are selected. + * iges-curves-3d +Selects 3D curves, whether they are roots or not (e.g. a 3D curve on a surface). + * iges-basic-geom +Selects 3D curves and untrimmed surfaces. + * iges-faces +Selects face-supporting surfaces (trimmed or not). + * iges-surfaces +Selects surfaces not supporting faces (i.e. with natural bounds). + * iges-basic-curves-3d +Selects the same entities as iges-curves-3d. Composite Curves are broken down into their components and the components are selected. +@subsubsection occt_1856844696_804874798_35 Performing the IGES file translation +Perform translation according to what you want to translate: +1.       Translate an entity identified by its rank with: +Standard_Boolean ok = reader.Transfer (rank); +-# 2. Translate an entity identified by its handle with: +Standard_Boolean ok = reader.TransferEntity (ent); +3.       Translate a list of entities in one operation with: +Standard_Integer nbtrans = reader.TransferList (list); +reader.IsDone(); +   nbtrans returns the number of items in the list that produced a shape. +   reader.IsDone() indicates whether at least one entity was translated. +4.       Translate a list of entities, entity by entity: +Standard_Integer i,nb = list-Length(); +          for (i = 1; i = nb; i ++) { +   Handle(Standard_Transient) ent = list-Value(i); +      Standard_Boolean OK = reader.TransferEntity (ent); +          } +5.       Translate the whole file (all entities or only visible entities) with: +Standard_Boolean onlyvisible = Standard_True or Standard_False; +reader.TransferRoots(onlyvisible) +@subsubsection occt_1856844696_804874798_36 Getting the translation results +Each successful translation operation outputs one shape. A series of translations gives a series of shapes. +Each time you invoke TransferEntity, Transfer or Transferlist, their results are accumulated and NbShapes increases. You can clear the results (Clear function) between two translation operations, if you do not do this, the results from the next translation will be added to the accumulation. TransferRoots operations automatically clear all existing results before they start. +Standard_Integer nbs = reader.NbShapes(); +returns the number of shapes recorded in the result. +TopoDS_Shape shape = reader.Shape(num);, +returns the result num, where num is an integer between 1 and NbShapes. +TopoDS_Shape shape = reader.Shape(); +returns the first result in a translation operation. +TopoDS_Shape shape = reader.OneShape(); +returns all results in a single shape which is: + * a null shape if there are no results, + * in case of a single result, a shape that is specific to that result, + * a compound that lists the results if there are several results. +reader.Clear(); +erases the existing results. +reader.PrintTransferInfo (failsonly, mode); +displays the messages that appeared during the last invocation of Transfer or TransferRoots. +If failsonly is IFSelect_FailOnly, only fail messages will be output, if it is IFSelect_FailAndWarn, all messages will be output. Parameter “mode” can have IFSelect_xxx values where xxx can be: +GeneralCount +gives general statistics on the transfer (number of translated IGES entities, number of fails and warnings, etc) +CountByItem +gives the number of IGES entities with their types per message. +ListByItem +gives the number of IGES entities with their type and DE numbers per message. +ResultCount +gives the number of resulting OCCT shapes per type +Mapping +gives mapping between roots of the IGES file and the resulting OCCT shape per IGES and OCCT type. +@subsection occt_1856844696_804874798_4 Mapping of IGES entities to Open CASCADE Technology shapes +***NOTE*** +*IGES entity types that are not given in the following tables are not translatable.* +@subsubsection occt_1856844696_804874798_41 Points +@subsubsection occt_1856844696_804874798_42 Curves +Curves, which form the 2D of face boundaries, are translated as Geom2D_Curves (Geom2D circles, etc.). + +The type of OCCT shapes (either TopDS_Edges or TopoDS_Wires) that result from the translation of IGES entities 106, 112 and 126 depends on the continuity of the curve in the IGES file and the value of the read.iges.bspline.continuity translation parameter. +@subsubsection occt_1856844696_804874798_43 Surfaces +Translation of a surface outputs either a TopoDS_Face or a TopoDS_Shell. +If a TopoDS_Face is output, its geometrical support is a Geom_Surface and its outer and inner boundaries (if it has any) are TopoDS_Wires. + +@subsubsection occt_1856844696_804874798_44 Boundary Representation Solid Entities +@subsubsection occt_1856844696_804874798_45 Structure Entities +@subsubsection occt_1856844696_804874798_46 Subfigures + +@subsubsection occt_1856844696_804874798_47 Transformation Matrix +@subsection occt_1856844696_804874798_5 Messages +Messages are displayed concerning the normal functioning of the processor (transfer, loading, etc.). +You must declare an include file: +#includeInterface_DT.hxx +You have the choice of the following options for messages: +IDT_SetLevel (level); +level modifies the level of messages: + * 0: no messages + * 1: raise and fail messages are displayed, as are messages concerning file access, + * 2: warnings are also displayed. +IDT_SetFile (“tracefile.log”); +prints the messages in a file, +IDT_SetStandard(); +restores screen output. +@subsection occt_1856844696_804874798_6 Tolerance management +@subsubsection occt_1856844696_804874798_61 Values used for tolerances during reading IGES +During the transfer of IGES to Open CASCADE Technology several parameters are used as tolerances and precisions for different algorithms. Some of them are computed from other using specific functions. +

3D (spatial) tolerances

+
Package method Precision::Confusion
+The value is 10-7. It is used as a minimal distance between points, which are considered distinct. +
Resolution in the IGES file
+This parameter is defined in the Global section of an IGES file. It is used as a fundamental value of precision during the transfer. +
User-defined variable read.precision.val
+It is to be used instead of resolution from the file when parameter read.precision.mode is 1 (“User”). +
Field EpsGeom of the class IGESToBRep_CurveAndSurface
+This value is a basic precision for translating an IGES object. It is set for each object of class IGESToBRep_CurveAndSurface and its derived classes. It is initialized for the root of transfer either by value of resolution from the file or by value of read.precision.val*,* depending on the value of read.precision.mode parameter. Returned by call to method IGESToBRep_CurvAndSurface::GetEpsGeom*.* +NOTE: Since this value is in measurement units of the IGES file, it is usually multiplied by the coefficient UnitFactor (returned by method IGESToBRep_CurvAndSurface::GetUnitFactor) to convert it to Open CASCADE Technology units. +
Field MaxTol of the class IGESToBRep_CurveAndSurface
+This value is used as the maximum tolerance for some algorithms. +Currently, it is computed as the maximum between 1 and GetEpsGeom*GetUnitFactor. +This field is returned by method IGESToBRep_CurvAndSurface::GetMaxTol*.* +

2D (parametric) tolerances

+
Package method Precision::PConfusion
+This is value 0.01*Precision::Confusion = 10-9. It is used to compare parametric bounds of curves. +
Field EpsCoeff of the class IGESToBRep_CurveAndSurface
+This value is a parametric precision for translating an IGES object. It is set for each object of class IGESToBRep_CurveAndSurface and its derived classes. Currently, it always has its default value 10-6. It is returned by call to method IGESToBRep_CurvAndSurface::GetEpsCoeff*.* This value is used for translating 2d objects (for instance, parametric curves). +
Methods UResolution(tolerance3d), VResolution(tolerance3d) of the class GeomAdaptor_Surface or BRepAdaptor_Surface
+Return tolerance in parametric space of a surface computed from 3d tolerance. +* When one tolerance value is to be used for both U and V parametric directions, the maximum or the minimum value of UResolution and VResolution is used.* +
Methods Resolution(tolerance3d) of the class GeomAdaptor_Curve or BRepAdaptor_Curve
+Return tolerance in the parametric space of a curve computed from 3d tolerance. +

Zero-dimensional tolerances

+
Field Epsilon of the class IGESToBRep_CurveAndSurface
+Value is set for each object of class IGESToBRep_CurveAndSurface. Returned by call to method GetEpsilon*.* It is used in comparing angles and converting transformation matrices. In most cases, it is reset to a fixed value (10-5 - 10-3) right before use. Default value is 10-4. +@subsubsection occt_1856844696_804874798_62 Initial setting of tolerances in translating objects +Transfer starts from one entity treated as a root (either the actual root in the IGES file or an entity selected by the user). The function which performs the transfer (that is IGESToBRep_Actor::Transfer or IGESToBRep_Reader::Transfer) creates an object of the type IGESToBRep_CurveAndSurface, which is intended for translating geometry. +This object contains three tolerances: Epsilon, EpsGeom and EpsCoeff. +Parameter Epsilon is set by default to value 10-4. In most cases when it is used in the package IGESToBRep, it is reset to a fixed value, either 10-5 or 10-4 or 10-3. It is used as precision when comparing angles and transformation matrices and does not have influence on the tolerance of the resulting shape. +Parameter EpsGeom is set right after creating a IGESToBRep_CurveAndSurface object to the value of resolution, taken either from the Global section of an IGES file, or from the XSTEP.readprecision.val parameter*,* depending on the value of XSTEP.readprecision.mode. +Parameter EpsCoeff is set by default to 10-6 and is not changed. +During the transfer of a shape, new objects of type IGESToBRep_CurveAndSurface are created for translating subshapes. All of them have the same tolerances as the root object. +@subsubsection occt_1856844696_804874798_63 Transfer process +

Translating into Geometry

+Geometrical entities are translated by classes IGESToBRep_BasicCurve and IGESToBRep_BasicSurface. Methods of these classes convert curves and surfaces of an IGES file to Open CASCADE Technology geometry objects: +Geom_Curve, Geom_Surface, Geom_Transformation +Since these objects are not BRep objects, they do not have tolerances. Hence, tolerance parameters are used in these classes only as precisions: to detect specific cases (e.g., to distinguish a circle, an ellipse, a parabola and a hyperbola) and to detect bad cases (such as coincident points). +Use of precision parameters is reflected in the following classes: +
Class IGESToBRep_BasicCurve
+All parameters and points are compared with precision EpsGeom. +All transformations (except IGESToBRep_BasicCurve::TransferTransformation) are fulfilled with precision Epsilon which is set to 10-3 (in the IGESToBRep_BasicCurve::TransferTransformation the value 10-5 is used). + * IGESToBRep_BasicCurve::TransferBSplineCurve +All weights of BSplineCurve are assumed to be more than Precision::PConfusion (else the curve is not translated). +
Class IGESToBRep_BasicSurface
+All parameters and points are compared with precision EpsGeom. +All transformations are fulfilled with precision Epsilon, which is set to 10-3. + * IGESToBRep_BasicSurface::TransferBSplineSurface +All weights of BSplineSurface are assumed to be more than Precision::PConfusion (else the surface is not translated). +

Translating into Topology

+IGES entities represented as topological shapes and geometrical objects are translated into OCCT shapes by use of the following classes: +IGESToBRep_TopoCurve, IGESToBRep_TopoSurface, IGESToBRep_BRepEntity, ShapeFix_Wire +Class IGESToBRep_BRepEntity is intended for transferring BRep entities (IGES version ³ 5.1) while the two former are used for translating geometry and topology defined in IGES 5.1. Methods from IGESToBRep_BRepEntity call methods from IGESToBRep_TopoCurve and IGESToBRep_TopoSurface, while those call methods from IGESToBRep_BasicCurve and IGESToBRep_BasicSurface in order to translate IGES geometry into OCCT geometry. +Although the IGES file contains only one parameter for tolerance in the Global Section, OCCT shapes are produced with different tolerances. As a rule, updating the tolerance is fulfilled according to local distances between shapes (distance between vertices of adjacent edges, deviation of edge’s 3D curve and its parametric curve and so on) and may be less or greater than precision in the file. +The following classes show what default tolerances are used when creating shapes and how they are updated during transfer. +
Class IGESToBRep_TopoCurve
+All the methods which are in charge of transferring curves from IGES curve entities (TransferCompositeCurve, Transfer2dCompositeCurve, TransferCurveOnFace, TransferBoundaryOnFace, TransferOffsetCurve, TransferTopoBasicCurve) if an entity has transformation call to IGESData_ToolLocation::ConvertLocation with Epsilon value set to 10-4. + * IGESToBRep_TopoCurve::TransferPoint +Vertex is constructed from a Point entity with tolerance EpsGeom*UnitFactor. + * IGESToBRep_TopoCurve::Transfer2dPoint +Vertex is constructed from a Point entity with tolerance EpsCoeff. + * IGESToBRep_TopoCurve::TransferCompositeCurveGeneral +Obtains shapes (edges or wires) from other methods and adds them into the resulting wire. Two adjacent edges of the wire can be connected with tolerance up to MaxTol. + * IGESToBRep_TopoCurve::TransferCurveOnFace and IGESToBRep_TopoCurve::TransferBoundaryOnFace +This method builds a wire from 3D and 2D representations of a curve on surface. +Edges and vertices of the wire cannot have tolerance larger than MaxTol. +The value EpsGeom*UnitFactor is passed into ShapeFix_Wire::SetPrecision and MaxTol - into ShapeFix_Wire::MaxTolerance. To find out how these parameters affect the resulting tolerance changes, please refer to class ShapeFix_Wire. + * IGESToBRep_TopoCurve::TransferTopoBasicCurve and IGESToBRep_TopoCurve::Transfer2dTopoBasicCurve +The boundary vertices of an edge (or a wire if a curve was of C0 continuity) translated from a basis IGES curve (BSplineCurve, CopiousData, Line, etc.) are built with tolerance EpsGeom*UnitFactor, the tolerance of the edge(s) is (are) Precision::Confusion*.* +If a curve was divided into several edges, the common vertices of such adjacent edges have tolerance Precision::Confusion*.* +
Class IGESToBRep_TopoSurface
+All the faces created by this class have tolerance Precision::Confusion*.* +
Class IGESToBRep_BRepEntity
+ * IGESToBRep_BRepEntity::TransferVertex +The vertices from the VertexList entity are constructed with tolerance EpsGeom*UnitFactor. + * IGESToBRep_BRepEntity::TransferEdge +The edges from the EdgeList entity are constructed with tolerance Precision::Confusion*.* + * IGESToBRep_BRepEntity::TransferLoop +This function works like IGESToBRep_TopoCurve::TransferCurveOnFace* *and* *IGESToBRep_TopoCurve::TransferBoundaryOnFace*.* + * IGESToBRep_BRepEntity::TransferFace +The face from the Face IGES entity is constructed with tolerance Precision::Confusion. +
Shape Healing classes
+After performing a simple mapping, shape-healing algorithms are called (class ShapeFix_Shape) by IGESToBRep_Actor::Transfer(). A shape-healing algorithm performs the correction of a resulting OCCT shape. +Class ShapeFix_Wire can increase the tolerance of a shape. This class is used in IGESToBRep_BRepEntity::TransferLoop*,* IGESToBRep_TopoCurve::TransferBoundaryOnFace and IGESToBRep_TopoCurve::TransferCurveOnFace for correcting a wire. The maximum possible tolerance which edges or vertices will have after invoking the methods of this class is MaxTolerance (set by method ShapeFix_Wire::MaxTolerance()). + +@subsection occt_1856844696_804874798_7 Code architecture +@subsubsection occt_1856844696_804874798_71 List of the classes +
Package IGESControl
+IGESControl_Reader +
Package IGESToBRep
+IGESToBRep_Reader +IGESToBRep_Actor +IGESToBRep_CurveAndSurface +IGESToBRep_BasicCurve +IGESToBRep_BasicSurface +IGESToBRep_TopoCurve +IGESToBRep_TopoSurface +IGESToBRep_BRepEntity +
Package IGESConvGeom
+For description of classes, refer to CDL. +@subsubsection occt_1856844696_804874798_72 List of API classes +
package IGESControl
+IGESControl_Reader +
package IGESToBRep
+IGESToBRep_Reader +
package IGESData
+class IGESData_IGESModel +class IGESData_IGESEntity +For details, refer to 4 API for reading/writing IGES and CDL. +@subsubsection occt_1856844696_804874798_73 Graph of calls +The following diagram illustrates the structure of calls in reading IGES. +The highlighted classes produce OCCT geometry. +![](/user_guides/iges/images/iges_image003.jpg) + +@subsection occt_1856844696_804874798_8 Example +#include “IGESControl_Reader.hxx” +#include “TColStd_HSequenceOfTransient.hxx” +#include “TopoDS_Shape.hxx” +{ +IGESControl_Reader myIgesReader; +Standard_Integer nIgesFaces,nTransFaces; + +myIgesReader.ReadFile (“MyFile.igs”); +//loads file MyFile.igs + +Handle(TColStd_HSequenceOfTransient) myList = myIgesReader.GiveList(“iges-faces”); +//selects all IGES faces in the file and puts them into a list called //MyList, + +nIgesFaces = myList-Length(); +nTransFaces = myIgesReader.TransferList(myList); +//translates MyList, + +cout“IGES Faces: “nIgesFaces“  Transferred:”nTransFacesendl; +TopoDS_Shape sh = myIgesReader.OneShape(); +//and obtains the results in an OCCT shape. +} + + +@section occt_1856844696_874243683 Writing IGES +@subsection occt_1856844696_8742436831 Procedure +You can translate OCCT shapes to IGES entities in the following steps: +1.       initialize the process. +2.       set the translation parameters, +3.       perform the model translation, +4.       write the output IGES file. +You can translate several shapes before writing a file. Each shape will be a root entity in the IGES model. +@subsection occt_1856844696_8742436832 Domain covered +There are two families of OCCT objects that can be translated: + * geometrical, + * topological. +@subsection occt_1856844696_8742436833 Description of the process +@subsubsection occt_1856844696_87424368331 Initializing the process +Choose the unit and the mode you want to use to write the output file as follows: +IGESControl_Controller::Init +performs standard initialization. Returns False if an error occurred. +IGESControl_Writer writer; +uses the default unit (millimeters) and the default write mode (Face). +IGESControl_Writer writer (UNIT); +uses the Face write mode and any of the units that are accepted by IGES. +IGESControl_Writer writer (UNIT,modecr); +uses the unit (accepted by IGES) and the write mode of your choice. + * 0: Faces, + * 1: BRep +The result is an IGESControl_Writer object. +@subsubsection occt_1856844696_87424368332 Setting the translation parameters +The following parameters are used for the OCCT-to-IGES translation. +

write.iges.brep.mode:

+gives the choice of the write mode. You can choose the following write modes: + +;Faces; (0):       OCCT TopoDS_Faces will be translated into IGES 144 (Trimmed Surface) entities, no B-Rep entities will be written to the IGES file, +;BRep; (1):        OCCT TopoDS_Faces will be translated into IGES 510 (Face) entities, the IGES file will contain B-Rep entities. +Read this parameter with: +Standard_Integer byvalue = Interface_Static::IVal(;write.iges.brep.mode;); +Modify this parameter with: +Interface_Static::SetIVal (;write.iges.brep.mode;, 1); +Default value is ;Faces; (0). +

write.convertsurface.mode

+For writing to IGES in the BRep mode (see parameter write.iges.brep.mode), this parameter indicates whether elementary surfaces (cylindrical, conical, spherical, and toroidal) are converted into corresponding IGES 5.3 entities (if parameter's value is On), or written as surfaces of revolution (by default). +Default value is Off. +

write.iges.unit:

+gives the choice of the unit. The default unit for Open CASCADE Technology is the millimeter. You can choose to write your file in any of the units that are accepted by IGES. +Read this parameter with: +Standard_String byvalue = Interface_Static::CVal(;write.iges.unit;); +Modify this parameter with: +Interface_Static::SetCVal (;write.iges.unit;, ;INCH;); +Default value is ;MM;. +

write.iges.header.autor:

+gives the name of the author of the file. +Read this parameter with: +Standard_String byvalue = Interface_Static::CVal(;write.iges.header.author;); +Modify this value with: +Interface_Static::SetCVal (;write.iges.header.author;, ;name;); +Default value is the system name of the user. +

write.iges.header.company:

+gives the name of the sending company. +Read this parameter with: +Standard_String byvalue = Interface_Static::CVal(;write.iges.header.company;); +Modify this value with: +Interface_Static::SetCVal (;write.iges.header.company;, ;MDTV;); +Default value is ;; (empty). +

write.iges.header.product:

+gives the name of the sending product. +Read this parameter with: +Standard_String byvalue = Interface_Static::CVal(;write.iges.header.product;); +Modify this value with: +Interface_Static::SetCVal (;write.iges.header.product;, ;product name;); +Default value is ;CAS.CADE IGES processor Vx.x; where x.x means the current version of Open CASCADE Technology. +

write.iges.header.receiver:

+gives the name of the receiving company. +Read this parameter with: +Standard_String byvalue = Interface_Static::CVal(;write.iges.header.receiver;); +Modify this value with: +Interface_Static::SetCVal (;write.iges.header.receiver;, ;reciever name;); +Default value is ;; (empty). +

write.precision.mode:

+specifies the mode of writing the resolution value into the IGES file. +;Least; (-1):       resolution value is set to the minimum tolerance of all edges and all vertices in an OCCT shape, +;Average; (0):    resolution value is set to average between the average tolerance of all edges and the average tolerance of all vertices in an OCCT shape (default), +;Greatest; (1):   resolution value is set to the maximum tolerance of all edges and all vertices in an OCCT shape, +;Session; (2):    resolution value is that of the write.precision.val parameter. +Read this parameter with: +Standard_Integer ic = Interface_Static::IVal(;write.precision.mode;); +Modify this parameter with: +if (!Interface_Static::SetIVal(;write.precision.mode;,1)) +.. error .. +Default value is ;Average; (0). +

write.precision.val:

+user precision value. This parameter gives the resolution value for an IGES file when the write.precision.mode parameter value is 1. +     0.0001: default +     any real positive (non null) value. +Read this parameter with: +Standard_Real rp = Interface_Static::RVal(;write.precision.val;); +Modify this parameter with: +if (!Interface_Static::SetRVal(;write.precision.val;,0.01)) +.. error .. +Default value is 0.0001. +

write.iges.resource.name

+

write.iges.sequence

+The same as read.iges.*, please see above. Note that the default sequence for writing contains one operator – DirectFaces - which converts elementary surfaces based on left-hand axes (valid in CASCADE) to right-hand axes (which are valid only in IGES). +Default values : write.iges.resource.name – IGES, write.iges.sequence – ToIGES. +@subsubsection occt_1856844696_87424368333 Performing the Open CASCADE Technology shape translation +You can perform the translation in one or several operations. Here is how you translate topological and geometrical objects: +Standard_Boolean ok = writer.AddShape (shape); +where shape is a TopoDS_Shape. +ok is True if translation was correctly performed and False if there was at least one entity that was not translated. +Standard_Boolean ok = writer.AddGeom (geom); +where geom is either Handle(Geom_Curve) or Handle(Geom_Surface) +ok is True if the translation was correctly performed and False if there was at least one entity whose geometry was not among the allowed types. +@subsubsection occt_1856844696_87424368334 Writing the IGES file +Write the IGES file with: +Standard_Boolean ok = writer.Write (;filename.igs;); +to give the file name. +Standard_Boolean ok = writer.Write (S); +where S is Standard_OStream +ok is True if the operation was correctly performed and False if an error occurred (for instance, if the processor could not create the file). +@subsection occt_1856844696_8742436834 Mapping Open CASCADE Technology shapes to IGES entities +Translated objects depend on the write mode that you chose. If you chose the Face mode, all of the shapes are translated, but the level of topological entities becomes lower (geometrical one). If you chose the BRep mode, topological OCCT shapes become topological IGES entities. +@subsubsection occt_1856844696_87424368341 Curves +@subsubsection occt_1856844696_87424368342 Surfaces + +@subsubsection occt_1856844696_87424368343 Topological entities +
Translation in Face mode
+ +
Translation in BRep mode
+@subsection occt_1856844696_8742436835 Tolerance management +@subsubsection occt_1856844696_87424368351 Setting resolution in an IGES file +There are several possibilities to set resolution in an IGES file. They are controlled by write.precision.mode parameter; the dependence between the value of this parameter and the set resolution is described in paragraph 3.3.2 Setting the translation parameters. +If the value of parameter write.precision.mode is -1, 0 or 1, resolution is computed from tolerances of sub-shapes inside the shape to be translated. In this computation, only tolerances of TopoDS_Edges and TopoDS_Vertices participate since they reflect the accuracy of the shape. TopoDS_Faces are ignored in computations since their tolerances may have influence on resulting computed resolution while IGES resolution mainly concerns points and curves but not surfaces. + +@subsection occt_1856844696_8742436836 Code architecture +@subsubsection occt_1856844696_87424368361 List of the classes +
package IGESControl
+IGESControl_Controller +IGESControl_Writer +
package BRepToIGES
+BRepToIGES_BREntity +BRepToIGES_BRWire +BRepToIGES_BRShell +BRepToIGES_BRSolid +
package BRepToIGESBRep
+BRepToIGESBRep_Entity +
package GeomToIGES
+GeomToIGES_GeomPoint +GeomToIGES_GeomVector +GeomToIGES_GeomCurve +GeomToIGES_GeomSurface +
package Geom2dToIGES
+Geom2dToIGES_Geom2dCurve +
package IGESConvGeom
+IGESConvGeom_GeomBuilder +For description of classes refer to CDL. +@subsubsection occt_1856844696_87424368362 List of API classes +
package IGESControl
+ * IGESControl_Controller + * IGESControl_Writer +
package IGESData
+ * class IGESData_IGESModel + * class IGESData_IGESEntity +For details refer to 4. API for reading/writing IGES and CDL. +@subsubsection occt_1856844696_87424368363 Graph of calls +The following diagram illustrates the class structure in writing IGES. +The highlighted classes are intended to translate geometry. + + + + + + + + +
+ +
+ + + ![](/user_guides/iges/images/iges_image004.jpg) +
+@subsection occt_1856844696_8742436837 Example +#include IGESControl_Controller.hxx +#include IGESControl_Writer.hxx +#include TopoDS_Shape.hxx +Standard_Integer main() +{ +  IGESControl_Controller::Init(); +  IGESControl_Writer ICW (;MM;, 0); +  //creates a writer object for writing in Face mode with millimeters +  TopoDS_Shape sh; +  ICW.AddShape (sh); +  //adds shape sh to IGES model +  ICW.ComputeModel(); +  Standard_Boolean OK = ICW.Write (;MyFile.igs;); +  //writes a model to the file MyFile.igs +} +@section occt_1856844696_1288309531 API for reading/writing IGES +@subsection occt_1856844696_12883095311 Overview +API classes provides the following tools: + * loading IGES files into memory, + * checking IGES files consistency, + * translating IGES files into OCCT shapes, + * translating OCCT shapes into IGES files, + * accessing the IGES model (which is an image of the IGES file in memory), + * selecting entities from the IGES model, + * accessing each entity in the IGES model. +@subsection occt_1856844696_12883095312 Package IGESControl +@subsubsection occt_1856844696_128830953121 General description +This package is intended to provide a tool to convert IGES-format entities to OCCT shapes and vice versa. +The package allows the end-user to perform both import from and export to an IGES file. +IGES files up to and including IGES version 5.3 can be read. +IGES files that are produced by this component conform to IGES version 5.3. +The result of reading IGES files is either a single Open CASCADE Technology shape or a set of them, the result of exporting Open CASCADE Technology geometric or topologic objects is an IGES file which may include one or several root entities (the ones not referenced by others). +@subsubsection occt_1856844696_128830953122 Class IGESControl_Controller +

General description

+This class controls the IGES norm. +This class is intended to provide an appropriate initialization of the IGES norm, namely it includes a set of necessary parameters for IGES translation and declaration of possible selections for IGES entities. +After the execution of initialization procedures, the use of IGES norm becomes available. +Inheritance +Standard_Transient +MMgt_TShared +XSControl_Controller +

Methods

+
Constructors
+IGESControl_Controller(const Standard_Boolean modefnes = Standard_False); +Purpose: Initializes the use of IGES (if modefnes is False) or FNES (if modefnes is True) norm. +
Method for performing initialization
+IGESControl:: Init +static  Standard_Boolean Init() ; +Purpose: Performs standard initialization creating controller objects for both IGES and FNES norm. +Returns True when done, False if an error occurred. +
Method for creating IGES model
+IGESControl:: NewModel +Handle_Interface_InterfaceModel NewModel() const; +Purpose: Creates a new empty model ready to receive data of the norm. The Global section is filled with static parameters (receiver, author, company and unit). +
Method for getting the actor object
+IGESControl:: ActorRead +Handle_Transfer_ActorOfTransientProcess ActorRead( const Handle(Interface_InterfaceModel)& model) const; +Purpose: Returns the actor object for reading (actually, it is of type IGESToBRep_Actor) with a set parameter of spline continuity taken from static parameter. +
Method for translating an Open CASCADE Technology shape
+IGESControl:: TransferWriteShape +virtual IFSelect_ReturnStatus TransferWriteShape(const TopoDS_Shape& shape,                                     const Handle(Transfer_FinderProcess)& FP,       const Handle(Interface_InterfaceModel)& model, const Standard_Integer modetrans = 0) const; +Purpose: Translates shape into the interface model. +modetrans: 0 - group of Faces (IGES 5.1) , 1 - for BRep (IGES = 5.1) +Returns: +IFSelect_RetDone:   OK, +IFSelect_RetError: if modetrans is not equal to 0 or 1, or model is not an IGES model. +IFSelect_Fail:         if shape is null. + +@subsubsection occt_1856844696_128830953123 Class IGESControl_Reader +

General description

+This object reads IGES files and translates their contents into OCCT shapes. +All definitions in IGES version 5.3 are recognized but only geometric and topologic entities can be translated. Data, which cannot be translated, is loaded with the file but during translation it is ignored. +The translation of the IGES model into the OCCT model goes through the following steps: + * loading a file into memory, + * checking file consistency, + * setting translation parameters, + * performing the translation itself, + * fetching the results. + +The resulting OCCT objects belong to topologic shapes. The geometric objects (2D and 3D) are constructed in intermediate steps and serve as a support for topologic entities. +Each successful translation operation outputs one shape. A series of translations gives a list of shapes. +Inheritance +IGESToBRep_Reader +This class complements IGESToBRep_Reader class: + * deals directly with WorkSession object, + * computes the list of IGES entities matching specified criteria, + * performs translation of a list of entities and the ones specified by handle, + * outputs the results of checking and translating. +

Methods

+
Constructors:
+ * IGESControl_Reader (); +Purpose: Creates a reader from scratch and with a  new WorkSession object. + * IGESControl_Reader (const Handle(XSControl_WorkSession)& WS, +                                  const Standard_Boolean scratch); +Purpose: Defines work session for the reader. If scratch is True the new model will be created in the work session. +
Methods for dealing with WorkSession object
+ * IGESControl_Reader::SetWS +void SetWS ( const Handle(XSControl_WorkSession)& WS, +             const Standard_Boolean scratch = Standard_True); +Purpose: Defines the work session for the reader. +               If scratch is True the new model will be created in the work session object. + * IGESControl_Reader::WS +Handle_XSControl_WorkSession() const; +Purpose: Returns the used work session object. +
Method for loading an IGES file into memory
+ * IGESControl_Reader::ReadFile +IFSelect_ReturnStatus ReadFile(const Standard_CString filename); +Purpose: Loads and memorizes an IGES file in memory. +Returns: +IFSelect_RetDone:   the file was successfully read +IFSelect_RetVoid:   no file found +IFSelect_RetError: an error occurred during reading +See also: +          IGESToBRep_Reader::LoadFile() + +
Methods for selecting entities to transfer
+ * IGESControl_Reader::GiveList +Handle_TColStd_HSequenceOfTransient GiveList( const Standard_CString first = ;;, const Standard_CString second = ;;); +Purpose: Returns a list of entities from the model according to the following rules: + * if first and second are empty - the list of roots for transfer, + * if first is a number or label of an entity - this entity itself, + * if first is a list of numbers/labels separated by commas - these entities, + * if first is a name of a selection in work session and second is not defined - the standard result of this selection, + * if first is a name of a selection and second is defined - the criterion defined by second is applied to result of first selection +Remarks: +      if second is erroneous it is ignored. +Handle_TColStd_HSequenceOfTransient GiveList( const Standard_CString first, const Handle(Standard_Transient)& ent) ; +Purpose: Returns a list of entities from the model according to the following rules: + * if first is a selection name and second is an entity or a list of entities (as a         HSequenceOfTransient) - the standard result of this selection is applied to this list. +Remarks: +      if first is erroneous, a null handle is returned. +
Methods for performing translation
+ * IGESControl_Reader::TransferEntity +Standard_Boolean TransferEntity(const Handle(Standard_Transient)& start) ; +Purpose: Performs the translation of the entity specified by its handle. +Returns False if an entity is not in the Model, else returns the result of the transfer. + * IGESControl_Reader:: TransferList +Standard_Integer TransferList( const Handle(TColStd_HSequenceOfTransient)& list) ; +Purpose: Performs the translation of the list of entities. +Returns the number of successful transfers. +
Methods for printing statistics
+ * IGESControl_Reader:: PrintCheckLoad +void PrintCheckLoad( const Standard_Boolean failsonly, const IFSelect_PrintCount mode) const ; +Purpose: Displays the check results on file entities. +If failsonly is True prints only « Fail Â» messages, otherwise all messages. +mode determines the contents and the order of messages: +IFSelect_ItemsByEntity -  sequential list of messages per entity, +IFSelect_CountByItem -     counts the number of entities per message, +IFSelect_ShortByItem -      the same function but also of the first five entities, +IFSelect_ListByItem -       the same but displays the rank numbers of all (not only five) entities, +IFSelect_EntitiesByItem - the same plus it displays the Directory Entry number for each entity + * IGESControl_Reader:: PrintCheckTransfer +void PrintCheckTransfer( const Standard_Boolean failsonly, const IFSelect_PrintCount mode) const; +Purpose: Displays the checking results of the last transfer. +The parameters play the same role as in PrintCheckLoad. + * IGESControl_Reader:: PrintStatsTransfer +void PrintStatsTransfer( const Standard_Integer what, const Standard_Integer mode = 0) const; +Purpose: Displays all available statistics of the last transfer on the default trace file. The returned information is filtered by giving parameters. +what defines what kind of statistics are to be printed: +0 - basic figures, +1 - root results, +2 - all recorded (roots, intermediate, checked entities), +3 - abnormal records, +4 - warnings and fails messages, +5 - only fail messages +mode is used according to what: +if what is 0 mode is ignored +if what is 1, 2 or 3 mode defines the following: +0 - lists numbers of concerned entities in the model, +1 - for each entity, gives the number, label, type and result type and/or status (fail / warning...), +2 - for each entity, gives the maximum information (check result), +3 - counts per type of starting entity (class type), +4 - counts per result type and/or status, +5 - counts per couple (starting type / result type/status), +6 – does the same thing plus gives for each item, the list of numbers of entities in the starting model +if what is 4 or 5 - mode is treated as enumeration IFSelect_PrintCount. + * IGESControl_Reader:: PrintTransferInfo +void PrintTransferInfo( const IFSelect_PrintFail failwarn, const IFSelect_PrintCount mode) const; +Purpose: Displays information concerning the last transfer on the default trace file according to the given parameters: +mode defines what will be printed: +IFSelect_GeneralCount - general statistics (number of selected IGES entities, number of root IGES entities, number of resulting OCCT shapes, number of fail and warning messages), +IFSelect_CountByItem - number of IGES entities per each message type and IGES type and form, +IFSelect_ListByItem - number and a complete list of DE numbers of IGES entities per each message type and IGES type and form, +IFSelect_ResultCount - number of resulting OCCT shapes per each type of the shape, +IFSelect_Mapping - mapping of root IGES entities into OCCT shapes per IGES type and form and OCCT shape type. +failwarn defines if only fail messages (if failwarn is IFSelect_FailOnly) or both fail and warning messages (if it is IFSelect_FailAndWarn) will be printed if mode is IFSelect_CountByItem or IFSelect_ListByItem. +@subsubsection occt_1856844696_128830953124 Class IGESControl_Writer +

General description

+This class is intended to create and write an IGES file out of OCCT models. +IGES files produced by this component conform to IGES version 5.3. +This component gives a possibility to write an IGES file containing either geometric entities (conformant to IGES version less than 5.1) only or BRep entities (conformant to IGES version up to and including 5.3) as well. The writing mode is chosen by specifying the appropriate parameter. +The translation of an OCCT model (which can be a 2D or 3D geometric object or a topologic shape) into an IGES file is fulfilled in the following steps: +1.    initializing the file, +2.    setting the translation parameters, +3.    performing the translation itself, +4.    writing the IGES file. +Export to the IGES file can be performed on the basis of either an already existing IGES model (representation of the IGES file in memory) or a new one. The former case gives an opportunity to add geometric/topologic OCCT objects into an IGES model (file) that already exists. +

Methods

+
Constructors:
+ * IGESControl_Writer(); +Purpose: Creates a writer object with the default unit and write mode (Face). + * IGESControl_Writer( const Standard_CString unit, const Standard_Integer modecr = 0 ); +Purpose: Creates a writer object with the given values for the unit and write mode. +unit is the name of the units that are accepted by IGES in the upper case (« IN Â» or « INCH Â» for inches, « MM Â» for millimeters and so on), +modecr corresponds to write mode: +0 - Face (default), +1 - BRep + * IGESControl_Writer( const Handle(IGESData_IGESModel)& model, + const Standard_Integer modecr = 0); +Purpose: Creates a writer object with an already prepared IGES model and write mode. +
Methods dealing with IGES models
+ * IGESControl_Writer:: Model +Handle_IGESData_IGESModel Model() const; +Purpose: Returns the produced model. + * IGESControl_Writer:: ComputeModel() ; +void ComputeModel() ; +Purpose: Prepares the model before writing by setting the required statuses inside the model. +
Methods dealing with transfer processes
+ * IGESControl_Writer:: SetTransferProcess +void SetTransferProcess(const Handle(Transfer_FinderProcess)& TP) ; +Purpose: Sets the FinderProcess object for the writer. + * IGESControl_Writer:: TransferProcess +Handle_Transfer_FinderProcess TransferProcess() const; +Purpose: Returns the FinderProcess object (containing final results and messages if any). +
Methods for performing translation
+ * IGESControl_Writer:: AddShape +Standard_Boolean AddShape(const TopoDS_Shape& sh) ; +Purpose: Translates a shape sh to IGES entities and adds them to the model. +Returns True if done, False if sh is not suitable for IGES or is null. + * IGESControl_Writer:: AddGeom +Standard_Boolean AddGeom(const Handle(Standard_Transient)& geom) ; +Purpose: Translates geom (which must be a curve or a surface) to IGES entities and adds them to the model. +Returns True if done, False if geom is neither a surface nor a curve suitable for IGES or is null. + * IGESControl_Writer:: AddEntity +Standard_Boolean AddEntity(const Handle(IGESData_IGESEntity)& ent) ; +Purpose: Adds an IGES entity (and the ones it references) to the model. +Returns False if ent is null. +
Methods for writing an IGES file
+ * IGESControl_Writer:: Write +Standard_Boolean Write( Standard_OStream& S, const Standard_Boolean fnes = Standard_False) ; +Standard_Boolean Write( const Standard_CString file, const Standard_Boolean fnes = Standard_False) ; +Purpose: Prepares (call ComputeModel()) and writes the model to the stream S or to the file file. +Returns True if the operation was correctly performed, False in case of error. +If mode fnes is equal to True, the resulting file will be written in the FNES format. +
Method for obtaining statistics
+ * IGESControl_Writer:: PrintStatsTransfer +void PrintStatsTransfer( const Standard_Integer what, const Standard_Integer mode = 0) const; +Purpose: Intended to display all statistics on the last performed translation. +Remarks: At the present moment does nothing (an empty method). +Package IGESToBRep + +@subsubsection occt_1856844696_128830953125 General description +Performs the actual translation of IGES entities into OCCT objects. +This package recognizes an IGES entity, performs its translation into an OCCT object (which can be 2D or 3D geometric objects, topologic shapes or transformation matrices) and returns the resulting shapes with associated messages (if there are any) occurred during the translation. +Those IGES entities that can be translated into OCCT objects by this package are given in the following table: + +Finally, all geometric IGES entities (curves and surfaces) are translated into topologic shapes. OCCT geometric objects serve as a support for topology. +@subsubsection occt_1856844696_128830953126 Class IGESToBRep_Reader +

General description

+This class reads IGES files and translates their contents into OCCT shapes. +This class provides basic tools for loading, checking and translating IGES files into OCCT topologic shapes. It is complemented with more high-level features by class IGESControl_Reader. +The functionalities provided by this class are the following: + * loading a file into memory, + * checking an IGES model in memory, + * translating all root entities or one entity specified by its rank number into OCCT shapes, + * fetching the results. + +

Methods

+
Constructors:
+ * IGESToBRep_Reader(); +Purpose: Performs initialization calling IGESAppli::Init() and IGESSolid::Init(), creates a new Actor object for transfer. + +
Method for loading an IGES file into memory
+ * IGESToBRep_Reader:: LoadFile +Standard_Integer LoadFile(const Standard_CString filename) ; +Purpose: Loads an IGES file filename into memory calling IGESFile_Read(), sets the returned IGES model (representing the loaded IGES file) calling SetModel(). +
Method for checking an IGES file
+ * IGESToBRep_Reader:: Check +Standard_Boolean Check(const Standard_Boolean withprint) const; +Purpose: Performs checking of a loaded IGES file calling Interface_CheckTool and Interface_CheckIterator. If withprint is True outputs the results of checking to the default trace file. +
Methods for preparing the transfer process
+ * IGESToBRep_Reader:: SetModel +void SetModel(const Handle(IGESData_IGESModel)& model) ; +Purpose: Sets a new IGES model object. Clears the list of translated shapes (if there are any), sets a new transfer process object. + * IGESToBRep_Reader:: Model +Handle_IGESData_IGESModel Model() const; +Purpose: Returns the used IGES model object. + * IGESToBRep_Reader:: SetTransientProcess +void SetTransientProcess(const Handle(Transfer_TransientProcess)& TP) ; +Purpose: Sets the transfer process object. + * IGESToBRep_Reader:: TransientProcess +Handle_Transfer_TransientProcess TransientProcess() const; +Purpose: Returns the used transfer process object. + * IGESToBRep_Reader:: Actor +Handle_IGESToBRep_Actor Actor() const; +Purpose: Returns the used actor object. + * IGESToBRep_Reader::Clear +void Clear() ; +Purpose: Clears the list of translated shapes. +
Methods for translation
+ * IGESToBRep_Reader:: TransferRoots +void TransferRoots(const Standard_Boolean onlyvisible = Standard_True) +Purpose: Performs the translation of root entities (ones that are not referenced by others). If onlyvisible is True, translates only visible entities (with Blank status equal to 0). Sets the continuity in accordance with the static parameter read.iges.bspline.continuity. +If parameter read.maxprecision.mode is set to 1, calls to ShapeTool_Utils::LimitTolerance() for the resulting shape with parameters 0 and the maximum between read.maxprecision.val and the basis tolerance of processor. + * IGESToBRep_Reader:: Transfer +Standard_Boolean Transfer(const Standard_Integer num) ; +Purpose: Performs the translation of an entity specified by its rank number. +Creates an object of class IGESToBRep_CurveAndSurface and sets: +3D precision (taking its value either from the file or from the work session in accordance with the static parameter read.precision.mode), +the approximation mode parameter in accordance with static the parameter          read.iges.bspline.approxd1.mode, +the mode for a preferred computation of curves on a surface in accordance with the static parameter read.surfacecurve.mode, +the spline continuity parameter in accordance with the static parameter read.iges.bspline.continuity, +the transfer process object taken from itself. +Once all the fields have been filled out this method calls method TransferGeometry() with the IGES entity calculated by its rank number to obtain the OCCT shape. +Like method TransferRoots() this one also limits the tolerance if the static parameter          read.maxprecision.mode is set to 1. +Returns False if num is greater than the number of entities in the model or less than 1, otherwise returns True even if there was an exception during the transfer. +
Methods for fetching the results
+ * IGESToBRep_Reader:: IsDone +Standard_Boolean IsDone() const; +Purpose: Returns True if the last transfer was successful. + * IGESToBRep_Reader:: NbShapes +Standard_Integer NbShapes() const; +Purpose: Returns the number of shapes recorded in the result. + * IGESToBRep_Reader:: Shape +TopoDS_Shape Shape(const Standard_Integer num = 1) const; +Purpose: Returns the result number num where num is an integer between 1 and NbShapes(). If not returns a null shape. + * IGESToBRep_Reader:: OneShape +TopoDS_Shape OneShape() const; +Purpose: Returns all results in a single shape, which is: + * a null shape if there are no results, + * in the case of a single result, only that shape, + * a compound that lists all the results if there are several resulting shapes. +@subsection occt_1856844696_12883095313 Package IGESData +@subsubsection occt_1856844696_128830953131 General description +This package defines general objects for dealing with the IGES interface. +It gives a basic description of the IGES interface: + * defines the Model for IGES (class IGESData_IGESModel), + * defines the Protocol tool specific for IGES (class IGESData_Protocol) + * defines the basic class IGESData_IGESEntity describing abstract IGES entity + * defines classes derived from IGESEntity and representing general IGES entities (IGESData_LineFontEntity, IGESData_TransfEntity, IGESData_SingleParentEntity, etc.), +@subsubsection occt_1856844696_128830953132 Class IGESData_IGESModel +

General description

+Gives an access to the general data in the Start and the Global sections of an IGES file. +Defines a model specific for IGES. +An IGES file includes the following sections: +Start, +Global, +Directory Entry, +Parameter Data, +Terminate +Inheritance: +Interface_InterfaceModel +MMgt_TShared +Standard_Transient +

Methods

+
Constructor
+ * IGESData_IGESModel (); +Purpose: Creates an empty IGES Model. +
Methods for initializing
+ * IGESData_IGESModel::ClearHeader +void ClearHeader() ; +Purpose: Erases all the data in the Start and Global sections. + * IGESData_IGESModel::NewEmptyModel +Handle_Interface_InterfaceModel NewEmptyModel() const; +Purpose: Returns a new Empty Model of the same type as this object, i.e. of type IGESData_IGESModel. +
Methods for dealing with the Start and the Global sections
+ * IGESData_IGESModel::DumpHeader +void DumpHeader(Standard_OStream& S, const Standard_Integer level = 0) const; +Remark: the Integer parameter is intended to be used as a level indicator, but not used for the moment. + * IGESData_IGESModel::StartSection +Handle_TColStd_HSequenceOfHAsciiString StartSection() const; +Purpose: Returns the Start section of the Model as a list of lines. + * IGESData_IGESModel::NbStartLines +Standard_Integer NbStartLines() const; +Purpose: Returns the number of the lines in the Start section. + * IGESData_IGESModel::StartLine +Standard_CString StartLine(const Standard_Integer num) const; +Purpose: Returns a line from the Start section specified by number num. +Remark: An empty string is returned if number num is out of range [1, NbStartLines()]. + * IGESData_IGESModel::ClearStartSection +void ClearStartSection() ; +Purpose: Clears the Start section. + * IGESData_IGESModel::SetStartSection +void SetStartSection(const Handle(TColStd_HSequenceOfHAsciiString)& list, const Standard_Boolean copy = Standard_True) ; +Purpose:  Sets a new Start section from the list of strings list, copying it if copy is True (by default) or pointing to the list if copy is False. + * IGESData_IGESModel::AddStartLine +void AddStartLine(const Standard_CString line, const Standard_Integer atnum = 0) ; +Purpose: Adds a new string to the end of the existing Start section if atnum is 0 or not given, or before the atnum-th line. +Remark: If a number is out of range [0, NbStartLines()], the line is added at the end of section. + * IGESData_IGESModel::GlobalSection +const IGESData_GlobalSection& GlobalSection() const; +Purpose: Returns the Global section of the Model. + * IGESData_IGESModel::SetGlobalSection. +void SetGlobalSection(const IGESData_GlobalSection& header) ; +Purpose: Sets the Model's Global section. + * IGESData_IGESModel::ApplyStatic +Standard_Boolean ApplyStatic(const Standard_CString param = ;;) ; +Purpose: Sets some parameters of the Global section to those defined by static parameters (see parameters of translation). The allowed values for param (all by default) are: receiver, author and company (these are acronyms of static parameters). Returns True when done and if param is given, False if param is unknown or empty. +Remark: To set a unit into the Global section use the IGESData_BasicEditor class. +See also: User’s Guide: Parameters of translation. + * IGESData_IGESModel::GetFromAnother +void GetFromAnother(const Handle(Interface_InterfaceModel)& other) ; +Purpose: Takes the Global section from another Model. + * IGESData_IGESModel::VerifyCheck +virtual void VerifyCheck(Interface_Check& ach) const; +Purpose: Checks whether the Global section contains valid data according to the IGES specification. If the Global section is correct this method adds nothing into ach, but if not the method adds fail messages. + * IGESData_IGESModel::SetLineWeights +void SetLineWeights(const Standard_Real defw) ; +Purpose: Sets LineWeights of entities according to the Global section (MaxLineWeight and LineWeightGrad values) or to a default value (defw) for undefined weights. +
Methods for dealing with IGES entities
+ * IGESData_IGESModel::ClearLabels() ; +void ClearLabels() ; +Purpose: Erases labels. Not yet implemented. + * IGESData_IGESModel::PrintLabel +void PrintLabel(const Handle(Standard_Transient)& ent, Standard_OStream& S) const; +Purpose: Prints the Directory Entry number of a given entity, i.e. 'Dnn' where Dnn=2*number-1on the stream S. + * IGESData_IGESModel::StringLabel +Handle_TCollection_HAsciiString StringLabel (const Handle(Standard_Transient)& ent) const; +Purpose: Returns a string with a Directory Entry number of a given entity, i.e. a string 'Dnn' where Dnn=2*number-1. + * IGESData_IGESModel::Entity +Handle_IGESData_IGESEntity Entity(const Standard_Integer num) const; +Purpose: Returns an entity given by its rank number. + * IGESData_IGESModel::DNum +Standard_Integer DNum(const Handle(IGESData_IGESEntity)& ent) const; +Purpose: Returns the DE Number of an entity, i.e. 2*Number(ent)-1, or 0 if ent is unknown from this Model. +@subsubsection occt_1856844696_128830953133 Class IGESData_IGESEntity +

General description

+Represents an abstract IGES entity. +This class provides an access to common IGES entity fields (TypeNumber, TransformationMatrix, +etc.). +This class is a basic one for other classes complementing it to represent a certain IGES entity. +Refer to the IGES specification for more details. +Inheritance +MMgt_TShared +Standard_Transient +

Methods

+
Constructors:
+ * IGESData_IGESEntity(); +Purpose: Creates an empty object. Sets all values to defaults (calls Clear()). +
Methods for initializing fields of object.
+ * IGESData_IGESEntity::Clear +void Clear() ; +Purpose: Clears all fields of the object. + * IGESData_IGESEntity::InitTypeAndForm +void InitTypeAndForm( const Standard_Integer typenum, const Standard_Integer formnum) ; +Purpose: Sets the Type and Form Numbers to new values. +Remarks: Private method. Reserved for special use. + * IGESData_IGESEntity::InitDirFieldEntity +void InitDirFieldEntity( const Standard_Integer fieldnum, const Handle(IGESData_IGESEntity)& ent) ; +Purpose: Sets a directory field to an ent of any kind (see DirFieldEntity() for more details). +Remarks: If fieldnum is not equal to values listed in DirFieldEntity(), this method does nothing. + * IGESData_IGESEntity::InitTransf +void InitTransf(const Handle(IGESData_TransfEntity)& ent) ; +Purpose: Sets the Transf or erases it if ent is null. + * IGESData_IGESEntity::InitView +void InitView(const Handle(IGESData_ViewKindEntity)& ent) ; +Purpose: Sets the View or erases it if ent is null. + * IGESData_IGESEntity::InitLineFont +void InitLineFont( const Handle(IGESData_LineFontEntity)& ent, const Standard_Integer rank = 0) ; +Purpose: Sets the LineFont. If ent is null the RankLineFont is set to rank, otherwise it is set to a negative value. + * IGESData_IGESEntity::InitLevel +void InitLevel( const Handle(IGESData_LevelListEntity)& ent, const Standard_Integer val = 0) ; +Purpose: Sets the Level. If ent is null the DefLevel is set to val, otherwise it is set to a negative value. + * IGESData_IGESEntity::InitColor +void InitColor( const Handle(IGESData_ColorEntity)& ent, const Standard_Integer rank = 0) ; +Purpose: Sets the Color. If ent is null the DefColor is set to rank, otherwise it is set to a negative value. + * IGESData_IGESEntity::InitStatus +void InitStatus( const Standard_Integer blank, +          const Standard_Integer subordinate, +          const Standard_Integer useflag, +          const Standard_Integer hierarchy) ; +Purpose: Sets the flags of the Directory Part. + * IGESData_IGESEntity::SetLabel +void SetLabel( const Handle(TCollection_HAsciiString)& label, const Standard_Integer sub = -1) ; +Purpose: Sets a new Label to an Entity. If sub is given, it sets the value of SubScriptNumber, else SubScriptNumber is erased. + * IGESData_IGESEntity::InitMisc +void InitMisc( const Handle(IGESData_IGESEntity)& str, +          const Handle(IGESData_LabelDisplayEntity)& lab, +          const Standard_Integer weightnum) ; +Purpose: Sets data or erases it if it is given as null (zero for weightnum): +          str for Structure, +          lab for LabelDisplay, +          weightnum for WeightNumber + * IGESData_IGESEntity::SetLineWeight +void SetLineWeight( const Standard_Real defw, +                   const Standard_Real maxw, +                   const Standard_Integer gradw) ; +Purpose: Computes and sets the ;true; line weight according to IGES rules from the global data          MaxLineWeight (maxw) and LineWeightGrad (gradw), or sets it to defw (Default) if LineWeightNumber is null +Remarks: If gradw is zero, there is division by zero in this method. +
Methods for querying the corresponding fields of an IGES entity.
+ * IGESData_IGESEntity::IGESType +IGESData_IGESType IGESType() const; +Purpose: Returns information on the IGES type of an entity including the type and the form of that entity. + * IGESData_IGESEntity::TypeNumber +Standard_Integer TypeNumber() const; +Purpose: Returns the IGES Type number. + * IGESData_IGESEntity::FormNumber +Standard_Integer FormNumber() const; +Purpose: Returns the IGES Form number. + * IGESData_IGESEntity::DirFieldEntity +Handle_IGESData_IGESEntity DirFieldEntity(const Standard_Integer fieldnum) const; +Purpose: Returns the Entity that is recorded for a given Field Number fieldnum where: +               3 - Structure +               4 - LineFont +               5 - LevelList +               6 - View +               7 - Transf(ormation Matrix) +               8 - LabelDisplay +               13 - Color. +               In a case of other values it returns a null handle. + + * IGESData_IGESEntity::HasStructure +Standard_Boolean HasStructure() const; +Purpose: Returns True if an IGES entity is defined with a structure (it is normally reserved for certain classes, such as Macros). + * IGESData_IGESEntity::Structure +Handle_IGESData_IGESEntity Structure() const; +Purpose: Returns the Structure (used by some types of IGES entities only), returns a null handle if Structure is not defined. + * IGESData_IGESEntity::DefLineFont +IGESData_DefType DefLineFont() const; +Purpose: Returns the definition status of LineFont. + * IGESData_IGESEntity::RankLineFont +Standard_Integer RankLineFont() const; +Purpose: Returns LineFont definition as an integer if it is defined as Rank. If LineFont is defined as an Entity, returns a negative value + * IGESData_IGESEntity::LineFont +Handle_IGESData_LineFontEntity LineFont() const; +Purpose: Returns LineFont as an entity if it is defined as Reference. Returns a null handle if          DefLineFont is not ;DefReference;. + * IGESData_IGESEntity::DefLevel +IGESData_DefList DefLevel() const; +Purpose: Returns the definition status of Level. + * IGESData_IGESEntity::Level +Standard_Integer Level() const; +Purpose: Returns Level definition as an integer. + * IGESData_IGESEntity::LevelList +Handle_IGESData_LevelListEntity LevelList() const; +Purpose: Returns LevelList if Level is defined as List. Returns a null handle if DefLevel is not          ;DefSeveral;. + * IGESData_IGESEntity::DefView +IGESData_DefList DefView() const; +Purpose: Returns the definition status of View (None,One or Several). + * IGESData_IGESEntity::View +Handle_IGESData_ViewKindEntity View() const; +Purpose: Returns the View (either Single or List) if it is defined. Returns a null handle if it is not defined. + + * IGESData_IGESEntity::SingleView +Handle_IGESData_ViewKindEntity SingleView() const; +Purpose: Returns View as Single, if defined as One. Returns a null handle if DefView is not          ;DefOne;. + * IGESData_IGESEntity::ViewList +Handle_IGESData_ViewKindEntity ViewList() const; +Purpose: Returns View as a List. Returns a null handle if DefView is not ;DefSeveral;. + * IGESData_IGESEntity::HasTransf +Standard_Boolean HasTransf() const; +Purpose: Returns True if a Transformation Matrix is defined. + * IGESData_IGESEntity::Transf +Handle_IGESData_TransfEntity Transf() const; +Purpose: Returns the Transformation Matrix (under IGES definition). Returns a null handle if there is none. +Remarks: For a more complete use, see Location & CompoundLocation. + * IGESData_IGESEntity::HasLabelDisplay +Standard_Boolean HasLabelDisplay() const; +Purpose: Returns True if the LabelDisplay mode is defined for this entity. + * IGESData_IGESEntity::LabelDisplay +Handle_IGESData_LabelDisplayEntity LabelDisplay() const; +Purpose: Returns the LabelDisplay, if there is one; else returns a null handle. + * IGESData_IGESEntity::BlankStatus +Standard_Integer BlankStatus() const; +Purpose: Returns the Blank Status (0 - visible, 1 - blanked). + * IGESData_IGESEntity::SubordinateStatus +Standard_Integer SubordinateStatus() const; +Purpose: Returns the Subordinate Switch (0-1-2-3) + * IGESData_IGESEntity::UseFlag +Standard_Integer UseFlag() const; +Purpose: Returns the Use Flag (0 to 5) of an entity. + * IGESData_IGESEntity::HierarchyStatus +Standard_Integer HierarchyStatus() const; +Purpose: Returns the Hierarchy status (0-1-2). + * IGESData_IGESEntity::LineWeightNumber +Standard_Integer LineWeightNumber() const; +Purpose: Returns the LineWeight Number (0 if it is not defined). +See also: LineWeight. + + * IGESData_IGESEntity::LineWeight +Standard_Real LineWeight() const; +Purpose: Returns ;true; LineWeight, computed from LineWeightNumber and the global parameter of          the Model by call to SetLineWeight. + * IGESData_IGESEntity::DefColor +IGESData_DefType DefColor() const; +Purpose: Returns the definition status of Color. + * IGESData_IGESEntity::RankColor +Standard_Integer RankColor() const; +Purpose: Returns the Color definition as an Integer (if defined as Rank). If Color is defined as an Entity, returns a negative value. + * IGESData_IGESEntity::Color +Handle_IGESData_ColorEntity Color() const; +Purpose: Returns the Color as an Entity (if defined as Reference) or a null handle if Color          Definition is not ;DefReference;. + * IGESData_IGESEntity::CResValues +Standard_Boolean CResValues( const Standard_CString res1, +          const Standard_CString res2) const; +Purpose: Fills res1 and res2 with inner ;reserved; alphanumeric fields theRes1 and          theRes2. Returns False if both are blank, otherwise returns True. +Warning: Both must be of a length equal to at least 9 characters. The contents of res1 and res2 are modofied. The 9-th character becomes null. + * IGESData_IGESEntity::HasShortLabel +Standard_Boolean HasShortLabel() const; +Purpose: Returns True if ShortLabel is not null. + * IGESData_IGESEntity::ShortLabel +Handle_TCollection_HAsciiString ShortLabel() const; +Purpose: Returns label value as a string (null if ShortLabel is blank). + * IGESData_IGESEntity::HasSubScriptNumber +virtualStandard_Boolean HasSubScriptNumber() const; +Purpose: Returns True if SubScript Number is defined. + * IGESData_IGESEntity::SubScriptNumber +Standard_Integer SubScriptNumber() const; +Purpose: Returns SubScript Number as an integer (0 if not defined). + * IGESData_IGESEntity::HasOneParent() +Standard_Boolean HasOneParent() const; +Purpose: Returns True if an entity has one and only one parent, defined by a SingleParentEntity Type Associativity (explicit sharing). +Remarks: Thus, implicit sharing remains defined at the model level. +See class ToolLocation. + * IGESData_IGESEntity::UniqueParent() const; +Handle_IGESData_IGESEntity UniqueParent() const; +Purpose: Returns the Unique Parent (if it is the one). +Exceptions: Interface_InterfaceError if there are either several or no parents. + * IGESData_IGESEntity::Location() +gp_GTrsf Location() const; +Purpose: Returns the entity Location given by Transf in the Directory Part (see above). Considers local location only (not taking into account the parent's one - see CompoundLocation for that). If no Transf is defined, returns Identity. + * IGESData_IGESEntity::VectorLocation() +gp_GTrsf VectorLocation() const; +Purpose: Returns the Translation part of a local location (as for Location). + * IGESData_IGESEntity::CompoundLocation() +gp_GTrsf CompoundLocation() const; +Purpose: Returns the location of this object combined with CompoundLocation of its Parent (i.e. can          be recursive). If the Parent is not single (see HasOneParent) returns Location. + * IGESData_IGESEntity::HasName() +Standard_Boolean HasName() const; +Purpose: Says if a Name is defined as Short Label or as Name Property. (Property is looked for          first, otherwise ShortLabel is considered). + * IGESData_IGESEntity::NameValue() +Handle_TCollection_HAsciiString NameValue() const; +Purpose: Returns the Name value as a String (Property Name or ShortLabel). If SubNumber is          defined, it is concatenated after ShortLabel as follows - label (number). Ignored in case of Property Name. +
Methods for dealing with associativities and properties.
+ * IGESData_IGESEntity::ArePresentAssociativities() +Standard_Boolean ArePresentAssociativities() const; +Purpose: Returns True if the Entity is defined with an Associativity list, even an empty one (i.e., the file is of 0 length). Otherwise returns False (the file contains no identification concerning this list at all). + * IGESData_IGESEntity::NbAssociativities +Standard_Integer NbAssociativities() const; +Purpose: Returns the number of recorded associativities (0 if no list is defined). + * IGESData_IGESEntity::Associativities +Interface_EntityIterator Associativities() const; +Purpose: Returns the Associativity List in the form of an EntityIterator. + * IGESData_IGESEntity::NbTypedAssociativities +Standard_Integer NbTypedAssociativities +          const Handle(Standard_Type)& atype) const; +Purpose: Returns information on how many Associativities have the given type. + + * IGESData_IGESEntity::TypedAssociativity +Handle_IGESData_IGESEntity TypedAssociativity +          (const Handle(Standard_Type)& atype) const; +Purpose: Returns the Associativity of a given Type (if one exists) +Exceptions: Interface_InterfaceError if there is none or more than one associativity. + * IGESData_IGESEntity::AddAssociativity +void AddAssociativity(const Handle(IGESData_IGESEntity)& ent) ; +Purpose: Adds an Associativity to the list (called by Associate only). +Exceptions: Standard_NullObject if ent is null. + * IGESData_IGESEntity::RemoveAssociativity +void RemoveAssociativity(const Handle(IGESData_IGESEntity)& ent) ; +Purpose: Removes an Associativity from the list (called by Dissociate). +Exceptions: Standard_NullObject if ent is null. + * IGESData_IGESEntity::LoadAssociativities +void LoadAssociativities(const Interface_EntityList& list) ; +Purpose: Loads a complete List of Asociativities (used during Read or Copy operations). + * IGESData_IGESEntity::ClearAssociativities +void ClearAssociativities() ; +Purpose: Removes all associativities at once. + * IGESData_IGESEntity::Associate +void Associate(const Handle(IGESData_IGESEntity)& ent) const; +Purpose: Sets this object to the Associativity list of another Entity. If ent is a null object, method does nothing. + * IGESData_IGESEntity::Dissociate +void Dissociate(const Handle(IGESData_IGESEntity)& ent) const; +Purpose: Removes this object from the Associativity list of another Entity. If ent is a null object, method does nothing. + * IGESData_IGESEntity::ArePresentProperties +Standard_Boolean ArePresentProperties() const; +Purpose: Returns True if the Entity is defined with a Property list, even an empty one (i.e., the file is of 0 length). Otherwise, returns False (file contains no identification concerning this list at all). + * IGESData_IGESEntity::NbProperties() +Standard_Integer NbProperties() const; +Purpose: Returns the number of recorded properties (0 if no list is defined) + * IGESData_IGESEntity::Properties() +Interface_EntityIterator Properties() const; +Purpose: Returns the Property List in the form of an EntityIterator + * IGESData_IGESEntity::NbTypedProperties +Standard_Integer NbTypedProperties +          (const Handle(Standard_Type)& atype) const; +Purpose: Returns information on how many Properties have a given type + * IGESData_IGESEntity::TypedProperty +Handle_IGESData_IGESEntity TypedProperty +          (const Handle(Standard_Type)& atype) const; +Purpose: Returns the Property of a given Type (if only one exists) +Exceptions: Interface_InterfaceError if there is none or more than one Properties. + * IGESData_IGESEntity::AddProperty +void AddProperty(const Handle(IGESData_IGESEntity)& ent) ; +Purpose: Adds a Property to the list. +Exceptions: Standard_NullObject if entis null. + * IGESData_IGESEntity::RemoveProperty +void RemoveProperty(const Handle(IGESData_IGESEntity)& ent) ; +Purpose: Removes a Property from the list. +Exceptions: Standard_NullObject if entis null. + * IGESData_IGESEntity::LoadProperties +void LoadProperties(const Interface_EntityList& list) ; +Purpose: Loads a complete List of Properties (used during Read or Copy operations). + * IGESData_IGESEntity::ClearProperties() ; +void ClearProperties() ; +Purpose: Removes all properties at once + + + +@section occt_1856844696_722523915 Using XSTEPDRAW +@subsection occt_1856844696_7225239151 XSDRAWIGES Overview +XSTEPDRAW UL is intended for creating executables for testing XSTEP interfaces interactively in the DRAW environment. It provides an additional set of DRAW commands specific for the data exchange tasks, which allow loading and writing data files and analysis of resulting data structures and shapes. +This paragraph 5 is divided into several sections. Sections 5.3 and 5.5 deal with reading and writing of IGES files and are intended specifically for the IGES processor, sections 5.2 and 5.4 describe some general tools for setting parameters and analyzing the data. Most of them are independent of the norm being tested. Additionally, a table of mentioned DRAW commands is provided. +***NOTE*** +In the description of commands, square brackets ([]) are used to indicate optional parameters. Parameters given in the angle brackets () and sharps (#) are to be substituted by an appropriate value. When several exclusive variants are possible, vertical dash (|) is used. +@subsection occt_1856844696_7225239152 Setting interface parameters +A set of parameters for importing and exporting IGES files is defined in the XSTEP resource file. In XSTEPDRAW, these parameters can be viewed or changed using command +Draw param [parameter_name [value]] +Command param with no arguments gives a list of all parameters with their values. When argument parameter_name is specified, information about this parameter is printed (current value and short description). +The third argument is used to set a new value of the given parameter. The result of the setting is printed immediately. +During all interface operations, the protocol of the process (fail and warning messages, mapping of the loaded entities into OCCT shapes etc.) can be output to the trace file. Two parameters are defined in the DRAW session: trace level (integer value from 0 to 9, default is 0), and trace file (default is a standard output). +Command xtrace is intended to view and change these parameters: +Draw xtrace +- prints current settings (e.g.: ;Level=0 - Standard Output;); +Draw xtrace # +- sets the trace level to the value #; +Draw xtrace tracefile.log +- sets the trace file as tracefile.log; and +Draw xtrace . +- directs all messages to the standard output. + +@subsection occt_1856844696_7225239153 Reading IGES files +For a description of parameters used in reading an IGES file refer to 2.3.3 ;Setting the translation parameters ;. +These parameters are set by command param: + + +It is possible either only to load an IGES file into memory (i.e. to fill the model with data from the file), or to read it (i.e. to load and convert all entities to OCCT shapes). +Loading is done by the command +Draw xload file_name +Once the file is loaded, it is possible to investigate the structure of the loaded data. To learn how to do it see 5.4 Analyzing the transferred. +Reading of an IGES file is done by the command +Draw igesbrep file_name result_shape_name [selection] +Here a dot can be used instead of a filename if the file is already loaded by **xload** or **igesbrep** command. In that case, only conversion of IGES entities to OCCT shapes will be done. +Command **igesbrep** will interactively ask the user to select a set of entities to be converted: + + +After the selected set of entities is loaded the user will be asked how loaded entities should be converted into OCCT shapes (e.g., one shape per root or one shape for all the entities). It is also possible to save loaded shapes in files, and to cancel loading. +The second parameter of the **igesbrep** command defines the name of the loaded shape. If several shapes are created, they will get indexed names. For instance, if the last parameter was ‘s’, they will be s_1, ... s_N. +selection specifies the scope of selected entities in the model, it is xst-transferrable-roots by default. An asterisk “*” can be specified instead of iges-visible-transf-roots. For possible values for selection refer to 2.3.4. +Instead of igesbrep the following commands can be used: +Draw trimport file_name result_shape_name selection +which outputs the result of translation of each selected entity into one shape, +Draw trimpcomp file_name result_shape_name selection +which outputs the result of translation of all selected entities into one shape (TopoDS_Compound for several entities). +An asterisk “*” can be specified instead of selection, it means xst-transferrable-roots. +During the IGES translation, a map of correspondence between IGES entities and OCCT shapes is created. +To get information on the result of translation of the given IGES entity the command +Draw tpent # +is used. +To create an OCCT shape corresponding to an IGES entity the command +Draw tpdraw # +is used. +To get the number of an IGES entity corresponding to an OCCT shape the command +Draw fromshape shape_name +is used. +To clear the map of correspondences between IGES entities and OCCT shapes the command +Draw tpclear +is used. +@subsection occt_1856844696_7225239154 Analyzing the transferred data +The procedure of analysis of the data import can be divided into two stages: +1.    checking the file contents, +2.    estimation of translation results (conversion and validated ratios). +@subsubsection occt_1856844696_72252391541 Checking file contents +General statistics on the loaded data can be obtained by using command +Draw data symbol +The information printed by this command depends on the symbol specified: + + +There is a set of special objects, which can be used to operate with the loaded model. They can be of the following types: + +A list of these objects defined in the current session can be printed in DRAW by command +Draw listitems +In the following commands if several selection arguments are specified the results of each following selection are applied to those of the one preceding it. +Command +Draw givelist selection_name [selection_name] +prints a list of loaded entities defined by selection argument. For possible values of selection_name please refer to 2.3.4. +Command +Draw givecount selection_name [selection_name] +prints a number of loaded entities defined by selection argument. For possible values of selection_name please refer to 2.3.4. +Three commands are used to calculate statistics on the entities in the model: +Draw count counter [selection ...] +Prints only a number of entities per each type matching the criteria defined by arguments. +Draw sumcount counter [selection ...] +Prints the total number of entities of all types matching the criteria defined by arguments and the largest number corresponding to one type. +Draw listcount counter [selection ...] +Prints a list of entities per each type matching the criteria defined by arguments. +Optional selection argument, if specified, defines a subset of entities, which are to be taken into account. Argument counter should be one of the currently defined counters: + +Command +Draw listtypes selection_name ... +gives a list of entity types which were encountered in the last loaded file (with a number of IGES entities of each type). The list can be shown not for all entities but for a subset of them. This subset is defined by an optional selection argument. + +Entities in the IGES file are numbered in the succeeding order. An entity can be identified either by its number (#) or by its label. Label is the letter ‘D’ followed by the index of the first line with the data for this entity in the Directory Entry section of the IGES file. The label can be calculated on the basis of the number as ‘D(2*# -1)’. For example, entity # 6 has label D11. To get a label for an entity with a known number, command +Draw elab # +can be used. +In the same way, command +Draw enum D# +prints a number for an entity with the given label. +The content of an IGES entity can be obtained by using command +Draw entity # level_of_information +The list of entities referenced by a given entity and the list of entities referencing to it can be obtained by command +Draw estat # +@subsubsection occt_1856844696_72252391542 Estimating the results of reading IGES +All of the following commands are available only after the data are converted into OCCT shapes (i.e. after command **igesbrep**). +Command +Draw tpstat [*|?]symbol [selection] +is provided to get all statistics on the last transfer, including the list of transferred entities with mapping from IGES to OCCT types, as well as fail and warning messages. The parameter *symbol *defines what information will be printed: + + +The sign ‘*’ before the parameters **n**, **s**, **b**, **t**, **r** makes it work on all entities (not only on roots). The sign ‘?’ before **n**, **s**, **b**, **t** limits the scope of information to invalid entities. +Optional argument selection can limit the action of the command with a selected subset of entities. +To get help, run this command without arguments. +Example. Translation ratio on IGES faces. +Draw: tpstat *l iges-faces +The second version of the same command is TPSTAT (not capital spelling). +Draw: TPSTAT symbol +Symbol can be of the following values: + +Sometimes the trimming contours of IGES faces (i.e., entity 141 for 143, 142 for 144) can be lost during translation due to fails. To obtain the number of lost trims and the number of corresponding IGES entities the command +Draw tplosttrim [IGES_type] +is used. It outputs the rank and DE numbers of faces that lost their trims and their numbers for each type (143, 144, 510) and their total number. If a face lost several of its trims it is output only once. +Optional parameter IGES_type can be TrimmedSurface, BoundedSurface or Face to specify the only type of IGES faces. +Example. Untrimmed 144 entities. +Draw tplosttrim TrimmedSurface +To get information on OCCT shape contents the command +Draw statshape shape_name +is used. +It outputs the number of each kind of shapes (vertex, edge, wire, etc.) in a shape and some geometrical data (number of C0 surfaces, curves, indirect surfaces, etc.). +Note. The number of faces is returned as a number of references. To obtain the number of single instances the standard command (from TTOPOLOGY executable) **nbshapes** can be used. +To analyze the internal validity of a shape, command +Draw checkbrep shape_name expurged_shape_name +is used. It checks the geometry and topology of a shape for different cases of inconsistency, like self-intersecting wires or wrong orientation of trimming contours. If an error is found, it copies bad parts of the shape with the names ; expurged_subshape_name _#; and generates an appropriate message. If possible, this command also tries to find IGES entities the OCCT shape was produced from. +expurged_shape_name will contain the original shape without invalid subshapes. +To get information on tolerances of subshapes the command +Draw tolerance shape_name [min [max] [symbol]] +is used. It outputs maximum, average and minimum values of tolerances for each kind of subshapes having tolerances or it can output tolerances of all subshapes of the whole shape. +When specifying min and max arguments this command outputs shapes with names shape_name_... and their total number with tolerances in the range [min, max]. +Symbol is used for specifying the kind of sub-shapes to analyze: v - for vertices, e - for edges, f - for faces, c - for shells and faces. +@subsection occt_1856844696_7225239155 Writing an IGES file +For a description of parameters used in reading an IGES file refer to 3.3.2 Setting the translation parameters. +These parameters are set by command **param**: + + +Several shapes can be written in one file. To start writing a new file, enter command +Draw newmodel +Actually, command **newmodel** will clear the InterfaceModel to make it empty, and the next command will convert the specified shapes to IGES entities and put them into the InterfaceModel: +Draw brepiges shape_name_1 [filename.igs] +To write the prepared model to a file with name **filename.igs**, enter +Draw writeall filename.igs +@subsection occt_1856844696_7225239156 Index of useful commands + + + + +@section occt_1856844696_332489123 Reading from and writing to XDE +@subsection occt_1856844696_3324891231 Description of the process +@subsubsection occt_1856844696_33248912311 Loading an IGES file +Before performing any other operation, you must load an IGES file with: +IGESCAFControl_Reader reader(XSDRAW::Session(), Standard_False); +IFSelect_ReturnStatus stat = reader.ReadFile(“filename.igs”); +Loading the file only memorizes, but does not translate the data. +@subsubsection occt_1856844696_33248912312 Checking the loaded IGES file +This step is not obligatory. See the description of this step below in paragraph 2.3.2. +@subsubsection occt_1856844696_33248912313 Setting parameters for translation to XDE +See the description of this step below in paragraph 2.3.3. +In addition, the following parameters can be set for XDE translation of attributes: +• Parameter for transferring colors: +reader.SetColorMode(mode); +// mode can be Standard_True or Standard_False +• Parameter for transferring names: +reader.SetNameMode(mode); +// mode can be Standard_True or Standard_False +@subsubsection occt_1856844696_33248912314 Performing the translation of an IGES file to XDE +The following function performs a translation of the whole document: +Standard_Boolean ok = reader.Transfer(doc); +where ;doc;  is a variable which contains a handle to the output document and should have a type Handle(TDocStd_Document). +@subsubsection occt_1856844696_33248912315 Initializing the process of translation from XDE to IGES +Here is how the process is initialized: +IGESCAFControl_Writer aWriter(XSDRAW::Session(),Standard_False); +@subsubsection occt_1856844696_33248912316 Setting parameters for translation from XDE to IGES +The following parameters can be set for translation of attributes to IGES: +• Parameter for transferring colors: +aWriter.SetColorMode(mode); +// mode can be Standard_True or Standard_False +• Parameter for transferring names: +aWriter.SetNameMode(mode); +// mode can be Standard_True or Standard_False +@subsubsection occt_1856844696_33248912317 Performing the translation of an XDE document to IGES +You can perform the translation of a document by calling the function: +IFSelect_ReturnStatus aRetSt = aWriter.Transfer(doc); +where ;doc;  is a variable which contains a handle to the input document for transferring and should have a type Handle(TDocStd_Document). +@subsubsection occt_1856844696_33248912318 Writing an IGES file +Write an IGES file with: +IFSelect_ReturnStatus statw = aWriter.WriteFile(;filename.igs;); +or +IFSelect_ReturnStatus statw = writer.WriteFile (S); +where S is OStream + + diff --git a/dox/user_guides/iges/images/iges_image001.jpg b/dox/user_guides/iges/images/iges_image001.jpg new file mode 100644 index 0000000000000000000000000000000000000000..0e782cab77acff25a6036d54ba65f069d489b6a6 GIT binary patch literal 6870 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 m*2l*OQXOT`qhpC@6q? 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 A!vFvP literal 0 HcmV?d00001 diff --git a/dox/user_guides/iges/images/iges_image004.jpg b/dox/user_guides/iges/images/iges_image004.jpg new file mode 100644 index 0000000000000000000000000000000000000000..f0f591d39a49a42b5bc7ce61b9dba91f32a79f63 GIT binary patch literal 26189 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 UylwSgXS2VI#{cRP)URLu0a>KvmjD0& literal 0 HcmV?d00001 diff --git a/dox/user_guides/modeling_algos/images/modeling_algos_image001.jpg b/dox/user_guides/modeling_algos/images/modeling_algos_image001.jpg new file mode 100644 index 0000000000000000000000000000000000000000..0e782cab77acff25a6036d54ba65f069d489b6a6 GIT binary patch literal 6870 zcmbuDWl)??o9-Vh5Zomh+#zVNpn>27_dx>*8XN`>K?1>@;O;JiLkPhk1a}Jz5F7^A zndSfP*1J{b!>Mz2yX*S&banTy`|7)&yOHzAKLDY!yplYCf`S5=KUM&_1iS&TF)^_) zpI~EQVc}q73A6xrBeh1KrFo@~-q@R#z zzQbg2A>|K@&%v`MG<3{=xKL0%AB9GQjzQ1&gjiY=^PLL`1AibEsZ4xcUH4PQms%%e z7OoT64^B7k9#=mbP-4V}jJQRW`x59qV5ok`72p-G`yx#2 zwymZ@?5|!kRphE%q#WMn>$&$JHJZ+pvazt=TvU{PE0XuQ_B2pLC1y zp$heacM^O&XPnlXr~9lxH}|xLmxe!V=uf288Q*Sv#K8g1bGAs2K3f?_=ZUR8#e%$ZZcyXJ(7VW)EKG)WHG?-x2{%!ND z^?PB?zUdcH&`4T4BbD0k!Ha7Tf1&lCZ%U2CXd>#%ST8D)Hz`cXXDc_(Sf<`{h!xY) zejbH<2O>30SPW~JlX{Q8GA2r~Q7ev#u-<5u$@9eud~lA+fY|KqR_{JbfnZ~5sbTOa z!;gvVR4eQ~g`bbebril4#{l6HeCmpp<1n3=cm2kGfVIyMCXZVZCp{>z2m4NKM*~Td z2&PS6xuP38X+{FZw7=W2(*_dMm{~oX%U$hm->Ye<%FIxD;PD6F@BjAG-7w11LfG3_ z*&O6sM0|DGChBIL+cgvt6)Gq#kVuY7WXL4f49t0(z7z9&r6Vh9MfGF+L7cI)YsTSr zj1JXI- z8;jQZtmO|s<4~_y>nLlCK>v(yN1)&eR6)jf80&#^8&4C-xNn7^Y)1Sc z$=Kj0(>p2!i`)}61;Jzyw~?eWG0v=`EyT(F4mwevmmm4riZVlUs8S*0QU6n^BBO{i z{fTNosrrx!bYLN`a90v+!h^FY>ubiiP)3z3Z}3@S)D=Mjx4s+_^32nMQ_$6*YAy%P z-|4@E-E1ZHT2aJDx%9S^h~xfcB}=ktmQ=`7vzt>W_MQkBlSKmGztFgwolQs`=a~wZ z?D(XV$1+D3ye)O^M>Jv-a)$H@rXWnNHoQlnur7(I^$TG*HXVbrryq8P&3H+iha|?WMO$Fe=qg3J=#n^ z(&z-E@4(WQUQhNng!f&%fhd0F)UNCFbfWkXDe=Zmf7L36Sy-l5sF^PWVbOL>X?wEf1=-3{ zNOKG|SOb-T5CsvNk~BzQu!r@*xA}~06K=psSwp#fPsk zg;hrR?2;P-ua|+=gdLuo$90gCyZoC<8tvix%YbsWmk%7#R*-ohf1QIU{G~k{n?OV*7PVi{bc1_UG_8v%4;sZin2v0J7rb^(;|V zE5+pEg(+VTrdyBg=1`W(lVOUPcGj)s(J5t5vA~TxtRk;tMJW3aaT7m*jD(#1qS@k_ zVbxaUE>}CMY=jrA%9|(ZMY>7_9!DR|o)M=<_%iO=#8vR5P3cYb}GWrmE&GZ$!Odvp4Q@E0M~zHI9OuQ{z%y5R25+?{tX z&oXpr>F-3uX}nmg)QhgIRws{yzqcy=)uJ+&P9D4%1J6bF&N=Tl7#Q={b5xY|^JVup zdS}ykkUjf!wJDP)(3%~VGXknphX0C6Ks)2)#*$J#CkO+7{-)Ye3%RLU^LaceH~|;k z_q*S@Pwp3&jMjF;L5W`$I2^GJAmX=fy5j8Xo%X7;;v?<4F|!8guNoLKgQxN?suzBf zu{)KeM@B`*!#Wx7G!H2U>)02$U6NRDV5@Cx+YvS)b%U`~RJfH`jQghk6@HTK&6X_5 zY%P&cHAveX+BhQlvpbg~|3rY*YOJoo66Wbf!==D>4HelKa~p{nd9YdM9g#L>I^=M7 zN#ydkz1y3n^uIsAlN<@{S8Nv?q&Zs}w%HgnHSe|EgNA7iHYo<`WA{xXOLk`$KZHQ^ zhQ4Z8VkWE>-X?-|D=3RdkKS4=wTqjwi?>=PqJJ@8GX~8yfme-IjhOp7hM3g&sZ^bx zT?O)R9nttRi{C+B5eA3F&Rds0*k_5#S3UQ(R_oC6#mY!`i{fOO!fM73tE#Rm?mVee znFnwFC8`MWs@C3+%xijXB1pjPw~JZ39$<{njm-B_H%U0fNou~MjCj4F)WV2ae^G&8 zK3VN5-@l^ZTde3+G{_j$Kn*+|GoEz`q1W{76K183@s-WdZR+ITB^o?C;D9J}Vf))T z_^3j*@-x6eI*Zu-qvR7~B7-$=$K6xU9XOuL;cTO%nFK`NrDy2W#_CL2*C*lC=K(qE z60v`5yuOV2;w-c~dMkuA5*&>BOzt!hN)AXJG-KZUJ*f`+Cz8(pE0WgdbW76deYhk1 z=+gSZnARoH1oP{?aK&C5B#l2`$-@cro4D_fSFkuAn&iqN0$VEMq#RCpo)}Bg3zWDM0Sl!?&&|#NqiJR0@W1= zLA$9RqSFWHKXKk48D7y221K)$tN9(hF&+ZU|9&0C?E60^Khz)G$+iZ%!8iNn1P_g7@B##3RsbRphCuLK zPiBd_C4S>&SK>6dhyahC+zY2Hk`+?GD2R$@pEo-bfFAh3y1g@5(eb~%CifJf$3bI;L=G~r&BWxGrd-JH00$s$!%B(xSk_S3hED*y6` zkzdLulj=}VXd2Pmf`BJJvy(~YHLUNI_2=VPEdNR7T)^8^+^z159}<(BwZpefk-z~# z0N6yqplxnjDBX=8{Fm662OdzL0|N`q3i;rtJ948AfK)Pl^l^(0^~Iq<_W^&NF^}Xg zhvSumxlg!=JcVM!2!e86V_1XdSL}tI%IwhTr0+^&8TcNIZnO-$-8QIIovJm;39hd~ zkidu_0*(Z15XlQm^F4T72^zeNnK6yZnR}n$JGb0xC$fuR5X??*(G|{y4guBWZ||8X zPb3I?MMj~;$T{IrsOv4K43^C67B+eh&xKy=HAOM3l)!8Ag#KnU)M#XpZoo@2?di;gFh0z&~bz}#04dP1bcJ~X^? zc^9%L8OBw#qhu}8lC0#hnX;L<*ig;d7^dZI0Trfr>#S&s2{V}hq6qP1xVUm${M+-0IwK+Ox=X|mm$O&KkibW>9r=_~3PUc8<5Wj2;Bp|2Gt%fH84vvN^e zUvMOy7ijiD*3M|5>KpR-(KRNfDl$<^Q55pX!PR$`>fj=mT*pMK}~>IG@dK?7wwQY=ck3sO~w-iaTsz z_<3P1)nF*g)~K3aP4zb}CGaR{6Ty^xMqSDO_R&Svz-^*VXndKydb@@z!*9PN5wqT_ z>PCk=?f7R1T^0bO6+>p0UYMDaz2^Mtay-wvcxe~@p5wk?D$uyNz#YLf6UC-f*W_pJ zo-X}>c~)gcZl{G2s|1a!yfX6+Gl0>0cjZ>l&`#zzHOuQ@f8~vo>#R~g8h{6!psmY? zW>_>iZ`aPeiy8B_iK`v1d3R-l)|TH9+jILZrbFfL zL$HD7rGNYVO2wSWz{sHy4d;xX()t?qZZ;&ZS;ITaI)S&4cQa-+^-vjBx09rwv1I%B z>&0DV(GqJI{C<$ybtIE0{+?{g%XFz%k9VaxoX0ZLub4%PH`f~CMKg`HQ(E&fvG+R* zJf=#bB-8+GC_QWWS@FQ|tH_u+2fN@JrPoWH=2&pzoy?@$()P00;YU=ga{*(BgnYyw z1fy4&=42Ig2wE}FY?O7-%XSk=8dI>^?hCPQ3ZLIfLt$Mb?NyO;ra^~4sVKir)NcIV zVVn2Gp#RJ3r88LVd8G;Kz-@9)Bn`FJ$*8%NS1NztR`fjHkHhB!S{*t z=e}7&JKc=S7~Hv_>RAayP}S;ns!cXFbf&t?--WBgR|meWI81PzZXv47IdXv6OG~nZ z1Z<^CnKKCziBnE{2+UDLt^_@M5WKVQ$Amm#_Zqo_2gI*xQP3ZjE3IKM{O0jC1N?ekznkm4`9LfTtxL$XS{i z3(;ub|DC^e(s6y_+$*Fl>UwCY-O2|Lt1EIAQ|26Hn*7An^U*1wQFySxrP&b0shAJ? z!0FVT&D;)Gi}!HyXj{BwUb_4`1^g8;C!oSC&Hn>=Oa;BndT$$ZB96o*HpGHo#4Npw zPr~KhjY8?c&k3s%>-)|+V-1&R4(kwewoDaT$a?+Caw*PBa|j9SYdT9ji3pu#r)!L0 zx3=AsLn$&xaa)FKYXkWaZ2wZJqqT~?H%oj_IXhGKjG!A0Z;S2hnqv4@`{G|MhlE>Q zl9(_pa1UtmMwU&zu9u9%L6ej{R%=5MARYEz)?rHe_Cb2HM$( zWH>g4q9i-~RQ@bGZXwVkVYmTK+p`#2Vqer#xF9g((5akR+i9rm-E;W|TyL}*u5_7(MSc>2(!pSZZ3_r`N~v_p-Qgk>ZE1;MXlq&W8OF>~$O z^uqydaJ0{D~EXSb~19=^QWgpJ$@_`2*u z^|S6Z2JV?f^%Ic*EseqM-0^)^we3gsUIH8$_xTs(mn-}X4%rqp<3acm(IzLy!57gA zy*L}RBuz~61R$m$6@vCS5x_?SLp_}K^wrMVQ3)bSaQEVG4k47wUUTk%N1&a&g&arPT)z9 zv!rJmg+^KCk>&iUpA4ASZ}EGT=EqiCYEH=Q{Da* z3s9arVGZFqe|qF}!9KohTs=ihz2rT_bo;=D+SPkV#54t)J6sxWtN(!86EtiT+e>nr z?$kp~`CQ3Q&K=>g0;{hOW|seCdBJ+4hXkT4xf^+&u7V9^tg=-zGzg#e1o_-yI|V}T zI(dGk%zmqdzASk4-r^~hg@UqZ;P`|bX)md!9Pp3GMtUqI5H%j9BP48)(|5SMvi8#m m*2l*OQXOT`qhpC@6q? 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�lrX=Q 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

jFLp|;IxLEs*RMZie9x!pV{8B zbz_e2xFyRN50_S7?Yu4iNE3mdNF>f8H;Y+DNS#9rPvxdnpY6%?rpKlWTnqPA_A##y zEVRH{>N~p%_!uzVWcToJ1A`JwW=#kFz#NKYjzFG9GSKmk#JKTMTMi;Wuq_deF10sz zhcMCS391Zu)`al#ICB27HmA{V!^K`Q0?TGifz>-@JWv|yv4w0Hb;mSS27^4fC!kli^rM0E9)Z?AYE@#12mj;BN8b z@0*09)Ye6BovJM`ue37@EOR@H+g1})7T`YwH|git=u31WEt`l)O@G7YQ56#3vrwn{ z1oUn-4;i>7v3C4cs9MW3v_2!!@qu%JMecCYM-}r;$6KY{{JdZ=jT?$4h*OI*1?`t; zNEj}t8&TqRVQ-%HObOD}Fmp)bjc{X8{DcZ$?SI^S+8URamYV*UQt1))Noa}{X@&x{6m9#Zap)4+A+g+mfF2Ky`)nCk+%pu6Sr`PFy#7Re zN@&ZZbid!PQHCrD{baxq-PicxEE!0Q*nl2BG9?3gH6@pR#gyz+ZuE@=20X$p=>mec zz`PfEhdK)oAE?XY*^Cb?m>-B%XB@W^HnBXe+Z zQr8LJ4jbjUQg^S`Bw)K>=}}{^FU$7}%+}4NVVYGpI0qL<0?k8t%|`JR6Hdv-Bc*xV z0b3W&FXbE*=m9QvK^7B)(Kbsdje#O!*2aNeq51(Ca5|h5Tm{8rWew?RYcblFb(I#p z{vKt@m7@SHfi|)wKFPkbdnpeqjT=Gx(v%L3ehO?+)@P5emDJ-aU9RDLk-@Yf9^+#& z`^2`lQp0ke>!O(I`w%>Qu13;B!3|~3`4x+`SloH*?BK#&+=#*+mk%@O>1p9(LFha& z`R^>Fu!FLWz_n<+60;(PBsP5C<@*rsIK literal 0 HcmV?d00001 diff --git a/dox/user_guides/modeling_algos/images/modeling_algos_image009.jpg b/dox/user_guides/modeling_algos/images/modeling_algos_image009.jpg new file mode 100644 index 0000000000000000000000000000000000000000..a130f4ced6f76a4ad24cae1087f3e018109a36fd GIT binary patch literal 6339 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 Sff#Gy+fkjjm>ufD(SHFpp^a?- literal 0 HcmV?d00001 diff --git a/dox/user_guides/modeling_algos/images/modeling_algos_image010.jpg b/dox/user_guides/modeling_algos/images/modeling_algos_image010.jpg new file mode 100644 index 0000000000000000000000000000000000000000..c1acfa5493599c3ffa0a0dc8eb530cab23cb3cae GIT binary patch literal 6160 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 literal 0 HcmV?d00001 diff --git a/dox/user_guides/modeling_algos/images/modeling_algos_image011.jpg b/dox/user_guides/modeling_algos/images/modeling_algos_image011.jpg new file mode 100644 index 0000000000000000000000000000000000000000..f3008bb6917c1424a2159d1c266e7bd0a7ff5966 GIT binary patch literal 7730 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 literal 0 HcmV?d00001 diff --git a/dox/user_guides/modeling_algos/images/modeling_algos_image012.jpg b/dox/user_guides/modeling_algos/images/modeling_algos_image012.jpg new file mode 100644 index 0000000000000000000000000000000000000000..900f1cc42eac47d5743e2b8ecb14b4c1698beb8a GIT binary patch literal 7312 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 O@Za5A5;GnNe)t!+ZbXOx literal 0 HcmV?d00001 diff --git a/dox/user_guides/modeling_algos/images/modeling_algos_image015.jpg b/dox/user_guides/modeling_algos/images/modeling_algos_image015.jpg new file mode 100644 index 0000000000000000000000000000000000000000..89951ff205aaa010af251e7e407b81cd35724720 GIT binary patch literal 8404 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 literal 0 HcmV?d00001 diff --git a/dox/user_guides/modeling_algos/images/modeling_algos_image016.jpg b/dox/user_guides/modeling_algos/images/modeling_algos_image016.jpg new file mode 100644 index 0000000000000000000000000000000000000000..8088f57a414988cc601836c74b1b527c39f0fa53 GIT binary patch literal 10196 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 eMF=3VA;9(WITa<#l;P)=*h5rQ#9gnF1 literal 0 HcmV?d00001 diff --git a/dox/user_guides/modeling_algos/images/modeling_algos_image017.jpg b/dox/user_guides/modeling_algos/images/modeling_algos_image017.jpg new file mode 100644 index 0000000000000000000000000000000000000000..4257e6c74938f788dda2f5ef7d99f15c787a7a42 GIT binary patch literal 9296 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 DMkFS` literal 0 HcmV?d00001 diff --git a/dox/user_guides/modeling_algos/images/modeling_algos_image018.jpg b/dox/user_guides/modeling_algos/images/modeling_algos_image018.jpg new file mode 100644 index 0000000000000000000000000000000000000000..ac491ac15a8faec5496fb870384d996071ccd9d7 GIT binary patch literal 5169 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 literal 0 HcmV?d00001 diff --git a/dox/user_guides/modeling_algos/images/modeling_algos_image019.jpg b/dox/user_guides/modeling_algos/images/modeling_algos_image019.jpg new file mode 100644 index 0000000000000000000000000000000000000000..5c1d334893313a4e7c81891b359cc6e191081960 GIT binary patch literal 7040 zcmb_>cT`hZ*ZxI%k)oiWKqx^V6r~A>Nd%+>keVO}4!w#XT|fv$KoRLpKoA6}N|P!g zy%%9ZkuHRev`_;iU!0kD*3aL}yVm!|cXLh-1WAfLTKop$d?Z zkpbqU4?vs%lmR+wY8q-PIvN@pdOA9KMs{Y#vu7E(*e}sFDIbI1xs`Gjl)O@b2l0mUqH2g|s zO>FvuTVN?mw_sYj3m4frE(u%_6cUC=%UqY0lfR*STSZk(9id@>L>b;SGQMYJZDVU^ z@8Ia};pyf5*vB{IX=qsZv*!_U@d=4Z$tkZ=v)|_AzRSxmC@in|SXotFQ(M>E(%RPE z(b?5K^gCvFWOVG?`1iSa?84&G^2+M=4sLgE|KRWlPaFqme(nbj>^ll&NBp1P59-<@ zHfsaC7a8GhdDpVI)CUGOe;ggmO|jkccE~vv6;)gl33>Tq89olrGrMJX+vqEw5Q+6u#;3_mTY&rDf{Pq%4D z#qoHUcl%1FhiLzIKSFXx#NQn=QPORsqf6b+5Wt{Dkgnqt+u7blnrc3uIEjf%c9+xE z#=HefsglOYTxjl0q`dB5I!xJvpE^%L?g?cVb=jOpEOyj!xMxc82M4@;8^AN<{3(2s z&s1n5`~g8NWUmu%@U}j5fjLQ{SB<6fdRd35?>xpDx%=OI)Mca2>y!Ji;8Kz;G!UB_ z(JyPH6}K(g;TNrRYkmu0YA)78@e={WXCKB*@yT_qUE7Y{mQjw0y-CQ_Psba8Bjn?) z%Zek=pHW1LcaQm!xIhsExvz>z^Eoi^RuKdPPgvfMAH%=Rn)e6ylybU>RMO!wl1BSyUb)a;u}Pz{TPSs7MSJ)$wLl$xA7poiaw!Y5^F)RqbHjVkB04Tt zETsaaF8P%c0mWc{HL%$~5m=ZMVO?8WXLXR)t+-qeu#Q^j6B6FLQYn4O7 zbyY=O?-;d5O0kE(hrU(LEbq0XSn6^8O#RiGWtW;8^Tj^t>fvFvIsD57(*UD>G=m@J zYad&yl99DB^RA6NcLHAM-KQM;A@wE}MbX|zz@7~CE13=!sxbJ`@>&>N1q#dCfjX+2 ztCLN{^}20LR)E|Ix0bI#L2q|(~^8|fOEw7gw9s!Q41wI2@Z>PVg84X3i@;K1?_w)gipk75ojjQDA4p*^yO zu)OJu4x9}Lhv+Rq!cm^GH|x6Yx$=_f zm+kBUTpcyD`_j>#$1M!Bi=D6oITSu~r7P=Ub!ptf(+`YDs|Dp%>XI*Jc^YLZ$T9G6 zbw+7ZXovrge)Q(psYCV5_R%{cFxo`~2KAB2AKETVU$=>KFO~FEAzayST=rMrD;T^W zjl9K%G$$J~C=_|#R&Uas3=T#8R*Yx_E#(T-U*Q?xJu4b6-m*(RhR&#z`DZvFzZgIi zsl1LV#C6I~umQZThr@M3g`_2U<%z&rB)V_4j}_@QzzT4HIA$4h8$t>SH=Pg0j**sf ziREP>NrITtW&fZPpEk&Np96P~tp1Awi{v-^4Dz6;)kmL^?6s=Z&>n`o(_OifE&sws z-UP`QMGgw@+(NGpHVqB7YnO}pxr4|9eBAN+X6TN^G$LRoNCZ?6dg593`1ImYukXB( zs$c4Ly}3=kywMr?h)TprmfBdvD0cEC6$;{2a9sn*E<1u*=sDOSJI8;h=vRtk(@V@5 ze%o}!6Z%4!fMaHje#F*sLO=O)ql3)jiA@GEW$k%fQAYD?!Ax_IK3<+Ph(<0%ArY{T z3lNKWNCYxIz|0ywUB3GL{=G^)z^S5B^^%&rEfFAFzXmOI6e=9B;^+#+R=K&?osaT+ zod?mWrFuCUdy0*4ow3#X0=O|PLSDaI7xvCSn)ps4P!369AYc_fw}Kxs>!Vy4dCmH8 zF{@VKmAn>B&TK|FRASR`_iH<*cdU0~=nTA0r|XDE@6cep{aZ>+sNNX19?cJGHOE|} z@}s$@zJx=TBBLzgYoDRW!fUzQ_qbGw>?uFjDX}*UlCTf$IuJ}v`j>QG;CRpEQ^B+5 zFcx0ImR=ls^PR;ZisTSO`1Vl&dbE>-IXw){wAh&sQ3M9)Lc)p z4yZ?uXQH{AiwA$^TSJ{A+5sY9YDI8Cc@_oPi-~J&Fn8~;QGeh~m@6^4ZC)91&do~2 z6hCX3TUZ`1p2cAPq%=eXm}*Q4+EW z(r6D-l!xWu<0p?X34cHX8Smj+%qSOSlyMzaOap;ml{%R#I1HsI8*85N@+%Q|wo2Z< z>be zzV~{lmt848D$gi??F^VBKnF@s)bmuFSn9jjdt~7XUi*3{{42{+@qO1j2+#?_Cru*o z_R^nDWkqQo?1a|0T7#D**6P=Zz&G3>>Y>9Wgh!=f+|>jE8E58K!(0`2;ouSDz^<1Z zWotpHnwqW-c4uoW2}sAZXv4;K$A6J>kQ}2Lj7=K#g*9vew5#PhRE-Yy22)`Q7C?si zT;6C85k=#tmm(~xtl;gjf*HMfc4O-@pMvXMsLc~!Sx}XB+DDQfZV^% ztt|1$^WujH_OPQt==GEw8}j8GrsgWg^hoRB@6R}M^rWNUb*-VwM?RTLY;OMqXX-}m zTLeFa3PpuPBROWoWI|@~EyM59u@cY6nVBR218NE@K|y)$kjne?e$2qlyMSwQ@54Q? z_4(a1L4N1bwJ%L(WY`0sL*{wdw?5he$kd|5u6IE(^RI_|EIucgM>kayDxLpfYmO~lZb~4~ zC0J>w>pW#`Zb-=+t8*8s2%8Ss&P5;5Hj(1in&4pQKto|38G;IpXl?spZBI)8+(D;1 zk3n0UwrMihs#vMXi3$i2-~?Tt|N7*!o3Y>RS5W$u)Jiy2fwJd_Tg|%NP>@tRVHN zYy45Jadu1$8F-d4XV{u*)k2DCvV%~}EeqQ8S6~_#$`mM6c*XotKcfUhajK?#7!rkP z5$kKXId+2Wr*DN>Y}`Geg$+v^wB3k5AJ)`FUYMz*0J75m6W4d)1?>mo0#%onWVK3V zK|Z|k_De%|rXH`|i|-V_HzfDWe!)VDJKSh5Co#-#;q_^w#TXlzExCFwt1^7l8<ZX^->QmK9EjB% zg&*^O!ECRjCb9EZ--!+BB86z#o?vZ(PLw4b>VInCD?x5Z{p)Qj8Vls2xkSicDbuUib#Z&&AV3bgC=fr1v zpGZZDEj98){L)a7#?b0$(*E*bAH~%rO;>hEu15JfxuEv#>oiM)4qu2bV+A(&$%pRjnKtVp>O5fGJRL{CErA<^!J_Svzo z^faX?Q5@iO08%|}P09z+ZU>1w7qpwx+V4kY*EOJw*^n!WY38GR^`djeX8^s$JM{~_H%QHP>HCO$Gu+UZW=2E1@Z*2{mPpWJ|k0PPDxgk%${Dmprt_Cn{*+^ zH#G=PhPnm&6{8GwGeXG2$hn#ZZn{UHlf6NcHO6YD8a09hiW(q*D*9s&2!DJR@O&J# zchazZQlPTSbg5oka9UlDWm5absl?_`{Cc|=lb7;*EVH~K5oiOIERaz0Z{9#%I(X86 zDpvg-1leHZSGo~AU2g@P&!}0`s1m}dxw<_$nqNS4BH`;F9^J_Bft?C#l|0gzh|6bW zm;^QX2YiNAit4H{*swglS#~oCmWRRcby*6$H=S52BujvAanFQFO&2&`lyzD&e;Du; zL}eyeXHmoZjQ*3eyxdy9>)m3jI3c}ruOS{r$OC2QnVM?109U)GM>Tf(Ji$n z>X8mxo03)Y3jQli<4Y6#oPHiB4iheX#~+gE6y(NcQf5!D!5WIVu-Yh2>2tE`3zreF zkct3`;Rr|t5$M!r!p{rhH2yLL`N2~zOM%a@CZXzUEG}e5aH0k~U&*5E>B;_JWGBQO zd)qbY(3UfPw-Fy=Xq;8~%+ASPPL~=BfI5-90(Bhe>~rv)j>uAyu9zzBA5-uxlnvvPI{Rzm{Y)-zjI8stkf%aY~J4!weMx;A? z0d_+bHp4%h!8=2%*FJmEdP(exemkN@8?20V(VILeHtJ0F+c8>e=ttR=6fEo^& z2R|;JZ8pA+r{#yg1d86r~_xwuE{ia1Ks&9UM zYKq4`nMvbZ%pnYXga=S25CLDaX;5FeD~SSrRd4xM`I3xKmNZ7{@58|4!Azzg4VTwm z>7Un|ze%|9?O*YDyyR3Dt7H8dYtMD=P>ezgZ zVUfpASp1?a?D=YL#kF&i*Vq+iv~qV$BF*eF;CmO0gATEv-qfi3itjaEvo{vZ+`T7^eC3Qay+|wCm&8_2? zfi+#GN>ho>w_Als`g&Cz0W{0Ba3a5~S6hm9G^<2_PM(<55lMeEND7~X zp|y}@cUV{NapN!pSbiK*Iv`Hgx8PGWUJ#R<8vpPvxg zhrCI85_c*n#|4xtw?{d+RDGJ}(yDgE*|O8Ua4^*qbqY|YzJG(?r#n!@jYku0fQ#58qlJ_>(IXIL*y>b`K=s` z_mmjjTCoHUc%qI9@~MCJj%JuyoM_ucD7wLQkA3MlkMmOX-$(T?1O3{e_s;C<{5$W? z)@WYr{&vuDFZc9yVHy@)wO*xamS|(yd+i(injE&I+wBIfu|0as(%J5+{N`d6lGJz( z*j!QD_l!O{G9i_CxkP{t*1}8#3~{PzQxhT<0TJ2~KO*%d&2Gaz!QP=^NnBoFQEIEo&1sB L|Ci6rh~NGPb6^CV literal 0 HcmV?d00001 diff --git a/dox/user_guides/modeling_algos/images/modeling_algos_image020.jpg b/dox/user_guides/modeling_algos/images/modeling_algos_image020.jpg new file mode 100644 index 0000000000000000000000000000000000000000..a5ffde883943985c9fc611167c756574bff9d0e5 GIT binary patch literal 15309 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 Vjh7DAZM|YYv>mQ>zvm4f{XcOYBqaa< literal 0 HcmV?d00001 diff --git a/dox/user_guides/modeling_algos/images/modeling_algos_image021.jpg b/dox/user_guides/modeling_algos/images/modeling_algos_image021.jpg new file mode 100644 index 0000000000000000000000000000000000000000..892580cda336d9adfc50a54eee39b652b1613374 GIT binary patch literal 14498 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 literal 0 HcmV?d00001 diff --git a/dox/user_guides/modeling_algos/images/modeling_algos_image022.jpg b/dox/user_guides/modeling_algos/images/modeling_algos_image022.jpg new file mode 100644 index 0000000000000000000000000000000000000000..eb85fbb52b3cbabb42b4531f25b7793e0458c441 GIT binary patch literal 12515 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 R-&a&ERT*fEjG#tO{tr*H5KI67 literal 0 HcmV?d00001 diff --git a/dox/user_guides/modeling_algos/images/modeling_algos_image023.jpg b/dox/user_guides/modeling_algos/images/modeling_algos_image023.jpg new file mode 100644 index 0000000000000000000000000000000000000000..056de2a754e518da14a023a721849520a7c68f65 GIT binary patch literal 13277 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 literal 0 HcmV?d00001 diff --git a/dox/user_guides/modeling_algos/images/modeling_algos_image024.jpg b/dox/user_guides/modeling_algos/images/modeling_algos_image024.jpg new file mode 100644 index 0000000000000000000000000000000000000000..41a3f5d1388c487a30153c431c2f1fd47ca41e31 GIT binary patch literal 12609 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 Wzf>T(=yd8fMbos8b4@Pz<=+5YCEXbS literal 0 HcmV?d00001 diff --git a/dox/user_guides/modeling_algos/images/modeling_algos_image025.jpg b/dox/user_guides/modeling_algos/images/modeling_algos_image025.jpg new file mode 100644 index 0000000000000000000000000000000000000000..0ac51112b8372d41c41842ff55acf2e7c0d83d85 GIT binary patch literal 26269 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

#Ek%n8S;EHDMm+HBPs|Ci>l0N^W}5kG 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 literal 0 HcmV?d00001 diff --git a/dox/user_guides/modeling_algos/images/modeling_algos_image029.jpg b/dox/user_guides/modeling_algos/images/modeling_algos_image029.jpg new file mode 100644 index 0000000000000000000000000000000000000000..2395516d8e19ab3c8afc8bdacdf775827c2d5c42 GIT binary patch literal 10948 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 G$NwMaZ3WK& literal 0 HcmV?d00001 diff --git a/dox/user_guides/modeling_algos/images/modeling_algos_image032.png b/dox/user_guides/modeling_algos/images/modeling_algos_image032.png new file mode 100644 index 0000000000000000000000000000000000000000..0cef972677658db6135f39c6b02396b7300e321f GIT binary patch literal 16393 zcmb`ucU05Ow>}CnVo*?uVCcPrf)u4AQF;jwdKIJ#NS6*OQM&ZrL?DDN1S~Y^9VsCi zn$i>yQL2Ez9em&KIp=rRy?5O|j%&Fz`!jXV-g{=AXHOJTN0stC<9QMi5=wQo+xjFV z5EKasX%CDHNCF;pn}UBxz4cXdUYUm7HBM?Na%XD|+WRr{SW&cq3`6P?&iMDAf-+u0%(47@L;_{ENmMdh6zNvcq6#O0N~v5%+>uryf%uWzV7|K`?ooxe z*#(u;BJSM!KZGRcXhu*xhpG)JO&u-DQNvH_zAqvu=ZqkMoVLSWph|)$?n%mHCn1G_ znp7q!Bxo1CFX~MHd?q24hrk8p)3%}id=77W0To5XoYy7(tqm%Dqi#d4)V}2VTN|`U z&l6r~hI%-L292M#sgyv1)=1!yzx8j2U<4HS7wySX&?f57kL8;MRGO$vVnC-N&3*I` zcQBo44b{(7CXaxKJX4(patuU&T-C^^o@tRF=u9oW9xJg!;8-Qwr1MY+O&jv;<`G~y;0pJzQcE$j(zc;R`GYkjxcZURS>p*9fn8LA_>ef`@N;e?)Q8ORLYB@<) zQPd@MRidb2D3=ASLL)rR#c(NPNjvvoOjF#9B9&MB04&&BYMY`}bXq(eIkGfbG}kw> z(2E!TMcKv>G*d3PA>^?-k#3bWYKxI@9=q~aSHjvP2wc@4IMx@(=lxfoNH7O|vQ>;M zMJiVFsP<_+-ywH=7P+D5rL#Vc9n`;RPIx>$<4i;%n%1qiASUcR?sCH8bJD!%7 zdHa+EDgiY9@1P=1V9#zPo%IW2+yN~Rs$)Ep(lhwP%%%tf0|RSi^w(fYZI^)J*eai0 zhEP4Ytwb?CdD9JXr7kr#t$r%|s+b8}P}P=J5E=^ftVecgG&0l=LqkI??=4N{PZN`q zOPd3Tmqg~$cQ?P&{nHu&twGOk`cR){#WYg<&zO{a>1S0=&PWpIlW@Y*kfnM7hVqoh za%{f$D!}Nc!u`8ru%Oxd)DK)S_iiO|d5Rg@CM_leYttlEyIHUBxh)341G-|e`Fq$Bnb%~HE%MirsFf{?U6{QX zF^gBsWX0S1CaC!U)HFM-S#gJE>zMC1_sRAz@=cF`@pPREQ3D+Qy)RXUZd+wx(piBJ zSl;yNK)^>@gk~0;EN7#0t zNW|lNYdD?9pYyZOt_U0t--r;Xlu5jcDVbz^j3|gAVKSsuxXOAvT!sZo{49Ev(y*^1 z&wLp!_?S*jjjETsO(m5)+Q9(Ww!tr5mg(Zc{*aH}y7UN1+$5YCq7D6s$@=N}iybnt z!v2Bmsi!mMiQRBV-f4AJH7X3KZb%+KfTk(Xc{(p8nPHCLxm?Y-jXDI!gioqbdmA0D5{KW8$iyZMOy7YEdM8m)LD?VNE^sJ%#0}LTub(ts*$EQw zT0xcB`Vs9g-<@u8|6P31OrdqiG8 z8#*9~a$I9aV_UnMRoaj{oJ3Fa0}2l6bn z{@Cm6CasUIwO_6{U4MQaN=Dmjsz~;<^TA`V=a8KtF#m9exW?nWth0KKguJ=^PrWM< ze99>sSXQtWmB=U}<*V?1Ee>4vIXJnb_Bfjf=@ga}jxfSQUWt}Tv?I%GUedyp3TR0w z4EbtAX1pL{${s&(PJ{$SG?vXg5QGFGXphK%-ELEy;MOODOSwa|h^a_~{Lnc#0Z7GW2<4edZA zvDYp>Eq#bIL!m`Q)djM|f9%xj0ZIOFqcKEHoO!zh|}9_@qWR{;oM2uQNfpQzS!cEoYi$%K{S@jTBjm)dv1U78H#=-; zl$m3=TK=7LVuc}ylB;=rK`pHO?Q&;iVSk~|D0--hnmyf-)}(oo^FHd6EtB)>O6m2X z`g?ZG;>J@OBPw5ubu=?Hrt}U*Cadj(DGYg<@i!VZ?pu^7u@m3PoaOc@)GGK|Hu0(3 z!Y*1vJK}mt$Bzm)R$prBb@Mkx<&h*YQ4~-8vFiZZh%`=ff*kpDRc+;`P25_*b^r!J-oWmKhxw72)8HIZQDB zMrzUV++?FD(!AfTK2agCs){FpfnbZdURLL9|LDc1%aDn$m%o1@%XKRecE{EYjrVfa zm7MfWOLn&-XOQ=b#`wh#;CBj^rBn23#p2x{MpEO=Wv{f?=e|j}GY$7L98HzkVXne$ zONbX@S-WWq+dLw2|P`r`wX{7yM}g9h?IT9vGjr+#*4q}zMbh|W!a_@8v>^%(BHjK`16^ka0Cn& zSGZ~*K6wM>k?q2kda&bS8K%3%irBHvRr&bfK>N*Z-rmUe^igZb?ZA(;Kdlz>=#6yo zjv ztyfAk83jF<)Ynp4uhUkB1hpIw-wPNPx#6el{eIv@*1)W?>@_Cfb-K8RqjLk(*2Bo9 z`|O8tyOa zyAyWJJ4_vclhl^(F4GlQ+X<}ywYH<9TNj6a*46pAjPd~`=Yh#cmR$) zLXQTWS&=Vu@YsB7|E;ufblLY_?k;P&;nJ)(R#KswaDiaT_Vl@I72mpicUE~vg`ZW% z)w>v#Yyne~J*MhOTiHMaAzIc}u^9)y`#_Gt`&taP(QNO5#uxRVgxcZj8gCW?@4ihb zBr3*!3i>iWO%>!Z+iZIKM{B9nnEysPp8-C*EBeR|<72q@YJY<*q)+lj(Nw@Z!z>b) zk>xSha^yY6ebgLwa{TMhpFh9%x4vd){$3hL?|FKO&8j-Fb?Jn$+N#u&v39h_8lva3 zSs$(!whjXEI>nyHq-qoOSTynNao%K+J%yq6FCGN0b+;#hEg^wTu_X(;t>K_il}Omz zn6uW#gPV~nI<%R$pUjf7Z6#8KcUHN7cA>HDg8_wkvueJ=V(eFE#7xzcl?yoim7<&w z__ty?41(`Z!09VcKh?@MuO;;8KqWIIo92_K0Z;vRT;=GYBnBL8j)k^y2 zZXwUF@aaT1v%R0A;&ce#TTPwFzNm>~`T}@GL5s_F^*wcD;6_@tq4yH_#P3N0g zb`?|Cb)7|L94lP%?`)rkXo*xA<0f^=Fz;(6oraL+7FRYdlY3x(kXVE$f}^APaj&?Z z*XlO-lc1+@^m1J24W6%&)cXdKK7qdYyY-r$b%NMbHFS#F>=UZ2`IoP4A2JBfhA@0M zpsSP9DI8TsZ0%I)+w1gM*DYyqJ9}`vG#ZzXzuBU?-JoU?lP*2hdMt7uJGok==qt-r z5SC5PL76()9<+-LJUG}bJpk7?$C9eS349bjanvO_y}Xk8XM?HJ5Dz7baMz2(1iXTS z2lks><8_DC4Yv?ES@?cx&pX11eDu$;{-xE@KZ^{4(s3Hg>N*vR_XKBHr;kIrCW1)s zVA4mWnenA~nGac-jIko8EiEZHxM7XHM%Y&dc1j^mU_@_aFo|oD>5j!<_09$MuS_(+ zcTa}JQ1ZNILx?;zH_kck*m0Z@Qt8%Urk7x#>*$T63sEi0x-m?#-psaYgV}T`Hy5H$ zba&GBZwkBNXW#4C>RqQ_WHc{oX~Oboir_H(_1sc}K)}`~4#~HJ>>tKW?u@e`QuUC{ zS%b6uK}&a9_ndrcJ&%7?k0nC_A2JU4s+hs%3F`{ zyO*42jszWTOvmTMwaZ7<7swE}1umswD%tRXmfYU^nbG@$n&9f)3S?>JK{?{a*j*EZVaML8 zpGJcESkXvU(;El5i00kO3ln&zh{^926J@D4%>q=K6dFUhmRm-gaWX@rp=W1!dTP*E zhsU3;s0co?qFwB7tJDuKUoNx9sQg?rJSnaWpYR{=^+>^Cx#p|fC>ofn%(sl=kjhmJ6QePKMM7d+M0ZGgOl&t7SH(&>a6AX+NQ#O5o{jqrvd1oh~Tw# z4T{tpv#7GS2fnwZ1K9B9!@lBE$b9jYYWar9oi`{_*R3wD4*g{#;!`Pfi?M_1i2F421BHoM6e4T|qbwdRW-Efx9%{QmO|Z;OeSV14s@IeC9-EHGG7+Ee>J zL~<=~NYe4L=Can%>taHu(Ug%N@I&@tfz_n;iIjEWhMWw^1(W7$Uqo7`&9svK1ORv@ z`1j8*6I!?&WPs%0#Nuilx8E^OPLfinOA5*f3MgSzs1_^-lmFpo~Av;CB703 zR)zHZZ{sqBo9-ptp;iDeVTNqa z{&GGuaDR5CHEBn#dzdma2*%h`-8E?FmF)6y$XYzq)zz&YG3blJ@21*eTzu>9*$C%V zn9ke1sfwb6P-P%&7!avisaM2tBIjbVr*gb-@-CH$L`FHGlJ^?Ss#|S-bW|)*_8P&6 z4`_|sxCcSH9aI4lkIJMK)<`}&!6k%{Z~ zh4rl7RdR442DVR{$7S9R{Hk(76&@Z2`9g``O>se6G)qOWX75udu=d3Evm%yi8KW2= zR5i*r0*KVSqE`@WuJ}6hEXI&=uo;#=__0H#RFo#%Qz=1|#K zQn|kupK#3aV7Hs)x+|4QKhm-pp_n}N%2ZHfRCdc|NGWC6pP;}OR!w2HIuWDyi{`5( z%jVHXaNGWPU}fK!Q-~EaOdQ~P(bqfFR~|4{p?a;ASxnr zpC%bm)!Ye}X#ikI#Vr8vqK8#YZ819aj^bwi`nP*?4&n+pr5|#G@nN!b2H{wy`01;o z0uq4?s^M8IJz0sTC^|Q|X2+U+o(U!6&eGzeYSsz(s@U8K1CaV__VB`f;e>D5hP-51 z3_LaMWtY+YPQR$>Pq88rgrNxxUJkI64Go*(z)qyE2#*W^cp1SBSdiq$4Y7U2Yp_`E z8e2+RjEWK54%kgG@WbLxsdZx+7N@q(;(n-6B>#+6EdTx zdJ-L5Xjbr3of;Ak#vv2kQ)a08`qsM=hvCRB-dA-@ys~E1lr1F02+SX%$JryyNHJ9u#=s+A;*kE@?K;zWVmKF!l9Hq{Kfq)iUQ9~ zcQZ8u8oF8Y&FUIJGv#Hgm{q|YzK2LugJb)mYu@Y7+kE($qe2N85~a!jfS{ylcvOcS zhPQq0Qiwynu@t12KrL3(DlHcp zdx>zj`PKV9Rmz3qSO!vv9>B(4@SEnHLt}F?KM7Sy9k1^V@`_4}{??`s|H1*FAhclk zvs3}FhVKJj3lrEY8c0$e{3;L^1K5=xtfC>0$f2l6LxB&bM5`ig`Q^gyA=L9a?%1^1 z0_?P__cbsZxEh!*Rm0Ol4J|dDsk9vLgKKW%G?xg&z)!LU@<##8;|d%@kUK`H%rkRF zK}dk{4QF_v7tfXV$~Mx#8ke~9^M7W3%3@=nHUT8XtBQ-Yz7@n06M`PaPn#yfyz+=|1S< z<3SP&v>i}3k%>vS*{PDiv|m{5XVfxX%Y5_b1zPDR}x^!qA1ea6I6tKQ2N@JA&dRRlq<7p~8SQ!M1nb z0YWFx%V;OVB?uKiKu!e<@0bI(WCUEB#5M&5DeNB5qrK7#0Jw_g17@v->^2B1Ilwpd zSitUd0j%7W>(t!Pv{UxZD3Io9I6(FUtplk=phlo$Gi}e!$Z!K7Ds88hg3_M?>bIT7 zo`m}Y(Z+ciMW`)ks%tX+J3AE`tW#_XHzeXY&=`k3j{vL_v=Ch?z;KHlsK$_6vhOS; z0{8_aM$?4~0DK5KrQ7=9ZRbI8A&gc$)lW@e1;(gi5l$rx}=0B8VD<~O? zCBEcKetv_1>F25{#lu;a*S#Sc?*7%i`+L1CCH|oIBI~|;5n6(d7({U4gto`e{)b}1KVt9 zxpyu?6pZQaOKxh|6R`1~7Z6gv#m)+BQ%<`N21x||$yug;l?rxBIGb4LKL%5)qQs|P zvu0&e3=MwCotKx#YTX(d!Zk3GugI3K5EAINb$oP42pb?g1W~XB_D}-le3Xb&oj>{c zr2{cpStt1oU>4PD6OA5o!BL2M;IC}gHeIV)gN_o?2>`dSzQSsnbMIH8;-+NZt(G(^ z+gF`FeGuNT#W`E-zfGDKJ*ld=u@aY8p|^?F)k+Os|HfmTE+>X+aY=UKV24iUA)_(_ z0|NF{?}!<^vgy;LNa23%#&?qD8t~7Uz_B};d-=#YB}ciB0LbHG6%x~TqM&*b&>zp| zNn~-+R&&m)hwF1QZddBJFD70Gz7Tg_E>IMOZj6x zDQwybVueeh8V6N3vTvSi<9EE3*UQkI@#vLXzIl2!%3x{b$rmdOY^$U;T;~29e&-_% z>eiYAw-BzhQ=mIiiHVee#)|mJ_^xx1&FRSKck0~gXStrZtg3$2>_A77Z}K|0I^wwQ^HxfO%{m!&qlF9YQa!# z*EId8U9|8-!ph-8?$m{RCF*h7PuOgnC=5xc)k*&<=pV|b zYWfV?#eSy`?54o7kHN_FC`3T(BHOR&|BC)OY!E| zRtx`Xe);Yg9r!Oe^c2UZTm&Y?3ckx@#`u5`oR^C4B!z--Tm^)dzs95iRSFJmc-Zp+ zQ1ZX&UL>Hw4140rLCN=^2WEUVRfX&3*vFuJT< z!>Czn^joN*&4)f8$bG+Y9vB;mB)!#q6}c_u?flMYK;`?|q};vVl@ID!&t-#zmp?tK zar=Y^4rFj_=JvUGOBWe3wA4LJ(x0c$PWCS7$M4aJp0_wiT`H*HLvvs?&I-c@5iOXS zen-i7JlQk%&(0_4#&r>1JEGy(JfCwrxpwEtB554p8N}qIq2WB5trD*m(Q?^L!o3; zr>Qc%Y+^>6s>eqFrtL<$X&YVFR1E#|&}|E#)(=mPj~1pHJ*rRA0gMjElFs`wLJ)ZJ z@1~78MigZ3J~vm}FrrV+Mrc92Ue(Jd(mbx0L~L#xMWqCbFz}06=PQPViZk+|GJnQN zbs#Be(8*D^3UVnQ*Zz~Lq^d-bbee2%EhNY_FTTZZJ7gt>RQhwdfoF#Ku@q&r%_9{mQ*6CVCMTUK%8J$Mi#jYcPX$g@}8Y zhD#}>`I7_kh4Y0zhcf9ZHz$yHT5dGW{n3alkO%PzX`P^`n5R>$)CM692$wrT<^6eL z9e6B|Yc?Z~;F11WOHQ9M5p(xhVbX&}rbkx4w}Nbova8=~P*+%Z7@wh#$Nl2sP`@=nWtNmzADmiOEA1&#Rdzl+rGsozy$jY! z4MwLnb=pK_62np+r9O;W$ZLCmp!-tqA}OBwF42;qH0x_b{o%X(i!Elzr!Cu@W`|HO zf=ry&7++=S6xz0A@kw;LHN*gBZzy%dCpKU!6;?=U1A7 z?&Zxrg#!u1(mK6Or?yZJ=Ha!Ub=uNIx4LILQH9Y`hu^lu>V8r4SG;B*MSs=U=sd)47yg^hwZ90Pi z_j!b_ulWmcCPQ)&;v|(*W$ometL-wQEOZbq=vw0PPT*7Gnm@PDEVi!XR&>v%K>iYA z)oAh%7ELrG)DQQhF~&&EO=6jI?`s3jgBLF&X7qk!p~(!7&G+;6E0URhOL;u zX{JqU$zMNqjFO7eyP?zeY*rvg_=#`bKXQ`zW8zd zhyKTROX-gk1Z_mry?LKcns9B7#v2}Ny$WB z^Jdqe8ieU-$y!3*Vx*8KD{ThIUAl2U4A4nCjrU8fsRUZ#n?HX09Ue`$kKD{!vtlYv zerv2G3^~bb*s--7_i)utkB=%7U4P^RYG?kli;Ii`6m zVtu%~KBbtsL?1w&l*pvMKI*NmVC*KH=guYYN2OWAm8bM5SDi`vikbB6(il;Z(8KrK zF4k-6``qWAQdP7+^er6wH#xCWT_(M?6|if(@y(tx;wb5u5S{FzWko6R@X|AHM5x2KGcSTbGOD)Nzk zJ&?I^dOQEXUEq$74mo$BRvf^4?Fidpa^S^Q> zyPu`db8aIfus)3T!-6&`+Qp(-lm?s~v%}vOCXJ*KXE$X7KU-*})XTmdN`K%Af11Z+ zl`yo9od{f}dDnU9SgKe4MsJtVb)wANJx_H#aA}r?mH?n3s*i_h)~>0;e8mH2R!$@T zx;3j-x+C`GhR=X*3-3vK^#GwEY)n7j#6d&OM3Y7pYfMAl2?bA zS6r`>y4=4Swoz1`kBqvd!IsJ1c(izVb!BB`q|ERw-hVs(X6DtQ7n4$4T)HLoc6(M8 zor>tTUdC&EYTlOo4E{R}LY~$Fgq*kZtfz@CURh(ySHRj9-!d%6G%_IqNvv9owiuiH zY)V{En;~&VGp@**%LB(ZEx8mAdbu8KcN1*g7VW*~1ijq%K3Sj4P7<5N9jE!-(nL|V zC1d$Sa`7=_9J7!HN6<(|*7D>$b%^WNsy$)`-AQU@^a0uf$0#%kNBAnz4l!a6KWv!4 zTs%#?(>K&-FOtg8TbLd%isX$bk0icWroSEhl zJ15lHxst!49OWWreJ6=0y9bl`u`Igj)aI~7cMOrqwM_k+b70_ZNU^raWBqX-dPLN2 z9UM2Yi*Xf0W#^MHH%B;WqxHJlZ^}Reuc_gV*qW)!)-|7AZjR-C9wdX4$E{kjiKy6x zxm_HX43=1^j8f$5DL1Hom#pq4Zb@6cw|Hx)(1@CQp31C=BDt-(ENHAGva196=E;MVK~-=4ZMe#}R{+#yRvqifZUroI=KF zD0SRpo_Wh3kcVC5BXND>v}h_TMHu4yFpeyy#mgd6#dQOFq^-$0KTc}KWk&ljIi>o( z>C(D0W*)R_hw&Rh#)%pbImhx9A+3Deq~=}ECqx^( z;?SA4mN$*WD+;mFiHvR~CczcLV&3zwWpBAetyVN>45kd8)4ag9Rb0$jRgJ%nN?R>v z6KR!q%@pwIMjq{lg!((UPPEIrFt?89_qviZ!SwdR(Dl?iX?$gMpQyt7Iuo;N+sf;`o>dFv0S~ZggS^HS@{?%T17$*?YFxn zq98?86M?%SRTMjn@icib$x&me;L zTh~2s?p|xIrrhwiRA_p2`FZyX)4HfZDHOd_g?^>eoQhJ>WCEv?d}=!qx3apv%G!AN zd!=>X@WYfAPo12ifh@HRCiIAVe6)MgweB5}WIg3HTk)HaJM*Gwb=e1ApJ^={d1~rchul7)IX`>B`Z>_OP9?2hUu@xd2&8DdWS4wyI z5%!gNFIwKP*q6wClMYNnOQDjc@wx{yA|L$c2$wGy6swOrSl8(&yK1N6&U!Bf*PGr7 zdBNz6slZR@kiZ)%&HhduJ9I+`Lp0ZWMhsV(~6%koJDxuKH{m z-#ruD{4Q^UjTY{P5%%cJbG=`m`Kn@};!R6MVSnz;H|zCKX8Am$>22?3)3~vn`#FpT zl7h?A#9De?_vy*0AyJgk4ZCVdsSYhu{DbA-YmCQ60`VhHO(n~|{|3RbGA&CmE&!8RhkGdDo&AX*jIj4a?3&os4W`^Vau_aJ&#kr2 ziaq-H1ndzC3Lrxz(6#Dmq0GB=<7CGn$+}4UKX0Hv2IKsEq!&`**qq~f@7HSy0S{F% zKMutyQ*qj#%;Sb63?}Q#%R^_%OLCAQ;F7|@XRzt`q%cX$Ec91xqk4%s=eCh@!4eAF zFsw1CTUCaQD}F-f=0=qPG~qUQxNk0#zfq-laBNApxczCt;D`6Yz1)Z8R#y-^|4AGg zO8O(>;BW|@FR)1$uR3FPOHt3lZustpibP~ZdMO%3i4m>L%?QRNSf4XxOI^Nxut5nF znX5vVm!IbWb93?0b15yY!K{#WSz@5^Yw}(Hmb4T}xhiP#9kPB1w#uLZuO| zRR?tm+byLUS7%m&Lq@@7P71u(N7?>8a>*UlY~#A;8gO@PIQ96L=EGQs2iA;&@!&VF zXg|ss?|zM#N7?RVu#{=Iaj@T|^0oBOn22J)=Rf=V0dEUeS5QDrTWeUm1? z28Ox#YUkjF5{)|R7)F|L>4;f0c2B0F*zF0}$$o}^gjt)@$&QYzDN@eT8YX$_9OY(Sr>rxgadk7N|7qs6M{s7s<^(n+ zMAI`u12Y9ZTwjt6yi=H<#Lt8m&sCe=uC7{X4tQv;7O!=uOvP#{XdL^raIdq#LFA`d zw)p&{sA1l!Guc9>oeQJT@_cR57Ycmthd#qOoU1^v2k+94mnD4V^uvyXz!?8*RgVru zS7FLr`88}}*oJ}`C7lDdQF;ByHB)f;g*PHKs3}8e`&rz;8pPYN=0}Nd6`B80j@z;S zuN`V_t$M{*^R7Uj_|T1X~SfLYFDFd)#jU4JLZ8Jk(pVA zNwXP}yjcMchvy;-iS8uC4J%D4-{$KjrT8oJrYimAnf<0`G7Q(DUX=LNt;XE?TviR; za=?L6;PEOS1Vu~whZp0S`#uRw_2$SE0@vi&`aZ3hNb}KW2vo0H^;lv5@;=+U*do5~Q-02ji!aku{rLxLRtWSLXI`Wqshsry5bsVlQM` z154zdycG)cxLl`=$2&7`(5$+Y^cXg;)$lk7Nlqtq?3zi*iX`nHEyByy-rnx#v0iEw zkYhj=~+IP%8HgxrrAua%gO?Ec$e?PqUoFF&CLVm zp(HvMI$yWD9|Av8JWB0a|-9OI#KyU6rVGvT0jv<-Vv{$cF5@zlaB%kQ&N zBD@p7E^j)-Z_qkb4j^&S2o*2J2bEAJ(3Q)w7=+>S~Qz< zwgee!FeIj5vdErs9>U}8`{WaYn9A9bfdsLiO?>#8n&3DlupfRfo*Hxz4la(}u&tM) z*0i-F6#)!m0`$l7=FFa}cV6wt^wO(-rY~kg!j@m#kwg5O7Ks`+j;2FJ8iaCx8%w9` zcIoYSWC?*xQE4SDDcD2>Nd2t6mBa4^%ea9`8=9aOWwO+HGg^{HvSX+jzh=a1^XYbF zh33Sx7%IBoOGt&9*ODbq%~N0Xu2KOT={1kfhtvgM=^-VQsf2ljAma(n%Y-UK_<{5! zaV@Y$XX#)hg>kF;%OJ%dBbGmMs0=^2xhpA!^QtsXk$i7#NFxH?4`>3oA^P=$SEkEp zi-GHyIJqINstW;`Dv58LsWPtwzv;Z!4!jh&7)X^yYi=BUt1H5XsZNq%mzb}vg*=_^a zWIXrJTWF9qLY*XWioh!sfO6Qlxm9C3j8Qeo=3fdq!WfX$=L;jj7m!PIdJzs+f&;)? zR9{COijX`j`xwZI0UWInHQJIwB59-%yK4@rtOD-f!L9J2;Yckg`G2#Pp8?<5pKf*g zLIfUgB1Q%|!5p8#quKtl2Tv#??f?-zb(RFj=UgCq_o(wy#7BV2*Y5Dh!kz$1<~$cq zloC5Ppc>Uo)z3qIf#UPd8Y)!J0ANq2uI&|}WCKRlHlM@@g`6VdREd|_Yan2r=LM6w zpnt$h@8jcpIchEgk-nF%dKzQ)Bl*FC)5#>k010nX7gJds`5hy6LGX7R=|40&AhADw zPfH5Ycs23y^7p%BUH>Fh{8iV#O0mUY{>@%!JLUcR3;w^A1?XT&P|P*@cl5b`(mGBF zkO&ij zo=33*7L0;U63p;_5ba^03w|;HC0z%s07&lwnSg)*I`coNZT2?u|9h>R|Ft3=FdO32 z!i&;W|CPq_@%y~9iwKv?U>0Y~Jb0mZN@V|Cm46;D#rVYhlV$N&xqs7fUjDDG3s|oI zW}{9!CHZfv?$kp-pC7=>?SG$4T_*n-9K)&g7Cfe#01G;iIK~0KKL+2=86G?#fz|`v z)~k(O0>V@v6tenHmKh_d7a*=gK~9JZg`*0@ZT+4}Wg>i#|MeW|>q{i4u8c zfZU6uP literal 0 HcmV?d00001 diff --git a/dox/user_guides/modeling_algos/images/modeling_algos_image033.jpg b/dox/user_guides/modeling_algos/images/modeling_algos_image033.jpg new file mode 100644 index 0000000000000000000000000000000000000000..003316358a7960f644d092f5d437fa5077c17af4 GIT binary patch literal 12596 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 VB1^fXI_VQ>JMyV0v#Js``(GCXXzKs~ literal 0 HcmV?d00001 diff --git a/dox/user_guides/modeling_algos/images/modeling_algos_image034.jpg b/dox/user_guides/modeling_algos/images/modeling_algos_image034.jpg new file mode 100644 index 0000000000000000000000000000000000000000..4e24bf6857bd09ef647630b513caadab8bf417f7 GIT binary patch literal 29983 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 literal 0 HcmV?d00001 diff --git a/dox/user_guides/modeling_algos/images/modeling_algos_image035.jpg b/dox/user_guides/modeling_algos/images/modeling_algos_image035.jpg new file mode 100644 index 0000000000000000000000000000000000000000..4f9fe81c102a831bab8b5495c94bcd8965a91bbb GIT binary patch literal 23760 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


v|gXASJO0 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 literal 0 HcmV?d00001 diff --git a/dox/user_guides/modeling_algos/images/modeling_algos_image038.jpg b/dox/user_guides/modeling_algos/images/modeling_algos_image038.jpg new file mode 100644 index 0000000000000000000000000000000000000000..ab8895ecce3ae5f6345c843955cffea68dabb3ff GIT binary patch literal 16487 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 Bs%iiL literal 0 HcmV?d00001 diff --git a/dox/user_guides/modeling_algos/images/modeling_algos_image039.jpg b/dox/user_guides/modeling_algos/images/modeling_algos_image039.jpg new file mode 100644 index 0000000000000000000000000000000000000000..1f3720dc16edce185f9a9a7e8472e1478e2e4918 GIT binary patch literal 24058 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 INT~1M0E9G>r2qf` literal 0 HcmV?d00001 diff --git a/dox/user_guides/modeling_algos/images/modeling_algos_image041.jpg b/dox/user_guides/modeling_algos/images/modeling_algos_image041.jpg new file mode 100644 index 0000000000000000000000000000000000000000..5ce5a9306754f4e4acdb8c87d6cbe99e205da4e8 GIT binary patch literal 15989 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 literal 0 HcmV?d00001 diff --git a/dox/user_guides/modeling_algos/images/modeling_algos_image044.jpg b/dox/user_guides/modeling_algos/images/modeling_algos_image044.jpg new file mode 100644 index 0000000000000000000000000000000000000000..ae36c9750e2a256b53adcde689b808a0ecc018ae GIT binary patch literal 15138 zcmeIYbzGI*wlDsWixLDuK@pG!K^kd9X@o^1APrKIO2;BZ1(8??NGQ?`(j_cVkQQm_ z?rvDD_&vNk?(071ch22+@B7F7+zU=z6UK}&=cxG|1N#d*3tU!JR8a(QaBu)~@EgER z01p5X2!seiNJ2zJL`p(JN=|#3{L&@zn>1G`X;~QASeY4_Z?WIL%g4?o%yo;IUrs<+ zTvA3xhV72L$^$9oyV5d}7n9(Skdl&LBB#H6nO>5UnN#wg{=zl`ltef&I5BuQ%m6MW z4jv^AwiRFm02~5vw-+1!>lY3#9zFpfgov1g6eOs+4B+D6;o;)r5fI?xgVX`w-vN9| z0;*dAa)ej3EFjEo)PljW=|n8|%UWo(`*&G|EZswhNv>X_rMu3?&cVsWEi58>S4>>u zfxLpElCp}bj;@}*!6QQ>D{Gr4ws!Uo&z^gDdU^Z!hQ0`U`Ra9e1U&9td_v;;q~wgu ztn8fJy!?Xlipr|$n%cVhuiskRzPERDb`1;;4Udfe8XKRRUszmPURhmR-`hVpJUTu( zJwsmbg#+OIg{{AH_78kff_&lP18d%EJE75G?woDBv)C5=h*fxSo?#s|2f7&{+BrWJ7fQYuW^734+p$FJW4d!Xp9-=uF(ulW$|5&pOi(<&yDrnAJE>?Z3$$!) z(ywMQyTcaEBsa8$=Y|FB7C$c6yp<4&fJd8desl;QtFZGoeTD`2#jwE6J{H)k*V+Tg zRv~{`z|`xCF{w|&qip-A8Lp9g1*r#hp761o{EE^W<)?mB_K2r@!k^n%#++Ubh;Lt= zVvFCuK_x&MuikFoH@(&NcvUL`!8gyQ?KHmp>9leMV;+kIW`?oA!t=R3i#}9~6&64g zVu4oerfA#T?gD$?lrvLG`+@C|BNgp(iMJtFULFK$>mJc+k3otO4J6{L;XYE22+X!C^Z0xoTabjQTTAc zJJKo)!vphTuZ$;Av%~PjYrEusl3~A?RsJutYVGm%p}w+Ufu>O`@VcPh>lJSmVzc|r z#+#RoqaW9y;v@z4JLBLfflpIEk{q@1d+WDv8cR(?SHY}c4n7Tu-5Z$FCqjd7C+ZKP zh8cdm96`1B>eTuBt6bdwd+`3Nu)sXmw|U95voIwr5O8sJ`qsNwBb}!QxJnbCRVjM0 z*@^%Sf5yi@T!Vv;xf73 zmB}?otAXqRNi^o%48xo%bL)bs$FP%eP~K>Q=bauoULT5+?-|*{xm0KQ=*;maTv0;< zDs^CzlQZG$v8rA(K3kRo6&(7=h11%3dZ6> zywpH>(s>nqapQur=WF0?r0CRs!~)9KM0HF9s;Y7#u88ethx$IF`p}N|XL3eNz^V zmkC}+B6uD7NAHga_5yQ8MjdUO`&&ovnn$(<8$?FGr&1yz;%#?!xDjAvc%)Wr$>Aia zVjQ1vuK@4ItZS-ynX?LA^Q6iVbFO;fK88m;ds1uRmFxj|^nn?MJyq%{xZobf5#(u9 z;2HO0lU`xhA}-d*?(2v5H15%R=0uFHA2v{K*-oy%dP|Q5x?jMO!9x|ETj0O~X+&5+ z1iVtm1RAF7BVUuy@xHpj=xgBNC(?pMGZ^-F-r$w5bjhN;ut0c;z5RT2;ov5pqs)r3 zls*Yd@(zmC1*9tbE7j`@s-nM8z2y31MTU`p-m=n*HS9nsj0d-DuUHSR zzr%>$N1)WLBD}LVx&D}|b_BfF?k}*DE-VnnIdU--$mGQkk}m2!rO&y)q>IjzLk&QQ z=DARmYbY+of)&i8b}Zn}cdG9`I1+6E{p@FWB21XIf-wZ89Q?J;%TM6vzmVwRXp@+J z{e!#5=in@T7j_Yp)38VEYbu1dU6nK+dVCnq8m=;td|2AB#%L<*; z0?R>(Z+|4O%~|rmyIj9=zryzNs)Y50%{4Mr!wG>@oK10AIh`xdvqEWVS@PH=R{S4$ zIQh+yPP|cjU2@AiYK+-+{g;>+OVp=flV{(q%f3dr!O+FF$7vN~ElZfALFYA&z9|-I z0*ju8K-jWV*EvQ>-NXA>zkKR(z=vDmYLZWcf}~$@ta8i4m--(o0QzfbJhnBy2j?G1 z)pt>*%#{OMO?{+m#{+^pw%v5>blp_GI3~_tj@?e3m4^6i%Bmj``@Oai_yQAe(H8&V z7W~84e1*m!`nD$u)TR_k@El_E>sK&76BxGjjSyPw8jqgq8>UQ`?ZYlv6VntU25OMOqHZM?T^v zY{U+>4GP|;HdCm<^51=3XGsP&w|IxqiMxH@zenh0Wp4TlSgs|>kPI@Sb&(V35|KOv-Q5B!Fg)zKw@h_CRJB-AVnp? z&&l*Foq?pOv<8jEM{**V>cMqR{mO`YSh95mLG{D0Hng}5@OTt=5`Nwjb8NNgHStnEqZ0)a|*t|7X$ByjY zr!T~)?fneYyV8eWE(~8EcWi+7^yc4J;mGHJi7e@Amg$&W_M`pyjiE~FnTnt{e9StL z!RoCMQ(qLJ2F6XBz0p0gr-{8rd*vBrVfz8S701d-5M<6&M1ilU`;WV+9rY|%9#AP< zE7?{P63rxL{h0M(C}X)D6H;%BA-e@iXJJQPF1Ww@#{$wpCXXo2BG%GQ`Cnmyh+NWM zSxm^dEe7%p3$z(Tf!CEg1}O{Q%sA0tJh(b2yDP(p;ZEf{oI#R;V;Cv00F9}D0$(w- zoWknLxMF$^7WirQ5DPS)!cGgkhbsG!WcGif<4|BUO0#D8&QWs-dZ8EJ!RrYA2^wSF zy@EBfLt1cl2|f(>7l{a&3Q$TTq0g>Y$6*1v4?Dk$gT>3Li5}VrRS|j z9q=SjZqw4QdE_|^c?n$S<~49X8rMhOf}@K6Hmb12E^|X@AKc%JVjVcmPnV1R{X(1; zxQ;%T!vX@07nGJ4$I{ICSISk&(p4*rm9H&^unjy2o%Ywl;JFF({+)8Ap6f4*2aroC zd;%x+`un7N3}65(H+4a3g$1skjYr6o@gEDwyuku567RL6UOn$akwv2%Z|Hm(6bb** z`=E9DM%_0d=3X)?{65Ww)P+x|FmERss)D6@1;ym3p5v7?4GClW@cAv08;aUZy0=L< zJ3E`H-1>y;-ys!Cy+;i&%)4!^xlD9Uv+kL!TLh`8?tY`MwRCzK_}Woj6+34P16LHI ze$0=|v`*iwj##?i#XBD&eY*CcM8bNcZRYh>c5GnpJo@@HwMjwP!m}Z`ir}+O=`eq^ z0{!|(ISSVExa6d6$84ey3p{9gd!~Q|+PTWrK;DQnGM#Mm$7kMaRz|xpSKk%4h#_td zL>IPfG@klk0p|7y#Kt?uAF7YX4R7sl6pCUbus{)b;geuIA{X)HW24nVDYBOW-3dFS zE$m#UlvAMA0Wu;u|F^V~lerbt8wPGHP@)MFza8>>pA*mJ&wJSzk@<(c!of{(1!*Zz z1OGdkf#2={Mj@I8Hp(fR8sG9;_Z?2n-YELXE6gGSNv5}Ww88kBYf-t_P%~#n1n}=^ zY4}%69)6zqdZ0Sv!J^&ccSxO5U8J5>@?FaS3zUCBoSqHwI31k80+zRruz>Cj#wh8E zUdFKz#Nl-?@ND7$A5R_(Bhs?$wp;0gX7V$Oni*i6ZfgYUh(kN(Gz|;9?MFvH;}C_* zc~eYXRwYH0u!seUV;IKPdckqej|LAYoXAV2^Gkcu6{z)Jrkm`1>pQzDrH2I`f5NyM z5d7ZPB%EnCJ4$9e2cx=G0fV^FB7YAoV3>{t>i96BG(OU-IR8GWs6>vUZ(B&E%KDg!7n=IS=8m4b4I7Q;W#ezux1aekcEOI^6kAM9TNgva=nq2S{F3n; zLpcdoYr?fhrkW1i;Q+vl*4a3xq{9?L$H7u>L`D+M4L{kFsRR-3)kAT7PF7! z?`%PawlKxzck)RYSF(WIpdAcN_U#KJJAI zyh+Ls3ReX$Mhe-*M|%cn_t3LW72)CjA|r>@iPH^C#RDwhZiXi0-uFF%qD52!nviW0g+SD>BK}+ zfKNAGMnW^a@2-fBH2>$!aZh5x23>5>d>d6ATpbXe84urRGY2OLXd)#R@G2ceoCeY~ z3d5fT$jYRx?APdU{IX|@f*NsVlsnaU3SzQ*OOkFaO%E#&e2TPa3Du!g##AIqcE!xc`j-^r~47UKEKwF81qmSjC)onBk!#xH$j1<#s9xxYnPvHVK=QLK0@ z@ggGb{&7VeUO>T11CC+ZAYzU@b3%YbVj$JzTGtU;>dV#)=H?26_nKpAJBDIeuSQRE zlpK#o-a@(Ki8RjfY}&V*>+DZFd0H#3z*QEL`{B)xSsiWtY`GQ1FY&(!@kAznDB01XR}MO4gyIxEq-C5QHSE6(nOwX@duZwF zHhM#^7^?yjzZsI9&O8+pk8u^Uc|Qf?pg%F8isEf>F|{FZQy zXrqS7ZKs3rt*D`qy^$htRT^?n5@+-Fhx49khD9G_BckunG%(bD#!YtI;*0`=INMN; zpsPF2j5|z!UvX7>BSU6U9NBmcG^5Z{D;#cPHN%}!riyB)pkMe^&Os*UCt`RU!JT=9 zhOl|{Y#|1|Bcd(>DdEdEbG^68LT^tjPPI^R(O0p~7vG$2W9HRf$D_aQ5w}xO)eUJu zZx$7>2Kuyc<3>`%8!!o2KFiA}pwxUD6VfpAXN4yDty}P~h8zHuE1^pI?I10UvnzSi zGr3s6G&M{7>sN~Ny1s*wu=_iSNoLih`wtCRGO|Ut74>Lg`tAo6i?#8gn`qWaWC@Zk<7uyS1AsW;W!lOZH0 z^o000^CY;{Y=?{<17N(@h4l0t=c2mz4$d&9VLGpbMpw`YtjA` zLp4^KS{j-(Ua=p$kMeU#*G@pkG-@%FCRBU3qd{_o7ehTx%(|Ewr=X{Dpr&5$3o{E( z=CjuqFjW^$VjgkTp1*mZ+@Z%eKDOKZil~^i%CD; zI%V9;DW{=ZM@--33Pi#xGY=TiE(Zg#kMg@x^()+9RQ;O+HFGtKs7+Qj>do8e{+E~? ztHYcaxfWXHvJZD}dYQDlg1%7z^dR>L{@lcy~hoY^&@om=O zQ?y2+MUlxNbt5Iq2PZ6@!#ha6;WH#a@SbyBgFw84H~2)?TKtUs`HX_(fTCO78+O>t3jn8diD+lH9Hyes@(aTK|aTfJjhI zMBM~gRDa!B1m&cnY_mX6WfMn4v@n2X@n`$flIrT1qRS9Kv>)E%J6loFBLrsbj-54gOzdWCDQNDV6Qce7me@?=YjW`+C4sb@rt-6pyS$Nw8+4E!(K;+-QH zh-|LPqJ1IT-=Whi(JsDDPAE25)fub>)#zy)CLxFyc__u0o~37NUO*}!29T@dSGPd! z==;dl3VjYx{thFTKG)aE-(1Y9QH;%5Y~b5K{(NOcC-ph2$t}2(J?ETY1%-rSfxun~ zweD9hEVU!ti^@<1fuGEuFYFc!=|*Pqik@SEj>^@Noo%yaYEZeH>tq9=cL#g5*kw{G zA_NH9CrR-?hDCiprdvBr^^15@RZn3{>`yh?2W>Dw`aBMzDx&p(FsIJCcAr33{RX65 zuDpw-qxI0IWsVnDGIRO{=AAa4)N}c5#5GMLc0JDVSgz0KOsaQ$>0iZ*HF zo^Sv-og%#7xWj7h(^+!xkUtPuSE>O5>2?f<;!+#c^I79k)=m){X5aFuqXs$##Jk0L zp!vdie~S<8@KbT%_CM}@#fxb~t2?T5=H4v_vCCo@d5*SIqays#;!#FK{{XK!tkTSs z{aj7#M3CxU!h=?~MXN&hdrX@KOpE$79M(&`a?ECD_;xdsLwr~O^72>d+Vb|Xq)vV3 z4|O#!59y=DlSIB{s2htK%j~6|cGg)}aSyLb9@ z3GrKmUi#?w0A3jkA9KK`mF90vLzCaIo;-ADfO}io73dTevJK*g$QjFVmiYKL!a4(G zy9uSkKV-M5!B>7ZvB?wqdPSAgpxo^b;m-TI4;gH5Tqz{z&qE8j)(wqF1 zxWxV`q7YA&S%;d;Rgpoi1?F-R&~UPeubLf2{Uipr9j{pYb+g{8M4FC~&I|43gqgIX z(}30=&QRn}SL^$_Zx_f_;S z8G~KtJHS(qz3^RS= z_qsbuu0#3~n{ow16kh14G;~4TdbZyBlQc5ASar+^(8MoXX2C8aVu_P8 zBVLz2?nKE9=8)IcIR+H&Us@^MMF-ed7PUpGtB`OK+AD33GEwYQi!pY~OfTx`CfD$I znnfpRhQ@uK!$jlA?vH3idg(2swdW4XWPHl@vZrrIjk}*G&aoZUgc+uuUECTfh*KYX zT8;VAcK!x4NYMdH8%R;@F?_>t81KQFQt4?7Ze2NHV8m~ugJ&zQ=i|IWgmA}=q$r?s z*4<$_-vcM=l0@gp*!WWDEaq5Wk4jc*HXcV2(p4BkTP9eFQmM?bYQv<{-OGI$f>*h7 zvn9sH&p)M>S%HPU&g#7L*>mH-(nB*@=4#OWS6}{HeDxc)^Djd^KwOZZI`z^Swd}JK z*!Rj@a@&%r0Q{EMdcVkhI)%r%?ewgmmCATz@d_;BPhq!W0+7D*4jS8FtZ{_)x^sEi z6Exwa8=rI0*98&#Bf5;c1Y)vDjOp!xOxaItEql}i#92S8WHUC<$$CdgH?HQA?i^qc zw}w7UC3IUn+PneLmT}q5(YlDw5NtJY4C3a)0g}O&qycxR>xOs-mVI=EMYV;vUr4jY zQB2RJEH%eT*k{)!Ehj4_ z7}8cWl=1ZVu*MA~FF6hMJDtUsiL@=&j9wC%*!F6kqy~aq0X%>c05XFJ3FQ0v>1Zt? zmo&U{bmF`Aeh8)79wA3P#I@Zt^Qy;6N9)aCovdmIxyq$8!h=ypzSF^E6^M+5xvu~i zLX6~f^0>Fgt=l)LYS%XerbTUI%)FhsD_97%^@2N?_Afa-C`LC?SB=Phi4q}+{6VFM zxBcQ>Aq`&60Lf*QW|!nL&JwP{$P}8P29~-oIi`*Rswnk-$=SzvM2ia_4Ml3-#N}irtGG7N|!^0}mteg5%2J zxS8^u)zTCDsmmWKt!PNC54DDnn!ODG8O~45-j6`@O#&HCy3wAeS@&j}#QHuR$;=EU zFTPtK+HYS5MW`8tJT_9KN-3w}{L)h)`fGGYRKkx!XA3Q8mux0_zs2*@+!fj9o{TG{ zMr?^aUkkS02ClE<)*Z=UfkE7)M{L8%sw#JsQ8Tbp#@(HAfX7v0@O>nKX=whDFk`GJ z7Pvwl_(4Imp6$G;xJvpAf%Wqy15t>dL0!JQleXo8Xlu9fG$mP})4j{2niT3Sw(pQE$}!xtWrtH30o|mXl z@FbFiu13@?_?It^cVDVAT$l%Gfij7fJlUZ5@)u`5P+j1R2bwNnauT{ud^9gf! z_JK9eH3xD^p%WzwjPFrC2(&3hZ!YY7v|-u31tZ6R2)t%Nf_Y}61^x<~OKc<5&D~=I zW5(ClPZH$bd!n@Nr=!B-?mJL{7bLT~h7pdh99M%&@`2e95Ds~G&9zusVqoBg*_Jxg z&)C^}YfdiCO)yW=7~e^*?(Su;%fC#Q9M=*U$FIG)(!FS$!!SQvB2T$U=q~m{kY56R zKT4U};Vu?%g0n^Ou}_c7a!>P4M6l0K*6dOB^g!w3f(U`d6nFpFK*T6)usZC{;#~us z>B+{nZ#%JjaX|oBGY7e-LvscHadUGPYpWPugxlua)nY76N7UJ3lexE%(O*;Uv1uq7 zjR>i`_qnveOc1vSsORy>@>*^hpt!1pLSMJv6-YnqN&{b}s_=n*KdyvF^qGZ(_^xvF zArzWQmi$UqTIuwK0VC@H(rZ~XmbrOiB6`~SG<~uKI17o&ibv-ML!O}v3r#&99UW6SX zvL81YZ%J6t^yoL2Z!1QLWht2|>J8CY#3l3^8$n}%!beJpMz!^&J zPqwRkZ#pm_pRldK_3YUV+`QaSYHJTjrr7yp0jf^WeJEwj8Qej6jF|%|!KZ=Bu}Pz_ zw(cA~7uHFQc?vcqoCh#3PwEPio{R|BkdSiF+tU07C;xk&^6vhjJv(WM8_ETSAyJ2t zgw8UnvjMjq0_Ts@yh>q-D;6?eb$@ba+;|0qNopyd_eL*@aqQk)7t65Eel!&H=tvsa zhJMb4a@P^lG7Hmc`h8qkhasm5KWwBoigYz*o?QTASm0J<&!%Dc6Asq6PGJNHYq|V{ z9f852k%Fc>bm}JT>r2a?M<*q(&tsO?kI`nUO#xb=UY0uPFO9?Dv{pVgu^}1E@SgS{ z;HFB>NL3n2Rd}v|;m)=fTa=icXZ)0`>@KS|WO`aoKhicK>r6kTG2(#;T}F8orlT^J zE!thpL-4Z&Ym0I-%iH|Mq01Tz37rJ@m$ekc9>iamJiWi?!f@p}#F#(qBQk1MVP8`e z?1}eRkM4iItUDJB`8gQRFu)q?%|V%_N^k20CMz^WB$S2|V8VBOXum;!UX@awYD%$IF09GaY;Oi(V%|b^07) zEAx)^R>9AUlu>d!$!!)Z>`PD#q^~A#yFLJNi9!e^!qkt5xw3G??twW_Oz zH71kzSY+(Q#n^Rk-)f%4ZMC9z6}UEzlE4DO$sOh4aa)mbBlWj+ zwP7Wys(&`{{u3$6UYGTD4Q=uEVeLaijuC9W=ZmBDK>92G3!;?Bzp+LG5JDG-VaDj-zhh*FUnZq%?V zcCs4awN_yXe^GOV1()r89=^4!o{Wu79NZ-M+w2nqX^|c@sKBrmP=A|Rzy#*k|8T@0 zAV|+1>lS_^DpYun(;}oGcZi8OBctBpP4Ol16jQ`-)BPp+Tpz~UN}-dN>oAH*pZV^5 zV+dMIcB0m(v?)|a-1We~qNi_@{PC1|r}cQ>S-n~ld|zBZ_y1`Y_}>LX{ed{=iUatN z;L)4C#DC6-G!glLU?0U%ZH;9?#b-T&_o)Dcb*Q2|qlhv_@7^7`xfBrPNcDA9-cY-? zeM{>26TvLy^q;_MyFwyxVD>pmp~m^?)U!ZlZZ7^-OvrXT4-XUj7wcj&D*Jn>j^% zO)G#6zT+)<&_GGG{zhTq)8>whtgW#9$fY?54?Zr1}UA#jjHPK zSQULwFAfLh{3lkCsRY`tI8v^}^Eo4Y8BGZGF%zCStxE-BK#^K=2R)%wg;hvTd!yUX z$xOxC=wMCXew|vK;sqZ3FXtwI$B+McJeh`7e_yrX^ifMoY!o#t{Fr_qgPSSYA|`Mi z1_O^5g(P1TG_+2tQEq!p%Mj#?^UF`W!S4p=ckY98L?80JlC3w(-^u3}?CMrwT8^O7 zJjFn~ZTNf6^3b$nFfSibaJW;Ow#AQn^+$fVm}^jd+L#wSS$>bjYPD^%;xS1Rc@2Vh zl1g}NNZ5?-s?qfPy>g=>w5T{TtVA`%AytP zAZGKWCQ2;Rhuu)0v!A*`1{L#({0y?uFkZAisPObnmXUJwr3ywFyZ6-f@2@hLOAp~y z`K*#!sC~|Vnwh3HAX_!E(3NaE=8%G85gN+bH-%v;!dWsSP>oy|l`@c;SWR01%dC)N zH-=9wkyU4+2v!i-ED8O$6cGJGvBQ5^Fw|ukpB`_mNv!kpkfm1Ud!zB6i;32pBh=fb zsGwAt&XI9f;>w~Q`!c%CponsEyU0GYoCP9QklJm0iSag5Hv*RW%-mK3z`{rc6=Bxg zB+3J3O&oKIZp=xpS#G*mF_*fImtS!sY&OvIpsI@=b136jgQDmz^#Yx)ruBt=qVZEI zi$J1C6P{OuJsj0|fm_DMfxk<;TlkSwFzQH!#pf}r-H-N+yiO5+hfDT3)oDcc`}mVp z)sQ@<`K^2J2JFvr4>c|O zbA8ld3<0?=i`5H8Lf;c+i{EZ{)V`cr;kSoapAdM#Qm(<5o2^TRWgsht=~ zG!kR^DI+)j`nk_h#gPg|GH$+Cd`b$jxkZVob6HYKarly5C~%nYI2!ewVntI+iO==8 z*Pn|I4*M{6drF;|noSR?Cr@-^BS`3UNLNdpwOZ)i(p?|PFtE-d=5Kk2fA#-=Mi@K) zFRotuJ^uM8@{9@d<8^O|ipLE#IH3|$4 zBj!%@sX_8JG&z{IoCV8-=2!7TG8$(7;dj4}2>O4Mfamo8&gB0nIr;6`_zyC_VXHb& i8BMl&eYg?vnt6z==`C*Fi}trEjX$0>9Dbs}j{Sd^>FHwt literal 0 HcmV?d00001 diff --git a/dox/user_guides/modeling_algos/images/modeling_algos_image045.jpg b/dox/user_guides/modeling_algos/images/modeling_algos_image045.jpg new file mode 100644 index 0000000000000000000000000000000000000000..940693f5698d00c26dcf80ac51ff228748b14040 GIT binary patch literal 20058 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 SqnKSyX(>6EJ8DoL?)X0*V8u@W literal 0 HcmV?d00001 diff --git a/dox/user_guides/modeling_algos/images/modeling_algos_image046.jpg b/dox/user_guides/modeling_algos/images/modeling_algos_image046.jpg new file mode 100644 index 0000000000000000000000000000000000000000..334f9c9b1e64456eb610eb7d2279e6147a956411 GIT binary patch literal 8321 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 literal 0 HcmV?d00001 diff --git a/dox/user_guides/modeling_algos/images/modeling_algos_image047.jpg b/dox/user_guides/modeling_algos/images/modeling_algos_image047.jpg new file mode 100644 index 0000000000000000000000000000000000000000..9a6b1f4550d82fd8b42adab218792827cecf479d GIT binary patch literal 15483 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 F`d`fC9p(T4 literal 0 HcmV?d00001 diff --git a/dox/user_guides/modeling_data/images/modeling_data_image009.jpg b/dox/user_guides/modeling_data/images/modeling_data_image009.jpg new file mode 100644 index 0000000000000000000000000000000000000000..0af5124e1dea58546412f93b1749f8b824d8a9f7 GIT binary patch literal 14270 zcmeHucT`i`w*HQk(2?GYbfhD_1w=qVs!DGP2na|o(gGqPND&Yaq)L}2Nbgm;bP$l< zK_Q_=2+1#=bI-YY?z`jn?i=sD@&34BtdZ>O4P(tU*ZSr+=QlxrMlS)EHB{AA0T2iT zSYdtu^c5sxVuHAQkf=@tALrX``$;HjXdsR$a zLQ+avM)`({s@hF;joWwb8WH*t78G5s~o;uM(4z zU#FzL&B@KnFDNW}SNWl;x~8_SzM-SDtNUY5Z(sk|_{8MY^yit`<(1X7^^MJ~?H%~R z;nDHQDdPLt54%7B*6(KhY1v=wBE#5q2^$*=8~npA&?O(tz#_xOxgvr~uA~RP=SIOM z8iGf8JubVV9iRQ0K8)(V`zQf5huAVF{D*13S@xeZ?8$%0vOf*`yIr#Y5f%vJJS;K* z0&F3Pms|*U6!6Dfgv4ak%eZQZIik`kj>VhN0KsPa;*sDCbdfSZ8V$tzzlBb}Ljxw; z_E@QCAk1TF|BS||bw3iaY=)3Uh0O__uQZtO{GYj3RW1KWK*rZuf7XAX@4&jIR@bO- zrz`$aVeeYTQ7ZJgfRNl#y3PB#8e0k_uctQir`qmHU@$hhlo%-eXWOA2^)R0c!Wzrd zZcpk{iBs2z(t;S@VbH2;Ka@;=1T6l~9xiV^KW}3yQ+V8%rpEf(%7xH zk-%Bz@-Q-Co&wcucs8wRHr<)|ox6ei!ms?eEGd|P=j~s{JCmC7dv6^MEO#XJ=1jX! z(}$r-JAs8**Ys#i9<`)4d5bR0X*vnyn|cxR-w?5CgOaDcbQ``@>BS_o-z90Mo2d~m zYmhXBU7HS0VdI~hpZ6Eal7p!iIS29jKG@ik^-0G#c7<6mSpsRacyUsGgwWf1hH)Og3W11=rCv4AZ~T*-H(vxxbfuQ)a{*SMfp z*VvUhbuM4Ibz7%rbnIA*p^EfJdMW@VW_U1jqk*{Oj@Dx|z>Rty-{4p7X6@)D-*nhf zss3<%`N2+<5_W7`oBK-0A-P7QexFW8b8#=~?mBk?w2Y}JYfvXY7*cJVMYKuFcPr3F_*5%!<~D#HL5RE`Q7 zct2Ty3O5%A+%jPmrl_Zjl+dLnDEtnzqub?-B0vufJb|NuZbLhjfBA{KgYys7J~Cf( z5OQ)65U3jPwC8tOA*+48wsE~)ddZ6ZICVAP-m>X=vnnxEkqiwuTyMDp(>T}P5!y@m z9NH@ey1p?>_?doThcbhP*2e9nQa4qg#)82sr_?9dbH96+G_0b z@*>(wtFk8&H7(SRbg})91otSrSz5pXJq3Py0ldpwNRh10{F3~~AW98K z9N<10_|;U5$-gX=c{(NN<6oBJKYFG+^Le)tcl!bl;I2O2!-6>Wlwo;Z)k_2gNVtCy?LHTrVG(B8(KL7M073F__4+nF`*ewO9bGA|v!q4~OW?e4+s{aj~3)w|wH z8O?CDaIvA=TFsUIjhC`ZGI)(S49Fm{%%Q|~&L9UJAZ8B~$wbtO3P zI#br^ZKy|Rg0>{3b}#roybWfn)lV8_ClbxV4x$pE)CH;hW&DD_#fdrwXyB#%{)K-Z z8puio5GafTNQ+R6XrNDi6tX)BE%mG(`U`XWfgV^X@K&V%R_h6U6&e`X%`db2hz8*M zZ_&W#hvR5Kxh(Y;&?Zm%6>u))7vz23r4}{Xk*N4G*Q;Q^M#o}ly~h`OPV>A8|8P6Q zyE&`el-p_EB=+n<&we3ld-MCWkGdjV!*AQq=%O66{a!N4c>2zbCKrkqn6=a|6_&fS z)`&UgkBKL)nRO@_H|J?bK}^c?ea9SS*G7@%4;#$StyEk|oXcX*Nk5~3N_(vLZ(lNw zjr_4jmzWdRO+2bkBb$^9=MNt;w4u>4h(2R#;lKvp z%f-E*zph8M|A5wSH5C|~EM;vOD|6n{W9EwZ&~%9=bXdOIvz4@5PzVXm`C?8jTKyio z)}Xx&@*J2Jl)JKW;eSD45Z|NzK8TyTQtX3!*K1^@sjoEnPdD^+Wu97>(qTG9jPN_)?J&ZtCj?q=!(odW7F8) z`UjvdQ?q~{(Lc&RGe|7ZDPHWlCg%FGh{O-qJIJd1DqHzR(&}y zOf3mT_iWotU3{)-n%s^vm)|2{SCL6O13Ui!1aZh~0OfGf8;<%NDhayP1fQ{$mq6sdnkPU@7@wYkgmc z0o*6HDn%SG;I4B%?K%%ksi3%$xh+XvWXKC84VwtM3d>t~Q}y^fV89#F$##T13ld+( z@a!fH6b(FnWydK6fj;yb3%M9F zg5T5JoF@C3VaVq|23BTN;tWY*2T~dFDg!^BPpWELu$((~Fgop9gsNNLjt&#JRt)rD zaYZG%YTI!|Ug1!w{t;v>XOQFkW|Q@om4*TTV*f_Zx|&q!Y`4UC38GwoGUHV00_&B1 zqS?jQ)~SSb?Y=g;{R}z0;E|2@f&o|_IbT|`mzve9`XczJ$k)GdD!hS)!?H+LBG-{3 zt5@F559B;NS=E|$jyQDsymk}PN{8ZPYasJ?av^@5PTU)%aesL5avE+=zADcpzaMO> zpcvZAe2Qvb!yH{Lvv+>A$dG;L?t;z*_6WG=2b&1g`6UdOIsVMgehcx8!_jD9b@A`9 z)in-DH=3a_#yfd>?G6k|7I6`@2$NPDbF=(71P^A-J;tF1LLpZRFN@nc!tR05^M zax*EGbHf%2d|-z?tKY23XYwUZ?PbJlmNM5mVdZ&Z=^BehW2M!6YKu4%_irfl)J}Mo zUqNgyy9hc$DNNP6UO(BzYK4g)rI0v)znnhDC`ZM6PcNbpnah6k-_KVe7z$Srpe^q2 zIp1zd$+Ls)-g>;L+?v^;iZ(_qzlbDew37pWD4S6tO2b=GD9l3kW)aK|VX^Pqe5sGS0{7^0C$TSv&I30dJsF#8>pAZvyExk3Q z_sno4gJGH#&KzP_Y`P>ccrV2xJ$f`5CQS+IMOrkBiCqv74iuKr+>Y)W-xH`Tr#MUg zc0 z%`Hn*6q?QsFAI3{3X~r$H(Qvs%K3b|+Cux!ow zyS^Dd!!uvQOTz1S!ze+urM}_nu;c88$?~_=u?XeNl#4{a%#QkQ_(DMmk*{4x?X-Q+ zx5+($?6W72T{=qaTS>(R7_y6YD%DFL4jszRFE3DHa)M?`KR-ibMaJ+%INJutgGSi# zo6{SS#t?l6OC7{>DhbC1J`olvM{a<{T!;T5CYS)Sg%TM5F(2gtasOz5@g!Koy zvan^^!r5;+PQ0HI*capLIWH>gt}r@>D4!Xc-xZhV>NKu$)Y2GZC}eo2QO}~c71#}! zs2M8mDCvvhNn_tG4n+e`{S9G!Z^{X)W|NY%?Z&uYB`NI^GKYUYF3VJcGrw8U6smR@ z-zV@Mpop%#j-l5(#K6PR-|6Nba0=47GgjhNOj9}GY+YZQu+I_7z9UasSEe}Y`=Sjh z9-dxq&x0>fHq%he@|9&(Z|iZ{UVQMiDxJ#?8Elm_e&%DJQaa03qtJlYs{>*OLxEDn zRlefYlC5N|Tu1fTq}4C=W^P-F_E z3|`a!lRf>xqHryWa%yslwk4mq(T`w$IiD%j=%4g@HeRj8HF%waKDzU| zQH{iXiGcHqF9xN*<*z?-SV}#!(`Y#*!H^t2 zK|5sVVqWCM3Fh8e(&0USx#rDuv-~QecsXv_l7@33?d`(U;pxeW0=72Z7jQla-r01c zuc4w2iM{S;7tv21oP%9!1AOjZb*7KHZ346~z`)5&mce5^|JdRD+=)aTD-o%xHcbi2 zUWz5>jzsb~6g`n!X)*7JU5@j087?20=7Se>EY6}B&F|03%{!#nwXJ7E{14<%UY$s4 zxb&Eu#;kZ}oO99g9hT+Sp2&}C>lSE0OmB#=`zknkqL_C}X@>`^R{__zVDQ;$r=)1W z=!U;pMh;^7a1$=RW3m_LTyCH2XFf7$DDsN?yr6=4X$eJj7*lWS4_jOza}-sZv86Ei z;2F<8!qRyaN`D5qG3i`AL_dC~O8VK3@b0%A(mH9DFd$%lxm16Dc|W#icB0@n)P_Wg zy6POQuuspZTvz{T3oh7wwG8HjB&REJr2L*^9dWwg3d z8pefRBn;dL+D1yVBm%Awx+bBE7b|YXb6j)gnt~cf>fsAW1SH+BwbPOk+HrfC&p*P_ zYrS?)Q1vlCm>3boQuc5&rb#U02P;bt*$mk*tw7Py6m0e)9lL_4d=oKLhRoLcmO*XL z*TZ7Bio=71Be@{1V0pup>9E%2E3j9|!fFkt+JkT__dcZKcaLMLt^g9a&P+97Eb*7V z=X)OFH9G3R_u#XT%#P-+sHn?$d&G}VqG3?Au_hhCs%i3GY7c?DhJY8O(sZor?}I`q zL0flTRq0}jnwSo_QFXR6Xpsce6GRVW)XBelh)F|>b`}r7m%G{EY= zcy^kA29(4=@Cyt_V7ZO_rKs(g`fEAkx5ELxwhBd@jzYhRJ7B7g(^_VKrB0Ylf2TTH zgNa?OaiWZL@7p~GBflj(mRJp7Q_i?#$Hyeif)cj--7l>Fak8O}jdA<9&v{Q43#wrj zwi)h;28g!R?-gXvo#rNff1GywK)$b}6||jvc{|?GFL|hF_m&W__d z3};!Bvs-zwOW5d4c*E#Zk@quY{v2NC%Tfz!?mB?qw3vY0ZKt4Vhn3yFeVRKlH?;1;~{j?AU zEoI+e(9#EkmRJdL%BLRZ8h>!jgG9L63*=3k%1B3NW?5b$Ny(blW=V41cCx)Cp;Fm% zwXPNlwF&mg{Hd?^uTN7?cRdbKlJoj)6i0<6E>|Y_1@@gk zS4oobSHufzyzfPM4Q$P7$Cfzw_{?@){<0u*@=4o&#V+!wo6O_OrktVMJz2BQreCB$c@btIBjlhg!rv;0 zK^&3Baw^N=H|M8hw+SnYuBgSYa*rpNbBg3e(^1XeOinJg))8r~WInGo z6n?Ajyj*C)cYkxuzlTn`=hV;tej}61?H8(}F5=QH>m>qLnCloxyWmD>fYdX2EZ~Yg zx0$)cgT1v=QT0Q{3taHBBJ=I+09`n7YZomVSY~gqtr2A~ePJb`hN~?KuE0u2h?;Ib zrlVSFWoQz($Smz%A@qg2Ko7J+I{Lwuh|3pB2~L z6G0S$o*Ec-?Gs|EX?n|at6`EBCJ+3Bq&Y|o;dDqh3p)HwF7m!Y2 zmUH3N9UQ>hk{&a|^5yO+ft;bKlz0SV759FS8hAUk9YM1aUGBF0CPm6=*fC)dF@1*e z`uahIaimE<%Xdw`B-gbKrV`LuzCE2uf?_3mXcQQKPrf*FH7YImcc#A0ed6k*ZmY1&25VZt32jL5=XoQ zNlbQPNH6P=c&B*)`-l+I)T?YEg)_#RJTN-w1}XAJTwmWNqfgnw>;i+PeQD_`StkK@ zG|k&WS^!gl0>tmIh3N(3;>i3|0Qx!Oob3N48wCQOn2Hs60u7Kr*D|&;k9S(98ca4? zelAE={UAZ0LBt|T{>bv2*aW)eHE#G9kX6KSYbAS{JSAfh$`FQ{o?w4w;Tn)P(29Bj zk@;Hu5-uf*IPbXJ$9#|6T)i=$>Hc?BC`C^-;8mEddo>CW2ItAdCk4wbevFfdSoJse zUcywz9#XILtv`Bs6W_M)Ybml@Q+~d*`h(f98>K5xUtF4V&s1aME`yfFCr#O1-#vkK zTHiIZCwyt4%gLdo`#59v6-oMZdb!>z>~;EXXSz5#&m_jvh4d!Zqk5Q&{idn6R7sPA z-}UT9O@)1-Hq4N?{ID?oopJH!PAOao_d!lpWVCP^O|p2f$Bu)`gUq{= z0&Np{(E`=0L=TwKKrU(Sq{?+c+;dEZClVvFFBgll3iJ`F_Tp<2J@omiRf2tO+(5#DgjG!Ib4Z>y zfs(Eo>rt7@ifA!Xekzp5$&{LosU4f;Q_WF5voqHxV-oWvRqH65M7k_O&%cQnzmve< z1r5sZJON73TB`Oumcc}TY@v*b8&l_(>wB);k;*Uob@Zii3*cPExS6>+bYA|&Pen}U zLX#3dTLChsWrtlBEMwvWG^mO3fs$IUH%uLE)TM`qVxVSY3kbU#6E4K_8*g01HW|{B_gC|m zM=SPIC-Slgh6`qIj(ung%YUwXrDq|^jv%nb`uoJ_jh9^&s@Zy!R|~g*E#9Nws<2>@ zl@N?XAruDPMd@6Sae5xVDYD-#+>xk!CuwJG%XwA@0k+ww; zhP2>@O>QLcfbws3Z6Y`ri;!sG)^sRR436DG0&n}!%0(+^`8E0G7bmA>qYH*3u9o<6 zY{cBM%hwBcfuIFBrNV#@R)I5$yNK8cdf>F-d*g~vxGgL;8Z~GA+NuFsZBhxZXdeI_ zJqmhi_&z`gu7l)2T@Kku@cNb^uy<|pISXG9J4=kCb(aO@DDpN_m0xpxx`6E=nQ~&^ zM?9&of%1i*mLIsw0~^XHX2$A&ouUT2DRu8V>ggQ?c9=rgO7Wa*v&np(JKeG)foY}(_3t&Gp8L3PI;bbIt~ z`{<{=MfGdNyZ)C<_dlygN@p^lfu5EZXy9J4&IL)s!;JtJG{Af&bn&bdawM}|2$V_o zlqLDaJ`*?gSU1^u7vq1mH_si)XlQHHA~XuY(AiSd>)^-ZDzDY0x=&d`(=%Lmg-R4eqyQL zW|Ojmn_D^Jk&)G7_S$Bjlvg&Y`7}VL_D!mhKl4#A=i9jtNDa8a+CN zCqrJ&zU9;_*MVu8ogq2-T` zSjc;pi-c?&$M;H8O+{oM`O=Z{Ha0B5w9B^D}s zhwkIeZCJiLW{GzAW80@(3Z|3eb#vh$C+=gTytjkbUVi1t0R-EuHe7rriWi^j z4CWjTPxkDxMFaSJnxUHJh_0haqm4jyqb>Wf1IybG%`9JiUoU*G#misR3Ll=5;q~I5 z7u%rLtWJ*Q(EvTL^5~IH^oK0_OUA2dg^ev_ag=0s+zF=7-qO7u-%7-6YCb!~Gebl$IGykBj2yTZ}8OkoC`C|dk+LlNuQ zmfBRXfS&sA5;=ZqXXZx~bxkw%ZO18I1@FYeaPUY*D7-}H`E1ml=P=3ar;~5*dKUsJ z(nLE#`9WyFF~nFG0adH5Jg4-tt&NMK6bWtI(cw5B0q67a722{s5yjhbaQxJSBbTZc z>4FrEzj?wn=^{X`DzFyy)D}B~MyjoBZx6*M{f+IV#G{Ra+xANmQ;!1Q=VKhir6-a1jBoLjz@6$l_FlB}S!RRmEHhU~<@M&)Qb_sv8Y^&;)7>{=Ga~-ofz{LfZIgV}vSXsX}B3$|* z!u@Yn1%8iS?tY7%L)^C;QKRo2Je_qJOV=Ylt7AF~)QFK6JC&Mn!t383Jn8K6?pHu+ zo%lad2w&%FG|>Q7r&lgNW1S5TYf`qK`KZukgMCgVwt+~=PJ7`mZ?TA(f;BVOi$f%seH@r%ie*K3LuKE2c&n4MB;oNWYFT zYx#&(fzosA=?%lb;gls>6PK8u2np=<6hTZzws;+QuwIP|?KMI2qq&^v&sJ7GS9VN| zK8jhQ<}`(>$Q?G)O7Gq&l@nO6R4H_T&CAJ%JeN#trdIWSpfWrWMD^u<6akR;mZQSn zB*3GXzsQlkp;fnC)nh-k`EQbYKVrYL)}%YJ6qSqyu4suWi&rLf^plc=Uo0=woxnA2 zY|tH<-{;HjnL&LV?24&le*!LV_8X!EbtBjnC#)yR<cED~nwY&3ugp zd^2vA&b#C1H;vKrq)+jEd`uAa&5}zg0r3(-KaE)-Oh&Thn9o8iCSzaiIX*8qV?C>! z7_~fHrtEcE_A!C-_pAixp9QxD(|>-PFh$s(7>a(=*thb1{;~ohn~GNhBn*Ivet|+0 zg`p#%`9#^*>gG$c_?NouN(ZYVTmE@x&3|IbOQH<{O^~HVcXFoMRwk^RMb#BfN z@!(52LX0Yz8kDFmSk?N^zTPAxh&W**bdf518uKc zKgJ?%HL0P2>m+$-AVdTj4S3%%#E@S6Uc52|77F8G7d(THX z8{B6jV3j}c1M`kc(tOX$rwrk@f~VQ-;CrAw!@~ADT?yGs)qGd*Sk{!USkp0_PvGk_ zDcmt1Vf`+DS7Ot@mj{1pT=^}2#wSGrxAZhs08ZMxx4{%xW0592AYS|bp00#{Xh8g% zj{mQI&)5@z2G(q0NxKdEH@nArYOIQc1@{Il;pP^`@j z)zeL~L=;tS^A<9B5+*6Bu{8n}Kcq)T^$CY?)ezg|HyJ!Gm!OVjOGUbI(NQ_^)N5D;^ z7Q~p=#?Ee*!%YlOEv7&a4UlDD-yBrHQS133rXQ9@k@--?R}v{iN(mj#!0?428#J)8 zh56ru<(1g)hhu19e=rki4)_mIEiJ;D33VxOs-!UrBiyRb9cqC+V7=u);qENUe zXkW}Q6xsoUt0BK{Lr*t!P=c}lp3=Wp>A$p>zWK~n*JS!zI|xHXQMV~&4cT4wdlb@m zizg3Tvf(aWG^b}?Uuqg${qa+co^&BNvMqvwURxVtgpq%5@BjNCF!@ujyJJ`DuRhcJ if_w-UA1Zk-pZ}Wrjtz%0m#ZqIRgwAL59tFv^Zx*%_Rc{7 literal 0 HcmV?d00001 diff --git a/dox/user_guides/modeling_data/images/modeling_data_image010.jpg b/dox/user_guides/modeling_data/images/modeling_data_image010.jpg new file mode 100644 index 0000000000000000000000000000000000000000..44fc3b5cbed0a02fce2fb2bac1e0d5270efc4060 GIT binary patch literal 7425 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 !G@Ytu~k4 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 literal 0 HcmV?d00001 diff --git a/dox/user_guides/modeling_data/images/modeling_data_image013.jpg b/dox/user_guides/modeling_data/images/modeling_data_image013.jpg new file mode 100644 index 0000000000000000000000000000000000000000..66f3029ebf4558d5f18e560bda8579bf7ecdeef4 GIT binary patch literal 23368 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 K2_WGYKT_*Ve literal 0 HcmV?d00001 diff --git a/dox/user_guides/modeling_data/modeling_data.md b/dox/user_guides/modeling_data/modeling_data.md new file mode 100644 index 0000000000..6cc525e977 --- /dev/null +++ b/dox/user_guides/modeling_data/modeling_data.md @@ -0,0 +1,921 @@ +Modeling Data {#user_guides__modeling_data} +======================== + +@section occt_modat_1 Introduction + +Modeling Data supplies data structures to represent 2D and 3D geometric models. This manual explains how to use Modeling Data. For advanced information on modeling data, see our offerings on our web site at www.opencascade.org/support/training/     + + + +@section occt_modat_1 Geometry Utilities + +Geometry Utilities provide the following services: + * Creation of shapes by interpolation and approximation + * Direct construction of shapes + * Conversion of curves and surfaces to Bspline curves and surfaces + * Computation of the coordinates of points on 2D and 3D curves + * Calculation of extrema between shapes. + +@subsection occt_modat_1_1 Interpolations and Approximations + +In modeling, it is often required to approximate or interpolate points into curves and surfaces. In interpolation, the process is complete when the curve or surface passes through all the points; in approximation, when it is as close to these points as possible. This component provides both high and low level services to approximate or interpolate points into curves and surfaces. The lower level services allow performing parallel approximation of groups of points into groups of Bezier or B-spline curves. + +@subsubsection occt_modat_1_1_1 Analysis of a set of points + +The class *PEquation* from *GProp* package allows analyzng a collection or cloud of points and verifying if they are coincident, collinear or coplanar within a given precision. If they are, the algorithm computes the mean point, the mean line or the mean plane of the points. If they are not, the algorithm computes the minimal box, which includes all the points. + +@subsubsection occt_modat_1_1_2 Basic Interpolation and Approximation + +Packages *Geom2dAPI* and *GeomAPI* provide simple methods for approximation and interpolation with minimal programming + +2D Interpolation +---------------- +The class *Interpolate* from *Geom2dAPI* package allows building a constrained 2D BSpline curve, defined by a table of points through which the curve passes. If required, the parameter values and vectors of the tangents can be given for each point in the table. + +3D Interpolation +---------------- +The class *Interpolate* from *GeomAPI* package allows building a constrained 3D BSpline curve, defined by a table of points through which the curve passes. If required, the parameter values and vectors of the tangents can be given for each point in the table. + +![](/user_guides/modeling_data/images/modeling_data_image003.jpg "Approximation of a BSpline from scattered points") + +This class may be instantiated as follows: +~~~~~ +GeomAPI_Interpolate Interp(Points); +~~~~~ + +From this object, the BSpline curve may be requested as follows: +~~~~~ +Handle(Geom_BSplineCurve) C = Interp.Curve(); +~~~~~ + +2D Approximation +---------------- +The class *PointsToBSpline* from *Geom2dAPI* package allows building a 2DBSpline curve, which approximates a set of points. You have to define the lowest and highest degree of the curve, its continuity and a tolerance value for it.The tolerance value is used to check that points are not too close to each other, or tangential vectors not too small. The resulting BSpline curve will beC2 or second degree continuous, except where a tangency constraint is defined on a point through which the curve passes. In this case, it will be only C1continuous. + +3D Approximation +--------------- +The class *PointsToBSpline* from GeomAPI package allows building a 3D BSplinecurve, which approximates a set of points. It is necessary to define the lowest and highest degree of the curve, its continuity and tolerance. The tolerance value is used to check that points are not too close to each other,or that tangential vectors are not too small. + +The resulting BSpline curve will be C2 or second degree continuous, except where a tangency constraint is defined on a point, through which the curve passes. In this case, it will be only C1 continuous. This class is instantiated as follows: + +~~~~~ +GeomAPI_PointsToBSpline +Approx(Points,DegMin,DegMax,Continuity, Tol); +~~~~~ + +From this object, the BSpline curve may be requested as follows: +~~~~~ +Handle(Geom_BSplineCurve) K = Approx.Curve(); +~~~~~ + +Surface Approximation +--------------------- +The class **PointsToBSplineSurface** from GeomAPI package allows building a BSpline surface, which approximates or interpolates a set of points. + +@subsubsection occt_modat_1_1_3 Advanced Approximation + +Packages *AppDef* and *AppParCurves* provide low-level functions, allowing more control over the approximations. + +Approximation by multiple point constraints +------------------------------------------- +*AppDef* package provides low-level tools to allow parallel approximation of groups of points into Bezier or B-Spline curves using multiple point constraints. + +The following low level services are provided: +* Definition of an array of point constraints: +The class *MultiLine* allows defining a given number of multipoint constraints in order to build the multi-line, multiple lines passing through ordered multiple point constraints. + +![](/user_guides/modeling_data/images/modeling_data_image004.jpg "Definition of a MultiLine using Multiple Point Constraints") + +In this image: + * *Pi*, *Qi*, *Ri* ... *Si* can be 2D or 3Dpoints. + * Defined as a group: *Pn*, *Qn*, *Rn,* ... *Sn* form a MultipointConstraint. They possess the same passage, tangency and curvature constraints. + * *P1*, *P2*, ... *Pn*, or the *Q*, *R*, ... or *S* series represent the lines to be approximated. + +* Definition of a set of point constraints: +The class **MultiPointConstraint** allows defining a multiple point constraint and computing the approximation of sets of points to several curves. + +* Computation of an approximation of a Bezier curve from a set of points: +The class *Compute* allows making an approximation of a set of points to a Bezier curve + +* Computation of an approximation of a BSpline curve from a set of points: +The class **BSplineCompute** allows making an approximation of a set of points to a BSpline curve. + +* Definition of Variational Criteria: +The class *TheVariational* allows fairing the approximation curve to a given number of points using a least squares method in conjunction with a variational criterion, usually the weights at each constraint point. + +Approximation by parametric or geometric constraints +---------------------------------------------------- + +*AppParCurves* package provides low-level tools to allow parallel approximation of groups of points into Bezier or B-Spline curve with parametric or geometric constraints, such as a requirement for the curve to pass through given points, or to have a given tangency or curvature at a particular point. + +The algorithms used include: +- the least squares method +- a search for the best approximation within a given tolerance value. + +The following low-level services are provided: + +* Association of an index to an object: +The class *ConstraintCouple* allows you associating an index to an object to compute faired curves using *AppDef_TheVariational*. + +* Definition of a set of approximations of Bezier curves: +The class *MultiCurve* allows defining the approximation of a multi-line made up of multiple Bezier curves. + +* Definition of a set of approximations of BSpline curves: +The class *MultiBSpCurve* allows defining the approximation of a multi-line made up of multiple BSpline curves. + +* Definition of points making up a set of point constraints +The class *MultiPoint* allows defining groups of 2D or 3D points making up a multi-line. + +@subsection occt_modat_1_2 Direct Construction + +Direct Construction methods from *gce*, *GC* and *GCE2d* packages provide simplified algorithms to build elementary geometric entities such as lines, circles and curves. They complement the reference definitions provided by the *gp*, *Geom* and *Geom2d *packages. + +For example, to construct a circle from a point and a radius using the *gp* package, it is necessary to construct axis *Ax2d* before creating the circle. If *gce* package is used, and *Ox* is taken for the axis, it is possible to create a circle directly from a point and a radius. + +@subsubsection occt_modat_1_2_1 Non-persistent entities + +The following algorithms used to build entities from non-persistent *gp* entities are provided by *gce* package. +- 2D line parallel to another at a distance, +- 2D line parallel to another passing through a point, +- 2D circle passing through two points, +- 2D circle parallel to another at a distance, +- 2D circle parallel to another passing through a point, +- 2D circle passing through three points, +- 2D circle from a center and a radius, +- 2D hyperbola from five points, +- 2D hyperbola from a center and two apexes, +- 2D ellipse from five points, +- 2D ellipse from a center and two apexes, +- 2D parabola from three points, +- 2D parabola from a center and an apex, +- line parallel to another passing through a point, +- line passing through two points, +- circle coaxial to another passing through a point, +- circle coaxial to another at a given distance, +- circle passing through three points, +- circle with its center, radius, and normal to the plane, +- circle with its axis (center + normal), +- hyperbola with its center and two apexes, +- ellipse with its center and two apexes, +- plane passing through three points, +- plane from its normal, +- plane parallel to another plane at a given distance, +- plane parallel to another passing through a point, +- plane from an array of points, +- cylinder from a given axis and a given radius, +- cylinder from a circular base, +- cylinder from three points, +- cylinder parallel to another cylinder at a given distance, +- cylinder parallel to another cylinder passing through a point, +- cone from four points, +- cone from a given axis and two passing points, +- cone from two points (an axis) and two radii, +- cone parallel to another at a given distance, +- cone parallel to another passing through a point, +- all transformations (rotations, translations, mirrors,scaling transformations, etc.). + +Each class from *gp* package, such as *Circ, Circ2d, Mirror, Mirror2d*, etc., has the corresponding *MakeCirc, MakeCirc2d, MakeMirror, MakeMirror2d*, etc. class from *gce* package. + +It is possible to create a point using a *gce* package class, then question it to recover the corresponding *gp* object. + +**Example ** +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{.cpp} + gp_Pnt2d Point1,Point2; + ... + //Initialization of Point1 and Point2 + gce_MakeLin2d L = gce_MakeLin2d(Point1,Point2); + if (L.Status() == gce_Done() ){ + gp_Lin2d l = L.Value(); + } +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +This is useful if you are uncertain as to whether the arguments can create the *gp* object without raising an exception. In the case above, if *Point1* and *Point2* are closer than the tolerance value required by *MakeLin2d*, the function *Status* will return the enumeration *gce_ConfusedPoint*. This tells you why the *gp* object cannot be created. If you know that the points *Point1* and *Point2*are separated by the value exceeding the tolerance value, then you may create the *gp* object directly, as follows: + +**Example ** + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{.cpp} +gp_Lin2d l = gce_MakeLin2d(Point1,Point2); +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +@subsubsection occt_modat_1_2_2 Persistent entities + +*GC* and *GCE2d* packages provides an implementation of algorithms used to build entities from *Geom* and *Geom2D* packages. They implement the same algorithms as the *gce* package but create **persistent** entities, and also contain algorithms for trimmed surfaces and curves. The following algorithms are available: +- arc of a circle trimmed by two points, +- arc of a circle trimmed by two parameters, +- arc of a circle trimmed by one point and one parameter, +- arc of an ellipse from an ellipse trimmed by two points, +- arc of an ellipse from an ellipse trimmed by two parameters, +- arc of an ellipse from an ellipse trimmed by one point and one parameter, +- arc of a parabola from a parabola trimmed by two points, +- arc of a parabola from a parabola trimmed by two parameters, +- arc of a parabola from a parabola trimmed by one point and one parameter, +- arc of a hyperbola from a hyperbola trimmed by two points, +- arc of a hyperbola from a hyperbola trimmed by two parameters, +- arc of a hyperbola from a hyperbola trimmed by one point and one parameter, +- segment of a line from two points, +- segment of a line from two parameters, +- segment of a line from one point and one parameter, +- trimmed cylinder from a circular base and a height, +- trimmed cylinder from three points, +- trimmed cylinder from an axis, a radius, and a height, +- trimmed cone from four points, +- trimmed cone from two points (an axis) and a radius, +- trimmed cone from two coaxial circles. + +Each class from *GCE2d* package, such as *Circle, Ellipse, Mirror*, etc., has the corresponding *MakeCircle, MakeEllipse, MakeMirror*, etc. class from *Geom2d* package. +Besides, the class *MakeArcOfCircle* returns an object of type *TrimmedCurve* from *Geom2d*. + +Each class from *GC* package, such as *Circle, Ellipse, Mirror*, etc., has the corresponding *MakeCircle, MakeEllipse, MakeMirror*, etc. class from *Geom* package. +The following classes return objects of type *TrimmedCurve* from *Geom*: +- *MakeArcOfCircle* +- *MakeArcOfEllipse* +- *MakeArcOfHyperbola* +- *MakeArcOfParabola* +- *MakeSegment* + +@subsection occt_modat_1_3 Conversion to and from BSplines + +The following algorithms to convert geometric curves or surfaces into their BSpline or Bezier equivalents are provided by *GeomConvert*, *Geom2dConvert* and *Convert* packages: +- Conversion of a conic into a rational BSpline. +- Conversion of an elementary surface into a rational Bspline. +- Conversion of a BSpline or Bezier curve into two or more Bezier curves or surfaces. +- Conversion of a BSpline curve or surface into two or more BSplinecurves or surfaces with constraints on continuity. +- Conversion of a set of joining Bezier curves into a BSplinecurve. +- Conversion of a polynomial representation into a BSpline curve. + +@subsection occt_modat_1_4 Points on Curves + +The following characteristic points exist on parameterized curves in 3d space: +- points equally spaced on a curve, +- points distributed along a curve with equal chords, +- a point at a given distance from another point on a curve. + +*GCPnts* package provides algorithms to calculate such points: +- *AbscissaPoint* calculates a point on a curve at a given distance from another point on the curve. +- *UniformAbscissa* calculates a set of points at a given abscissa on a curve. +- *UniformDeflection* calculates a set of points at maximum constant deflection between the curve and the polygon that results from the computed points. + +Example: Visualizing a curve. +----------------------------- + +Let us take an adapted curve **C**, i.e. an object which is an interface between the services provided by either a 2D curve from the package Geom2d (in case of an Adaptor_Curve2d curve) or a 3D curve from the package Geom (in case of an Adaptor_Curve curve), and the services required on the curve by the computation algorithm. The adapted curve is created in the following way: + +**case 2D:** +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{.cpp} + Handle(Geom2d_Curve) mycurve = ... ; + Geom2dAdaptor_Curve C (mycurve) ; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +**case 3D:** +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{.cpp} + Handle(Geom_Curve) mycurve = ... ; + GeomAdaptor_Curve C (mycurve) ; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +The algorithm is then constructed with this object: + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{.cpp} + GCPnts_UniformDeflection myAlgo () ; + Standard_Real Deflection = ... ; + myAlgo.Initialize ( C , Deflection ) ; + if ( myAlgo.IsDone() ) + { + Standard_Integer nbr = myAlgo.NbPoints() ; + Standard_Real param ; +   for ( Standard_Integer i = 1 ; i = nbr ; i++ ) + { + param = myAlgo.Parameter (i) ; + ... + } + } +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + +@subsection occt_modat_1_5 Extrema + +The classes to calculate the minimum distance between points, curves, and surfaces in 2d and 3d are provided by *GeomAPI* and *Geom2dAPI* packages. + +These packages calculate the extrema of distance between: +- point and a curve, +- point and a surface, +- two curves, +- a curve and a surface, +- two surfaces. + +@subsubsection occt_modat_1_5_1 Extrema between Curves + +The *Geom2dAPI_ExtremaCurveCurve* class allows calculation of all extrema between two 2D geometric curves. Extrema are the lengths of the segments orthogonal to two curves. + +The *GeomAPI_ExtremaCurveCurve* class allows calculation of all extrema between two 3D geometric curves. Extrema are the lengths of the segments orthogonal to two curves. + +@subsubsection occt_modat_1_5_2 Extrema between Curve and Surface + +The *GeomAPI_ExtremaCurveSurface* class allows calculation of all extrema between a 3D curve and a surface. Extrema are the lengths of the segments orthogonal to the curve and the surface. + +@subsubsection occt_modat_1_5_3 Extrema between Surfaces + +The *GeomAPI_ExtremaSurfaceSurface* class allows calculation of all extrema between two surfaces. Extrema are the lengths of the segments orthogonal to two surfaces. + +@section occt_modat_2 2D Geometry + +*Geom2d* package defines geometric objects in 2dspace. All geometric entities are STEP processed. The objects are non-persistent and are handled by reference. The following objects are available: +- point, +- Cartesian point, +- vector, +- direction, +- vector with magnitude, +- axis, +- curve, +- line, +- conic: circle, ellipse, hyperbola, pparabola, +- rounded curve: trimmed curve, NURBS curve, Bezier curve. +- offset curve + +Before creating a geometric object, it is necessary to decide how the object is handled. +The objects provided by *Geom2d* package are handled by reference rather than by value. Copying an instance copies the handle, not the object, so that a change to one instance is reflected in each occurrence of it. +If a set of object instances is needed rather than a single object instance, *TColGeom2d* package can be used. This package provides standard and frequently used instantiations of one-dimensional arrays and sequences for curves from *Geom2d* package. All objects are available in two versions: +- handled by reference and +- handled by value. + +@section occt_modat_3 3D Geometry + +The *Geom* package defines geometric objects in 3d space and contains all basic geometric transformations, such as identity, rotation, translation, mirroring, scale transformations, combinations of transformations, etc. as well as special functions depending on the reference definition of the geometric object (e.g. addition of a control point on a B-Spline curve,modification of a curve, etc.). All geometrical entities are STEP processed. The following non-persistent and reference-handled objects are available: +- Point +- Cartesian point +- Vector +- Direction +- Vector with magnitude +- Axis +- Curve +- Line +- Conic: circle, ellipse, hyperbola, parabola +- Offset curve +- Elementary surface: plane, cylinder, cone, sphere, torus +- Bounded curve: trimmed curve, NURBS curve, Bezier curve +- Bounded surface: rectangular trimmed surface, NURBS surface,Bezier surface +- Swept surface: surface of linear extrusion, surface of revolution +- Offset surface. + +If a set of object instances is needed rather than a single object instance, *TColGeom* package can be used. This package provides instantiations of one- and two-dimensional arrays and sequences for curves from *Geom* package. All objects are available in two versions: +- handled by reference and +- handled by value. + +@subsection occt_modat_4 Local Properties of Curves and Surfaces + +Packages **GeomLProp**, **Geom2dLProp** provide algorithms calculating the local properties of curves and surfaces + +A curve (for one parameter) has the following local properties: +- Point +- Derivative +- Tangent +- Normal +- Curvature +- Center of curvature. + +A surface (for two parameters U and V) has the following local properties: +- point +- derivative for U and V) +- tangent line (for U and V) +- normal +- max curvature +- min curvature +- main directions of curvature +- mean curvature +- Gaussian curvature + +The following methods are available: +* *CLProps* - calculates the local properties of a curve (tangency, curvature,normal); +* *CurAndInf2d* - calculates the maximum and minimum curvatures and the inflection points of 2d curves; +* *SLProps* - calculates the local properties of a surface (tangency, the normal and curvature). +* *Continuity* - calculates regularity at the junction of two curves. + +Note that the B-spline curve and surface are accepted but they are not cut into pieces of the desired continuity. It is the global continuity, which is seen. + + +@section occt_modat_5 Topology + +Open CASCADE Technology Topology allows accessing and manipulating objects data without dealing with their 2D or 3D representations. Whereas OCCT Geometry provides a description of objects in terms of coordinates or parametric values, Topology describes data structures of objects in parametric space. These descriptions use location in and restriction of parts of this space. + +To provide its descriptions, OCCT abstract topology offers the following services: +- Keeping track of Location of shapes +- Naming shapes, sub-shapes, their orientations and states +- Manipulating shapes and sub-shapes +- Exploring topological data structures +- Using lists and maps of shapes + + +@subsection occt_modat_5_1 Shape Location + +A local coordinate system can be viewed as either of the following: +- A right-handed trihedron with an origin and three orthonormal vectors. The **gp_Ax2** package corresponds to this definition. +- A transformation of a +1 determinant, allowing the transformation of coordinates between local and global references frames. This corresponds to the **gp_Trsf**. + +*TopLoc* package distinguishes two notions: +- *TopLoc_Datum3D* class provides the elementary reference coordinate, represented by a right-handed orthonormal system of axes or by a right-handed unitary transformation. +- *TopLoc_Location* class provides the composite reference coordinate made from elementary ones. It is a marker composed of a chain of references to elementary markers. The resulting cumulative transformation is stored in order to avoid recalculating the sum of the transformations for the whole list. + +![](/user_guides/modeling_data/images/modeling_data_image005.jpg "Structure of TopLoc_Location") + +Two reference coordinates are equal if they are made up of the same elementary coordinates in the same order. There is no numerical comparison. Two coordinates can thus correspond to the same transformation without being equal if they were not built from the same elementary coordinates. + +For example, consider three elementary coordinates: +R1, R2, R3 +The composite coordinates are: +C1 = R1 * R2, +C2 = R2 * R3 +C3 = C1 * R3 +C4 = R1 * C2 + +**NOTE** C3 and C4 are equal because they are both R1 * R2 * R3. + +The TopLoc package is chiefly targeted at the topological data structure, but it can be used for other purposes. + +Change of coordinates +--------------------- + +*TopLoc_Datum3D* class represents a change of elementary coordinates. Such changes must be shared so this class inherits from *MMgt_TShared*. The coordinate is represented by a transformation *gp_Trsfpackage*. This transformation has no scaling factor. + + +@subsection occt_modat_5_2 Naming shapes, sub-shapes, their orientation and state + +The **TopAbs** package provides general enumerations describing the basic concepts of topology and methods to handle these enumerations. It contains no classes. This package has been separated from the rest of the topology because the notions it contains are sufficiently general to be used by all topological tools. This avoids redefinition of enumerations by remaining independent of modeling resources. The TopAbs package defines three notions: +- Topological type (TopAbs_ShapeEnum) +- Orietation (TopAbs_Orientation) +- StateTopAbs_State) + + +@subsubsection occt_modat_5_2_1 Topological types + +TopAbs contains the *TopAbs_ShapeEnum* enumeration,which lists the different topological types: +- COMPOUND - a group of any type of topological objects. +- COMPSOLID - a composite solid is a set of solids connected by their faces. It expands the notions of WIRE and SHELL to solids. +- SOLID - a part of space limited by shells. It is three dimensional. +- SHELL - a set of faces connected by their edges. A shell can be open or closed. +- FACE - in 2D it is a part of a plane; in 3D it is a part of a surface. Its geometry is constrained (trimmed) by contours. It is two dimensional. +- WIRE - a set of edges connected by their vertices. It can be an open or closed contour depending on whether the edges are linked or not. +- EDGE - a topological element corresponding to a restrained curve. An edge is generally limited by vertices. It has one dimension. +- VERTEX - a topological element corresponding to a point. It has zero dimension. +- SHAPE - a generic term covering all of the above. + +A topological model can be considered as a graph of objects with adjacency relationships. When modeling a part in 2D or 3D space it must belong to one of the categories listed in the ShapeEnum enumeration. The TopAbspackage lists all the objects, which can be found in any model. It cannot be extended but a subset can be used. For example, the notion of solid is useless in 2D. + +The terms of the enumeration appear in order from the most complex to the most simple, because objects can contain simpler objects in their description. For example, a face references its wires, edges, and vertices. +![](/user_guides/modeling_data/images/modeling_data_image006.jpg "ShapeEnum") + +@subsubsection occt_modat_5_2_2 Orientation + +The notion of orientation is represented by the **TopAbs_Orientation** enumeration. Orientation is a generalized notion of the sense of direction found in various modelers. This is used when a shape limits a geometric domain; and is closely linked to the notion of boundary. The three cases are the following: +- Curve limited by a vertex. +- Surface limited by an edge. +- Space limited by a face. + +In each case the topological form used as the boundary of a geometric domain of a higher dimension defines two local regions of which one is arbitrarily considered as the **default region**. + +For a curve limited by a vertex the default region is the set of points with parameters greater than the vertex. That is to say it is the part of the curve after the vertex following the natural direction along the curve. + +For a surface limited by an edge the default region is on the left of the edge following its natural direction. More precisely it is the region pointed to by the vector product of the normal vector to the surface and the vector tangent to the curve. + +For a space limited by a face the default region is found on the negative side of the normal to the surface. + +Based on this default region the orientation allows definition of the region to be kept, which is called the *interior* or *material*. There are four orientations defining the interior. + +|FORWARD | The interior is the default region.| +|REVERSED | The interior is the region complementary to the default.| +|INTERNAL | The interior includes both regions. The boundary lies inside the material. For example a surface inside a solid.| +|EXTERNAL | The interior includes neither region. The boundary lies outside the material. For example an edge in a wire-frame model.| + +![](/user_guides/modeling_data/images/modeling_data_image007.jpg "Four Orientations") + +The notion of orientation is a very general one, and it can be used in any context where regions or boundaries appear. Thus, for example, when describing the intersection of an edge and a contour it is possible to describe not only the vertex of intersection but also how the edge crosses the contour considering it as a boundary. The edge would therefore be divided into two regions - exterior and interior - with the intersection vertex as the boundary. Thus an orientation can be associated with an intersection vertex as in the following figure: + +|FORWARD | Entering | +|REVERSED | Exiting | +|INTERNAL | Touching from inside | +|EXTERNAL | Touching from outside | + +![](/user_guides/modeling_data/images/modeling_data_image008.jpg "Four orientations of intersection vertices") + + +Along with the Orientation enumeration the *TopAbs* package defines four methods: + +@subsubsection occt_modat_5_2_3 State + +The **TopAbs_State** enumeration described the position of a vertex or a set of vertices with respect to a region. There are four terms: +|IN        | The point is interior. | +|OUT       | The point is exterior. | +|ON        | The point is on the boundary(within tolerance). | +|UNKNOWN   | The state of the point is indeterminate. | +The UNKNOWN term has been introduced because this enumeration is often used to express the result of a calculation, which can fail. This term can be used when it is impossible to know if a point is inside or outside, which is the case with an open wire or face. + +![](/user_guides/modeling_data/images/modeling_data_image009.jpg "The four states") + +The State enumeration can also be used to specify various parts of an object. The following figure shows the parts of an edge intersecting a face. + +![](/user_guides/modeling_data/images/modeling_data_image010.jpg  "State specifies the parts of an edge intersecting a face") + +@subsection occt_modat_5_3 Manipulating shapes and sub-shapes + +The *TopoDS* package describes the topological data structure with the following characteristics: +- reference to an abstract shape with neither orientation nor location. +- Access to the data structure through the tool classes. + +As stated above, OCCT Topology describes data structures of objects in parametric space. These descriptions use localization in and restriction of parts of this space. The types of shapes, which can be described in these terms, are the vertex, the face and the shape. The vertex is defined in terms of localization in parametric space, and the face and shape, in terms of restriction of this space. + +OCCT topological descriptions also allow the simple shapes defined in these terms to be combined into sets. For example, a set of edges forms a wire; a set of faces forms a shell, and a set of solids forms a composite solid (CompSolid in Open CASCADE Technology). You can also combine shapes of either sort into compounds. Finally, you can give a shape an orientation and a location. + +Listing shapes in order of complexity from vertex to composite solid leads us to the notion of the data structure as knowledge of how to break a shape down into a set of simpler shapes. This is in fact, the purpose of the *TopoDS* package. + +The model of a shape is a shareable data structure because it can be used by other shapes. (An edge can be used by more than one face of a solid). A shareable data structure is handled by reference. When a simple reference is insufficient, two pieces of information are added - an orientation and a local coordinate reference. +- An orientation tells how the referenced shape is used in a boundary (*Orientation* from *TopAbs*). +- A local reference coordinate (*Location* from *TopLoc*) allows referencing a shape at a position different from that of its definition. + +The **TopoDS_TShape** class is the root of all shape descriptions. It contains a list of shapes. Classes inheriting **TopoDS_TShape** can carry the description of a geometric domain if necessary (for example, a geometric point associated with a TVertex). A **TopoDS_TShape** is a description of a shape in its definition frame of reference. This class is manipulated by reference. + +The **TopoDS_Shape** class describes a reference to a shape. It contains a reference to an underlying abstract shape, an orientation,and a local reference coordinate. This class is manipulated by value and thus cannot be shared. + +The class representing the underlying abstract shape is never referenced directly. The *TopoDS_Shape* class is always used to refer to it. + +The information specific to each shape (the geometric support) is always added by inheritance to classes deriving from **TopoDS_TShape**.The following figures show the example of a shell formed from two faces connected by an edge. + +![](/user_guides/modeling_data/images/modeling_data_image011.jpg "Structure of a shell formed from two faces") + +![](/user_guides/modeling_data/images/modeling_data_image012.jpg "Data structure of the above shell") + +In the previous diagram, the shell is described by the underlying shape TS, and the faces by TF1 and TF2. There are seven edges from TE1 to TE7 and six vertices from TV1 to TV6. + +The wire TW1 references the edges from TE1 to TE4; TW2 references from TE4 to TE7. + +The vertices are referenced by the edges as follows:TE1(TV1,TV4), TE2(TV1,TV2), TE3(TV2,TV3), TE4(TV3,TV4), TE5(TV4,TV5), TE6(T5,TV6),TE7(TV3,TV6). + +**Note** that this data structure does not contain any *back references*. All references go from more complex underlying shapes to less complex ones. The techniques used to access the information are described later. The data structure is as compact as possible. Sub-objects can be shared among different objects. + +Two very similar objects, perhaps two versions of the same object, might share identical sub-objects. The usage of local coordinates in the data structure allows the description of a repetitive sub-structure to be shared. + +The compact data structure avoids the loss of information associated with copy operations which are usually used in creating a new version of an object or when applying a coordinate change. + +The following figure shows a data structure containing two versions of a solid. The second version presents a series of identical holes bored at different positions. The data structure is compact and yet keeps all information on the sub-elements. + +The three references from *TSh2* to the underlying face *TFcyl* have associated local coordinate systems, which correspond to the successive positions of the hole. +![](/user_guides/modeling_data/images/modeling_data_image013.jpg "Data structure containing two versions of a solid") + +Classes inheriting TopoDS_Shape +------------------------------ +*TopoDS* is based on class *TopoDS_Shape* and the class defining its underlying shape. This has certain advantages, but the major drawback is that these classes are too general. Different shapes they could represent do not type them (Vertex, Edge, etc.) hence it is impossible to introduce checks to avoid incoherences such as inserting a face in an edge. + + *TopoDS* package offers two sets of classes, one set inheriting the underlying shape with neither orientation nor location and the other inheriting *TopoDS_Shape*, which represent the standard topological shapes enumerated in *TopAbs* package. + +The following classes inherit Shape : *TopoDS_Vertex, TopoDS_Edge, TopoDS_Wire, TopoDS_Face, TopoDS_Shell, TopoDS_Solid,TopoDS_CompSolid,* and *TopoDS_Compound*. In spite of the similarity of names with those inheriting from **TopoDS_TShape** there is a profound difference in the way they are used. + +*TopoDS_Shape* class and the classes, which inherit from it, are the natural means to manipulate topological objects. *TopoDS_TShape* classes are hidden. *TopoDS_TShape* describes a class in its original local coordinate system without orientation. *TopoDS_Shape* is a reference to *TopoDS_TShape* with an orientation and a local reference. + +*TopoDS_TShape* class is deferred; *TopoDS_Shape* class is not. Using *TopoDS_Shape* class allows manipulation of topological objects without knowing their type. It is a generic form. Purely topological algorithms often use the *TopoDS_Shape* class. + +*TopoDS_TShape* class is manipulated by reference; TopoDS_Shape class by value. A TopoDS_Shape is nothing more than a reference enhanced with an orientation and a local coordinate. The sharing of *TopoDS_Shapes* is meaningless. What is important is the sharing of the underlying *TopoDS_TShapes*. Assignment or passage in argument does not copy the data structure: this only creates new *TopoDS_Shapes* which refer to the same *TopoDS_TShape*. + +Although classes inheriting *TopoDS_TShape* are used for adding extra information, extra fields should not be added in a class inheriting from TopoDS_Shape. Classes inheriting from TopoDS_Shape serve only to specialize a reference in order to benefit from static type control (carried out by the compiler). For example, a routine that receives a *TopoDS_Face* in argument is more precise for the compiler than the one, which receives a *TopoDS_Shape*. It is pointless to derive other classes than those found inTopoDS. All references to a topological data structure are made with the Shape class and its inheritors defined in *TopoDS*. + +There are no constructors for the classes inheriting from the *TopoDS_Shape* class, otherwise the type control would disappear through **implicit casting** (a characteristic of C++). The TopoDS package provides package methods for **casting** an object of the TopoDS_Shape class in one of these sub-classes, with type verification. + +The following example shows a routine receiving an argument of the *TopoDS_Shape* type, then putting it into a variable V if it is a vertex or calling the method ProcessEdge if it is an edge. + + +**Example** +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{.cpp} + #include TopoDS_Vertex.hxx + #include TopoDS_Edge.hxx + #include TopoDS_Shape.hxx + + + voidProcessEdge(const TopoDS_Edge&); + + voidProcess(const TopoDS_Shape& aShape) { + if (aShape.Shapetype() == TopAbs_VERTEX) { + TopoDS_Vertex V; + V = TopoDS::Vertex(aShape); // Also correct + TopoDS_Vertex V2 = aShape;// Rejected by compiler + TopoDS_Vertex V3 = TopoDS::Vertex(aShape); // Correct + } + else if (aShape.ShapeType() == TopAbs_EDGE){ + ProcessEdge(aShape) ;// Thisis rejected + ProcessEdge(TopoDS::Edge(aShape)) ; // Correct + } + else { + cout *Neither a vertex nor an edge ?* ; + ProcessEdge(TopoDS::Edge(aShape)) ; + // OK for compiler but anexception will be raised at run-time + } + } +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + + +@subsection occt_modat_5_4 Exploration of Topological Data Structures + +The *TopExp* package provides tools for exploring the data structure described with the *TopoDS* package. Exploring a topological structure means finding all sub-objects of a given type, for example, finding all the faces of a solid. + +The TopExp package provides the class *TopExp_Explorer* to find all sub-objects of a given type. An explorer is built with: +- The shape to be explored. +- The type of shapes to be found e.g. VERTEX, EDGE with the exception of SHAPE, which is not allowed. +- The type of Shapes to avoid. e.g. SHELL, EDGE. By default, this type is SHAPE. This default value means that there is no restriction on the exploration. + + + +The Explorer visits the whole structure in order to find the shapes of the requested type not contained in the type to avoid. The example below shows how to find all faces in the shape *S*: + +**Example** +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{.cpp} + void test() { + TopoDS_Shape S; + TopExp_Explorer Ex; + for (Ex.Init(S,TopAbs_FACE); Ex.More(); Ex.Next()) { + ProcessFace(Ex.Current()); + } + } +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +To find all the vertices which are not in an edge: + +**Example ** +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{.cpp} +for (Ex.Init(S,TopAbs_VERTEX,TopAbs_EDGE); ...) +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + +To find all the faces in a SHELL, then all the faces not in a SHELL: + + +**Example ** + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{.cpp} + void test() { + TopExp_Explorer Ex1, Ex2; + TopoDS_Shape S; + for (Ex1.Init(S,TopAbs_SHELL);Ex1.More(); Ex1.Next()){ + // visit all shells + for (Ex2.Init(Ex1.Current(),TopAbs_FACE);Ex2.More(); + Ex2.Next()){ + //visit all the faces of the current shell + ProcessFaceinAshell(Ex2.Current()); + ... + } + } + for(Ex1.Init(S,TopAbs_FACE,TopAbs_SHELL);Ex1.More(); Ex1.Next()){ + // visit all faces not ina shell. + ProcessFace(Ex1.Current()); + } + } +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +The Explorer presumes that objects contain only objects of an equal or inferior type. For example, if searching for faces it does not lookat wires, edges, or vertices to see if they contain faces. + +The *MapShapes* method from *TopExp* package allows filling a Map. An exploration using the Explorer class can visit an object more than once if it is referenced more than once. For example, an edge of a solid is generally referenced by two faces. To process objects only once, they have to be placed in a Map. + +**Example ** +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{.cpp} + void TopExp::MapShapes (const TopoDS_Shape& S, + const TopAbs_ShapeEnum T, + TopTools_IndexedMapOfShape& M) + { + TopExp_Explorer Ex(S,T); + while (Ex.More()) { + M.Add(Ex.Current()); + Ex.Next(); + } + } +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +In the following example all faces and all edges of an object are drawn in accordance with the following rules: +- The faces are represented by a network of *NbIso* iso-parametric lines with *FaceIsoColor* color. +- The edges are drawn in a color, which indicates the number of faces sharing the edge: +1. FreeEdgeColor for edges, which do not belong to a face (i.e. wireframe element). +2. BorderEdgeColor for an edge belonging to a single face. +3. SharedEdgeColor for an edge belonging to more than one face. +- The methods **DrawEdge** and **DrawFaceIso** are also available to display individual edges and faces. + +The following steps are performed: +1. Storing the edges in a map and create in parallel an array of integers to count the number of faces sharing the edge. This array is initialized to zero. +2. Exploring the faces. Each face is drawn. +3. Exploring the edges and for each of them increment the counter of faces in the array. +4. From the Map of edges, drawing each edge with the color corresponding to the number of faces. + + +**Example ** +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{.cpp} + void DrawShape ( const TopoDS_Shape& aShape, + const Standard_Integer nbIsos, + const Color FaceIsocolor, + const Color FreeEdgeColor, + const Color BorderEdgeColor, + const Color SharedEdgeColor) + { + // Store the edges in aMap. + TopTools_IndexedMapOfShape edgemap; + TopExp::MapShapes(aShape,TopAbs_EDGE,edgeMap); + // Create an array set to zero. + TColStd_Array1OfInteger faceCount(1,edgeMap.Extent()); + faceCount.Init (0); + // Explore the faces. + TopExp_Explorer expFace(aShape,TopAbs_FACE); + while (expFace.More()) { + //Draw the current face. + DrawFaceIsos(TopoDS::Face(expFace.Current()),nbIsos,FaceIsoColor); + // Explore the edges ofthe face. + TopExp_Explorer expEdge(expFace.Current(),TopAbs_EDGE); + while (expEdge.More()) { + //Increment the face count for this edge. + faceCount(edgemap.FindIndex(expEdge.Current()))++; + expEdge.Next(); + } + expFace.Next(); + } + //Draw the edges of theMap + Standard_Integer i; + for (i=1;i=edgemap.Extent();i++) { + switch (faceCount(i)) { + case 0 : + DrawEdge(TopoDS::Edge(edgemap(i)),FreeEdgeColor); + break; + case 1 : + DrawEdge(TopoDS::Edge(edgemap(i)),BorderEdgeColor); + break; + default : + DrawEdge(TopoDS::Edge(edgemap(i)),SharedEdgeColor); + break; + } + } + } +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +@subsection occt_modat_5_5 Lists and Maps of Shapes + +**TopTools** package contains tools for exploiting the *TopoDS* data structure. It is an instantiation of the tools from *TCollection* package with the Shape classes of *TopoDS*. + +| *TopTools_Array1OfShape, HArray1OfShape* | Instantiation of the *TCollection_Array1* and *TCollection_HArray1* with *TopoDS_Shape*. | +| *TopTools_SequenceOfShape* | Instantiation of the *TCollection_Sequence* with *TopoDS_Shape*. | +| *TopTools_MapOfShape* | Instantiation of the *TCollection_Map*. Allows the construction of sets of shapes. | +| *TopTools_IndexedMapOfShape* | Instantiation of the *TCollection_IndexedMap*. Allows the construction of tables of shapes and other data structures. | + +With a **TopTools_Map**, a set of references to Shapes can be kept without duplication. +The following example program counts the size of a data structure as a number of TShapes. + +**Example ** +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{.cpp} + #include TopoDS_Iterator.hxx + Standard_Integer Size(const TopoDS_Shape& aShape) + { + // This is a recursive method. + // The size of a shape is1 + the sizes of the subshapes. + TopoDS_Iterator It; + Standard_Integer size = 1; + for (It.Initialize(aShape);It.More();It.Next()) { + size += Size(It.Value()); + } + return size; + } +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +This program is incorrect if there is sharing in the data structure. +Thus for a contour of four edges it should count 1 wire + 4 edges +4 vertices +with the result 9, but as the vertices are each shared by two edges this program will return 13. +One solution is to put all the Shapes in a Map so as to avoid counting them twice, as in the following example: + +**Example ** +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{.cpp} + #include TopoDS_Iterator.hxx + #includeTopTools_MapOfShape.hxx + + void MapShapes(const TopoDS_Shape& aShape, + TopTools_MapOfShape& aMap) + { + //This is a recursive auxiliary method. It stores all subShapes of aShape in a Map. + if (aMap.Add(aShape)) { + //Add returns True if aShape was not already in the Map. + TopoDS_Iterator It; + for (It.Initialize(aShape);It.More();It.Next()){ + MapShapes(It.Value(),aMap); + } + } + } + + Standard_Integer Size(const TopoDS_Shape& aShape) + { + // Store Shapes in a Mapand return the size. + TopTools_MapOfShape M; + MapShapes(aShape,M); + return M.Extent(); + } +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +**Note** For more details about Maps see the TCollection documentation.(Foundation Classes Reference Manual) + +The following example is more ambitious and writes a program which copies a data structure using an IndexedMap. The copy is an identical structure but it shares nothing with the original. The principal algorithm is as follows: +- All Shapes in the structure are put into an IndexedMap. +- A table of Shapes is created in parallel with the map to receive the copies. +- The structure is copied using the auxiliary recursive function,which copies from the map to the array. + +**Example ** + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{.cpp} + #include TopoDS_Shape.hxx + #include TopoDS_Iterator.hxx + #include TopTools_IndexedMapOfShape.hxx + #include TopTools_Array1OfShape.hxx + #include TopoDS_Location.hxx + + TopoDS_Shape Copy(const TopoDS_Shape& aShape, + const TopoDS_Builder& aBuilder) + { + // Copies the wholestructure of aShape using aBuilder. + // Stores all thesub-Shapes in an IndexedMap. + TopTools_IndexedMapOfShape theMap; + TopoDS_Iterator It; + Standard_Integer i; + TopoDS_Shape S; + TopLoc_Location Identity; + S = aShape; + S.Location(Identity); + S.Orientation(TopAbs_FORWARD); + theMap.Add(S); + for (i=1; i= theMap.Extent(); i++) { + for(It.Initialize(theMap(i)); It.More(); It.Next()) { + S=It.Value(); + S.Location(Identity); + S.Orientation(TopAbs_FORWARD); + theMap.Add(S); + } + } + } +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + +In the above example, the index *i* is that of the first object not treated in the Map. When *i* reaches the same size as the Map this means that everything has been treated. The treatment consists of inserting in the Map all the sub-objects, if they are not yet in the Map, they are inserted with an index greater than *i*. + +**Note** that the objects are inserted with a local reference set to the identity and a FORWARD orientation. Only the underlying TShape is of great interest. + +**Example ** +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{.cpp} + //Create an array to store the copies. + TopTools_Array1OfShapetheCopies(1,theMap.Extent()); + + // Use a recursivefunction to copy the first element. + void AuxiliaryCopy (Standard_Integer, + const TopTools_IndexedMapOfShape &, + TopTools_Array1OfShape &, + const TopoDS_Builder&); + + AuxiliaryCopy(1,theMap,theCopies,aBuilder); + + // Get the result with thecorrect local reference and orientation. + S = theCopies(1); + S.Location(aShape.Location()); + S.Orientation(aShape.Orientation()); + return S; +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Below is the auxiliary function, which copies the element of rank *i* from the map to the table. This method checks if the object has been copied; if not copied, then an empty copy is performed into the table and the copies of all the sub-elements are inserted by finding their rank in the map. + +**Example ** +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{.cpp} + void AuxiliaryCopy(Standard_Integer index, + const TopTools_IndexedMapOfShapes&sources, + TopTools_Array1OfShape&copies, + const TopoDS_Builder&aBuilder) + { + //If the copy is a null Shape the copy is not done. + if (copies(index).IsNull()) { + copies(index) =sources(index).EmptyCopied(); + //Insert copies of the sub-shapes. + TopoDS_Iterator It; + TopoDS_Shape S; + TopLoc_Location Identity; + for(It.Initialize(sources(index)),It.More(), It.Next ()) { + S = It.Value(); + S.Location(Identity); + S.Orientation(TopAbs_FORWARD); + AuxiliaryCopy(sources.FindIndex(S),sources,copies,aBuilder); + S.Location(It.Value().Location());S.Orientation(It.Value().Orientation()); aBuilder.Add(copies(index),S); + } + } + } +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +@subsubsection occt_modat_5_5_1 Wire Explorer + +BRepTools_WireExplorer class can access edges of a wire in their order of connection. + +For example, in the wire in the image we want to recuperate the edges in the order {e1, e2, e3,e4, e5} : + +![](/user_guides/modeling_data/images/modeling_data_image014.jpg "A wire composed of 6 edges.") + +TopExp_Explorer, however, recuperates the lines in any order. + +**Example ** + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{.cpp} + TopoDS_Wire W = ...; + BRepTools_WireExplorer Ex; + for(Ex.Init(W); Ex.More(); Ex.Next()) { + ProcessTheCurrentEdge(Ex.Current()); + ProcessTheVertexConnectingTheCurrentEdgeToThePrevious + One(Ex.CurrentVertex()); + } +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ \ No newline at end of file diff --git a/dox/user_guides/ocaf/images/ocaf_image001.png b/dox/user_guides/ocaf/images/ocaf_image001.png new file mode 100644 index 0000000000000000000000000000000000000000..e47c657b3b26f121dd2511b4aa71776a587989be GIT binary patch literal 41385 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%0DJX69Ml7HCJj`U)) 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

GAe8 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 N%JS-RwK67Q{|CTQu^IpX literal 0 HcmV?d00001 diff --git a/dox/user_guides/ocaf/images/ocaf_image003.png b/dox/user_guides/ocaf/images/ocaf_image003.png new file mode 100644 index 0000000000000000000000000000000000000000..bffcbc4f4dd0f8f317d9408ed34aa11f42064997 GIT binary patch literal 4544 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 V)K5hS;L8li$iVng=|#ui{s%%NxJ>{6 literal 0 HcmV?d00001 diff --git a/dox/user_guides/ocaf/images/ocaf_image004.png b/dox/user_guides/ocaf/images/ocaf_image004.png new file mode 100644 index 0000000000000000000000000000000000000000..5f2a148eea21ea2a38edb0a7b2d266f19f798e08 GIT binary patch literal 9826 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 literal 0 HcmV?d00001 diff --git a/dox/user_guides/ocaf/images/ocaf_image005.png b/dox/user_guides/ocaf/images/ocaf_image005.png new file mode 100644 index 0000000000000000000000000000000000000000..c7235a0cac224ceea69ec842910c5d9870b88b0d GIT binary patch literal 3663 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 literal 0 HcmV?d00001 diff --git a/dox/user_guides/ocaf/images/ocaf_image006.png b/dox/user_guides/ocaf/images/ocaf_image006.png new file mode 100644 index 0000000000000000000000000000000000000000..1525f2e726928efa3abb39d7fae244822e92f990 GIT binary patch literal 65865 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 literal 0 HcmV?d00001 diff --git a/dox/user_guides/ocaf/images/ocaf_image007.png b/dox/user_guides/ocaf/images/ocaf_image007.png new file mode 100644 index 0000000000000000000000000000000000000000..eea54a725178a85ba07b84fca17e5bdeb487c23e GIT binary patch literal 12437 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 F`5($%Icxv` literal 0 HcmV?d00001 diff --git a/dox/user_guides/ocaf/images/ocaf_image008.png b/dox/user_guides/ocaf/images/ocaf_image008.png new file mode 100644 index 0000000000000000000000000000000000000000..b82df300af960b1542676b6dbbe4146eefc90ca4 GIT binary patch literal 51012 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 Ro+06%k-nK;;ohUc{{i{vZ1(^F literal 0 HcmV?d00001 diff --git a/dox/user_guides/ocaf/images/ocaf_image009.png b/dox/user_guides/ocaf/images/ocaf_image009.png new file mode 100644 index 0000000000000000000000000000000000000000..2605b03e067a824712932170139c4eb4ace650a0 GIT binary patch literal 61987 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 s55R&p5@y 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 WYvw!YtHmJTrEyp1PQKdH*Z&VA$k}@U literal 0 HcmV?d00001 diff --git a/dox/user_guides/ocaf/images/ocaf_image012.png b/dox/user_guides/ocaf/images/ocaf_image012.png new file mode 100644 index 0000000000000000000000000000000000000000..11a5c9dff0e959e79d3b42af28e8d161189b0217 GIT binary patch literal 31689 zcmXt<2Rzm9`~Q(~tZa^bjF2QN$zI0_IkLBmkeR)*_a=K}&yT(LUP%bqJE3EbZ2q_J z|MBy9lyW%U@B4jS_w~A7*YgfjQI^HWp~68yLBW@olU7ARK_f;%LFIv=*E2O|D zYL*GjV4>+oFVA`_?#A-X?o+!!`eBaN8iE7wF4!sC!FEfpcg(BK@7k$RoyU&nX{ z^k$Tpi5qOnO4-A6Ez^cg;~mlx(Enijcb$8ytM_t|!nwn9*}}~~8rt0zm}#dKuDwk% zqYRdy|FhV!JpY&+U4qbS<=oqFl5fyKO}(FUz|lP`S&n%-O56)WBAX4zsvynbQNNl?iL?Zu~2?&K1K%B@eY<6)V~9~!JB;@OR|Tw2R5)0pM`VFJ;4Y~MI= zG7Lm?ZqjA);zrG1t-SMxr4*(r6zI+LTNRfoT*Xhx+yuVUqMUIS%2ei0x2e~et&Nfi z;7%Gf7s`x2xZZI}`!YwG_{4UqVNa1|!`(pd({d|qjuW6JGT z%RGG2=Fy%tYMwsI(lN-Lr~p@=R%3r@*0901L>ipKEZYz9si~>c#b=Z?jEzKc3W&p`p}}F&Xs$tHt5JJlzaS8;!M!WCaIclG<*PB4X{DvA zLm009>Dax5m@n3IIu3-Q1H_ka)T#XmZ91k7iw`4zzX>*$b0~F_!(qWYMgAkX*;Zuf zg;LYd&`?vKc#G`|y&I>=kgDcUc8oG|>G}|qzAPo0>R;CV9vg4Q*-V=p9>?<`dLuL! zV%x}3)+jM!sXpd3c1Y*7@(M42c)(3->?D3T-%Oip{OOS|trE8X^U{Uk(hs4b(u`{@ zw#nI{SnRsxNgN~ZB6VdDYULUq>#6*w5TvPvl%uGhXt2}x%}4Egu65^+MSlNIWta~x*TCIm z*1GwS)q+`<_M(;7Om4b<%bNvN7+%MW?|V7%wVo@k?wsD|K~y@OBg84i2BdpNP#8cNJ|MCY>$%1mi9tp z_!s1t;4)h??a;jmEt`EGv`nMSANKpiU0q$boIFb(L8_hPnRqb4S3Y6kmK8!$s9FMp z2xcm?Cx+)jUKFUXSy%rTF}cXl%N1K{8oBwYd2Ma2yIX>EXjJ2na`Dqz5QRc~V9MP< z6t&OI2L1hC%}&AF)5*@GC_A?Bb%AJ(kwf^OHyU|Mw!My$-wSoh>Fm2u4X@{CTo!Cz z!4W-NYNSCf;Tr-WG@pjPB|hssE4SOLn^Znu@wuO`|2VRFTt8#b+TV3;xE z0Irb(0rmzys!)8!BraiLVJn=a!C8Q@Tw5iTEa(tBnO@M zceKOv`2N`w7S{81B|7Dj6go+8^W-geE}Gzw5V7O97(Iu6GB=6Pgnx@dyH0}nbfMhR zhG=mIwCghoTj5E$Jntu~Ba~a8+oOIk>AxqS(hU1@%iJa3=9-Kr} zR<(5;=q6#j`O59G?7p@3^e|=iN7k0U*HM3H`y{5=^=_@YI=m|9O*SHRGe1!Nrls%E z_@e%MpKqs{jZd-|hRkbgbrplG+l-;n8&k+LYTKr@@4RDeH^(D075dlJG2Xj>((Ue6 zvBWO&=x^CH^pO22%|2%nNIzXb%`{*pLf+MqQh5h8if2N2!2ZJ0AL5v+tdcjwoyXsvef2t)w;qE*3_SPhvFO}jwpn7AzY`u-I%&I~!qDsP za_eLL{Mn3Qr_0_vSSZxpt3HyqdOo*jn&4?pz7?Z2L|^>7*SPW-#HfMCPQi=zQ({{X z0|L<}s{sTuh||-_w}$rJ7&Cf~qt7ba{E3ORlMY&toCCAt^ zkH9YBr=M~Jt4UGzrbk&j(Q51I&o>eM?~5i;d84AD;D}Rjr{EV>gy#x_z;O6#(i@Dg zKOrNi+qx8NV^BGB#DFI?3&~##fI%rK8Lnxo0-!_P6?>E?e_& zG<0sc%L&JR7`Lh)I?dxX;nf4Tb zLOQ>naFhOgjUDVlF?iK+&|>T3a~~phW6aj+(&~M&77~$rQQ_MD@&5KanR%x;FBpfQapPe@&oxZox!pB2zz1B(GytuZ&yR1FL0rkIe@M$MM z!DYq!yt}*G``;XEq5{|zB@FM5lPOK;FS@XxCS@As9=p|pG=ts0KJOGH^Q1;rAg}jZ z5B^SRvXm26_6ln*=C^kq zJNfZ?i{=Y~%ad52yOXa>a`TB6E#Ucfg5Br#D8`4mBfs5YE7R4$d0Ji5(EE&cOjt@g zuk&W}#aq!!Q!h{9yNivtVz+#v_d9QWJT?Qrvd-ta(Z_Su539u=jvy5|`OfP$*?H0b0%|f@&R-?K<{Gwj6^cOy zmuE?c-r%Fcx7co4wB(}_ek6ZMT6d*b_QIf>HIUQxI5e3Kq7=A1t*oYJ#+ z#rR&!cAdAYeA0+I^HD1OnfucsG2^!)H;28E)h|E(@@-WX+N*OCyuH|nkqXiSxg1%I ztn3sG&lNdebnLwS7cmk(U8d=?Ek!Sxb@>n^xoluVAiMMUrTu|>VEKCaJibbUbo0wQ zWro|jmCx7hTOtSD?Al3Z;6eIw|694gT}f2fj27CLE1GOQ=n$Gq9;9{ED^Yt`QB4Kll6Vl^Ab- zoLm#|VpZ>B+}JbzK2A_uE6(400ha-l|EFZ=KjJTTxaCld9(&>{EM5pwy^z=(D7NQL_k?Wqt?Z-IQ};d(22H4#Ji`C{!&_<>+|s3DC$>tzgfkMBlm!?(Ynpa$sv2Dk>Pbb>~{N*@jnaR z#E9Kpu;F;EMCGmqlH3(&eYczEBZYUjpWlhb#r|757uh_P%R@xuuI4BF;u`pSR=Odu z=hCXiUasGoghy{rZR2}}oY|1#PtWv&kzLR|r*e2j`CZ8d#F9&^%>ut|OatND#4#>} zNCaq2jaBjpmeu&v;ZWLwm!?XMI^`E5FO?>p^;O9n%y`SK9vPfTVA0lD&(*Mn?}Jih z%5!6MZ6~DgX0VY0nH3MJ z^6|pT-9OjP>!rMCL528yXXG!D;~|i&i=GGVrawf%n@3iIJ&qn(XgMGA`IJemOg9OB zEXb+(kUqTxVtR-#psWzo#qFTD$%&{@3pm#6z@LavV=al__|{R`p4s5~Z0VtzwY?OC zpygix;ma5YrKYa6p^iKE^Fy67x#+kDvi1Vk@S+E-L?FK75JO0Y+j^MTMK?he+pA@_ zjUv&r5|H9~bJjpRgPr-~R)*sb;}BZ&H1l$eM=W^!2BdJX(1xE`5{AudK_S93v7X3< zrz&C|jXDY9V|Sb{dy3uPoESqn^;=FWTK7w5kSfoI)EC`0qLR#(oFN zlmEUt^lu~BH8hg?2kAWV`rS7_QDzD>C7AM1qD$ncbP0CV8gI<IRDdE5;{u@JG9e5KF6fZPL3nnZG zzho6!`onfXkovTB$<7?3`ZumfrecFQWQ?p*# zv=x8)mqHCvGi&Sr3@Xph&T_7pl1G{=JRjoau zY8u$b`QMo|qaXeH51WMtiHC`a`S+}aV`R>nJPli3W#ydS`*eatSzv7p6lk!GdK`9R z=_Zj?YDTh_c|OxTxoqPYvDkU?pK5kG%FCDOqw@{74fg7e6#`VnL2MJC6oQSgK*i9I z-t6*~_3Ze{N+lZ(&hu!2b;zl1uI33SNX?)w``jW8d)XcoIU5A+cYUEHYlgj~kB^v_ zyEVK1%)~~p+G{d}hnkg>G~y+C(6SGj95@2cAC{`vpi{2K9+VsOASqSYZope`;f>bm zR3OQ5f}B{~uV2{Re$(vW2t}}$m(RPi&eX;g5B>R>+lMZJvIsUcHIzph12|Jw^^!SV z{8HaC_K7`q|U5{I@w-st!^;eLjZ;=&%knh7B~f$(7$2)V}~>(xQ|V5gQ9 z^pzw=mq2_`C{Qie$Pwrs8#X2W7&OJ_K>#|C=V~J5x{Vc`o%jD1?2^qWU6{QfQ$?r| zgri|9))ItTNoEWDb;-GGBT3H#LV(=`2~$UqPV$va|CJRzjw^VRybQV+aK|?M>8Xmr zH*P5>Y9FSb#geUlBSZoAn>`0{82W0JYRMGnQJwWyk~&UbZ`r5>P^ScB`F%5<;1lEH zs{{2`>O;*DowuNT?OYuPZi^pRPiXd=s(QTMap(3qYvQ5gLQ8aS#aUA>tW|#%2kK>R zMLTtMSy|bG=B=!BpufPi-+v9EYu+hL|2KC{uTg2BUosUxY}#suY^h*xDJ{;0VM(kC zGH_&q20q2;H*(b-HwdlmO>rG1;b2v8Rclo~@Y>>;VTm~-1bCX9$;Qp0;GS!Yp(sV^ zxW(?cA*66W;|U8s*vP7sN)JbzTuNaH8_qI|_yy?Wf4@)-yXa73&nXW34-3afiCzTg z%dM|I9nA7y?{Btp*lXr?Z_ig^^g&4Ua(Mx{n=t$vsO63^(Q6Lvn%~KtH)iaKJ;CME zR;-`^XSyywl_y4jr5u5|2L6w>uU4%U*dDWuhTgK}KD%pSU!hSJ5D;)N8OE9=ASig1 z@byM|vQD`uKnD4cX=i_@S3OorGEb)6$AW!wt%-Iy=pUCqlInLFX0q+Up#mV=DP^92bbYFXk zi?>Oe;D=j*m*CJx&rj3cnfhkG~#xfX>_TSU!Qv5Y# za?CxVx|!LADCgiz@QCAwnPD=*V*zdAFtm4^p(_@;{jM|y?+E;U>Cg0^WI6tL9V971 z+CO99Sw6V~y4ROGPFF%Jmyb`uZYl_5HP|huz#|0h@>_EF5qRatLmLbPb$7ndgE<4F zKj^cwiZWg14-XG7x4w=+h0dnld9U1G42s<)R(fsbMsQwT&2-+~oQxTQmeKz4A!!YV zN&1GNbiDUU(HhCN{-FO0P_2LqvHhy!C`y{q;dq#pfPlczX#x(eVC=2W)w?gk61&8r z>BdmtO@ssU<^xY^QI>}lc<6)lK5eC?CMG7{-rib&!S_yHdVM|s5@&Agvw0eeJ)UFp zBKIIot=rLi>6TTB+}qrc*yt&@xA=RcUu1YSYUie$z1`dd(nkljn8tl$JNH&zYx%zU z&j*wNRiUg60k+^)P-9#dY#QMafM=;ci>ys7!EwQ5X<9|C{n ze9iKGqZd$@|Ge)-4&28|)ysmb?Nizge;{ATT<7p7treB zJMh+}j=!a4q;Pkj=GdC~1O=_20}ppTb~1k92)fsa`u&b;+YJ2u=O(*AJw+tLRTr?l zgQM*G$u!4NkG{e;Vr1Xjt(#`c^yr1AYV9-$0vVudiH1Y$CQp@#M}F*M_3YG z+bxfWIm6!zW)9pHv2n(eFw@JgL;SN#t&$&ixu6XGKxwXsc(2_OA@_SL7Saq}E**TLOH_-oNCxM-jOjD0rSomgu+K$HO<|sVZ>o*ggn>OD^;+so1?Z1{D-%TGF8<72IuLaB%6>aJ7WTaJn?TLGc(>)yy$$@ zH(rznKH)QjKO+CYFvU5h8fl=G??+Gss0J;A$_I>>Zq~0}@f{K( ziDug1@n3?N?cT3U6Bo>?Iy#vg&88f2xVrtWQBzT;VxFTvNtjZoyaSDIwm-%82DXlm;G zSkcUqJ}Sw;G|}RAv`+F?_z37RN7CLOI-Q?y=RSOGf8UQY%kxaL0v(1YzhLLJL0#+~ z%WT=WW*&I48vJ``8S0Assckzh|LAd^x31hq z+d5aa{}TjlD94E8*C`Mw4@vOz*TW?rfIJi)v1wcyfP#lVxQ)N$Fi2Zkn)`mtApD!YK+a*wYKraP3YwG(qyRO)W?L#O?db97^BO(_wE{2rv5rrG5oKbWXX{Ij&vXd8(n5_;!r27vYRQD<;1DaZK2Tp%U9X8h}OV zk)We$bE6OkAh`dy?Em3kPy6b`GWWDf8kA%-*1Zqf?BBg*zY1V^~V*i?Gk`Y^6FlH>cd?-R04P_vlrXl=?aurb@5E~kz>vufmj z>e}_5w3*k+7nc<)GmJzl%0&wiZ-rFo%ixI%rLwR}s`n9f*?ZmKIXGg?=}V7U#;C{z zc9pC*S@FvA!3#&07*rAj%EaSU8~OJhrwu+Drt2@98Ye(iChO#TuLNdH*3GYRCjMCV zSLjz+P8M=bir%RL8_cU4dp=sSzDY!oG-ytQE5~8{$C)~60UWL0h#g=FP^XTh( z2}v$IDTQFW<%V!pX0b1fDW|Go1jR9=8M5gKgl@it;(C(ulHYpb%o(fxdmg+iuWvJ7 z_Y_#!&`-{qE6#P4R?tlT&r27$QgLP!5$A{AN)k4Njr~5HEf z7Y^COE=b-U$H^5GWZU3|%IFlhk(V#ox|aA|*iDer-OJM`g`k<~{|)g+)KNZ5#3}ch zd0cSsg3axl8b6OT&hSySdV~}|#^Zrc%-0jrq3piY?UW@({ zo2A%dPU;VF({npv`}=>CIKx1waQZo~$ zcGrbTwK&PJC)RM_26+`fMKMB8571xF_!Al_g_>SkYH!5)agUKcf)IyV_P>ZnT^wx4 z7{UR<;9LWoDQVPK*!G`>Vo`O#lo3rJf5dF9&k{}7Z&lj(FaG1lxoJ+STM}!Or3b4d zQq-uffu7VEEhS5~og1_VP&zsp56rXC1dMtN2-9B(f`DrDZ~mG#Gt4XYTYjm7(ZM5f zlC@*dxD~quB7NVFJ|*RJv@<~^CfjDxY#joLtr8XAX88a7p-7=%i#$S}rbACj8~6 znx;@tT$ojcue=~Rg^wBHjB`uxgn3A(XZ(|X@nrMVHBf~mt-OZ|{d*T_tO~a!3ehy^ z&@-%1D_GqvXFqNCP}9)`)Ah4K2B1y=O1bpPs$#?IMUgotb;2ydcw?b2K8qsp<7sRK zvRFW=Xma+>A@E%VzrZamn00$~!C2&4o`ydE%?~x{e@|p$LvHRQ8YhP`KonDnyxQL0 z2E(|1sFW=84FND(+kj)e@cy6`h;L)2DN0uU+Q(HJfIs<3Yx0u9872p$KGS3zc zMRq|SjUOA*YSZPfPr*@yRY(gacTnUzmTcd;$dO7g5!MK%wUMu)vnt5xBo(mXpt&Bk zJT+3QauD`n=CxkH{5bn#~&4jV+37Z+ChEG6EtB;*`Hhdvk)GWWcTGWv-an1X` zA7WM3g}D)@)T2mCY9~$LhM8ijZq{(TZ59h4VcoX@7jKBYS8vZVd+~)DC7f$uRk2Rz zISt;FuKr9M=9XXpi6(W1z;hT*?|99BFo=_W<+N2i^V4vD#OsuM3vF_$TQ{`-|2+;@ z$c#tddxy79&|hVanp>_zgz+xuz4`?}B!^A!o9dY5A%annk=CEjwUUB* zFTx$t24#o`^Vj*5>QJ~#P}qZ(q;;{S1NhAG#^Ov=9p>rQQ`ErXy=bmLx@UnmkSW)y z_K#v6ppL?%rbl0}=8t3D>a)Bfez?#xUs5;`yjr6Sj>u>G28y{{c?yvPXvPJ;az@kq zEDvJinbM$j7Dc`&>0|T>gou#ClItXV%1zwIjXKV+j&JkDd552aALd2iIN0yVi#h~+;I|FtM1g);Z3h?*=^&%xG2WEf=z)j4&sk8A5Buk$xezB z$sJhQrREOq4f8zp)-d!mBZW}}Ok zKMde1Y#M@@8l-T<7aRH3Pife8y$&?u4bJW;B$KyW6uz%kKqs5LFL^;|9*ur7<=n`F39374yRu;N`f$4%NX})TSdF@l% zpdmzPZm~gS(d3R*yx{gBc^@4L|BmO9$vg9up8Sq4+wP z5ZI7zhka@m77$$ zR{40N9qM4?G?vdob4bP)XfPzGcBVsS+F996k_gg~nrwFavWw*ZE!J{vY3ZsJ91%-a zIfE=MjsGgK`^rRsk@vu6{JKA3{d-G=l&h_BT4DD^UNe)(iXKF@TUlNGWjN#Sr;RM8 zDmF3w-6O>CxPx<>BYtznCv>iK|8wf&+61;Z@}ek4Yt>hda^?PVnKs^xKBck`LBBFpHof z*a5)8`|uIz4qUk07@W?(?(HaooJ7RQW|zQt16B1RlIxMpAz%g)4$k)w)U_Hm`~m_O zC2zgiGnH8ruIZc;NSB&Tt)HFL~j@se`S^jvz?rm z;nyAX=n{gN!ILp$zJ)u(mrs8OSykwiV^YLYG$>+?rp*Jzlw_to<2+Jhy`aoYd`RdG zV7y1+`5I*mb!6}fQ)EdFZ>)mff&UGT-OZo6=U?QQV|g&fy7+<@SIm<23G;D!4>ywy zK`iMTH9GkJ5Wicj;b8tr4r`JV%#<+};jgJc9$}X3u?D69W|k$PUPoz?ua|4QaV*t+ z5J4T!Ocnuv-G#k|3M9l^A%4n&k537VIx3Koi^(IK{Sg#z*Up5ZCwH8}```1V23GgJ zTg+(4bdN;@@Wv^!fS)_K9`egO#N3qHJQMmOX9L|(_2ObCK5A3tT=ND>xU zTB;Rm5aujRL>MHK1?tS9bboXqKgvFNFawM-mrc@L{Xwag>6EW?Nf6=$N!HGJ>Gq{_ z`UeohiJtJf;j$IUyHf||p!>{lMFOo*T94sBRH&3r{#+-JvAw*6zL?yq%$(#O!Co=A z0WO+X>7xqq(qR?D`$+8H*j_>cG{`Ae|0dSYXV_k#VdV2-r?t9uLtiGaI*B~CGAN(kHYWag&;XQR33h>3rW zW13KyIx-)G$L7S8@cr1Ee*g8$X^=9(pUb8pXff5X)#K;-UPc^sHW3|t=M6U1qlGXP zJABET$ZF6+Y>U*{il+~5T^6Tz<6Yp*{X(9BF<})p7hjy5VU1~+&B8@in!$#J+-d4BM_sS9RC1bJh^Pe7a{)qvCO80= zS}Fo~^=B|jLpVm>$AofglxrBna?|Lq9+};$g#q;3ci&j!y^W=wngH=lc z? zy->r+#>?sK{2J9r)l@+Zk1H(&l_pWlEyftCI{CRk6$ntiEhEu+B}gDuFzSc835%hc z3_uKXDHct}t}+ke21(ZIjGEU1$b6~A`S$i!%hZY^$U>afoh4ze$~b^yq!|54rds6; znEmLKO&fWb)W0iH13O63WIQvf2*qwlTHNat+?*u0@GGk{^M!wawyo~p=!RcJQWa$d zC{o}Afen>Ck+4eukWx8fMFykR48T4Nd5mBHvM{4oua6$X@|$FqcCaV`uA0QV8fe~5g5 z!3Y6Xgrg6Ep!Af4JP)?#l`xP(vW5F=1bDPpAO*bu`1d57ag#2hpK<=q_!IGXm#``W zv{l-UUa%Kv&2Y4(q+j_u<=f;U&Fdmds@R|R=6>If(bfAMgdr(HA~bu00G*&ViA+>@ zGIkQ)&uD;U{I!pl#))+#`Nc||C5h6G_`44Tn{=d@d$@I!yD$WMlN|FiOUzGGOg+kv zP>=9+P?4b&!748lpZ`10u2rF{@?w2ct`QO3Ht_tt7iL7)FP0cGRC*kPQ6`lAZvkQx#qBa@mJCOXTTBsS@3ftCELgqFW$SuXuF+dFZ@j(Yx+0RQ z_;=aUhaN6bt6fwEaQLQK1gSAe7QhU{r2P%nLC+CJpvCR=xHtB5Pb-aP9w(r+@sep$Bk#_Uvxd*~x~VwGpJ~BI`ID z6}()rFOx^6k-;w*YAGjzIAVQ zc%3omKm(De61e$g$|Jvf4TgLe!b{ftTmLmq>^QZEik*&20k{PaOQ&rIURy$777j!% z6&wM*LXd)!4M3K4EkMx5PBPeVN~gIO8hXYF&|ZY2OH zV<+=_{5JeGaa(coT_!!O;#$J{I9(yVnIx}zQc${3k6e;<@wh<_9i6}+tCOpqE9a>G zRbb{oBr4YIptW$ZpGoyfxoke0wLid@dWVR=$fI3ZIDjl&2eM`}4SoL(g4I0+W0i_$ z_IH*qnnbsi<6*abX)6Yp3C{f$Sc9-cbW~YX=Om8)cTi(h;w0&8Gg6I|5{m!UOtF|H znk3sE;Wd#TbDCaQ+kQMvs`Zp(Vq$Xe+yk>5criGK1V%E5nKM9G8|hu4BS_`q?U&tG zo{07G>5kJQNT-m~0Izbjw&sI8@IH57VpBeYeBf9C1O5GBs+G=fHjwKw8^VYsBrng2kIa61leKP|hCuUbX!_MNawyjJY$b$-8XD?j&j9A%fEg3 z7G!IwjM8D}FU=6VN6*B=@OxNQ^mUml_;Wc~#>Vx5Rs^Xsr!y88Oxds~n^2qA4 zN&{-RM6A~9m$)&|a}{dI zoIAwt^m8q*ouLbV<{D4l*eH6Ua+Y{N-+hS;*Zk8@?Xtec_2fkavnW~5t+Rw9MSeW{>|ON{oMgL3vdNkZC5Z1o`|1scrsE0 zyQ!ysL=ZaPpvL|L;=dtK!;!nBN*D-u{hKRfr5HfAp(X%oKJ^391PBjWaMVKup;f18 z;J*1VI0dktUGrvAM~7(J`UU!ccBQzKI&yYa3ygWc{XM=ER$>~U4yg?Ld1yh?iibvf zpg+l{vt0519gR56GkN0aA=@8^b+9JN0jRkx)1NHRQECQ2M0iIUK8U zUsU{^75MfGJyGrmACCOBkR{tDyX(5p0L~5Qg|rs0=tJae5i%m(NXE|r)ps$6&Q#@&V!sL@an zTTzHVXNa31Wcp{SqRfnQ9XXKjE>C!R9h>!vCK2k1k4nxmN~hU9bQpdSbt4&8a$V6) z0@ki`Uj_oByH;EUvnxAzFJo-${$a+OzH;*iut|VmiXnLXIP255r+ImK=#zWb9UKvS zFCex;cvkZ9Dkchds8azO0(_dR3B%F|fc3OEBSDJ+p4It+T_-MQQ&)q{#r(FVKe7K| zCY(FOTopmO<_V1FS1Vrc;+dVCbJE97gq=d*8~RibubAlQnpw7M%O~pU*n||^s_N>X z0oZa!F@E>JL#_@8#LhdZ5Tc8}!-!@Vg|ss%O|H)8uGq^;GHh6xJe)X$n!}BwU=Y!x zu(yD71E;x)`rjV`a+TI(_hCb6i8G#++1Mbe7D1QD&VJp7^LIct8~Z-3P~NygDV_hh zZo_xJQ81uCZdkC@1*7p{)~}Ju7(WHo3W z+BPS^uLgKS4HL{MI<=q;0gF@_=5G!eF0J@Z4lC!$FAPQb`7u)*ep~_@bhS<&eJ)v{ zKpLS3PNZD{PPjt9_0y)pLc{s2Nz6kf1o47w>^OV=`yQ1`vvP)Ek%$i4A0@>$Hih{J zVTAeYY5HgnIypLOz!M{k7ls`-^B*hQ0cBO$x-Tfejow76iKy)z&rMM-LX~13`Bb7N ziI((}Oszd2XYweXx@S6u$yjm4TXhiAUV7HeN@O`gg+0;NzTdrLi&>snD{Y+BbD1b? z3Dq{EKhSV2>}_lM2lNYdNyyzLUs`1E~WZOW|C21@i%2YWuD;^cQzp306ZE77l5c=TD1YxUz`^)}RrXuP~g zYDd+Q5O-5kQzIjAp2)Ozjx8MJl{R~#hX7g(36aXvI8R@#kkP4U`vC9+W0YnR3Bqww z>`+B8XBkzd!Mqm*$9*2ovYdlz3eZ;dnKOlg_>oN&{wqKnwOubAi2j>30mlSVRZD(f zuYsNO6nx!nc_sHBV5R%gUVbEn$1$V2g~n>252DG3{|1yJ=x~!Z)z~pehX8P44tjBr zL$4lo+s%<=lg_me!qD0p0YF=gdjTgmIB8__SGn#7XfU$HLUYQQHj})ohJzFb`WGXU zo0oS>WGtZmBNQ_U*V%BKvMUe$+beP(%Y9``wCz7}Q1vG%L zN&f&hp#!Be#tU!Vd@7wkW?-n7QnHfX$ibM%#0n11P1Ngv1JYLatoDk=1}OVk|1P2x zxDMys=m)evWCn>um-c{NZrIc}?lU-vgQ7qi6;6V3Zd>FY@_t`3=Wx36bG<=jrB*ds zkb0qI?jZwSFF4Yb&Vkt`;u@M}T=FEzHogqMg5O-t2Ihswu-{T)rroUfxS4#uT@H)VA@$EbA{?VfQ+;~I(8n9lYbO>Hxks1u4m$*nP@&dE8V)x*Ep^3Wc#eKd`SB6Ppb=S*UC||dm7Qt{DgJI6g;l_a zf-6%wMhJhT0{u40d$jhd4@ z`Ec@ng0SY1s49R;bx`R7zKfU|F7x}ejbgsA86q>mSKeZ&>V-cH}S zyp61LmJ|Lz79c8$ECSBq*={hl`KgIgU3~@6@J@mvSX=y`K%vw74QF@c!OPR)h>nV4 zFa~ohw094DFgIifi!Yanm%ssK1?{mY%6A6EHJ9w17++G})bGMI*hZgm{C#hP!zbl1 z*uzyTXL2xo7YAR5<4IHnnrQ=GmFzckFygxgG#I3c5${M1y2Q}d3EQi;1*+qe?PvTn zgF8qhZZDxIpE@Fs-__neHu%+8>+~P1fXPVWT*cYfvs|GsdlSS%G07?WMDR_m>ve*S zjjS*%oSf7M(d$$nnI#oEPWE98K(D&Ca8U;dG1Ow8=CXlwtgf!sl>;fs)ZoCn+OomqSg_7^tP~HN`hj zVH7R$Fha9QRI$@3*O++C&BKF6FG(0^&0l6ob&4Jz2q}k=3xjf?hXhAK(#*@Ifn(NS zv(eb~Db|cK?irOG9XjftH)F|X;P98+B^XJOQw};P6cFQtQkoYVtTnF* z#{w<=KM6Gvb^V8)Z^Vx)>c%|(ovMlf#WzP zbSGUCaxCt%R8if(TZ&ljSvD|g#@8X_pklyA(qSRg5yvrp1{H9RkR)H`O7|Tp)%p*LEKTu{Q z-EcmMiJs!02fv$8)=*Cr7nl{egZ=l~TKOt#-$wK=9{)1!!29eMTBhMKd2GJSq_@~< z&ayq#DPR0z2(%8@Du~tdgKb}gY zYOs@aSt<(S;~x;u4Vm)1e#xxX_sro81_4-msT`u*c%i{EEwpFsPXq=0V%JS3&^49; z&mZL(%G)Ui8g|}FjWV`Wv&h5|GYjB+>68aQSIEUT$;JutXO;)f-S^E;=-q+Oeg+D7 zxgGUWJdy9|a-X+ev}8ieTJZV9wCXH~POp9l9Ykt;$i74?Lf@w_e5EWb_tKel#DPX> za-1Yqp+NL{ZfrnzVBKke@`L!e$+12mI+q%2dN~@^l4Vh5AyP2^Ir~k`+<&=j^*Vb% zG1xRNgmx(#hWu^tJpHW#WHL~BJ>@dIHiDTfFl zX}fP^l%zOuo^`{P>i9R`7%VI-hAeQ9C4+$(Gi{WG4m})o)gx;whaRoTPYvh)we{Wc zRR7`IwqqYM4vuk%Ok*X3@M7I@Z};Q2|)v?yFtH&sAf}GB=vs+1mmOrV+du zr}%Dp{VumBHN2|z6fWh*Icnlvvv!x<(wIA5LaM#CHplu3j~TB=l)7f>g>&1F1m?YC zxtIm=;{QM(6RI|8%yg=0H4vqHrbs-dR$!2iAo}`Ecx1WQkPbqm*7Io1 ztkU@n-wRo^`Y4`BxodJ^eQ(3G`o*p_RnEH`phO?%+?NJ1E+c zd&F5$@qTtTYEeFc!y$h1biNNVL?vCUTH;faxr++ty?Y;YxBSGtd*GQ03gDfWaGR}tBS>xY(_xX1% z;-8nb{=E9N`TXVAI-2SG%KMTW2}h}Xy_AZ?mCCF%FO78>R9#I>tFAtWY#Mb}We8G} zl73Nt3E2K0N0#voUw}KabJN$ip`(Lm&}7~Fyxytl5d+{ej*rwJfpqXSlWd6P+^BAe z(KXI=kl2=UGj~LcWLJI<4vFui8CAlOOS=bVCJZ?kO*L4=_ZZkA=Rs5O>7W|E3wYjq zcP;7Og^{>qCp3#cuZR_pH7!+j?hO+_J%rYO!MOsbx_PliU**Q4U+kwY?B1vph`o6% z?zqg@_xJB#UW5VC1ux};dS+5#C4Nf2ATKuRNJfumd+@%IVY-aZh0^y!b@4Lo9(W-p zo8{<=@Q-vGky%!0Psph3+4H6I)=sBshkGvu@Qp98pue1A+#Ui=*M z`O)HfZ=&h~@1+}Jtdmr*yc{evjEMh|IfgC9fjZ&4RjiB3c>~+?aV0H#Wz}UpZ>HGS zZCuE4BJo>PKW28%a!6}(Bv2T%ldAw03W@j>Hoew%0`Uq7jbrb|^Xj-;T+OpJK?2hs;x6|A@Ip%|`%*ZHqob}28y+Zc#9)lz~g61DS3KlB#OedWM3C$zS- zTvXl3A9Q-iXX|Fl#pYAk>`qDHP-N6?@SXWjLKn;pNN)r#M6f}(K;DE|y*CuhB{VTO8IHibz2r3vpklu)5rYhLIWDmKbH6(`6f@Oez9KIr$YOb(_k@uvRe(zH zk{rmYl*1sD&xJ%&@G4&-uN28;<+^=DQFFQcC5V_ME|=tVk$5oApS*2H;Kw@^2^B#A^k&tkeFq4F z3c@A`ojiyxGf-jm9-g$fw*$(-O=0xH%4=MlI1ZpEfRKE{I3o*$-ptKqZUN1}p3DF( zm~`q4cX2jaJ2ia0!!;Y3@BYeym@lq$ z5PzIDD}fdEIw4iY8}gDQViSzc|%KJg)BjS*2o|+9;+_ z%aBb5=^`4|tA?Sb^|GNc8j7_=8Q*qVE~wHks|QJXN(!{5>mQulGZDuWC+iB9eaX7| z+%&vE$g=Txn1skAFj9zfr%JVhoP%?zrbji^vDHePRGx-T{9V3uW2Fp((LwG6E!mY6 z5`%mzaZ1W;oGCEg!c1VZcFl@dbC=42oE96|cNj$UGr~6danuemexQFX)UkeExI-)V z6rE>Vby9qMbYV0rWpAQ^oVM}hGnb*y^hW8Cj*7T_wIb(uGDr%=9~;WY#S&%nN4Bv3 z=$)HG{bbOvQZobs7PES-nCRnSVX%Fn=d;=O{56-T*_#_~N2II^WI=zmy4Xm}cb4Ve z*9qKH4T-Ls-FzjD5oBdIUsr8#X+G_fczN{Es6mHWU9E?A@7YOCZj8md4^C{u zo(A8Zpv@d#gNXl*nfNWaOrksMYdQ{9Wp5jikG;~&qosSCP_{I@zQCp!b94^H6>%(- z8_~1%TS=t%=v8cl_7i;|!VY-rPQ}l{(uiCvUJIz+Dy$8=pK!7DAr%?OmetA%a0oxT zoV!Y6noDl>-z>E!C_&aISgic=<0nXCCVHZgxdPf16`+y$v9(<{EN;kLVk8`X!N9-A z%x6H5NUw0+9uoBFIixvCE%vS3NKlq_?<%?a1er-+u#taxEH45*pwh};_~z8&^D({8 z?pRH#>*{4w^KkHd%%F+D1pRPbaA36%wZ!-_oU?||tNvV+@-x!P>&$(2wdT)E3_cSp z=(Ss2)CeD;z{Z{nT%yU0&ebWAdqVH02mDjcTdx?Mc%TBfXH(T_Qp|LYS(Dfei4e*( zP1GWPYE~;j)%O{p5B$0D{mwHr9%(}YrKUZ3i>)Q>{J8yIU1Fi{61314LMlKxiIP|3 zq3qb_okpKF*-*JwJhc(1wBXh_(f$e0zi;xfeAsMWAG#Js?NrD@Lk7P;`cNxONS#p= zWIuz?8-ieCip-5YcD+gJed-j}!}eEvi#IAVyVUVQ)_=^rmmf90xPIF3`Q|ZVNb*;_ z#tAfxo9q+Q>YZw06u7Z9Q!!oOP-v*WnxWTFZMAY*mYjFFw`%;)DRsgpZjRUT&^3^i zx7IbA{YuR3O*&h1grE{}9or`6@vyp~$@A&X#7-TRUE+O_MX&t%oTz#>5;~r0sDommsvBwn^)Da<@cwom_y?Yf$?bUdGINa_`cG{#{W6k(^Daq@1 zFH_QlCXcTfYA2A%n3nDbu+Sv?T1TaJzN1rKSf1vmqnP;|ym`_6CoC*s$@PiKtIx^O zVpRqWnHkl%;c*D+31!>GmrS|3kgJvZSpzo-7;b7w&aJW@{C%~e21%Feon=Oex^@P# z@5*s8Uxm6iT?L3WC<-q=q}d|WmI7L-0{&pwHRC3!f`q_0;S3!sfbSS{1W|nYxlIuh zhdrokjczO&gS(Phwrs!^`MxW$=>+=>Sw})NU!C55wModuDKTSIt7-C2>Bc?hV17}9^Ms#!>M?6ITZv=m?e?lD1Lt6!EjzE%sq0Bq`v z`u%}FNCHkzyKi|I_NEK)GJWxp<;|Vl0x}R$gq~jU{^ZkDtZ2Hfpd!Gl3^lAx9za>D zSXsi7hR5>*UD(fUN)b{ZQ5G>Z4dY$>b1_Yh)V_?}K2^Y0FlXoYaUi$6;v*g48G2zEjJ&ha ztNQ`izenvI4ns^+Sh^kqQvieP$xfv@mAZnu`gqRZjq6pdSwAhIa%A`YFIamw=mENe zZHIQLP^`i9)#uX+<6ApBgqD1dgxVAQD`QTyOi)J1REVPb;#y~javygpJMbiyGrxQ+ z=AzG4dKve^m4mvxTOxeqbLYlIs@%jb%FORE@1(C&Zu?^G3k)96f1`olOHj)op)NFc z_Y^&$>in{6u5Q?Sh>}R;R-`@AKrv^Qx}ycjxTzk1mi&FhoD4!r>59ZRs;Cf^4bS7; zS*|>UO#ap9lV1g+iQbAHNi=5t1m4etF*N%n*WwDb=B6b?Q#hZ#Z)viCHdv{?Pyk74 zl%vIdmkRVCuz;Y$vooak3IwcMk53bdETCk=kl)6edAjjVG zrC3u1g-z0Yz|SpF6>%HJP!7x<290>X^?Pku^`jj{ae$_H#{`Ky3T=W~DdoK0 zRBsishK^U>vWj()uBExQ2LN?oDBNnsLuWM8l|e|6Om-3j4EH++d?2T);4;157z9Bl9a|M{MYBT$lo?BB=t z@p$I5C5k4tS3W3ao_6Z>AROwYipU&m!xQ6Y%%LWO$#I1U@kWoFfHAL5+3mIWSj2`xja2s!S7{5Jo4AAbBH_Ukj#X@592|3xxmx`epwa z!|ug}vS0N9n+N2osl;Zp#>;PQqD}{$`!@Th#)GGd%ctES#c+sp%|?9=zd*MO)E>~= z8ZbvNEG_ninOtNp4t*{!B{efUtGR!6ke`B24@rhFg2c^$1xJaX$xi@-N}pERl2C2= zU3EdNOa6Imkp&eMM0-hvE}_J>LI+_tLI>h0h2YdRrKrF)lMmlyh}WY%r)^X}AMPCg z>_$Cj^OA}Pcd?}q*_bG6+yrRE-U^%(6Hi5I$u8blkuV@5f6g;czfL=aO>ugN*AdAt zSh}c=Dy%{#tlKOrqSsHa-13S#jGX*NYR+hp0aSIA7=i?v3d1;iN)|n@&u|(0Vaa|( zZ*zBk3)N~W*xn>>Y^#Q_oh?Wtd3?mBpOaSVx=t5*A3O-9az57Bl3s9w6&q>W8LoB+ zS_3PO5l);qm!5ejFYi`x@geJwpY`}Y(ANGh*-_-f=iV4Z^;x@2uk(|xz(;%xOiekt z_nyru`T+Zqd3DB2NwL2Sq;h)fYptn6DtQ3(KbpG6P)mUk;#culs+^kVxl`T1cuqb6 zX)W9X?;QRVEofH2gPy{M7hiBX8mm(@X%kOuH;)|!lhXX8s403?$S(2cl$k?JVlgS9yar8yapBtu z_Q})ARm?ZE^-okgn@~Iz0xT&f?W_8}LT-D}1`B zm2ZUH3g&Ql$Y8{^g98*4Du^11dqmAwwbi|vgr@sE1ejvPqe!KR0w7`$+2ZOy9c|&4 zs6Gb1BL#gz$gR4)Uy7T{A^UBzw-zt!D}u&_SzU!+!XB=t>n}6}iJ#G-yircUo*sys zzIIbxiOam0jR5YT7h7_%{5Kmp`tN+cjAiiLZgW6ww&~}fmBIJb==~`<+Eye{hCw6C zDBE%a5tTbs$CIRpxre5vDL3t?%ddsI-*Ys*CQhTC>F# z!n5T?B(Fx^(Jp~jCvfHsnf0c^l?P>XTQj~;sJn8)k89D}<_VN%%3~@s_7|_9(aP-c6%}wU;CF)e znDskolxTZ`%aRf+2p+Q>)nJ^v)s|V^g#rN-HyRDy zyI}000>GcPFX5YUL312k`n@$*d>@^L%SS81Mpi)R-dV(-8j!wNKZt(gm2vn} z2Fd;wwWmn0`{79HO!7mL1&3vs;Qf1yUpUe+bV}aVY$;)Ce75+X=w8ehgUHusfR;EF z&fEVGh+Zh>sS{}A6$&ka-u!lJZbd~~HBD#@m>3*UGE)z(`Y_+kHh1QwO1g8&dRA|$ zK@99Z$XX;Ms5Ong3FM3xYO$G7@`^tUqe(;Rktbn_vvdVbO}Rjurk|K_mwZoV8aqTM z_5cWY(E_Qu3R;c4kQVkx*a%DXXODjA>{RAU0YE#wn;3-QD`)Q z-ZNJbOarI}b;Q9V6o)Vh?6w4cy2FK2nsWxlmzV8bNhn1;yW)s^0HM%7`qzBdY1jkp z%=v9&{(M+hzk2G~dCF=Nqi1hcSHyiNWyeoi3w1=a1E?I+n6)eGe~O*(ywdoGIQy1~ zJcj5nKSo^E*Y*+ zK2}h;G~jJDD>?ZkD5N!k@{80r;un$4a|%uC&oAsWe(c<U_O34pDxN-}I&ING39y4womM;pk}L^v1t99km~&+_cpOt}}uqDlw|?IRs-qzL~SW_reU0q$Ap3cOJjdgGH=Taz9>k?U{=_;DoQ~f^|HPFXV48Dssa&RjsY}16b<7=O{mv& zxItseRnv8bfkoNkf&cdv#JVJr!G6}#PxKideMZw0Zb1NL4eRUc3?lR1=qqK$!*wHQ z`tnM9v?2rBD8>9GUeRzoYQ@Xsx4j!PAJcB!=QMiLXJ?C-(ocnd zz9iUZoYrqT;Sf@Dk%}&_sBp~|ik0}d^Xu39IPJ) za(5likc(u;U{jn^s-3zrnj>wC;#0hyahgMZgx3L1?k6d5FhH2l%8W~Q4Dj_82-li= zcX(1Kwy&^r_?z&4r8%;jM1oO+JVq^V4Q@U+mHpJpES|ASQt&Me20frXh1F&%VP@h+ zD%19ON#&5Mbn^d9w#NcW`jP zDdG^5SiS60rx0GUMB!A{+1c5ir3r7eaETFh*K=M3h{NVK|Ee6W2zOe1zAtqdotC_| zACM~0Tj!o?pdsw*Vg zf7Nf8(GkwQ{5y4NQEV?s*7xoxQ(1GZ^J09|3mg0$iwrMGn~RX&OkraSOI;_{Uj{JE zHH~)3ul#lFZt@Uz%y2{&yW#J&T4jHbDT_PR^`ZY$L3-%@$)>YSQ9{11*@6g?D!)_# zi;UO)dn7>}{rZ`7Y!nZ_Yo%TTYwXW5imnp3JL!Q{ZH+9e~ zU$v1?HYJC}exFrWVyk^mVfThRZQl!uGtrGdB~QN?l8-4IJVLjGbf)k84#-;;larV4 z(eGnk{Pf{NCuu3o_Xe~vHwkV~(Lc{DqeR$QS-eUpwt7o2EoMHY^W0K<_$La?%FwN| zT$J3AGaPS84fuk?zW?05R$HB2G@1{u7_uOJvu(`pquB6fTV!v6@LPFVSwo$!Tm$yU zPGJyxQl2y6)C?W^|6n9cnaRUv9uJpnwF#cXxkw=}SJJ`ATZo`c7JdtFRMYl@jwAyX zkzc?zxR*mC~6qsl0p?4$EnOf4{BzOd8eikpGUtRb;db>-4t) zkHn^ACgc5k_hLU#5dLpaRhhS?`etu{_gUAfgc^o>K(~p2I7Qq4J4{Zi$}extkQt*E zeAwM@fFM5h9q@L?Yot+rf}Z65-qGchL*lZGTFUY~+@)4HI6By!F{)+4J(<$ZDe09-xc=fUJW4Fxub##k z;2oYa0_JzRqeaH*!9n8;f#1~RQReDqhe-F~=ZTqVtEiAkTnaVMSZ(`8+N9#ZQ$X@9 zgT*T$e!cW|FdmeU`!j#Eg%1kuHRuStpL|!?Ik-2x3S$h8PBnS_Zf8(Qxn}(`hi7@_ z%%9>!HWn|Q{r7*B$v-fVguY2!rllaQIsn&d2E~6|*jpx@LAwPnFB3oh)SuDi;{+CLAG#wziP8yWCYBJQYgAhKJ`^Un^y|N5>^GM=I4IK^B@ zTPbzPE4qpy)y-wm=Jd4jo@4-`iKaTY)OC?~kz}iFj8>w2i(`t0d&VekFBhqvREW^_ zQ|n}nBiEhW*bo+*BADTgeWgzLLwfGk_dR!!a(iChyL(v96^yTSSvqb{^s6S4ESkRH z3iUp1jaQMtVVJV(IX-=agp)<2+2vF+s-)rJVX@)j^h|MJEmTH$;QhsKo*o*oFMOgS zJo4CqEY&GYVLe#K_2>6NY_wnce7Yg~rDfs}8~624UggBzR|vZnCsLF;WA?@Pxkl|z zyyV?CVgm&be$`h+jg39)5Hg1o+Ma@>Ot1wHrj;)2h?e|1d62h;LO*My54BO?zAXHB z_;lejThv?k|6V7#-J471lqy8G>?Kg?jcmW_e~DbP{@NA>xFeJ ze(oH`os>=#6Tb61S5Y4}F$^%3D=KURGKNc#pMg;OBj};r6KafZdi25ou9DDhuO7S=?E8W#ee_SWdm%EbjFGbH#}=98Jxgk z4n&LZ@493z4c8S4g{B}m8yAt2A&oXlxr8thjs%HZ{^g#LAVwVEn!OrRSiLEmxe+fJ z>=Y5>Fw?&rea#c`Z_?Z4C<;dtnS$5-J%lrs6|%YXrmjKkrqa_W+jW^Spc5_oH(FA` zo~7c!@^&MW)!r$)>#dgXBO?{0Oybnm0WYl^^E6@4&R zUR#M53E?>N&Ch6k*_ZuF*?X(E-yrMh!@umMh;D_W#|m=H`u_yFH=aJ_Vva8L`UTt1 zQzMxZ@d;5+{7;`&wTCUsGG%3Daeal=TfB(aLKi%1v-DH{%X2q`Bhs8(t=g(NBbP=; zM}a{Ryk(b^!AxCt3a2!1y$f|#>&};ezu>yeDJofM26Y@V-=EFCmv>;JP29m*^{eEV_%6cbVN5=r;vWe8VK^g3bBKiAR1de#ymw8Y_Q?No(vg5|GF;>&7P23d`v zziXHN!Ljs=OH8aGhH=u}$;^GwajrycI91r2upkSTWb|kKpabFRhL?&T@RAwXSD@_~ zav(Wi$MXru^y-E{REQdE2j%LssEqAbT zF|477PD#HDi&FjM{e&?2FVMlc*~$@(k@E29$(U9WYR?{-yGbkDxJ@s{!7*%O~IdbKIZ!a;^&1z?MI*E+Ny1-z-K;`$YXOnPq8OY z7!kSvKJ_!%d;aliCwqIf9(W_2S-*~7o1zMJ3p+h_^G%95qfG}vdtKqk_MM)@U+qaT zraNRe&LBu=6Qmwr9Hlr8&p-OuU|>tBc`NKILMR32VTvBG+=AW?1%4AUGs~(}fjtF= z3V}mr>X+5vDrn#w(a0@go|Bf}FvG^i*5qOTCCdAz)JI0EbBW9DN{rlZuXYMu*-vz| zfYxPXfgh#yEGCeREM%+A&)Uqiu|A?3%SqYoCBuwc3GgK8MJK7=p`1zx`G>o(^7ZRT z)AscjKqYjSGS*Qy^!=wD7s;T|-?R-xUAuWx9n4r!V}EHoL6r|6^y+HKT0r7*=I8^9 zjFu4G3kh0AoeR@FJmYq?Lc=MQnXj)^XLLLJvS`I{E73A4#sfiKs46?bAnD z-W^6~-B5aB=fbZe}c}JI0u@_{7>(J@xnX zbr=i$I-e$R-Zfq(anI(W!sd@3KfZrwI>hSL_kBFEk@#)Fxp!^csvX!Rjpy zxZmTvyDB9%96D+){3*DDZiUUfBkpx^rgRxecmvSW2aE#a*;jeXg? zIDbZ_2ZZbmY>}_O@(=mlj4B2#lh8bgy5R>Nq6tgYA;#BY0eRAT_4UhD<=TF{*(P?X zKd81%lEjJB^(r*mn|M^yHpO|%>6b%Xl-^EeIA&4RwMg7rZGL!C(lCQiW)E|?K=wuc zv(zTlEk!VyNN+CeBcrj&a4a@mH8N}3k3v80AKe9hYEgF;J9s4&m& zi_{Uu8}ZbgcFoSq%?*r|=BkeHydG#8B8(;uNu3?%jJ*>zvN4>AO7O8|}WlsaLLWjK>)U+;DJJ1D#& z`IEAGWjfQ$XTl_a=VmXy-QyxF<&8n8H2ofix1&4vJz*YHOMAQ2i<(C}j!Z02bQ4C= zK(#xC{kR%WPBX(?xNQ=H{GxtufaAk&#Ld>-~bGC4-O=M zjTZ@7im{ef?aaDVnLU4$UMECtvPF&guCQ?R9_hK$CE;U_(%+VgaubPlD&~@Wunr?{ zNecAXF(UqUvKC_wMwUNaRq0s^L;@MhEkEuD8G6HJc1uvifL@*>A-_*PXLRC8d)3u5 zuS_g5iY8t56TVT07L<=PdDOEi{_69&LM%=wr|mr#t!Aq#-u&>$e^Tgi&A2*N>NThe z=JB@bJ*S|=8(&n6p-%7VW+~rlo85Zk==!d@Dbxu3BD#dS#kh1&voz0zCu@=p(N1MR zG{b*T5KOek`YrSXDqT`kWWk9&9tOTVwb7=AL2vPt^x=+#h%Ksng-oSJ-ISdFfoIdE z;7yV&T&=j0hIZ}D`=;$u*Lc_Y)qGaMt=wTx&_JF>Cuo5Cxjm9BaasAf2!iC)$9sSO zw5GoWAqVydnwLl~eBpCq(E~8{R(SXq-9+t4sRO8=lB{eOzUv+r4^KzXZ`PnhgZ+=I zE3&saM?3;WGV%T^H}7BZ;k@>zec~lB`1@f{7S>DohCnQzi(odNr~|Lq@cUn0G-=jP zN1cRbF7Ui<+FtTHBDfUFpgBHP#KpxqkLMM{kuP1iO|Cez_v%cuO8x)*tvy@`;8su3 zcKz}DWZI1da!J{VD(j5X@5j7rp?az(6h{l!>~1H(Yob*-bIzk^p{nx0_wEyP==XGr@?(lft=e^OObfept6+jfKEXcEFWLYAy% ztk8x^_?yD``PIVNE#S+6&q--a;W{8xc3kIhLsQe!rl`pOPHkPpt!k?+@*3&=$T=B` z89w&JygM!YPUdOmvze0+0S3!RTpfy~k&zHSU6=>Dxgs$$cC>21!;Hsu+XdaeUH>sD zyqYT(hUT~3PT{llxGT5WxMy+~6@%Z-$k(3h?oGW(>B8!k*L|4ua0PE&K_Y2gRyJb3D#>b3tbNaeOfE%FU^Z+& zC>|Y)*PCa0cdyI+sQs3XkEg5TH}@xFUDZq>H!2O4pnZG2plWm}oY!@R!4O z%~{$q!N~Vl%BEoF;r0Lh^Q`_TFT$((ogW=OxUK`M_xnVNS&=QSPyBa5IP!bL2*uTH zUIdu;=$Gv>EE116U3@3vQngfWcl;LwC*jC|JbqfY_yOzR(W^dGX%gH?=QmctIQG6r)KEzetJUc-;y>;-u3H+a;LGE(R^wF}+;T$c7%T}E zplCA)&Crh{BhF6ZU5R1xsXgD4DFtQ3Eqk-fQK!;$IyJ)|Ah<1A*h$hTf;P|Ev5ka* zjSKud1gQFmKp-{LrUpvztc(pXfE!!3`|N{fW~(!=q%+E_hB+Ydxc1S zV9vexw(1?m>l$fg-fRssD#%XxJ%t@8suUCz6P8h*D6-8!;i3Y@4cd(FX>o|re)^Ek zl$2MRl+V(?gTcHvdM!Y_1k`9|W@a!atne8DCE92kYw}o`UI<#8k$joAW^1WzJ-dHw zRhhOK*GIxmztT_O8Psgane%h}cgSx+%?TCG7v(EG@PxKtgV?Z^=&T=IM*&dr?{s&5 zxRi*pe1uSr@!MwIRbcon|v`9j7qnrYzTa6qlgo zpmufkz^-;Th=--kZ!s`J%0`^-}AyLRMy+AgR$}PD*0gf!t{zQ4n~o6mpAeT zI<}$q*0YE!S)T1ev7VluUL8gt7pl4{N*n2(?F3=_8T+UUNj)uD`+q?`UB+DN%2BcXvXuwV=lQ$>>{!EZyRCX=&-Z0h~rU zv@fDK+Re)vcQA>|)myv!w=y>Gg_thIp=_cKv-rkH8# z513%>AEVns5Q?r<1Iv4*vg&No*vguj9@Ga%r(U_AWGsC^=0E&s3Uu91p zgbqkN9k2ZW5<}R6v3d!m2pR_}%nB>zHSLmg9HU9z+R1~5fWl5{zrKD&IHDNKgvzWw z7?oadsVcZBI&}6rYh)x(&yD;mwlZUVJ=~}aKQ2R5+q+N-{6B+9e3nl-QZ=&-qelM(K42m zy2cg)JP`J$bn2OFrg9niX1=(%_@b>%{PR6o1STBa-W>9&t$NEqE<*m1QQlhDbg)^9 z<2;NfN`--ry_NaeC5?B`QGNOlhfQA5nM`mHTVm8Q9P`#xDw--punSZeiZEi4B^%d8 zuf^65VHYg~1`0M3H|H?kVAg2!fuiIgW!g99pdK=bHc+1QRC@Z@(e+1D!Uz|nYKQ=)Vpoyy zP6w9(@B9Eai>rprrL!^!6645IU{Vlik>Ogk6#ccqaD_n^fx-7h>)9B6AV7ET{5&Wc zsW5Nq)JS?pQfPW621jw7p#U?7E3mw8dfnP83k(8Zu4L3L{2eTZhnxG;yu2AdkIlOi z3N`gN5(sEe6Rkiq2x@^+GliYL$$R4mIQTBK{R2fUbX|rol=H|YrU?u=u|6UEGCjM% z*-b+F6+#;FOGw}~Vam?h_|u|wo~EUhm141BfHx+HpQSvR)_3+K96X8rWzBp^h(n|Y zzVzxFZ?uqCPA1q<54wG=)FCHaI6R7QLJ)!nO(-1@giaHZ(B=96Keuo;d@VYl*p{-3 z!n+|bJP%*T`R%LC`jtKjop6734#^0lv(O`##c*CF%t~ixi6V-2vyD4x07`irf>sTh zT03!T0TvlR#oyP~nfLn`sI>M>d2lJDg@nunjL^Wge56GYSHIWpU=g`d1MhTZ3JfnH zb3kCCnmVz#ytS~d{4Kc>=C4s(Z2@_J#c-pu6An+)_9%>}e44O4qsW- zFi~p2E^MP`lUaFFlHS0MKrQ&I${eK8TnT>@*BBnDLnAFY_qRr zYUHE+8RvbZb)I4MU?j`QFM!~oBc`2-Qbf~6Quicl#wVX~lmgRfcPZ81_e@O*;C$PS zh3@VjuzgKjsA}wwb&@L|q9k_i{!!#sHJSnyeB$!xDJ@~YPP$D$Yd~jYao+nb$yXkD zTw|50hY_ncxc_LD2~n3Y_iMCPn|D`Ynu%3>)j3tN_d{_Mj5Uk3{!DUlgdFtet*qv0)G^)L}`+(IF5hCqvK}u=9)egtjAl+ z8#Pwq&{gu4>-$sw@s;?xN1)Q8^BkcESV_{)W-sPw$b3X>W8&X}2rx1+Jsqx<+FMsS zrBcAK7J7|1eRHMkydKP8;T2q36w~Tlw zd~Y26Kyi%7#KUu|VMTKhKmEf1=3wlkVTWyv%!O!o~pHGdF z+viGWu2(vDD$j%_AHu}jc=}&`CR)e;f;e5ABJ-PZI-slgG{cj8I=O$CO)f(B2Qui3#^uYf- z3*f7;MMj@DC;;!ot&c|$U1Xp?)@!Q<@4P`d8?07#Y4W&FZ=2%>Z|EtA4IAk=T1asu z_bp_B2~J$6u#=(+3CU5mBR!>pEDXcWMb$S49X+}4R7n;gRuqfKbJ#sUT-7@nE%0C8S^b=2p gDXfBHqQ4B|20z5GR?C4fo0~{mU0l8}&{6_OE&LNc?GB-sf`5i+6>*)kGBqT-QVgs3Fr zcX&U)uRq>5Jf7#iuj{wReNMwkJh}Ee`@RQib zUG79gyhJB7kD2(5%wNB1&0_ZFkNaXoUM&CbQKi%8n3=AT$*EkKZzFNgC~YAzZ5b^U z5dK(t*wDnp#PuFO6~FNNl(R4X{E1)bxPIVO=|lCeD;vKz$S?nX`}yyv(#!k0lI*mp z5n_&fG#2gZV{}a7jOOj?tmSti#6%PS@5hzQ9NRsgUV0v@KF-T1Nh`xn`#5-@JtCIw z&E~_l4cmzzxmr#B(@*-VtEvnOOuAC+@Mg10M`apW9{11n?(@R08huQUOGMg_;jhM; z2EYFbsM|X>uo&tl$$qQKme})pXvxs`J`tz?T?GTv(q2Xj3kyf-G&NqAN=yC(s%x&{ zjcP)P_O1d6I=KHwx2IHs25x#k$84 zh5dg2u=_c-XZ37WTEj-jrjy_S<`}!O!`Kwlt3FK5UbRJyc53C4d(snHRoNbB2{NDN zy3-ZnZ!usXV6n!LphHG#6z4%~U7B75n(H!%^D0 z<@>IKEYy0@n*0gsIU(x1I+~uVeIes_m;W>}!r3e-Q(mgc(eZGG|Li`O4uY25SM72Z z>In6m2FJLRh#7v10g*cqZA5H77yT@VdQFmb^DM2b!k;p7h7;X5M;HHQV&!iydoMNr za1AL{d8u_;N~O!ne>*!QY8)3tCK=kqvg_X^*{G&lyU1SbuA&$7($NTb#JPCuWk-g0 znx3F3?tpB5DL?bD`_eB0+|AxU*?qPuVrC*rv^ebjCqo}<@(&&Tgm zm1d_k*Xdn9CX{F)_F=p^>U_@w@dO=0(y|1DEwvp_b#hO`PPAOr3eHHCmXWa^#5Q}0 zyr1(CV|DxV!b3_*N_lU*o>1YSYm#oOoun|!P4yf@VHWntzPVKbfpBGEq+`mPB(&7N zIdXp9z0y+uNq=2!t#{ODv@?UhI`|)>BtkcXfT5l$2yG z@#b=Z*xN-v3x$1l?2%QL#jKo*6B8@r&6Erb47Rqm2|6u~(zdSyIk>rtOhgW{+zb!b zFf?RL>=>By!5<|KUYSw!p7RM%S8r;Hpb-@nEwQOnbZozqc;M7tMW5(56J^8hSFiqg z`0(Kik53Yo6*>hbLV|)HKYh|D?9Gg;X`>DC9mlN}o4S?B{4bKtgqA`YwjRhebauK9 zsxCR@q72~<))7^c!I;LU~Xb&7OoK6ir;%z-*0uWXBSHBz?qI}4owzj zp>`3B(>^E3-pgz#9;Sew4Oy2vo^W)W%v8GC+0~UIW+83gbi?Agb5e40z_n|iK7F#S z^0NQh5`$PW(9v<}e;lWqceiWGwURS{Oiu4fKh8{@O^>5=fyq-np>R_^y(QIT9YLbp z(+*T8>8bw9$OksXA9TnDB_fPWo)VK%6j@e2wXF~GQT#GGy0=;K{Q2{glu;dt2iz(x zcQIwN3Si8)_IInTzLQJ#Oc!s$fEdc9l<8aTe^8RRbDv{AFA^*((YAG z?U{*f{hFGZDsi@Ea%P5&g+sMA*@*MGgWG!)CI_<=X69~JyYkyvp zmk0d&?O|$~Tv+&hu+WT-LL+|fQOio#yg^qv&hFvo=cl}nL^X3rJ4WZ`=Bnr9KYbdO zM|H&Y9Q$LVg3q5nBZQrM9@P1-IM>;zx_uB6N*pe-kg>A*q#ehJ3gS{Za&>X^==F7z z!a;f0f!Ud?U{jGK<-LoI;gljtPpw{FJpbU^_$x~*pO$>p2cw;PVR8T z%O>8$<8t1+$ew$1TWej9B7B+97~a&>q;h>-)?`-1+~xm$d37}=CWbnq39tR~g@<({EG+C; zIE9v$Rzk-l{(%gB=FFL0WMK^ZRFnhP40HSR(q&`Rc=HEc71a4&`rhMf`pL0VSJ$6K zR|IVate!1s-k^!+uudEUOhmCv6i>Il+OOkgK>?b`L=!2^6Yb8IUD>&HNWF=}}% ztN7i!cO_}L4qv=)A|ih9p#S>nTzi6my(>LE{b=>&^Us~TahIdD{{5A1L%+TcQBqQ# zcXobi^7N(W*j|-D^J3FCZ{EaeKD={>G4;pdSiNfS)<%1KduuEkc70>(-{O-~SrP{i zCUi~xSsaUxi(42f*_YU1T_3a=v-iEx^#(Quk!3rNfyFKM-T_LI(S#Bn%1Svg@qH?RsVdiNv~v-mOtG!V1O6-1rKP@e@25JGM60W-b@R%f zJ{3_^R6KH|8b>EkWxF|wp)2LksS_vom}9WQK3A@w*wC<}1O z`|8!J@bGX$;rm#u=jVIaX|?U`?Qyaica!l%CybHBzaia6w{uKc*A1f0GrrPn5|4;b zjkatP>Es#Va8pP8e6ueY$5BZ_;>Wv8B}CZlc|fHClfBA*rNAb~Z*$|E==k{fT)I@2 znaLAr@1uCV_2!A1Ynx@(OzA!@v(=3){lU5?UxN%Zk=nkCZzYXblNe4lsndSKw~y+;*; zw*n32rP*%@9KT&vQ*#jsX=~#zR`TLNe&5F56+Q>EC;gSKgWp*A7< z2C+L?s=+Ea={Us~Do1c(5-BvP74E~{Jr9l|1_uWRZES3S5&NH1L** z)4nfw<5-?iPM6^y3+;LU*qrUKq+R#?2)Cl_*;5bS(WU12D`lO^q@Y)5B0}5z!hQIC zeQ>a+=T7uXr|Bsah5X%Yi{rv6`;1gqZ1s|gEG#qg%g3^FQnXwOUUs?KaU!CkQncRz zhjAsbv9b07C8mWaYzL5vfell-UZJkP^t7dIZo9>i+vnma%@JuY%Zbd7oK$U%t5ykI zTN2Vw|2Q%d;OCcbBGMjmUXp#lRjz83Z+rgd&!5<*OodBdaT%yr5Bpqv6wel$nwgm~ za4SfPh&(lZVt{IPrf~4XhYuo2u1MC%eSiw*+HMsT72VU#V~^CouW(uu@Ze?#}r0;|o_Qk{<56)_+APqx*Jr zG`pPZz|W~Jrjh!sbu88yktDCnX?pTrga)JydLG5M>2fs6#uT*dy=CW)<8I^k+1l8Q zK0Q;2LSG;FS6V<|0)>}90q52e7in26FD1ov_n4Y&(tgStJ3F(Ow&i?2Ec!IdqZn3^ zM_CMI(*t1id zjMdEx)8S1mLd|i#)o2$oNZu@IKHk7!m}3~?O0PM;uy86%WixAgG!(ltv;q+~pJ5VX1e>&WHl&sCR5jaWmK z0QT?b2wF?9U6e@DJzXl&!oWmz11H1dOHE}}6?@a&d%FAA*mh7veU@c$o1|WDU+uL& z@A~>q^D^F7xb*PRqn56&@3<=o2?;OSrh1`Bd&NuxUdBgxd0$>%zlQXE*mHEiwURo5 z=s-)>9cTE{T*5hNOavOR^UdOQ|WUlYa zp_jbee_wC!a&Q4vx$2=qd$@T=C|Kr-)5C5@GIjF^l%bygyi^#6L&_9h@IrQu- z;JCZIl8}&d|6_d|i?C}C#TeEsnP=~ZdhStRiEeceO8mRhqx!0<>e1uJoU{}QCYP$M zGYyXC_ND3xsqH{)1fj-9Q@mAkQdo7-m4vOnHR>On9^1J^r_`@XMJ4vD_m#Uxi`t;RyNh% z5zXV-dUWg(@!_V0Q_Fr{v&2^S;^Ml2HITz;MOlk(vqvuf4GdKyx*{!~LAT{iMnY^! ze*RFed04zcjAl8o*3p2~m6@I=`WdX;+}w2cbq0~~wfDQk57^c6Gdg@NAjKhe74V)6Jl;bx?Z{`jM& zCNh#njsfE!FM6 z@s`Dr5tAQ^tqvYM2v~`uw}bidJAClXn>Q7GX1zAnmMbbM@C{aS6pM-%qYk}$hfH!6 zMbJnjsrLc?iG9p5{P^fZA}S{!HY*DYEtmYQ4o3J7s&!p{!o2+M&4t@OW{7iTTAQC*G_$NDErvg zCnX~z!_TiSlqkhc8=+nnyd6|3IsEaX`*3+)ZS4lG=;FnTyM^?S;Q*M(J?nsmkyWu( zXqm1cabPvyb#*1`=8=<=dwhB^=vpai_Uu-Cd^~O&@sIq*FCegox)l|E4|Rlgu6>!g z(v^8e>IlFf)s3a_=g%)+y!ZoXWuLO&owT%r%rTsDuB(VBtQL~aS#%d;udf$dRw@Rr zm7+`?s^7Sql0qr|cPhm;`H(GrjbY%+ru3GX74g^pJI(xSQR#QYp<+_PeMH{Dz~#ES zx?v&4OK<)yzu9;B^5vD46$`OsO@1aSGAt%h3MF&QJrv_|r;`dqOffBNhiuT_*QlW4#fwPID`X_-WJnDBe*gZB6)v4d`+z`<>~I9^MMr}Q z3&iE@?953Ui98-^%g-GE$U{v-^Qq#(xpU_d)6#~q2WW9oa`W=?oX(%$O+^OaY-Tp} z=+Pr2TI6Q_1e`^0Z*M#C`47chMH*-UTr1OiW;D{5G@|IWw6#?NR)r5A92vWq4^}Eb zCer{kj9NOTpo>n@8cjoq)DU@Y$?}!%<7siV~p)3XV*Epwk(*nLH8!-%`8hCAaZ%ATn>xpiz4e9}!a*xNigILwGc^!BpLj4$@i!X7OZr(Sa zn)ShH@DO2PBqpDRlxw%+2;1k*z54OFBz!3P-{4YMc_T8Tw{y9nMrNAcnKrqL5h`7B ziNQIyKXV4#bw(VzvNGMhl-a<5_QuI+3Y?bm(WCnHYQ?5jXU;?nT^!Vk8tqkFKNQBc zbw@WZoRZ=9(o)E7kw@j5tV`Pm^m!j^mux4Oo#h%rFQt0bxwE^w)otainT_Q8_QA5B z>O4;RG*;Q=Y>&(3SX=YU6v*$&y}uChZsB>kPDa$wg}?-{pu=&&Oagw}981TPMr!>p z-@9L6Gq1N#HHa*Db&+_ZhG?xM#4~6$ecxa0ky=HPk7|VG(*1U9rU)2?C8>A<*r!^3_@UA zw;WKD7KlCci00GLXmSdRB@fgHu&G+Vnq+T&JA&H1R%cT}87rYcI3dVPbzO@QKU%ta zyd-k$27k}~rFozgMkU(wEM(bO?!rM@ig3V}GmmR(IH@giNM0dr;W&RM>kKesBZ_M{ zEMRrK*!jyYr<8`P+}I1zN*YDW@pF0Njm-IX4N(V@bmx55(ItX&PSV}si=3U&nV?e#c9dnO zMZ1r}lLk<&o2Tv{gOxQk{eV`;@EKYa>W)=(LYBo8SFfb$X$vKyU0a-=4_uknr;j52 zJHq!>_esCMpI;TgX)0&)wl_YHJgcm8~c(?fvlKH@X2d#h{^|J$*V-AFL{P zSkeFIZ<0k_ntFR9Y-gVM1oEmz?oe`2*5;02+_v@uz*Jt71as!nFipQ$w)#Cp5!+0 zAbfT;*}KlZ&xr%IyEN2zh zqfjCXD!+$)E~Qu0n>_1m4zb2k(y|k#r<3pBMFjVi|NeM>C`!x9vJDCfva_>81Orfh8!SxHodV(pX5zDGCrrm+zYMa&kxLn)=ns>{W6Z{ES)zg-i-+ug%V5ABR3DFKRh%|B2WX3}4j}#-N29x)FIQVrgcCS$X>7t{hMgKO1K0At@r^aW_D9>m(?_`Rc z+Xs^~XW}?y+Pb=ESkIwK91Iz6Aw5d7a9qxTNZ92q4nf1@!6e=5*RM}ZOdwvlSy%*F zsN=bh@UzBd$a^SW{H(w}?sd5|GHjIL2km}|)6xzKx71A?0*P6O;(BICT}qwE{Kgfc z=QI5nm%iMbv20hTtCHrclP{+bkYR|?ysIM!ViSwAz4>SC81Wes6IoF75j1Sc$;ms7 z@cV-NmYVn3T-S%br83_`b=@!*HB||wfKq2*|T*neGjoYQtY>O z5?4yf;>R)p5NfC>U?T0FjC)t3Cmut?fGt3y#lyn`$fS(s6qGHuvfmP@DlpO9^iN7l zmvG?j?548)O`;+$k>cj*nRWMWlbz)K%uK$iQw9d_(3c7b2;k3aeZQM7U6K?@Bfe}5 z9W>8q4&`@T*22ih!NVi&aBB1Fc{evV$6|<~SFT*q-Y@g?>CAs?!i$mR1ZeR5RsD{gWOW(_5>yR9y#%A_99k`)JOZ%1?)^Yj(9ub z3$O%x`jtQku{Vb{WL4q9#K=g1vc<_cf;IX0@uOBO>mD{X8TMPK1oB`aPUmXxG`p%y z;f-Dp3;;bo*Z9V2@;WMmZEbBxp=wPU`G;){4T(C~ z!F&H0t3Q<3fp)&+>?{iXJJPEF1F`mgV}=+`I&54B=P(BJ21 zQ1%Ao__2K4Ba+mKI;W(hbl%BHKT{F!zvo^Y7-1-0_1;sR_%j6HBcp>KRd1=GO93C& z_3oWY(1xF#9RY|B3BwZ2%vW_o*Zo9{+mwOL(XsanW_@bR#U2|9-_bD?Ndl&e(Iolp zK^<{7G4V2XYhxo&n3SrY|MeZpQ3ua&?7Mig@0#_R2*&;%0{HV*8(1vcHOB5I;dsAE z(!D!fPB9bsiaJjoaD*UV4jHPzq;p~!=mD1)Jo7FSdYwjqM!qfW!CXXdAlNQGjmRBf z4LGvwenEEA|V z)HlFF1dpQcw+eu5$aRnhP^(aK5%2(=-U|1TlDB?#9Rfc?70BM@z9sSp(v)$dY))9k?h0^DGBcJ_%xAtxuNZX}wHjuS$O#poSSj#M{S!C^Ar zC;#{B`&Fpq`T6-^B?14x|60eXl)La=v%o~%x4Y1+WMpI{XnpnIfdl7p!#GUzpm3@# zO+f#&tqbt|_j>`1AdhO$21@@9v5Y{nuoy;|?dY+{%Q=Ps6IbUymH~#~TF^_h4GpEJ z=iJA=BC~4pFZZZ!gO}TpEyR@9Mq94sHeA?M;h)^vp}rkPNfsD-`}S>0sFFb&YmlLl zRdV|0S{#m_iTGkHBHb9Wl|-OMm{1L4-rTad8n& zt!&7m`zP8b9%&DFp#mca$b9gl;22c{*SyeWprOb*dhH6X5O0W0JNDp^tuDlN2#SF! zs>;gBf`ViNPS8WK<;RX4!wSbnM+2mwZb8(=)#Gd;Ehz-7<|iiZo{tLJ{56Er9Tge* zF5@s*Uah{qJ_u;vdUHtECPK^3<20iL25xU{{#}_l!u<|t4uqnK$pC~O+`!*&gQ6eT zK~q7qexT^v3HQd(&>vh3NvIu)7_KoVCkOc$)exFv@bXu!z`zY`1I}GP;EvIhMi?iFno*OH zRH@doRN$A5N@-n(20UwsHpI1y0I(d1WX$l8K2OmekidGM#{m0?xaQz4i5N*UhAJa zbqewnaK1SeOfg7m*`NZz$5MlJxzvq}ThexefGQD`%6GMfO|6g@SlSYho@V zkFyeg_MPM;8Fu0wYD`5UWkog2;OIXeD-C9N? zb82$(@45a1ON+g(m2fn)zkU1p_4QXq1ud_{2V8E;FDTsO8@=TYH>9L>%bR}p(!NeM& z69>xv@&$EkF$nn|##9>uyelDb(RFo4D{PBRoA-Gc!Po+FBB1Uy*059!m0%SaAFG8H zuv8k(l=jhBPQv75g=x-#(!G8ceFq(xbWi)VCnG@AjO6{??N=0y}H zK+{i9SWr*=mG|bWElDuQT@kIVa=P>%EqsTEWLUXz?l(>e&_-oh8N{67T7Q`}(;aAQ zCmF5z5UdNNPL!AY(MLuFKxZ#;1t{K7(SdB54bUi!)%qu@@w$&x%%OlUFE5`=7Q=sm zziA*~kj^6vVQx9+=63DZw=*zYFj8%7ZXyadaBlGK5-EV{`{5>osSV5%6z{aOU2e@d zop#Kj@lo2j`vnEvztjwljI6^93Y8%LM>8q`VA6oAubP?~EDTHI&FFoqQE?j@8ldqE z4-YSl)+wo|Y$2s$FP}eu4)vLU1Ck+oLE3ddxWJ^wb?_;$#=Yd^^?(0B?fgJ5gcbt% z0+mxS^GCeumfxQrnTEovfBuvd6;+g%ceb~izr4s3-dKf12ibD`#&JRB6mculGiRn2 z7a5{p*`R*i4&)EagSWv6jgO7}KK%R%nh2H%=>^WofsmQ>8s*fP4~u^4SA+zNxzmTT zrTj`5mD%3i!zo0$y9T-wmQNqi@J6(R&FFvJJv`8n+{R2mVLt%i?HG;;GD9XrUdVzD-OQlM!os3f z6sE~f{D%1O;g?xK>nDU+nsO*RFV6i6&>?Z~^bCgMVuxOojI68MgeXeEu-Dq$Jm09G z_hxjkK1rw~_$LJZGpm>H+S(|3BBF)8$eXrArb!A;!7cmh)iqoMY9vJE`G zB!KUpo}NpcQVUg_uLjjwT^nR}KWb=tq8jQk4cAl9_U6@I9=>9@xT5x<4GRtqF4YRv zw}E9qNhy3H&0I{Lo%Y(F9}x~AMg{j;9gb0n1b&0sJ36W&Ep1ddh#p~&sA)qslG*(k1QZ{+ge=w<&RowChSjYZP4Uga)qCc5(VW{EIF0v-G%Un%v+}xrB^N`xp zy#o~EZKcbUV;9r(+Q5BWhsv67;(F%HAlg+qPJKT=g-##xB*DLdDplcJv=m^T`W_n! zB=pQQkBPC;WYWU!^;64HlAUoq(w_asdQ%N{ZX1UfXtc=u(v8&{++NT%@2w~`XX1CiCe)EHe^{+43`q7sgKfMP+wBH)_##V zn2>Nxyiqh(&vthvk)G1KS~1-y;|$VvGe$uo&BfbhBI@>ItE;PEd0|li!MD?~B8XFL zgLW}6sQyp7Kwc^=EPUnr9cHl4U%ssT{E6a*X6!%vE;5O{{BPVA%&`bwAn3BPvj5x; ztvpEmyLJ(0UWU~I>CPTm)?VS1AT4e==D)=W5fc|j3A`626*W&L(V_0SV z%(QR;+!b1?=H_NJ++5t;aFfoU{Y<`hujuTn-$3hd4P+|%?zr-xA>ro!XVKefr{BJP zi$a0+7l;F4fksyzDXFST0pJ9c21~q&YJNj~9M%eT{)8W&t9Ns8i6-fyuhkbyEU~V3 zkYtyzeGP=Q39r+i`QhCM?d)07ZcELV=&=$WT}(SAZsK{(I=3^la;oJ91IRIL#_oE^jfpC(?$jdFrtyJ@532WqOJnNsjz5bjv}40MU06 zl}v*n*UDcuN0!j!teHglEftu2L!S?z*eD886iheWUgb4ZCERW4Z}_;20H@$LZ?x0N zdynoOmOV9=bZd#=jkPjOeppRRM8M78)y{>s2$u#9<-mZ+nm!s6-mz-+9G8&_K9nxx(^>_d-wu0XZnK&@20%rWXa8)KqDUT=La3NEQB7!0#*^L4!aE}F>D1;p-}$8 z^GIHQRZ|15g1b|+{`$XUNPT865voY;{{BZEG5LeF!4?7yCkpA~#HDnJi;7-bUoFth z<2>R$2^5O1jrM@*fdfxK`Gg#FX$T>H@!|z&#=zh699canx_Q{!fR$-F7r7B^Aub9L zNPJ6A$oNS=Y$)(WI5&oo!=|I7qvLhu%3eu3BFE1}U)rES(^6<4=B=%*ap?e}{>nCi zfy&_bmzJ`@=hXLYw8QwG+!@O1`Y~xPxPZFta3}vnV~S~`T6yIr?U$8pyFD-!81k|) zuHl7x0~9*?Wc}QFQ|;j#+(K@FO4Zi4D*{2(OUGkG<9%E1gqU9%+N5IBuAONRU7WIe z2aP|#{qE30HF=`SsVf<|6g@T15ko>2jYSm|8A)tw7-i^FR#tg0V)DAfEyLZ0 z@g~y*-I5H=<(m~Bccf5_JOkGWybL;-kW*net(9&uyCBQi?m?{3yu6C)lKMY}0VglP zgVquwQv_4pJm!sad>-so3McZ62Evm?*jd+87W8aQRO$Z42Wf3q^mL{dWI2n(z9c5N zW%CIzJ`IiRVUD9e;UeRL*X$WkD}Vf}-?gyLG(&7O_`a44zXQ{2%xI(jy3K&BqCDmZ?C$aXf{ya8j zE6k#3EUItM+{^uz}Y&kGsSr#^mJP%PVUwX3+~J(2e3Lr-fBxnBNAV&hDw z`SdqnXc`T1_Q#aqJPFdTAIQn5ivjRRT4b zKim3S=3!#k%%ax*vE1X6{C_@^qsq#LAFb=+Jt)HMceG#o9=*rug`6uqfyuF3YpxQe z#x|QZm%qnyD(X&rCwTBKZU4z{yDCeS86~ox-P-avB=ravyzBEH>&Ic%q z_Vjep`r>)_W+^x1IWLFAt|^`P^L#X$e=^g&FJE4!-e3EJX5sEqz%Ci;JkLqaDd`5c z6+NeAt`mZ>LzV=&y^lwfm4|AJ3JgdO-uosTdx$?On90~1*oT2DEPBKP; zVZMvqYvKn+PjfYM{EiDUozSX<_&9i$b+OOtxW&M9P1o1!{I6%VmWaOgZ5a)hQ0&`; zT3|=L^~PIGEnPTTaC4}!;R!;HqcC)~~r!oS6ly~N4PBC0h zEL{vwk7|FyF)tyfGNi-$PxK;7miGV^nfcIixi2N7<7u+N^GPvl0r{XF;OZ9;JC z?B>IS?Y!I}lNS=XY|QE}F7#{jGV;1}J=EM?tD`Z%@VxixNrJ4^N+%h8w##h)+$#7) z)VNp3>`O3eC@!Cw@6`${&gL|($x*QGS36x1-h8>wxmf#|zeWG!uhn2S0o;JVwQpDZ zrWD&gn{!L2>{VWKIcG0;GSA4i*01c!f+ZZklczs09^qYTHC_!kn%Gh6HQt2&67|>9 znPu}(sHbcIm(S#OB9W2sy&E^k;2FS72oil{7cucp_+5(Q9r$pGu2JqMht#*#lIgF9 z(!;j*d=6%Mxc;@Ks%oG{nuEiW&)K2<4j(F3KKkyCT?*Su10TE=;$7V2tdN+bYLjYKhwR zmtNyqhPrx>o|P#55hcid4LVrs_pCZ;m(8e-1#lvb1cAY6?LATDrPESeGS<22^e$t| z;?_lv0~pQq&(Pkg()Kiow{|32<0q<*h^5@OI1}dh{cMKWx%h!Pw{J{=xt+Xp#GYpx zO8%62Se}^_C2UeJ#mT1mUDUYsu*X12PTetRL@Mm1#OD#$;6Ss_iFh4}>BKXhO_)W^~jh@>!{Yn!~^&}gf z_g{AZogQa8ZZ9z#k?@f80daQ|CEr)4(;aetr5qOhGhf+g{SJFsJ=JHe^N%ZU-$mz{ zrum6+vi?SjR_a%$IQRIqAIJTzZ>cqOeLcGm*V7Y*0a$H9xBW7jPTlb~{Ry_miQKsU%5{ElT7B3?aQmX} zdkf_v=k%&LVW?~1^dhp=0P!=|F@=EoEdNiR(>iXQ+1+j1{-mk>#zj}N!uX%;oewGbGCe#5vZ4iYe`gRkZnT#Ogp5%I z#dRF#Y!AmAXBN+2x!=<-^?33pT)FPpl5Lrt;_$ME5TY95CK5XnCMKQQ zn7KSGbBr}9T>XHqfW<1M4Xf7u5UJf?7#*1|Iy>@hkdM%6{Wh$=WDJX|FXfnUIMLof z6Bp`af1;exUy}I+Yqb7XlT zTx3I3?KCh=(JQ|a;@pJz07^^pYc?M*aK_mP(&P@gOy;t1O%oSgnjE4CI;&m6vBc%V zl4igIC#1m>*p$~YIvhzNVMHo_WDFw^Zz-J4i5)lQ7roA}7$5f_aD^_#5zg%l1Mq(5 zT{p)>0DfD*Ai^|sX)<_co%ENY)QOsMkM%w5pL^{xDo>c5=5fUb5p6bCi!W@+dfj9RU6miP#^sHGmDQ;M*HBs(`9=R8*M3)Fxn_A2#jubm|DV<8hoY z4jsMpwFSBpxF&e>I~}F_Zx_aPY48wlTv^i3yuO^9AH;T`_c~uUvunMfFveXB15!I2 z)qhyl*)Wjn+eKEsctLRnok{3M6a0;NMu73zF@a+3oH(o|6hcdsvKc{r_enRu%ravym zYGz`Bq^y#~P$?RrJ`N=m%>a0u5)%=(m2qj9f*9ZSe43uu(@tW$HLvIVO**xt)=+@W zpD}%Bb{Y*Y+E&G@KlJj9Fe(6Ea^lC2+rJO>rjF=36ECI|#fM3Ns|dTR%AmC>GDhIs~!?N~eKk%QldgZUcgZT|8&db^KVb$;a57 z4BSk_#Ki3?v}Z}riS6INUrcNse5IF< zk1{;n=H?%>kA%F)_4?1_lP8=HI=0XK2~F zFLI|omTzyDvb2fZ#&<)YFSmMf>9=O8B` zPSZ0j9Au8U(e2zEzlWOq-U~o;xT+`^Sq6@MFky|w`{WIMhvuk+nI4cI6yccvX>pL^ z^e7!3n)6|ffj$4&moq|%yP8=jgu@#NUJCH<^CvW1%$HvRx1Z7duDiRttBXt8kxGTh zpm{1JWE>4A{6O~}Joqs^9eI;DeUY=)g1x6T(juX!BG82m9H zrIi#ELLSC>q&_eN(zc5>2M?JoS{iC1rQaxsHxY%e}d6N zt5RrM2usVv%naNiN8qZ?Gb()g)Q$+x0ReHD0}=+Q8Rnb_^~Q;1AH_@^K@wT~1k?DJ z!}Wv&5<7gOU|6^C%c;PF1oU)u)8Wj&dF(>=X)>)BOU9H*x)_NBcLkupgx(F*nGhu!-Ng2R~VeGf)xQ=2HYxEFWeJ!1hFq*q){Z`!*8@}Fot)@ zE;GA-4%Y>fS1P(#Fxdu{(rL7he`4yn(()`kfxL`h-q8{33Bj+|DoL9}hsjV>8|`zD zr924mzQBzHW9TquC1J>eyA;u_p5uk_eawR6bdNnhACGZpP%6lH`^tbnZSU_GrCZ?+FLHhA z-Mi8-m*M1>n3sLUdFZtRJFZaraKlP@FT)ib$%B{y>J>(66n23D62qx)-*VGa%DWnR zzV#W^PR>m?6Ovu{FkNrgsTG`i?zO*!`zxdzSg*WcfWV6FP*LEiKp1@+t@{Ti4e8nz z7R-eOI^t&MHi??&1q<&gLI7i&H+VxZSPjME!i56U!nl|iV(~a@iI?T&ikH4>Iy*lG zi=34;20_Kx*tpvI8F(W{M~ro$V1m&RK6vl~bXiCnhIFtvdqJRrrfg+lAr4Yb=nYm* z_4>LG>Q?WR~8Rp%#be2-0)O>+v#% zST^Vl15e@ro(c88iHMcf{s%*VATcBY%x7Sb#lN(mO8=#S}>F*S_XzO7+|n-_!BA6*l;bt zZsR?ryJi}v{o1q;oY=Pnf#YxnzHsbd235GQfcXSyu4{o?SO?7K!^r62;en~5_%}2( zG$&7;f{$exx1DeD4O}3e=dg!^W4OlG4VfCx60wuS-1GL@1OtBpW|LcBG}Z{}iVVTn z)6(A!%yGde1gWviT+C0x`;}|c_E5E#+%@vfb)k62zFs`@E2^t?()|_uHpFzK8l-&A6y@v2n0WY4P1ek zud1tLsx8d{+2;p!Y{vmvWPv90u|eiddE%vWqN0WH0%CL(bMZ)>egOd(<%rXMj$Dav z!A@h8PffgRU|;~Lx9Iw1+IGo7;~648{pX1qCqZYSP3=;4IYOvN636gAODb zNm^Y0D~zPUOtkY%6#NdLBN&&Vp2N5f#i+eqM`F(hbHSY#DGe z6&W~-9?WuL$Ps4_>JX@U3`Sm*WQRTZ9u)HAiI6L_`qVyu5bcp@F6Ye@>q8@u^Vb zZAWVNBBbMFte1>kzLYM8kuP zDxPV8QBWi?fQ$(ok|}S0Bcr<|C5sr$vU5Rdr+M+7Kfwi$4gg+@hHMhFsW_`>=brnK zC-q{3`BB(vuugC>7(7ru0@LT+Q%wyT0{dLsPNhoPFA*A8DEaiHk2lWx`6hv%6MW77pS!^YimqN$2zDAq2oD8;p(z3$XI* z7v$A!csuYtHgHFebLwOv32m5JffhY)~95?thcCZBW z06fs3prGLO>({VlVeNLtId{?lY;YKp?)8A#mgcFs*aLYF&Xg|Hcy{hEBs}kkofHOl z0fbU^+DIsZND8w)>ySKQ=Pri_2M^I%UHJ3|=A50;M&EDu@TeQS2KDlZp)fKiR2GbX zi!xG4(tg6SXLM7XeTU`&Gp7TvWxy$mF*@`zN~MU!Tby#bc%G2pUFcTV0s?OC492Iy z9EwH+**P*Q3X>js#iq~Ai(sfKHZN-$8A;r+op!XcYl6#AVtErLL<@r5fcAygLm#>zYl%Js#Tz&VIvzA7}f^-qF#tVdn1X5 z(NuKg_0RpP8Xx@r3&+&!!<-Mq`Ppi$#uGfmfr<=jf8d+68fAjgyIW#GWc>B!nEq1C zFD)&F8Rw<@urwHbUS3{F$x<8&I04~X45(9)l=MOeib0v3p?fSM;K$FEmH$W6b%0ad z|80(gL&h73v1`~8gjbKm#pV1)ya_{;3VSA@gRHLSfoS?9nLuZG`)X(7HZUNu+j zV~pYQUozJ5(S$jcW@Tl8q=;${uLOoFaKfHBr=2^sf_|_oz zVGO!?yH{pIL!hBy2WGS{yuO3<3c<#3^Z7vjL@13wQVsI`TRyPh1TczDIAM8hZLL&& z+u{4Ed3lK!=}sL!&Ttvy0P z5o6F%0>^#R+bb_82MY%{k)Z|!Jet&HD29)cv})jv}lHDHYGC|0&2X z4={5<*hkSd51tbuKXNgW8!D=KjEhmtwJCl?iv!7@Fh~ZddobaKpMseLCv;Ui(9)qo z!38{v7mYLo?k@=8pgG{uWg+|`7=Z4K5~SL5Q~~~QhYwd+mw`Nv2r-Hji1U+~$y+6k zv)I$wc^sz(mrMg3L=TSzI9deH_lts$0(%=o41bW|LFelG^0)fO8yBm?=3^UP3+&y* zL2p2-%k9On*PvsZW2+t6MlLpv^>MhB>RGR9=Vp!&Sngavv9UlHTul<8vc&zr!)3JMV&$8BfeQZ&S85$eoy&4!96&Dp58W^C6L7@?I ziBqosMNg!yqVN6FPJDVJn*;02BDF$yPJq@5LKhoiO+n!-{N8?ihH09vzYFMtg1drMX)ZD|Guz&_ zt484qt`#nX{h>o!BqfWAixuo^h}E8Gs6b3bPXd4m)cgR9Y*ElTRMdkUmdqAKJmBpu z51C1-Q6~=Ja0PG1T7fik|>21EMgl zBYt3QL&KL>b>)r zxF?6<%>@&z%1R$SJ;E(LxB}r3DLqsM8|Wi~V)0xS**ROWT4Y9*K%8E=Li1WhT^*dg zWkeGk=&bDQo+;l@Q#-K~|1aZI>MX(!5WAxyqA$}@HJ_@Bf#;K;Wh=G8|ETl>4)p_H?Fj21DD|AGlW)b9trUAqvv6T6e8yB=)0Ve_!NT35liHSeyeH+u-__d z&jZrIv=Oy-CT({QjJxOcwApT(Eb*1q2DhNy~C=H;tbunMwE%vX(m0?4ol zCRl;*|2qaj0`SkMosi5>#e>jrV2FOx`aQlBjq+f{A$2fUAu3>mZQqF#I%j#SL-c#p z!_{f+?>TCNGlxF|ICdQ@UfiL{H??+hCgr^9EXKx9z+DM8Tqa$(xOCDOz+m>~mjVVQ zQ%11ih-iBO$`c4Zuv`Qh5B`Km?j7qgHefTTMICtoN)bK z`?Rcle7TIK3zRq%Am4xdxP-)l^A4~R1kr9cD%B2e4sQ!32Yfe?UBJW!_yY8Xk`_T( z&c6Dp!>8ABI>V?C@s}z?0`i3dqZ>YHU0u|y@9+N&70VsRdsp-F4#TAYa(Rj~DU42+)D3G`@*WHLAN;hVPQz1`jR^H;u)q0&&GriXR`?GXwtVc~s+0|?4LfcAjlnUIixV9iVn$Kl6GKWJ;q zfa}G;KsAnn?ILa@&}gY^@bI}>SYuw~l)2AkgAfnTyM+a23soU^B_S>;u0pj?I>O8C z&yR$9a9NGe=r(VXv#UZKiChVYv8lcuV>PPu0)Z1?6?_~0?g@HZGjX%K_a*-6ph(W2 zXe32HI=48fiw+4qR8+hcB|8C0K%HP^#nHw|+C$WcF_B;(fa^!`DdvBR;T6J zv)}OyVdXHOHo0j}qb&E|$YW}_HzFc5;k4iwGqbT>enxmKL95?2w~XNiG;Vkf^Ru&( zX{J!ssiQc;W4T){o}2RI?QbMXsya7lNsJh@#48uy0b?z|y<#rDk|30Pdh?(GX1!3K zqq9I;2oBX$^+*`MG53!uHt}*jJ}bR37QTR@1iB9 zn<+!KM8AsiE)R4hG%YQE|NKHCfRCJ5vOl=F%%2Mr+5C1ba%;+U5Sw-j)rDGBnKTtD zz;CAwkvNG@<+5o}z59SGN}CXE*o>hA0Y~#A&LYGJZEbBd-vO@hsk&RD&H+z4bCdIx zfs_NX!_Zc(hCFnrU}I&4KN~+Z%!x+(%ZGuu9BR3^>qcMn!uFVLAj1MRr5i5=(+)EL zfYdMkQO@uUdSTM3rdD_VK2WMt($Y|q0hCM-HlwJrJ91QH$zX-!z5f7pqUn%L^FTbuylorRk%;=st=bOAC(b0Q7uht6Y*iU? zak#`N*i}tpx;MGJhDrsW4w8H*#5*wK0|63jDd0ztfdenb19fOP1-6}e_4;KQ;dyzQ zk2KnhSAKZ=Z4IYq|FXQ7G)lLXvC%$;2gJkn5O{LAt2zL4gQpg5peQxbOkPMek-#8i zO!>tDeJPeB##2qwui%!cdvrcR)1*zX!%Z1y78zBTmzQ*X0z*kCQUL=0$O~+r)H!^9v?gOY*T_c5=45x@`!8@A_`EfHMUZ3$hQ|Hx^#SNn}$wv^{=)K=}cw z`Ras>--)0LZ@mzy91uK3H@{bFDxoW7aodu2Iza3leiE5^w&g1;E2ynuWd_H|moLvv zwMSug1fxjVwEGVpAbs#PIS3`Gqb}^HZ}lS)kIiVhHM{X>+#>uH2$*g6F(@2>Hz{rz z%>lpaPyf#a;3-G{L@r8!Wl0KrM0C*z4|>#9$%PG}rQQa6Y|cHXVu67X+}r3;7sGo3 zfJA6r+bg=ZXn;d)4jXE4!WO_IT6j$D(I+uPD4ls{7V<8NU#(Hkg#V;!Hhf(W(vGIgU6uikuz3)~2<$ zWbo4J6l2vsH@eH*FM?*@IuLA>&;k(kf3hur*_UO@DG*>)4JXDDlfE3i^xQ7FW#~uXk z6Co$y<_jA88$%w84+G!@*ER^F0E9*KohUb9k_vm+s^h)=(_=L;50*00qbQ9 z?g90dR#YJBqMktqxjO{EYu~0#83_1PDkA2eckd1j4xYie0?U?62lEIob8~Z$yRUVR z0ipp62toqXcvV!{7sF1F3Q+U#u^3@E2)7e}y!ec0$p2@TOBHW}eTX3*+GK!K|2=x7 zFUM2(`-Ui6%->fXV370pS ziV5C)nB^AF$kzDdv=Z^ti9zoKH*(P^*}&8oASDFGH1e0zPk+0(kk)a}FXg*gidq4& z`NxJd3bJOHAXQA+c0koI%xzXbVPIn75(b+(m4pN42rTBjy}&ErP~7>t0->by@nc*? zG@l|a?Yov3r2AvO4m8CEvJI7o#599;5oKBg@mvwcjgxg#JwBN$K&w!@J$~|pE64#7 zRmF2(-C_+~<5s5AY3j`3YlVUkKtQ;hs&4(mk=Kf|4M>QH56FO+kC6^_O!hHTd;{w9n0~=&UmipcED^ZPFs&LR}dz(#1luM?W)X3O@-nM854%cur@S?5AV;fvl~9PhVo8h z@>O-h@SM1!D7DqNaRikVN;%cb`RRzq$lbuu-s1{-ZGQlBkC-k~u*nOOlcMbe$@nMaBUeTiJ0Es-M~ z#6~S$o-e5hnd3|10(`?;U(?V-u>@y--C#PO_>*x2rXJ&l1lhRk!r&v7Uzz4QP$UcA z=b#@c3rY2A%{iT%R%s~>q3zkJcKSvwlAu~F;Ad-$Ju$qPesg;Ait{bCf#8%qP(;Eq zok&klsXCMA!`k6~=u~r$dPi^y{j_fUyIL{*K{mxInm2;a(iV%Lmm$1wGmCTm14Ed_ z7?->=zP_z{v{P(7J>UgQ%ba2F;6M-{S^DX$3)2@_EpN}i7zATgbT+6}S)E{U#po8+ z(y}|EEwo%RxdXme?e7E*h_(BKW)l^z_st!0a1gV%3U< zLqwmwNo?WF38b5=i|G_`{WV2O!>(Juj6SG7_5q6a8pjGY5x{uaw!5KD#HxWzOpNe_ z5mS@p{P^L!pagw&m(kmu7J^pc_pgfEYjsCojNLA_TGYP6m0hoMpQOMrRDLk5$|3)N zuuFEb)PS^xCUyv5Oa&#@jveQ)Afu|oK#6X>%jkGO#8xi3m6%`b#)*Xzvf3U*@<5jr z;fJuB#s@W1i*d34wog7baN&DVK3!%Oq6oMZIqNvsn8h^xLhQ=dE?i6`8w7 z-^~lg&?)h2RjWELh?H;g=3|vf24TwH9)7?pke(-xz-$fbVO}Ly1Mo9&2ATJY*-z?8 z*iHU@6Ir?C06Rqr`cPQ-L;u)syv%WzT zZk8VLgx%Sl<)f?a`(I|h@A;eI{lKNLSekraEM-8t*Ud2I++P` zS3EsL&W*;mtB8pq`SStUtvL;TS?Leroil>hkIr;SUE#N~dSqm7quqE9lduR$cv8ds ziu+?(#@ECOGvd#02Ek#AST>mPK)%k~n#&}O{4YjG&x=k&y#vdv8yoX`QN+Ww;vp>7 zC!bJXRJl`3v})Q)cENh*p~}dWl@)pfLmK-%$Yqf}--@%_Ba&#+~E1QvY9x6b%AVL_O@8>yVO(Bc^k>sm3 zZw=+o7|tOm8S?yokt`?c+<6RG9KPx}UgEh#Y1#}!U0<$^?lVoD8%=DrqaU4|c(_Z> z#M#^Y`a`3<0Lzihao+GkI*ZPJzmVX?O~uk-`5{fw7cOjkVPgL^Q8n#$tf`1}7468O zlCMZ*c-&+y787FjScm8#j^~~hGzOFVdBXSRZ(>bz;J<44MV!DqRTC4&)ID8FCKM3O zb4+-mwRlquk8n=PYp7lp*-+Rh$9Fa2h}ltYyKVO21oMLrtJ7k2@@3%2kHYIgpigRm z1WoZk#(enVmFl2}qcL){#Dwd7cI1uo+ij2OO#H|582OcVtMiH#uqj{K7Jnz zH^jbY_VW7>YKbW9{UaXg3=%;;;MyJ5reJ=}vLi+lNBS!Iirt9yjGg*8-L*z2o@XM|2>?a^N% zi`TGP=5yHlD-rG2yH<0D%>>Df8Zj-EIEEjOcK@=; zn)A@e2#$CeAVd9lu~K#DTs1U!P4p9de@t#A)ad9JYFvwPn&omkJ)85GHmsH*IpU<- zyvn#9q3;mqf0J(ZdS}kpkk-0_YwPfgXy`wuUo~bLGyhw2+lik4exYXCzT@WwWeNj4*Bif%sKr-=wSS#wv;YoF|`^F2%1+G~HrI!n!Ps-G$y+YHgViWZFyk zL9}~_b{yn35Vw**m;)9BUse#@(1lPw<%!yb;p1Hh?k9j&9zclV|@-n)mSq_p0sWvyo%8%sW zqayxQI*Ts6OYKTwC#&QLf3oJ_P7f`g*rcl}*E)@tX5@D~c#&x($oZzqs;gU|`_LcH z9xy6r>ZKFcC-)q^NfddDjtBK6afLrjOZ8$ZnWlAPOoM;fXz6>_BiViRr&n-bnF<$K zW&89>m)=#0`BpQf`b*O-6 zObmy(vk+0+2R1b=*hPi8KKPN4V&l2|UYv?Rlm)|m&mN|x)2*9W6t(6JnTDF-;AXO( zFS4m1zF%_VLJ)M2y~k^XF<6EDM5z+kAXHZ@Fi?OnLgxJULuCsZ1M>Z8%qIBkpq}B! zI-DXrSd62-p;V6HZoKsOk8Iik@Dbo2k>-7&v~>A5uGH2p1NlQiIga57M5$?}m=&pM z-w-B~ecyJn!d3$$7A&Fy1CD#sCjH1N+Wp37UThyP8WCZPTyhB9Z)COjCPt3=7q6zW zORCN#=Me5$A*S`^mCb5;`u$Z_+%2aPf(3TRJsHa$>yzZ(l~1E-Z`fNAA}&b&yYKaO zm%A?Y=DetDVz!cmy`|VlqzhcBU>}OOFpc7ai3OQpJ!)RraLwuGJp-@ zJPvUy=2%qs4$vBR2wGqY0ADi?Pft)EV1W-O)x45zbNqLT=0;U&ec;t9K0Gh-M2Ao)I#KM&*9DENX17;B>hE+xj{+h6S zD>_NX$R;N({Q|u^E*PlHqMJJ2E>Ud($)x;8B!e%Ydf(2QrxqIXw`o(S@KHa#s4j%T z>}46e{MN0syJ4-O;@d>nL5_aZ-PhNL{XVbiw$hAz@O&L`W&5-G53TRou9gOFxI8z! z!jMgB6I0!md~E5qlzqD1LiFDBj=&#AZruksRyGfx&p~y_S*D`uaAfuxR{N#;+#KD* z<)<^rG~DT{Lw>RPp@Y^X_emRxmhqg8k4VNdS{Kb$}n=m_kq>z;z-U_LV% z0*!YuI5@x!!s43?3S4n#aa=&Q-+_e#w&lCP+_=%#_w*?c39#faZJL08NLT~wyZc~J zt;5F>y(3So0dN7-zEpH_E0~LJcn9BCRt`6uIt;10sVVc_H!mUcx0AaF042U-0Wcf} zCg4ya*xBsge+F0%IRW7t$`*`#E_a8>J*eZvsT&rY=4=qQazHz7F+W~3 zcaz6?Cg#Xr-hM+Gxl!S2m5&NlOY7NAgz3v1BeLuFejt}gkAElR5xO~_$A9M`aTu6< zDu{1m>L<_8c8iJeh}V>slSJhc)J@UCevY|K)GG2a8A&Fbt_jslt2`J+oE1-Ce|ACS zb%-EYxGd6Fq_ni4v%Un+I+&hJOzZ}7Br58HXAJqqZqQx;CcwLc z^kq|?1-92sVMq;qCqNpYKA4ju&pk;L$N*~-_BwxlpNHG(@mk$-T&8-&APmKTb7Q^; zQokIAys~MUi1(oTfUtK0Xrz`9brXDyP;puhE&(~Lk zTQ#|Cx$DS+`OUZUj~KcZGKAD$)rGW;r&ai%7a4n+bv$@$Py&S=iIa>J!89Nm=%r0&ACF>gOG;H6_|ByCS zG5B!XK^j>VM403J)m2Mu>FL)Ihv(qps`*-p3qy0vCH%YgnnX(5{C1sw%3b45+(w z1cHX31!hgttF-oZrdX78_mL$wkO>I^cf;kx%nA<{lS>`FeXW(0-9S~rD8qUTj9Ov5 zlOG}N7|QW5R^#_Rg=*eSc~*QG25b~!E+RpT{=cdp~>yUbFJm`AQr*I!)jPj<0D2r5eb_9 zdq4+Bc7|j@K~}b=ww6xWi132ZsU4Fk%y>~rxO?jq4nV;6A2{igODb1YJF7nu^{n-o z4e}Wr>)U#aHAs3VZB!_o9Em*F>%q$*ZwdXw_UF$Z48Wl?N{EeJ`t}X>e;4roW44VP z3!M#qLH2L`(O-(`sNN4D!OU zQ z(~gPmDwGD#h^5@7rR(DJzjuR~h{T2ffDjMB73>ZJXu?7NfyMwQwv`XREui=;m@C$0 zpbO66mcwHhMscg5VCD&`x|50C7#Ct}fDwA_t5*)7b3$K%(N}^+$u(LILf9mx4!bY? z(aPz?x(6y61>BtaJS;7JVO?h8DX@os^kA6A48_7ej%k-MsiHh5hmPR$AgX2*^X~`$ zJpbQ;UJQmStnk35qKXU?kDxV%JseO!LZU0mrA_h<{vZYdu*X0cUQ!n2!`O%jb>AF_ zJckaQ4+;WNMjNhaTed`FymtOSya6PB%!0wp`hkl@oehD{qwe*h3dRg&Ha}4^W4=zM zZ6JdHU=)VwJVib+sjy4U$M_eT&c@#@H3vi1= zql9pm`u9!%qcMz-sRjGaooK$^B9LPUp#c$+bs4VXE;q8w&r%{O@&I>&9jRBwjU`HE z!8`OT6AhU#S+rx4y{ko6{v`g^b~k14El=YD2ZbP4MVoBO>2<1dZbNv*K2g?+DhyX! zS}vKJQ&(;wYEYL?0%h00FHOyNv$JczsD@RjxsC#R)7I9;oDZ<}=%_jfXVTJL!^03P zqBO*EJ_=@N@E3$y0VO%)LC#2j7*4_oA5}6A9wH=o*-?5f7;~IHt(0f+V`-_4X%n_z zfx?AJs?hF>EV@x>wh-hhY;%w-)6&#jAIE^3)HsVBu6IF7f_Tn348RTO$bi_v{KcKa zYKZS+=%}EdpeyIa2z%xc%2$YX%dE@5J%JeQ#jOKd86tqwqm+lQaddVzza@XtlMfin z+;;2S`Hq*-Ah}Ju_|dtp!p9fRELRVO{93=X3S}&)XVTfABO#LU$k~Azoq&;;UU`td z0o`T0Z8ASin7az`>QE-ZkqjXKCjyu+PMxcA7Rmw8;y|1WU*uTRc(O1ef(Q|`I<$G3AirSyCzc&!iQonvCjP|lqem{m&o2Ja zl+FT4$-vIejs+AKpl}lxe&m@+9sTDV28Qlyl$0QTUC+&xK%Fg^7DFakyz#E0$D++j$RBdeSTDzDdrlabxS zrKzZ^%B~S)X|lh<7OTVzc%IBHBO6+@wmB=x$;rVtr}VH0S?9~nMqLaqmLy{?KxPP) zrILcQh2HMt)pq}OXy^+#LM|+0W^)AwBO<+J1MZ7&=yH0Enmsvq*SIdPv zdWzEsgIyaLJyFs+1O*`5V@8bicG@>CVOT~T8lp81KaWV?P*(@rUbMNx$akwD+NwWs z>8U#47SJ{D7 zz_ITK-W8Z6?JlS}03AS1U1FBS30ARN#oLtuib96sqegW_dJx9c9k3r%6||c zEE3Al1&cB4EX?eM^BHAnhv~UE1F?{jQrmLcYHy_HL*BlhM4#X=$7bskSZQ(6++m?q zQ=I`j$*UuR>r7aHlpm-Y$XdnbXUth`XQtqqMPz z`H1MSleKxzEosbf>k3WkPjX5;1?|&7K1Oz&>ei%!h|U#j0GCU!!H(6w#6n!uc7kjt zP;Fb6ar3$o3A(|-KM~Kid%f_*o5E-rDs7f#L+SUdax|^lqd+%-jv)oa@0gwWe=dN5 zfq@xzPJ#=uy0KmD(f6mXU&F*wXnP83B6#VEuhxRS2hY4m;6-o?3sbc^KdC3zCTwm`&qOQdb^=u!&zF@b1J757Vg%{NltDKMZd}%rOnZh}p*B z1Sa20HD8x5i+fKXRM&k+s~+wqV<*pXhnO3kEV98v zx5kLueJprsv+T>@4>sCuUpWW@ZPvc_P5h5z2uw8^OcEZ9j@xEG9LSgHsf?hTem(aZ ztYIw(Jn%pb^N%kon0f9o`Li*P8DPNRu;58_2j_;tpdKe7gM}y?P69^4qKP;$O7#seuFmgxo&uYs77x_X9*1R4+MULbS<1EkER zAmUNVJ;zi3Jo;Y3ffO`L0E#HrnOXTE&gA0drLNOMUuh$q=$eD)V2sBB$|U5vP{RBK zQ4{~!y$5ZA<&m@7bEuyXB{ZHPs-kzOJQnGYke#10SZg4#R0PfRg+I1F=ElcRt+nSu)aLj;6DI8AP%E)zkyqi$_e5lnv6lHIkmMP z!Z87hcP1uUz^zeL{RSN{G${UlepE$s#?w69O*~{kLR7Yw55n9!cArz~&LRe9nY{xN z8=!d@0|ba>=(LoG6IggPf|ZZM!vP2sNY)q)ghsr8*2>Ci0L*S^mljbCwHk3g@gM-#im66jiNWBn5vFD+EOeNke~2y7LR}d;{5Ai`7pE~;0B{Hw~PbFXfN>J zxjA(p*RUxEsU2%T(v$%2`QxAc{b!bfpf(5Vglw<3@eAI5WCawiTE3Gs@R#WB21oz% z=g(LKft3y5%AJc6IdJIE1D8h(+9-E#R1Us(sP|&B_<*koz|-ae)fLbEE`})7WfZjx zNLHv`@87!z&;BDgsP)y=_<<0Jpr?gu8|8{`E>chU<-~7yB-HCmE5BNuVWx>tRc9np zR>WSu-#)bO37M7FK7A~M_Si>sj{NyL;yvna&8+ny$`MRsQumIs-687#_D}HlR=X2Y zgK6NOhP3yuOV0f;3;M;B3ygEDa7JFVD52l{vft2Uw}JPl)^L*|zKU5EMRrBwwSD^Z ziIUexmB4~A3$oMXq%)qQJ9FrjF}zoJhs}>IOihKAP~mc#Og6Y1IE)Mpt*)(E{h@m) zD=&}cKvE+X4Ep(@vTJ&j(EF^Rall<50qVJwY*m#2^(4X(jS{9Rzt+~^pZW(xHPp;; ziHWe+B+Eux3TbY8Om~{TK!~we`i6)nQG_O$QR~J8hHtCqC~gA2q0)2FqkqK&RN8s% zOKx-gG}Q|{XY(aNxZl9O=}Tj5O{DqN*cy|pQk$2Ja`s`J#{`OXBF7@`Dm>S7^*sg~ zk%@OBe=EPMTV|OkNV(744KJV#IweS7XL(UT{a9|P(8Rk!2Qj~qJh=_KBV+{9$nD!) z*h>cA!wh1^4_y$l(ZNH9eyuH^065dWGwIa@0*SDV(_rFJi?62YPAC+r?NG<)hdaPC zBq@nKyuOgG{gTYzshy#lHk#yHy*GooLrY7G9tE( zR%>SN^^5{r!4!>67p^)sebBG?1_f*p+SIPw$DJ^qvpDH%@4u<^`(UHof>Kh+Q4V%d zd!9?9z6~_pdJj>K!FcE{iNlR4QfD=Be%H2|5Q)9@PBnNGU{T0UaMOq1h6;yj9TCQu zMK|4ID;1>V`=5khDEo&)Z;c0dHdgwc`f6ok`6kn`K(paQx?}bw?@Zh8H)^+}mXrFsM zLL~miCi(3ozOa3!p=^?4B;EAeItFp>CSgST8bWsuV+znK?45z95a&m709}8JvTl^h zy(+#+{q4t67gd^TGzvz)iRWm?J+bE3@|gGUReyEYRPjzoe~XTYI~$pp#Sz~cw{NjA zageNPH)1)xsbETDb7*YMOk&iyINc!@-L+MFvwa)%edvpWAOS)@~;xC<7IF0^p^2*5{ztmel#ZPlK#waHVz*T41 zt8}!M&RyG!fU`Yhk-9RylLn=5Xw2oruR&T^2s7*vrokZ<%^>*Fa_^==W7e1T?+c4d zp~E8_;th$F6;7xyW1atbO6&r79%eVjC4SE^#U9bGpfwXLn)hVw@3NAXasM|$OPvrL z{v~Z4IkchoI^c3Eg}I4ud;T8zw)JmGZt%Bg$oq&aqEZoF53)2wL{?*Ola2{4?5rO0 zTo6gx?zK=l`Z#>fTtKUOedqGoyuyH6o2-6u)o^y&76%{LAn=}PpAzLpNQ7r>;*V>_ zH8DaQ+p?sPRfy_ z7PiU!?J~IkL5fdpMs{Iyhxkg+_3jus3$@F}uTLMz34IV{rT14=zlJzgF+OnofQU9; z9W>kh7z}HLO@wHWnz{DorTg6677@EY+KDaZr^V)#?6agS`sV${d4m>o#cb`RGRtS1 zi#Ip-7)vvSa6fr9pY)ERDsz3c$hmo*btUre#QQD#(halDNW^otkh0?bYj2d3rtL0x z85SP!w9|gl*TJaf_Iqj-^RMJhcJ=q(%|^wW z+lOdbmHV3ovNV0|wd4je%id1hXy9XE80TQ^`Qxmh+^9UYRldV_Ur=h7B;HHns99?9j2g zA6pa5L0jC#Z$-ElSCr*uZX@z7G2qM@x?eX{w=fcAFAe-^rj$jjvrV7bN?T6wDWH_m zv9oZFXKR+Qi4R^GA0?L!^bhH#chGgP<}@%3vNWZ`+K;Wsaq`DagnSy!Qu%T*Edq*G~Lt zxUg}Tu-+3-FtaVC^8*DlH>>8POYWauNk)IQMp->A1Cs0?f;>#x&#FwL!G!Wj3$I1j$v_;e^vI z0>=+=4M^L_ZY&lF(+O>*U$nEAvps#f8X%oh6VtOHOhqlfCbXyp(O$z$*3G_sD9pIQ zcP#q-ARAv*MC~WOY|Z`@3W@#uE@(Tj?{U@-y?E}A$KTE!s$3DX&x~KBaegC64zk%? zRE0$VkljKb5#Q0joYH$7uCMdyBzf*K8xJ7Sy4&C_fO@rG8&V*s@u7L;*>+L2`9>4A zp@Sz4fe7HolbAWET@CntO+EEI@#({}pZMcD{DAug1Z<4&Fq7hnV*+jX8w;=@_3JDW zi+x;vNsCW4X*onZPn~kIx4#ET2aumUh*dG(0A!5OciL0z6r6kTi8 zGxQhRlb%F)T=M(OaZvBVl9UP0#EQDNAVXRdctDVPE78pJ3bq#^K{FCfmvHuy?L88z;*0Z zz<+|=h6(j1R=JvW$U1oyn#)4m{DYzU4FiIe$|fX9-&*&yKn zV4RVjJ_1fMG%MdezPv_e>d^1*YMNx9VdQvm)(Qe z1**4^MM)pFHQ-|{-j(Lnl@%?IJ*$(;zjMdWbA0~e*T;xcW<8ewuDLZ1R60C#mDbiy54*^ zt%|a!9qlI#6!|xDb3?GK1ic&ts@V2~zZWBm`yfi;(488+gCXSy47N${vEpnLP~}-{ znURs9Zjbus z&U$D)77O$~@WZZZZh3&=O1B$leb!`>Wf|2p16AJ?J`3njdK794Iykrtn$(Ba4PPJ| zgIEISan&dWg4k19Omjjv;|aE`3bM%sXbC032`XLij-VT)Q4ezfDd2daz}&3lN=)tn zBuG^e1A{j=Gs9L&^^B(*V+}A(fji%pCRqrf+uI4(`EJK!GJ=1)L%a9@Vd_pCjP5K1 zKh@oHRJbcbcysmM2VFyRp=eQcHk~rBR4KLpY-th~B>z^9N{>ltzX~0pi5&R*8`aOP zgFZ(XpcZ(YK|!55pI3ADE_Q>CUqyDhmtNcBDyY&=ERhgoQ#ADL!&){VIT+7{ zHj~RX;VU?R#e*xtR;dCviSyiR=3x;g& z5%NbWSD@m4WV5Gm0Kchmvm^fdtX}`q_I5oOH}a_zBMez8e18)-fqkzG-+6may!LHb zEv-)5;1AuGD;7elwQ2ke0eHS z=)FJC^ePfIi((pg0gWWoLVNb@YpAZq|K5Oy3VJ(C8nK4-KBgiVRsfTLai=#VK+ryq z(-!sfQKD6ZDII`u`hMCGmuwoKXDdDE6;+z9e#CeY=0J~=wP7WC-0~Bz_z@u zs)`qjT0r!J*!B3cOxVbwwRD8>Ce(LYLSF#2Lz0PK)YV;)t58#pAOd0S5+2AWXb}6q^Ydw5CFsSSf?gKlHc%)dw!+Q`kR=#} z>z^Ndfjkvz9y>c;>?)AklxPI=sr@DC>& zz>&bYfL^M6@V$oMbDx&qK$7kPY;ED{35(r+fhe}Oe-WzQfrhxF6#2LeD0@{R?8(8~_(Q`x; z)=B4^dW8H@{pK`Z_bJ%E(#e$L_f{?s*@)Ubdg|^NPrdila)1S7UT$uFPAi;u?Bqs( zg^PTNHZ68}x=~PY9R~pa0zO<2wIQlu$PJS&c_3v#tuV6NjhG6tC#I0Vry$gZ{7Mfa zBfwpV3mA~YT5dN?2!ZwEQ&RJ|%84sUNquPl@g5;_(bLyA6ti-46vSp2c6QY8i`bPC zE=a682o9_eb^3quznc(*K#dLaH3Y0e=Q_X~4pq)!Fe3rA)_VVbT=7%Tbm8O!*+zJ{ z0iM!7O9h~xkXeU-ya>JuW=nuYF}w-@SOXSr;KYRn$WAc&#*jVTqGT&KtW9jkzyJnp zg=r>+6#r(c+PFdD;*WZJKf$8}4;jD}a$BvLR75$|s2E=xMquf3_E%F}#?8P*OqRGn_;)3D{Kn99KVBxm`F+y;Rc_xkj zHm^=A&E{@>rNw@$SDbU3!}g2EaPtbRX6A?R8fGx^kO~(i8xND@!=DxmPSucG+K;6q zu@5jbF@$=p#q8>ck-N`furu~lq}*Ox?K{L8xl_%Ja!s!TWXTO7--<+M3(u<;garNW zhFB;L4+FHAtKP4+fXV@u!`7`IpbMOI1~{CVld~JxJz9>K`Mms))&kCUjxjyMG1)46dD=|ID-n1;t={hu21m{f%jJs%(Y(4|80XA=#8HQgd{Q#*gVJ)HNj1jE@mA7>Tw6Y!Y= zKfR*QxI&hLfDgqQ{Ectlxr0SUm_ZHLK>EPZK)n9~J`sK=_TJx6Il-o3 zN?h2--2^!efOaqsann(z@nRbdvpN<#;EyBO9htlHmO+ zF6WHF(M4>LLpn1p0*DLG1Ds@B;@=>FU=igwtO~QT_yh#NR_TB@9ta2F$%cK|$#bq+JsfPB2&?jh~~66!Cfx@=I>s)bU)zx4=0^_-9HG!RrPbjvGXE zki%7Z;Q!C$5pG$~9!p3{Lc}}q zp6oARYB}!j1eUJ`|2pUGR2Z&uGe`2#O6He~Nz;~*_!0tq^!D>az5x}2>V}6JKTL?s9Kfk=71ef(4Bti_`LG6cmk~%_W zaD5qpL<6gQLA`_XAylf6a)PL)BeDqg8fZw^mDEp(fW7a-T3t&W?yM)G?2)M(?}UWY zPmjdAr6f-Mk{GM-(m)qJYbdckp8@L-7}$a0iPy%$a1@6?dcGSAW2~(q)2D{df&#Hd zZ8VTzL(lqgTmwRfjcZ^g)jv~=OV`IH*xm1z*Fr6$YY%~|0rxay1#}hj!{wWzAE7Yn z|D5eBUOL7<@+vz!8?`c4Xc-w8I5q_hfTUeAxTokp@ISHG(7Gn|EtFUi&104|^u#e_al4 z({_8xNQVoyn;0-<1xFDm%kaUk73zpc%gI5by)Ds502`?gJCG-*bjepcEqB$PnX{;{ zrFwm2nW5y`iM{2Z1A_mf6PuGF8~klD!R<|=G`X9)6@qd zVT%vr=3BQgMum+KLIH`L9h`7JBv^2Ct-QDCHY2!V1w5dIe*feLmUIlZ8Pk{N-Bpd>>%Ch^b2 z6di(F?Mp0RZ)>AfrUz@RD+DzL^x5KM5)gemIiqTF^N438T|4(vb!DGNH<@*O4UV$! z=eg~c%%ZQbGwb{-e?LC1icteL(ivsQ1MVt5%$=5zOEePaj716j=4I;h4`2%kKLGyHnRh{^v7X!F&FL66o>4-oM0{I*p6H{zLg50)kN8nlY zTzikndVv^?h7~$i5b?0f0K-v9G6|elIPD0ilUa*I!1zsw5Y$=ag$pg>E-X_Rz?bO z0y!G2K5W62bvBG7C^JWeyFTs`$M_eXR-wN0IQ1wA12i|A$`s1)7(ZHEcGWD%p3aLj zDOzxUN$MHKz-Cg*h&U~O|C|TI56;slQNgb?D%=sY=zQvw!k8DG2)m+{Hc0k6cJS#f zRviL21QuYu$6+r=b-(?$A`G?SoEll(F zsF(<$@|*|D45e&QN<*`}OdDoamM5$+(gF<#^%Kmk;q(`i3GdtH9p|uK`7_nA_Xik% zdJldAWx&|IF)(Nsk{2H0`9JG${y9$*1q(mguklabB16Lm>I2R<_6q_D;keOfd~uf+ zX?xBERMIdv$B=o8loVLanLSjw;jjmF|A4*yj^odGQ%pdDplM6RBEFOqS`nGI%wAeA zqP?0I)rT_MpOW?)BOMnN%_17(1L1XXNFNTrf537l+KrPpot%ZarnD6IPt~~Ln2FzA zj;!DeA}dxyC6GBwTS8-4$ih$vdn9FLs;>o*CwgzaJ-YDZZD{xbAr6fFrAe{+WCr^1 z$@4+pATaA23Xw@$L`u3f*8NkFwlZM7>Vf0uTv8Tm22^z%PZ zbD@8trO415|&=$1qVCl}VA3T9~rg|f9oGci;dQpwtvrQGZl z4`W^n@JTeKB_4FnD~vQy*IhGzo*A9{0dsnA1aT@-GcpPjHoR1-ymP1i?%jmAIPh?f z!bRGsF!suo=g*#j>GO@cCi1`kfKlViq$?Z_22TcqSu9QP@%b`69WHhp6J+#G)Mf8l zLB1I3!^HI~>LXZ`!_X6^kEoYmo=3HIMVALADEw8Cmhc;EYieNnn2lylPp=&nBmB|t zIex~d9+o%|1!ZPrP*-3WzhJ2rQvKS-@y=T@7LOMF3hX=9@i(9bq&oHjOTz!*Dp9Ec zD5Su!`}yT_Wn2jyQ?Jn1{a{4ig~g*2>9MC5bAvdG^^Q7BFjGa+TZ+&8zp7Sehd4dZ^8 zz)cXZbwBIwhRqqec^Szb?sL=_iAIY#3K#e+uoy7Fr3hPpg4}~&D4|U#mgv1^=I2S- zP)%V+CT0Oxt)Rf7*NL*M%AZP1-2MC8AbL7l)&YPXcx&shNP&S=g+m>L)`uR3?9gCt zd^!k#o@N$29IB@_T6pJ-%hrX#CrK|9UX=W84-CXzjJd15hzh!!2vJD1gZqc(PIt35Hc;ggLV;A zSdgZ1nL%C#0sy9>f`S6oD=IM1cwWF}OXaW!Ffm+nyc&E|Bw)DCwbenGhO_}}4y!8y zPM_ATBco3R5ZU2ccj^t~78|1UOv2zvg8jj$mZcf6%p8W{ivmqM=(C=LnYmaVnSJ}x zr)jlp?KWvR8Zu&oG`)ABI%-Y;jr!)W-fx?V%HZfIG7Jn15&V>RSpdh9W?>ouBfLs% zYeU@&I0uAJUl>hM7p~$k#~T!&0LGty6$Cd(5KLg!Zq!mxoC&jT{V zy9mdC0bmOYu}7hG8Cn^^(C=Rzi}DlH`gcTamph*&>vk$}U9+8KDwVS(S{U zRR8n2zrTNv`@SF7)tx@${Tk2bIp=u}wj_euaftye!K0jw!mK@%_9d@#`{sM7&iwpWvq?v03IY>N?M1v6sE^$VE`ZNv>0`)bN ziU0V2w8=}|J@0eLHFlAKvP6QK`f3rS;?qb9ic7D_i;Y%_uD0@A8Wq>u`z*Hg>2$H- ziHP#2?EBom#mA`9o1LO;<6l-?zVvch{-#@a%jZ9B{mIVHo-5Y>Y<(T}!tv)LqLUKH zg&A1nJ-i195NPtATaOzWHt^N~BVZ~9q9IhU_-8=l3~1ls_qVndd7}~5EZWz?EydA* ze1Mt*+yo?euZSX_$Vl9JFn_`C0%)S%x&W+j5*kx5A2=9jOf{GjQS%ec8u2_4&ug|n zo9LJdcl?HgTeoh(c^k#hL8vWp#sfMA76WMl%&TDth1ZAZ9#IMxzt2I6)V1q&kr<`J zZj(3nu%&QXGrjcB{1aZU^9(^)do)5X0)RqVJ4OT3`aa?Ud@3wy&@h~GyP>0)@JXqM zT6lZV^<`u=WyU`EC2RsSY-xGh-A%zbshYQ6M1*M4jnxEWUPLqHpgRUwf#Nd&7b@zf zD_5?-5q@O{e=SPv5}c3z@fhePDrB${kPS2GYbVZ%s|W&oV8}2c1772!fY-B3&T(j z1r?Q#!VR1>Vc1`A5hZr&aey)r8-}~$2e>crE4WEn-L!M%ShU!O2{#!v^4d+QK#S(7 zUmAb+P92KliV5b{aDU4S)n*38R`*{&i6mj%%SwxjZSmW;_cd<1)b1z3VgmLW6eC>x z_wV0eMOs}Buv~-84HGNcr5vIpFgInc506%Gi2sZ?zPwDAejmSpLn!!vUt5C?@*pQY zEXHt-0Pq8Q0e`*<8|eN(T{3aX5LgCts5gH8gt3H@x2w<=>n-R-UH%syjX9{eYda>v z8X~kh@x@P0;`9O63AL5@H=JHVsnh~#M#4CJ&oCPVtKEir96ju}o zwNx?+p?6@9Z=frGG`76Sd@SP4Q+7Rp&oO=jt{Poh(sEM9UyN4b%*V%5TfDc9Pc#(u zbL?=v@FY1U15qv}RET9Z6o@E*=s1{OMh7!q=bsDPU7xgi5A}w1WXr!_uiJ^qR46-r zc0WgD@^|z86~SYY@Ull4jDr@d2B#(k1;wfd9QKKzt%^K*LMAez@K|y>E)@M1OiY)H zn~NfAHgaHn#eVYG%y;Bfgy4h&Qbe^66@97oLo8&>=|T_GpRd^tfDhtwl*-61!m6f> za>JPg4?=JYM4>nuvj5j1;9Vm~6vJ?6!2Uu52tbk|h9^cx_UyD;`8b?)F_jC%9hKD2 zpFhE$SQE3Njg6K_6l@?&#Da4G{9-A7OYWozm^qLI@@VeiL_h?muzS#2GSbo#i(NPd z*w~=VD+Wse2v-fpvqM8eC;^;to}jfOYC{79cYa}Fe)|&-T>XHE5FLA$#~J1r<~OuS zjb0o((ji9DKpBQ=0n8ghOB6861Js0*R3i{CzIbvc=t{x-?mhH`jJ}W1Poi*LdVN3N zv079_si%Awt^bg=fO>vI_jaPNll(*)0W}zw88#KNu={VRj7&~)?S4W(bEM^{6#FSp zPhyZCAZTXan(p;pofr0)oB8#dZG&UI|r_ z3qR8{GRWhj3zBXC`@jer4$h84WF?e%v=in}4EVZ2a{d@(?s|$`FjjU=@pgSViaot< zV^6zT?$H`AS=Li7vsaKrJP-D|$)HK)LaiBR{$nPEF;`e^g=|YTk8wZeRknhCBr5c) z1b@1>zFozI8BQlm2G1~D#kL}14L{%KBWiH#QmJ(=azNmrZD|RH#mU8mkAowQC*f?{ z_Oo~IcsX3J-t3f2Pzm0A-*8zX$}|p!giF7gUnI zXsK{UwjnA2xF#MrG}w6N2tr4B@T|K#ciO;Pl3a3Cr&((+{L%Y%Y6f7m{hD9#J{Q5Grjc5MSL@U1xQ3H2Fh`EJVX$2GLD2zA9k1?Rv%Y3V=M7>3t5i3Wk#DMJ!D zw{PD@kz=4F9P?9K^52KS)T8?C$Jg$PH+kf##c2BN(pt+G^eXXE+ZKThI%;%WXgF$! ziI#JQ!Ty1#FOOdda%fDpMO?*CVBS_gl;Kk+E4yo4>|#Q*^Sw@2=7etCV=(&v4cx-D zR=8H^4o~dU1NvU!lkD~?0vrsx$(w1t`p-XniKU1tm=P`*B<*JRzAn&A zGIj%Y3V&aLql4)Nk=%!sB1{?i`OzZ6qLY%Ia|l)iSOE_oJ+e-F_CLl?LRIwSF2Bs5;e z%@9v;tZ%e$I9~jbYCJ5PMXqQ>LCW)8^<_cbXSeyT7ioFOaJuH3@NxN&hI%@E3Vvg- z>EiQCl-*A{a*%M~kHLauuia76v^A|%i#yCh3v)|>f3|52dq=rWW=wN;xVvMRq6*D6 zLSa(A#~Qf;O9n(VgcNyPc4_Vj89G-h1?rzTzRFRN_WdayP0qEJr4)%q0)yb7+En&H z;6XB|^{ZKWMz@~jP}%kHaDtC6Qcc9fsOF+mejLXX3?vv@THzRHxh+c1Y|9&pkptWr zt)bi26*lOOFtdzGkJtva{aQlt3(69p7qKcq-|W_^0>~5ZYSeoZgAkoSa+uCv4R)6wpv*;LU+S2K0#L z$UjuD6MzE#mH>KF7855X3JZY@ zz&w_v18*4j6rdO|DY%~UHLqY)0u>}~R?sfQr8(WA!g}&GbIZI2ui^JV`!6O!!W@KT z%Z+;n`*+jn9-e+?WqmlCOY66Rl^z-CIc1fJ+3n1{2NK0fhk5CXn>y&O@u+d>zJ1KX z&FpcOqV7}6Qt`%(^G*hfua;#n#ygH$DXok8bRk$&h`$}w=ya%ui-Oc0&J4VrDAIBA zDK41~vz@u%?+-7M?jAOY4}OQXehf(9TMucS2Hhg`nN5xF%!ro)WRo*Bu5&f<1i54w z@Zj^meRLtA@8e6{#`s1-89^XN;!uUMlc+a9vvU0MCYu>MnwvxLJwojS&Q$CDIx-Z1 zs6x9C0*wg#;?JG?4(xP&Z4Cf03|9o-{CmQrIeOQYF5qw!C4)DNlUAGOK74?EG4;Dk z5*nCHCaMZV&2NAb!oq;a2)Rd+;6kt>LR$aAa`@t(Uy8}k4`Hg8Nd4Rn+ z2-yK@XS@bZGNR1;QD6lqJM`Zud|O*uJn^7W6kwcZ;Nbhv@7)}je>IpDNgy>&jl5yW z(wSyx9b$lS4i7n#nEQ>z9q&iDN|uTR2n=0~oTIRp-9-3`t`Fgbc&qM>FNtI|3z-=acWpjX_%ta6xwzIe)~ZYz zH6w%7=!27oEe!6{e;q?E8l)Qq>|~PKiVPaL@5o81dwp~|tKn~Jmaox@@)bpp)}FXy ze7P)!42)~G3O5HXij$x8DR|Sh=zRY*5EG0U);)7OZ}MtyHHEDGze!)#GsuA<8q#BQ z=pqCIULqrk?Y-?{4NT0Zm;0E29;=slP@zrETu1DUOayav{Hx0<8b=EjVx(09wPB zJ8KfI5IujaE-*RN$B2;I`TW0hlF$-0R}QjJC!eD80*kE}b4S0_3KOANU&g#t4Z?F)4zl*m0CHFxlOX3Y$Xpk=Txi03WVd0b1gI&G}_2w~e z)e@R)$*;f^1^vc;J|Cv4duAmDgwkM+fU%z3ckWPSFe&Su{`0)N{Z_iay_*s0(gZ}2Mig5P-~?_{*nbDdTE_nYj9jKfOg zK#AKuLAGG4*2J`99+WAhZHjO1mXvX|MTG7dj}>Q1x;<4oZ)(iEz@e3WM)xp7cb3Np z=H-*XMVDPz`&gK6X!MCr-CJAEVdf?#-eKYXaT<1gmN5x0&ugcNZLh3yO0rx-W=%pL zneL}sTpf~;7IVghjyAvJY($~#M1l`ABbMKzo|+0Fw(MSrp>eYeV|+SL*$z zzNT*alkTP_^zt$Mb>Otxd99?1e*_PiB#% zLmcu!%Yy=(;uuY>J$?5MOxNfBmqKf7YKjBZy|x(z0O)maK;XY{Q&`$ky_aI8{fU!| z=)@8dBVq!V-G>?(=SkZ!(E-iGeKgqUU~DVLw7y3gQN%qlK71I%(ybt&ak}ChgD?Y{ z1_VnvSX+~-F{TuM9jzFFKq|t*tjm;R}KMO>r%kLkOviu3``zK?5wJzm~Wq_gqC_5L3DCl8$&MFQY1@DBAx`_7ta zc?O1}=Wx@Y$fG}*33?f_j!8sjAn^!yA0mSA@3<M#bMsSRb!{eBqbA53$0C;+VsCw`!CgOxyWn< z#mtP5H0%luIcmK0LeF@x%keX&Ilp{C0t*iRBVh30l!AHyuJ;kH)tF4PwgaK4ysu*r zm`T))D74jzKJ2VUxTAp9Xko%I%Jn>&7PRi#+9goDA$_7TS9_kd!D6ODOP5x>uzUJh zfpOHOgO(+5!hkKv^z<|?b4VZ`;-~~rWraf;M1ZBZ_v?Fqx;c*jzg(H2s5|Jktt&?R z`Va~Yxjf)vK%1C|f)If0of?ce03(Zw8%buOxZu$zW5R(e^6|geIJp7+KLjK^-)m1bUqUp#51TTI~&l)MnXm0T;%}uzgn;$<$F$H3h zor5FYBKlQmwDoSSU8Q%#-;9VXf4QlQfdg7C`;wiscGF$OC38$_wNYhbT-&65Y!iLd_D*A-`E?a%0MNGxV0 z^iJfxD{eAl%)FtxLU@1X;^O(?D^)ff%0>ayalrmp1F*qJQR%}=MgB_h%*w-+8D0DdH4tT z2-NLbK6JFwy&H`#_o*)EU!^3p4bd&3aw9U{2bqghnJ208t`dQ`xHw{%FknU$tl-7k z@rmGg14>8mEeXS=21h@fUONYTI}#0wLFuDz-w08c8mn32U}Ysbk>UNonqXsd)7-)W zIe=bccQZ{&BZW+&Itl&va4tLJDRzXDI96wQ6sIJ|b{&MLOIt4SUdCZw#~v4vzxM>4 ze;{i5Av;0=7Qkvy#BJHwYyPZFyvinZRx3Q+`IQf?wxF~zdS)#(?P+UJtGQb~Jd?YT zLTl^z%Bf!m#UBafJwG$}JclPqDEmd0Rmqu7@j4yx%hr;IOkM>G+_l@ZN)V8-;8m2Z zwV`zh80BN2?g<6s=LUE+R0FPRmjMmo)Yx2IZN9Lar6*K@YY?gPsJ)<|BBeYOKeMwnE-8jjQ_ykEq1^Y03{e8w1X?tdJlKmPlNZJ|NQwi^6c^si=`S7xkoVm z$isr-fanuBjgU}5wj*GDcpj)97_S`YZx;3 z?CmGO#loWqibGJHghP6@_AQvAfYHk`T0)E(LoLZnao1f|sow9TSQ47PqZ3`>J5e^0 zKrX#JJw=s8K050>+w=FYRRR^o8$)ATtu#x+8#2jhr??Lp{5wnl@dX4Oms(G0`6mSd z@jyQNT~_r}H#3TNn3muBz3OQfCJ{F5y{;Z59clTccs_CTt@w}L?h!Sz@C>Wb-9mzQ z4OSx!7%lMlVu zPH+lS_>U+wz_4|)$3+EJ89oL7fWBT{A2^626Mn?#m+Vlpt6`mlhCT3_ zA}{m58$ZK9jSZ&l=ri`)s6FDmH`e9>S^Xnl95TT^!rS(J3%c4CvifncvjiS(;K--V2AWv$&F={O}2ilkNgoXGM= z%jzjLZVnKYB`~xQ$VyP;Q!F8gxG(6%rMtv<@7CNl>!%0$gxRp+-M$Y*96ku2BKJ#G zJWTaoX#M6(<+y7+4F`>x^qg!CYdfVW9{%Zq|H*2z(khSlW9vlBp|v=xJ)flt1GSmH z07ny+F%&!?^^hLjd~PpD8CltLXn@h-1Iux)aV6<*B3cZo1TK*RAQ7Ep@VzK5L)2^l@WYglFJSHd4|k>2>E?Ulp8regxU`Ml|L3;IQ6Ab_fAcT zBM{oE&-6W6dpIT4SPN3H+9B` zE<9+W>o|1w27*_c9q~`X_BAsPUyy?1zZGY zV>X+cJc-YGdU~p=AU-R8y$tqn9A}|N6zoV~$*nq9)1^I1r+>s1_oF z?fD0UW1t5Lk^M zE{1B1bl>v!*j#IW6YJrJ?`Cv;Ph)vCea4CZ?=vFS) zE+$*F#aWTQ3^^pYRGdkS++jTQv9O1z0#t`|K!~8>6?zw3PwR>-Q${%bO$cwOd5V=wW^#pjWjuIr=tiTKfQX1quhM{H0P!dc@ zCh?{UpFah}h5<)5UfyFaE@2SCfMp_5VYtfCuHe)FVgCi-B({*B(oJpQPsHJt+v+@k zBf#~eAeRRv1vP~>M-+s6U@I`1u#TGm1TA7xh;)S!LSX2TvVI>ey&SZmB)m|_p{u{JB#J#LgW*2PMs)V@ysYSy)-qPU%>6I{r7;t>*ji#6oNT?X$xVhMOME#FYJ~EZw0|Ov*r=5Z4LHcfsJ-*wNz{R_M@c3S6{? zE4Fziid?h<@Xm_Z^#eL>Oe_$iY*9ghgL^SB;D><*9L+Y8ik$R-Z?U{Uo#P)c3ybh* za7(yc);2d$1!Kyx1KG|6YsM8e;C-|YMS+(^{vXn<@R0Z!Pk~5{S!6ma?IC*}r<$G+ z$rn@mTv>(!OL2H?Gw9nCyo4F!#htBlSC49GSqr6tY5;uD`44iAQfn2rE^H+3gid&1Q+ypOei~^=l|s$cejjnO1!tMl-XLM)o4MKEh+8fwg+SQ z$|KUV&0mVkM^`l!1mKY#wL8|Mo#%7PDk>jo##<6_situw0I%T=xPUOdwTXpI)%Be!8hLq>n_!&5LQ zK8*>x{c#&Y{waBU2hZ$D`rkw;7XnP#*<+0Z%p~BThc}9R^&WX#+{h4*vS$pgQsSf^ z%8U!}f0h6viKjheuYR5zb!1aNnIWXBmGo-gtn^e-5*g~mVUx)z z28|>+1;&Ewk>#G?t+X7dD*m?cj=kHtNHX#O z5jR#(x2tjyzA|4u3c18pQZb~rdba0j%96{_Yp(s2+|nnGA8p|bbeXtTKY#z<&R3*#N-w_7KEtqWT6KaOS6TbKa7BbQtx16G z0#lOp-fJRrUI`QvnR&`+tkllMavQgpTYpZp-s}}ptxsK{PwUlLn~`{L_CQ2Eg}hLb zFwVRs>=xHh%8~0B>K{a~m!2seOlg{TxXZ1GtWeX3yVh=Sbv&SUwe5Joq($kJ;V!tm zTXK0@@pJ3Auk_!0iPH&;x}T;chr&D3IUc@BIi;XBF?U?(P?lO_>Ur{d>FviJ>M}V) zSGtO%UGC^Rl@RP(JZnll0(*IChuQl$jR_J>N~B%~w^+GIJqcgN!->gtSS?&~cL(5OnmBii8#AMxBh|ovJH!31%$!B=O5}3B%s}ajL2`Xb|3?&4 zjIlQ{m0Du~X?RL_RVznF|5Gzza@hj^Nb*kiycXVRpU0oyEVSD5#NC;_k?<)sorO|A z<;a;slT;UX7p&?`!JimK%W%N22C}cwry7?i^5*Ypj__Sgj`Tk`h0 zVsN%#Y9{JWG4*Cry@!Sg20fa0Pfsu&Xwbf)aGIrNes&VI3A9{pZHAJW)39R3y$Z)B zR0_DTcA#=Cl#3wMfGK=$Z!V)@-y zy&`*IhCf=z4HIy15Cvw3QyG=m975RdSn&5K+k9&=-##_&=%s3H{~_nnQ_>U8ty~7F zvxgVMU4M!{Tsv{x>W!fwMI0O$Tr4N8n$7og&jmj=tUcmgI#X@6`X%Q8RLSJ3U)hhd z*t|BpSUcWoK;$059q*Tv!w+c@P;8*WW1sH`e{odENH5=$Rcf;o?oO^SF!81il>k0wvxLLd&Qx`D&)-DB&&WB zyAKDCunKuoyYO^A_|}n;m-h!~2IU#P3SWy<<9qiEb@?$3_uqvJ7-7-{pNwDVTybYI z;rSy)dto0MElkmuSf57z#Z%709m0|kggeI97=T1ZbruYJP51_(w9~lqm!5(J?qi*u zvw*w)EZ)f{^2{TPDA^jIgoBW++Rh0mQM0g#E-!lm5=DW(zO7eVYVJ^yYH4Noa~~%nTZ|&K8cdA_73X{ zjAW-F@eL$t;Zw$)TUr9l=wHgYfr!B2Pv9_Jztq;TwP9EmU)2-xdWCO;@`|nocR{l4 zme;DDOZT-HITf%oI>AihGX#CE%T9Q^{igvWKsSxiCq-^^AcQ!NXrpIe9F|gg`NsZ@ zuB4J|UapK*GR=N=!TiHX?rj+vvJcL&M%`&jPHW+CGLSZLbJyL~zu%Fk(bLpZR5nhV zOC(pC-B5z&l+#Q#>sAKUbHe?18ItAA9w}M1BGT83=Xr-a?_9U;5HlR}R@{>YRy*HWLESe zLivLSbIm{mn38%azyoc8vX+)#u;w_NTDC?A{&&>MYN-wt@F1{7RV^9q&_ za0~RP0`XWF=nTt7M@Lb6M(L?X{Y*O-c1Z30)H2iZFG%VDIbi@DvX>7lE4Q+<;l6(l z-#U_eP-zkm>7gVlZko=o#6FhsRF8OJXuUpSaT%wnPfi)f0VGa-x*b(9JGi zG~V&tn7qt)2XwQ$sSK?Tr|yp!AJzWwfobW#`p(1~Hx?nGi5 z=M8CufQZOR^iUA^T}w`;;(7+Qp?H{+hllPX1HKTG(lvnMSmKyc&@FT^v-@xXX8^v4 z(vlJ=k%6WW>2n5ZYH>-)$SdJ{Xq9eO4}0NcxDCY=;1oP)Jwrnr-!6AXkg80?AwfDp zEP@UqDKQag&j2uqIqa2{%OJ4|F7;qmlSk2ees=a8{E~5&;)H}#Ul<-I_+s~3;+sY} z59O+kV5rGqzGIPGT0S$-CgHIVg$?TJdEM>*;#0;vy6mmq|hF&AWUZe{+Hd| zA93J;^!7h@E_ic^Er0N+I4i^o@O}XV0E$uqb6ms4&!Mu%1)P8L=028dDCyOq=|RlS z3aJT6J}XQ8oAt$LYULkr(DB4~fiYUx2|^UgujtL{^$Q~su*mp`D~QOg`_GbARC&wg z`p4*)$F~W zKZz^G?@2A~M1T8AyU>p_p1Aco=*``oGcklIKhxWeMo#qY$Wg_Qa>_qabZoWAuNJ?e z+p9L>*K3=;^E@L%xwIqc_7(;niN?h^_5lsxeg4D7hW;=VcQ1Nn>xw|c-ioH5hEy7h z0Vh(dXck)Xfu0^1SwDdjEwCy#t^C z76u52q#!3R!RV@?;mv_hz;(c=Kqus;|4^Usg)$%I5QOqsBCGd+kwH!4%0l62?Qs4Y zhLgdZefWn%Q)Ms4tYZMr-~7lRr`mOBxWDumMF7k+c- zlOK+F^BW34J|;1e0P-81Z(Q7SoM)Ij{|yNd0CTYTWo2bS3qzeAa)7t1AR5Np#(c4x zE8pb8ws3a*-8MO&PAmTN_j!vl$hl4s-&C;XQU2Yagf)tIyk&gijb;dR3VtG4?x<18L8C2ei~5KjPayfXQ!=0}vSjc|z47vwOA} zcGU#|LhK3np?^4-@VDc(tFf~JGQ z7IL>{78iSGjD|E$K$0iL-Ul28Yo}lALaPh>UIk9=&F+JK>=8r{NJ2x12D0=JVS^Fk z7t9?Q(Bo}jYK$nN1i=UP9k(k+I$BLib#73`JqiA`QE~W=53tLipdTP!5U?S`YiVOc zE_4e^3*HOV^z=k_&DGTvCpM<$gqf*lh7qKofh<)JBq;kZ;{-z$VlExvIut`F9`FTU zfSv%u+TfJ2!sEN=0PRtclWTRoD*8F+V>I6WW^P+NSU1Sc&}pj+Fg+l1Syk0vDDU8; z^!$Ui9E}>uLV^EP!9$+}j^385O_4q(K9kPPyv2=f?#xC_h6zCoX#!d%rHP@pJn^FokJ?5d2xm39 zNz6rqr~y@)#HaoX!#B*wuwPy9{h}fRWdEeA%XKMEcN@#owXEq=tN-3ruZ3TSGS@{=>Z~~#=^^se zrkt`O`HR(`a*aAgwn&V2Fa;e@7;E*YB&~6rkjYz0y+4(=+;>m+AL_|2y3$+WNfe4X z$O8G~5YL{a_(n3xk-SE-SgEV;!}po+n8Wn%eV+@VqZEi$+pWLNS@~F2_*n5Ow4dOD z;Y0u@uTua@{cyE`8*Fg=l6^c3ArS5H%nrsl zh!#^puZ17PgVQG3ClONhgormLDp?+8W*Ly9c#?RJZBQA2Xl_T`1cs(ybwMluQJ{et z0I7=8QWx`B>LExohYn5{;T)o(pHM$zk6|hqEfZAbxD?Syj(I64lHWgk=X_8QhJ_$e zhslwpWTwm=*fXT}&Mz%F7MAqj41^qkL@knbkp+ofqC*&gg-tbZUCh$89DcE%Pwn{q z*J$w|1cB#I89-5-Q@0MDy=_<78n~EdQW}COTHNyuO2=y5^?^)5oj@G<1%L`aa)bwG znp}Zj2w)Lu=VoTr*BBc91fm~;Vpy9IKNp?})PjIJi3~B;JXRNgRp-_aP_(d_gGK!| zrU&o|p?fDf9567vYdF1I#sNbD>S}5Q|MBv=JWVtkocKP|6UuCmB3WxVX0QoukM&BEXCd%XeClU5uS2 z^jAN9LTh(!uGEcZw9aLjG)Lx?i)Z6cnhQockQGT5XE?gsEBf&_mVeOV>L#m_=4S4{ zuojdo*T*~|=e@TjV<*T~K_G{zc)~feh(z1PEGD^3ayBu~ef`7^yADt<25I zA#ZA890TI;M3Yfa2*fkk!zcz#ENBr7nmiWMDkm4>#F}7YU_hxFZcx04(;UkVWydn$ zASkw=1&0&`&qU?G0gL;u5$;4>=@<#Z5v_|x6c31kv=jX)9E5lN{D}kW^5{1-Fn|6p zM(xAg95)1GVq`qC)m3N7PVNf$F!Xhjk%8JP`(&Ty2Y=<7-JOpVyIG{_|(5qgsC3SZvdLuz6g2)vh%lJa! zIgbJPrJ0#k%&BzUyGr6Bypr;`_eF@t$4x5fv|G1sLHz-4_oi7Hiagz3LtIb&p6h^} z(36b9o*k=-=))x>R8&=kL>AoOFhqcbAr^mhY%GFTmhv9RHd-XvF%O)u9VO|X6JHV- zdt2TZsQSdKbd*-|Lc8t#(+~3GT>HusR~@USA6SqHNlSmhxk1Sr5lT#Ib( zzb1~K`_LC{VGV;O#o^~whYTsy;{xFZ#FM2QzT;HuPO&hF95D2WQ1bOu)l9B{W&`b%X@bbR zvHDXM%IdJOq9c#QX;(Mtt2`}{Y0|9Nd^pGUoT*E(?5d=q`?4pQT&|D93s#GQ@m6ktz4{m|!GUpU~24HeJopt@DV ze?#^}EME2S9i+zLVN-1`q2PytPT!E|1Pav_k^ss{qkmjSq#q#?15I4Zctq94`ZCpK zLw|P5{}8^h>YYluSaszfYo|Wb-?X$ny0p8ar2p=h_?8^#U&16aA@n)3LF6n(Att&K z=rvLjr8#|N`{EuL*NSKtypaoc9nLBVJj$-6x^>aTK*HE-_2hFOe<)F~P92qSHMvtd#fihf-?jGf#U_3)=0h1 z@^+SV3*J`@<&H5*Qgi@~V+i+2?(qa&uaxCe!HT^=eJ=E)E5px@=nAt75aJZR0 zsh)lK)Js7pf?GjQm}X?im0M*O^Fdv2t_hue{3-G1MB&2Vi9r~QSrsyKT9n%lCARyV zTMF-TalY)g5h~>g`FuEmbeir#tTbpm^79k_MZ&gu;oszeo7F+o&!GN_<)F z%yJ&%l1mSCl9Rtyss1kO?_*YGflKs{C0j<9NK?)vSnPJOdc4TgAs8FK+h>$zjcMb( zNcw{yLJvVBcgUU661N#8C9a4O6i^Qz3ObZ8&G&ZwP)%N*uC%LkYV>Xd znz6v9C&wyD=gQU@mrF5C_m<;L_T7eWYPu6&w}tyUzE%`ZefD$e5F0eMPd%MZNnRR~Uu7>m$z39;acn01 z-kN2hv;*sxl@*Bc)4><4UQ{czL?`nc9gXfe#qO-odx4DLojD-4yeCAx@S1cJFySV?+0yM9tK#_#$U1>v%^lhoOYNO3-!8 zE&_{4<~jHkB4_w?iHV(pJPG5B90}by7P?M#$&wD_T8kOlvv+5w4kuar${LXtdl+ld zM0Q&xG%v)Gk{qUt;E9hd&ziDsNRGGO`4i$ZN;%V%@ zB>O^-s$DcgZ&hiwIwHTk>hp=5muFTb6ppfJxyGa$iU_;fMM?et2KBgm~)cZBnw&s209VlH!XF zC-bEhFHP`|717zdSUmsjPslwMML1P(I}{(C?7MusLO;cE9OKW#G7*9P1P<_lXp$AM5KraOtu1U2He4W74il zm&z5TyW7cbP}{+X!o`PF0ihM4!NL_kJ@lyW(ITs z{#sX-U9>SdxtL2P|Kf(Hf(ry?0}+>OZdQgE9oE$$t$Z7g!}BFmjSB2gg~BHlv12-1 zq9uMvzQzH2`g8?^-LK9N!ANI-8bF`$$8cA;y?8G49+8JH0#ZLM zr;Z1dIBp(vU*hVx)8T}{UweCS2w=X9zdQ$#dwIIg*C*lU6p4mek4)`{Kd*df%DI_0 z+P-FF$d$DlNszFgI1p0DGCe%}9aRcGoFCjLG49EZQ42(CLB{~<9Supy6gpFQPb-~%<$;k#ox&kk z8R(;+U!pFV2EOED#m1k^i0c+PMmJpU!vW0-k{H+pcKUq(7-5044PP)6Gtf|N0&O#c z<&e;bppsG+A4i$^wUme7p~U8eQ5|5qz$x)-O2+x6{eku$5C8r1-Zg=SKnJ=J~Pmz0(Gjeab``T^#_3z&&;e}`P*s(-F{$JvkD-QZj zJ}w>u?4rM*r-A{;zq>pYr=4<~#C;M!X3~gM)`oJlvtBx#^44L?<+D-+G7`0wOWrU< ztiWizUdF5sjwBGHwKP1-n)-8#Gb8+aB$^LH&cW=LdMKf3Jm>wmuW{)Pt=}-2RbG#Q zld8`xcT>UrBYx7PMqfw1kfpdUL$^FP$HL4Up3BB=uF?Ex&1`FB=Ej)!1>i-H=j%kI z^31oSTJf8GD5fXbPv$ZDoE<`5xe1|T)z;Gq7V*9`$xY2s9v2syxf;Dpb05ggdOVg^ zakJwMz4~z`;xY7HzGp0k!v%bPbA@yr@s(wWYFhm)aik0n*&hJn&;yLFg1KW>Mdl}l za(^97BR7}ZOM8Iq(iu6tGirvITUtfKX97-`2dsX#a$R2r&Vl z+{1VWJ5P$e5_U6iPpZj7Z36}b^Lcg{2`L!k(fEXN1*)ujaALuaKy79DdlLVSb=8@S zCI%=f@$f+ViM|Z+@`y%NIX6e{HG3UKc6c_}lW>?hQelI(M}d>5BwSsCP>PjyOEkR~ zQ<6^|34?&HP%Cx`g6x5p(%VRAbZ3F#uG*q9g?DA0@;MJrPsvOZYI?_!aIICendq`! zjf}K!&C#t|(H=<+RZvtnk#nv*nZe>BX70PEaqE14@xLR4fQN5!Y-6<$hh;6hZ5 zF_$HCE&T`;NPzWi@j;U~4z_c5&#|7kJTI<(!DiBGM~A(d?AGOCMOqz(ME5H$Hx&d{ zj7+DD)H|+_WheYLvG(V9&DTGc{!rs0<(N@$d5UFp-hL}}j!HLhu1YZJSa@1&BZ+Po z*aPm8GiUCZi4ryNFywuJE-S4Gy%o$jJ3g5`f&=COI6XUxB8u9~DjDZ*{>e%)f8#|M(>5|2gFT&Aw*_N(IwhysWiT zcSx+*l*nK5G!H(xNPnB`?q$~Pfq8L03;z$UxF-ahz7!s$iqJVtO62D z_NUDX)$I4`3H+fCIyF%fUZlx1+66~aU2s-M!1ur+rI$t2 z79guc|7dtO!d>|T4v7DPf()8SZ}EX?gYU2c9FXvTqe0b9w!z$ASDj<^IP9xYDx=-; zfdLC(6I@k{jafK4Ow7&SHTqJV|qRyqaQT=2{1b&{oH9@%{Vl zBr_GO7fh1Us!8se9{$;`U7aK6c%EQw@ST;hyvqxMtB!9|%C+`9r523+N8-kC$W$N_M=J3zacdOUCevu7qMXAFZKYij5Xk<6wd1h<$rv)?T5NgNy<_1>7{3 zfR$nYCL|@{p~qQQ>_PrAzC>JcIJgnj*N$^{3tnzu%rTk-{uN{pNPgr^GbkJ?wB+mY zd6r*qa8=-R!uSG9LDOUOH`R9kJA+#<9W5S)cvxCS#vi>AAS4V>RM=KROj-|_Tz20d zI8MNyV0Lja7as9zA5AePHq`dCTD;-fTWnaoF~EWt*joe1jP8dR7=p{)u^Qy-z&^XG za#RH%y2!}L3=_GDd>`(k*SHK&B4TulsAR_efGsI@1Kg-lkidqw?f2J1pjEHFbRauk zZ3le-0PfDkcvj`YK{{|6&9J<)os%(QD!r7dSQv4Gvvjmqe(Upll^4GT#|cuVmvto- z@f=NJXXEF&@hM`kO+Xf&uX!}bVIR=lnnm`ZCYirt%4<^>Bo&rmt&_*m9qAyR-Jp5 z&=c}a^6T7pC5Oy!Dqa0~B7TCi&KCwxY3Mj?Ow&4iP*MslyclNN@jO~ZnJLS*##`$* zr_2KiG?85P9|BkXP9+{?cS)!^_dE2>oH&`!+n~V*PcBu`?a;27ZG^1}``mh!-RWp? zG2ZvkWFYy=Go%rOgTpY<>voUe7QHzT8{}=7NA@pa&~|?|8SU2bwf|&eeX2RsCAuTz zVvP2aIvY8ayjMPS=tI3WH_O&7IMQdGaW(xbp4B<`&E0{Fn!77oSD1WTZ9-LBiv7u6 zXg>hbJpv+vx&>?wqo4Tfi$Zg0HAc%fPfvFVZ8d-C+T^@>+vY@k(j1M48RwO3)>T6z z33v-#-O)*C5z@$AfsuojeFD=T%jGaao1FBrsm_n}^8W2OE{XA{Sq zd;Q7J54?4BEP0Z)F7Q>^=!HhxHk3gBCwoBn!)8cbFK3L}_J3iVkE;I-h8ZbZbnxds zx7~L9^~;1QI!)1|Uo&onFJ6*+IiIOe$6bcg(mFSTrNGR;dE$s2N2oRRg$t8u-ANmn z*VNXnZfF-sm*!GS#F;F;Olc|!i*6k2o=TJCh)alYQf>9 z`Lx>Ko)<}1kXab#4g2+8R5+b*P=_xJ&63B^_|&&Fs#5{1+BKdD7uLK?r$t5H>QV83 ztwnL}{{obS9`g!;|G%f@3MYQrafG~?xJRO$HDx7G#Cp|+8WLihwfLYz1IhYVL!*SL z^xON`0a-|~K52!^F6&o; zm&aBXgbz_3|)>oAp4Ev+btm3U(bT zXD}GwV5g_Rjl64=S;fV$G77_c!kr|TWh+4_T%H2x3^N*}kfEh37`ljp3;b)88gy2g z=*vL9!i56jew56$9=$A8EPK_D|BsI5Riy$KNSuy@<1W!s5%?cmU22}V#oRv2uQx`j z!N=G$d}Anl>+|}*?dPd!r;4ac(t|~-Y76x4Nw9I2XgzvYoH50imIs0Bv79`cYhp}& z8&+uo9WpO`ef)q**m5=Uy2#PGNl$zAeFjkgMWyRY`Pqo5Ieib77)C2w1H3h~Y!1MZ zK|{fn)Iun=3PnGz7?h{>Ye5}!zki}7cnJ9i`Yeo5oUR#8q@@w#Oz6HbW+=A8g>kmozwIwsVerp-1$&ee@Dfd{~+8WH7=?19vxcfR8 zRI{BpF~>p5T5yAQR*uK7@;?~B)>0o>2ked-`(j)9y4S%!vuLp(tD1xtPPZ2y^FA%o z`0JnCJ`iqwHx6dpB2$TXRy0$VPlo*h;D2&TO8g`=mxY!KpFTmgJuWv;*lBwo>)ZLNEU$IcXIM{-Y4gP(^Mtk%A3SF0$SmZyYqvKu*Aov6Q{lgV0UnxO71Q0-L`M-1L zR8T{phr>yYq5FZ40jS*%K6FMWw+RxKSh^|~=@hPF34))6$-xr{SW)vu%k8lYMcIf# zhsY&@B7uiaU{8u5v{@i|zJFnAjbl zhkYJ(@56q7LHYz@kreU zvUSO-)p4R^mYP0b>|7-k9=M7uJX8m0aSJPsVelA67`3w}U5(O?>DPRwX0)pN3Orf< z2m7S>*1))LCz+sN97}G>hlp_=(uf%_y?FHS=?3@t7scXxs84|c)!M5;NDdP#Of16% zd%!~uXc>{|Mac;R8Q3f>z(G`WTQD9{8p0ofzEEm<`Vlj;>rnH6szpN#SO?t-kG1&j zURIPz_#x;0KT#0E3uy@}$Je)N*o*a=9$p;nh`$^D?D~%%M1BrNsHj?qa_^IU>|XEr z_Uzd~?vy%uV0=ilp<$>UfdX+WcnPHU5=BS+{QuyP5bnsftjW{n`Zt**^hH#0_yJ~W zl&tbF9)!|>DCUEMs)wAkeGMUA3j$-PrB9xVlpojZ#RD0uk+TZvTHXx7XcETjb~LM= zzI4y16YI?z6NyTGzpeTI(R3bQIrr`VZx6Inq;ZuZ6d_5Gv`bP+k`cSuSTUQsh zXAB_c7X-~jF>RAMU{Yi_;&#SzIF1UxEk>jA157eFDyh$?GIzTi=Rux`8cW+6X6{~W zq`U?0*mHY0CJC$~jm84;7GA77K2%+OKL@Tb9h|$D>Y8Sq(wjzclb4s!s?XGH!;eng@V@yD>+_U^ z{7iFAS_1N%!dvjN6EfTf`D608_2j9#cQ_!r9y0Gb>iq5K^qI4UT$y{I%HQ)$U4QSI z+Sg^)`gg2OjdodKJtt_(O4ZQz;yK>-$D8^$jZt0P92k7TzbVUmP@(O)wVex77gfjP zytu_s;`8&fO8WuHYqdlw3XST0USeJNHF4F#>TNYR1%l>sHgXq*tyzOrK+c?^kqsbM zmXjtutEy@TLja>i1S}9_z%U*^e!u4``FWaLzt=$y_zvuG2nd)Q;f%`+VZ52yT5cYq zFM_hVe)s8cgsssN70n`58#VtajWa&9;K_+Ltsg)B>3Zqt)rh+Swr%rpJi+vwmxe(H z;~7m24LB+=4-#xzVQZkfVj!+=>bC#RsZp0IvWo8l@DFDr_6AQ$c0_W#Y%mOQ5c#G zY+M3U!sS%8wQ(n^`tl`QRqG#Yf}v2+>hT&l6=n|KTN6mw+p>ndR(hjrK>Q7RUW7G)CpIfKP76 z$Q1OHPsQDZN-qygf_n+Tl-^AImlc4xVAQDdbh;EwMtB~Zh5EX<+=1pOCsoc(MKe5} zKsshzIOkVXR>I00*l#l_WX$YaZm%>y#Bo9#pVZ@H;DO?OWv@*;Nlgh?jlY{=7{MQ+ zOU4_HtkomJ?EO2doxCv>EnLu zTOKK5?K3qKCC=LSgu8x7%{ClzbFS=k=f1U$1BbV^XYV;wY+R_eSHtLZZLeHQbFOF& z9!;Bv-DAsZX9lT8#g{6os_O4`;i5hDq=VNazN)`(t{K<^NHaGv4Yr-!kKXcsHYC}v zpY*Bx;kWBk)$Qa4hBOOZPBPuwy%^L z?y1^;il~Q0$fvs>f8F{$@l#d)-99-zuQtqk_^+~`rc1_;w88TWD{~M z;wmKab~*_~y1JzgA3nTw>*VRvcQBIU5=@>734Dj<1ZDfnq-4GR_%XWY^Afd`age?{ z3#|nrZ*B7}Zx?N(E&#|c0fMB zS+|h27a8emw2v20)B}e#Z*Je-z0Ufn!0hB@kS@u+ee2mXt+t_7|J+XM#BDXEuI=SY zYj>Nf$=*ZA$Q|0ba{gqATV<2&WIbOT^*1?|d+mPT7h4*e{+#_-c+7Rhyb#&5?X$H) zSGw9=n=i3WkSf(+*3e^ibl}^|r}r~hLV>&6DI_TPWlYII3zY%ulg3Tkyv9vCX=Brc z#J1V6anF{TYD_y>t1Ca3!|~-yaS^lpMx(SUAolwK-M}{69J1$*luojKlFnyt`x=?< zdNUv&hN+^q@;)Cd3PzQ+hH*x+?wRC>=1ZTw%9$>h@Vu&On2Cvdc8&FD$S6e8V>N1O z`j{!h#{Oqh;H2Q#&Z}5-A+Vr{X;Y$&hr4?xtR%!h9KclCcgfb%dWW~Sym+FYRJKWBM->z#eqldM#UZ4>1|Y8su1@p`{r2l@FNoItwr?`45wWG zyHN5kou{#e9a0sMl$*mH2*M;p0%bhd?)K#Pg@5g<^1tnYbCbNk&gqo|4n>Vr-ok4w z1R>UJAa@f7NlK>0rW*bGNM@bG)7vk3=ltY@^z&gEjUj)a1g5(NczQkpC(gL2mM9I~ zdznPj%9aflI_Iz07OH9)8|Z9Y0@){PqD_@$rJo58s3~i`Ohv5qW~an;Qn3=2|9Fdh zYKmF3*h;Q+)z9>+QKEHa36Tf3FN(xMQ>W6kpY2 ziD|RRDm>L}aVW=c_|V2I@jf3V65NSnKpF$(@M2A%-87%hU-fUS54{%M6mamt`TMcQ znst5TES7m_D(;B_Nl)?F$bSy-@acdpj|{qu;4zye5jD4CM+=eerMPUWB_S+6#YLKr~JTVUTEmaOi& zkOD+#*g;T<`_(049j-g;$3Fg*9?^VOrr@)!dT(Cgu_LvgmZfM*IeKLG^=9H^Yr zqtu)5zPw^X#+7je#>-}&IWOMz zExw}p&grI*l^^F>J~&wuNLER%_sf2jk4MG*_gy9%*J~=8TupZ!a%e+b#8h*eKI1df zRWoy(MGf{`DXLFxTCiJYwTIVsyOY7sH1GNb-%`7_BECTJeEuneHAC{31>cI5d9^(_ zc=h#Z()Dkm!elB%r~LOlbW)#h>b-`&243Z61^gQ_im|ndEh>h8mg;MW9dZ&|v2aOl z!3mSR9Sd~p6^>QP$_Ldp6;&1_^j}kESx_rySC#<^{xAf2W0>xxo--Oj?Qq-0vN9cS{y(qVK)c?Nb0`v)IhtOwAt>Z05D6Z)KV7Pimr=)r0 zuf@$-%jF9iv(!(e7=K*b@qcT#^GIQfgz^Z1!Jeqwdu7+IHFv4g@Curd^5o2o8B_fR z)LR63tSGq>+!ge#DKG!i#1wc)#}e0fZ@l>9LrkD_WbHVg zUpLkW-bK1E7&s}?^y}SB{<_tX2ER8$B{zjgjd&ki({-cNS1emOFs9yOo5N2>t%4tt zlOONxQW*5+ABERZL0@KYT=YtN53%!c*6Ve&f1mtYN3z!GRc}P3T4Vi%l_J9mQkt8N z)BOdKGKAo0iDpjS{$Gp>GefWZg%Iv>Zzc4;25<9c3`J&{u zQOi^Q^b2V5X-dOI`%T^lbH8r=#mv*FC&z~SVR?u=?U>6XY5}4||w==__uIi=gQp2Z|A1IgC ztQq%@!p)|ACGJvweG?Npy=25hd?NzBTrX(UQ#lkNcjIrZ+-Y;HH9^_1aO3(9o$f4; zb1=;@M84Cf`^=nSb}zOqC4ceMB?k>N6H{H60d#JA&!6VEB$l%MN zUFB1JOmWI!Sp1zrh=$U_++0w!>-t|77S$)}OD|% zwzUN^?3ghlzFB!it8Qn`u@O%^?zV}(2racI|5U^a(?xvoJ>x9`GN``vO4BNfIn?MX1M5>I(!dbU)~y0x@KCJGppF z`hU74x=8a?#G34Os_-*u2q|z>Hvr+9(i^E)C(gsuPVy9D>R)S;9 zbnB^p8B&^sek8w56iQzB4vJb@8*#T;y7Vpaok*JjVRErW!i5GRMC@@=fN>HeX>*rY zh}pqgFE98QVeUY$D~o`TXs;KC!Yl(_j8*%z9*b*H{x5xAC^m*RA9mK&**P6Qrj$x} z%MPeS`8yA&SN0+0$d)|?kTc0HMV2cXly)fNE)CTa6LnIUw`s&Yudjs^Mv9s+i2gY>p#j6V&Ysx-^BEl zCe$uH8;;8ir{M`y7ROu zDs@mn)_}*Co#n0Qb|8uua~S6xn&st%b0N{dq}I*Nu2GcW=Y@Wdphs7)UKNkl#g4bs z?;<=kBeg;Oq~w!kz^ZX~&!}xjFaYnv`eZFcwKHeV;9E!^&Ot$ZkCQ&md&Gxkx&tyj z_aB3YB}Y)4N~ct~-10MHmp?Usch64NV9)QVBUCCnoYt>Nv=NSf)KX^7o{cljIKmsq z&#G+~V$UzT*#9d4{NOj>6NeCD8tp4w8~-s?uU9!0qgfAa$jjsv0k*=a`V0OE3P*?& z!gweQm##;2WnH=yK`J*73A+hkuRokpaBWf$>htW7D-AI=&c)?o%$UzWC}4%7MvOqt z`1SK=->YkLo%EZ85~Yp5fEv~^zTzK<*sx)2`n`+{L3WKyW3*k1LhWeOsYqOxEP2h* zKy;v=GEGj2gYUd~*B}hCa!|Pj`1`Z$g!7`X>m=m@gI2Ma?%jhuwr1TrOi_b8JZgp> zjS|L_vPM!W|Aw9S>Xkn{Z8{(NL9)GCT7>f?P<){$87aEVQ1ZOjKrB0Z_C10Dk|8%T zi9-J-#2IP=TaK-P+Q-XA9E9Ri7`zc>wP57_^S%Y|pb@dVH=@5}{eu-@+RYqpG=CAk zB*)^~_D4&AO<+hxUb8|3$;6LHHO>-t82*DBZ{#%$K3y$!C_QI^yulv#&!g%4VU)_5dmZemipqP$arkmjUiql&ShCaW`jEA zh^5HglU4o}{5p_aoNH3k)7#&_k7Cgw=5sx4@fDzw*$v>$D#(ue%N<(zIaoe-Z{I#( zxo$ZFA*5#X-D~j-fO&O}5hDXf!qqn({8S~nd*8mb;5hGY*$VgGpb;tw#fs-dcS~mM zSeWCoIpSdPLX!bf@l#ILmNr)Y=N=C7pw11hdt+d~n=lMG6Ugbf0Gi2eo<98{sD!e_ zXdeD_s~(9HPv|mu$=s@xr7}A}OizQtb50%i{MuHtm<~;13Rwtn;zXZ}BdgW%KZ;cl z)_#EaNlW=l$(H?Bjuxn{VH4pfDEy~@qCoT5#3*sFd+|QQt*Ja{kWf<1zz_n~7Q3vv zAS9h=Nk_z5n?M4>a54D?zY&3{_*gC*P~FL^-)yT~B#e+l`-oB804!gXw=gNg$FtC{ zG>)4NJ~cZ@pPJ(=;R{1L~n#5g>c8p0-a8OX;@@E>#%ARxQMiDA5xMSOR{(Ec8B}ms;U{Cos zLRheE8vK`ImU2m}xP-$(>*CP44#kO6c@leFDqpW+cC4tOVZn?C@4(X2A~A_f0F4kf zV^IxEmy>gQ(S;nZ;c)`UN@ag>I9spEehUXGXLdnNAZgJOQ$V_kSMFeF#hbhF>*G~M zc5Z)}Vtt2$$zGSlj7N6HF*50{YRbx4PdZpAXyWd*hKaNwIp?}5z)GDdC2lv#F{A*; z3}%pPJ)RrFYj|&O|08bFlTnZBo0?v{a)r&nl_eW9NMee$Uo8n!e+6Ce89oBPi%AG* z(d(0zIvx@mrGU_oMPE5$+HW6-afDamWs;qh1qT2My^&f9lc+PpRQp^~H%g;=DD^YN zMG7z8)922ii?j%=$xapdE|>g9HqqvP%XsOKLq;(X%|DcPs|t*Nk3N^UNI+Wg`}a>d z@|aK}5L8t1?FhdD=J4k2TZYPIb#?t0_WG@|OSDt0jGH$xdP$V7{y$|hnjD0s>G-6tI4T$E+qtTqqsuWA;2RW;EJB4$>a5IFz zd%TRzXZ@E*Vf}P_pDyk6`vKZJg+A7dR;6(Yd?yo3ay60S>`Jxa%xO7qaW%n&2vH!V zFC6HnA!dx)%d7fdR^K<;+KB*lxDe}Ei70LV4h&m&X-G+La#7B5stLSHD5|;awA2DUrBZKqvOtDAezz0KJ@m~^`n;x; zZQBmPA9u)(O;$PPihAw?y}+9{QsWsPxsf>s`|6|#XhCWg~fVPpG``Sqn;JZXT$ z-_k3(dwz37Ffru5p}wtq{5Z^9Gd%3_s@F6>Qz5XBAIgb(5X<`k10uLXC>A;Hg~7tO z*TzUp=~Vkt;CVw-*tgsmvJH2Rj9#XhilXJt%UjNtw1zROguaTfHIb1eM*EbZL`8J7 zsDxDnmpla&8c#Iyu(}EK;iBPR7Ru7=uA(1js>XqJZ5`c@fV@ydO_#)#XD~{=^6`XCTEn3~7~lV;@;r;xvQ~ zrL-@H4yh=*({Q#mVckS9m&qEc!M4(UVe7q@GA=JT? zFM7L$WfUURT<=Za8keG!LPp9(O99w&j^p)OR1bLO4C-UX>fDw6q+T+E;@f_#J^7He zDQqaY9SZ|%FgNQ@E9~Y3CRDkI0in&%$-8jc#lRbXfhMW@45`^4LSFW}@3vbGPvO{< zmeWYsGypVGQL&m^=g#Ck4eCRN{gqS}oNOeLdHG%dGi_M6rYV(#V_Bam_cLJ##}T*3 z#o*8~AXm~VptUkb!z?S~Ce~t9&c{64g$5oI=Yt5um;Qiaj4?4PcH(l2mTMhz{t+cC zS#_`3DOO+)!_W*nvUFFv>^I##v;>5d@j$8P5fQ`EgQqnAnns)#zGOUYs2fC?njbqA zHd4y)fH3{|^4xRS=bxHAd@psvFf+44npn?Ms{5`nnh|-YaP1G=YagS1AI5*n`yUs; z-4MABEa9*OUI8;`=AJP_MVpx%@Pnj&ZLRW$J5TXOm5P*}D~Cy?Fb#}l&oD5Gu`gFT z767=YK7&w%Xm%7jDVF)6(Tk;E*>v}S;$ra2A7U%dAgZ}}0~8ggFGZz(KKTK1QR5WP z35!DRFt%-fP0jaj-VE96Lfr~W0^YBd#bGPh>J9#a^JRa;-J<1Q##q;Qu}c$D6-M?3 z#_dW=i|?$JaJaiUas(HUxlQT2&Nzvug5V{l8VfyiWyIbk zwY*SEfpkJ85ML@XvplGP0QGV)g<0{RM_n3M3>MSBPh#gQkqqni3Z0pDdIRx0;!Wd< z{PyKb$bbdDxo#)pf2-}kn^?3922-m<{cLfuNOq%i(qLy-SD`fnbfMrurce%{uV7SA zKOA29SCO`qn>WOMUyV3fC^}?MVQG`p0!4@2NlDUoB;si;{-qwo=$IthcihS3V~R9- z+Bna9=$i9H^MPpWr6!rUoO9iGwE&th|3P8)tac( z=CM#Nrd+P`E?~!j7ao>Yd4O5TV-+t3PKX_W3|eM@*dUeVb7suQb~jYKHoiou^`XdV z`B^6jyB=`co8*%2)}@Ff{XVdq=Z-8Qv^*y#S&&TkNL@mM{%U-u{>3$p^7^lpN{`Bk zOu2OR>XQ?3qm<;A)?ZWHExs_XZfZ(fe8=&``x1c*x6S^(!fwKCslb}sx8}@^bJi;8 ztb07Q???Lq>Ajg77S?Ww_ZpV@D%-BR`cvoO!|Lu&q#iFTyE4jFIGs$CSUxpqL+r)d zYSCAy0A~N~Uqu(TFzvz1F7I=58yPV&e>ya2gPK)BzQ%8%`!|0qdt;<$bKmd<6Yp>S zG5CGawUSIViTZDG{wYnN4dFJ|G>J4(QBe`?BNOEj=$uzr`7GsQv!8r&S(y#x1>~dP zy_Jh-Ji`KQy*k3$j@7oi`){@gZ+KFso^%mhDE+ZV%E;v4%rT-*UMS31VEoVR3ubeE zbe8{9G*bTTeh_*43lg43QbCYA?Nd+kb9{neCPFNtde(VjN2-Zxi)|26+wOFwVX$177Bxtsp*7`Z{cDU*O{Nf&ugitD&@7KHB8eNrtP={<3Mzla`1;sa zSBdXj*5X^T{^d%WmQhbg+kF=ILHo|)+2cU&!^ zGjICF!_WQXWy}uB_4hLSyw6m_T(mOb!__A{crFF?sXsTH`h{%TwtK;?3!yVoj&9>K z6^u(cb-sI$rpk$g)W}2Wori|H{cHVGddmQ@Thofc|4k(dmdTE=>GSA;Qjx(w-zHwX zX_=vrJIdzDywFdp_W)Zuqu z+q{Z(J9(xqDA)V0pGk&^TBuZP^Pqo-buL%y@3JXlWPgF|ZF}ld3#ZImwk=9|_BTQ! zlyRf?i@qeDsXXwJeO|8jDX)?V2{K1!{4~+euo} z&6mk&*qc{q9#`lZ^`I%%EL15=LT6Bfo3>Sj0-6qRN<3X-y4b}_rq3whJY#4T}GgpQu(5- ztpRQnAZB#GoJm^4ns@3g;|IFGezli4Ti+O+H!j^3Y_dW_YxAZPrO6d905UFGm5*vfB%Fz$n4pTR35F<_PQ7xystfak;Ly;EKpE2iBAm>1XC(g_wRq( z+Nz|gnvm)#F$E`2j6g6ovi8*YA)ti%kGonuxKG44>hb;i_h)CnL>R=`&jIeW%iZwo zsZ;HAZ&b`A_jKW&`Xdp)D&fK4?dYco=t>Pn!)hlNwR>#vYQc_Y)=P(37V1Q~l`0vu zrIgpY1+FdZsnnhGMenv+@3}5@-AoU^=%KCCVwTtrNvnHfZJE9QmGzf#*tkN8m_Of&E?X+z!^bBA zwj>V|dQx8rvHZp;UL)ZA@6K`sp`6mc|IS+@MvRzK9I+BilmOGlkOz0~j)1Q?DKJ;MnTW(yRppEsk+qwWTwJWuWWaY9ezvO#JIlo7_1P-O959 z`GpLZ5tr33!`Gx>uHj*+v7^d->PIhD7((MgSBz_qj)bD%p zZuSWJ4FE$hEU-Hv{gxo*#Smv{-5?4H6`3Hfl-X2EU#Uwl>j&EvisSGlbD%i{$pgF_ zs29yxe>#>1tOoky3<)2BB56+_7z6P;*%B+KO`8@K^_xA2;TN`sI{o{P!+ZI_fddqy zhz780h5K9tGaCaKVRH`wt&3oU6uT_6r8h z4m(gNd3mW;_!anmVCF{sZ@q8ny#uYEK4BZvkup9utQM(2dw3*>RQ0tR3a?_zTT4FD zhhPml#LzJ3@4v|x_|0-;Bu6448N)m>7JU4;s-~W=i4%8Sgoh3w*jLR6iz}Yf_s^fv zWj|(R(;D-G)D^Nf4omh`W6TBkRd%Z5W$QFQk7J)*SrBb~|4hzl);{t>vh$$p5OHrY z43dGLA;~go%=N}PX2}?ke>yv`-u~O6SNaJO*DnPhRon^H-MTN~YkZ|`pV=JP0-d;W zMI+L|YvxSdK%;~Av2cZSy3duxId&>N&Dm_lQW#}J9~~QNuY@<&Q@ZhzkywoU#ND(9J`* zD!7UA@w3o)_pF54W_V>*M|D(G*i0n~E#-IaxHPzz|KwZANyXO$O57~tFXgyXnZjlN z`0=9QzyZwjzgq}}?%%AuWs7xaZz znG#xDTpVV4d-zXK7+f|lb34$aD{Vc@AAyF#mt~r8$&Y?fu?3BVj(J##p9u*l45v6T%04L; zT#H$(x!plL=rL8W*})I5UPuwXgQ@OjGP;(2BW;t{t6nQD_@SOubSr$CrD-hxQN*{2O<*!VWc%iW53auVj=2vvUcU=r|gDkfRCe5pPjLg%g-O{ zdJ1v73-Etcm8jZ?v?`3z@Ww(+1S1wkCg2~S-r;@wyxrYJTE`JfghUeb?XKs{nf(t4 zT^8sb*_Q_{G9^S+&shR}n|vuGP(Pxq65fP;FPjj8hKEB1b4Fpi$ zG2-1^B4SkMI%F&aY>Fq4Bo->Na{d>b?>NLivBG{~s*kreZnZgHr{S$jlQGhQlU+PT zMA?LGfFbSL*wh<8x>oxLzS z8TOvWecRBVXJcilLQbC!;u1#80p7A8y61SQUmIY)5D+w7HYTFeFTOMn&YVNBWn?0gZS)EoQ-(BuUvV-T7U(`W}8erCvLbK&dm>)78z;r zN|*5#cvV4QjUJw5+}}*vVWtzKz%cv}Ib_3!zoX=Q9@RZf`0EQpWYZNYUWyE|AX*MZ zGLuFwL3xa8F*^wJBCoC;g1N3z9Ybf(3*9N6Z&+>^+r9@9Wi|DpXJ$=^iHXImRR}Ot zU7d7WD#%G;_r?QHs+00=Ub=df0`%bhfEWS!Dn!`hPgb#zw8$UawtN$Dd+j5G92dx4 z8Re2%o@Aab`97%CW2L-|zp%%|L=B)b&9KJZRAHT9>o&>)>NwdG_8fc>Zdg%A#o!Fg zAaUeKgf;;XPay^}%Z(pgQ0fOpVbb;C`Hf!Wa2P5$O`VF|8<&kv);yx1S5GC^tHve^lg2h5hoO7&2aV{29q&abDe3%Ll z-~RGt+MYe87!Wc7LmuK!=G4iPFblkLy&3IJ!b=Ani%}*+BedX5Tt_Xq9ztdVb9RP} ztT5>4LYWrBDn@lbfBxLJe?QO#XH07=XYoo5YFHHGpsGL>)>md4(qI5vo_~aRt7&*^ zGYP1^Pi%Q**aNs*IGKIh-i3VA}|Lm`x^ZJl-R;d`hJ6Z8hSHh6buC ztytfk6R2&V({(Q)N7QLx$Za9N0Umlehaxi?rqM~qYIf<`;!F-+it&Z2va(p~d#d4S z>0|7T)Ew>XRQvazhq>ymTE)F@x*{Up$YwF>75{6vy@P{To{gdE^5()^XdmGALN9y5 zM*+6ExG>b>FweMPWT9fcD$Z+{Xxd_;OeqYZpMdL0u3vU}?mtX5c!@%f3ow6=Q(nnI z`y%F?iyc|!KgOfu1hpJ_SkhKW&AK9^Pmj?1GkdQ69Y67tcd?2Q;=Z1qoCAV;$$vbL zdlG^AjhD^-9Yk+dv8hGvhve>-p7me6+SXRgNsXBJCFxjc{7tJT=Iv^2T_WFi)-RiQ z)mbsY`wY)Os2BpKXReHfL%h){;bAnBSVGll9C)WsIrG@CxW<6aFhitGp${TD>?tuQ zjJAcMJG5Yk<1Q0EX6|X5D1PuhxpX2HzL)3z;nLVXVDut77Um+t-$nt+6UU%|8gVqv zs7Mn@p&jh6^)af`dgjbJ4gxme0;Y*P&ntWbGv8 zlrx**$i0r4D@Ph125CS(=K~d@O&h1RkZATEmACw9vM2e`TB;LLxxGA%Kjo64U@vB9)?j1a4#*gt)w_kSQ^{|@m z2LN33wOLwKf+?d@VH`9UyPT9b_^G6bc7LweI&#<4{@W66HqwSU^3KZs-vONM4(DWV`7-l zkA;T#jJdxw;X61S-3^4KITXIb&{8;O}a2*v(KCjzWIpA(AEDH;m4%F=rS7HO|k3 z>xvqYt!=8Yor#d4Do5LMHa8QX0^d;LcgUk-04Qpk`J{tE!23j)0~xzyHU;<%W!8d4 znxT&T1m#4VOz$(uE)KZ9f$D-65A%G>z+Y5JaBPHe3a;5TWYHDCd}30_6a`uD81m0P z*bLt*_R;pZr|5Qz_nv!Qj=LNevlC~|-SL%?kETps1o%IZuB90Gh>jKOLdhaE%3!a{ z*T{b@UU)Xfs35(s?lpCP?)@WM#R8Y-$`Z2erY zr;ru2a^;kNVx~DzQ~>5+J`cRnoZ~SV+HCopOn0WdffJ=3&X_s#_1m}bH>#<-!EB&b z%p-e}v3TW+ty`JUh`(+Q+lZ8s@|vTItOJor2OuSgN==$wlD_D|fESv4V;LxUhN_&o zB$Uq@zE}T%IV|@o#|7yvbHxrWzxa@GmJsx2CwUF8ANxVX5s@SgyQT#OVS4%sz~%J}fq^A_Cf;289iHP4=H1VxFw_75U0Xf|-YxXq~* zfK7r5gd;Tuwac0d$@y4)qxa7S7*_%JHMsM^F7~>tf#F5*gr_Dq1l1s8)1mtMcJ}s} z`vx*1q>AL$ht@@X&zeM$f1%Vb=hUfmf_pqXcH^9jc8gEV)GnM70o0`AJoa_OB~C`V z6k>MNVvS37jnJq}7=>{?YCSgeD_3^m9>uCQR+}0TVeWrmoW^}FJj}B_F)!q>Ca|Xd z@nf2v^K*(GJby0y5HtqoPM_vHd%}N#Jf)pe*kb>ZPD4p7<)wS-xH64WK&{++-cVmEtzCx^Q9eMf1(tpQ=u^G?D?IOV@Ps4XELiR*XP0_RQpUy z6E>8}_P;E%PAqbGgg&(+qte^qG$~?*Dt_a5@ijF{F2#^3>8>t86BxO_S%`W(yF$1j ztDV!d{HxLf$@w!3RfVN7&PNNFBXfijQVbST-P2#qzF|n#;<@a6wqh{zXDTaCPn%-< zL)ni1>BHK9Y#;QEycP}V3gB&AQhDqZU)7ZO>U4CL;o%pp1u;fq;gJO9G!z7@Yi4e9 zcnNLMZv|vbW)WA&o-HXB>+cR24c6g&vKF-~hY=fGvLnHDNH7uayf+ALTkPuU>V$WB z(evoOwVD?T$Q#7dDDa6y|!Ie^Neb6ZeQ=l)h>o3S(5vDU66qn|eK1lILSJK=6CkuXhz)4zL> z#fATI0s8k}1587SNTbdHMAJ;aK~(}!&efK*M!whg)ZQ&j-TNiS$6NQ?T9Gey!=UX% zAIotd;N2R53&oRf8ou}wSD4=!ERiSve!i}{+y)D$tgLXQvv4)UUmy4TE2dG$Dyi2- zQtwql3o-4oeurPKx{Md}2@#(S8L8sdD#_Z@3{^izOw7oNiRovAQ<92y|H_OO`x04r zRc}=Nmc`AMTDH)0bKkOyGF4Kq^dwXqy-asqwb^<9WtaOwb2|g;Ad}cTpF^Wpnic5F z%h08IZaPeH^grgu_L{&iot=4&M`h!(!YqTcM74K*2XhDZfS3;v?y%b|M{vG3P!-(V|2ce%3ellBzF1slKi7Ysj&y7kDBk!e*FU9j@pPEK`kiCgrFB*FIt zAk(jKH$SZ9s@UVQ1P&gl$U6T;(nAYDW65oh?Ro0Z;lrYf#B*+Q$S^+QXNTzP>mv|A zGzxFoByqvIF-K3|mJ>cGg$;5yuk*XHZ+@i8>V+lOB*WYBPC;#ZD4 zJL?bb2K2XZi+@>cIOvPK&q5GP4b7-8ARu7w+^78i+)~Wt^Mjv^q)2=H8rCe$wCsme zNI)Fs%b#C|H~*Oyls@IS=Ro+o^aFIR84G4#310^AM33?Wpov=_i1;Nm81DBD9=pH4 z{vF@U^Zlb|W1(~`kk;fobQ-|dP6Z)AD<~wQ)g0@b>d&6NWSliDzc3NWsIyyM zVeVD&j*h5c>H5kZ_Yt)*%RAQEoqwXPruHIY;?ti0^8f)163IoB2xiMsEF|*+28f&x zqIQ&2*i~e@`^=sDn<55wB??%~erL{vro9r(=Jgp)&NiblC{(z}2gU5+@!uz2K4At+ z1D1VjhLCfFbIIe!Uf2gH%0R*2MM#rw8#6F&;yydH^2#qkXiq9{yt;0bzS3^-#*nr4 z_LcNxejAwh(}ll%|GwYl^n?TnjOJMPP#1a90CrTs>gwv~)D;!oy}iG^xj!gQz_T+@ zlmP&cSbe3ah#a{wA#*9MamHqXvw_SRMB$J?Wd@XazvtaSmljFp^J;KGaTeesvzodE zb_Mzd7CaW3!q6i|NDIfL^LQ9Ku`1%X3+7H7#`!d%anS{+IsYl;Q5;+W#HCjf-uJg& z3ggns%Wbo32u$R&Litu~(-+veYV;rrxpO&ZdB>ipvwMdP9eOJuQuF>2^ZN#WbdL-? zciy<&_Qlc8rwU7cJxJ1R%xds@7Akx8Nc+Y^omLNSEs!X(Z&~$JZTNPLyfM3f3U+y) z;2g``yXBR&%v75kxj)!r0}1bTN@%$a807aQFLiXftH|xr&kCarqw-3B;o)iiUhIU3 zTZwg%=qq`}8*rLM8h|_9(-8}Dqj5KmBhQ=uvh)sj99OmQJ^*VMO&NV^EV7aMj<37I z;+(`MZt*dave_7J;b`uelP*3>+(CT)zz37uRr@K0wB$?Y+GLiDkid8&Bj31UK&{44BRM42}tDN!0$n8?n>A+I8 zhgI1UuAu`r6sK97s~lJz+N5{P^6$#VhE8?e%ikB9KW~bayZMVOZOZCi2CrsoEqv;q zo#?(FFt*b%Mvnc!mCbhuS~wVXib`0py>JrLw-cYHwzn zZxYNAfeQAS6Cl6w{kwO4GKGAP6M$z!<|JJVsiU@ zJVVm-41>QVHH`PTNEpvml#?>a~{S)$Ht3AnsTg5iDX^c&uVnsLdb0MAjfB~!_NasMXU}&#Z#O=x<#e(Z$q-Y}Cm8S^I55Cm@zUkX zfJmURun50UP}LVVQCaRJPAGI*`Jok?zBK8;bh&1Rwf6(;B=M()1V`Z@rJb|Cdzie8 zi`CCN31i-V4VAP0+u+^v{i21-KYB5HT}5?#uT@8m{oHA01%ZEZ_pANh+=PY7 zg3VXVkG`5;F|ej&O1XckSj?r2_D_=zKR5ZV-21*M#w};9W=?H8?KL{SBwv}bg%^v9 zL8035lZp|S-m*&Z!RkQKKjUwiY3e+$y_Ny?jzaAK*z7 zTE;!U)dRoCFEphr^V_qjLTpabIOd1anPEm=l zKB>FgBa{vAygp`jnxwTt-wMaL{hMq*=x#l}%VJE7+R#3yQ;b8TcB?hMc!)Oh+saGE z(UupVow>j7SngHhKbafV8=t&T75`7-iPALOYEOoex2v3vyOWWu+0~(n-V+D^NLqXG zYk@(5jBZGce@kJqo`Ur97Q1T+#>(5TsD$|hclE9J__a{WNza!z{lB*|ex1l7F`8?< zL`%e`1c-@DR`iM4C6gzYd2Q&sgp?I0-Zx}9$hJAg<Zo{+B*j9^R?xw93lJqn{K9w3e&L z@%p?aRemPB2E=r_Yex}w4kr->evH%CIPQ|4i9 zsA@CRWRGp-dQC;$VeKil-xI|R{C-niUD9e48;o|T6>z3#lZ10H@20v}WwQ1C-QKlPTb|1dKedw~OZcPbD++V&o8x>fqHf_$DB1xoD zSlkS=-umH&O#Aivp{K7rFA|lnSdjlwUVp;TQomwIzvwl0 z58M}`hL766aLEDcz}v%%JkU4!yJo3Yvbdi6xbgD)^VVied;3z}Zo!D%Gr-sg| zp_F%*sP~!L0$sSzxJru77CSM+)f1a{+KTuoqm-}q>g19)+57V393Q6v{Wg1^l4vTT zF^P#0`C;Z9k!BIMkta#6pK!7VG`z5UGc4K+RryW_x?x_8u0T*yTie}Qo+NBQlDJNX zq@ALh1~{ZlsLocoMULxFMCnquv&4BcZ5~ql(MQ3=GM2DVYrcJ$8vzv2y)$z(j?YtNu*WY|BVT(Z*kA)f^?Uv3aKun5SxL9Il z8MG3jrXvwz1G&+Y5V*#Y(%XF-XKJPe47IVm?tu2g7>+V;)>$9eCB5+Qh;?_nZL3uv z7vF7dx>Ib5`{&X`x26xi(#h`K)*aE|5x@W1V^`U`@bIF7`m8q*67?l{X3gt@Y9zbf zB>hOqXl|@&DhfTI_O&a&=U&0(@8uRpe+=zdE3U7ryO6I?Ab+Z8i;Aa}j(JyxIWxII z+i%i+n_HB90@%|HLfa>@WaP1MTy>|I10$)Y8Hj9V;q252#DBp+i91 zKxpB?HS$M{LXh8rqY%EvD-jNHk}8zl=fRa3JzyI#Z?MSPXa>SI`iNyZ_bCzk8o80F zjQWBo(X;D_Fk;|vjW96gaLjJ`4}X^+hTl8FQzRI$iR^I!2<6=f*fG~B-tT>e!kB#;`_%v{+5VTF^TWbtdW+(`d)r6AIT<;OPofz%$uLzX{1bYaFdR%j*rRbA; zcz7kz36?}-FlB;5VK!;fyz@`Q`$w|;nf#5@kRzST1*-dT1kzZScmBm(14lZC>}wHS zVoOGs$`0Rq=l=a%5EV|h7?DvL*Zh8=k^xl#-g?7YwoW`(6UfvLRu8Z-Zxma@dEVZe z$2hOixmLem+D6Co_jf;U@j%qPW?p)jZ}1Cay@Au$ytp8c2#ecjczSB3rJ&_?H2xq) zrpu@PPIDV{d}(Ntvd{X#f7`29w2O55+W%PjB1iP8+B5Yc1CtibKPG-Du8Ln`{QJ5I z8k@oeu?5$1Qo3`s0&9DY#Z3$I6aQ9>wa^?>g^$6tJ(x(1AOAf`Cpvk{mI=gOznX`u z08CyX1Wk(xfQ2Lkoubz%uRrkGI76A~GKc^@jdQh(ddbvSS0)S2l({*r;~U^KkR2+x zHoWL*E1L^~ivTjgkK>Du5^#)un&V|71QgI8eC^rc*!DAcuU45v59dE-Ba^+%%uIX> zUPT4km?2;UJBIeB@-y|v&!2D$9#0>5rKdGp=Eu*55HtDh@jY7di6HQHQVL5iagdDk zz1YS^DcLF^51j+$td1~%1;RnPYUkqmsd%$7`09i7$!p zR!KY-wnyTp;&egtPOHX?1p_l|A6oa>Qx}lZJFtpp+dDNXB}t@0-`m?WMt+@G`*pL> z(0__{xRvBr>)h%2@ymD957EjuW6P7U5(Jgz%>y!EBPSN*VR2X}Ge*zFgpZ4n^oK*0 zi>92fynWkAduI`hNcwflv13(2_rjblsf(C+#7RGH;0%4`3ymQ-0F2xZ&f&?pAiL&v zYZz7icpeM?XZj&?kCU}RlpCT{JP07upo~$fUh*Q><<*o^#f{ba3d9$#dCD{jE@6;Y z&XbNc7Fwo*Y{jL1_|&XQygt~88IUP1t7$8(lRb^pFkUydvWf=Gr}d2Y8~oll#+-uu zUARTZ?gi(SevA%bu=>)WyX9o^*0)`Ta!2g!lZV-f^=F)6q3l|@5yZQWPD$ekM?{rgsMj#)V zJV_v3repi8j{J18tvMgCs@xhg05&1;6!SzOeUkR7^#V*WM1i;cOgL;~Fa4DfyxHCG z-km$cjf{liDAU7YMR|=OKa`PH0Wza*;l`3PQ472#Y9(<=dfBTdW|5&gqP!~Y|IU5c zR-oOZ`a4$GTgK)t z{Zk%lfkv@ZtwqMtTG{H4$g`&$O@?$poDmeel46C`fO#-7Q4ATWP5;Z3IZ!CNcG_8t zQ$K(Gy7%sD+N8bp7aHGlcH?NhUP!)OzrK3$3+Oh&+i2CS9GUrfex=NmAl3+>{r?Qx zKp(C9=1BYLINpEKwbWsgV6Tgiyv1ah(m*(I4r>!l$OO7Z!%pcbv^B;h%74uH1vj+S z)yIP`GW`QSX~~Y)Z)70O&44Jg9-scU!!l2jmV0(C<%9i6k=lvJ+9uhyDUY0fv<$xS zu~6R_#8wY?` zc?~L}Qu^?N#$!8e^bT$}t}fItt1Ka~D#8Ec1^f5{k!hsLOG-*YMB-8-c`#=~+`lIV z$gQ=~v|gyQJ;;Qv6A2Q5k6d_}+P7}Yb}pe4C#%JK)+}P#b_iq+Y$B>bw4J~ptf)Ui ztt}Z0(+N8UW`RkYH?Qre4@LM%c>qatSCv0!1;(AT3qu;I>i+%rUmo0Q1qB6=0IQ?D zP;_WH`eF48cFKPg*LL7KjK3de?Ed{vc254&hQwG!Mf_PWoRe>$&wT3d@9IWSFe1dF z`L@m-At6>u9gQ_QvQr`01oxSdG&4dx9MF3r|J>?!5;ZZ>yDQYa#8UX+=LvsJHjZnW z@To1pdU(x3S!B3BbNI}_Kts)6m`=lNoi?PFVFY{{ezzbr07duk;c6r2Hb6QA-g!~7aAh()5S_RD!}!o;F@*~kAAAv$@oMqy$%Xg09exyIA@ZrY2E0D5X@2EL@b|NXhe|KDU{4SnheoZJct*YTeP! zc3(_b^xEv9wE0H!t&6t-5Ayif?TV8xE<;=37mcAXm0ZLohdTf3~~TD>pjb&JJv7;)V0@uaT2lN=34UsP=&n z?{d7%@~yIWcz;F3u^QW{cxj?^;1oq2+-1K43d2TAX)G+7@7^WVwbqwe2sLt8*u+&< zsy#M$bsAE;BPLoM-5JM)`52}A;r@a#-t*^w1d3G@7m3UFG3tB>n*qIG$e5BkZcco5 zB;v@xF!uowb@~A6PoD}}du_f#l#QR{2MN^JYb*}e1SZ^Y{P2hQU#VZqs>`Hn5cRFE zd|Lr;6x9W5)~?-LdxVMqO@Y#4fUm{!!XHC-boq6vvQ4AETRB zt$_Sx{+%71d#mu@-Mys+?hRyd+OLs6_GBqlAP=!iYO$cDDrzv_xn44+X;jFGM)qoI-AJ^@>j3Dm&5g^EG8Mz@Vjq<8OjDJfYMTQ)y_hl&u}10M&y z4jhXxuI-*)qSlQ71`tL-Q#k=Y4V1BH04u#dT!e9oO);SEbYKfB;3;F=7G@pV`ss+J zr3kphuDhcmBe8ZHg>=6z(>&V2MZjW2e}Mf4Gz@$EvJW478yC3Pr?3RT4bceroS zdf&*oXuTsI7qVX(-R*SVM$4n0E6DSlvN7@PoxJO#`8ztc6Spu}TnRhMWf~xRKw{$# zGkZDWF`h#15!Op$TO{6V^2pio(0zFqwDQ-=p|@P^K5NLZV0?iVaX^mn5tD;*s zq20`sg^r7XBIPZ*yIBrD(D|fcXl_KYP4Tway#&#d0!+P00p5{Xv_^t<#jPWvPxaJ4 zm3v**vlSKQB2{eUllF5ssa3=6nb7)}>6b30XUhxu-f`}39siaVF~xqZt>-YsqB5gO zog%wj-{YnNIv~kIrE!J^=Ytszk{2NOm73AE{-f9Z?4?GUOc+aPYNCjL7)#u__rwcG zq>$^rzrjffdL*hgSd?IMD+;i|*clxKbU<=)-!U$Nc*IHI1bBR4q4BUpf`E)ghiDt% zGY*e^B%SLU!r*NV84_w_jO!q-kdl=J%@T_Z7_9@2n>skRR}YbIw&N%K1}%GjWfdPc z3w$|o@#FaARN64?MykDFFJg%-Kj;R)g$qLbxUUL|#6K8^B*l^SC+XjKz!MckI6e=~ z6O7e3*w`QmLzu+D{N#Q2u<=Pz<<5|(<1BO$_zd=e;2yVb{J5F}+j?K@@Kx6#NL7#i zJ^bGaM|4E6w;W(}OQrasStc2aw@qg+k*jGQg>I=`Rwj*l_X%Bpl$gc$l>YRl%PQW2 z&esUucRNndYcvz1=b0F{mPAHSn9m8!PBCcyXcYC9O+6A(6yC=@6UWe_ltMqIUE_0k zLTRBs&fZHr`;uy6)pAj5L}HahYWV6(`4bbf+y%Q{BZ+GQX{_NBj71OMNMH1cogH5g z^%(X%2UiBI+$o&o01s4gJ7Fw@COrt5?zli9R0c(G?Zf(-L&nvbrQkAICi`82`{$eV zyY~f(KL{sJpB@i6AZCU>6IQyQcxh>CgWR(V0w&yYcoOOX-y3HA!E2$C*m0qv_5smT z2mci&l!GA%UM0>7sMS%)dfO8kWNuEUdp-SvB&mb>3h5m@G2>8p92cO%hS1xxv9V$P zi^z@~O`?FJduor{7C68j%!dp5FtCt|Aa&wS#q<}-xRjJ$&_hKM&SAiX88FBkJo8r{ zB8wg#P;icQy#K3%szU>3QYn`jG6iobhxOl^w%Majg$)qS4keI0LC?fvXyj91qi>~s z`T8{pcI2F#lMmDM<2O89eA)P-=}Qv$Ty4Q>sUkF z*97aIdaU`5E}m8AlkSvPI8*e^Sux?rQRW|KsYmyKoUcK&v*ufpy9B`QHoRgiCn8Uwt8E5p3Y!7y-6MKB7E zSrm})<8q4Ba#TzQc@?8X6ejmgrACEd5x&Z%6uE+1*!qAfF=vsu_7d!?UJ!RZt;Ay3)l{+{6qOeQ)E^nPz95*` zvRYU*A}2mRRlH;5j=%Va^y1boLpSc3h${W5?-tBYX(kVME8UnBNh7*6PK0V&2Adly zax};=kyz+02R3NYdBPA61U{~CE{UCRLI&#S1vo(<2bUxr<1_Y_LQw)S?`4I5(O<8jXc-veL% zBGxcYOB96A<{z}=&bir%A^3~V zF#f_+8m4705=66a-UK<0i<=uSDBt``&|Lk=N*ln1UUCBZ#!|xzH!lQ$3n8T7+=jjXdW*@F<^!KVU-eIgel3SZ zg$<_@imT_bpfB*-M!lni4|zuHJ1@}sMuF;wHU`0ysdnD8om{^A z#}^oR-`^qsHJv}g9b*sALTFX6-q1r+Jx|bL9JREh%U{PH#e?!gAr7iJI0`T_T0r#- z3$V~}WI5`f`GLs`cmw0#=G#bOvL9M(7jBw-RIhPy1PR98{vv2@;A=r=NJhnlztq&I znhyM?XYi8ia(#_a1oSy}b{RvnRAMajE|@L=l4ZB}plvy31Ca+*fb1Wkn)HV<6z|(A0&m{ZTjXKYL&A{4tE>#-u>n zC9SP>e<}9iN4Q;1$~ErcsWV<;+}lydNVm;~#`$ z1|lb_5DXlN9ygpxy>Kvr-YdFU-mSX;>OatN(f6Zo5n_u%(fSt#D?nCpTA*;F_GEax zIFMmtgvM?UB$RlaDw%K45AQwoANU=A{MF?qG+UV!+AU(!7@N}d_*NcV*tcFdXoHrt zvdv}mc(Bt@tc~lM@Cs@6u-;sG!t5=#)06hMI`S68#CWUs-{&mW6QWBYZ{l(+wZdqW z=9z8n@Ce=`7{>3uV1k52fdkN0P5`*^p>2l&rE21vM1)fXDNKK;^rpJ!YF-=!8gF#I z8y8N2W8zfW|HYST<$vS|Xcrq8=+Zlw(vMR3)zS(#l|nitCM$FGzeFgaGyZ>Y&O@+@{{%S=Vnf}$!h(X( zZyTr~I+if^v3q;$W8s^Vd_~!j^x+I$fksoM@7o{oTiFt=Ino>!3R-4II&ZhMsIYB* zNM3FnO4>htueddKzimoNd)mi&-Qc0${-fot7iu?H#FESuYt9vB)jt+T~&!t!*w;! zqfUHY^S8oSqwN?dW1Et`QHtJudCRZj*j(fUd7D8g+rUpOfs*3;_hEl()!0PG#$fZF z`7lfb_tHrPe&0-^owE&R9yMqf$SxKS6y?M-N?b88UGY`7rvE+_9DJ*-#riY{ywdJk zNZ02tv?b9DuTxm1L-)7c-$(bWE376e;!A3Ds=PT zV?v)Mw@*+>Y!I|yrjfuVband^7O$N?QO#~<`)s|Ke>fV-Fsh0`#K6zT2OSfUV`zQz zn8?8T=B*Bl_IK#P14Zu>vOE@z%Y;vn(sO>JS?)(K=ce28bva`*%}y=9%$8fauC8gH z5n4LNeSNsUsGNkseEq2l{lC97 z2%TCxBTG~U7OM?Nwd?XnVnN+ycM;_;;%>qk&&S%ytmT8nw^QyMo44fuJScXU-p$&@ zkoJkj4i;zf^SGM$QQ|5ts&GB= zYj`EF%y~eJn{mHs;J4G;5|ju6@m7SE5XZ9SkZIFccFohpOP1y@j<71SMP^GCE}6wg zahCpO-)k;D8+(R$)G(zt>kJQ67)Hj%@vUvo>GmgPH%x1s{-XQP+WNvqLF1w3TWEBBZ(@sA>neR6Pc`ztqyMXv*g`vh^-b$A9qBpmF*&oqr%5s6jM3KHq@~@!(ZZB- zVcGummiYIaYpa8?)sa4J=pL`6ezV=B*ait>m}wj{Yhm zoq+%c)2%y|FP?0fuFPcJHSZBiapf`78vNM*B6fe>2IYmd>XwWWJzIi}1SPsc(u=`E z(8+Kgt7Sx$1f?~Exi@C<46n*5LuF!t>aRAP-o-fGQV4^fm3=9}{{G7HkXX6jWL@x|!8 z|7&Dt+rO}&>YnDNXeG5{7ejb_eoKcY$#!P#)oR-B1V@2f(>5_)`t8eAk%pl8|MrSi z%@Wvix|Mc+uUE~0D*wo(s~rMo%wl)aBv{=5X#ki)%?6%LK9^(bha`#5gl`T2kVS>vi)!Gr<_Wh z|4ljWcDh{8zdK!TBJeVE3bV`)!9UXtt}jeVzQ@`uaDIypxj{Cxm!4(yCmOsp#hFiP z`V*xQpjx(W6Qkn;+yG1hSKg~O{nueL=L4K@kS%_?55*sNw(=q0Bpd4;dUbEB^p*W? zTK=26@<>txlQtBE@cCtU`1^^^Q!fiv!RVSFVipD6XPm>sm8&BelAi^>b1KaoqRsWU zS*YhD4)6I->lG_cs07FDyEYQz+fKK1-i{p7DbD_O;o+M{Ejh?T41l(~xzJIh*T{6JJvxk{Kj3hZUR0d=iSozb8OX?R z*o`$GC}Gy$b`5@*=^gy=HAO*&J7)_p99cJ@0T@IuKM}7xR1&!(2*oyPHGTpETvAfA zNAF`|Y+mSFJFMBX^Jcqax-qO=V2?Ay|KnctjkK4}S_-TQZ}jA1_r~+6B2EW*7m%VM zdl(z#-rLR=W&djowR{N&MWE;w((8v@&qYeeu$N!Olpz`i+j*GXo=K^Z$};{_EZB zmcgKw7gYMyo^`VCO?~C(P{fEqll8tTZ2g>|2v=y`0-y_|Z@ovWfQT@+O0gt@O46>Z z&~}zcjB3B4qk>88&WfrgE`l*kGyqcKnD`3Gs<*csNsqV@{@CyVNJ-gtvmKy3HH_-U z!6WA8WoQ+E1?V0)fV561VnD2hv;hVPpe7et+((29e2f45^hobegxcMe2H-cE7F4Z+ zKvqOWAN9ByjPGqx(BeEA zTeQqj{v+Lj@DKnVCR1*ZQe(D{N);*x9KlFU9YNKOav3EtvPCsuVh)wCXLS(dJ>aCc zD_+xNd)GO)a<_pC)avS59+t6?{`pFc*tqk_(Dh+>++s zYP0iVho~)E;&_Tti2Io+Ne}My=xc;Pd8@&tGxq;&FsXD=ZcH!M;CN8E2%(&^tSL=5 zUDi2#U3>{l-o1~Y@7GIe9`%m@O`QlY zVYDODzGi6GB8Y0*iPrH$-3>3-YmTWg_i_OcS~?O+U3Wzd_=1Vpbj~*_#6BLLy2T8L5$Tj$H?;XFabda zO?A*kLbABHw$w&AlwL$HiP@#O^bM*#6TDZkNHJrmhs7!UXypX(uGO8M6BvpULkazN zkHG>18qd$K1*054!}8z1cKe}Q&gBEREb7EcAVxQSE0}U{i_W%EDlvL* z5=|azw;tMO#jDbnvaem-ImJ(2-CbTGuzV>%Jmkjg;Vo9DZGDODE2zE9*p&-bZ$gg> zpZPJ&lcU%10WLxc%+`zp6`X`l*WFEbuy1fpNA^MB@DSq)#Z&(={JH2TC|V^&a(G&Y z(HjUA`X(mppVPe%zIe4{25KF2eZVRpdt8p-RPTp67usk2Hf=ytU=!j0Vd4~lB{Do~ zhCSy7%Bf%h7XNuHdo19lS2=hlcv6N21_O`J-UIe4eS-=;W2sfRayQFCrS%)g52W?T z)WAEzD!>VWPV!S>(dAa>ZHBBONXX!il>}j~tZX4KL0w427d5ewp&=w@IDH_o09*>c z6S#{DU~Rd(yJK>U`6q_ifRzAoM6(IP?Uz@n)=mZ}!>{Q_&(tAA1XD?C3E(yCN_Owt z7X%6sP@uA*S?q=k1(#RUNh$kg>M8=FfrkJHl$NM??}vH|2XRZ0U*MB{gm z)i^QO4OiRLP2`V79&Ot_P+V5g>N_&Bmc`%MiEs|UDGn;l=7kY$cgzb5^a@mui~zU7 zGeQ@<>;-qFRe4H7C`egABJ@RGIhVnvydz6(=tMcrJv?&s0s?0)5FD9*hT$Fuuq9(% zHV*b7bk8ymuB5shTnY^h#bSr3f%?p;Oio~0ATOB#HpBU*zV_oC&QuOjb;uaLKs*Cw zCN>vht2anYp`*6-s;|U9V_5AwH-Z@q3F=`i2y7b77lS~ELe{1ousXm2#S|(Arootl zp!}pdkG9fowk6Jp>}^OE=1Q!9dn`u0hWh#?RwVS}n6N{Z9vYtX(iwOF^n+9nAA}G< z?(sjK*#|h#-E8**EP`J@3#C2g4H$%4y3>W>2D|`YdR(*Lz+wYpMJxOP923~9nVHcN zd_)rZuxY`Y)6>-j5~GN~QG9dip^Eng{q*{qeRB_xA%H)Dzzh|YCy1dHirWTi5$t)M ze@+zU(#@NP{EzA{jGY4UmXM?$PVGK#O2b6{gPNp9C85zQnTHJ71 zx3`z!BIt-E!LkYypBvHu*D$WpfJF-cdDuDwXWA;!Kl>9M>Jl!`jJ;l2!=BOAewvRM znV3+-LT8LtIU^$jtdR_jkiYoFZ=EIf?%hOZg#C!@-xep(g4dT@H6ZB5vw(fEAjb}R zyIn77_n&Z3^UpZ#)jJI@0%tSe z!yY%uy+!i@bvW|jyaMjV7qsLhEoAV4VWr4GhqqyEO_jjoAt2|18t?ma1bELec%Ojd zis2`2REVYGUcjvw3l>HSxYKYFlsU4{i4og7CKq87eN3kB7b-2h4J1IY-YRMoQ5Ve- zkhXAjzP+$1w#N;Av8K06hGw;Ly>VBf4r|qomtdzAJ7_0!6#mp8B=tUWSjUROvNTCk z$j4)Xwv$ZZw-21aHwttCh=wbD4kj^>TC%XP#EWW-lpfdXUx5wL&Fj};Pr;LG+K+_; zs1pNaD%lATJ!~%!dx_f!PR95qc*|5%A)s?OMqz6Wy5C;+ewuqP;8Psx9xyB5^8ixKfLkSGt*y=q*nk*UQr9iEup8DsOx1A4fa(R0 zYXrycr9u^hM(RR#!&;j=!F|V%&|Y_G*ozk#-E4-qWY0M%X$v=Uu>PaNx#7v#*&(?8 z@XULfdMA8Pv?XuZgGnY7{DmPZyXOE(R&HqXG!&VG4AqS;uo8i8|!_B?*X8WxF zK9T~OUP#2UR0Dl*_+u^7(A481#}&>It^KGEf{;FE1*BuZh6Ju?yJ0^8To`mfC~bHX zG&>`<7@!GjaY6<XFdPP>8D3e=pBmvk88RA(M$Q9wF8;MIkFH+v8tbYjSXlX>zQ%cu^;ykdrI?Pq zB!U?4YmA@V;O&5EE)>$R&r>hRr2%QrtEh*X4IB%v4Xr24aE88d5FEdXg6IJ*77bwf z_OqC0A%QgKWo|ld@se+0aR<-W+lwVJFf%8JYN)HK27_ww&m)`Vu(!8;QP2Ip>6gWZ zsU{JoAf3_ZBWz{c9STvfWOSdmxVOE&*Py$i)RsaE>GuzxTX@OwfL}9)2rb0M^%tvITV~})0R>uJoK-|k3p#5Se^%Wg8dDN%9&j!8I&Gy{f z>u_6H*t(#Yrg8Q(g0KLZ;*^51K*N5bIe1Oo*?Zo>84H`M9~!>jJM*;411;<`h+Q;? z>tkaNWW^4sT4~7l95R!4xujMn7!?+nw)JuuXp3f|?;s61rf+=76wAq>%-Oi1|6{DX7~`H@Dhq{g+jJ%*?IVuzUic__*`ZbOss#1R z8C(mtJ$XOqWa5h0xD(~_8zGWyRDZUnVihq^So3tL)$P1I_#1r#9}`e(5Y1|7ORe~q zL-QZG7c}k5_uBf>4Lqawn0K<$Ss>Xyq#pxjF3i!YCwgJ`#nk}tDjB#c{nhQ6{GaEf zrxd7i<{mJV_EWoazp$e;pDx(g_?N^Y`{P45dUOfAPR^p@JUd#;ByD-ldL%vE%yR*2 zk;-_2jOKfz`0U%m9`m|ZnF`;Xtm<8_MG56=5vQ_pv4YBr*q4L(x$(g$= z@cspV8!hcN%c2`YKf_PAyB%)#2%^1XY2tBZ-hw&VMm^iB)T-ouYvodF*jxKcg(vhX ztVoF+d2wI|zLec-;4Z6JxiS zOtTabjMHw&~7N;E%_sNI*50K;Pz5- z2(F_mgMKLmn8g zpPqU8%yP17gk$Q{Y10V#^bYF%vDC_{H0Lm-sksJyePTv*<+kE`T9LZjq-C{A1{27! zKhCeg-(fu=WR-rTj9Y-IottNc{WNQGFaNKiri{y53{-Ewn6GneK_{}p(muP5x1fQ2lW;Rqtj&GJp4(1)TzC__jF=bgh1KJDI95rw9? zNqCv59mjjdx7IRl+1nN`@jkPPRNUH;wWo*f#I5&ape>L8IM&bRyPR5=wiUGz<#>=( zrTZ+w-DPIlV8!B%;(>|s*9dk_CQ2M4{Y^~6S=2>ov zW9lupT+;*_{hOsiY7Mc^)@^kBL-_~O`t)OCl-@Q;KMx_-Y^tpEmo>Cy{T0qH6BQpU z?c1RnEe{D%i71j+`VAF))yY+aFu?o&pcPF&&b05 z+t!w`(9vY^~cEPNu{ zT|RgE7CbNzT)gz2FgEm)QDSUlk_Wol& znxGVem-N;52~2rX;p%s07aKj)&XV-I8A#nq|8dbs(Ui~_`E^9(yM$#W71DZ)-M3QZ zxI_NAONXp@ZON6@g9pW+#_<Z4YMpgOt(8b!$`%ZQoc&UB~IdFTQ_Fu{o7!FPVafE zR%0gvGw@wP1r%L+aANRQvDM3*yqX=7hbOP|LbjZn_91mNg}7H*2^^P&3MFfK{_cI)(JE-tjx z$h;3PZsd1-7ohoHO3SCwd*l(ifu@X^mS5eAKAD<7=e2cWs!vDNJH0i#IiXo0Df_}? zGN?k5_S<#(aF%1c%vS!e?cnI5dBG{ePWyt!Dksqsd*xla^KKtM2VKv#G+HZB` z*kJw(JSh8LU=Ga)lO8h4;bbJR*E0i+Um!4!@RZI;Z3Pd2YgGN4|1K?IhEP^YtyB}g zmCaotx=}O3K_{`;?&K;OuSI`*_d1v!gG2#AIS8K#)3B8xS`9XH5wDD6J#-T^0ML=aNCorls zYG2Tdc6UsHBW3@nJ!}|a_LUDj=yK&MHl`EPuZw{fMEeAoI(7cDw{*lBm)X5H2o)4` z7n?FL@No(%_n)z5h0zT%V)@zeG2x(;E$65OD@9-~u+*h$YA$QCHFAYryK5(7VqyYF zIS5S-;6sLM+x#`7U(|pfri!Kntt;0{CaE%@RcH(0UwRiE9>Dplv9V`ssmu`od!nFb zhSJglpJ*PV(tgm{@v*dkD@^@-aQ#E0`JwjQquaNg(9Zz+0g0xdfXe*$udN4eLrqsb z$XD&mIC>%u`UcUw$h1TXuTwKff z&4<~aHxQmrE~2!h68vh1)#361au9&t{#pO`4ilZ zfFXgS%)99&s(Fy9g{7q;o;aWe7$R$vnfclEFQH!or=BYL0E`6`5iXb1G&HN%pF8|FgRYcZk20RSeV4=l>?q7kr%6jn(7 zQg7XQ0$c{&p%S*rzj&zu*WJ|gL>R%M{ex`|P$8=0HnbMN?jhy?3ZXB;oN8OD7&V}r znv+CN_Y~}KV2t<^lfEkG!P8SysSHoii_80SO_ANW2mLB&!T=2%FbaT6ArKB2r0|N0 zKEwZvluN1&3y97Dst`ttj>nrn-&`4ZD#UYl^78@yGKzmE*w7r?3T&i&2x zI0#XW@XUdkggVGj1Pi12@dUg9m}uF98IOjEVwQpVj(l7%F2t#{R@a~of*pXd*s^0V5ekhVbSJX1}JLB zjaR@AfO#L4;6VkC2ypOIfiFCNu9Iejql+l5l=%jK4i34>AP?db`Y*zXu; zdPZL|lo@vY0 zJmvcY9s?KyVlar43=kACn(IA>a0r$>rk>D5MYB74s}#V7KumuCA`)E7KzC{%JYXw} zHGTC_eM|WOB--^jJK$LcPe;7aMT`}qRYg>(E~8zd95+-pUJ1=Hzv)zI1N{!>E$~Q_ zk%6r-@NBC2DPTV^l~E~;a(hoOgc6{)!gWVV zHO6I{W>4_1!CDy4YZ!*EK*1WKIB35>cc2FAC-cJba3OG8Mk)xRfN=52F>$w(38jSo z1RA58cLvx$7CkcgIwwCo@!P4P5rUrp8*W6cTr*LpJ{jk9>H{I`^|n zSVlrXgIwtY2Qbel#9$LXsT2X~{I9Hx=kob47j32ecCJD~W+rP|xHD|;nY-tI6%2b~ zG5$r<>sdX70aGY4U8P=UbN5j9B6i44k~NQr$X^i6Q*PX#u9lh_C3v98$i%mPs$c50 zMW+J!#sr4>W8O;Y%cBu!KvK(4Q2_77Cr1`fIuI%Vu_M5QiCma(g4$1oD`6vxBx0PP zn2=0&<+Wm*>?qj9s_FSOMOI z*{hS27zt5|1d)X8D0-2Sg2ERwaYeYrlF7)O?)0q2z~(U?2Py&#*VYpIi&R{^MBG`Uiz}d9 zD+8sYdNu&3hi@*B_T8s@XE4;q5e*{;4M{{Kky{D}qKxo^on7GKTX6%i7`{gQ}4(+b>}&>42B z|1m-;?k5^ogR5ow5+COSupm$pLzd;b8?$(L9ENEUd13^jXq$2&Xmc%KvEDH==Ltdv z6Wo816aw~YXbL=bP0xo7s*e(&hlI*+0MIZJgH%Aq0vj7wJgW3v=^Y@u5xG>)|G3=x z35X^t!tb7*zci|cio0Cznq*TWNMV=0%rIm>>S+lC$I3s~6sV@-ToPQTVq1Xzp$wJ2 z(KJAt;h~TQVFEPTH@MCvkTqW-e9_glKsT>ZRm38Sm9KI5){x0TcxAfY%HjBf4Tv2`o$Q?{f+O!UzM z7HU(QLBAaYF3SB=ekF+!Bz0#mMrRtWzmY)gl`|oOmf#{#RajlD9E?fg3JN?;JYub* zRNX+KMYxB)KA}5~xW;(alR}|TC7NUs=>aq+_ymZQl9w;VNV6o1-dQMP(|@k|AvA|~ z4e)O9aj2=HA?t8U%t3>WIChzv#|^i;Phf-n&j+}lF#0>k3%9`~g5K@Fqjvta$M9@u z;kMv@p+%D8k{gg-{#e?lbC}-kc1=u4Nr8$wDQUiuSv1vX8@hqLtbbm}O%u8py%@|E zzSrekW=!C*j?Ed=soqVk5ni>6WKfdNyG=9mKc-Jk%H#jY;I`F(0K(SRVXmKv$J14b zB$o{1lju7zFFPi46t>asTOiX|Ox|R`BOfsBNLwgpnQ(NWu5DkmruxEZO6*WXNy|oi zCKcL`I|~|)*OX}6)-c_BcdFD13)9>@8A9TeGw;Q(&asR~94}Q}ZhP=HROesYUrS_W zII-yM65%K0HJ}=raLs1Myz#bg^QpDMs{XqvHi6~;zXx2>^^V7_9uaf*mY-%<=ZFnNyE0n}?>qipWplH#|#!gWG_dr3vAyM*kLbwy`Sm>pUD zkhx(bwQUb9EDsEIAub*@UEyS5X&PkGuF%oCO*^CYW3?jnEC814WuY~SQd0VG0^dfk z)wE5pNw~LIyjCPkn9ZRP+^?Wx8Z7&-(_|0l{Y#sxPvnA~4Ngi;hYibI<>pGOCEF76 zIrs~uUZ;<^%ZKR>CfE7*C(>;V?$2n7Ci`DmIMHq~S0+|?Dygfdnw+&smM5J33j@!> zXmf8Ky#Y~oR(Prlef^J_0ba^9TeCiO97m;1-Rk{ULfy1*R~!P%IZfkurQ^{Z#y>~` zyMJl>%uakd4Gz$KGiMPGdE@1hC4c#+9@fux@LY*2@cb6Htp3PrXmVWB%K;6JzzfPR zKA>~1iV3d_$yTMU)d6U9ftSDC^=ZSN_(RVH=XNuUn0^|8o{^)Sm@ws$Ql(o3?wF5e zK(~)a;|5p5DpBWC)&*y}K~;X@ryjNQ(wlclCR6~ju5O@?dd@4I@+s|d?s;CFa^%|f zL#y4%0;d;z30&*@+}6&46I|&n>xyXx7C_;rO?F@Dr2W>PYS-<*7D^EP5G-Qjc_wQ$ zap*~tDEV<^mA{RGh9&E4`zL!*oBvIVeOe@PctVZ1lbK2f?U(Z+NxW{5N3C|l&#F7Q zj>-9WELLC7=e*fSFY^0s1N~qx8l|Ym23ZddKHgNhTivYCc16ST@gKJRbTecc{AF;! LSm&V@CH(&ZlJ&=h literal 0 HcmV?d00001 diff --git a/dox/user_guides/ocaf/images/ocaf_image014.png b/dox/user_guides/ocaf/images/ocaf_image014.png new file mode 100644 index 0000000000000000000000000000000000000000..5cc6743c0085885f0bc92ec4fb0e6c16cf76b775 GIT binary patch literal 9006 zcmXw9c{r5q_g9fEB1&W%%OFL~ps|~=YqA!}R+<`1S!OJuOc=|^GGl4pVUVSyEZJfR zEn4FD$csOJJAS+ii7ngAR zf7g+0b>VYdTnb;T&7jvGd9Hf2TvKjK`2^jC8Dm7nF4n4acUysQM>NCjBN=xP6*A6u$XF$qA-h}tYQpfwWQ5k{xx z;fP7%UCU5SUz?wUrQnM+8}R7X|IX9122(lzY!kSkc$6MH}z| zf(hxt8ZUV}$kv;0wB%hdk;yg#c_Q_ zJdjCqsmV{c9dKlV(rnK8YC+;BIN&=*zH(+_RV9Nm5C2&;6s0Gh_HncmP$yPX*h~7* zc?FM@QkiQx2YnH#UOTF-Ab|!lTz<*$=6Bp6gXDxp{?j(C`0s`FRZpzhXsG1da2NK$ zCjBI{pti!r zGPG_*vCfB$n7e7F9S7aBC4f$uqk3qdW(ZJ9y!@iAlE=64G=_1TOjqNC#6$NU0oqq` zS2wwf8Y%yfa!IwD>9-yX)CvHGUO0$U1uvvi@^&_&j!Z1RIh==k&cK}qZ_AvnHbuhb zAo)rwQ3SpPqerbT8|<@mGbJFIO|ho|JQ|5l(=4<5D|h-xK^<}^B`vH1n*Gn18lWtC zzhPdS1lIjYvR7}`<$C{7?$owMRr6zh(&42)g zvMO3+HcI$Pwi+&?v-Bh$3JgtB)5+HByA>E&(xXlX_CqqxQ355TfB0_!D=(*p#%(?x zzFL{`rt}nAk@)3zv(A+zKQiu?^p?EX+r}_m zd#Qm(^W%)?FkQr5Dx%h@y4+dnl+PS|@>Z(RSsp4~83o}{a;U`EBf^^7IuM*tz2bU;2o39g|-$)I^G?E2{B2p_YGrHHV z>85S1XMv|ts=lF7>SJ}vuf_;O7}d`tX2Ith86b%X^0|l zaQ+xZZ0PXS3a@>8-H!AhD=}`n_gA!=B>?!LFjJsdp5@w)*1v14hZ)_U{vMV9j-I36 zeA0O$Dh+m~W#KZSW}MVW=Qa?vNxm7t@J@>B2$k2E?b!)xZaD3b0@F%>pV7}8BaHjB zW3KC&sZOh$V};wKpd(H)V?=r?HhqTU`|y0k|L=>-I}8iJ98xVt}0=ojY@GU zC3EETZH%+CHt2oEKSRevL@Ph#prlr}ts0Yu#nmK{un^$Zo&x>C_;0uJ%OiUX6Ie+M zB(u(N?zTNNkEo47WY> zO(kuci|{%+c03PJNdjBbhtW?=HP9g%+fwE3B{kvUon-6VN1_>KWT>>RE*0AylhRl5 zVxlnUK#Rr$;LT?RVJ)qW2Sfb#uMVZwEjss*AX)Ohn=*$LGGz$j!3ru3>+c$rluWzh zq2$D0JHxt}dlG;8awt_T9oF)+*}9$g6GcY*cWoaW?239r%2+pOi0~2^nd&wcK1FmL zo^suNz-dz8-!)2YBu-G?Xb~zC3sS;J#yOGc?JnEEQ7 zxM$T`nNSxD-1s}FpLr1H_-$scvao-{YFe@Z4LKoBA{-suTkv1dYt9OP zwoEab7F4Oo=Ob?Zb2+-6W;UQ9r2QvYmoLO%=5{$IT0-6YLDoL8>Qm&Int#z6-w4(o zpOW!M1DWwv;gHh&u3W;kv#DfmGm2@$pGhg@ zmZ*%i5^SS=fY=OvfPG+qkfs= zJ(l=-|E6K|2CalgvP7#qH70Vbu&c;hGdbTQ@9d7o{FW42~6Bb;K~|n z|DkJJ%cf9UUTw<@EeunMPAH*q4-2z)2n$vsykGnq%J1A7dMB>mqP^en>Q@Eek|?b` zqMeZRqAmp53@z5p7~c-q5{0o_M1P7nOtM=Ddk0ht6VC3CI{DmQ>Ax+;NX65gd*H8$~mf7!nCt6q*hR2AUCXJKpL z(St%}cnzdfSVAp?# zRu({?13;;FQ%0Bv4s)Dr$ZB)YaH`CQ8>)2TtrvrcK|uPdr=N468>4i6zQh~D~_u>{!>KFTeo|1w)%7Z>K-#XX`{B#)wD#WFy({Ua8=b|;$Sb%A-7MspjXC*7is9m4$!)91PUCS>iv7DC zl=_dvYNp=69@?L(AbccPr*_Y2-D?dZykI8DNv?LtzZ7iY&pWEfSVcqPF=*$4`dtUP zj?#Q?fU=gXE6bl^atqH76K`b!U03+9-=Mp*ulYVLliY<%-Rgi9$5*;I@%OslsyppA zF+lkPCSpLVty@gvA_cqJV~?D4pTkREC>V<@d!%d3RwIkD76- zFN%b)3G0Uvzn0zwC|3Z)I!TY(;|Y@8q~HGqI_zaaTlv#Dlx$RoT~)r3#BRJze>TQXKpeO413iii7VAMoFHowj`H! zlMYa4hX*>)@(qfTi7#qsCD%SBL(;WZ@6iyw+m?!4sS7L6Q;RPpV<4|*i!B(Z`FKWN z4z+qeKADH(=21_6`nu&b>2LJn!4S>TsQTFJVKh{;_gmzpjG6?~<~}?vJqhuZVlqDd zLZxUI23$)>Kd?P9e_R9^gXgY4{$NRudAJ^sWy!TRrG?Nz9&C-vJ{b-dIR_AA!0j=~ ze|QmuWye%3 z>3!Z)Tr*;b2raLNKd}!GHFqhNA(hKwuyFj0{V`PG`g}XJlNqIlug?D0)p^+_9jK=I->vW&+O}Tr8>bG6Z`j@k-ENB#wN)Dvf1(bV z=!NnXw->%}m$orHYxDlW`Cmoq7Eb2Ad9{yFzz=N5KCzo*P(_CUsoyv8f{yO>jEEXfo~wkyMAgUc#h)wbnr zp&B|Tr5uYHHCZC2YF84IFEvt3vKEH%{4M!7bh#;kKOGIFDEl;g-Ww+Tdu#uzrl&5^ zTntobv3PnLJ~Ki7*{WXY_4e#Sl@|kkf4FwhBhwAjI(hf_=kw^}yV?*UIO6%M9^}d5 zaT#n7ilt`tO#cuR?%+~XbaAtP>Qh91I!XJ(roP6_B^-oX99MxcTu4N=jX$&KHw@x< zXcI-MaqZY8Qj|b?ztGt~_!xt4V=X>c z3bF75K})$0PLFg8PG-&LJ2fI zw5e+Ts7~Fi|49%;Od}CSF?t3L7Exa4CpZSVGy{nBRGz9X-;vVA2`loc`qYtGlb$SND*QI|m9}vMd~4T|uMb?6IazM@=>C z7&YEZ?|X(B-Iwc)+uqg&`0p&Bfj1=_Ej30Vif|iewN5jS(xz zfRFn3=_QF!)Eo%4CwRNc#L))mAbL4nSz&03)RBzHf5hG zW5J$p^W{=5J?1X(Z_AGa0$_!T7qResfkhyq=1o5LE&T-)7$tBuL>3FTKh$A>DrE(? z_pS?bRqRGB-;w9}mA3EFe5gHF`YIAgH0?s7(f%KwuVKJQSQ)Q_TW$Whmjdb&2WBF! z`G54I9R3VI5v=pTP|A%2ct+OK$3p#s)a0FbBkc9YX5--vZRggy1Pgz5U0$wW%_y7C zRe_TYKjmSnSP&NLPf~`PX|MSk4`YXq^VxAeLSt|DA2}VKroMbB`_*RxiZks3IF~UC zJinh_ue2JdFc2O7XXDGbbR}{DC88QWv$fIyAc8WcD`Q+%fSh`F>!2#;w$_xDzBLJuzznVNa&Oqlo}P zeGd^F#q$&YE64Oh)FZxvSJ|OxpwBh`Rra|i*2tUsU#sGj+scZ!1gipvv+^qYTlH)6 z03awip}w?>;Lo-Yz2?{aYT=%l&c&G$TR)ZH|E)!fTGLwf747ZX*UDUKq>eCqoK{#% zk_`Z{k0h(ql3R*7*Q4e;%%`y>3Lj9oGu7%I_EmOEL>m;r1mKJt3Jq;J??b{)P?c?xxQsD>Wlj#H7KVTtGx~X4LLzV zwEezMO>j=U=VExO9UxD$I0u4mPNRS=JDKBC%cKMLdz)({oQQzqecGazC2-s-9u;Cg zcQFzpfXo<0C$K*Mnj2u%mQQz--#Oestx0)`>D!e--`ry>)3DuldVa_-AiP+((nwo8 zm=J(zAK6Md6eK-DW<2Zj5lTj(%MTw-BnKcI7vPQ3L*)x}JPweV^b9JU;*8MV*H`_K z^FsBCvd65yDbSrGuP|se5t5lVY=`gK`{iO&d3;7`^5%#&

+_L4GXiG_4E$voI=a1 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 literal 0 HcmV?d00001 diff --git a/dox/user_guides/ocaf/images/ocaf_image015.png b/dox/user_guides/ocaf/images/ocaf_image015.png new file mode 100644 index 0000000000000000000000000000000000000000..f5c2785fa87943fecf2b97a97809ae8434618be0 GIT binary patch literal 28667 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 literal 0 HcmV?d00001 diff --git a/dox/user_guides/ocaf/images/ocaf_image016.png b/dox/user_guides/ocaf/images/ocaf_image016.png new file mode 100644 index 0000000000000000000000000000000000000000..1567c758b0afed3ba7c448dee880ae83c4335639 GIT binary patch literal 11060 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 c#cxRYD=eF=SnfN`mnuDT((**fF_#www.opencascade.org/support/training/ + +OCAF (the Open CASCADE Application Framework) is a RAD (Rapid Application Development) framework used for +specifying and organizing application data. To do this, OCAF provides: + + * Ready-to-use data common to most CAD/CAM applications, + * A scalable extension protocol for implementing new application specific data, + * An infrastructure + * To attach any data to any topological element + * To link data produced by different applications (*associativity of data*) + * To register the modeling process - the creation history, or parametrics, used to carry out the modifications. + +Using OCAF, the application designer concentrates on the functionality and its specific algorithms. In this way, he avoids architectural problems notably implementing Undo-redo and saving application data. + +In OCAF, all of the above are already handled for the application designer, allowing him to reach a significant increase in productivity. + +In this respect, OCAF is much more than just one toolkit among many in the CAS.CADE Object Libraries. Since it can handle any data and algorithms in these libraries - be it modeling algorithms, topology or geometry - OCAF is a logical supplement to these libraries. + +The table below contrasts the design of a modeling application using object libraries alone and using OCAF. + +**Table 1: Services provided by OCAF** + +|Development tasks |Comments | Without OCAF | With OCAF | +|------------------:|---------:|---------------:|-----------:| +|Creation of geometry| Algorithm Calling the modeling libraries | To be created by the user | To be created by the user| +| Data organization | Including specific attributes and modeling process | To be created by the user | Simplified| +| Saving data in a file | Notion of document | To be created by the user | Provided | +| Document-view management | | To be created by the user | Provided | +| Application infrastructure | New, Open, Close, Save and Save As File menus | To be created by the user | Provided | +| Undo-Redo | Robust, multi-level | To be created by the user | Provided | +| Application-specific dialog boxes | | To be created by the user | To be created by the user | + + + +The relationship between OCAF and the Open CASCADE Technology (**OCCT**) Object Libraries can be seen in the image below. + +![](/user_guides/ocaf/images/ocaf_image003.png "OCAF Architecture") + +In the image, the OCAF (Open CASCADE Application Framework) is shown with black rectangles and OCCT Object Libraries required by OCAF are shown with white rectangles. + +The subsequent chapters of this document explain the concepts and show how to use the services of OCAF. + +@section occt_ocaf_2 Basic Concepts + +@subsection occt_ocaf_2_1 Overview + +In most existing geometric modeling systems, the data structure is shape driven. They usually use a brep model, where solids and surfaces are defined by a collection of entities such as faces, edges etc., and by attributes such as application data. These attributes are attached to the entities. Examples of application data include: + + * color, + * material, + * information that a particular edge is blended. + +A shape, however, is inevitably tied to its underlying geometry. And geometry is highly subject to change in applications such as parametric modeling or product development. In this sort of application, using a brep (boundary representation) data structure proves to be a not very effective solution. A solution other than the shape must be found, i.e. a solution where attributes are attached to a deeper invariant structure of the model. Here, the topology itself will be one attribute among many. + +In OCAF, data structure is reference key-driven. The reference key is implemented in the form of labels. Application data is attached to these labels as attributes. By means of these labels and a tree structure they are organized in, the reference key aggregates all user data, not just shapes and their geometry. These attributes have similar importance; no attribute is master in respect of the others. + +The reference keys of a model - in the form of labels - have to be kept together in a single container. This container is called a document. + +|opology-driven approach | reference key-driven approach | +|-----------------------:|------------------------------:| + +![](/user_guides/ocaf/images/ocaf_image004.png "Topology-driven vs. reference key-driven approaches") + +@subsection occt_ocaf_2_2 Applications and documents + +OCAF documents are in turn managed by an OCAF application, which is in charge of: + + * Creating new documents + * Saving documents and opening them + * Initializing document views. + +Apart from their role as a container of application data, documents can refer to each other; Document A, for example, can refer to a specific label in Document B. This functionality is made possible by means of the reference key. + +@subsection occt_ocaf_23 The document and the data framework + +Inside a document, there is a data framework, a model, for example. This is a set of labels organized in a tree structure characterized by the following features: + * The first label in a framework is the root of the tree; + * Each label has a tag expressed as an integer value; + * Sub-labels of a label are called its children; + * Each label which is not the root has one father – label from an upper level of the framework; + * Labels which have the same father are called brothers; + * Brothers cannot share the same tag; + * A label is uniquely defined by an entry expressed as a list of tags (entry) of fathers from the root: this list of tags is written from right to left: tag of label, tag of its father, tag of father of its father,..., 0 (tag of the root label). + +![](/user_guides/ocaf/images/ocaf_image005.png "A simple framework model") + +In the above figure inside the circles are the tags of corresponding labels. Under the circles are the lists of tags. The root label always has a zero tag. + +The children of a root label are middle-level labels with tags 1 and 3. These labels are brothers. + +List of tags of the right-bottom label is «0:3:4»: this label has tag 4, its father (with entry «0:3») has tag 3, father of father has tag 0 (the root label always has «0» entry). + +For example, an application for designing table lamps will first allocate a label for the lamp unit (the lamp is illustrated below). The root label never has brother labels, so, for a lot of lamps in the framework allocation, one of the root label sub-labels for the lamp unit is used. By doing so, you would avoid any confusion between table lamps in the data framework. Parts of the lamp have different material, color and other attributes, so, for each sub-unit of the lamp a child label of the lamp label with specified tags is allocated: + + * a lamp-shade label with tag 1 + * a bulb label with tag 2 + * a stem label with tag 3 + +Label tags are chosen at will. They are just identifiers of the lamp parts. Now you can refine all units: set to the specified label geometry, color, material and other information about the lamp or it’s parts. This information is placed into special attributes of the label: the pure label contains no data – it is only a key to access data. + +The thing to remember is that tags are private addresses without any meaning outside the data framework. It would, for instance, be an error to use part names as tags. These might change or be removed from production in next versions of the application, whereas the exact form of that part might be what you wanted to use in your design, the part name could be integrated into the framework as an attribute. + +![](/user_guides/ocaf/images/ocaf_image006.jpg) + +So, after the user changes the lamp design, only corresponding attributes are changed, but the label structure is maintained. The lamp shape must be recreated by new attribute values and attributes of the lamp shape must refer to a new shape. + +![](/user_guides/ocaf/images/ocaf_image007.png) + + +The previous figure shows the table-lamps document structure: each child of the root label contains a lamp shape attribute and refers to the sub-labels, which contain some design information about corresponding sub-units. + +The data framework structure allows to create more complex structures: each lamp label sub-label may have children labels with more detailed information about parts of the table lamp and its components. + +Note that the root label can have attributes too, usually global attributes: the name of the document, for example. + +As in the case of the table lamp example above, OCAF documents aggregate a battery of ready-to-use attributes, which represent typical data used in CAD. This data includes not only the Shape attribute, but a wide range of Standard attributes corresponding to the following types (see paragraph 6): + + * Geometric attributes + * General attributes + * Relationship attributes + * Auxiliary attributes + +@subsubsection occt_ocaf_2_3_1 Documents + +Documents offer access to the data framework and manage the following items: + + * Manage the notification of changes + * Update external links + * Manage the saving and restoring of data + * Store the names of software extensions. + * Manage command transactions + * Manage Undo and Redo options. + +@subsubsection occt_ocaf_2_3_2 Shape attribute + +The shape attribute implements the functionality of the OCCT topology manipulation: + + * reference to the shapes + * tracking of shape evolution + +@subsubsection occt_ocaf_2_3_3 Standard attributes + +Several ready-to-use base attributes already exist. These allow operating with simple common data in the data framework (for example: integer, real, string, array kinds of data), realize auxiliary functions (for example: tag sources attribute for the children of the label counter), create dependencies (for example: reference, tree node).... + +@subsubsection occt_ocaf_2_3_4 Visualization attributes + +These attributes allow placing viewer information to the data framework, visual representation of objects and other auxiliary visual information, which is needed for graphical data representation. + +@subsubsection occt_ocaf_2_3_5 Function services + +Where the document manages the notification of changes, a function manages propagation of these changes. The function mechanism provides links between functions and calls to various algorithms. + +![](/user_guides/ocaf/images/ocaf_image008.jpg "Document structure") + +@section occt_ocaf_3_ Data Framework Services + +@subsection occt_ocaf_3_1 Overview + +The data framework offers a single environment in which data from different application components can be handled. + +This allows you to exchange and modify data simply, consistently, with a maximum level of information, and with stable semantics. + +The building blocks of this approach are: + + * The tag + * The label + * The attribute + +As it has been mentioned earlier, the first label in a framework is the root label of the tree. Each label has a tag expressed as an integer value, and a label is uniquely defined by an entry expressed as a list of tags from the root, 0:1:2:1, for example. + +Each label can have a list of attributes, which contain data, and several attributes can be attached to a label. Each attribute is identified by a GUID, and although a label may have several attributes attached to it, it must not have more than one attribute of a single GUID. + +The sub-labels of a label are called its children. Conversely, each label, which is not the root, has a father. Brother labels cannot share the same tag. + +The most important property is that a label’s entry is its persistent address in the data framework. + +![](/user_guides/ocaf/images/ocaf_image009.jpg "Contents of a document") + +@subsection occt_ocaf_3_2 The Tag + +A tag is an integer, which identifies a label in two ways: + + * Relative identification + * Absolute identification. + +In relative identification, a label’s tag has a meaning relative to the father label only. For a specific label, you might, for example, have four child labels identified by the tags 2, 7, 18, 100. In using relative identification, you ensure that you have a safe scope for setting attributes. + +In absolute identification, a label’s place in the data framework is specified unambiguously by a colon-separated list of tags of all the labels from the one in question to the root of the data framework. This list is called an entry. TDF_Tool::TagList allows you to retrieve the entry for a specific label. + +In both relative and absolute identification, it is important to remember that the value of an integer has no intrinsic semantics whatsoever. In other words, the natural sequence that integers suggest, i.e. 0, 1, 2, 3, 4 ... - has no importance here. The integer value of a tag is simply a key. + +The tag can be created in two ways: + + * Random delivery + * User-defined delivery + +As the names suggest, in random delivery, the tag value is generated by the system in a random manner. In user-defined delivery, you assign it by passing the tag as an argument to a method. + +@subsubsection occt_ocaf_3_2_1 Creating child labels using random delivery of tags + +To append and return a new child label, you use TDF_TagSource::NewChild. In the example below, the argument *level2, which is passed to NewChild,* is a TDF_Label. + +**Example** +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +TDF_Label child1 = TDF_TagSource::NewChild (level2); +TDF_Label child2 = TDF_TagSource::NewChild (level2); +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +@subsubsection occt_ocaf_3_2_2 Creation of a child label by user delivery from a tag + +The other way to create a child label from a tag is by user delivery. In other words, you specify the tag, which you want your child label to have. + +To retrieve a child label from a tag which you have specified yourself, you need to use TDF_Label::FindChild and TDF_Label::Tag as in the example below. Here, the integer 3 designates the tag of the label you are interested in, and the Boolean false is the value for the argument *create*. When this argument is set to *false*, no new child label is created. + +**Example** +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +TDF_Label achild = root.FindChild(3,Standard_False); +if (!achild.IsNull()) { +Standard_Integer tag = achild.Tag(); +} +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +@subsection occt_ocaf_3_3 The Label + +The tag gives a persistent address to a label. The label – the semantics of the tag – is a place in the data framework where attributes, which contain data, are attached. The data framework is, in fact, a tree of labels with a root as the ultimate father label (refer to the following figure): + +![](/user_guides/ocaf/images/ocaf_image007.png) + + +Label can not be deleted from the data framework, so, the structure of the data framework that has been created can not be removed while the document is opened. Hence any kind of reference to an existing label will be actual while an application is working with the document. + +@subsubsection occt_ocaf_3_3_1 Label creation + +Labels can be created on any labels, compared with brother labels and retrieved. You can also find their depth in the data framework (depth of the root label is 0, depth of child labels of the root is 1 and so on), whether they have children or not, relative placement of labels, data framework of this label. It is the class TDF_Label that offers the above services. + +@subsubsection occt_ocaf_3_3_2 Creating child labels + +To create a new child label in the data framework using explicit delivery of tags, use TDF_Label::FindChild. + +**Example** +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{.cpp} +//creating a label with tag 10 at Root +TDF_Label lab1 = aDF->Root().FindChild(10); + +//creating labels 7 and 2 on label 10 +TDF_Label lab2 = lab1.FindChild(7); + +TDF_Label lab3 = lab1.FindChild(2); +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +You could also use the same syntax but add the Boolean *true *as a value of the argument **create**. This ensures that a new child label will be created if none is found. Note that in the previous syntax, this was also the case since *create *is *true *by default. + +**Example** +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{.cpp} +TDF_Label level1 = root.FindChild(3,Standard_True); +TDF_Label level2 = level1.FindChild(1,Standard_True); +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +@subsubsection occt_ocaf_3_3_3 Retrieving child labels + +You can retrieve child labels of your current label by iteration on the first level in the scope of this label. + +**Example** +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{.cpp} +TDF_Label current; +// +for (TDF_ChildIterator it1 (current,Standard_False); it1.More(); it1.Next()) { +achild = it1.Value(); +// +// do something on a child (level 1) +// +} +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +You can also retrieve all child labels in every descendant generation of your current label by iteration on all levels in the scope of this label. +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{.cpp} +for (TDF_ChildIterator itall (current,Standard_True); itall.More(); itall.Next()) { +achild = itall.Value(); +// +// do something on a child (all levels) +// +} +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +Using TDF_Tool::Entry with TDF_ChildIterator you can retrieve the entries of your current label’s child labels as well. + +**Example** +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{.cpp} +void DumpChildren(const TDF_Label& aLabel) +{ + TDF_ChildIterator it; + TCollection_AsciiString es; + for (it.Initialize(aLabel,Standard_True); it.More(); it.Next()){ + TDF_Tool::Entry(it.Value(),es); + cout = as.ToCString() = endl; + } +} +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +@subsubsection occt_ocaf_3_3_4 Retrieving the father label + +Retrieving the father label of a current label. + +**Example** +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{.cpp} +TDF_Label father = achild.Father(); +isroot = father.IsRoot(); +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +@subsection occt_ocaf_3_4 The Attribute + +The label itself contains no data. All data of any type whatsoever - application or non-application - is contained in attributes. These are attached to labels, and there are different types for different types of data. OCAF provides many ready-to-use standard attributes such as integer, real, constraint, axis and plane. There are also attributes for topological naming, functions and visualization. Each type of attribute is identified by a GUID. + +The advantage of OCAF is that all of the above attribute types are handled in the same way. Whatever the attribute type is, you can create new instances of them, retrieve them, attach them to and remove them from labels, «forget» and «remember» the attributes of a particular label. + +@subsubsection occt_ocaf_3_4_1 Retrieving an attribute from a label + +To retrieve an attribute from a label, you use TDF_Label::FindAttribute. In the example below, the GUID for integer attributes, and *INT*, a handle to an attribute are passed as arguments to FindAttribute for the current label. + +**Example** +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{.cpp} +if(current.FindAttribute(TDataStd_Integer::GetID(),INT)) +{ + // the attribute is found +} +else +{ + // the attribute is not found +} +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +@subsubsection occt_ocaf_3_4_2 Identifying an attribute using a GUID + +You can create a new instance of an attribute and retrieve its GUID. In the example below, a new integer attribute is created, and its GUID is passed to the variable *guid *by the method ID inherited from TDF_Attribute. + +**Example** +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{.cpp} +Handle(TDataStd_Integer) INT = new TDataStd_Integer(); +Standard_GUID guid = INT->ID(); +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +@subsubsection occt_ocaf_3_4_3 Attaching an attribute to a label + +To attach an attribute to a label, you use TDF_Label::Add. Repetition of this syntax raises an error message because there is already an attribute with the same GUID attached to the current label. + +TDF_Attribute::Label for *INT *then returns the label *attach *which *INT *is attached to. + +**Example** +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{.cpp} +current.Add (INT); // INT is now attached to current +current.Add (INT); // causes failure +TDF_Label attach = INT->Label(); +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +@subsubsection occt_ocaf_3_4_4 Testing the attachment to a label + +You can test whether an attribute is attached to a label or not by using TDF_Attribute::IsA with the GUID of the attribute as an argument. In the example below, you test whether the current label has an integer attribute, and then, if that is so, how many attributes are attached to it. TDataStd_Integer::GetID provides the GUID argument needed by the method IsAttribute. + +TDF_Attribute::HasAttribute tests whether there is an attached attribute, and TDF_Tool::NbAttributes returns the number of attributes attached to the label in question, *current *here, + +**Example** +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{.cpp} +// Testing of attribute attachment +// +if (current.IsA(TDataStd_Integer::GetID())) { +// the label has an Integer attribute attached +} +if (current.HasAttribute()) { +// the label has at least one attribute attached +Standard_Integer nbatt = current.NbAttributes(); +// the label has nbatt attributes attached +} +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +@subsubsection occt_ocaf_3_4_5 Removing an attribute from a label + +To remove an attribute from a label, you use TDF_Label::Forget with the GUID of the deleted attribute. To remove all attributes of a label, TDF_Label::ForgetAll. + +**Example** +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{.cpp} +current.Forget(TDataStd_Integer::GetID()); +// integer attribute is now not attached to current label +current.ForgetAll(); +// current has now 0 attributes attached +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +@subsubsection occt_ocaf_3_4_6 Specific attribute creation + +If the set of existing and ready to use attributes implementing standard data types does  not cover the needs of a specific data presentation task, the user can build his own data type and the corresponding new specific attribute implementing this new data type. + +There are two ways to implement a new data type: create a new attribute (standard approach), or use the notion of User Attribute by means of a combination of standard attributes  (alternative way) + +In order to create a new attribute in the standard way do the following: +* Create a class inherited from TDF_Attribute and implement all purely virtual and necessary virtual methods: ++ **ID()** – returns a unique GUID of a given attribute ++ **Restore(attribute)** – sets fields of this attribute equal to the fields of a given attribute of the same type ++ **Paste(attribute, relocation_table)** – sets fields of a given attribute equal to the field values of this attribute ; if the attribute has references to some objects of the data framework  and relocation_table has this element, then the given attribute must also refer to this object . ++ **NewEmpty()** - returns a new attribute of this class with empty fields ++ **Dump(stream)** - outputs information about a given attribute to a given stream debug (usually outputs an attribute of type string only) +* Create the persistence classes for this attribute according to the file format chosen for the document (see below). + +Methods NewEmpty, Restore and Paste are used for the common transactions mechanism (Undo/Redo commands). If you don’t need this attribute to react to undo/redo commands, you can write only stubs of these methods, else you must call the Backup method of the TDF_Attribute class every time attribute fields are changed. + +If you use a standard file format and you want your new attributes to be stored during document saving and retrieved to the data framework whenever a document is opened, you must do the following: + + * If you place an attribute to a new package, it is desirable (although not mandatory) if your package name starts with letter «T» (transient), for example: attribute TMyAttributePackage_MyAttribute in the package TMyAttributePackage + * Create a new package with name «P[package name]» (for example PMyAttributePackage) with class PMyAttributePackage_MyAttribute inside. The new class inherits the PDF_Attribute class and contains fields of attributes, which must be saved or retrieved («P» - persistent). + * Create a new package with name «M[package name]» (for example MMyAttributePackage) with classes MMyAttributePackage_MyAttributeRetrievalDriver and MMyAttributePackage_MyAttributeStorageDriver inside. The new classes inherit MDF_ARDriver and MDF_ASDriver classes respectively and contain the translation functionality: from T... attribute to P... and vice versa (M - middle) (see the realization of the standard attributes). + * M... package must contain AddStorageDrivers(aDriverSeq : ASDriverHSequence from MDF) and AddRetrievalDrivers(aDriverSeq : ASDriverHSequence from MDF) methods, which append to the given sequence of drivers  a sequence of all new attribute drivers (see the previous point), which will be used for the attributes storage/retrieval. + * Use the standard schema (StdSchema unit) or create a new one to add your P-package and compile it. + +If you use the XML format, do the following: + * Create a new package with the name Xml[package name] (for example XmlMyAttributePackage) containing  class XmlMyAttributePackage_MyAttributeDriver. The new class inherits XmlMDF_ADriver class and contains the translation functionality: from transient to persistent and vice versa (see the realization of the standard attributes in the packages XmlMDataStd, for example). Add package method AddDrivers which adds your class to a driver table (see below). + * Create a new package (or do it in the current one) with two package methods: Factory, which loads the document storage and retrieval drivers; and AttributeDrivers, which calls the methods AddDrivers for all packages responsible for persistence of the document. + * Create a plug-in implemented as an executable (see example XmlPlugin). It calls a macro PLUGIN with the package name where you implemented the method Factory. +If you use the binary format, do the following: + * Create a new package with name Bin[package name] (for example BinMyAttributePackage) containing a class BinMyAttributePackage_MyAttributeDriver. The new class inherits BinMDF_ADriver class and contains the translation functionality: from transient to persistent and vice versa (see the realization of the standard attributes in the packages BinMDataStd, for example). Add package method AddDrivers which adds your class to a driver table (see below). + * Create a new package (or do it in the current one) with two package methods: Factory, which loads the document storage and retrieval drivers; and AttributeDrivers, which calls the methods AddDrivers for all packages responsible for persistence of the document. + * Create a plug-in implemented as an executable (see example BinPlugin). It calls a macro PLUGIN with the package name where you implemented the method Factory. + +See «Saving the document» on page 23 and «Opening the document from a file» on page 25 for the description of a document save/open mechanisms. + +If you decided to use the alternative way (create a new attribute by means of UAttribute and a combination of other standard attributes), do the following: + * Set a TDataStd_UAttribute with a unique GUID attached to a label. This attribute defines the semantics of the data type (identifies the data type). + * Create child labels and allocate all necessary data through standard attributes at the child labels. + * Define an interface class for access to the data of the child labels. + +Choosing the alternative way of implementation of new data types allows to forget about creating persistence classes for your new data type. Standard persistence classes will be used instead.Besides, this way allows separating the data and the methods for access to the data (interfaces). It can be used for rapid development in all cases when requirements to application performance are not very high. + +Let’s study the implementation of the same data type in both ways by the example of transformation represented by gp_Trsf class. The class gp_Trsf defines the transformation according to the type (gp_TrsfForm) and a set of parameters of the particular type of transformation (two points or a vector for translation, an axis and an angle for rotation, and so on). + +1. The first way: creation of a new attribute. The implementation of the transformation by creation of a new attribute is represented in the Appendix. + +2. The second way: creation of a new data type by means of combination of standard attributes. Depending on the type of transformation it may be kept in data framework by different standard attributes. For example, a translation is defined by two points. Therefore the data tree for translation looks like this: + * Type of transformation (gp_Translation) as TDataStd_Integer; + * First point as TDataStd_RealArray (three values: X1, Y1 and Z1); + * Second point as TDataStd_RealArray (three values: X2, Y2 and Z2). + +![](/user_guides/ocaf/images/ocaf_image010.png "Data tree for translation") + +If the type of transformation is changed to rotation, the data tree looks like this: + * Type of transformation (gp_Rotation) as TDataStd_Integer; + * Point of axis of rotation as TDataStd_RealArray (three values: X, Y and Z); + * Axis of rotation as TDataStd_RealArray (three values: DX, DY and DZ); + * Angle of rotation as TDataStd_Real. + +![](/user_guides/ocaf/images/ocaf_image011.png "Data tree for rotation") + +The attribute TDataStd_UAttribute with the chosen unique GUID identifies the data type. The interface class initialized by the label of this attribute allows access to the data container (type of transformation and the data of transformation according to the type). + + +@section occt_ocaf_4_ Standard Document Services + +@subsection occt_ocaf_4_1 Overview + +Standard documents offer ready-to-use documents containing a TDF-based data framework. Each document can contain only one framework. + +The documents themselves are contained in the instantiation of a class inheriting from TDocStd_Application. This application manages the creation, storage and retrieval of documents. + +You can implement undo and redo in your document, and refer from the data framework of one document to that of another one. This is done by means of external link attributes, which store the path and the entry of external links. + +To sum up, standard documents alone provide access to the data framework. They also allow you to: + + * Update external links + * Manage the saving and opening of data + * Manage the undo/redo functionality. + + +@subsection occt_ocaf_4_2 The Application + +As a container for your data framework, you need a document, and your document must be contained in your application. This application will be a class inheriting from TDocStd_Application. + +@subsubsection occt_ocaf_4_2_1 Creating an application + +To create an application, use the following syntax. + +**Example** +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{.cpp} +Handle(TDocStd_Application) app += new MyApplication_Application (); +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +Note that MyApplication_Application is a class, which you have to create and which will inherit from TDocStd_Application. + +@subsubsection occt_ocaf_4_2_2 Creating a new document + +To the application which you declared in the previous example (4.2.1), you must add the document *doc *as an argument of TDocStd_Application::NewDocument. + +**Example** +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{.cpp} +Handle(TDocStd_Document) doc; +app->NewDocument("NewDocumentFormat", doc); +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +@subsubsection occt_ocaf_4_2_3 Retrieving the application to which the document belongs + +To retrieve the application containing your document, you use the syntax below. + +**Example** +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{.cpp} +app = Handle(TDocStd_Application)::DownCast +(doc->Application()); +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +@subsection occt_ocaf_4_3 The Document + +The document contains your data framework, and allows you to retrieve this framework, recover its main label, save it in a file, and open or close this file. + +@subsubsection occt_ocaf_4_3_1 Accessing the main label of the framework + +To access the main label in the data framework, you use TDocStd_Document::Main as in the example below. The main label is the first child of the root label in the data framework, and has the entry 0:1. + +**Example** +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{.cpp} +TDF_Label label = doc->Main(); +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +@subsubsection occt_ocaf_4_3_2 Retrieving the document from a label in its framework + +To retrieve the document from a label in its data framework, you use TDocStd_Document::Get as in the example below. The argument *label *passed to this method is an instantiation of TDF_Label. + +**Example** +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{.cpp} +doc = TDocStd_Document::Get(label); +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +@subsubsection occt_ocaf_4_3_3 Saving the document + +If in your document you use only standard attributes (from the packages TDF, TDataStd, TNaming, TFunction, TPrsStd and TDocStd), you just do the following steps: + +* In your application class (which inherits class TDocStd_Application) implement two methods: ++ Formats (TColStd_SequenceOfExtendedString& theFormats), which append to a given sequence your document format string, for example, «NewDocumentFormat» – this string is also set in the document creation command ++ ResourcesName(), which returns a string with a name of resources file (this file contains a description about the extension of the document, storage/retrieval drivers GUIDs...), for example, «NewFormat» +* Create the resource file (with name, for example, «NewFormat») with the following strings: + +~~~~~ +formatlist:NewDocumentFormat +NewDocumentFormat: New Document Format Version 1.0 +NewDocumentFormat.FileExtension: ndf +NewDocumentFormat.StoragePlugin: bd696000-5b34-11d1-b5ba-00a0c9064368 +NewDocumentFormat.RetrievalPlugin: bd696001-5b34-11d1-b5ba-00a0c9064368 +NewDocumentFormatSchema: bd696002-5b34-11d1-b5ba-00a0c9064368 +NewDocumentFormat.AttributeStoragePlugin:57b0b826-d931-11d1-b5da-00a0c9064368 +NewDocumentFormat.AttributeRetrievalPlugin:57b0b827-d931-11d1-b5da-00a0c9064368 +~~~~~ + +* Create the resource file «Plugin» with GUIDs and corresponding plugin libraries, which looks like this: + +**Example** +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{.cpp} +! Description of available plugins +! ************ + +b148e300-5740-11d1-a904-080036aaa103.Location: libFWOSPlugin.so +! +! standard document drivers plugin +! +bd696000-5b34-11d1-b5ba-00a0c9064368.Location: libPAppStdPlugin.so +bd696001-5b34-11d1-b5ba-00a0c9064368.Location: libPAppStdPlugin.so +! +! standard schema plugin +! +bd696002-5b34-11d1-b5ba-00a0c9064368.Location: libPAppStdPlugin.so +! +! standard attribute drivers plugin +! +57b0b826-d931-11d1-b5da-00a0c9064368.Location: libPAppStdPlugin.so +57b0b827-d931-11d1-b5da-00a0c9064368.Location: libPAppStdPlugin.so +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +In order to set the paths for these files it is necessary to set the environments: CSF_PluginDefaults and CSF_NewFormatDefaults. For example, set the files in the directory "MyApplicationPath/MyResources": + +~~~~~ +setenv CSF_PluginDefaults MyApplicationPath/MyResources +setenv CSF_NewFormatDefaults MyApplicationPath/MyResources +~~~~~ + +Once these steps are taken you may run your application, create documents and Save/Open them. These resource files already exist in the OCAF (format «Standard»). + +If you use your specific attributes from packages, for example, P-, M- and TMyAttributePackage, see «Specific attribute creation» on page 20; you must take some additional steps for the new plugin implementation: + +* Add our «P» package to the standard schema. You can get an already existing (in Open CASCADE Technology sources) schema from StdSchema unit and add your package string to the cdl-file: «package  PMyAttributePackage». +* Next step consists of implementation of an executable, which will connect our documents to our application and open/save them. Copy the package PAppStdPlugin and change its name to MyTheBestApplicationPlugin. In the PLUGIN macros type the name of your factory which will be defined in the next step. +* Factory is a method, which returns drivers (standard drivers and our defined drivers from the "M" package) by a GUID. Copy the package where the standard factory is defined (it is PAppStd in the OCAF sources). Change its name to MyTheBestSchemaLocation. The Factory() method of the PappStd package checks the GUID set as its argument and returns the corresponding table of drivers. Set two new GUIDs for your determined storage and retrieval drivers. Append two "if" declarations inside the Factory() method which should check whether the set GUID coincides with GUIDs defined by the Factory() method as far as our storage and retrieval drivers are concerned. If the GUID coincides with one of them, the method should return a table of storage or retrieval drivers respectively. +* Recompile all. Add the strings with GUIDs – in accordance with your plugin library GUID - to the «Plugin» file. + +@subsubsection occt_ocaf_4_3_4 Opening the document from a file + +To open the document from a file where it has been previously saved, you use TDocStd_Application::Open as in the example below. The arguments are the path of the file and the document saved in this file. + +**Example** +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{.cpp} +app->Open("/tmp/example.caf", doc); +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +@subsection occt_ocaf_4_4 External Links + +External links refer from one document to another. They allow you to update the copy of data  framework later on. + +![](/user_guides/ocaf/images/ocaf_image012.jpg  "External links between documents") + +Note that documents can be copied with or without a possibility of updating an external link. + +@subsubsection occt_ocaf_4_4_1 Copying the document + +With a possibility of updating it later +--------------------------------------- + +To copy a document with a possibility of updating it later, you use TDocStd_XLinkTool::CopyWithLink. + +**Example** +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{.cpp} +Handle(TDocStd_Document) doc1; +Handle(TDocStd_Document) doc2; + +TDF_Label source = doc1->GetData()->Root(); +TDF_Label target = doc2->GetData()->Root(); +TDocStd_XLinkTool XLinkTool; + +XLinkTool.CopyWithLink(target,source); +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Now the target document has a copy of the source document. The copy also has a link in order to update the content of the copy if the original changes. + +In the example below, something has changed in the source document. As a result, you need to update the copy in the target document. This copy is passed to TDocStd_XLinkTool::UpdateLink as the argument *target*. + +**Example** +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{.cpp} +XLinkTool.UpdateLink(target); +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +With no link between the copy and the original +---------------------------------------------- + +You can also create a copy of the document with no link between the original and the copy. The syntax to use this option is TDocStd_XLinkTool::Copy; the copied document is again represented by the argument *target*, and the original – by *source.* + +**Example** +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{.cpp} +XLinkTool.Copy(target, source); + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + +@section occt_ocaf_5_ OCAF Shape Attributes +@subsection occt_ocaf_5_1 Overview + +OCAF shape attributes are used for topology objects and their evolution access. All topological objects are stored in one TNaming_UsedShapes attribute at the root label of the data framework. This attribute contains a map with all topological shapes used in a given document. + +The user can add the TNaming_NamedShape attribute to other labels. This attribute contains references (hooks) to shapes from the TNaming_UsedShapes attribute and an evolution of these shapes. The TNaming_NamedShape attribute contains a set of pairs of hooks: to the *Old* shape and to a *New* shape (see the following figure). It allows not only to get the topological shapes by the labels, but also to trace the evolution of the shapes and to correctly update dependent shapes by the changed one. + +If a shape is newly created, then the old shape of a corresponding named shape is an empty shape. If a shape is deleted, then the new shape in this named shape is empty. + +![](/user_guides/ocaf/images/ocaf_image013.png) + +Different algorithms may dispose sub-shapes of the result shape at the individual labels depending on whether it is necessary to do so: + +* If a sub-shape must have some extra attributes (material of each face or color of each edge). In this case a specific sub-shape is placed to a separate label (usually to a sub-label of the result shape label) with all attributes of this sub-shape. +* If the topological naming algorithm is needed, a necessary and sufficient set of sub-shapes is placed to child labels of the result shape label. As usual, for a basic solid and closed shells, all faces of the shape are disposed. + + +TNaming_NamedShape may contain a few pairs of hooks with the same evolution. In this case the topology shape, which belongs to the named shape is a compound of new shapes. + +Consider the following example. Two boxes (solids) are fused into one solid (the result one). Initially each box was placed to the result label as a named shape, which has evolution PRIMITIVE and refers to the corresponding shape of the TNaming_UsedShapes map. The box result label has a material attribute and six child labels containing named shapes of Box faces. + +![](/user_guides/ocaf/images/ocaf_image014.png "Resulting box") + +After the fuse operation a modified result is placed to a separate label as a named shape, which refers to the old shape – one of the boxes, as well as to the new shape – the shape resulting from the fuse operation – and has evolution MODIFY (see the following figure). + +Named shapes, which contain information about modified faces, belong to the fuse result sub-labels: sub-label with tag 1 – modified faces of the first box, sub-label with tag 2 – generated faces of the box 2. + +![](/user_guides/ocaf/images/ocaf_image015.png) + +This is necessary and sufficient information for the functionality of the right naming mechanism: any sub-shape of the result can be identified unambiguously by name type and set of labels, which contain named shapes: + + * face F1’ as a modification of F11  face + * face F1’’ as generation of F12 face + * edges as an intersection of two contiguous faces + * vertices as an intersection of three contiguous faces + +After any modification of source boxes the application must automatically rebuild the naming entities: recompute the named shapes of the boxes (solids and faces) and fuse the resulting named shapes (solids and faces) that reference to the new named shapes. + +@subsection occt_ocaf_5_2 Services provided + +@subsubsection occt_ocaf_5_2_1 Registering shapes and their evolution + +When using TNaming_NamedShape to create attributes, the following fields of an attribute are filled: + +* A list of shapes called the «old» and the «new» shapes A new shape is recomputed as the value of the named shape. The meaning of this pair depends on the type of evolution. +* The type of evolution: a term of the TNaming_Evolution enumeration: +* PRIMITIVE – newly created topology, with no previous history +* GENERATED – as usual, this evolution of a  named shape means, that the new shape is created from a low-level old shape ( a prism face from an edge, for example ) +* MODIFY – the new shape is a modified old shape +* DELETE – the new shape is empty; the named shape with this evolution just indicates that the old shape topology is deleted from the model + * SELECTED – a named shape with this evolution has no effect on the history of the topology; it is +used for the selected shapes that are placed to the separate label + +Only pairs of shapes with equal evolution can be stored in one named shape. + +@subsubsection occt_ocaf_5_2_2 Using naming resources + +The class TNaming_Builder allows you to create a named shape attribute. It has a label of a future attribute as an argument of the constructor. Respective methods are used for the evolution and setting of shape pairs. If for the same TNaming_Builder object a lot of pairs of shapes with the same evolution are given, then these pairs would be placed in the resulting named shape. After the creation of a new object of the TNaming_Builder class, an empty named shape is created at the given label. + +**Example** +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{.cpp} +// a new empty named shape is created at «label» +TNaming_Builder builder(label); +// set a pair of shapes with evolution GENERATED +builder.Generated(oldshape1,newshape1); +// set another pair of shapes with the same evolution +builder.Generated(oldshape2,newshape2); +// get the result – TNaming_NamedShape attribute +Handle(TNaming_NamedShape) ns = builder.NamedShape(); +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +@subsubsection occt_ocaf_5_2_3 Reading the contents of a named shape attribute + +You can use TNaming_NamedShape class to get evolution of this named shape (method TNaming_NamedShape::Evolution()) and «value» of the named shape – compound of new shapes of all pairs of this named shape (method TNaming_NamedShape::Get()). +  +More detailed information about the contents of the named shape or about the modification history of a topology can be obtained with the following: + +* TNaming_Tool provides a common high-level functionality for access to the named shapes contents: +* GetShape(Handle(TNaming_NamedShape)) method returns a compound of new shapes of the given named shape +* CurrentShape(Handle(TNaming_NamedShape)) method returns a compound of the shapes – last modifications ( latest versions ) of the shapes from the given named shape +* NamedShape(TopoDS_Shape,TDF_Label) method returns a named shape, which contains a given shape as a new shape. Given label is any label from the data framework – it just gives access to it +* TNaming_Iterator given access to the named shape hooks pairs. + +**Example** +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{.cpp} +// create an iterator for a named shape +TNaming_Iterator iter(namedshape); +// iterate while some pairs are not iterated +while(iter.More()) { +// get the new shape from the current pair +TopoDS_Shape newshape = iter.NewShape(); +// get the old shape from the current pair +TopoDS_Shape oldshape = iter.OldShape(); +// do something... + +// go to the next pair +iter.Next(); +} +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + +@subsubsection occt_ocaf_5_2_4 Selection Mechanism + +One of user interfaces for topological naming resources is the TNaming_Selector class. You can use this class to: + + * Store a selected shape on a label + * Access the named shape + * Update this naming + +Selector places a new named shape with evolution SELECTED to the given label. By the given context shape (main shape, which contains a selected sub-shape), its evolution and naming structure the selector creates a «name» of the selected shape – unique description how to find a selected topology. + +After any modification of a context shape and updating of the corresponding naming structure, you must call the TNaming_Selector::Solve method. If the naming structure is right, then the selector automatically updates the selected shape in the corresponding named shape, else it fails. + +@subsubsection occt_ocaf_5_2_5 Exploring shape evolution + +The class TNaming_Tool provides a toolkit to read current data contained in the attribute. + +If you need to create a topological attribute for existing data, use the method NamedShape. + +**Example** +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{.cpp} +class MyPkg_MyClass +{ +public: Standard_Boolean SameEdge (const Handle(CafTest_Line)& L1, const Handle(CafTest_Line)& L2); +}; + +Standard_Boolean CafTest_MyClass::SameEdge (const Handle(CafTest_Line)& L1, const Handle(CafTest_Line)& L2) +{ + Handle(TNaming_NamedShape) NS1 = L1->NamedShape(); + Handle(TNaming_NamedShape) NS2 = L2->NamedShape(); + return BRepTools::Compare(NS1,NS2); +} +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +@section occt_ocaf_6_ Standard Attributes + +@subsection occt_ocaf_6_1 Overview + +There are several ready-to-use attributes, which allow creating and modifying attributes for many basic data types. They are available in the packages TDataStd, TDataXtd and TDF. Each attribute belongs to one of four types: + + * Geometric attributes + * General attributes + * Relationship attributes + * Auxiliary attributes + +Geometric attributes +-------------------- + + * Axis – simply identifies, that the concerned TNaming_NamedShape attribute with an axis shape inside belongs to the same label + * Constraint – contains information about a constraint between geometries: used geometry attributes, type, value (if exists), plane (if exists), «is reversed», «is inverted» and «is verified» flags + * Geometry – simply identifies, that the concerned TNaming_NamedShape attribute with a specified-type geometry belongs to the same label + * Plane – simply identifies, that the concerned TNaming_NamedShape attribute with a plane shape inside belongs to the same label + * Point – simply identifies, that the concerned TNaming_NamedShape attribute with a  point shape inside belongs to the same label + * Shape – simply identifies, that the concerned TNaming_NamedShape attribute belongs to the same label + * PatternStd  – identifies one of five available pattern models (linear, circular, rectangular, circular rectangular and mirror) + * Position – identifies the position in 3d global space + +General attributes +------------------ + + * AsciiString – contains AsciiString value + * BooleanArray – contains an array of Boolean + * BooleanList – contains a list of Boolean + * ByteArray – contains an array of Byte (unsigned char) values + * Comment – contains a string – some comment for a given label (or attribute) + * Expression – contains an expression string and a list of used variables attributes + * ExtStringArray – contains an array of ExtendedString values + * ExtStringList – contains a list of ExtendedString values + * Integer – contains an integer value + * IntegerArray – contains an array of  integer values + * IntegerList – contains a list of integer values + * IntPackedMap – contains a packed map of integers + * Name – contains a string – some name of a given label (or attribute) + * NamedData – may contain up to 6 of the following named data sets (vocabularies): DataMapOfStringInteger, DataMapOfStringReal, DataMapOfStringString, DataMapOfStringByte, DataMapOfStringHArray1OfInteger, DataMapOfStringHArray1OfReal + * NoteBook – contains a NoteBook object attribute + * Real – contains a real value + * RealArray – contains an array of  real values + * RealList    – contains a list of real values + * Relation – contains a relation string and a list of used variables attributes + * Tick – defines a boolean attribute + * Variable – simply identifies, that a variable belongs to this label; contains the «is constraint» flag and a string of used units («mm», «m»...) + * UAttribute – attribute with a user-defined GUID. As a rule, this attribute is used as a marker, which is independent of attributes at the same label (note, that attributes with the same GUIDs can not belong to the same label) + +Relationship attributes +----------------------- + + * Reference – contains reference to the label of its own data framework + * ReferenceArray – contains an array of references + * ReferenceList – contains a list of references + * TreeNode – this attribute allows to create an internal tree in the data framework; this tree consists of nodes with the specified tree ID; each node contains references to the father, previous brother, next brother, first child nodes and tree ID. + +Auxiliary attributes +-------------------- + * Directory – hi-level tool attribute for sub-labels management + * TagSource – this attribute is used for creation of new children: it stores the tag of the last-created child of the label and gives access to the new child label creation functionality. + +All of these attributes inherit class TDF_Attribute, so, each attribute has its own GUID and standard methods for attribute creation, manipulation, getting access to the data framework. + + +@subsection occt_ocaf_6_2 Services common to all attributes + +@subsubsection occt_ocaf_6_2_1 Accessing GUIDs + +To access the GUID of an attribute, you can use two methods: + + * Method **GetID**: this is the static method of a class. It returns the GUID of any attribute, which is an object of a specified class (for example, TDataStd_Integer returns the GUID of an integer attribute). Only two classes from the list of standard attributes do not support these methods: TDataStd_TreeNode and TDataStd_Uattribute, because the GUIDs of these attributes are variable. + * Method **ID**: this is the method of an object of an attribute class. It returns the GUID of this attribute. Absolutely all attributes have this method: only by this identifier you can discern the type of an attribute. + +@subsubsection occt_ocaf_6_2_2 Conventional Interface of Standard Attributes + +It is usual to create standard named methods for the attributes: + + * Method Set(label, [value]) – it is the static method, which allows to add an attribute to a given label.  If an attribute is characterized by one value this method may set it. + * Method Get() returns the value of an attribute if it is characterized by one value. + * Method Dump(Standard_OStream) outputs debug information about a given attribute to a given stream. + +@section occt_ocaf_7_ Visualization Attributes + +@subsection occt_ocaf_7_1 Overview + +Standard visualization attributes implement the Application Interactive Services (see Open CASCADE Technology Visualization User’s Guide) in the context of Open CASCADE Technology Application Framework. Standard visualization attributes are AISViewer and Presentation and belong to the TPrsStd package. + +@subsection occt_ocaf_7_2 Services provided + +@subsubsection occt_ocaf_7_2_1 Defining an interactive viewer attribute + +The class TPrsStd_AISViewer allows you to define an interactive viewer attribute. There may be only one such attribute per one data framework and it is always placed to the root label. So, it could be set or found by any label («access label») of the data framework. Nevertheless the default architecture can be easily extended and the user can manage several Viewers per one framework by himself. + +To initialize the AIS viewer as in the example below, use method Find. + +**Example** +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{.cpp} +// «access» is any label of the data framework +Handle(TPrsStd_AISViewer) viewer = TPrsStd_AISViewer::Find(access) +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +@subsection occt_ocaf_7_2_2 Defining a presentation attribute + +The class TPrsStd_AISPresentation allows you to define the visual presentation of document labels contents. In addition to various visual fields (color, material, transparency, «isDisplayed», etc.), this attribute contains its driver GUID. This GUID defines the functionality, which will update the presentation every time when needed. + +@subsubsection occt_ocaf_7_2_3 Creating your own driver + +The abstract class TPrsStd_Driver allows you to define your own driver classes. Simply redefine the Update method in your new class, which will rebuild the presentation. + +If your driver is placed to the driver table with the unique driver GUID, then every time the viewer updates presentations with a GUID identical to your driver’s GUID, the Update method of your driver for these presentations must be called: +![](/user_guides/ocaf/images/ocaf_image016.png) + +As usual, the GUID of a driver and the GUID of a displayed attribute are the same. + +@subsubsection occt_ocaf_7_2_4 Using a container for drivers + +You frequently need a container for different presentation drivers. The class TPrsStd_DriverTable provides this service. You can add a driver to the table, see if one is successfully added, and fill it with standard drivers. + +To fill a driver table with standard drivers, first initialize the AIS viewer as in the example above, and then pass the return value of the method InitStandardDrivers to the driver table returned by the method Get. Then attach a TNaming_NamedShape to a label and set the named shape in the presentation attribute using the method Set. Then attach the presentation attribute to the named shape attribute, and the AIS_InteractiveObject, which the presentation attribute contains, will initialize its drivers for the named shape. This can be seen in the example below. + +**Example** +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{.cpp} +DriverTable::Get() -> InitStandardDrivers(); +// next, attach your named shape to a label +TPrsStd_AISPresentation::Set(NS}; +// here, attach the AISPresentation to NS. +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +@section occt_ocaf_8_ Function Services + +@subsection occt_ocaf_8_1 Overview + +Function services aggregate data necessary for regeneration of a model. The function mechanism - available in the package TFunction - provides links between functions and any execution algorithms, which take their arguments from the data framework, and write their results inside the same framework. + +When you edit any application model, you have to regenerate the model by propagating the modifications. Each propagation step calls various algorithms. To make these algorithms independent of your application model, you need to use function services. + +Take, for example, the case of a modeling sequence made up of a box with the application of a fillet on one of its edges. If you change the height of the box, the fillet will need to be regenerated as well. + +@subsection occt_ocaf_8_2 Services provided + +@subsubsection occt_ocaf_8_2_1 Finding functions, their owners and roots + +The class TFunction_Function is an attribute, which stores a link to a function driver in the data framework. In the static table TFunction_DriverTable correspondence links between function attributes and drivers are stored. + +You can write your function attribute, a driver for such attribute (which updates the function result in accordance to a given map of changed labels), and set your driver with the GUID to the driver table. + +Then the solver algorithm of a data model can find the Function attribute on a corresponding label and call the Execute driver method to update the result of the function. + +@subsubsection occt_ocaf_8_2_2 Storing and accessing information about function status + +For updating algorithm optimization, each function driver has access to the TFunction_Logbook object that is a container for a set of touched, impacted and valid labels. Using this object a driver gets to know which arguments of the function were modified. + +@subsubsection occt_ocaf_8_2_3 Propagating modifications + +An application must implement its functions, function drivers and the common solver for parametric model creation. For example, check the following model (see the following illustration): + +![](/user_guides/ocaf/images/ocaf_image017.png) + +The procedure of its creation is as follows: + * create a rectangular planar face F with height 100 and width 200 + * create prism P using face F as a basis + * create fillet L at the edge of the prism + * change the width of F from 200 to 300: + * the solver for the function of face F starts + * the solver detects that an argument of the face *F* function has been modified + * the solver calls the driver of the face F function for a  regeneration of the face + * the driver rebuilds face F and adds the label of the face *width* argument to the logbook as touched and the label of the function of face F as impacted + + * the solver detects the function of P – it depends on the function of F + * the solver calls the driver of the prism P function + * the driver rebuilds prism P and adds the label of this prism to the logbook as  impacted + * the solver detects the function of L  – it depends on the function of P + * the solver calls the L function driver + * the driver rebuilds fillet L and adds the label of the fillet to the logbook as impacted + +@section occt_ocaf_9 XML Support + +Writing and reading XML files in OCCT is provided by LDOM package, which constitutes an integral part +of XML OCAF persistence, which is the optional component provided on top of Open CASCADE Technology. + +The Light DOM (LDOM) package contains classes maintaining a data structure whose main principles conform to W3C DOM Level 1 Recommendations. The purpose of these classes as required by XML OCAF persistence schema is to: +* Maintain a tree structure of objects in memory representing the XML document. The root of the structure is an object of the LDOM_Document type. This object contains all the data corresponding to a given XML document and contains one object of the LDOM_Element type named "document element". The document element contains other LDOM_Element objects forming a tree. Other types of nodes (LDOM_Attr, LDOM_Text, LDOM_Comment, LDOM_CDATASection) represent the corresponding XML types and serve as branches of the tree of elements. +* Provide class LDOM_Parser to read XML files and convert them to LDOM_Document objects. +* Provide class LDOM_XmlWriter to convert LDOM_Document to a character stream in XML format and store it in file. + +This package covers the functionality provided by numerous products known as "DOM parsers". Unlike most of them, LDOM was specifically developed to meet the following requirements: +* To minimize the virtual memory allocated by DOM data structures. In average, the amount of memory of LDOM is the same as the XML file size (UTF-8). +* To minimize the time required for parsing and formatting XML, as well as for access to DOM data structures. + +Both these requirements are important when XML files are processed by applications if these files are relatively large (occupying megabytes and even hundreds of megabytes). To meet the requirements, some limitations were imposed on the DOM Level 1 specification; these limitations are insignificant in applications like OCAF. Some of these limitations can be overridden in the course of future developments. The main limitations are: +* No Unicode support as well as various other encodings; only ASCII strings are used in DOM/XML. Note: There is a data type TCollection_ExtendedString for wide character data. This type is supported by LDOM_String as a sequence of numbers. +* Some superfluous methods are deleted: getPreviousSibling, getParentNode, etc. +* No resolution of XML Entities of any kind +* No support for DTD: the parser just checks for observance of general XML rules and never validates documents. +* Only 5 available types of DOM nodes: LDOM_Element, LDOM_Attr, LDOM_Text, LDOM_Comment, LDOM_CDATASection. +* No support of Namespaces; prefixed names are used instead of qualified names. +* No support of the interface DOMException (no exception when attempting to remove a non-existing node). + +LDOM is dependent on Kernel OCCT classes only. Therefore, it can be used outside OCAF persistence in various algorithms where DOM/XML support may be required. + +@subsection occt_ocaf_9_1 Document Drivers + +The drivers for document storage and retrieval manage conversion between a transient OCAF +Document in memory and its persistent reflection in a container (disk, memory, network ...). For XML Persistence, they are defined in the package XmlDrivers. + +The main methods (entry points) of these drivers are: +* *Write()* - for a storage driver; +* *Read()* - for a retrieval driver. + +The most common case (which is implemented in XML Persistence) is writing/reading document to/from a regular OS file. Such conversion is performed in two steps: + +First it is necessary to convert the transient document into another form (called persistent), suitable for writing into a file, and vice versa. +In XML Persistence LDOM_Document is used as the persistent form of an OCAF Document and the DOM_Nodes are the persistent objects. +An OCAF Document is a tree of labels with attributes. Its transformation into a persistent form can be functionally divided into two parts: +* Conversion of the labels structure, which is performed by the method XmlMDF::FromTo() +* Conversion of the attributes and their underlying objects, which is performed by the corresponding attribute drivers (one driver per attribute type). + +The driver for each attribute is selected from a table of drivers, either by attribute +type (on storage) or by the name of the corresponding DOM_Element (on retrieval). +The table of drivers is created by by methods *XmlDrivers_DocumentStorageDriver::AttributeDrivers()* +and *XmlDrivers_DocumentRetrievalDriver::AttributeDrivers()*. + +Then the persistent document is written into a file (or read from a file). +In standard persistence Storage and FSD packages contain classes for writing/reading the persistent document into a file. In XML persistence LDOMParser and LDOM_XmlWriter are used instead. + +Usually, the library containing document storage and retrieval drivers is loaded at run time by a plugin mechanism. To support this in XML Persistence, there is a plugin XmlPlugin and a Factory()method in the XmlDrivers package. This method compares passed GUIDs with known GUIDs and returns the corresponding driver or generates an exception if the GUID is unknown. + +The application defines which GUID is needed for document storage or retrieval and in which library it should be found. This depends on document format and application resources. Resources for XML Persistence and also for standard persistence are found in the StdResource unit. They are written for the XmlOcaf document format. + +@subsection occt_ocaf_9_2 Attribute Drivers + +There is one attribute driver for XML persistence for each transient attribute from a set of standard OCAF attributes, with the exception of attribute types, which are never stored (pure transient). Standard OCAF attributes are collected in six packages, and their drivers also follow this distribution. Driver for attribute T*_* is called XmlM*_*. Conversion between transient and persistent form of attribute is performed by two methods Paste() of attribute driver. + +*XmlMDF_ADriver* is the root class for all attribute drivers. + +At the beginning of storage/retrieval process, one instance of each attribute driver is created and appended to driver table implemented as XmlMDF_ADriverTable. During OCAF Data storage, attribute drivers are retrieved from the driver table by the type of attribute. In the retrieval step, a data map is created linking names of DOM_Elements and attribute drivers, and then attribute drivers are sought in this map by DOM_Element qualified tag names. + +Every transient attribute is saved as a DOM_Element (root element of OCAF attribute) with attributes and possibly sub-nodes. The name of the root element can be defined in the attribute driver as a string passed to the base class constructor. The default is the attribute type name. Similarly, namespace prefixes for each attribute can be set. There is no default value, but it is possible to pass NULL or an empty string to store attributes without namespace prefixes. + +The basic class XmlMDF_ADriver supports errors reporting via the method *WriteMessage(const TCollection_ExtendedString&)*. It sends a message string to its message driver which is initialized in the constructor with a Handle(CDM_MessageDriver) passed from the application by Document Storage/Retrieval Driver. + +@subsection occt_ocaf_9_3 XML Document Structure + +Every XML Document has one root element, which may have attributes and contain other nodes. In OCAF XML Documents the root element is named "document" and has attribute "format" with the name of the OCAF Schema used to generate the file. The standard XML format is "XmlOcaf". The following elements are sub-elements of and should be unique entries as its sub-elements, in a specific order. The order is: +* **Element info** - contains strings identifying the format version and other parameters of the OCAF XML document. Normally, data under the element is used by persistence algorithms to correctly retrieve and initialize an OCAF document. The data also includes a copyright string. +* **Element comments** - consists of an unlimited number of sub-elements containing necessary comment strings. +* **Element label** is the root label of the document data structure, with the XML attribute "tag" equal to 0. It contains all the OCAF data (labels, attributes) as tree of XML elements. Every sub-label is identified by a tag (positive integer) defining a unique key for all sub-labels of a label. Every label can contain any number of elements representing OCAF attributes (see OCAF Attributes Representation below). +* **Element shapes** - contains geometrical and topological entities in BRep format. These entities being referenced by OCAF attributes written under the element


Rz$)&dhq>RidG^VuF?&$EN7lkLky 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

MtX!nZxPjsf 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

_mJu>v8j$HLhF6Aod;*UUVcQ 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 literal 0 HcmV?d00001 diff --git a/dox/user_guides/shape_healing/images/shape_healing_image012.png b/dox/user_guides/shape_healing/images/shape_healing_image012.png new file mode 100644 index 0000000000000000000000000000000000000000..0778d5e69d918612e49abe5cc3ae1d27fba90a52 GIT binary patch literal 20817 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 N?RorQ-TttP{|8kS2cG}{ literal 0 HcmV?d00001 diff --git a/dox/user_guides/shape_healing/images/shape_healing_image013.png b/dox/user_guides/shape_healing/images/shape_healing_image013.png new file mode 100644 index 0000000000000000000000000000000000000000..dc5293d15c750c0140fce82bd81df29d9902690d GIT binary patch literal 14091 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 literal 0 HcmV?d00001 diff --git a/dox/user_guides/shape_healing/images/shape_healing_image014.png b/dox/user_guides/shape_healing/images/shape_healing_image014.png new file mode 100644 index 0000000000000000000000000000000000000000..0f47b0eaee1b6442fa2a4fa1bfeb3191dccb2432 GIT binary patch literal 21262 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 GkNzLDum7L` literal 0 HcmV?d00001 diff --git a/dox/user_guides/shape_healing/shape_healing.md b/dox/user_guides/shape_healing/shape_healing.md new file mode 100644 index 0000000000..7d4588fabd --- /dev/null +++ b/dox/user_guides/shape_healing/shape_healing.md @@ -0,0 +1,2047 @@ +Shape Healing {#user_guides__shape_healing} +=================== + +@section occt_shg_1 Overview + +This manual explains how to use Shape Healing. It provides basic documentation on its operation. For advanced information on Shape Healing and its applications, see our offerings on our web site at www.opencascade.org/support/training/ + +The **Shape Healing** toolkit provides a set of tools to work on the geometry and topology of Open CASCADE Technology (**OCCT**) shapes. Shape Healing adapts shapes so as to make them as appropriate for use by Open CASCADE Technology as possible. +**Shape Healing** currently includes several packages that are designed to help you to: + * analyze shape characteristics and, in particular, identify shapes that do not comply with Open CASCADE Technology validity rules + * fix some of the problems shapes may have + * upgrade shape characteristics for users needs, for example a C0 supporting surface can be upgraded so that it becomes C1 continuous. + +The following diagram shows dependencies of API packages: +![](/user_guides/shape_healing/images/shape_healing_image009.png "Shape Healing packages") + +Each sub-domain has its own scope of functionality: +* analysis - exploring shape properties, computing shape features, detecting violation of OCCT requirements (shape itself is not modified); +* fixing - fixing shape to meet the OCCT requirements (the shape may change its original form: modifying, removing, constructing sub-shapes, etc.); +* upgrade - shape improvement for better usability in Open CASCADE Technology or other algorithms (the shape is replaced with a new one, but geometrically they are the same); +* customization - modifying shape representation to fit specific needs (shape is not modified, only the form of its representation is modified); +* processing  - mechanism of managing shape modification via a user-editable resource file. + +Message management is used for creating messages, filling them with various parameters and storing them in the trace file. This tool provides functionality for attaching messages to the shapes for deferred analysis of various run-time events. In this document only general principles of using Shape Healing will be described. For more detailed information please see the corresponding CDL files. +Tools responsible for analysis, fixing and upgrading of shapes can give the information about how these operations were performed. This information can be obtained by the user with the help of mechanism of status querying. + +@subsection occt_shg_1_1 Querying the statuses + +Each fixing and upgrading tool has its own status, which is reset when their methods are called. The status can contain several flags, which give the information about how the method was performed. For exploring the statuses, a set of methods named *Status...()* is provided. These methods accept enumeration *ShapeExtend_Status* and return True if the status has the corresponding flag set. The meaning of flags for each method is described below. +The status may contain a set of Boolean flags (internally represented by bits). Flags are coded by enumeration ShapeExtend_Status. This enumeration provides the following families of statuses: +| *ShapeExtend_OK* | The situation is OK, no operation is necessary and has not been performed. | +| *ShapeExtend_DONE* | The operation has been successfully performed. | +| *ShapeExtend_FAIL* | An error has occurred during operation. | + +It is possible to test the status for the presence of some flag(s), using Status...() method(s) provided by the class: + +~~~~~ +if ( object.Status.. ( ShapeExtend_DONE ) ) {// something was done +} +~~~~~ + +8 'DONE' and 8 'FAIL' flags, named ShapeExtend_DONE1 ... ShapeExtend_FAIL8, are defined for a detailed analysis of the encountered situation. Each method assigns its own meaning to each flag, documented in the CDL for that method. There are also three enumerative values used for testing several flags at a time: +| *ShapeExtend_OK* |    if no flags have been set; | +| *ShapeExtend_DONE* | if at least one ShapeExtend_DONEi has been set; | +| *ShapeExtend_FAIL* | if at least one ShapeExtend_FAILi has been set; | + +@section occt_shg_2 Repair + +Algorithms for fixing problematic (violating the OCCT requirements) shapes are placed in package ShapeFix. +Each class of package ShapeFix deals with one certain type of shapes or with some family of problems. +There is no necessity for you to detect problems before using ShapeFix because all components of package ShapeFix make an analysis of existing problems before fixing them by a corresponding tool from package of ShapeAnalysis and then fix the discovered problems. +The ShapeFix package currently includes functions that: + * add a 2D curve or a 3D curve where one is missing, + * correct a deviation of a 2D curve from a 3D curve when it exceeds a given tolerance value, + * limit the tolerance value of shapes within a given range, + * set a given tolerance value for shapes, + * repair the connections between adjacent edges of a wire, + * correct self–intersecting wires, + * add seam edges, + * correct gaps between 3D and 2D curves, + * merge and remove small edges, + * correct orientation of shells and solids. + +@subsection occt_shg_2_1 Basic Shape Repair + +The simplest way for fixing shapes is to use classes *ShapeFix_Shape* and *ShapeFix_Wireframe* on a whole shape with default parameters. A combination of these tools can fix most of the problems that shapes may have. +The sequence of actions is as follows : + +1. Create tool *ShapeFix_Shape* and initialize it by shape: + +~~~~~ +Handle(ShapeFix_Shape) sfs = new ShapeFix_Shape; +sfs->Init ( shape ); +~~~~~ + +2. Set the basic precision and the maximum allowed tolerance: + +~~~~~ +sfs->SetPrecision ( Prec ); +sfs->SetMaxTolerance ( maxTol ); +~~~~~ + +Where *Prec* – basic precision,  *maxTol* – maximum allowed tolerance. + +All problems will be detected for cases when a dimension of invalidity is larger than the basic precision or a tolerance of sub-shape on that problem is detected. +The maximum tolerance value limits the increasing tolerance for fixing a problem. If a value larger than the maximum allowed tolerance is necessary for correcting a detected problem the problem can not be fixed. + +3. Launch fixing: + +~~~~~ +sfs->Perform(); +~~~~~ + +4. Get the result: + +~~~~~ +TopoDS_Shape aResult = sfs-Shape(); +~~~~~ + +In some cases using only *ShapeFix_Shape* can be insufficient. It is possible to use tools for merging and removing small edges and fixing gaps between 2D and 3D curves. + +5. Create *ShapeFix_Wireframe* tool and initialize it by shape: + +~~~~~ +Handle(ShapeFix_Wirefarme) SFWF = new ShapeFix_Wirefarme(shape); +Or +Handle(ShapeFix_Wirefarme) SFWF = new ShapeFix_Wirefarme; +SFWF->Load(shape); +~~~~~ + +6. Set the basic precision and the maximum allowed tolerance: +~~~~~ +sfs->SetPrecision ( Prec ); +sfs->SetMaxTolerance ( maxTol ); +~~~~~ + +See the description for Prec and maxTol above. + +7. Merge and remove small edges: +~~~~~ +SFWF-DropSmallEdgesMode() = Standard_True; +SFWF-FixSmallEdges(); +~~~~~ + +**Note:** Small edges are not removed with the default mode, but in many cases removing small edges is very useful for fixing a shape. + +8. Fix gaps for 2D and 3D curves +~~~~~ +SFWF-FixWireGaps(); +~~~~~ + +9. Get the result +~~~~~ +TopoDS_Shape Result = SFWF-Shape(); +~~~~~ + + +@subsection occt_shg_2_2 Shape Correction. + +If you do not want to make fixes on the whole shape or make a definite set of fixes you can set flags for separate fix cases (marking them ON or OFF) and you can also use classes for fixing specific types of sub-shapes such as solids, shells, faces, wires, etc. +For each type of sub-shapes there are specific types of fixing tools such as *ShapeFix_Solid, ShapeFix_Shell, ShapeFix_Face, ShapeFix_Wire,* etc. + +@subsubsection occt_shg_2_2_1 Fixing sub-shapes +If you want to make a fix on one subshape of a certain shape it is possible to take the following steps: + * create a tool for a specified subshape type and initialize this tool by the subshape; + * create a tool for rebuilding the shape and initialize it by the whole shape (section 5.1); + * set a tool for rebuilding the shape in the tool for fixing the subshape; + * fix the subshape; + * get the resulting whole shape containing a new corrected subshape. + +For example, in the following way it is possible to fix face Face1 of shape Shape1 + +~~~~~ +//create tools for fixing a face +Handle(ShapeFix_Face)  SFF= new ShapeFix_Face; + +// create tool for rebuilding a shape and initialize it by shape +Handle(ShapeBuild_ReShape) Context = new ShapeBuild_ReShape;  +Context-Apply(Shape1); + +//set a tool for rebuilding a shape in the tool for fixing +SFF-SetContext(Context); +        +//initialize the fixing tool by one face +SFF-Init(Face1); + +//fix the set face +SFF-Perform(); +        +//get the result +TopoDS_Shape  NewShape = Context-Apply(Shape1); +//Resulting shape contains the fixed face. +~~~~~ + +A set of required fixes and invalid sub-shapes can be obtained with the help of tools responsible for the analysis of shape validity (section 3.2). + +@subsection occt_shg_2_3 Repairing tools + +Each class of package ShapeFix deals with one certain type of shapes or with a family of problems. Each repairing tool makes fixes for the specified shape and its sub-shapes with the help of method *Perform()* containing an optimal set of fixes. The execution of these fixes in the method Perform can be managed with help of a set of control flags (fixes can be either forced or forbidden). + +@subsubsection occt_shg_2_3_1 General Workflow + +The following sequence of actions should be applied to perform fixes: +1. Create a tool. +2. Set the following values: + + the working precision by method  *SetPrecision()* (default 1.e-7) + + set the maximum allowed tolerance by method *SetMaxTolerance()* (by default it is equal to the working precision). + + set the minimum tolerance by method *SetMinTolerance()* (by default it is equal to the working precision). + + set a tool for rebuilding shapes after the modification (tool *ShapeBuild_ReShape*) by method *SetContext()*. For separate faces, wires and edges this tool is set optionally. + + to force or forbid some of fixes, set the corresponding flag to 0 or 1. +3. Initialize the tool by the shape with the help of methods Init or Load +4. Use method *Perform()* or create a custom set of fixes. +5. Check the statuses of fixes by the general method *Status* or specialized methods *Status_*(for example *StatusSelfIntersection* (*ShapeExtentd_DONE*)). See the description of statuses below. +6. Get the result in two ways : + - with help of a special method *Shape(),Face(),Wire().Edge()*. + - from the rebuilding tool by method *Apply* (for access to rebuilding tool use method *Context()*): +~~~~~ + TopoDS_Shape resultShape = fixtool-Context()-Apply(initialShape); +~~~~~ +Modification fistory for the shape and its sub-shapes can be obtained from the tool for shape re-building (*ShapeBuild_ReShape*). + +~~~~~ +TopoDS_Shape modifsubshape = fixtool-Context() +-Apply(initsubshape); +~~~~~ + + +@subsubsection occt_shg_2_3_2 Flags Management + +The flags *Fix...Mode()* are used to control the execution of fixing procedures from the API fixing methods. By default, these flags have values equal to -1, this means that the corresponding procedure will either be called or not called, depending on the situation. If the flag is set to 1, the procedure is executed anyway; if the flag is 0, the procedure is not executed. The name of the flag corresponds to the fixing procedure that is controlled. For each fixing tool there exists its own set of flags. To set a flag to the desired value, get a tool containing this flag and set the flag to the required value. + +For example, it is possible to forbid performing fixes to remove small edges - *FixSmall* + +~~~~~ +Handle(ShapeFix_Shape) Sfs = new ShapeFix_Shape(shape); +Sfs- FixWireTool ()-FixSmallMode () =0; +if(Sfs-Perform()) + TopoDS_Shape resShape = Sfs-Shape(); +~~~~~ + + +@subsubsection occt_shg_2_3_3 Repairing tool for shapes + +Class ShapeFix_Shape allows using repairing tools for all sub-shapes of a shape. It provides access to all repairing tools for fixing sub-shapes of the specified shape and to all control flags from these tools. + +For example, it is possible to force the removal of invalid 2D curves from a face. + +~~~~~ +TopoDS_Face face … // face with invalid 2D curves. +//creation of tool and its initialization by shape. +Handle(ShapeFix_Shape) sfs = new ShapeFix_Shape(face); +//set work precision and max allowed tolerance. +sfs->SetPrecision(prec); +sfs->SetMaxTolerance(maxTol); +//set the value of flag for forcing the removal of 2D curves +sfs->FixWireTool()-FixRemovePCurveMode() =1; +//reform fixes +sfs->Perform(); +//getting the result +if(sfs->Status(ShapeExtend_DONE) ) { + cout << Shape was fixed << endl; + TopoDS_Shape resFace = sfs->Shape(); +} +else if(sfs->Status(ShapeExtend_FAIL)) { +cout<< Shape could not be fixed << endl; +} +else if(sfs->Status(ShapeExtent_OK)) { +cout<< Initial face is valid with specified precision =<< precendl; +} +~~~~~ + +@subsubsection occt_shg_2_3_4 Repairing tool for solids + +Class *ShapeFix_Solid* allows fixing solids and building a solid from a shell to obtain a valid solid with a finite volume. The tool *ShapeFix_Shell* is used for correction of shells belonging to a solid. + +This tool has the following control flags: +* *FixShellMode* - Mode for applying fixes of ShapeFix_Shell, True by default. +* *CreateOpenShellMode* - If it is equal to true solids are created from open shells, else solids are created from closed shells only, False by default. + +@subsubsection occt_shg_2_3_5 Repairing tool for shells +Class *ShapeFix_Shell* allows fixing wrong orientation of faces in a shell. It changes the orientation of faces in the shell so that all faces in the shell have coherent orientations. If it is impossible to orient all faces in the shell (like in case of Mebious tape), then a few manifold or non-manifold shells will be created depending on the specified Non-manifold mode. The ShapeFix_Face tool is used to correct faces in the shell. +This tool has the following control flags: +* *FixFaceMode * - mode for applying the fixes of  ShapeFix_Face, True by default. +* *FixOrientationMode*  - mode for applying a fix for the orientation of faces in the shell. + +@subsubsection occt_shg_2_3_6 Repairing tool for faces + +Class ShapeFix_Face allows fixing the problems connected with wires of a face. It allows controlling the creation of a face (adding wires), and fixing wires by means of tool *ShapeFix_Wire*. +When a wire is added to a face, it can be reordered and degenerated edges can be fixed. This is performed or not depending on the user-defined flags (by default, False). +The following fixes are available: + * fixing of wires orientation on the face. If the face has no wire, the natural bounds are computed. If the face is on a spherical surface and has two or more wires on it describing holes, the natural bounds are added. In case of a single wire, it is made to be an outer one. If the face has several wires, they are oriented to lay one outside another (if possible). If the supporting surface is periodic, 2D curves of internal wires can be shifted on integer number of periods to put them inside the outer wire. + * fixing the case when the face on the closed surface is defined by a set of closed wires, and the seam is missing (this is not valid in Open CASCADE Technology). In that case, these wires are connected by means of seam edges into the same wire. + +This tool has the following control flags: +* *FixWireMode*  - mode for applying fixes of a wire, True by default. +* *FixOrientationMode*  - mode for orienting a wire to border a limited square, True by default. +* *FixAddNaturalBoundMode* - mode for adding natural bounds to a face, False by default. +* *FixMissingSeamMode* – mode to fix a missing seam, True by default. If True, tries to insert a seam. +* *FixSmallAreaWireMode * - mode to fix a small-area wire, False by default. If True, drops wires bounding small areas. + +~~~~~ + +TopoDS_Face face = ...; +TopoDS_Wire wire = ...; + +//Creates a tool and adds a wire to the face +ShapeFix_Face sff (face); +sff.Add (wire); + +//use method Perform to fix the wire and the face +sff.Perfom(); + +//or make a separate fix for the orientation of wire on the face +sff.FixOrientation(); + +//Get the resulting face +TopoDS_Face newface = sff.Face(); +~~~~~ + +@subsubsection occt_shg_2_3_7 Repairing tool for wires () + +Class ShapeFix_Wire allows fixing a wire. Its method Perform() performs all the available fixes in addition to the geometrical filling of gaps. The geometrical filling of gaps can be made with the help of the tool for fixing the wireframe of shape *ShapeFix_Wireframe*. + +The fixing order and the default behavior of *Perform()* is as follows: + * Edges in the wire *FixReorder* are reordered; in case it is forbidden, the analysis of whether the wire is ordered or not is performed anyway (this information is used for determining the default behavior of other methods). + * Small edges *FixSmall *are removed. + * Edges in the wire are connected (topologically) *FixConnected* (if the wire is ordered). + * Edges (3Dcurves and 2D curves) *FixEdgeCurves* (without *FixShifted* if the wire is not ordered) are fixed. + * Degenerated edges *FixDegenerated* are added (if the wire is ordered). + * Self-intersection *FixSelfIntersection* is fixed (if the wire is ordered and *ClosedMode* is True). + * Lacking edges *FixLacking* are fixed (if the wire is ordered). + +Most of fixing methods expect edges in a wire to be ordered, so it is necessary to make call to *FixReorder()* before making any other fixes. + +Some fixes can be made in three ways: + * Increasing the tolerance of an edge or a vertex. + * Changing topology (adding/removing/replacing an edge in the wire and/or replacing the vertex in the edge, copying the edge etc.). + * Changing geometry (shifting a vertex or adjusting ends of an edge curve to vertices, or re-computing a 3D curve or 2D curves of the edge). + +When it is possible to make a fix in more than one way (e.g., either by increasing the tolerance or shifting a vertex), it is chosen according to the user-defined flags: +* *ModifyTopologyMode* -   allows modifying topology, False by default. +* *ModifyGeometryMode* -  allows modifying geometry. Now this flag is used only in fixing self-intersecting edges (allows to modify 2D curves) and is True by default. + +The methods of this class correct the following problems. They: + *  fix disordered edges in the wire (reorder), + *  fix small edges (remove edges with a length less than the given value), + *  fix disconnected edges (adjacent edges having different vertices), + *  fix the consistency of edge curves, + *  fix degenerated edges, + *  fix intersections of 2D curves of the edges, + *  fix lacking edges to fill gaps in the parametrical space of a surface, + *  fix gaps in 2D and 3D wires by means of geometrical filling. + +Fixing disordered edges +----------------------- +This fix is necessary for most other fixes (but is not necessary for Open CASCADE Technology). It checks whether edges in the wire go in a sequential order (the end of a preceding edge is the start of a following one). If it is not so, an attempt to reorder the edges is made. + +Fixing small edges +------------------ +This fixing method searches for the edges, which have a length less than the given value (degenerated edges are ignored). If such an edge is found, it is removed provided that one of the following conditions is satisfied: + * both end vertices of that edge are one and the same vertex, + * end vertices of the edge are different, but the flag *ModifyTopologyMode* is True. In the latter case, method *FixConnected* is applied to the preceding and the following edges to ensure their connection. + +Fixing disconnected edges +------------------------- +This method forces two adjacent edges to share the same common vertex (if they do not have a common one). It checks whether the end vertex of the preceding edge coincides with the start vertex of the following edge with the given precision, and then creates a new vertex and sets it as a common vertex for the fixed edges. At that point, edges are copied, hence the wire topology is changed (regardless of the *ModifyTopologyMode* flag). If the vertices do not coincide, this method fails. + +Fixing the consistency of edge curves +------------------------------------- +This method performs a set of fixes dealing with 3D curves and 2D curves of edges in a wire. +These fixes will be activated with the help of a set of fixes from the repairing tool for edges called *ShapeFix_Edge*. Each of these fixes can be forced or forbidden by means of setting the corresponding flag to either True or False. The mentioned fixes and the conditions of their execution are: + * fixing a disoriented 2D curve by call to *ShapeFix_Edge::FixReversed2d* - if not forbidden, + * removing a wrong 2D curve  by call to *ShapeFix_Edge::FixRemovePCurve* - only if forced, + * fixing a missing  2D curve by call to *ShapeFix_Edge::FixAddPCurve* - if not forbidden, + * removing a wrong 3D curve by call to *ShapeFix_Edge::FixRemoveCurve3d* - only if forced, + * fixing a missing 3D curve by call to *ShapeFix_Edge::FixAddCurve3d* - if not forbidden, + * fixing 2D curves of seam edges - if not forbidden. + * fixing 2D curves which can be shifted at an integer number of periods on the closed surface - if not forbidden. This fix is required if 2D curves of some edges in a wire lying on a closed surface were recomputed from 3D curves. In that case, the 2D curve for the edge, which goes along the seam of the surface, can be incorrectly shifted at an integer number of periods. The method detects such cases and shifts wrong 2D curves back, ensuring that the 2D curves of the edges in the wire are connected, + * fixing the SameParameter problem by call to *ShapeFix_Edge::FixSameParameter* - if not forbidden. + +Fixing degenerated edges +------------------------ +This method checks whether an edge in a wire lies on a degenerated point of the supporting surface, or whether there is a degenerated point between the edges. If one of these cases is detected for any edge, a new degenerated edge is created and it replaces the current edge in the first case or is added to the wire in the second case. The newly created degenerated edge has a straight 2D curve, which goes from the end of the 2D curve of the preceding edge to the start of the following one. + +Fixing intersections of 2D curves of the edges +---------------------------------------------- +This method detects and fixes the following problems: + * self-intersection of 2D curves of individual edges. If the flag *ModifyGeometryMode()* is False this fix will be performed by increasing the tolerance of one of end vertices to a value less then *MaxTolerance()*. + * intersection of 2D curves of each of the two adjacent edges (except the first and the last edges if the flag ClosedWireMode is False). If such intersection is found, the common vertex is modified in order to comprise the intersection point. If the flag *ModifyTopologyMode* is False this fix will be performed by increasing the tolerance of the vertex to a value less then *MaxTolerance()*. + * intersection of 2D curves of non-adjacent edges. If such intersection is found the tolerance of the nearest vertex is increased to comprise the intersection point. If such increase cannot be done with a tolerance less than MaxTolerance this fix will not be performed. + + +Fixing a lacking edge +--------------------- +This method checks whether a wire is not closed in the parametrical space of the surface (while it can be closed in 3D). This is done by checking whether the gap between 2D curves of each of the two adjacent edges in the wire is smaller than the tolerance of the corresponding vertex. The algorithm computes the gap between the edges, analyses positional relationship of the ends of these edges and (if possible) tries to insert a new edge into the gap or increases the tolerance. + +Fixing gaps in 2D and 3D wire by geometrical filling +---------------------------------------------------- +These methods check gaps between the ends of 2D or 3D curves of adjacent edges. Boolean flag *FixGapsByRanges* is used to activate an additional mode applied before converting to B-Splines. When this mode is on, methods try to find the most precise intersection of curves, or the most precise projection of a target point, or an extremity point between two curves (to modify their parametric range accordingly). This mode is off by default. Independently of the additional mode described above, if gaps remain, these methods convert curves to B-Spline form and shift their ends if a gap is detected. +Method *FixGap2d* moves the ends of 2D curves to the middle point. Method *FixGaps3d* moves the ends of 3D curves to a common vertex. + +This tool has the following control flags: +* *ClosedWireMode* -specifies whether the wire is (or should be) closed or not. If that flag is True (by default), fixes that require or force connection between edges are executed for the last and the first edges also, otherwise they are not. +* *FixReorderMode, * +* *FixSmallMode, * +* *FixConnectedMode, * +* *FixEdgeCurvesMode, * +* *FixDegeneratedMode, * +* *FixSelfIntersectionMode,* +* *FixLackingMode.* + +The following flags are defined for method *FixEdgeCurves()*: +* *FixReversed2dMode, * +* *FixRemovePCurveMode, * +* *FixRemoveCurve3dMode, * +* *FixAddPCurveMode, * +* *FixAddCurve3dMode, * +* *FixSeamMode, * +* *FixShiftedMode, * +* *FixSameParameterMode. * + +The following flags are defined for method *FixSelfIntersection()*: +* *FixSelfIntersectingEdgeMode, * +* *FixIntersectingEdgesMode*. + +Example: A custom set of fixes +------------------------------ + +Let us create a custom set of fixes as an example. +~~~~~ +TopoDS_Face face = ...; +TopoDS_Wire wire = ...; +Standard_Real precision = 1e-04; +ShapeFix_Wire sfw (wire, face, precision); +//Creates a tool and loads objects into it +sfw.FixReorder(); +//Orders edges in the wire so that each edge +//starts at the end of the one before it +sfw.FixConnected(); +//Forces all adjacent edges to share +//the same vertex +Standard_Boolean LockVertex = Standard_True; +if (sfw.FixSmall (LockVertex, precision)) { +  //Removes all edges which are shorter than +  //the given precision and have the same vertex at both ends +} +if (sfw.FixSelfIntersection()) { +  //Fixes self-intersecting edges and intersecting +  //adjacent edges +  cout;Wire was slightly self-intersecting. Repaired;endl; +} +if ( sfw.FixLacking ( Standard_False ) ) { +  //Inserts edges to connect adjacent +  //non-continuous edges +} +TopoDS_Wire newwire = sfw.Wire(); +//Returns the corrected wire +~~~~~ + +Example: Correction of a wire +----------------------------- + +Let us correct the following wire: + +![](/user_guides/shape_healing/images/shape_healing_image013.png "Initial shape") + +It is necessary to apply the Tools for the analysis of validity of wires to check that: +* the edges are correctly oriented; +* there are no edges that are too short; +* there are no intersecting adjacent edges; +and then immediately apply fixing tools. + +~~~~~ +TopoDS_Face face = ...; +TopoDS_Wire wire = ...; +Standard_Real precision = 1e-04; +ShapeAnalysis_Wire saw (wire, face, precision); +ShapeFix_Wire sfw (wire, face, precision); +if (saw.CheckOrder()) { + cout<<“Some edges in the wire need to be reordered”<Tool for checking the validity of edges to find that maximum deviation between pcurve and 3D curve is greater than tolerance. Then we can use the repairing tool to increase the tolerance and make the deviation acceptable. + +~~~~~ +ShapeAnalysis_Edge sae; +TopoDS_Face face = ...; +TopoDS_Wire wire = ...; +Standard_Real precision = 1e-04; +ShapeFix_Edge sfe; +Standard_Real maxdev; +if (sae.CheckSameParameter (edge, maxdev)) { + cout<<“Incorrect SameParameter flag”<SetPrecision(prec); +sfwf->SetMaxTolerance(maxTol); +//fixing of gaps +sfwf->FixWireGaps(); +//fixing of small edges +//setting of the drop mode for the fixing of small edges and max possible angle between merged edges. +sfwf->ModeDropSmallEdges = Standard_True; +sfwf->SetLimliteAngle(angle); +//performing the fix +sfwf->FixSmallEdges(); +//getting the result +TopoDS_Shape resShape = sfwf->Shape(); +~~~~~ + +It is desirable that a shape is topologically correct before applying the methods of this class. + +@subsubsection occt_shg_2_3_10 Tool for removing small faces from a shape + +Class ShapeFix_FixSmallFaceThis tool is intended for dropping small faces from the shape. The following cases are processed: +* Spot face: if the size of the face is less than the given precision; +* Strip face: if the size of the face in one dimension is less then the given precision. + +The sequence of actions for performing the fix is the same as for the fixes described above: + +~~~~~ +//creation of a tool +Handle(ShapeFix_FixSmallFace) sff = new ShapeFix_FixSmallFace(shape); +//setting of tolerances +sff->SetPrecision(prec); +sff->SetMaxTolerance(maxTol); +//performing fixes +sff.Perform(); +//getting the result +TopoDS_Shape resShape = sff.FixShape(); +~~~~~ + +@subsubsection occt_shg_2_3_11 Tool to modify  tolerances of shapes (Class ShapeFix_ShapeTolerance). + +This tool provides a functionality to set tolerances of a shape and its sub-shapes. +In Open CASCADE Technology only vertices, edges and faces have tolerances. + +This tool allows processing each concrete type of sub-shapes or all types at a time. +You set the tolerance functionality as follows: + * set a tolerance for sub-shapes, by method SetTolerance, + * limit tolerances with given ranges, by method LimitTolerance. + +~~~~~ +//creation of a tool +ShapeFix_ShapeTolerance Sft; +//setting a specified tolerance on shape and all of its sub-shapes. +Sft.SetTolerance(shape,toler); +//setting a specified tolerance for vertices only +Sft.SetTolerance(shape,toler,TopAbs_VERTEX); +//limiting the tolerance on the shape and its sub-shapes between minimum and +//maximum tolerances +Sft.LimitTolerance(shape,tolermin,tolermax); +~~~~~ + + +@section occt_shg_3 Analysis + +@section occt_shg_3_1 Analysis of shape validity + +The *ShapeAnalysis* package provides tools for the analysis of topological shapes. +It is not necessary to check a shape by these tools before the execution of repairing tools because these tools are used for the analysis before performing fixes inside the repairing tools. +However, if you want, these tools can be used for detecting some of shape problems independently from the repairing tools. + It can be done in the following way: + * create an analysis tool. + * initialize it by shape and set a tolerance problems will be detected with if it is necessary. + * check the problem that interests you. + +~~~~~ +TopoDS_Face face = ...; +ShapeAnalysis_Edge sae; +//Creates a tool for analyzing an edge +for(TopExp_Explorer Exp(face,TopAbs_EDGE);Exp.More();Exp.Next()) { +  TopoDS_Edge edge = TopoDS::Edge (Exp.Current()); +  if (!sae.HasCurve3d (edge)) { +    cout *Edge has no 3D curve* endl;  } +} +~~~~~ + +@subsubsection occt_shg_3_1_1 Analysis of orientation of wires on a face. + +It is possible to check whether a face has an outer boundary with the help of method *ShapeAnalysis::IsOuterBound*. + +~~~~~ +TopoDS_Face face … //analyzed face +if(!ShapeAnalysis::IsOuterBound(face)) { +cout*Face has not outer boundary**endl; +} +~~~~~ + +@subsubsection occt_shg_3_1_2 Analysis of wire validity + +Class *ShapeAnalysis_Wire* is intended to analyze a wire. It provides functionalities both to explore wire properties and to check its conformance to Open CASCADE Technology requirements. +These functionalities include: + * checking the order of edges in the wire, + * checking for the presence of small edges (with a length less than the given value), + * checking for the presence of disconnected edges (adjacent edges having different vertices), + * checking the consistency of edge curves, + * checking for the presence or missing of degenerated edges, + * checking for the presence of self-intersecting edges and intersecting edges (edges intersection is understood as intersection of their 2D curves), + * checking for lacking edges to fill gaps in the surface parametrical space, + * analyzing the wire orientation (to define the outer or the inner bound on the face), + * analyzing the orientation of the shape (edge or wire) being added to an already existing wire. + +*Note* that all checking operations except for the first one are based on the assumption that edges in the wire are ordered. Thus, if the wire is detected as non-ordered it is necessary to order it before calling other checking operations. This can be done, for example, with the help of the *ShapeFix_Wire::FixOrder()* method. +This tool should be initialized with wire, face (or a surface with a location) or precision. +Once the tool has been initialized, it is possible to perform the necessary checking operations. In order to obtain all information on a wire at a time the global method *Perform* is provided. It calls all other API checking operations to check each separate case. +API methods check for corresponding cases only, the value and the status they return can be analyzed to understand whether the case was detected or not. +Some methods in this class are: + * *CheckOrder* checks whether edges in the wire are in the right order + * *CheckConnected* checks whether edges are disconnected + * *CheckSmall* checks whether there are edges that are shorter than the given value + * *CheckSelfIntersection* checks, whether there are self-intersecting or adjacent intersecting edges. If the intersection takes place due to nonadjacent edges, it is not detected. +This class maintains status management. Each API method stores the status of its last execution which can be queried by the corresponding Status..() method. In addition, each API method returns a Boolean value, which is True when a case being analyzed is detected (with the set ShapeExtend_DONE status), otherwise it is False. + +~~~~~ +TopoDS_Face face = ...; +TopoDS_Wire wire = ...; +Standard_Real precision = 1e-04; +ShapeAnalysis_Wire saw (wire, face, precision); +//Creates a tool and loads objects into it +if (saw.CheckOrder()) { +  cout*Some edges in the wire need to be reordered*endl; +  cout*Please ensure that all the edges are correctly +ordered before further analysis*endl; +  return; +} +if (saw.CheckSmall (precision)) { +  cout*Wire contains edge(s) shorter than *precisionendl; +} +if (saw.CheckConnected()) { +  cout*Wire is disconnected*endl; +} +if (saw.CheckSelfIntersection()) { +  cout*Wire has self-intersecting or intersecting +adjacent edges* endl; +} +~~~~~ + +@subsubsection occt_shg_3_1_3 Analysis of edge validity + +Class *ShapeAnalysis_Edge* is intended to analyze edges. It provides the following functionalities to work with an edge: + * querying geometrical representations (3D curve and pcurve(s) on a given face or surface), + * querying topological sub-shapes (bounding vertices), + * checking overlapping edges, + * analyzing the curves consistency: + + mutual orientation of the 3D curve and 2D curve (co-directions or opposite directions), + + correspondence of 3D and 2D curves to vertices. + +This class supports status management described above. + +~~~~~ +TopoDS_Face face = ...; +ShapeAnalysis_Edge sae; +//Creates a tool for analyzing an edge +for(TopExp_Explorer Exp(face,TopAbs_EDGE);Exp.More();Exp.Next()) { +  TopoDS_Edge edge = TopoDS::Edge (Exp.Current()); +  if (!sae.HasCurve3d (edge)) { +    cout *Edge has no 3D curve* endl; +  } +  Handle(Geom2d_Curve) pcurve; +  Standard_Real cf, cl; +  if (sae.PCurve (edge, face, pcurve, cf, cl, Standard_False)) { +    //Returns the pcurve and its range on the given face +    cout*Pcurve range [*cf*, *cl*]* endl; +  } +  Standard_Real maxdev; +  if (sae.CheckSameParameter (edge, maxdev)) { +    //Checks the consistency of all the curves +    //in the edge +    cout*Incorrect SameParameter flag*endl; +  } +  cout*Maximum deviation *maxdev*, tolerance* +             BRep_Tool::Tolerance(edge)endl; +} +//checks the overlapping of two edges +if(sae.CheckOverlapping(edge1,edge2,prec,dist)) { + cout*Edges are overlapped with tolerance = *precendl; + cout*Domain of overlapping =*distendl; +} +~~~~~ + +@subsubsection occt_shg_3_1_4 Analysis of presence of small faces + +Class *ShapeAnalysis_CheckSmallFace* class is intended for analyzing small faces from the shape using the following methods: +* *CheckSpotFace()* checks if the size of the face is less than the given precision; +* *CheckStripFace* checks if the size of the face in one dimension is less than the given precision. + +~~~~~ +TopoDS_Shape shape … // checked shape +//Creation of a tool +ShapeAnalysis_CheckSmallFace saf; +//exploring the shape on faces and checking each face +Standard_Integer numSmallfaces =0; +for(TopExp_Explorer aExp(shape,TopAbs_FACE); aExp.More(); aExp.Next()) { + TopoDS_Face face = TopoDS::Face(aexp.Current()); + TopoDS_Edge E1,E2; +if(saf.CheckSpotFace(face,prec) || +saf.CheckStripFace(face,E1,E2,prec)) +NumSmallfaces++; +} +if(numSmallfaces) + cout*Number of small faces in the shape =* numSmallfaces endl; +~~~~~ + +@subsubsection occt_shg_3_1_5 Analysis of shell validity and closure + +Class *ShapeAnalysis_Shell* allows checking the orientation of edges in a manifold shell. With the help of this tool, free edges (edges entered into one face) and bad edges (edges entered into the shell twice with the same orientation) can be found. By occurrence of bad and free edges a conclusion about the shell validity and the closure of the shell can be made. + +~~~~~ +TopoDS_Shell shell // checked shape +ShapeAnalysis_Shell sas(shell); +//analysis of the shell , second parameter is set to True for //getting free edges,(default False) +sas.CheckOrientedShells(shell,Standard_True); +//getting the result of analysis +if(sas.HasBadEdges()) { +cout<<"Shell is invalid"<Value (sh); +// if there are several results, they are re-recorded inside a Compound +// .. process as needed +} +~~~~~ + +@subsubsection occt_shg_4_3_2 Splitting by angle +Class *ShapeUpgrade_ShapeDivideAngle* allows splitting all surfaces of revolution, cylindrical, toroidal, conical, spherical surfaces in the given shape so that each resulting segment covers not more than the defined angle (in radians). + +@subsubsection occt_shg_4_3_3 Conversion of 2D, 3D curves and surfaces to Bezier + +Class *ShapeUpgrade_ShapeConvertToBezier* is an API tool for performing a conversion of 3D, 2D curves to Bezier curves and surfaces to Bezier based surfaces (Bezier surface, surface of revolution based on Bezier curve, offset surface based on any of previous types). +This tool provides access to various flags for conversion of different types of curves and surfaces to Bezier by methods: +For 3D curves: +*Set3dConversion,* +*Get3dConversion,* +*Set3dLineConversion,* +*Get3dLineConversion,* +*Set3dCircleConversion,* +*Get3dCircleConversion,* +*Set3dConicConversion,* +*Get3dConicConversion* +For 2D curves: +*Set2dConversion,* +*Get2dConversion* +For surfaces : +*GetSurfaceConversion,* +*SetPlaneMode,* +*GetPlaneMode,* +*SetRevolutionMode,* +*GetRevolutionMode,* +*SetExtrusionMode,* +*GetExtrusionMode,* +*SetBSplineMode,* +*GetBSplineMode,* + +Let us attempt to produce a conversion of planes to Bezier surfaces. +~~~~~ +//Creation and initialization of a tool. +ShapeUpgrade_ShapeConvertToBezier SCB (Shape); +//setting tolerances +….. +//setting mode for conversion of planes +SCB.SetSurfaceConversion (Standard_True); +SCB.SetPlaneMode(Standard_True); +SCB.Perform(); +If(SCB.Status(ShapeExtend_DONE) +    TopoDS_Shape result = SCB.GetResult(); +~~~~~ + +@subsubsection occt_shg_4_3_4 Tool for splitting closed faces + +Class *ShapeUpgrade_ShapeDivideClosed* provides splitting of closed faces in the shape to a defined number of components by the U and V parameters. It topologically and (partially) geometrically processes closed faces and performs splitting with the help of class *ShapeUpgrade_ClosedFaceDivide*. + +~~~~~ +TopoDS_Shape aShape = …; +ShapeUpgrade_ShapeDivideClosed tool (aShape ); +Standard_Real closeTol = …; +tool.SetPrecision(closeTol); +Standard_Real maxTol = …; +tool.SetMaxTolerance(maxTol); +Standard_Integer NbSplitPoints = …; +tool.SetNbSplitPoints(num); +if ( ! tool.Perform() && tool.Status (ShapeExtend_FAIL) ) { +  cout;Splitting of closed faces failed;endl; +  . . . +} +TopoDS_Shape aResult = tool.Result(); +~~~~~ + +@subsubsection occt_shg_4_3_5 Tool for splitting a C0 BSpline 2D or 3D curve to a sequence C1 BSpline curves + +The API methods for this tool is a package of methods *ShapeUpgrade::C0BSplineToSequenceOfC1BsplineCurve*, which converts a C0 B-Spline curve into a sequence of C1 B-Spline curves. This method splits a B-Spline at the knots with multiplicities equal to degree, it does not use any tolerance and therefore does not change the geometry of the B-Spline. The method returns True if C0 B-Spline was successfully split, otherwise returns False (if BS is C1 B-Spline). + +@subsubsection occt_shg_4_3_6 Tool for splitting faces + +*ShapeUpgrade_ShapeDivideArea* can work with compounds, solids, shells and faces. +During the work this tool examines each face of a specified shape and if the face area exceeds the specified maximal area, this face is divided. Face splitting is performed in the parametric space of this face. The values of splitting in U and V directions are calculated with the account of translation of the bounding box form parametric space to 3D space. Such calculations are necessary to avoid creation of strip faces. In the process of splitting the holes on the initial face are taken into account. After the splitting all new faces are checked by area again and the splitting procedure is repeated for the faces whose area still exceeds the max allowed area. Sharing between faces in the shape is preserved and the resulting shape is of the same type as the source shape. +An example of using this tool is presented in the figures below: + +![](/user_guides/shape_healing/images/shape_healing003.jpg "Source Face") + +![](/user_guides/shape_healing/images/shape_healing004.jpg "Resulting shape") + + +*ShapeUpgrade_ShapeDivideArea* is inherited from the base class *ShapeUpgrade_ShapeDivide* and should be used in the following way: +* This class should be initialized on a shape with the help of the constructor or method *Init()* from the base class. +* The maximal allowed area should be specified by the method *MaxArea()*. +* To produce a splitting use method Perform from the base class. +* The result shape can be obtained with the help the method *Result()*. + +~~~~~ +ShapeUpgrade_ShapeDivideArea tool (inputShape); +tool.MaxArea() = aMaxArea; +tool.Perform(); +if(tool.Status(ShapeExtend_DONE)) { +  TopoDS_Shape ResultShape = tool.Result(); +  ShapeFix::SameParameter ( ResultShape, Standard_False ); +} +~~~~~ + +**Note** that the use of method *ShapeFix::SameParameter* is necessary, otherwise the parameter edges obtained as a result of splitting can be different. + +Additional methods +------------------ +* Class *ShapeUpgrade_FaceDivideArea* inherited from *ShapeUpgrade_FaceDivide* is intended for splitting a face by the maximal area criterion. +* Class *ShapeUpgrade_SplitSurfaceArea* inherited from *ShapeUpgrade_SplitSurface* calculates the parameters of face splitting in the parametric space. + + +@subsection occt_shg_4_4 Customization of shapes + +Customization tools are intended for adaptation of shape geometry in compliance with the customer needs. They modify a geometrical object to another one in the shape. + +To implement the necessary shape modification it is enough to initialize the appropriate tool by the shape and desirable parameters and to get the resulting shape. For example for conversion of indirect surfaces in the shape do the following: + +~~~~~ +TopoDS_Shape initialShape .. +TopoDS_Shape resultShape = ShapeCustom::DirectFaces(initialShape); +~~~~~ + +@subsubsection occt_shg_4_2_1 Conversion of indirect surfaces. + +~~~~~ +ShapeCustom::DirectFaces + static TopoDS_Shape DirectFaces(const TopoDS_Shape& S); +~~~~~ + +This method provides conversion of indirect elementary surfaces (elementary surfaces with left-handed coordinate systems) in the shape into direct ones. New 2d curves (recomputed for converted surfaces) are added to the same edges being shared by both the resulting shape and the original shape S. + +@subsubsection occt_shg_4_2_2 Shape Scaling + +~~~~~ +ShapeCustom::ScaleShape + TopoDS_Shape ShapeCustom::ScaleShape(const TopoDS_Shape& S, + const Standard_Real scale); +~~~~~ + +This method returns a new shape, which is a scaled original shape with a coefficient equal to the specified value of scale. It uses the tool *ShapeCustom_TrsfModification*. + +@subsubsection occt_shg_4_2_3 Conversion of curves and surfaces to BSpline +*ShapeCustom_BSplineRestriction.* allows approximation of surfaces, curves and 2D curves with a specified degree, max number of segments, 2d tolerance and 3d tolerance. If the approximation result cannot be achieved with the specified continuity, the latter can be reduced. + +The method with all parameters looks as follows: +~~~~~ +ShapeCustom::BsplineRestriction + TopoDS_Shape ShapeCustom::BSplineRestriction (const TopoDS_Shape& S, + const Standard_Real Tol3d, const Standard_Real Tol2d, + const Standard_Integer MaxDegree, + const Standard_Integer MaxNbSegment, + const GeomAbs_Shape Continuity3d, + const GeomAbs_Shape Continuity2d, + const Standard_Boolean Degree, + const Standard_Boolean Rational, + const Handle(ShapeCustom_RestrictionParameters)& aParameters) +~~~~~ + +Returns a new shape with all surfaces, curves and 2D curves which type is BSpline/Bezier or based on the two latter, converted with Degree less than MaxDegree or with a number of spans less then *NbMaxSegment* depending on priority parameter Degree. If this parameter is equal to True then Degree will be increased to the value *GmaxDegree*, otherwise *NbMaxSegments* will be increased to the value *GmaxSegments*. *GmaxDegree* and *GMaxSegments* are the maximum possible degree and the number of spans correspondingly. These values will be used in those cases when an approximation with specified parameters is impossible and one of *GmaxDegree* or *GMaxSegments* is selected depending on priority. +Note that if approximation is impossible with *GMaxDegree*, even then the number of spans can exceed the specified *GMaxSegment*. Rational specifies whether Rational BSpline/Bezier should be converted into polynomial B-Spline. +Also note that the continuity of surfaces in the resulting shape can be less than the given value. + +Flags +----- +To convert other types of curves and surfaces to BSpline with required parameters it is necessary to use flags from class ShapeCustom_RestrictionParameters, which is just a container of flags. +The following flags define whether a specified-type geometry has been converted to BSpline with the required parameters: +*ConvertPlane, * +*ConvertBezierSurf,  * +*ConvertRevolutionSurf* +*ConvertExtrusionSurf,.* +*ConvertOffsetSurf,* +*ConvertCurve3d,* +*ConvertOffsetCurv3d,* +*ConvertCurve2d,* +*ConvertOffsetCurv2d,* +*SegmentSurfaceMode* + +Parameters *ConvertCurve3d* and *ConvertCurve2d* are responsible for conversion of all types of 3D and 2D curves. +Parameters *ConvertOffsetCurv3d* and *ConvertOffsetCurv2d* are responsible for conversion of offset 3D and 2D curves. +Parameter *SegmentSurfaceMode* defines whether the surface would be approximated within the boundaries of the face lying on this surface. + +@subsubsection occt_shg_4_2_4 Conversion of elementary surfaces into surfaces of revolution + +~~~~~ +ShapeCustom::ConvertToRevolution() + TopoDS_Shape ShapeCustom::ConvertToRevolution(const TopoDS_Shape& S) ; +~~~~~ + +This method returns a new shape with all elementary periodic surfaces converted to *Geom_SurfaceOfRevolution*. It uses the tool *ShapeCustom_ConvertToRevolution.* + +@subsubsection occt_shg_4_2_5 Conversion of elementary surfaces into Bspline surfaces + +~~~~~ +ShapeCustom::ConvertToBSpline() + TopoDS_Shape ShapeCustom::ConvertToBSpline( const TopoDS_Shape& S, + const Standard_Boolean extrMode, + const Standard_Boolean revolMode, + const Standard_Boolean offsetMode); +This method returns a new shape with all surfaces of linear extrusion, revolution and offset surfaces converted according to flags to Geom_BSplineSurface (with the same parameterization). It uses the tool *ShapeCustom_ConvertToBSpline.* + +@subsubsection occt_shg_4_2_6 Getting the history of modification of sub-shapes. +If, in addition to the resulting shape, you want to get the history of modification of sub-shapes you should not use the package methods described above and should use your own code instead: +1. Create a tool that is responsible for the necessary modification. +2. Create the tool BRepTools_Modifier that performs a specified modification in the shape. +3. To get the history and to keep the assembly structure use the method *ShapeCustom::ApplyModifier*. + + +The general calling syntax for scaling is +~~~~~ +TopoDS_Shape scaled_shape = ShapeCustom::ScaleShape(shape, scale); +~~~~~ + +Note that scale is a real value. You can refine your mapping process by using additional calls to follow shape mapping subshape by subshape. The following code along with pertinent includes can be used: + +~~~~~ +p_Trsf T; +Standard_Real scale = 100; // for example! +T.SetScale (gp_Pnt (0, 0, 0), scale); +Handle(ShapeCustom_TrsfModification) TM = new +ShapeCustom_TrsfModification(T); +TopTools_DataMapOfShapeShape context; +BRepTools_Modifier MD; +TopoDS_Shape res = ShapeCustom::ApplyModifier ( +Shape, TM, context,MD ); +~~~~~ + +The map, called context in our example, contains the history. +Substitutions are made one by one and all shapes are transformed. +To determine what happens to a particular subshape, it is possible to use: + +~~~~~ +TopoDS_Shape oneres = context.Find (oneshape); +//In case there is a doubt, you can also add: +if (context.IsBound(oneshape)) oneres = context.Find(oneshape); +//You can also sweep the entire data map by using: +TopTools_DataMapIteratorOfDataMapOfShapeShape +//To do this, enter: +for(TopTools_DataMapIteratorOfDataMapOfShapeShape +iter(context);iter(more ();iter.next ()) { +  TopoDs_Shape oneshape = iter.key (); +  TopoDs_Shape oneres = iter.value (); +} +~~~~~ + + +@subsubsection occt_shg_4_2_7 Remove internal wires + +*ShapeUpgrade_RemoveInternalWires* tool removes internal wires with contour area less than the specified minimal area. It can work with compounds, solids, shells and faces. +If the flag *RemoveFaceMode* is set to TRUE, separate faces or a group of faces with outer wires, which consist only of edges that belong to the removed internal wires, are removed (seam edges are not taken into account). Such faces can be removed only for a sewed shape. +Internal wires can be removed by the methods *Perform*. Both methods *Perform* can not be carried out if the class has not been initialized by the shape. In such case the status of *Perform* is set to FAIL . +The method *Perform* without arguments removes from all faces in the specified shape internal wires whose area is less than the minimal area. +The other method *Perform* has a sequence of shapes as an argument. This sequence can contain faces or wires. +If the sequence of shapes contains wires, only the internal wires are removed. +If the sequence of shapes contains faces, only the internal wires from these faces are removed. +* The status of the performed operation can be obtained using method *Status()*; +* The resulting shape can be obtained using method *GetResult()*. + +An example of using this tool is presented in the figures below: + +![](/user_guides/shape_healing/images/shape_healing005.jpg "Source Face") +![](/user_guides/shape_healing/images/shape_healing006.jpg "Resulting shape") + +After the processing three internal wires with contour area less than the specified minimal area have been removed. One internal face has been removed. The outer wire of this face consists of the edges belonging to the removed internal wires and a seam edge. +Two other internal faces have not been removed because their outer wires consist not only of edges belonging to the removed wires. + +![](/user_guides/shape_healing/images/shape_healing007.jpg "Source Face") +![](/user_guides/shape_healing/images/shape_healing008.jpg "Resulting shape") + +After the processing six internal wires with contour area less than the specified minimal area have been removed. Six internal faces have been removed. These faces can be united into groups of faces. Each group of faces has an outer wire consisting only of edges belonging to the removed internal wires. Such groups of faces are also removed. + +The example of method application is also given below: + +~~~~~ +//Initialisation of the class by shape. +Handle(ShapeUpgrade_RemoveInternalWires) aTool = new ShapeUpgrade_RemoveInternalWires(inputShape); +//setting parameters +aTool-MinArea() = aMinArea; +aTool-RemoveFaceMode() = aModeRemoveFaces; + +//when method Perform is carried out on separate shapes. +aTool-Perform(aSeqShapes); + +//when method Perform is carried out on whole shape. +aTool-Perform(); +//check status set after method Perform +if(aTool-Status(ShapeExtend_FAIL) { +  cout*Operation failed* ;;\n;; +   return; +} + +if(aTool-Status(ShapeExtend_DONE1)) { +    const TopTools_SequenceOfShape& aRemovedWires =aTool-RemovedWires(); +     coutaRemovedWires.Length(); internal wires were removed;;\n;; +    +  } + +  if(aTool-Status(ShapeExtend_DONE2)) { +    const TopTools_SequenceOfShape& aRemovedFaces =aTool-RemovedFaces(); +     coutaRemovedFaces.Length(); small faces were removed;;\n;; +    +  }   +    //getting result shape +  TopoDS_Shape res = aTool-GetResult(); +~~~~~ + +@subsubsection occt_shg_4_2_8 Conversion of surfaces + +Class ShapeCustom_Surface allows: + * converting BSpline and Bezier surfaces to the analytical form (using method *ConvertToAnalytical())* + * converting closed B-Spline surfaces to periodic ones.(using method *ConvertToPeriodic*) + +To convert surfaces to analytical form this class analyzes the form and the closure of the source surface and defines whether it can be approximated by analytical surface of one of the following types: +* *Geom_Plane,* +* *Geom_SphericalSurface,* +* *Geom_CylindricalSurface,* +* *Geom_ConicalSurface,* +* *Geom_ToroidalSurface*. + +The conversion is done only if the new (analytical) surface does not deviate from the source one more than by the given precision. + +~~~~~ +Handle(Geom_Surface) initSurf; +ShapeCustom_Surface ConvSurf(initSurf); +//conversion to analytical form +Handle(Geom_Surface) newSurf  = ConvSurf.ConvertToAnalytical(allowedtol,Standard_False); +//or conversion to a periodic surface +Handle(Geom_Surface) newSurf  = ConvSurf.ConvertToPeriodic(Standard_False); +//getting the maximum deviation of the new surface from the initial surface +Standard_Real maxdist = ConvSurf.Gap(); +~~~~~ + +@section occt_shg_5_ Auxiliary tools for repairing, analysis and upgrading +. +@subsection occt_shg_5_1 Tool for rebuilding shapes + +*ShapeBuild_ReShape* rebuilds a shape by making pre-defined substitutions on some of its components. During the first phase, it records requests to replace or remove some individual shapes. For each shape, the last given request is recorded. Requests may be applied as *Oriented* (i.e. only to an item with the same orientation) or not (the orientation of the replacing shape corresponds to that of the original one). Then these requests may be applied to any shape, which may contain one or more of these individual shapes. +This tool has a flag for taking the location of shapes into account (for keeping the structure of assemblies) (*ModeConsiderLocation*). If this mode is equal to Standard_True, the shared shapes with locations will be kept. If this mode is equal to Standard_False, some different shapes will be produced from one shape with different locations after rebuilding. By default, this mode is equal to Standard_False. +To use this tool for the reconstruction of shapes it is necessary to take the following steps: +1. Create this tool and use method *Apply()* for its initialization by the initial shape. Parameter *until* sets the level of shape type and requests are taken into account up to this level only. Sub-shapes of the type standing beyond the *line* set by parameter until will not be rebuilt and no further exploration will be done +2. Replace or remove sub-shapes of the initial shape. Each sub-shape can be replaced by a shape of the same type or by shape containing shapes of that type only (for example, *TopoDS_Edge* can be replaced by *TopoDS_Edge, TopoDS_Wire* or *TopoDS_Compound* containing *TopoDS_Edges*). If an incompatible shape type is encountered, it is ignored and flag FAIL1 is set in Status. +For a sub-shape it is recommended to use method *Apply* before methods *Replace* and *Remove*, because the sub-shape has already been changed for the moment by its previous modifications or modification of its sub-shape (for example *TopoDS_Edge* can be changed by a modification of its *TopoDS_Vertex*, etc.). +3. Use method *Apply* for the initial shape again to get the resulting shape after all modifications have been made. +4. Use method *Apply* to obtain the history of sub-shape modification. + +**Note** that in fact class *ShapeBuild_ReShape* is an alias for class *BRepTools_ReShape*. They differ only in queries of statuses in the *ShapeBuild_ReShape* class. + +Let us use the tool to get the result shape after modification of sub-shapes of the initial shape: + +~~~~~ +TopoDS_Shape initialShape… +//creation of a rebuilding tool +Handle(ShapeBuild_ReShape) Context = new ShapeBuild_ReShape. + +//next step is optional. It can be used for keeping +//the assembly structure. +Context- ModeConsiderLocation = Standard_True; + +//initialization of this tool by the initial shape +Context-Apply(initialShape); +… +//getting the intermediate result for replacing subshape1 with +//the modified subshape1. +TopoDS_Shape tempshape1 = Context-Apply(subshape1); + +//replacing the intermediate shape obtained from subshape1 with the //newsubshape1. +Context-Replace(tempsubshape1,newsubshape1); +… +//for removing the subshape +TopoDS_Shape tempshape2 = Context-Apply(subshape2); +Context-Remove(tempsubshape2); + +//getting the result and the history of modification +TopoDS_Shape resultShape = Context-Apply(initialShape); + +//getting the resulting subshape from the subshape1 of the initial //shape. +TopoDS_Shape result_subshape1 = Context-Apply(subshape1); +~~~~~ + +@subsection occt_shg_5_2 Status definition + +*ShapExtend_Status* is used to report the status after executing some methods that can either fail, do something, or do nothing. The status is a set of flags DONEi, FAILi, any combination of them can be set at the same time. For exploring the status, enumeration is used. +The values have the following meaning: +|*OK,*     |  Nothing is done, everything OK | +|*DONE1,*  |  Something was done, case 1 | +|*DONE8*,  |  Something was done, case 8 | +|*DONE*,   |  Something was done (any of DONE#) | +|*FAIL1*,  |  The method failed, case 1 | +|*FAIL8*,  |  The method failed, case 8 | +|*FAIL*    |  The method failed (any of FAIL# occurred) | + + +@subsection occt_shg_5_3 Tool representing a wire +Class *ShapeExtend_WireData* provides a data structure necessary to work with the wire as with an ordered list of edges, and that is required for many algorithms. The advantage of this class is that it allows to work with incorrect wires. +The object of the class *ShapeExtend_WireData* can be initialized by *TopoDS_Wire* and converted back to *TopoDS_Wire*. +An edge in the wire is defined by its rank number. Operations of accessing, adding and removing an edge at/to the given rank number are provided. Operations of circular permutation and reversing (both orientations of all edges and the order of edges) are provided on the whole wire as well. +This class also provides a method to check if the edge in the wire is a seam (if the wire lies on a face). +Let us remove edges from the wire and define whether it is seam edge + +~~~~~ +TopoDS_Wire ini = .. +Handle(ShapeExtend_Wire) asewd = new ShapeExtend_Wire(initwire); +//Removing edge Edge1 from the wire. + +Standard_Integer index_edge1 = asewd->Index(Edge1); +asewd.Remove(index_edge1); +//Definition of whether Edge2 is a seam edge +Standard_Integer index_edge2 = asewd->Index(Edge2); +asewd->IsSeam(index_edge2); +~~~~~ + + +@subsection occt_shg_5_4 Tool for exploring shapes +Class *ShapeExtend_Explorer* is intended to explore shapes and convert different representations (list, sequence, compound) of complex shapes. It provides tools for: + * obtaining the type of the shapes in the context of *TopoDS_Compound*, + * exploring shapes in the context of *TopoDS_Compound*, + * converting different representations of shapes (list, sequence, compound). + +@subsection occt_shg_5_5 Tool for attaching messages to objects +Class *ShapeExtend_MsgRegistrator* attaches messages to objects (generic Transient or shape). The objects of this class are transmitted to the Shape Healing algorithms so that they could collect messages occurred during shape processing. Messages are added to the Maps (stored as a field) that can be used, for instance, by Data Exchange processors to attach those messages to initial file entities. + +Let us send and get a message attached to object: + +~~~~~ +Handle(ShapeExtend_MsgRegistrator) MessageReg = new ShapeExtend_MsgRegistrator; +//attaches messages to an object (shape or entity) +Message_Msg msg.. +TopoDS_Shape Shape1… +MessageReg-Send(Shape1,msg,Message_WARNING); +Handle(Standard_Transient) ent .. +MessageReg-Send(ent,msg,Message_WARNING); +//gets messages attached to shape +const ShapeExtend_DataMapOfShapeListOfMsg& msgmap = +MessageReg-MapShape(); +if (msgmap.IsBound (Shape1)) { + const Message_ListOfMsg &msglist = msgmap.Find (Shape1); + for (Message_ListIteratorOfListOfMsg iter (msglist); +iter.More(); iter.Next()) { +       Message_Msg msg = iter.Value(); + } +    } +~~~~~ + +@subsection occt_shg_5_6 Tools for performance measurement + +Classes *MoniTool_Timer* and *MoniTool_TimerSentry* are used for measuring the performance of a current operation or any part of code, and provide the necessary API. Timers are used for debugging and performance optimizing purposes. + +Let us try to use timers in *XSDRAWIGES.cxx* and *IGESBRep_Reader.cxx* to analyse the performance of command *igesbrep*: + +~~~~~ +XSDRAWIGES.cxx + ... + #include + #include + ... + MoniTool_Timer::ClearTimers(); + ... + MoniTool_TimerSentry MTS("IGES_LoadFile"); + Standard_Integer status = Reader.LoadFile(fnom.ToCString()); + MTS.Stop(); + ... + MoniTool_Timer::DumpTimers(cout); + return; + + +IGESBRep_Reader.cxx + ... + #include + ... + Standard_Integer nb = theModel->NbEntities(); + ... + for (Standard_Integer i=1; i<=nb; i++) { + MoniTool_TimerSentry MTS("IGESToBRep_Transfer"); + ... + try { + TP.Transfer(ent); + shape = TransferBRep::ShapeResult (theProc,ent); + } + ... + } +~~~~~ + +The result of *DumpTimer()* after translation of a file is as follows: + +| TIMER: *IGES_LoadFile* | Elapsed: 1.0 sec CPU User: 0.9 sec CPU Sys: 0.0 sec hits: 1 | +| TIMER: IGESToBRep_Transfer | Elapsed: 14.5 sec CPU User: 4.4 sec CPU Sys: 0.1 sec hits: 1311 | + + +@section occt_shg_6 Shape Processing + +@subsection occt_shg_6_1 Usage Workflow + +The Shape Processing module allows defining and applying the general Shape Processing as a customizable sequence of Shape Healing operators. The customization is implemented via the user-editable resource file, which defines the sequence of operators to be executed and their parameters. +The Shape Processing functionality is implemented with the help of the *XSAlgo* interface. The main function *XSAlgo_AlgoContainer::ProcessShape()* does shape processing with specified tolerances and returns the resulting shape and associated information in the form of *Transient*. + +This function is used in the following way: + +~~~~~ +TopoDS_Shape aShape = …; +Standard_Real Prec = …, +Standard_Real MaxTol = …; +TopoDS_Shape aResult; +Handle(Standard_Transient) info; +TopoDS_Shape aResult = XSAlgo::AlgoContainer()-ProcessShape(aShape, + Prec, MaxTol., *Name of ResourceFile*, *NameSequence*, info ); +~~~~~ + +Let us create a custom sequence of operations: + +1. Create a resource file with the name ResourceFile, which includes the following string: +~~~~~ +NameSequence.exec.op:    MyOper +~~~~~ +where *MyOper* is the name of operation. + +2. Input a custom parameter for this operation in the resource file, for example: +~~~~~ +NameSequence.MyOper.Tolerance: 0.01 +~~~~~ + +where Tolerance is the name of the parameter and 0.01 is its value. + +3. Add the following string into *void ShapeProcess_OperLibrary::Init()*: + +~~~~~ +ShapeProcess::RegisterOperator(;MyOper;, +new ShapeProcess_UOperator(myfunction)); +~~~~~ +where *myfunction* is a function which implements the operation. + +4. Create this function in *ShapeProcess_OperLibrary* as follows: +~~~~~ +static Standard_Boolean myfunction (const + Handle(ShapeProcess_Context)& context) +{ + Handle(ShapeProcess_ShapeContext) ctx = + Handle(ShapeProcess_ShapeContext)::DownCast(context); +  if(ctx.IsNull()) return Standard_False; +  TopoDS_Shape aShape = ctx->Result(); +  //receive our parameter: +  Standard_Real toler; +  ctx->GetReal(;Tolerance;, toler); +~~~~~ + +Now it is possible to make the necessary operations with *aShape* using the received value of parameter *Tolerance* from the resource file. + +~~~~~ +  return Standard_True; +} +~~~~~ + +It is possible to define some operations (with their parameters) *MyOper1, MyOper2, MyOper3*, etc. and describe the corresponding functions in *ShapeProcess_OperLibrary*. After that it will be possible to perform the required sequence using the specified name of operations and values of parameters in the resource file. + +For example: input of the following string: +~~~~~ +NameSequence.exec.op:    MyOper1,MyOper3 +~~~~~ +means that the corresponding functions from *ShapeProcess_OperLibrary* will be performed with the original shape *(aShape)* using parameters defined for *MyOper1* and *MyOper3* in the resource file. +It is necessary to note that these operations will be performed step by step and the result obtained after performing the first operation will be used as the initial shape for the second operation. + +@subsection occt_shg_6_2 Operators +**DirectFaces** sets all faces based on indirect surfaces, defined with left-handed coordinate systems as direct faces. This concerns surfaces defined by Axis Placement (Cylinders, etc). Such Axis Placement may be indirect, which is allowed in Cascade, but not allowed in some other systems. This operator reverses indirect placements and recomputes PCurves accordingly. +**SameParameter** is required after calling some other operators, according to the computations they do. Its call is explicit, so each call can be removed according to the operators, which are either called or not afterwards. This mainly concerns splitting operators that can split edges. +The operator applies the computation *SameParameter* which ensures that various representations of each edge (its 3d curve, the pcurve on each of the faces on which it lies) give the same 3D point for the same parameter, within a given tolerance. For each edge coded as ;same parameter;, deviation of curve representation is computed and if the edge tolerance is less than that deviation, the tolerance is increased so that it satisfies the deviation. No geometry modification, only an increase of tolerance is possible. For each edge coded as ;not same parameter; the deviation is computed like in the first case. Then an attempt is made to achieve the edge equality to ;same parameter; by means of modification of 2d curves. If the deviation of this modified edge is less than the original deviation then this edge is returned, otherwise the original edge (with non-modified 2d curves) is returned with an increased (if necessary) tolerance. Computation is done by call to the standard algorithm *BRepLib::SameParameter*. +This operator can be called with the following parameters: + * *Boolean : Force* (optional) - if True, encodes all edges as *not same parameter* then runs the computation. Else, the computation is done only for those edges already coded as *not same parameter*. + * *Real : Tolerance3d* (optional) - if not defined, the local tolerance of each edge is taken for its own computation. Else, this parameter gives the global tolerance for the whole shape. +**BSplineRestriction** is used for conversion of surfaces, curves 2d curves to BSpline surfaces with a specified degree and a specified number of spans. +This operator performs approximations on surfaces, curves and 2d curves with a specified degree, max number of segments, 2d tolerance, 3d tolerance. The specified continuity can be reduced if the approximation with a specified continuity was not done successfully. +This operator can be called with the following parameters: +* *Boolean : SurfaceMode* allows considering the surfaces; +* *Boolean : Curve3dMode* allows considering the 3d curves; +* *Boolean : Curve2dMode* allows considering the 2d curves; +* *Real : Tolerance3d* defines 3d tolerance to be used in computation; +* *Real : Tolerance2d* defines 2d tolerance to be used when computing 2d curves; +* *GeomAbs_Shape (C0 G1 C1 G2 C2 CN) : Continuity3d* is the continuity required in 2d; +* *GeomAbs_Shape (C0 G1 C1 G2 C2 CN) : Continuity2d* is the continuity required in 3d; +* *Integer : RequiredDegree* gives the required degree; +* *Integer : RequiredNbSegments* gives the required number of segments; +* *Boolean : PreferDegree* if true, *RequiredDegree* has a priority, else *RequiredNbSegments* has a priority; +* *Boolean : RationalToPolynomial* serves for conversion of BSplines to polynomial form; +* *Integer : MaxDegree* gives the maximum allowed Degree, if *RequiredDegree* cannot be reached; +* *Integer : MaxNbSegments* gives the maximum allowed NbSegments, if *RequiredNbSegments* cannot be reached; + +The following flags allow to manage the conversion of special types of curves or surfaces, in addition to BSpline. They are controlled by *SurfaceMode, Curve3dMode* or *Curve2dMode* respectively. By default, only BSplines and Bezier Geometries are considered. +*Boolean : OffsetSurfaceMode* +*Boolean : LinearExtrusionMode* +*Boolean : RevolutionMode* +*Boolean : OffsetCurve3dMode* +*Boolean : OffsetCurve2dMode* +*Boolean : PlaneMode* +*Boolean : BezierMode* +*Boolean : ConvCurve3dMode* +*Boolean : ConvCurve2dMode* +For each of the Mode parameters listed above, if it is True, the specified geometry is converted to BSpline, otherwise only its basic geometry is checked and converted (if necessary) keeping the original type of geometry (revolution, offset, etc.). +*Boolean :SegmentSurfaceMode* has effect only for Bsplines and Bezier surfaces. When False a surface will be replaced by a Trimmed Surface, else new geometry will be created by splitting the original Bspline or Bezier surface. + +**ElementaryToRevolution** converts elementary periodic surfaces to SurfaceOfRevolution. + +**SplitAngle** splits surfaces of revolution, cylindrical, toroidal, conical, spherical surfaces in the given shape so that each resulting segment covers not more than the defined number of degrees. +This operator can be called with the following parameters: +* *Real : Angle* - the maximum allowed angle for resulting faces; +* *Real : MaxTolerance* - the maximum tolerance used in computations. + +**SurfaceToBSpline** converts some specific types of Surfaces, to BSpline (according to parameters). +This operator can be called with the following parameters: +* *Boolean : LinearExtrusionMode* allows converting surfaces of Linear Extrusion; +* *Boolean : RevolutionMode* allows converting surfaces of Revolution; +* *Boolean : OffsetMode* allows converting Offset Surfaces + +**ToBezier** is used for data supported as Bezier only and converts various types of geometries to Bezier +This operator can be called with the following parameters used in computation of conversion : +* *Boolean : SurfaceMode* +* *Boolean : Curve3dMode* +* *Boolean : Curve2dMode* +* *Real : MaxTolerance* +*Boolean : SegmentSurfaceMode* (default is True) has effect only for Bsplines and Bezier surfaces. When False a surface will be replaced by a Trimmed Surface, else new geometry will be created by splitting the original Bspline or Bezier surface. + +The following parameters are controlled by *SurfaceMode, Curve3dMode* or *Curve2dMode* (according to the case): +* *Boolean : Line3dMode* +* *Boolean : Circle3dMode* +* *Boolean : Conic3dMode* +* *Boolean : PlaneMode* +* *Boolean : RevolutionMode* +* *Boolean : ExtrusionMode* +* *Boolean : BSplineMode* + +**SplitContinuity** splits a shape in order to have each geometry (surface, curve 3d, curve 2d) correspond the given criterion of continuity. +This operator can be called with the following parameters: +* *Real : Tolerance3d* +* *Integer (GeomAbs_Shape ) : CurveContinuity* +* *Integer (GeomAbs_Shape ) : SurfaceContinuity* +* *Real : MaxTolerance* + + +Because of algorithmic limitations in the operator *BSplineRestriction* (in some particular cases, this operator can produce unexpected C0 geometry), if *SplitContinuity* is called, it is recommended to call it after *BSplineRestriction*. +Continuity Values will be set as *GeomAbs_Shape* (i.e. C0 G1 C1 G2 C2 CN) besides direct integer values (resp. 0 1 2 3 4 5). + +**SplitClosedFaces** splits faces, which are closed even if they are not revolutionary or cylindrical, conical, spherical, toroidal. This corresponds to BSpline or Bezier surfaces which can be closed (whether periodic or not), hence they have a seam edge. As a result, no more seam edges remain. The number of points allows to control the minimum count of faces to be produced per input closed face. +This operator can be called with the following parameters: +* *Integer : NbSplitPoints* gives the number of points to use for splitting (the number of intervals produced is *NbSplitPoints+1*); +* *Real : CloseTolerance* tolerance used to determine if a face is closed; +* *Real : MaxTolerance* is used in the computation of splitting. + +**FixGaps** must be called when **FixFaceSize** and/or **DropSmallEdges** are called. Using Surface Healing may require an additional call to **BSplineRestriction** to ensure that modified geometries meet the requirements for BSpline. +This operators repairs geometries which contain gaps between edges in wires (always performed) or gaps on faces, controlled by parameter *SurfaceMode*, Gaps on Faces are fixed by using algorithms of Surface Healing +This operator can be called with the following parameters: +* *Real : Tolerance3d* sets the tolerance to reach in 3d. If a gap is less than this value, it is not fixed. +* *Boolean : SurfaceMode* sets the mode of fixing gaps between edges and faces (yes/no) ; +* *Integer : SurfaceAddSpans* sets the number of spans to add to the surface in order to fix gaps ; +* *GeomAbs_Shape (C0 G1 C1 G2 C2 CN) : SurfaceContinuity* sets the minimal continuity of a resulting surface ; +* *Integer : NbIterations* sets the number of iterations +* *Real : Beta* sets the elasticity coefficient for modifying a surface [1-1000] ; +* *Reals : Coeff1 to Coeff6* sets energy coefficients for modifying a surface [0-10000] ; +* *Real : MaxDeflection* sets maximal deflection of surface from an old position. + +This operator may change the original geometry. In addition, it is CPU consuming, and it may fail in some cases. Also **FixGaps** can help only when there are gaps obtained as a result of removal of small edges that can be removed by **DropSmallEdges** or **FixFaceSize**. + +**FixFaceSize** removes faces, which are small in all directions (spot face) or small in one direction (strip face) +This operator can be called with the parameter *Real : Tolerance*, which sets the minimal dimension, which is used to consider a face, is small enough to be removed. + +**DropSmallEdges** drops edges in a wire, and merges them with adjacent edges, when they are smaller than the given value (*Tolerance3d*) and when the topology allows such merging (i.e. same adjacent faces for each of the merged edges). Free (non-shared by adjacent faces) small edges can be also removed in case if they share the same vertex Parameters. +This operator can be called with the parameter *Real : Tolerance3d*, which sets the dimension used to determine if an edge is small. + +**FixShape** may be added for fixing invalid shapes. It performs various checks and fixes, according to the modes listed hereafter. Management of a set of fixes can be performed by flags as follows: +if the flag for a fixing tool is set to 0 , it is not performed if set to 1 , it is performed in any case if not set, or set to -1 , for each shape to be applied on, a check is done to evaluate whether a fix is needed. The fix is performed if the check is positive +By default, they are not set, i.e. evaluated for each individual shape. +This operator can be called with the following parameters: +* *Real : Tolerance3d* sets basic tolerance used for fixing; +* *Real : MaxTolerance3d* sets maximum allowed value for the resulting tolerance; +* *Real : MinTolerance3d* sets minimum allowed value for the resulting tolerance. +* *Boolean : FixFreeShellMode* +* *Boolean : FixFreeFaceMode* +* *Boolean : FixFreeWireMode* +* *Boolean : FixSameParameterMode* +* *Boolean : FixSolidMode* +* *Boolean : FixShellMode* +* *Boolean : FixFaceMode* +* *Boolean : FixWireMode* +* *Boolean : FixOrientationMode* +* *Boolean : FixMissingSeamMode* +* *Boolean : FixSmallAreaWireMode* +* *Boolean (not checked) : ModifyTopologyMode* specifies the mode for modifying topology. Should be False (default) for shapes with shells and can be True for free faces. +* *Boolean (not checked) : ModifyGeometryMode* specifies the mode for modifying geometry. Should be False if geometry is to be kept and True if it can be modified. +* *Boolean (not checked) : ClosedWireMode* specifies the mode for wires. Should be True for wires on faces and False for free wires. +* *Boolean (not checked) : PreferencePCurveMode (not used)* specifies the preference of 3d or 2d representations for an edge +* *Boolean : FixReorderMode* +* *Boolean : FixSmallMode* +* *Boolean : FixConnectedMode* +* *Boolean : FixEdgeCurvesMode* +* *Boolean : FixDegeneratedMode* +* *Boolean : FixLackingMode* +* *Boolean : FixSelfIntersectionMode* +* *Boolean : FixGaps3dMode* +* *Boolean : FixGaps2dMode* +* *Boolean : FixReversed2dMode* +* *Boolean : FixRemovePCurveMode* +* *Boolean : FixRemoveCurve3dMode* +* *Boolean : FixAddPCurveMode* +* *Boolean : FixAddCurve3dMode* +* *Boolean : FixSeamMode* +* *Boolean : FixShiftedMode* +* *Boolean : FixEdgeSameParameterMode* +* *Boolean : FixSelfIntersectingEdgeMode* +* *Boolean : FixIntersectingEdgesMode* +* *Boolean : FixNonAdjacentIntersectingEdgesMode* + +**SplitClosedEdges** handles closed edges i.e. edges with one vertex. Such edges are not supported in some receiving systems. This operator splits topologically closed edges (i.e. edges having one vertex) into two edges. Degenerated edges and edges with a size of less than Tolerance are not processed. + +@section occt_shg_7_ Messaging mechanism + +Various messages about modification, warnings and fails can be generated in the process of shape fixing or upgrade. The messaging mechanism allows generating messages, which will be sent to the chosen target medium a file or the screen. The messages may report failures and/or warnings or provide information on events such as analysis, fixing or upgrade of shapes. + +@subsection occt_shg_7_2  Message Gravity +Enumeration *Message_Gravity* is used for defining message gravity. +It provides the following message statuses: +* *Message_FAIL* - the message reports a fail; +* *Message_WARNING* - the message reports a warning; +* *Message_INFO* - the message supplies information. + +@subsection occt_shg_7_3 Tool for loading a message file into memory +Class *Message_MsgFile* allows defining messages by loading a custom message file into memory. It is necessary to create a custom message file before loading it into memory, as its path will be used as the argument to load it. Each message in the message file is identified by a key. The user can get the text content of the message by specifying the message key. + +Format of the message file +-------------------------- +The message file is an ASCII file, which defines a set of messages. Each line of the file must have a length of less than 255 characters. +All lines in the file starting with the exclamation sign (perhaps preceded by spaces and/or tabs) are considered as comments and are ignored. +A message file may contain several messages. Each message is identified by its key (string). +Each line in the file starting with the *dot* character (perhaps preceded by spaces and/or tabs) defines the key. The key is a string starting with a symbol placed after the dot and ending with the symbol preceding the ending of the newline character *\n*. +All the lines in the file after the key and before the next keyword (and which are not comments) define the message for that key. If the message consists of several lines, the message string will contain newline symbols *\n* between each line (but not at the end). +The following example illustrates the structure of a message file: + +~~~~~ +!This is a sample message file +!------------------------------ +!Messages for ShapeAnalysis package +! +.SampleKeyword +Your message string goes here +! +!... +! +!End of message file +~~~~~ + +Loading the message file +------------------------ +A custom file can be loaded into memory using the method *Message_MsgFile::LoadFile*, taking as an argument the path to your file as in the example below: +~~~~~ +Standard_CString MsgFilePath = ;(path)/sample.file;; +Message_MsgFile::LoadFile (MsgFilePath); +~~~~~ + +@subsection occt_shg_7_4 Tool for managing filling messages + +The class *Message_Msg* allows using the message file loaded as a template. This class provides a tool for preparing the message, filling it with parameters, storing and outputting to the default trace file. +A message is created from a key: this key identifies the message to be created in the message file. The text of the message is taken from the loaded message file (class *Message_MsgFile* is used). +The text of the message can contain places for parameters, which are to be filled by the proper values when the message is prepared. These parameters can be of the following types: +* string - coded in the text as *%s*, +* integer - coded in the text as *%d*, +* real - coded in the text as *%f*. +The parameter fields are filled by the message text by calling the corresponding methods *AddInteger, AddReal* and *AddString*. Both the original text of the message and the input text with substituted parameters are stored in the object. The prepared and filled message can be output to the default trace file. The text of the message (either original or filled) can be also obtained. +~~~~~ +Message_Msg msg01 (;SampleKeyword;); +//Creates the message msg01, identified in the file by the keyword SampleKeyword +msg1.AddInteger (73); +msg1.AddString (;SampleFile;); +//fills out the code areas +~~~~~ + + +@subsection occt_shg_7_5 Tool for managing trace files + +Class *Message_TraceFile* is intended to manage the trace file (or stream) for outputting messages and the current trace level. Trace level is an integer number, which is used when messages are sent. Generally, 0 means minimum, 0 various levels. If the current trace level is lower than the level of the message it is not output to the trace file. The trace level is to be managed and used by the users. +There are two ways of using trace files: +* define an object of *Message_TraceFile*, with its own definition (file name or cout, trace level), and use it where it is defined, +* use the default trace file (file name or cout, trace level), usable from anywhere. +Use the constructor method to define the target file and the level of the messages as in the example below: +~~~~~ +Message_TraceFile myTF + (tracelevel, *tracefile.log*, Standard_False); +~~~~~ +The parameters are as follows: +* *tracelevel* is a Standard_Integer and modifies the level of messages. It has the following values and semantics: + + 0: gives general information such as the start and end of process; + + 1: gives exceptions raised and fail messages; + + 2: gives the same information as 1 plus warning messages. +* *filename* is the string containing the path to the log file. +The Boolean set to False will rewrite the existing file. When set to True, new messages will be appended to the existing file. + +A new default log file can be added using method *SetDefault* with the same arguments as in the constructor. +The default trace level can be changed by using method *SetDefLevel*. In this way, the information received in the log file is modified. +It is possible to close the log file and set the default trace output to the screen display instead of the log file using the method *SetDefault* without any arguments. + + +@section occt_211336372_61271129 Appendix B +@subsection occt_211336372_612711291 Examples of use +@subsubsection occt_211336372_6127112911 ShapeAnalysis_Edge and ShapeFix_Edge + + + + + + + + +
+ +
+ + + ![](/user_guides/shape_healing/images/shape_healing_image011.png) +
In this example an edge is shown where the maximum deviation between the 3D curve and 2D curve P1 is greater than the edge tolerance. + +

Example
+ShapeAnalysis_Edge sae; +TopoDS_Face face = ...; +TopoDS_Wire wire = ...; +Standard_Real precision = 1e-04; +ShapeFix_Edge sfe; +Standard_Real maxdev; +if (sae.CheckSameParameter (edge, maxdev)) { +  cout*Incorrect SameParameter flag*endl; +  cout*Maximum deviation *maxdev *, tolerance * +BRep_Tool::Tolerance(edge)endl; +  // Maximum deviation between pcurve and +  // 3D curve is greater than tolerance +  sfe.FixSameParameter(); +  cout*New tolerance *BRep_Tool::Tolerance(edge)endl; +  // Tolerance is increased to englobe the deviation +} + + + + + + + + + +
+ +
+ + + ![](/user_guides/shape_healing/images/shape_healing_image012.png) +
The result is an increased edge tolerance: + +@subsubsection occt_211336372_6127112912 ShapeAnalysis_Wire and ShapeFix_Wire +This wire is first analyzed to check that: + * the edges are correctly oriented + * there are no edges that are too short and + * that there are no intersecting adjacent edges. + + + + + + + + + + +
+ +
+ + + ![](/user_guides/shape_healing/images/shape_healing_image013.png) +
+
Example
+ +ShapeAnalysis_Edge sae; +TopoDS_Face face = ...; +TopoDS_Wire wire = ...; +Standard_Real precision = 1e-04; +ShapeFix_Edge sfe; +Standard_Real maxdev; +if (sae.CheckSameParameter (edge, maxdev)) { + cout<<“Incorrect SameParameter flag”<27_dx>*8XN`>K?1>@;O;JiLkPhk1a}Jz5F7^A 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 m*2l*OQXOT`qhpC@6q? zX9GB$1GE7s1VRI$hSJc`&_SVeFg8ZmxpOcs7FH%U0Up82{5<@8LShP%LL#yveEd?H z(z1%mYHDhN5;}(3Dh3LwYRZ3#P(bPEVCP_*jEtPh!u-O@|K~XE2AF679bgnh!4FU} zQGl2zPWu2J0HB~c>-JB>{}~jNATSj*goYMMcb3q|2vAahK$Kt*6%`nKmK|~C17Ieq z^L)~p)XZl0A^d(9uEnGk(Fkb0eaB)xNxCfaz(1B2%6gHFokLLQim-^Ntem{Ubwwp@ z9bG+r14APVODpSJHn(jZot#}<-5$CJJPHg74hao=@-z++|Ll1}dPXKPD?8_9ZgELz zSvk7mb!A4o`Ulzn;$k}Eq6C9MV8|aX3d-O!ftbKleA3kCHO(OR{h0Z$#n4>PN-KK% zj#fa%oW%0Le-g@iS$0Wq=MUO{ko|jLvHvf!e}Mfr7apJoQJifahzU>!4&24wmmhWn z1hUIp2a%#?ttEPotmu3aI2Jm#3uMz4^g^U^dTI#z0{a*%5!*EkX9=@#fLmwOO4xD# zbVq5V^XN`b;pep2l$p0HJLve5g8NGOPACOoL490I!q8z{k$p&sUPGcO3fz`ps`wxs zUbfrPt%jWip+lJag9-YA8SfgFP)j{2JL+*BS{GdM@>2@>tT42;`QBkXNh*&S;(oLn z&lxy&-DzcK$-0a5l|d=ZGBXTBSeiJe4@?=D8sM&_9j=@LqCdDmJ@N+*Y;c}i2>fq| z>%GY>2UE{eKq^L8j za1BS{bC-}wGjn5*5h^`B7{u;Jm9JX;5}f~+4Q{-E)9hTqKBR?(C%BgGF07 zBgCHNij)`%+(+o&)FeM~c;uUjjPk;nV-(;Y^mFfoTehIA`9Dhm<5@RP0hL+%hs)=# ze{CWoibQSYy1i1j=EoY+y0?u_0U8BF=SPWbqvt$rulX3JHTxfg>~&{52(bE;4SN9% zNvT?d3PoO$2C+k_QN&0@Pu?{RYLk1z6m^_&lGg0C>_xr&u|K6sWvEHUymYG~l(y18jpanGs zv~%3Ayp`czIal3}7cNf2Uog`J{+UAIi|>ZBt!(Y2QhPk2o|52~+*yW`5- z6wr>vgJS4?q#-9F_>v;B1QOj;^u~_q zJj*$*mSJ{Yf797oOoW<^_?w>fJjYnmJb!uO$;#}wR^^Bb+DbJn_*mV7!_rydQQ#d! z(2DC+R%?{(K=`86Yo5Lvq9+*`%<*Kyc#an9XKKjNY6m?m*p$WM(|ZZ=&FM>)uLw2% zNtqY9#TF|T9PBj9FFK#yB$<6q8h)z=BM9YZLpL=*TyXJ)h7;CL6}F3Z#^|dF&DPE4 zFM|X)ee^tQc~cE8$I47hg*?95Jjs6-w&9P#^cOidhu)ZOjaL^FQ8`ZmB)>{AG5*mHaj?g3G z=STLyeKq5gmcDApHS*nfYy>e1Hbxv$(R?&TId*}csCl_4Y!ehS#0xvD&K^*b8%&Jk zpxYD@aq);ST3yktjdvTZ1MQ;xufbH4?uS?qaop@A_DOi=*y}r?iJpht4mRm@0VrA( z$NZZRSHj}OZ!@21rhQayxdvPyTRtwyA~Lh*GX^DV3=a)N^oJJ4{SGB6Gcd2WWmQ!! z!qMZt=DJxf(sigyKz?|8%|CD zOi8`@^sXtkL!`0h=bMcq9x3#PJ#+R?Hy?U^!3x_&ozIzHL;IOb|MsCSBaAWsa_u#9 zpLrlDxP@KSPj*^DXb_P2h0yUvKXSgUO51)aN&TQGOAA^`2z@RTLSr4R+{Ja+)yK`h zGeJVc1ReOk>6y>TFG@QFp4G#Gl0&!=#q#P*k=%!f#Ua!$yLw-4-Diff-mUMc6ukFmG|rRruP&-0AKCk7vGRQY*H=5g8xYDvB?C8Rj+SD`4U zB~_$%%rN`Lj_3kSJp1Nc4130^X|J;1cQ;A~dib(BTS)Ah$=e;PO>A1pd-`U7ukL%& z0}&oYq^P9d@Y0Z`DB6(Z&8 zBq`8JN|sth`o)af{xD@YywjhJ_e0GNKCjSo;)S!|s<9LU9z(ws6yo`?FR_LmkNvzY zej2+i*~o|GrwzzBV9M@xs>JNrc~ zRkc618BI?u<=yb@&X2TO<&Z!Jqd(I)dI~ggD{z9oB@c9zwsa!Y*kqxBks=t1j@tC99{d&}sY8ONoM z@m%lZsDIm+p3-2V{(KPhRje=Ef*4_ZXT}?|UH!7SxnN3IpXSwhYDf(i+?TLBd^6MC zG7OV`e1m-9q)`FCKzoYgmu?;reo`_#B&BWqb_|rv^K$L2Gl^xF0aC z6Hr$go?X=;*CiL474~2k93NiiQgweiVFAKULtiTsjo)la1wWb%XDIjJ9lDejzFJTG~PU34$kV{mv(E)_QmbpaTg{u_xD)}jy zv|q&Vlq#tU)4=EbjV88e!zHXzfj14mM?9`jM*1Q zi_JYeu=X7Da0S!%g8SLb^$8+^A3U!Vj_1DrY#4I9+*j7JKFs2h02Dv6znotnF`97- zm|XlVI`7+mK}&d9=LJ333W&5M3sa^X2%UKv?drcFrlgWz%!a4HEBnF|5c<$+Ll`Jd z_`7PdvAW=y&jPpys4EGY0eqs%5US@qWf9tT%}LmE&ctuxy`CITwSOwGeLEQmOZj4U zeNP-VDi~-Kc`!;+zC+AO_P$jgX7#cR1_fw-R<>1VL=?MUvvFsXl^F=Nm`Lv9CXi>6 zk!21ZN>8m>8DF}ll9YwF48Kza*pSI=ua)42U)zpY!zIDlYQi4`66Aw^S$b-{AW(w~ zU$Ojf4(Mbe1!l*2*5>3MX#V;ZtEkpHaZA^pF+~)2WH-pdsjE9u2Nf=EP$B#m&%c;K znTLt59+JD_wzj;BMi0znYu{t9rOLb@a}&!*+;Ql2ZqCM*#>AgLecxml&DWnla~O<- fE1EllM2t5ucWb^r!kOvb9{6V;tpB+db^7UVrz)` zeBb@prC-vfqxKk0VEH? z!NkPE#K6JA!otPD!6l$1BEZKdpd}+Grep*^U}69>+-GJN=4NIUV7<@4Bg-owDlR1@ z^?>V*3M%RyG*onSG&JDqKwun%MvP8!pH~)xRP#9|gWFxckmNipM!A|UGOcka6aNeM zP;4A>3QDSb513gVva$&X3JHsdipf7xP*hS@dHhUUM^{hZz|g|d%G$=(&fde*>!r7k zuV2`!@QBE$=$Mq$*Jo33bZP$+9$SW z_Fh$ni#LZ~l7cS^6L%_A|F)U~67;1B>T-)a1GySRg6>(a5Vn%K;0_CgS~wXUa~mK*E0}P* zur(wo)X+QFR!C9%>ESzdxfB^m|0C%%(RNxNLG4C3V?!ie6r``zHi!ty)lt}8I`8AW zbpK70CWn>2(~Dw83HJ|WE4F3?=SPZaQV;@EHyY-b`iDhsTX9xhs7cs&>N(-4tNx#T zjycc8v7e{OGez-L5XuqQYryoR@R6WAzflBCdc)vSiUi7)SGF(aX-XYpJ^7aW#VHZN z#iG!UfnHn4m*&62uGy~}rGNYeKMULz2?}>xJ-Mc+K!Q$E5rUZApM9JJDz#>o1!E|^ zVw*PN{n#Qq@3hSS8>0SOGXHj_P?G&EGy@*d`V0wrZgyKh=6NA+EXy1jNcBm$Yt>8W z{l*9yIOBBB_#~3Pee%NLwPqk!EPBb=@Hu#ocz}>NuWv`D`5?zF)ZKyj@Z{YZEh1gu z^F|=kWSRV>&7$|n2%-8rx6!qkN}o_FD`@)X58n+AC_b$)U--w`EH%A)`j(O9m^3FW zrm+m>ZlE=4)+p>3e$h5XLBh1ln6?%te4Nblo~GH6c<^MR%ArwjKD>f|uO;w%jCd5{ zyCEsfgluj$5e@I5PrrOz=FaBF*?=4UjyUii)w^#M0Bj0et@K!Ht04gJtyWI8d|RVT`oVRUnNodde=U33=Lu9 z-Q?fo{n`HFaZ;e56nJ6OZVlJLzud0!gNijL&46aao=GI;T)34_#DZ?i=|IMlgng10 zqlM_!6o%w)G0O(2b_;2k+q48yX`1v?iq(a^P9F|*{T>m^)3&v>Pn|L8{_N>($Uar|LyQ@4cSWXf6mg&KEg_x8{HH{7Jd_BY}UQ zY5-4bmU~qic0SW_DC~;_72tc_)l~S;eU$z5D12Aro$6z6j=1|M?pf+h`i{ELmNntm z>xr_AEAS(TI>?cr@kgylQ0HAhHAt`Fp1R!LRUL(+Xdu`UVRCRIBuIhe2NDDV_${X3 zAFf|7{qqeO|L*t-{LbG$@CtZfD)7LHHq=L_L5)t{yr)Nt%*&Vl#<-81mW|Suro8$e zPa#3CxO+R!HMyms=+dyVQeWssPsT{KbdQM!8;?X&K+R9~n4Fc)AlCYj=dtS#5WRct z)5ZwLp3Kxg;As1OUF#+P@Tfn)UiodE{|4+oU*7j;Jir~izqErhx-*R%Qupy80<$E> zDz4+NxJKN4(5@<5{t)Ken35&GJuTvl zii^`KhBXtL7N?>F<)MZg|DLH8G==-FP*Hid?(uUQ2M-1b{CkOfTkp8$P#aANq@J4= z|NbBu(V~B1S^iE575;7fL!=@{S!dcl%APUvyR~?h9;y4MOxK0azCrgH9$qdDQRA>!pF`L#QY+#n>EqW&I5C)^p)04Y|1f zs^x{CRPO31x_vaeq0y2^bZC>qP$8Q#n(H@0Il>Ly{%!~k-g=)~YHIAypVC)Lm}{fq z!AMXddoG-?2?<(1kVX(oqh~+e8=o^%W&5adPyBPb@|&vFiY|nflEihQVWYm z>4(8m)CSdy#zqdAYfPqTeE#kr(Dau6p+Zl^>CY1UtqB+PcNre|-HX=s(rd;(Mu>na z2=uud64X2Xk84SU>CpkAnhU@{X$(2_ga9VJ5&qK{30nQKfds`CAjtZ|J9fVAAVH|d z0ODM_zt5~Zo;pfuj#<%diQzdmE@NNCOVPN~QfBxsS+rSornMOsNuEtt>}}_An=<)2 zxQYtC+I;_YLPUK>O%-HUvJ|ojMhGii3Xa}l)^o$dkf6R@L|-!!^!~C42}**%mcZX< zrO)Z6I?f1@AnJmfdpn4*`3!_C613q7u>fEm^VdRx2BhK6iH8ok*M#v^C}nxG+J^r(UORb z=OD!jz92(_=6SWH9wsxKf+MM(zm9UrvCDi&8(JDY#ZQLWeCLyMu4a@^na}aXdroHU zPZ4ui)Ko-Z4zezkM!dKUv;@B$yX%O0x3c+#B~$wY`_z@lIhw8~vO0M`zaC2*cd+SFEUI$paVtj@Ye! z@8A?={dc*Uek=&^R%r5n=A}Ui);KTIQ}jO}+Z{Jr+UL<9wO~}+WbFH(z*_6J(ADW& z{JuZPmp$I1CxW^Qy{{Sk4$phO5~#?-|0Y-T1<&fm7$ z?JnU?-&voQl$JSf(gH&Fr-oE$%1eYKCi(mmmE{aPOCE2nLfdenDsPb?-tuy$(W^Atw$ z2Lmj}qqTb5&Bo-0NXou#kqt@S%%z!*#!4Go&!O0#@!Ez) z&9We)(Q9W(QG0HY_|)VDRx$CT@x+>rZ+IMW>cUPNsHG#v)4E1&jxc*{$73(wrDKyg z;TlyJjxh6|#FGzPdsaKpc0Q8Te^4tIj;~_OF3ucayz4YU|LVw?v6LE|m9+0MD>!>u z&6wNoErmZ(@8OWYXwsTFy+*;o>m2z_f<%;MA+gdAJvSP!;i(F9T4`;o{WsmI)fCZw zL18!(Dk4Oz7;z`}v;aYZf&|HA1BMkv12z%wylw`&8W+UII@o4YNW9sLfZ&)Nsi`8u z4?1p;AV5ASlrBF2@+Eh%atkOpK;}z!W~z@WH*?Ggm!j6?4j+wWf%qT^)pmYyh7DQ38XqPIH+P2Gl?J&db4nnv|WnZ=+w>^ucu9%26fzEshBF z_D81<5sOa3+_fF1n-}##|7>1`zs#Fh<8y!r^W#R~ZUU<5bzp42**W!i2h@xO38E=D zG!+9>+Hx!qfc%t(ZT)3pvwyMLN{YX%_L9K2$>8d=;DY45o#Y93fWW~>o}yvM8uLc z|3R96bpMQNA%l8}h)xZ_JDh3B{0H^U%AZg_v|9-I(tRq;_=cn7oQl2l?@T>gdM%)C z0hN1w2~b8>P`*q0jM3KYk^tZ^g_y;^yYf%ZtupA?Ebm8x%mGx5ADF29)gd+4*yzAn zFjjGq>ad`x;Z;(6eW!u|OFEt(K~DHediTX75C}mF{{K7p(2>|m%aG5-kC z;c-S~FVnoqxo~pdf=QlJmpXsU7(j$F!%=t$HxhI(uW^euO^61V&-gsZcQL|Sa(4H> zbJPAruV!l`D5V;F8w@N>snSc}55^(ufeFiwSD)X?tzW6sG{4zz3?3A05hr4HbXV{M zLt}hA5aGA{fR7G%7C7H#J%R6C-8=gbg1t`yDTPFR4aulX39jWSJfg=wWZ8ZK{+v?# zr*L$ehCyck>@m4JQPcWq;z5oPA{X<1+T2_jchgx}x^K{L0-|X@lSSegQ1wGEaXe09 zJkM-D;&Q|C>Sk}8R_2~t=|8S@;=mI3HO8R2pe*ikTXSeI64$``K3wKIA^#v_E+2!D zPPkTzx6avA$)wY3MBuQlgWw4>MLXpr2OZTbk<4WpaWXuiEO#kKKdAkrtrV%sE6zgO zq5J0f{7yuUIWm1>)8gz9RQo#?F2%b}n_tI;%wM?^VAIWs4D*|Ogf1uN?Hh)7M0)y{ z*1?`sgF+uLqDnyB`X$*PFLayI=FGDuM%LAA(>n$xNb&LS8O*0uzw#Wm(3pGx-3n6) z+LEt)ZS+D!+?&R&DHO95qk3=+z?|Fy^Z2>#!t(&hI+-I{4fU{@vb`BP+-Z)Z<0H>X zs)FXxw0E|jz8_+U-RQUwb*-7;K5p(XBd`;OSZPhl)9^& z@#J$2yggFEqeI=14_MO$dQ6yoi#ZBTkT0xjqt_JYqj1zj_(LE{de)tL&b^ll!vw>0 zHC}N#9k$A@zw=jSYz*hlU!YMY)4L+h0j;__RQ$K|H_P#z%<__A zkmJh{bgt_B{ml5p$mf9!RI}=7R?RUgv-k}{Y6Xm#q8NEop7@5xvr4s*%F2}j3)62N zH8#0XDjGY}4hHeYp_~||!rac=w1%|Dj$XLb%0H+}Pq^_ejHAjD9UX0!{aKr&;a6U@ zYdBKRjWZA^V4`YBgLO)8kD|~c z(DSarbDFF$10EkzBNJv$NyIRf1EtfW@xkH3WKjmIRm+c(9~CK}nLAzAsXmaNnIt>i za_@4}$79M5p6asTPHiy09+5ndZ51sSj3_RaD|MnPMOk=h#VJ{CL1!dvKryyMPr{CK z({*oaBxy{xz^)-x18whq=w5c%$2ipHuGQCrog*NsgKX**Y=>v|IoQ%d@R52t_oAHiF`77RKXdB#hI^Pfam_Qq;v43vt0WR)%sUE`1=pC zAz^r$4-#|;DC}!Vhrb!#Dq6%np62HC+1{3;EN{|5(TL?$26l0B5s+V|9n9^e^tSIQ zHv%1S1j_k!pj#19n3ownZGKCmOL5EFihJWA4!?xZTF4s3sZ?3P4XNR&1g|i|iFW(h z>x3Rf6pyisg(*6RprN&fD$dA-R{v@hVGr~!1-kD{xqZa|PF%bJi#Hk#fdVF_QVGuP z-*HVB05}05kXw7{HKQdUMEkLB2FC>qjwYbPmQN6oxg3~rnK{Eh7+g5G~r5*s8o(@Dk7+QIZ1nvHTyIeu zZHXZWU#ESBkoQA^l5qnM)L13nE9Iqq+H@6jI%a>S0v(CX510>nheks8X~Q#qw!A_A zLQ>7%Tr*BBIe+bI(C9UBQc_xnr2>D8)r z{Fl7u)`m}w4(~okRjz5YF;x*OP35rXxKPh6)x^rxw9RY|n#|N3y`szd`rWi?gwNF@ zOlGpxq}(I0Y{3=^{%KLn@|H^yuZo9&KuTvH1*39rnP|LjuYK~;ticrA=IgiYIXnq_ zSF9d(r}1}`vGT|K;D%|OGr>L_4|`G{vKRk^*t|gayvc5Y`^^^r3leCNhGc$~VuPM# z3AKGd-F0F7Eqloh-MPiPXNJH~LI^;<=mDmUQlJBlm-s6W|Ed}=Z9H}m7!?=>q*t)b zBBgiDCy*d0pY*R-tb+hD)>QQp>@i#vkQfYr=R=Z# zR0SBC2J=8f-~-}=`hPcdl~b!y9^}h#!oiJ$#+h`Dp|tRkN~3pHv9m|qMwXt+{~)CH zZCCNFycSl1Q!Phfg^%?s^stVXyJQCiw=-FKmNa_lI6pUvEj31-|9o-Vt#+?jrnttU zP82i6U8J+BZ)UP{Pi)EFl(BAxDS-y?=Ndh0AZ{@|QbVTwU=8hutr*}fU zDN*-^?Ttq9zp)FD6xN7*ZFQv5_X`!9s(ZDnYuWx_%xTNEc;87Kk>hu3QwkiBG zLr>qRE;zsfZdBhmGmM}m4bXZlTI&3gdbYOdqsll_r=@Q~r^gHJdRY8>sXCA~#<7lF zLBJ5KYC!;APTn;;zXt?nP*!Px)s@e=ukr1WAlThpKoXezC~h(8kRUjY#xF6E#6^S| zLJ;UIzsV3?I1n;cN&|)<^*0eqlmm?E3=nOEsQeN@fU(CMfT*++fEK7N{4bj{T@s?0 zsT0F#+NVMrT2}d$q~{!DQ)xQ^ZgChv+}&-_ISJw1ZkgoRc|FR*&Dp{a&bnf#KiP!V zhhGerK#$sn4Ej<`C^_;OKs&gfMK;fTMnHqTc1C+al+8`ep`7ebd^z9bB++M$2c6WMrc8>{Ak5ZzvcS zz~&@hwbi8;c%c?CBDqSOMVwF{Np=#s)#{)Dll%HLS%E*y#^tpNWmyWUO^GP2B6~g^ z%^0AkqPenxOol$}_94I}-rcK~yYtSNkWc*xvgCkF{G3Meq;`^sb>DTnd|o4?a4Tbs zt*Aa+f_kE6XsY4DAbE(>gW+%6a~$EXUp#+EWohnuw`7nh%OW`|W@56gns8rN)r&5~ z=3Xt|Vft4=bDfy1IJW`8$KQQkK!_G?HP&wQx#=}{1BR3vzBca{+Dy^V(A*O!SPQhi zd0JmL#wlcX=BqVwnT$2GO2h5ZbrARL=%@}Gt`Jy|OQ7H9xEA9gSh?O4a)lC-z*~1w z?maIRW?{z!FlVB{$TM(D#01|_YDlnBo3&jE%wM}TWmy`l&{S=5euybOi7Y`uZIiYz z%Yx>7u-BQ8V3!89z^++RdfZ~?yZ}Kwj4FcYovhuv)Cc^PTESQsg1vYLG((JRH*bGN zB^Qe1dy!UJ{hW0h!4MkVSNAX?Ik3)b#RAl|DdH>h9}w_|%JfS3_{(6%gViuafPw&E zRldB2L1Y(F3-%Tu2Xnmea&FUxF#&OZ--Yg%{L#nxjX#~%sf9m2?Pq+?ecM{b>v9_?!LV@XWzDC?_ivpwz>!Ou>)cHztaoCEapNUO|i_q~H4K*ym z!E{9)x;5PTthZqATS|$iw3TdPSmZ7 zgP4N%!Vz#;G(938Q%cV5$dMR>!!?|ttd}DM{xrI?zxe(Z#q$J?o(N~9?ry=tbdE0O zM@h<`k;t8BZt?=-skjI(wv*^{a#k76tgju>v*VV|_lBmt44bY=xMiEtf@!UvFD$@< z=551g=cK06-6&fZEvx)a6V!Qg*tHJi#yKks-v&rpi7G7BaK1oqf7^NMK=Gs%+EC1# z*#V8~c5JE8;4B!nBVfWo1-Ga?3(IjcqVS_j#$%glrYt@p4;%OJmdtTbZ}32&NZTh|}8b%dX>&HJX|RRyPg|;l`+}f;34C zaou8IofvMnvBi*84#=7koY9Z)7DWJ9wFb1xW{o5q>Y1ngkmAQGO0bmuG2s5NWsj6v zIQXNd^=|Sk8sB*yzlh4rL%=^~!8KBfWRfg#=Z(7MEeb$j#W|fqiC`E_`<>< zZ!9D|yn!KfI3x>YamJ~=nXLD`!9ulJDO7pm&8I#&3M%8Z=svOJi8^PihPwLn?ZD`} zGPMnhtAx*|Zgdo;3Mj~-YQ@H#&TlF>PVtLzj8d={I(JEcV4_x1D) zy?A0a_R&b)%Q?`UI)5k0d*qx>jTyguGJJzU`#q&+vtc~$A!CEg=9O4mC45p1r@pMo6gP?$soco=MBGd@D1x6w+fAcKTV;FiL+n>^) z*23n$oO_j*;!OBFw=L|4MH2gCX#qc#(Fye%22vq*yrNdj3lBDsnZ>@GOzP4E>jPMAZf zg3||n+9&^XX%2#9q+sp4O=crOxLu_NwnGFp?h}i?2}9c=b|idr3NLB+QG%5#B#jiN zz3^WK%6*xxbk5I4Z~OMGh>ls4rT}Ll63nxAg*owQ3wl|`1^t zGb^Noo2IHO3NwYh({U$#L+(C#?~8GNDirfZ@_L%OlF*jlk7vB zGaeCM5}dd$h44US9gJ^JV!F^CpD*CnPum(Yp}kneOvnHqJ)>@hJRE=jJ?_vJKF32j>P%-pw+ZlRXl#2KL zpvzVFmsgY$9_lcsLiL)x%n2iE2aAG2600tUQd|teU=17;R1s-m8FZ7{3Bfr5>AQvs zcr8}TMZSW)g`*6vwA!G@y!7y5skfEfgx^i~a_2K529J)a-ZC{#GFmc|W1+q2nim$9 zAU^1GU{N2tXbM0r*h{n>U$mPguAeSYer56qnJ1lvYY9VHO8``#+xpf(T>EY(# zR%AWPZ?0c%+>x%ri3D-Xg1seqBpu3fyRQdNv6|6p5-zFVR6h!1cP=4U4Is^Z6AEeZ z-U(%EYfr0^j`V7~yGPP_-Fq~Ny_GJR)XfimbM!(LUD}gCBj|#|ly0i>!pNZRMnzz5 zW;d{ETQuYFN@!nss6X{BmE4bzun~VfGhbG6eqT+2sp zL$g^AcRocIbY%LbC~wKVGZcI}e3dYng@-QHRN;__>626)ne3^Xv^R6wB~k7{$yB)e z6V-K5s2nBt#FMNY0iLmHoJRTdoMs-{?qHoJJ;~Wn!kXktpeN#p8Z16zox27mT3C^B zt}75sYECO?P?H}b|7OF-QJC0@MQ`qLb~CHF+J;?M;$q!A8DBrunEHvo$(pA%Jjs&x zC_z%T>O*VeT7S5}twne0(&BJX3iaMBk(nyVs_>Oga8)gW2p^0Hs)xYu0p7{4Rt7AL zL?lSsumgb)sN?lrz$ryl0(u!Lfou{6P;~m$&45yX1dYyA1BFc>;)S(HuYrL3b`JD_ zN*xe9z)d{p*kCe(!;0O9VsSHDw1^lZdk(U$vbPh>nAJ9m=gssdE= z)*Yj_!k+_D=+yXLdr^s0nJy@|-Z-k^Cr{2izdyxDQf@SwBs2e3M*D(3tEWQjYC-$#S(aL4}-LCS)TY;2KiQ2etR)$oTI`Om;KC^?kUya zApLniS+$K_3B+sa1O8P35BCuEu*Z0lpSeE6Q4gFUTf3)n#SDVFxZzcGd{c>iq<=5?Ci3pg>hoP zIL=Y!SRXq`H(q)4p}rBfd1_k+)0dvaU1i^IV^6W8Sfgx_iC2~$8~06>PKKk0v!eX0 z#NC~Qi&RLF1EKiv?VDMx;bN7$z1I5UA5s+DQI&4JrcZFb;!2@umA;42&H;70{2m&Ghs~_bbj`#0E z?e$s-vu9aEya1i^${fStwiy1FF* zvV*tq$X`7&|LjEIf5R33A7=U2(~bqu1}I9e@%@2>22V9+d|bu)iOL+Mh#B5{0{olR_Rc<)37^ISe-0BF!?_aH)iyk0BS7*PPj^Oua z|L#x?g1$6Ft;7;1xTAz_V6a9X_C1m7oy)4-5xqVqK&38{!0#KjWO^MSB`wGoTENAV z&*=b413O6OuW|ZB}&)nJ?>2dS_(mdTqy-E%;PFnIP@Go{KnJ z_BDy^ZKAxi05kLcpgG+GSnr`m7P(d@^n+u}CsHRyVatSk zN%@+X3}}k_Hw-NGFBtk4ga22?50tv4XzHO2uRRY`c5?XHADg=4l3S#Xp%|V6Symm| zXDW@;s|nPRZ_(VbHS?1S*g;B~hiW#EFZXQ#)qS0dKnHT`Q3imLMic|-9VaC?13Bae z5>yK0kc>0|rVM|xS7Hx=kx$b|VNM)1-sY@dgLxaJGhFrDE=2Z$e(FaYfI>(9>LcxJ z0Ag`m>7Pi@6o4zv5@0EEqX@`_G#nQwJ`mLcrr{Q_9Czju|8!G{a{y+csnd=2Z0*ra zyH%HCAisK8*FCF>Ad|LXIBV8X!e+_nn0D^J1~V6q1nmQGPW|VWrd9mPQP;N6p-s+= zO(BUX*pQ(j{Pv+4=ew_L1b#M{ z;KxVfGYYzjcolqDk_uvf%FY8hyMO(Wb9IQxUGI;i|J>AY=0!!ftQ#Xwn`cg?PDno~ zz2*e-Mg)49!S4W={Ga>14%aD%srIyUO$e59dhycMFq}$#S!vhV!rbY)ywdalpO}8ogI0go1~GMIW|6wL^CQv?HPip>)}UVR9o;hxe@?y$R%wg^A|suR{yz z6>eAtLx^k>pL>0%;Qb^K5}lT*_6m=coB=N|XZmdTtxNWXS| zJ~H04n&K+5lbKg}Aa$`JL%G zL+7XlM%|3=5fr(V$udo-*h$4)U(7l7-%GXC1td5)B6@C7$19 zFM~KQ%aa=Idn_15tvlAakpF!Ib*Q4_w^6HBxfuIJ7+!q!zh9VXcz%1h+O#Q3e}Nq&w)v`)LVLE02;DQ=!6G2VW)% zVNC+F0LrpUz+|@o&efduIFxL z<=iS-K6){9)Ofa_;=vksC?%^EqUTMuFrsqMYnGwh4D_9rx>YVbIA^Pwe?v;#^KQBj zjeLk=9%XRVlh)m?;o3W*%B7zA^MJ(B<44Qst{wF7W)mORl&d+dClZ+1 zT~a{1FH7c^HglM%<+-qNUZ%JPrQO-%YpBdy87`dzAC^1_PrjQd?1M_5zJa1t?bnsj z+2~>a)O2v2nj(b?)$)t1D+?(~_o@Yo56B{?-r5D7b1-*g+Od16WGIm46hozQ?lLhs z?1I{VlWrqMbrf@Pu|JUHU`B=ZXsdUq__b@m_b(vj0C>}Ao}_|^4;{K?-uEWts; zAC~tnTaFr2-5X-!*_^G;s9i@WZCLg~ba$Y>td+7(m2*W66}2RZ&K0MF!YkrkXeCTZ zl0TVnW}w@d^OAi9f-^-nqU|Z7yhN-YE9~EFCHOprkm>|68OyQ+UkIucSTjg~I#X|Y zsv7fMv|{qQnH@#ay12Wd*sRizTpvk=+2at>@8A>~Gb z$dur0U{uK1UBKcz>458ip(O!?K<}*u;K=~Fk5g^PmprKOEwJYWZ3u{10h{z+ygMH% zeT$O#pSs)J9!wBG>#||OqOK;WJF`BswXIP%IK-0Cm^}yfnSsKTRy~j)9vApqpw=7% z6r{uDS6!~}skxiZ$$e60vit7ei1f=JWo0zfGx{9gXU9 zQh1pnfrca!^mr~1w^uXI`*f16WRT@aFo;b=pqj*l`Nk#cjwRyU&+9YcL=mFv)aI6u z1hQI%6S|{zil2h{8TP7Sx8K&z^TreH+C#;`qS}m{971f-#2WvF8rORv=WVah_N-BD z#@7~DG9HPA_=B2;XNkt7&twaI()Wo48xvc1-xc&1%Y20pYeCFm)riPQAe~`MhChS#Iht7s0ZMMOqR zL-o-0T54u19>h;T-PZE5rml@KS zcpLiXJC9uCcO720cT9tgr|w5;r!Q0c5)(7V@QKFjpMBNP6$Hkg=CL2sltX>CwE*wn2n7N?)ym5e#M7FI^Wj zVqep}VP25F#y7lC2Oe+4#cl?&D-KA1kU1c|Y{FAs zl!f}6r%WY>d}V{q*mUpj{%v)?%_wa6A=(W|RnOy-*JAN18A@sBC9zLT>i>yoYv~a} z8xfKc3c%LWgWTKnMhP4A`jrT0PUjP*+8FN`X(>Vck8khdcS7|<(ELb^AKO!~^ym^x zj2S7myrB@D_raLoLyRoAQqu5rYN0T49*j@=ESNg6=(gPp&#qi5eL92hXs9Z`^GZCr zvr88RPN^D>r}j`oUS)~FQ4yCrz5zJ}qODdYAI zi1ZvYv$p!c+wZ~Q<@_Vfo@nRB^s%x#f>d4dKHcQkokJ|`y%5Ju}vulcBcfq zFoE4gtLf7_Cw%FMXHIzCaVK4xv-HW!1yHwyeuKKn`!{q2BzFB@ zr#SU2lNHkLvuGwaWhHr}$h%F=8db?!dhS&@&u}j)+*f(fiS;;n>UxK)+s=E~W^DyM zp6hyM!s)Td;jtBQK{GBX4^2*9hb~y2pmZZ!Ph+b3s9^fY^30-5W)$bW%Kdl)87*%T zBl^^{6d#&rRT6d;T`bA8xAl|M;tn6M#(G(ot4v-joz+llABl>v4-8$IPue#QMag&wHl~U&6jo&pa~c zzd94!K&4f#%tdqHKk&0`z#-MJu2dKyBekaQ0?J`D;vZ-^}@ihklI;GVg7E9k`Aq_ zB5#i06mEr?-He{)O7MjJ4+X*AFZd0mDZ~jB1<#cvUSxZ$)4mYh(HF#GN*8h5Yz*hD zxlB(=TD{|K0m{`p(wkp+LMNW6G3R(+Otp8*()%@yMU~qK+r#=w>x<2pIoYOk_Bscr z_kvl;NKhHm#m_UTE8|Ta|JYb63EmI#_UZX+T$~d|b_L%CS*;eoFH-U_)f{9^bi@eq zO1&TEKsnm9^yhxiI^;=$vO^l@^xfMd34;0z;$*K@I;UR`*OYy*)dRLWn-wO`cQ(NA zp~-GWr2>a@M+V6ImKg7`dw8RDxO~dgQ_!KNrF_^YI!HAj9l>@I>r{Di=u}bE6oJj$ z)T4fgqWJwr-}2HiC@tx#V_s}F(&d88$QON5e(OmmS-mU3E zQsZ84qR$bYIOS9vjp#3{)U_>c`Xy|F9ZXMpu2hN*CB$Cw`ut` zbT4TRWhLdluQSj|4hKc zA!vG1RDBz?0NLHF+W$v?mzC9C^!R>#)R3EiYoAza++D(+Sy7fm&$q_ig+$=&ml2+Ji(2_RnjPY zws>2ztVD48ooX&MZbRg%GHe|J{@4Wzc;&zE26&l*0SX)SGO^I(2RfoSf)9f+&nj;H zPWq+jCq7JmfO5}mWG8*@EtPLNGVgRJbY+8`5+(%(S=xpf}w8FH?JX+icaN=O0_-IAc7s!KY|eC z$@qm&`jkQs4T#E`t6JgTpbCQiRG3me|&>CfQ2 zXbBGV(bQFnlJMkBjO2-MNvqf8)5>1abYN7fM%vwqDZ&A+|i-;-+cx`3BrnqmSj7e zA!oE&VcpBTk%leP(w{tcQnm%+3e2D(9&uo9$_Fi)Nf)0DP}h-E~0RFi`hq?QJ}l)xt)Qe#$_1b{3Pvl z%(e4$g1_HW2X!Jr8WMyzSDG4yuo>mf#_{uV8%%~rt%G!neF{P=%BNqPZ`9v@Fv(rx zGexQ0iwalwT%qJ0@_{I`Os$Y2L3Ml5pWtR$K%16iq0Q`3KcLDdBeFM$u;m3qke>+Z1R{jA` zeBnMEEHlDA5OG-SI{z<-SIkdy!KVxpO?yZXDaHm8bbtI3d=D~4`UG(JVxlfw@TO#`VQiMXC1z}@5m#)=y@`-wpYCVkRTr^p49o}Uujm|u zfgPBJa7)htW9=j#Tv>zg-iy}E%2D5XDnob3D(BfoDJqRk%x*!v#nY&=GBLI|6pcSJ zq3n!65S$zfY|v}~TKv%+{s58e+0#i5FJ(N6OWi9sx>AYf{hJEriFX$C;nx^NkOC0| zmNnm({^^2%umvXbRSSk-1pfqNrrV-gMyw9JTYCd9d@U7h`E2cUIh8c3-quCHfbbTL zb6$YSt0$`zbegrgX(3t_f%}H5;0Nb+g5`*?Vprrgn~bc;-`+m(2Z(=-0$D3wmcEcd zP0_Ib(tg?)d1xgB?B&Mx@+25{u*N$}Kc9a~f9s}`@Oj-yb#tOsh-18&;$B4;hFI9v z2mQ^LBJ{~8$`ZWg`w|X0EG?PRKi7)i*U3o^JV*>$B~D;hdIC)kDM*2m zlhCv{CvrLL;B-}ldbjScp{}lC0TRSW4v4%H&{dB!`!^_);wG8GAIJd>c#=91vT*j? zCMa{L<&Se1(*zf2-APCu1uh3KKBWy;xa6j?vk9!Kw5jOnIP1FvGw9MnW>~0>zJ>rf zbL_%&@ELf_i%WryVPOI4L`=_A0C??I zOI~m!6*CL6)k@#XeS6s?UHOcT4%kin!%m7N$I9%pOPL~zF0HF2WspWd7V2aX(DHmR z?>bijvtIjhdyvg1>-x%DoPZ{fN6lnX!tA~Mrzod-eYDLar!5z*r!t$4j&xEv^_7y- zZPgi<(HoJ&ZZts_;mbSuaThGKY=11`VSaM^Ua#-*yHiHv=_B;*cdJH2@2stL(zr>{ z!osEl6^wvF*K9B3T>Yd2$}9aP5vKMl9Dj6t18gE7{cZQ%|GrW7_^CR~srvh+(%pg9 z>>a|xzR$GrEFHr}R{bpMUlPOmdx`pLdZFv5#EN9P$2_1*O2CzNSns%I@m_&Z<^p|? z%4Rn%I+oxRb^7q^CHcc!%<@422b+3|A;P64+mA-cr`5UI? zCz||o!S)>s^XVByu*W;k5F<%S95u#eammSDG~V!1$eQ4(*)8ek6F8m*u+x~-40yN0 zxOh8|BkKVYd(!_iqZNT#NRYwwMJ2!PXP8Tnvp~OfBt`OSia5M2k#SMC|G$Eke~GjI z{NU520NL5Y=QoOZt45!V%y+B#m-4WiLqlEL3-$b1Z2^r{Wz)0F+BSB<&Wfs^M|jBA+i)B~4m z7_fIj@!rvHe)A}qy%O0r386KieVv7)Uyz#Jmc)I>aL3~DNhW&@4=;Le>i!uH=h&+2j<(Q z3u0hVU6zYb4$$n_j-ZH?W!AN{HAZ_nXwU2z1?uj5S;jp4m|XE>AH|AAlqPkiLUsK> z@;-Xok5SLd9wQAeJb4FW$CX-VcdAHr-qg5Br*?Wf{x3f?@Ru@iMXH~UQr;eF@#wIJ z`Yy_J^_x8|t%4=2`#V@qR#kZ(yt%OD;HI~X`-Evu;7%DhfknTOnW#S_c+0NYJnm>} z^4N}Z;+U$nj$a=9hD7G>bCY24jF4Rqqa5<7jAwPtUQ>ug#;mfF#G&;2^+75WsCWea z-j%=$F`CSPlE9!gRBz(PueTi>|E^)!BcXcmL{q?xsBV%z$EaG4VF&k8h!s`EGG$5- z3J!W|F+LrM()cz|_GXKa@diHI`hz%8eY> zec={RyB9oVj>lkZ#O6MLbI^4Qn#1_2W$#b9t1P#dk{&v2!||Cuc(KNIONlvV5uIRT zrOt}=tSrVuplu=Sx5Dh9S?dUwKt{JD7$Hcj8yQ)!k)*->JGjR!t6 zF{7>c;Y4}{QimJLiCny@0=>EK>lX2SHedo>E~FeWNYrSKm$PtB7Y3}nKS_F~IP0ec z#u!X-WH*AvNj4h3SyzD8FDt&IDJpPy9k3pJpPgc%d6KV$iD(nOX*UXs0N=l>XdtaN z@%2kV`qk0e^m)hea6}MOB54QX-)1d=mEA?GpF{q)e~65K+N`}xHdgYJf6L!fln zB2St&s=$LWe)@Q&_ur(sR3u%dJNvX$GRM zA1cx#nM93pRO-GQZcR|=MSYJ*qju@yJ-hbU)sH`R8%fD<;^O7lQ={zxHP$tT8aLEi z*nzfKah$!e`b0vwt3_kEc33MwJ)m#Bqx?i3VWj)SAHppM5Q#tfzuVwi5XEGBQ$bx_ zm3Sea@G=%s-JMYwG+lQvx+-F8K`o>i5au>C4VlRRSzl+?D-;)pvb5Bwo>s@_BEg^r zdS`l!C{);JY5C)}&VKikvSBy15!rXa#(SK5Q`tb?B#waIxUYq;o%B46yRErln!YJw z41tLVS%Qio{^g?-Ry?nM<@02T#JJ>M^`Fl}wDNyqV= zUS%4rn{Xz;^xwJGKx)Cwm$3Ux(@9yIIK6SoQQb#v?+9(QO^UXl`@|}Q>t<7K`DypU zI}faPwa+rSL@nIJ^%Co`$ICG>rB;XKOU>RR$(r%p6dxu*DXAC=rfDSe0b_5h9RKf4 zaiQPbKZ#?^n20W8~Q4|^vM)ti+8a0h_Z8vxxWr$TXokUJFh{pmicXr4pFjP~~n+J(hY}H$X1+f!vyGwatUqyjsGX)d; zg2s&wHx7XjXBDQ)Q7F+VNvooT*vbW)$;goA!!GOQyB9uN@7O;k#BA0!#5k~-7pWG z)nOjOz&J%t)MVR4)Q?zkm)ZBFGBNO-UCEMzbUs9``Dy@V$6B36@?!w)MhpLjJY_Evo|s4P7d0Qhr&t( z64MiGCZ(5^c#1s9n`ZsK%a*==0+!@4*}xp)lu{cu4u}XDpeH>}Pwg@!wiA>K(|coY zI!#j*29`BQNXM1zc;2y4Ly{fNzm;DHv5RRB2Ypv@a)p59s=$N8ZMNt|6eW*fJL!vs zWp>r{Jxxaa;I<`o3WHIqw$^3NkKQ)Y4$xq7$nGH4G1&X^+IisSWVpGUM{!whG^*wf zKJ8*4c8?b$ZHCu&yyR0@*W1~yOGkVBZ6@IvwoC@yiN{NA=SzgR7pq&fxsb3N`)}tb zV|ZN*bucA(ZB`GJ*eLGS1xPmN3GzQeVhW;l{aR8}J>0>Ttco`cH4#D6By$t3Bl`O`Zr_d}U2EMJX71Kk*Xt*O zL*X?il(jG32(2e1)S#j=jJhOBF)1k@L*EsIoG-9Qp`v2WYzW>~Qz~;NO2ojm z@lU+Q9%A;u^m6KaqLZv#H7paoS@%$edW#xYf(=^|Q7rjLVu0u5}FGZ~CQ&&Wqgv@ADZfU*acg>LL-hy0x zgN0g9Pt&1|vZh(`l(`3da~NMA#Tl;mSogyR2^FlB75?K+=knTQ^LQJ>`l*y+DlrWX zX^uG8K|0Gs$J4b%VYcYi!XrIHVy9!Gsm<122Sh2o$h03DU~=>|M|0Ps=-P6mYqGyO zNRSNSP^KUvw><2pAn}fN*;j(hlrdeh4(U!G@xEj3nL4Q|eNF5^hJ%hMaz^9-bdroP zTbzsIxk)$26AX&fI~7C6XJm*%m@d&8?#DA3TY8 zrwRLd0-7au<+~~1m<&$6#a^1|kDZ-oxX%B>$xrU9kd9ONZl#@zO=;T8#`fA;ZA~1z z(r>t<+K;n657fHW)h8=iYchJ;+8RG83HU^SL{uKzKXGgrfOT|_RT7^?QzF}qJ?>^< zgO1Zq=w4A#=$KjF_8^3H4Bl)SZxe9UwQ)^ydnFF`9f(>cYh&WVi-(ypiwgzzFBZS- z6VkK~-;k*}La^e!9x~9EWy#4A{`{U&{po|W#D~t(@HFSRW}fHZWj_Un@;z24e- zbq$Nma_fUY;tFKphCY9Wg9`om{a1Qr@APD+n9)YEU#fc=Na-L^V9Uje2|>h30DNl# z2D;@8ykT?tg>qwbzbe7QbNB}z^GI05&bT#?)=}B)aMInA1Ni(TZRH0rW1d|FY5NYN zd+}ZDM-zPkwnsxsy!AYqGqd$c;Iemk%cNb-rmn`@#9`hZoiIr{-u00dZR6k0Nbzhk zWL~w^*Pj|bd1sEzrwK3EXej+MUYf5W9YFDh$b`W=jxksBg%M1loyv&wkv?=p{>E2+ zC1jNkiq>+vIz^^Rd=&{)$$H^9)y)&WO^5+?!qa~t3Y+Xpm;Ab@+=aWH%CbF|xY-pE z-TbV0)FlitByOMxjnA!yO$Xm*QL~di({BX?&;Bv zdULf^CYJA1GF(by8c_S(rFdd%d82$SP&~c2Z|Dx!!S1jJ_8MB|pYsP3ZH2y%qKgS_ zI_XV#X3yzc<9!}I9r>94#6Y4@f8at6ZZXy+>1fBv=(AQ+=*|p!uKxwxq)Pe>%lLX3lR$k#&0sc){=ADd|o({6wesDvDJsY+s91Hq_ z3>jZ2+Y< zZG&%M1OTfbvjxJ-_4Rn5ZGoRz?$gG*S+0w+s&|WzD*Cs5{vfc@6(2()!q^;4ZHM+T zhGhYk%5RT9dK1W-L&W>!Qii&X(3zL%L}(f_hHk_dXNF66IUl-GNbxOl_6iHAVMGYQ z-bK3xZ3ruXeEa9|WU_7xVnV1`O;_O%8%Z7qGA=?nA%K6%tL4wulCn47weX^DIP7u1 zEi4)Os-rUoK`&Ew>oHrX>-pqCjRUqKWIp#K+lTY%vKiaywiUdf5^R$zf=fGZR0|?& z5l|1Q%8j#;kK}|@AdB>IUXKz`? z-~lsm0DM;f&$ey}WE&e-1Fq42z--pE-zvCVh%k=}sU6FIX2~ zg59y1`eREjce2FPON0^H;zL~1>3sGg3ni)wbrKu`Vlfng)fnkn_nHhP&kC&o( z>x?Ya7uZFB3d1)B(r!3L>?--1vL>Vx@L*^WB|n=WOP4_o!QE(SV@m@jBw;slV#?P6 zvY}B`RogO?|5m#{QR)DvU_d4AUEO9FA>u4IS@T9aj14c33pwVpuKoi4$zl0M0wHer za1o=YE&5WpTnYXgf6~4};Wx*U3-HBg68tYP+W154`vsp$`MIdlM+w0@_;|UPuHQ)w z8`^t>aU~7u=!Lz73*QpCHQOdEo$w6rU_sH7+#sH_^PfqzvQNpOab|k>zy+&=nM2xH z38dF>92a)=dsZslcj6)`IQ`g4uJ*ij}&-D%zJy}@Jp1HlWHg;f!9;lFqvc%&ABKJ{j za4-CQZiu_o%SHqenJZ9vAW_miLmur0n9iCb9y&Nb^V{`tH>#m`%;68ED=aHHDtKk!|T>QU$#NQ>Kp1iYdTN_ z9g+y5ZWiO@o|XCX`tXA`k0rZW>H9-&NdR4JOCk!yGb2syj82#VrgZiO4~|kP)b=f<{;8QP4{q zzt~x*-v@xA-~qX5Ezr#JzS%rW`}XqBX7UbK7eAXNEl#%*g33(fZUlDP}{w0Ot3hIxw zLEG6+sAC@LM4~gMWEGa5WGNnwQ>UmekUT&7~J{t!{$y@-Bl>%Ljb@5%z2 zRsO5lFQo=q*`iCf=#YPVl%5#qSNtpAye;HaU`OehFQNeO#V#MLI|gE!g$p$|TAXzStmR0`@<#=(zuPvsMnAwb9u%$(kV;(FREzwo#&gXxjg zJMlt9@DoQ+`vJ42dKmx>;10M&cYu`hK*j=b2T3h-7pbj)ST_$t7mvH&7oYDSy|FMu z{EyW>%~{e~u>>8=D|Rm5S5dQTCB{12klLGXSnA3^Ld#a+HcA|UYaX~X#V`lkq&C{V zw2&)+UUCFLXTYb2KvKI_1N#0LI}|s`ZFL1fXJz0ePf-O*+Qz9NZHhakfc+Y}bi14{ z6d5Aif_FLq+VeLUex?16Evt)ykgbDHSssd z7|VF^H$?(f7{96Yzq)#HsYDnqI|FK&H<$N&%`07!v7$NsEV08B{9iq6~XkFgB z``rbT;co!Cd||%w=3R2-M(9vbgc!VmT+tz`^kLu43sK6XMa^gxX&iYH%i@TqrFk&0 zUmhjif0K!+i~NLXxBcu}&S0(OAJ0*~sOu~iBmgRVR)6QKbbsiI2TrsjXZmWbwms;q ztT~2^xVE{mHA3E$3yrpR)gY%8BW?*7{s?{=5iznan8o7-WICqCRJT6-Kuf+@7Qume z=j&Xz^5evo&4gZ=QLi$SZQX`r$*-V_f>K!*hZ3FS*Evi1bTn44(})otG>qw+P95qK z^mPvzefRPoZPKs%_IYXeCHT2YZNd#aQwOZRd@$`)Q(8@OrBI{PhI0{r?J4^yMk;@QuOm@W z)fB6pkm-Z->Ia{Pn@}AWTX?Dj{PO&_#581teVlY0cX{zdt=cVX(FCAsPEJ55i!-l> zxqRP_*%&Juwu72Dj;a+!`bK4f8M@#=T00h>?aF>Pw*b#59O`nC*4N!2J^vMNLpE_K zQ}0u>piDGA-@=8sNTw!jd3vd*$;{r?sX^kFo#fhE-ZY+WGKqo?gTZF^%;JGnGxT== zdN|#VY-{b%t-Vh2L&y00U=4B`^v*E2+dg7veng?|+MLHju(N>?X~40xpO= zPe$p|l0>RZ8K~ zx!q90hYbOt?Z><8Y&RJC00V99ugU%2K0M`jiYGE~df-r-g+$E<4o&RS8FLsrf>Y;s zvM=o^qN|;CvSQ^w@iY4kaKHNb%#~N72J}}J{(zaS3SgZ6a|r@KFqK?igt(8%yL5GT z)7`eiN16niu0E@-u+wY?3fm|RT$TYP<%WcS3q%J@=R!G=?WbpJIXCMLko*&WMqu8b z4GTDW)BZV*dcE@Y&eH;VnQ_aQl^uFa_xb$fWH|txd3Kb{xz`=F!t1j(IOtuS9VJw)eY4FS=LO)ZJK6))hhL4s}Xvy*JGJ zLV7Ru>%_kt&k}Nb{9{-~^uKk^lm=y#wqXK_9i}yqY4P-91)XL-aryDCD^`A(+r!)^ z@`_zw=6%L8GT8V)3grRc(thk&3*ai^s=!6HqhUVe*Led~Z~J$nl1@6-g8JWb1Fn(+ z6es()W-6P$8e_M9e~948--Po{IJF0*%!_3^rwdz>D%p*J2T3&anMJ;@LKXA)lBe5d zKr3^h7fEcFi`lBTPkQ3M;$?;pa@dv;sw}Z_GSkyd*IkYG<04FYFDmis^S&Xn;KVUU z{(w>4letAITb8~rf@Axaj+7qg?2}2|;4!uj_QxyVW%FWi{wF;*Fs&y~#E zRY8kM9k_Z5HOYiWto=64v3l)qv+~Hg&iJ|W{+#~}2>^JakphsRH-l=F{c>9Vg>ln3 z!?;2OjD8j$Dpe(f48)@7LVv&*0#wgCRP{T*e5DugFVc}Js4chN&`J@QyCGohhUiRq zy2!1x5t~}yWlw{t+77AW(qraFOSePLsbrgC)02>dHnrtTO@tgj;C zIzlp`IHax;PF_VT;Elu)jI>f=dCHe+U>gCqqag<$l!559Av;H5xlF9f$ZWwOFV@W( zo$;a=T=3Hsj*?MyVRVeInomBo4E45g&C~!9=qB^F1P9kqPD|ej)NG4^VD?@l?p>AC zCvC>C$EUE9B2$0i;LH-4ovNEl8H07wR$&B^bW)0ez33h%6B1Q_wFG;-*zjxbY_abo z7a-*aKh>ZjY3^wXmGt92zXS+qNyG0MRD4$S4A?^?l*hpZ^uGaOuCGO} zkwAZT$v_xfV)_Mj76rctMCF;H?W*9fy=ZR0>`dT83ZQQ;b<=^P2BA~{@HOBEjJfnJ zivlkc5I$DGYWokED&XXY!VKULlOHeiuzN4)OWBo3x#Bx@XZ?3)qiu zJcB=z1}M~os`61PaOX3p4N*P_e59Stxf1OZCr*yb^+j~^U$-&(Z$?^*?=JwkI|rGT zDy>yw){cY$sNNqi)zHJ^kY&Ix{ri|i*Q~98LklmXfCE4Ps+MGONG;dOHU6z6Pz?72 z209q`-*onWK`j5>5P+yX9#`>rev-s7996JRdKV1(X4dqq6;US9Op;9rI2_YJibkBG z3kCoxmcQ$qVO<_jx+ZO2-`Ren$oVzSUfdKosOGGMP@pY<5Wh$|jQ?SBFH-LS=e)@#^U?(%?7IL81u8Y5wG%+S zjpyLr_Yo)Ok5VbST&eDq1O~dHH}6YCMa1YSOp9hJ#W%8uZ^)IVxKV;k96re6@oNMr z&utei4ZwRmQwr$;yMH3A|8hi~a_&hcuOg)QhEgqL0G>}+Y^!v)X|$dPRMO?*QgoLp z*Q8zKf+D5MiRpaBDn{+G$t3F*Hob27T`=PLv0Si2O?Sr!tgKExdTIh;4A3ipkWL_Z z>upn8nQ)>`YBrtr2Q$ZAwv<5g*n>GCQ+^86>0Muo+~*(hT1+m;EK-R&zFox~l_+x% zc#~Ocx9EIOI#`Yccwg`<>Mp~8kuS(d~TTTSqUU=*J{bI)}$Z=3O=h90GQ=^06)Ut>kDDck(! z(+3;}BHI3;pL+eu5<~Q7XLY8^4-Z|}@KVugPM_90HIh3eA$s+GDIy`61|C(#7SVH= z!?t<)WJW^eyKJTOr_Jv=7B0kuvO@~wfjCtPQ0Pl>D^N zupX9j`W!l#71}!UAzo=qFJY^9ycsTf2`FQ<*xx%)>bsVVW;V96e|7rY@(s$m(sIOH zNgt*5>P8!)cPsB3=2xu(!dbWMdsV%?1Y0o?sQB(PB+jq{`XQ0IFDv)J**W=0p|!2I zr!89J@+es30HO3Eud*0?Qr3K#n&)DKD(sJhYF|G?S zO3HOFxm)ls^Ai`9P~9s9G-a{siq6P_8S9W&>@Z2a-^B>QHh3cpsDttSFfQgEej_121-q z=0De zJh7t5)_>anUlXs^l;|cY@DS)5T@m#|=x-y^@$WpJ0a4A!l|LV-cWl>1KVV#EX(1Qt zlerM|7?S$){(alr!#wWsEK_+3ApAKx2?d^_%USljgdzj|`H_;#*oob8P<}8W zzKPtzq$$2%p9jKmAZM^kWF>l#=_{~#PkR(aqz{T@b)uw9#%PeDhD4(KM<`@q6F86r zP8Zx`S_r^s3Q#$<`(N=W_HtZnI)Y^SN;A?A0y}pa-X{*l>;2Z2! zdqTZdpR-1mW$j0`pfs`UlQLVr-I}s2=)_>IflMICk=rQBPLE&#E?%%qcQqswV1`mx z$M-qgzt0wqG))@j2v!GZJjgPg`dVLEM?`sXaSY`ZuFbV;?++64!g$W3^}%Ii&B+ zY6w2M%5#Fok)pO(}u(BK(yHwo|WDAiGAz zEwzPLv0t47zD`Z)@L-Snr@NEE+_-naIPdj=q=HNO++@uS8fP~zQ8XD{{SEiz)g<^+ z#8Fzs#KLJjIxJW)wqYHlt-Isx-yTrbQ?`)O27W=e=H5F8o8~fISK*(1_S%=toGi*I zPtUVy+E(|ujb|1W9j?yvG-d+)O&H`IfUdT+bSIq$E}|83h}{#8=o$3Srs$ep`LwJ9+QPXSuz9MF{@W4a=_&KSY9x$uCnE zJFodr17_ zHKl93nw;A|&)}i|ob#Q6<7QVJE_(VYl@po;=%cFded0bgqKfeL<-|DB$P z+acj$Y6cS@lrXHKNV46}@FL(}^7Z%KbHV>#?dbp6Pt42sY=~JGx}Dkue(u!E%Sp@! zLHw$=1NIKAcd%s%6ek5$eE9$t6%%~iDH?d72Vd}~(~G0du_SH}n{K&|>WI>y4|U5} zlQl{0BJxOO6j^XZs}1VxSY5CCQ_Fw3FpZUfGag&CCfNVItU1bNE`A6rSR(8N5Kpa; zlAgs)hJ+0%*Fhv(E-qX~&Xbyu3QT;{!Usz^zmQnO^5ZT64)xz(X4ax7?3OF%D**in z$otRk%3aA9c-O{w@DhEqTIS!zE8UbzlNHT9n*FW9=;dWsmphaJGQFJ2Sd_N&0{iJe ztoUHU?ik`+`q-tznkFRY^;%7q`?BJ)TmPuz_GJJJOhwh7wk^TI6k69b&6?+xq1!4k zDaTXv7A}Yy=ArUAT!u&SqV`pQ)iLhvD@||+R$?C^ADj^6q3nTD@X6s8S0VxNRzCTXXqBYgWbQFIG)IM4xpQY3#Y-DuLmICgiwiBWD<=F6ZPeWlR%@5g7OI6F- z{fk&h)M%j!aYDp91Hs=r!*Q5u-{CI~*kpqObh%TkuKQX|&BqV(a2PIfY;Exu*E#!I zIkq(uCpsMtg%mtf%5lmYBf^$0oFcBqYFU;G+{_DyibpE;Opx+U30}uJ8eRCdOhE?x zA$>HuOPA8hgD??}QqshXOsx`IJy;dKk^uw>=M>$x2CXnyi2;xF^lr+gJnE0p->(sy z9uqLmAtDf*U{DpVlmvWnQ3hrVqgzShGq!7VYw{~#pAwPx``B>{)-p2srj8CO9EzG` z)5D$ay#tmqHH)lEWXZHRS`47Y72XK*x^R`ox-cfoOlCoT<_S2(uk@Fa>c5Yc!zN?F z)6nZy+>b;BI0v2`=Do*FGFn>+H(0Q1U4H#jRoNj{#l#ZqL-t^2QGx1qAm{gf3-E#B z+b<)7k5n2zsoUgWT0fyNDTbrQ78_WVQW8^;d|BQG%q3+0G*h%!2qBx2gGqr>ri6sw zOAZ|>%Et{iy0yl`1l7r(q=*C}ohW@Q)ZKGgu6bj(F1Sm^>=lXdGKs%~qA%W4h^V^x z_x=>FQ|}PDF>XTv4@dRzFGDDu->Wtn5#nj1Zco&6N8$1@)s*lyBk0_U64o?$KFEA4 z8^D`*L;6;_=II{i*HtKv?w$v4J+J$heQ-kJs5nVSxhblY=iQ2s>WZ}%kzJXAp=Y>q z81Btj9S8n?#3*7bbLvHjbt<*)v{}qxC^9zQRV?hn*G+V<@3^M!`RJnczsB^NamM^M zRyD(YwYrq~-cLRhyvlhr**cnNR3(T=f{zV)a67HqkGBH$TL6$d_dc&-tY|%W@#?}| z3lGw7(h^L~7#)vl8%S~pO%Ae6{|>L#Bu@xBLuO_fW|u;KBeqELgdR5dyJ7d_R!f7d z>&}Aej3)A03kBCJ{;WXNoF@+&XabdriuA7A!INFy0!B1(0q12ptS_8WY4YH{$%RZ5 z&J<2-DaUJ4UmG77l46wbwX6GwV8D zVDV9jcs~Z_4DBerPqi&JJGnB(C)fnAZ=g!c%=wNDw&$ZTeQkaRvk{@0Y}-bXoVI$9 zNTt*#X#r&fq6~3Pf}S1ZG3~W0UB&FN+sd9FW>N^IQ>4_awYKPEr4F|X`FdQ*DBKj# zcXf24DmqF-FR;Ch;dk{@%FJExLR^ZjIEL&j81I6T3DeEJa63B)A3S#4o~>h-jy$SG ziOSgd7Mn}kvTSB9^zKm=7b3Abs;Lu6P6j;*td`_?DOXfMedK|IiZOFU#SROkx#hjs zRmUD5|E?zUjE%vw7t;LJ_VA51Wj#Fs1xZE6;?F8b+INYXen_(u3H?z#3t~!U%b8Zp0wYbMNhWy zp+66;Qhcsu1y_^UQJV3L(L$(Aw$Ik0&3l1kYY?6xe&8$X24mpnMplO-Mg^06m*@%U zRQvuiut-RxH2qp7elAM=QvsVM)GR`je0kxjIm)XZL&e`lLwV!PR(YPL{~ z78EnL6wkM-&NbT<-U+7aBRMXY;&Vg$R5e1Pf7nOdKF!3*L~QI(t&s5R6n5 zI#{tw4Fq?a6W*dGD#OTZXD2^X&e0M`KIo~b?|PAFxskYqVzlz$WMD85H;pON2Sc~r ziKp?rJC@Ux7R7qTC)Iiog{685Pf=qUKoXi$lP|Ti7e^BOohYu9_I^A;ry$ZBs1Gm zO_g}gnlcQ?QOYbnPYN%9VxFR)J3P_Wd}5}~RO9tLtC1$*B=+^$t`;+!J-$w3V?*Sz zoke4vSAHZv*8FQ&rJ?$_sOU#umG`Qxt9P5ewqBe^Ee;TO*A3XdK-_-F5zU#XHA#x@ zqq*E(E=&7XzMyvbm`i~s;rV{(GCafJW-#yLI3@3q>{HFylPx`)j9n5NIzH9s0n8oB z=L<2-4P&;N^{>CSri0zvQ|^iekyZCdqe#*yyDjLM;xUS-N%#HVH}Bf~fHA6Dx#nkT z0y1b7212wx=w~6iD1-@18X(+=#hy=Di)Td`D0`-b4LO$xqW34|;RC_G9lrLTS0J{a zib8<$9C79c%mhnvA`jji4DT|*Qb@Kar6zDl-Bh1~Qvd`h;GSuXtpo@FIf?%3DhTi- zdH~NEhzs2ZossUB4{@MUvxD{z3bWTnYQVY!80;z#zFjYNK-se`2&fP2@53`Dzk5{L zxoUIcm7;OXGK70TWB&F|+*hOhQu0jn8od$0cLqqV+)h5hna6fgII!&K=_8-!6gm=>9SlxKA0F z?hR|Io12sH1vtOqxgsT2=p*ge*V{)#^M84gkx$BFq@hwQ#LxvmaJZE}Jwpwj{r+<1 z&BhG(DN-Esv~w5_8ps2!$?~r{G%YPKOA2!&5o$HY(EJP0P@`RWAcl@!wzeO&q*4j0 zWvj*yr847L7jsXcI3u{}ExQ+Oz`bOVe^SBW1B)czU&^}v0b@`9QzB*7WQa}E%w|>1 zGa;RHyrtlSQFLj_R_lI9T_FtlLa8Hr(ktZKi+||?h!p*%oJ`<8bOHMVfA#_V6oEf% z;NBuW#U1?898iW!aBm@heplk>uh9VQTt_wc=c}+ArTnX%7KUNTg zkqVrz&KCBPP+g_5#ihlC6 zb+EBn&83P@iq&d{aYX9hH;nt|mf?5z@VEaJ+`-XvqYrI@CVidOW3&|N+v~r$j-!2c z5WDzBOtxXJ13k!3jOobIzdi`QWpWsy?p*{m^zKVG?Xd}C zsU?wIDFmk77;*B#6@XA`QP2tF%Q%*+Cr_oV#^$}=SNvTMz^_Y(G9BAGRo8_Uyj1_x z`+lkYAj_S|Z@hI9R56Ia`8g36k#7;UZ(q~$_o?IG{LcU&!b$@!6uc@!L^oed1ne&c zaH{N|PwMaS#9+)HwvC}C*1kSemf<5asTUhcioQPI*Ea2*n7i`O9Pa&0N`)V}>=aI0 z0OY|louZRs1Mh64lrXK=WsIdJ>RVffL5%$q6zs-9@s1n>7TLnqq$b3E(z4@cR^{XN zY)7`yrHiX%C1VaM%b?}Gl{wW#ur|18{`*;^6%{`V;}9i+^lnX#1b-h+T`o6qmZd=t zN&U<$>nBOUr^uM_ru1(81BO!3Bf>Cd)sv?O!jU)NG$}b4h#rCvuMp4K@is-p+ z;s}hS^9TG$YtXi|iRaW0@4o23afp^|2eW_KD%ZaZSFOoDqmkFrBhIi~vHrMBx6m=L zVXq{7_rTufX&+sjA4zf5li+7zgoKY|M6;YyCk&+5Smeb$-U>%!Fr?CN)puBaTsl$2 z2zYzWo##~6!Wlzo2TC7&?&Ft`dnGzPoWs7G=yDP?nK^C8*zDRFx<&`JVgtYdW-xqnuDmy;WZi&KNa z`>gVY{*i|TH9vuHsbBz}waWl13U00!E9m9vqoxv__&TvsPo_@3{%?$eWl3d*J1%1{ zA9U{*FX=Wpe$a@~M&0HkJs#s`X)6kNFDd*sA`t~IQkHVS#PnUi_PT@2B_VZorjwfP zKK`;@Yi(=oYc!W~{rUdEn0iL!m7wTPeKcq58EbaVH@Y+SW{oL0F)Vp-IBEkc6f|Z) z1}$keR!~dH1=u7e0r7M?s8mx7B2@AK$VUQ6!!Hkv{*A5wZ7wd9AAW(Tic~28Im{`y z@+bZHvGGe~%f6?C$k>zU&F_MH)1x^oha%H!8I2J3oBmu|3`N7ta}R8R=1cqIcgnrU zv5#L1YaM+*FQ32VK?u?1Rje2E4O$q?P4L~vA;)5Tu z%w-D7M0Gewx|$MT)#Lc#{J+mDYBf570Yq7kYad&)TqRpSXo_^(09+b6;Kb^_8h z@=}o2@%lJos*_xB!){P}q#0PHA(F2MQZStG87YR0Kt{|v==Auxw^FhLZHqrngN!+U zB6k>Oxeqq)sgj?7EWJ%Qq;>Me_>}@>BzBKzbJkT~Ejw2bF`^RkA`>GHDrGpOqO%CV zs+S()N}w`5**Q_hfPm!yLlGN(bpGB_xh$LvBkieO=WEPOa-(+5?3q2ih(j94*L?+a z-^NGJbvSoCj+I%XOVul17pYd5sZxfA3F{r5T@)=?#k}eS`Lejc!>ALig~}jo#*)tz zzT>73RyROV9-@A-&YB<4ZeX8)nsUwk7Q14esy>F)4@nuR?Csy9alb96zpc7imcPZ_ Zel?Mi`p@3|?OXqoJO6)e6YyjHe*q9=kn#Wk literal 0 HcmV?d00001 diff --git a/dox/user_guides/step/images/step_image004.jpg b/dox/user_guides/step/images/step_image004.jpg new file mode 100644 index 0000000000000000000000000000000000000000..20e232cf0fd57aae38a0eefcee82b52de61e57ed GIT binary patch literal 52176 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 from and writing to XDE*) translates names, colors, layers, validation properties and other data associated with shapes and assemblies into XDE document. +File translation is performed in the programming mode, via C++ calls. +For testing the STEP component in DRAW Test Harness, a set of commands for reading and writing STEP files and analysis of relevant data are provided by the TKXSDRAW plugin. + +@section occt_1624647986_24898012 Reading STEP +@subsection occt_1624647986_248980121 Procedure +You can translate a STEP file into an OCCT shape in the following steps: +1. load the file, +2. check file consistency, +3. set the translation parameters, +4. perform the translation, +5. fetch the results. +@subsection occt_1624647986_248980122 Domain covered +@subsubsection occt_1624647986_2489801221 Assemblies +The ;ProSTEP Round Table Agreement Log; (version July 1998), item 21, defines two alternatives for the implementation of assembly structure representations: using mapped_item entities and using representation_relationship_with_transformation entities. Both these alternative representations are recognized and processed at reading. On writing, the second alternative is always employed. +Handling of assemblies is implemented in two separate levels: firstly STEP assembly structures are translated into OCCT shapes, and secondly the OCCT shape representing the assembly is converted into any data structure intended for representing assemblies (for example, OCAF). +The first part of this document describes the basic STEP translator implementing translation of the first level, i.e. translation to OCCT Shapes. On this level, the acyclic graph representing the assembly structure in a STEP file is mapped into the structure of nested TopoDS_Compounds in Open CASCADE Technology. The (sub)assemblies become (sub)compounds containing shapes which are the results of translating components of that (sub)assembly. The sharing of components of assemblies is preserved as Open CASCADE Technology sharing of subshapes in compounds. +The attributive information attached to assembly components in a STEP file (such as names and descriptions of products, colors, layers etc.) can be translatd after the translation of the shape itself by parsing the STEP model (loaded in memory). Several tools from the package STEPConstruct provide functionalities to read styles (colors), validation properties, product information etc. +Implementation of the second level of translation (conversion to XDE data structure) is provided by XDE STEP translator and is described in section 7. +@subsubsection occt_1624647986_2489801222 Shape representations +Length units, plane angle units and the uncertainty value are taken from shape_representation entities. This data is used in the translation process. +The types of STEP representation entities that are recognized are: + * advanced_brep_shape_representation + * faceted_brep_shape_representation + * manifold_surface_shape_representation + * geometrically_bounded_wireframe_shape_representation + * geometrically_bounded_surface_shape_representation + * hybrid representations (shape_representation containing models of different type) +@subsubsection occt_1624647986_2489801223 Topological entities +The types of STEP topological entities that can be translated are: + * vertices + * edges + * loops + * faces + * shells + * solids +For further information see 2.4 Mapping STEP entities to Open CASCADE Technology shapes. +@subsubsection occt_1624647986_2489801224 Geometrical entities +The types of STEP geometrical entities that can be translated are: + * points + * vectors + * directions + * curves + * surfaces +For further information see 2.4 Mapping STEP entities to Open CASCADE Technology shapes. +@subsection occt_1624647986_248980123 Description of the process +@subsubsection occt_1624647986_2489801231 Loading the STEP file +Before performing any other operation you have to load the file with: +STEPControl_Reader reader; +IFSelect_ReturnStatus stat = reader.ReadFile(;filename.stp;); +Loading the file only memorizes the data, it does not translate it. +@subsubsection occt_1624647986_2489801232 Checking the STEP file +This step is not obligatory. Check the loaded file with: +reader.PrintCheckLoad(failsonly,mode); +Error messages are displayed if there are invalid or incomplete STEP entities, giving you the information on the cause of error. +Only fail messages are displayed if failsonly is true. All messages are displayed if failsonly is false. Your analysis of the file can be either message-oriented or entity-oriented. Choose your preference with: +IFSelect_PrintCount mode = IFSelect_xxx +Where xxx can be one of the following: +ItemsByEntity  -       gives a sequential list of all messages per STEP entity, +CountByItem   -          gives the number of STEP entities with their types per message +ListByItem  -             gives the number of STEP entities with their types and rank numbers per message +@subsubsection occt_1624647986_2489801233 Setting the translation parameters +The following parameters can be used to translate a STEP file into an OCCT shape. +If you give a value that is not within the range of possible values it will simply be ignored. +

read.precision.mode

+Defines which precision value will be used during translation (see section 2.5 below for details on precision and tolerances). +;File; (0):           the precision value is set to length_measure in uncertainty_measure_with_unit from STEP file. +;User; (1):         the precision value is that of the read.precision.val parameter. +Read this parameter with: +Standard_Integer ic = Interface_Static::IVal(;read.precision.mode;); +Modify this parameter with: +if(!Interface_Static::SetIVal(;read.precision.mode;,1)) +.. error .. +Default value is ;File; (0). +

read.precision.val:

+User defined precision value. This parameter gives the precision for shape construction when the read.precision.mode parameter value is 1. +     0.0001: default +     any real positive (non null) value. +This value is a basic value of tolerance in the processor. The value is in millimeters, independently of the length unit defined in the STEP file. +Read this parameter with: +Standard_Real rp = Interface_Static::RVal(;read.precision.val;); +Modify this parameter with: +if(!Interface_Static::SetRVal(;read.precision.val;,0.01)) +.. error .. +Default value is 0.0001. +The value given to this parameter is a basic value for ShapeHealing algorithms and the processor. It does its best to reach it. Under certain circumstances, the value you give may not be attached to all of the entities concerned at the end of processing. STEP-to-OpenCASCADE translation does not improve the quality of the geometry in the original STEP file. This means that the value you enter may be impossible to attach to all shapes with the given quality of the geometry in the STEP file. +

read.maxprecision.val

+Defines the maximum allowed tolerance (in mm) of the shape. It should be not less than the basic value of tolerance set in the processor (either the uncertainty from the file or read.precision.val). Actually, the maximum between read.maxprecision.val and the basis tolerance is used to define the maximum allowed tolerance. +Read this parameter with: +Standard_Real rp = Interface_Static::RVal(;read.maxprecision.val;); +Modify this parameter with: +if(!Interface_Static::SetRVal(;read.maxprecision.val;,0.1)) +.. error .. +Default value is 1. +Note that maximum tolerance even explicitly defined by the user may be insufficient to ensure the validity of the shape (if real geometry is of bad quality). Therefore the user is provided with an additional parameter, which allows him to choose: either he prefers to ensure the shape validity or he rigidly sets the value of maximum tolerance. In the first case there is a possibility that the tolerance will not have any upper limit, in the second case the shape may be invalid. +

read.maxprecision.mode:

+Defines the mode of applying the maximum allowed tolerance. Its possible values are: +0 (;Preferred;) - maximum tolerance is used as a limit but sometimes it can be exceeded (currently, only for deviation of a 3D curve and pcurves of an edge, and vertices of such edge) to ensure the shape validity, +1 (;Forced;) -    maximum tolerance is used as a rigid limit, i.e. no tolerance can exceed it and if it is the case, the tolerance is trimmed by the maximum tolerance. +Read this parameter with: +Standard_Integer ic = Interface_Static::IVal(;read.maxprecision.mode;); +Modify this parameter with: +if(!Interface_Static::SetIVal(;read.maxprecision.mode;,1)) +.. error .. +Default value is 0 (;Preferred;). +

read.stdsameparameter.mode

+defines the use of BRepLib::SameParameter. Its possible values are: +0 (;Off;) - BRepLib::SameParameter is not called, +1 (;On;) - BRepLib::SameParameter is called. +The functionality of BRepLib::SameParameter is used through ShapeFix_Edge::SameParameter. It ensures that the resulting edge will have the lowest tolerance taking pcurves either unmodified from the STEP file or modified by BRepLib::SameParameter. +Read this parameter with: +Standard_Integer mv = Interface_Static::IVal(;read.stdsameparameter.mode;); +Modify this parameter with: +if (!Interface_Static::SetIVal (;read.stdsameparameter.mode;,1)) +.. error ..; +Deafault value is 0 (;Off;). +

read.surfacecurve.mode:

+a preference for the computation of curves in an entity which has both 2D and 3D representation. +Each TopoDS_Edge in TopoDS_Face must have a 3D and 2D curve that references the surface. +If both 2D and 3D representation of the entity are present, the computation of these curves depends on the following values of parameter: +;Default; (0):                 no preference, both curves are taken (default value), +;3DUse_Preferred; (3):  3D curves are used to rebuild 2D ones. +Read this parameter with: +Standard_Integer rp = Interface_Static::IVal(;read.surfacecurve.mode;); +Modify this parameter with: +if(!Interface_Static::SetIVal(;read.surfacecurve.mode;,3)) +.. error .. +Default value is (0). +

read.encoderegularity.angle

+This parameter is used for call to BRepLib::EncodeRegularity() function which is called for the shape read from an IGES or a STEP file at the end of translation process. This function sets the regularity flag of the edge in the shell when this edge is shared by two faces. This flag shows the continuity these two faces are connected with at that edge. +Read this parameter with: +Standard_Real era =  Interface_Static::RVal(;read.encoderegularity.angle;); +Modify this parameter with: +if (!Interface_Static::SetRVal (;read.encoderegularity.angle;,0.1)) +.. error ..; +Default value is 0.01. +

step.angleunit.mode

+This parameter is obsolete (it was required in the past for STEP files with a badly encoded angle unit). It indicates what angle units should be used when a STEP file is read: the units from file (default), or forced RADIANS or DEGREES. +Default value is File +

read.step.resource.name

+

read.step.sequence

+These two parameters define the name of the resource file and the name of the sequence of operators (defined in that file) for Shape Processing, which is automatically performed by the STEP translator. Shape Processing is a user-configurable step, which is performed after translation and consists in applying a set of operators to a resulting shape. This is a very powerful tool allowing customizing the shape and adapting it to the needs of a receiving application. By default the sequence consists of a single operator ShapeFix - that is how Shape Healing is called from the STEP translator. +Please find an example of the resource file for STEP (which defines parameters corresponding to the sequence applied by default, i.e. if the resource file is not found) in the Open CASCADE Technology installation, by the path %CASROOT%/src/XSTEPResource/STEP ($CASROOT/src/XSTEPResource/STEP). +In order for the STEP translator to use that file, you have to define the CSF_STEPDefaults environment variable, which should point to the directory where the resource file resides. Note that if you change parameter read.step.resource.name, you will change the name of the resource file and the environment variable correspondingly. +Default values:  read.step.resource.name - STEP, read.step.sequence - FromSTEP. +

read.scale.unit

+This parameter is obsolete (the parameter xstep.cascade.unit should be used instead when necessary). If it is set to 'M', the shape is scaled 0.001 times (as if it were in meters) after translation from IGES or STEP. +Default value is MM. +

xstep.cascade.unit

+This parameter defines units to which a shape should be converted when translated from IGES or STEP to CASCADE. Normally it is MM; only those applications that work internally in units other than MM should use this parameter. +Default value is MM. +

read.step.product.mode:

+Defines the approach used for selection of top-level STEP entities for translation, and for recognition of assembly structures +1 (;ON;) -          PRODUCT_DEFINITION entities are taken as top-level ones; assembly structure is recognized by NEXT_ASSEMBLY_USAGE_OCCURRENCE entities. This is regular mode for reading valid STEP files conforming to AP 214, AP203 or AP 209. +0 (;OFF;) -        SHAPE_DEFINITION_REPRESENTATION entities are taken as top-level ones; assembly is recognized by CONTEXT_DEPENDENT_SHAPE_REPRESENTATION entities. This is compatibility mode, which can be used for reading legacy STEP files produced by older versions of STEP translators and having incorrect or incomplete product information. +Read this parameter with: +Standard_Integer ic = Interface_Static::IVal(;read.step.product.mode;); +Modify this parameter with: +if(!Interface_Static::SetIVal(;read.step.product.mode;,1)) +.. error .. +Default value is 1 (;ON;). +Note that the following parameters have effect only if read.step.product.mode is ON. +

read.step.product.context:

+When reading AP 209 STEP files, allows selecting either only ‘design’ or ‘analysis’, or both types of products for translation +1 (;all;) -            translate all products +2 (;design;) -     translate only products that have PRODUCT_DEFINITION_CONTEXT with field life_cycle_stage set to ‘design’ +3 (*analysis*) -   translate only products associated with PRODUCT_DEFINITION_CONTEXT entity whose field life_cycle_stage set to ‘analysis’ +Note that in AP 203 and AP214 files all products should be marked as ‘design’, so if this mode is set to ‘analysis’, nothing will be read. +Read this parameter with: +Standard_Integer ic =                  Interface_Static::IVal(;read.step.product.context;); +Modify this parameter with: +if(!Interface_Static::SetIVal(;read.step.product.context;,1)) +.. error .. +Default value is 1 (;all;). +

read.step.shape.repr:

+Specifies preferred type of representation of the shape of the product, in case if a STEP file contains more than one representation (i.e. multiple PRODUCT_DEFINITION_SHAPE entities) for a single product +1 (;All;) -           Translate all representations (if more than one, put in compound). +2 (;ABSR;) -      Prefer ADVANCED_BREP_SHAPE_REPRESENTATION +3 (;MSSR;) -     Prefer MANIFOLD_SURFACE_SHAPE_REPRESENTATION +4 (;GBSSR;) -   Prefer GEOMETRICALLY_BOUNDED_SURFACE_SHAPE_REPRESENTATION +5 (;FBSR;) -      Prefer FACETTED_BREP_SHAPE_REPRESENTATION +6 (;EBWSR;) -   Prefer EDGE_BASED_WIREFRAME_SHAPE_REPRESENTATION +7 (;GBWSR;) -   Prefer GEOMETRICALLY_BOUNDED_WIREFRAME _SHAPE_REPRESENTATION +When this option is not equal to 1, for products with multiple representations the representation having a type closest to the selected one in this list will be translated. +Read this parameter with: +Standard_Integer ic = Interface_Static::IVal(;read.step.shape.repr;); +Modify this parameter with: +if(!Interface_Static::SetIVal(;read.step.shape.repr;,1)) +.. error .. +Default value is 1 (;All;). +

read.step.assembly.level:

+Specifies which data should be read for the products found in the STEP file: +1 (;All;) -           Translate both the assembly structure and all associated shapes. If both shape and sub-assemblies are associated with the same product, all of them are read and put in a single compound. +  Note that this situation is confusing, as semantics of such configuration is not defined clearly by the STEP standard (whether this shape is an alternative representation of the assembly or is an addition to it), therefore warning will be issued in such case. +2 (;assembly;) - Translate the assembly structure and shapes associated with parts only (not with sub-assemblies). +3 (;structure;) -  Translate only the assembly structure without shapes (a structure of empty compounds). This mode can be useful as an intermediate step in applications requiring specialized processing of assembly parts. +4 (;shape;) -      Translate only shapes associated with the product, ignoring the assembly structure (if any). This can be useful to translate only a shape associated with specific product, as a complement to *assembly* mode. +Read this parameter with: +Standard_Integer ic =                  Interface_Static::IVal(;read.step.assembly.level;); +Modify this parameter with: +if(!Interface_Static::SetIVal(;read.step.assembly.level ;,1)) +.. error .. +Default value is 1 (;All;). +

read.step.shape.relationship:

+Defines whether shapes associated with the main SHAPE_DEFINITION_REPRESENTATION entity of the product via SHAPE_REPRESENTATIONSHIP_RELATION should be translated. This kind of association is used for the representation of hybrid models (i.e. models whose shape is composed of different types of representations) in AP 203 files since 1998, but it can be also used to associate auxiliary data with the product. This parameter allows to avoid translation of such auxiliary data. +1 (;ON;) -          translate +0 (;OFF;) -        do not translate +Read this parameter with: +Standard_Integer ic =          Interface_Static::IVal(;read.step.shape.relationship;); +Modify this parameter with: +if(!Interface_Static::SetIVal(;read.step.shape.relationship;,1)) +.. error .. +Default value is 1 (;ON;). +

read.step.shape.aspect:

+Defines whether shapes associated with the PRODUCT_DEFINITION_SHAPE entity of the product via SHAPE_ASPECT should be translated. This kind of association was used for the representation of hybrid models (i.e. models whose shape is composed of different types of representations) in AP 203 files before 1998, but it is also used to associate auxiliary information with the sub-shapes of the part. Though STEP translator tries to recognize such cases correctly, this parameter may be useful to avoid unconditionally translation of shapes associated via SHAPE_ASPECT entities. +1 (;ON;) -          translate +0 (;OFF;) -        do not translate +Read this parameter with: +Standard_Integer ic =                  Interface_Static::IVal(;read.step.shape.aspect;); +Modify this parameter with: +if(!Interface_Static::SetIVal(;read.step.shape.aspect;,1)) +.. error .. +Default value is 1 (;ON;). +@subsubsection occt_1624647986_2489801234 Performing the STEP file translation +Perform the translation according to what you want to translate. You can choose either root entities (all or selected by the number of root), or select any entity by its number in the STEP file. There is a limited set of types of entities that can be used as starting entities for translation. Only the following entities are recognized as transferable: + * product_definition + * next_assembly_usage_occurrence + * shape_definition_representation + * subtypes of shape_representation (only if referred representation is transferable) + * manifold_solid_brep + * brep_with_voids + * faceted_brep + * faceted_brep_and_brep_with_voids + * shell_based_surface_model + * geometric_set and geometric_curve_set + * mapped_item + * subtypes of face_surface (including advanced_face) + * subtypes of shape_representation_relationship + * context_dependent_shape_representation +
The following methods are used for translation:
+ * Translate a root entity identified by its rank with: +Standard_Boolean ok = reader.TransferRoot(rank); + * Translate an entity identified by its rank with: +Standard_Boolean ok = reader.TransferOne(rank); + * Translate a list of entities in one operation with (this method returns the number of successful translations): +Standard_Integer num = reader.TransferList(list); + * Translate all transferable roots with: +Standard_Integer NbRoots = reader.NbRootsForTransfer(); +Standard_Integer num = reader.TransferRoots(); +@subsubsection occt_1624647986_2489801235 Getting the translation results +Each successful translation operation outputs one shape. A series of translations gives a set of shapes. +Each time you invoke TransferOne(), TransferRoot() or TransferList(), their results are accumulated and the counter of results increases. You can clear the results with: +reader.ClearShapes(); +between two translation operations, if you do not, the results from the next translation will be added to the accumulation. +TransferRoots() operations automatically clear all existing results before they start. + * Get the number of shapes recorded in the result with: +Standard_Integer num = reader.NbShapes(); + * Get the result identified by its rank, where rank is an integer between 1 and NbShapes, with: +TopoDS_Shape shape = reader.Shape(rank); + * Get the first result of translation with: +TopoDS_Shape shape = reader.Shape(); + * Get all of results in a single shape which is: +a null shape if there are no results, +in case of a single result, a shape that is specific to that result, +a compound that lists the results if there are several results. +TopoDS_Shape shape = reader.OneShape(); +
Clearing the accumulation of results
+If several individual translations follow each other, the results give a list that can be purged with: +reader.ClearShapes(); +which erases the existing results. +
Checking that translation was correctly performed
+Each time you invoke Transfer… or TransferRoots(),  you can display the related messages with the help of: +reader.PrintCheckTransfer(failsonly,mode); +This check concerns the last invocation of Transfer… or TransferRoots() only. +@subsubsection occt_1624647986_2489801236 Selecting STEP entities for translation +

Selection possibilities

+There are three selection possibilities. You can select: + * the whole file, + * a list of entities, + * one entity. +

Whole file

+Transferring the whole file means transferring all root entities. The number of roots can be evaluated when the file is loaded: +Standard_Integer NbRoots = reader.NbRootsForTransfer(); +Standard_Integer num = reader.TransferRoots(); +

Lists of entities

+A list of entities can be formed by invoking STEP214Control_Reader::GiveList (this is a method of the parent class). +Here is a simple example of how a list is translated: +Handle(TColStd_HSequenceOfTransient) list = reader.GiveList(); +The result is a TColStd_HSequenceOfTransient. +You can either translate a list entity by entity or all at once. An entity-by-entity operation lets you check each individual entity translated. +
Translating a whole list in one operation
+Standard_Integer nbtrans = reader.TransferList (list); +nbtrans gives the number of items in the list that produced a shape. +
Translating a list entity by entity:
+Standard_Integer i,nb = list-Length(); +for (i = 1; i = nb; i ++) { + Handle(Standard_Transient) ent = list-Value(i); + Standard_Boolean OK = reader.TransferEntity (ent); +} +

Selections

+There is a number of predefined operators that can be used. They are: + * step214-placed-items +Selects all mapped_items or context_depended_shape_representations. + * step214-shape-def-repr +Selects all shape_definition_representations. + * step214-shape-repr + Selects all shape_representations. + * step214-type(entity_type) +Selects all entities of a given type + * step214-faces +Selects all faces_surface, advanced_face entities and the surface entity or any sub type if these entities are not shared by any face entity or shared by geometric_set entity. + * step214-derived(entity_type) +Selects entities of a given type or any subtype. + * step214-GS-curves +Selects all curve entities or any subtype except the composite_curve if these entities are shared by the geometric_set entity. + * step214-assembly +Selects all mapped_items or context_depended_shape_representations involved into the assembly structure. + * xst-model-all +Selects all entities. + * xst-model-roots +Selects all roots. + * xst-shared + selection +Selects all entities shared by at least one entity selected by selection. + * xst-sharing + selection +Selects all entities sharing at least one entity selected by selection. + * xst-transferrable-all +Selects all transferable entities. + * xst-transferrable-roots +Selects all translatable roots. +Cumulative lists can be used too. +

Single entities

+You can select an entity either by its rank or by its handle (an entity’s handle can be obtained by invoking the StepData_StepModel::Entity function). +
Selection by rank
+Use method StepData_StepModel::NextNumberForLabel to find its rank with the following: +Standard_CString label = ‘#...’; +StepData_StepModel model = reader.StepModel(); +rank = model-NextNumberForLabe(label, 0, Standard_False); +Translate an entity specified by its rank: +Standard_Boolean ok = reader.Transfer (rank); +
Direct selection of an entity
+ent is the entity. The argument is a Handle(Standard_Transient). +Standard_Boolean ok = reader.TransferEntity (ent); +@subsection occt_1624647986_248980124 Mapping STEP entities to Open CASCADE Technology shapes +Tables given in this paragraph show the mapping of STEP entities to OCCT objects. Only topological and geometrical STEP entities and entities defining assembly structures are described in this paragraph. For a full list of STEP entities please refer to Appendix A. +@subsubsection occt_1624647986_2489801241 Assembly structure representation entities +Not all entities defining the assembly structure in the STEP file are translated to OCCT shapes, but they are used to identify the relationships between assemblies and their components. Since the graph of ‘natural’ dependencies of entities based on direct references between them does not include the references from assemblies to their components, these dependencies are introduced in addition to the former ones. This is made basing on the analysis of the following entities describing the structure of the assembly. + +@subsubsection occt_1624647986_2489801242 Models + +@subsubsection occt_1624647986_2489801243 Topological entities + + +@subsubsection occt_1624647986_2489801244 Geometrical entities +3D STEP entities are translated into geometrical objects from the Geom package while 2D entities are translated into objects from the Geom2d package. + +@subsection occt_1624647986_248980125 Tolerance management +@subsubsection occt_1624647986_2489801251 Values used for tolerances during reading STEP +During the STEP = OCCT translation several parameters are used as tolerances and precisions for different algorithms. Some of them are computed from other tolerances using specific functions. +

3D (spatial) tolerance

+
Package method Precision::Confusion()
+Value is 10-7. It is used as the minimal distance between points, which are considered to be distinct. +
Uncertainty in STEP file
+This parameter is attached to each shape_representation entity in a STEP file and defined as length_measure in uncertainty_measure_with_unit. It is used as a fundamental value of precision during translation. +
User - defined variable read.precision.val
+It is used instead of uncertainty from a STEP file when parameter read.precision.mode is 1 (*User*). +

2D (parametric) tolerances

+
Package method Precision::PConfusion()
+This is a value of 0.01* Precision::Confusion(). It is used to compare parametric bounds of curves. +
Methods UResolution, VResolution (tolerance3d) of the class GeomAdaptor_Surface or BRepAdaptor_Surface
+Return tolerance in parametric space of a surface computed from 3d tolerance. +When one tolerance value is to be used for both U and V parametric directions, the maximum or the minimum value of UResolution and VResolution is used. +

Methods Resolution (tolerance3d) of the class GeomAdaptor_Curve or BRepAdaptor_Curve

+Returns tolerance in parametric space of a curve computed from 3d tolerance. +@subsubsection occt_1624647986_2489801252 Initial setting of tolerances in translating objects +In the STEP processor, the basic value of tolerance is set in method STEPControl_ActorRead::Transfer() to either value of uncertainty in shape_representation in STEP file (if parameter read.precision.mode is 0), or to a value of parameter read.precision.val (if read.precision.mode is 1 or if the uncertainty is not attached to the current entity in the STEP file). +Translation starts from one entity translated as a root. Function which performs the translation (STEPControl_ActorRead::Transfer() ) creates an object of the type StepToTopoDS_Builder, which is intended to translate topology. +This object gets the initial tolerance value that is equal to read.precision.val or the uncertainty from shape_representation. During the translation of the entity, new objects of types StepToTopoDS_Translate... are created for translating sub-entities. All of them use the same tolerances as a StepToTopoDS_Builder object. +@subsubsection occt_1624647986_2489801253 Transfer process +

Evolution of shape tolerances during transfer

+Let us follow the evolution of tolerances during the translation of STEP entities into an OCCT shape. +If the starting STEP entity is a geometric_curve_set all the edges and vertices are constructed with Precision::Confusion(). +If the starting STEP entity is not a geometric_curve_set the sub-shapes of the resulting shape have the following tolerance: + * all the faces are constructed with Precision::Confusion(), + * edges are constructed with Precision::Confusion(). It can be modified later by: +1.ShapeFix::SameParameter() - the tolerance of edge shows real deviation of the 3D curve and pcurves. +2.ShapeFix_Wire::FixSelfIntersection() in case if a pcurve of a self-intersecting edge is modified. + * vertices are constructed with Precision::Confusion(). It can be modified later by: +1.StepToTopoDS_TranslateEdge +2.ShapeFix::SameParameter() +3.ShapeFix_Wire::FixSelfIntersection() +4.ShapeFix_Wire::FixLacking() +5.ShapeFix_Wire::Connected() +So, the final tolerance of sub-shapes shows the real local geometry of shapes (distance between vertices of adjacent edges, deviation of a 3D curve of an edge and its parametric curves and so on) and may be less or greater than the basic value of tolerance in the STEP processor. +

Translating into Geometry

+Geometrical entities are translated by classes StepToGeom_Make... Methods of these classes translate STEP geometrical entities into OCCT geometrical objects. Since these objects are not BRep objects, they do not have tolerances. Tolerance is used only as precision for detecting bad cases (such as points coincidence). +

Translating into Topology

+STEP topological entities are translated into OCCT shapes by use of the following classes (package StepToTopoDS): + * StepToTopoDS_TranslateVertex + * StepToTopoDS_TranslateEdge + * StepToTopoDS_TranslateVertexLoop + * StepToTopoDS_TranslateEdgeLoop + * StepToTopoDS_TranslatePolyLoop + * StepToTopoDS_TranslateFace + * StepToTopoDS_TranslateShell + * StepToTopoDS_TranslateCompositeCurve + * StepToTopoDS_TranslateCurveBoundedSurface + * StepToTopoDS_Builder + * StepToTopoDS_MakeTransformed +Although in a STEP file the uncertainty value is assigned to shape_representation entities and this value is applied to all entities in this shape_representation, OCCT shapes are produced with different tolerances. As a rule, updating the tolerance is fulfilled according to the local geometry of shapes (distance between vertices of adjacent edges, deviation of edge's 3D curve and its parametric curves and so on) and may be either less or greater than the uncertainty value assigned to the entity. +The following paragraphs show what default tolerances are used when creating shapes and how they are updated during translation. +
Class StepToTopoDS_TranslateVertex
+TopoDS_Vertex is constructed from a STEP vertex_point entity with Precision::Confusion(). +
Class StepToTopoDS_TranslateVertexLoop
+Degenerated TopoDS_Edge in TopoDS_Wire is created with tolerance Precision::Confusion(). TopoDS_Vertex of a degenerated edge is constructed with the initial value of tolerance. +
Class StepToTopoDS_TranslateEdge
+TopoDS_Edge is constructed only on the basis of 3D curve with Precision::Confusion().. Tolerance of the vertices can be increased up to a distance between their positions and ends of 3D curve. +
Class StepToTopoDS_TranslateEdgeLoop
+TopoDS_Edges in TopoDS_Wire are constructed with the help of class StepToTopoDS_TranslateEdge. Pcurves from a STEP file are translated if they are present and read.surfacecurve.mode is 0. For each edge method ShapeFix_Edge::FixSameParameter() is called. If the resulting tolerance of the edge is greater than the maximum value between 1.0 and 2*Value of basis precision, then the pcurve is recomputed. The best of the original and the recomputed pcurve is put into TopoDS_Edge. The resulting tolerance of TopoDS_Edge is a maximal deviation of its 3D curve and its pcurve(s). +
Class StepToTopoDS_TranslatePolyLoop
+TopoDS_Edges in TopoDS_Wire are constructed with the help of class StepToTopoDS_TranslateEdge. Their tolerances are not modified inside this method. +
Class StepToTopoDS_TranslateFace
+TopoDS_Face is constructed with the initial value of tolerance. +TopoDS_Wire on TopoDS_Face is constructed with the help of classes StepToTopoDS_TranslatePolyLoop, StepToTopoDS_TranslateEdgeLoop or StepToTopoDS_TranslateVertexLoop. +
Class StepToTopoDS_TranslateShell
+This class calls StepToTopoDS_TranslateFace::Init for each face. This class does not modify the tolerance value. +
Class StepToTopoDS_TranslateCompositeCurve
+TopoDS_Edges in TopoDS_Wire are constructed with the help of class BRepAPI_MakeEdge and have a tolerance 10-7. Pcurves from a STEP file are translated if they are present and if read.surfacecurve.mode is not -3. The connection between segments of a composite curve (edges in the wire) is ensured by call to method ShapeFix_Wire::FixConnected() with a precision equal to the initial value of tolerance. +
Class StepToTopoDS_TranslateCurveBoundedSurface
+TopoDS_Face is constructed with tolerance Precision::Confusion(). +TopoDS_Wire on TopoDS_Face is constructed with the help of class StepToTopoDS_TranslateCompositeCurve. Missing pcurves are computed using projection algorithm with the help of method ShapeFix_Face::FixPcurves(). For resulting face method ShapeFix::SameParameter() is called. It calls standard BRepLib::SameParameter for each edge in each wire, which can either increase or decrease the tolerances of the edges and vertices. SameParameter writes the tolerance corresponding to the real deviation of pcurves from 3D curve which can be less or greater than the tolerance in a STEP file. +
Class StepToTopoDS_Builder
+Class StepToTopoDS_Builder is a high level class. Its methods perform translation with the help of the classes listed above. If the value of read.maxprecision.mode is set to 1 then the tolerance of subshapes of the resulting shape is limited by 0 and read.maxprecision.val. Else this class does not change the tolerance value. +
Class StepToTopoDS_MakeTransformed
+This class performs a translation of mapped_item entity and indirectly uses class StepToTopoDS_Builder. The tolerance of the resulting shape is not modified inside this method. +

Healing of resulting shape in ShapeHealing component

+
Class ShapeFix_Wire
+1. ShapeFix_Wire::FixSelfIntersection() +This method is intended for detecting and fixing self-intersecting edges and intersections of adjacent edges in a wire. It fixes self-intersections by cutting edges at the intersection point and/or by increasing the tolerance of the vertex (so that the vertex comprises the point of intersection). There is a maximum tolerance that can be set by this method transmitted as a parameter, currently is read.maxprecision.value. +When a self-intersection of one edge is found, it is fixed by one of the two methods: + * tolerance of the vertex of that edge which is nearest to the point of self-intersection is increased so that it comprises both its own old position and the intersection point + * the self-intersecting loop on the pcurve is cut out and a new pcurve is constructed. This can increase the tolerance of the edge. +The method producing a smaller tolerance is selected. +When an intersection of two adjacent edges is detected, edges are cut at that point. Tolerance of the common vertex of these edges is increased in order to comprise both the intersection point and the old position. +This method can increase the tolerance of the vertex up to a value of read.maxprecision.value. +2. ShapeFix_Wire::FixLacking() +This method is intended to detect gaps between pcurves of adjacent edges (with the precision of surface UVResolution computed from tolerance of a corresponding vertex) and to fix these gaps either by increasing the tolerance of the vertex, or by inserting a new degenerated edge (straight in parametric space). +If it is possible to compensate a gap by increasing the tolerance of the vertex to a value of less than the initial value of tolerance, the tolerance of the vertex is increased. Else, if the vertex is placed in a degenerated point then a degenerated edge is inserted. +3. ShapeFix_Wire::FixConnected() +This method is intended to force two adjacent edges in the wire to share the same vertex. This method can increase the tolerance of the vertex. The maximal value of tolerance is read.maxprecision.value. +@subsection occt_1624647986_248980126 Code architecture +@subsubsection occt_1624647986_2489801261 List of the classes +

package STEPControl

+STEPControl_Reader +STEPControl_ActorRead +

package StepToTopoDS

+StepToTopoDS_Builder +StepToTopoDS_MakeTransformed +StepToTopoDS_TranslateShell +StepToTopoDS_TranslateFace +StepToTopoDS_TranslateEdgeLoop +StepToTopoDS_TranslatePolyLoop +StepToTopoDS_TranslateVertexLoop +StepToTopoDS_TranslateEdge +StepToTopoDS_TranslateVertex +

package StepToGeom

+StepToGeom_MakeCartesianPoint +StepToGeom_MakeCurve +StepToGeom_MakeLine +StepToGeom_MakeSurface +For more information refer to CDL. +@subsubsection occt_1624647986_2489801262 API classes +

package STEPControl

+     STEPControl_Controller +     STEPControl_Reader +     STEPControl_ActorRead +  +For a description of these classes refer to the chapter 4. API for reading/writing STEP. +@subsubsection occt_1624647986_2489801263 Graph of calls +The following diagram illustrates the structure of calls in reading STEP. +![](/user_guides/step/images/step_image003.jpg "The highlighted classes are intended to translate geometry") +  +@subsection occt_1624647986_248980127 Example +#include STEPControl_Reader.hxx +#include TopoDS_Shape.hxx +#include BRepTools.hxx + +Standard_Integer main() +{ +  STEPControl_Reader reader; +  reader.ReadFile(;MyFile.stp;); + +  // Loads file MyFile.stp +  Standard_Integer NbRoots = reader.NbRootsForTransfer(); + +  // gets the number of transferable roots +  cout;Number of roots in STEP file: ; NbRootsendl; + +  Standard_Integer NbTrans = reader.TransferRoots(); +  // translates all transferable roots, and returns the number of    //successful translations +  cout;STEP roots transferred: ; NbTransendl; +  cout;Number of resulting shapes is: ;reader.NbShapes()endl; + +  TopoDS_Shape result = reader.OneShape(); +  // obtain the results of translation in one OCCT shape + +  . . . + +} + +@section occt_1624647986_604379675 Writing STEP +@subsection occt_1624647986_6043796751 Procedure +You can translate OCCT shapes into STEP entities in the following steps: +   1.initialize the process, +   2.set the translation parameters, +   3.perform the shape translation, +   4.write the output file. +You can translate several shapes before writing a file. All these translations output a separate shape_representation entity in STEP file. +The user-defined option (parameter ;write.step.schema;) is provided to define which version of schema (AP214 CD or DIS, or AP203) is used for the output STEP file. +@subsection occt_1624647986_6043796752 Domain covered +@subsubsection occt_1624647986_60437967521 Writing geometry and topology +There are two families of OCCT objects that can be translated: + * geometrical objects, + * topological shapes. +@subsubsection occt_1624647986_60437967522 Writing assembly structures +The shapes organized in a structure of nested compounds can be translated either as simple compound shapes, or into the assembly structure, depending on the parameter ;write.step.assembly;, which is described below. + +The assembly structure placed in the produced STEP file corresponds to the structure described in the ProSTEP Agreement Log (item 21) as the second alternative (assembly structure through representation_relationship / item_defined_transformation). To represent an assembly it uses entities of the representation_relationship_with_transformation type. Transformation operators used for locating assembly components are represented by item_defined_transformation entities. +If mode ;write.step.assembly; is set to the values ON or Auto then an OCC shape consisting of nested compounds will be written as an assembly, otherwise it will be written as separate solids. + +Please see also the sub-chapter ;Mapping OCCT shapes to STEP entities;. +@subsection occt_1624647986_6043796753 Description of the process +@subsubsection occt_1624647986_60437967531 Initializing the process +Before performing any other operation you have to create a writer object: +STEPControl_Writer writer; +@subsubsection occt_1624647986_60437967532 Setting the translation parameters +The following parameters are used for the OCCT-to-STEP translation. +

write.precision.mode

+writes the precision value. +;Least; (-1) :      the uncertainty value is set to the minimum tolerance of an OCCT shape +;Average; (0) :   the uncertainty value is set to the average tolerance of an OCCT shape. +;Greatest; (1) :  the uncertainty value is set to the maximum tolerance of an OCCT shape +;Session; (2) :   the uncertainty value is that of the write.precision.val parameter. +Read this parameter with: +Standard_Integer ic = Interface_Static::IVal(;write.precision.mode;); +Modify this parameter with: +if(!Interface_Static::SetIVal(;write.precision.mode;,1)) +.. error .. +Default value is 0. +

write.precision.val

+a user-defined precision value. This parameter gives the uncertainty for STEP entities constructed from OCCT shapes when the write.precision.mode parameter value is 1. + * 0.0001: default + * any real positive (non null) value. +This value is stored in shape_representation in a STEP file as an uncertainty. +Read this parameter with: +Standard_Real rp = Interface_Static::RVal(;write.precision.val;); +Modify this parameter with: +if(!Interface_Static::SetRVal(;write.precision.val;,0.01)) +.. error .. +Default value is 0.0001. +

write.step.assembly

+writing assembly mode. +0 (Off) :                        (default)  writes STEP files without assemblies. +1 (On) :             writes all shapes in the form of STEP assemblies. +2 (Auto) :          writes shapes having a structure of (possibly nested) TopoDS_Compounds in the form of STEP assemblies, single shapes are written without assembly structures. +Read this parameter with: +Standard_Integer rp = Interface_Static::IVal(;write.step.assembly;); +Modify this parameter with: +if(!Interface_Static::SetIVal(;write.step.assembly;,1)) +.. error .. +Default value is 0. +

write.step.schema

+defines the version of schema used for the output STEP file: +     1 or ;AP214CD; (default): AP214, CD version (dated 26 November 1996), +     2 or ;AP214DIS;: AP214, DIS version (dated 15 September 1998). +     3 or ;AP203;: AP203, possibly with modular extensions (depending on data written to a file). +     4 or *AP214IS*: AP214, IS version (dated 2002) +This parameter affects the following entities written to the STEP file: + + + +In addition, in AP203 mode more product and organizational entities are generated (entities like PERSON_AND_ORGANIZATION, SECURITY_CLASSIFICATION etc., as required by AP203). +Read this parameter with: +TCollection_AsciiString schema = Interface_Static::CVal(;write.step.schema;); +Modify this parameter with: +if(!Interface_Static::SetCVal(;write.step.schema;,;DIS;)) +.. error .. +Default value is 1 (;CD;). +For the parameter ;write.step.schema; to take effect, method STEPControl_Writer::Model(Standard_True) should be called after changing this parameter (corresponding command in DRAW is ;newmodel;). +

write.step.product.name

+Defines the text string that will be used for field ‘name’ of PRODUCT entities written to the STEP file. +Default value: *OCCT STEP translator 6.1* (the 6.1 stands for Open CASCADE Technology version number). +

write.surfacecurve.mode

+This parameter indicates whether parametric curves (curves in parametric space of surface) should be written into the STEP file. This parameter can be set to Off in order to minimize the size of the resulting STEP file. +Off (0) :            writes STEP files without pcurves. This mode decreases the size of the resulting STEP file . +On (1) : (default) writes pcurves to STEP file +Read this parameter with: +Standard_Integer wp = Interface_Static::IVal(;write.surfacecurve.mode;); +Modify this parameter with: +if(!Interface_Static::SetIVal(;write.surfacecurve.mode;,1)) +.. error .. +Default value is On. +

write.step.unit

+Defines a unit in which the STEP file should be written. If set to unit other than MM, the model is converted to these units during the translation. +Default value is MM. +

write.step.resource.name

+

write.step.sequence

+These two parameters define the name of the resource file and the name of the sequence of operators (defined in that file) for Shape Processing, which is automatically performed by the STEP translator before translating a shape to a STEP file. Shape Processing is a user-configurable step, which is performed before the translation and consists in applying a set of operators to a resulting shape. This is a very powerful tool allowing customizing the shape and adapting it to the needs of a receiving application. By default the sequence consists of two operators: SplitCommonVertex and DirectFaces, which convert some geometry and topological constructs valid in Open CASCADE Technology but not in STEP to equivalent definitions conforming to STEP format. +See description of parameter read.step.resource.name above for more details on using resource files. +Default values:  read.step.resource.name - STEP, read.step.sequence - ToSTEP. +@subsubsection occt_1624647986_60437967533 Performing the Open CASCADE Technology shape translation +An OCCT shape can be translated to STEP using one of the following models (shape_representations): + * manifold_solid_brep (advanced_brep_shape_representation) + * brep_with_voids (advanced_brep_shape_representation) + * faceted_brep (faceted_brep_shape_representation) + * shell_based_surface_model (manifold_surface_shape_representation) + * geometric_curve_set (geometrically_bounded_wireframe_shape_representation) +The enumeration **STEPControl_StepModelType** is intended to define a particular transferring model. +The following values of enumeration are allowed: + +The following table shows which shapes can be translated in which mode: +If TopoDS_Compound contains any other types besides the ones mentioned in the table, these sub-shapes will be ignored. +In case if an OCCT shape cannot be translated according to its mode the result of translation is void. +For further information see *Mapping Open CASCADE Technology shapes to STEP entities* below. +STEP214Control_StepModelTope mode = STEP214Control_ManifoldSolidBrep; +IFSelect_ReturnStatus stat = writer.Transfer(shape,mode); +@subsubsection occt_1624647986_60437967534 Writing the STEP file +Write the STEP file with: +IFSelect_ReturnStatus stat = writer.Write(;filename.stp;); +to give the file name. +@subsection occt_1624647986_6043796754 Mapping Open CASCADE Technology shapes to STEP entities +Only STEP entities that have a corresponding OCCT object and mapping of assembly structures are described in this paragraph. For a full list of STEP entities please refer to Appendix A. +@subsubsection occt_1624647986_60437967541 Assembly structures and product information +The assembly structures are written to the STEP file if parameter write.step.assembly is 1 or 2. +Each TopoDS_Compound is written as an assembly with subshapes of that compound being components of the assembly. The structure of nested compounds is translated to the structure of nested assemblies. Shared subshapes are translated into shared components of assemblies. Shapes that are not compounds are translated into subtypes of shape_representation according to their type (see the next subchapter for details). +A set of STEP entities describing general product information is written to the STEP file together with the entities describing the product geometry, topology and assembly structure. Most of these entities are attached to the entities being subtypes of shape_representation, but some of them are created only one per STEP file. +The table below describes STEP entities, which are created when the assembly structure and product information are written to the STEP file, and shows how many of these entities are created. Note that the appearance of some of these entities depends on the version of the schema (AP214, CD, DIS or IS, or AP203). +  +@subsubsection occt_1624647986_60437967542 Topological shapes + +@subsubsection occt_1624647986_60437967543 Geometrical objects + + +@subsection occt_1624647986_6043796755 Tolerance management +There are four possible values for the uncertainty when writing a STEP file: + * user-defined value of the uncertainty + * minimal value of sub-shapes tolerances + * average value of sub-shapes tolerances + * maximal value of sub-shapes tolerances +The chosen value of the uncertainty is the final value that will be written into the STEP file. +See parameter write.precision.mode. +@subsection occt_1624647986_6043796756 Code architecture +@subsubsection occt_1624647986_60437967561 List of the classes +

package STEPControl

+STEPControl_Controller +STEPControl_Writer +STEPControl_ActorWrite +

package TopoDSToStep

+TopoDSToStep_Builder +TopoDSToStep_WireframeBuilder +TopoDSToStep_MakeBrepWithVoids +TopoDSToStep_MakeFacetedBrep +TopoDSToStep_MakeFacetedBrepAndBrepWithVoids +TopoDSToStep_MakeGeometricCurveSet +TopoDSToStep_MakeManifoldSolidBrep +TopoDSToStep_MakeShellBasedSurfaceModel +TopoDSToStep_FacetedTool +TopoDSToStep_MakeStepFace +TopoDSToStep_MakeStepWire +TopoDSToStep_MakeStepEdge +TopoDSToStep_MakeStepVertex +

package GeomToStep

+GeomToStep_MakeCartesianPoint +GeomToStep_MakeCurve +GeomToStep_MakePolyline +GeomToStep_MakeSurface +For more information refer to CDL. +@subsubsection occt_1624647986_60437967562 API classes +

package STEPControl

+STEPControl_Controller +STEPControl_Writer +STEPControl_ActorWrite +  +For a description of these classes refer to the chapter 4. API for reading/writing STEP. +@subsubsection occt_1624647986_60437967563 Graph of calls +The following diagram illustrates the structure of calls in writing STEP. +The highlighted classes are intended to translate geometry. + + + + + + + + + + + +
+ +
+ + + ![](/user_guides/step/images/step_image004.jpg) +
+@subsection occt_1624647986_6043796757 Example +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{.cpp} +#include STEPControl.hxx +#include STEPControl_Writer.hxx +#include TopoDS_Shape.hxx +#include BRepTools.hxx +#include BRep_Builder.hxx + +Standard_Integer main() +{ +TopoDS_Solid source; +. . . + +STEPControl_Writer writer; +writer.Transfer(source, STEPControl_ManifoldSolidBrep); + +// Translates TopoDS_Shape into manifold_solid_brep entity +writer.Write(;Output.stp;); +// writes the resulting entity in the STEP file + +} +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +@section occt_1624647986_1430038387 API for reading/writing STEP +@subsection occt_1624647986_14300383871 Overview +This chapter contains a description of packages, which provide API for translating OCCT shapes into STEP files and vice versa. +Package STEPControl provides API for reading and writing STEP files. This package deals with OCCT shapes. It includes five API classes: + * STEPControl_Controller - for initializing the STEP norm, + * STEPControl_Reader - for reading STEP files, + * STEPControl_Writer - for writing STEP files, + * STEPControl_ActorRead - actor which performs translation of a STEP entity into an OCCT shape, + * STEPControl_ActorWrite – actor, which performs translation of an OCCT shape into a STEP entity. +@subsection occt_1624647986_14300383872 Package STEPControl +@subsubsection occt_1624647986_143003838721 General description +This package provides tools to translate STEP entities to OCCT shapes and vice versa. +STEP AP 214 and AP 203 entities can be read and translated. +File that is produced by this component conforms to either STEP AP214 (CD, DIS or IS version) or AP203 schema, according to parameter write.step.schema. +The result of importing a STEP file is an OCCT shape. The result of exporting an OCCT geometrical or topological object is a STEP file that conforms to AP 214 or AP203. +The package contains the following classes: +class STEPControl_Controller +class STEPControl_Reader +class STEPControl_Writer +class STEPControl_ActorRead +class STEPControl_ActorWrite +@subsubsection occt_1624647986_143003838722 Enumeration STEPControl_StepModelType +enum STEPControl_StepModelType { +STEPControl_AsIs, +STEPControl_ManifoldSolidBrep, +STEPControl_BrepWithVoids, +STEPControl_FacetedBrep, +STEPControl_FacetedBrepAndBrepWithVoids, +STEPControl_ShellBasedSurfaceModel, +STEPControl_GeometricCurveSet, +STEPControl_Hybrid +} +Purpose: This enumeration is intended to define a particular transferring model for writing STEP. The following values of enumeration are allowed: + +@subsubsection occt_1624647986_143003838723 Class STEPControl_Controller +

General description

+This class is intended to provide an appropriate initialization of the STEP norm, namely it includes a set of necessary parameters for STEP translation. +After completing the initialization the STEP norm can be used. +Inheritance +XSControl_Controller +MMgt_TShared +Standard_Trancient + +

Methods

+
Constructors
+ * STEPControl_Controller(); +Purpose: Initializes the use of the STEP norm in the first call. Creates an object with default parameters. +
Method for performing initialization
+ * STEPControl_Controller::Init +static Standard_Boolean Init(); +Purpose: Performs standard initialization creating a controller object for the STEP norm. Returns True. +
Method for creating a STEP Model object
+ * STEPControl_Controller::NewModel +Handle_Interface_InterfaceModel NewModel() const; +Purpose: Creates a new empty model ready to receive data of the STEP norm. Sets the Header of the model to default values from the STEP template). +. +
Method for getting the actor object
+ * STEPControl_Controller::ActorRead +Handle_Transfer_ActorOfTransientProcess ActorRead( +const Handle(Interface_InterfaceModel)& model) const; +Purpose: Returns the actor object for reading (actually, it is of the type STEPControl_ActorRead). +
Method for translating an Open CASCADE Technology shape
+ * STEPControl_Controller::TransferWriteShape +virtual IFSelect_ReturnStatus TransferWriteShape(const TopoDS_Shape& shape, +const Handle(Transfer_FinderProcess)& FP, +const Handle(Interface_InterfaceModel)& model, +const Standard_Integer modetrans = 0) const; +Purpose: Translates an OCCT shape into a STEP entity and adds it to the interface model model. modetrans defines the type of the resulting STEP entity: +0 - autodetect according to the type of the shape. +1 - faceted_brep +2 - shell_based_surface_model +3 - manifold_solid_brep +4 - geometric_curve_set +Returns: +     IFSelect_RetDone: OK +     IFSelect_RetError: if modetrans is not equal to 0,1,2,3,4, or model is not a STEP one. +     IFSelect_Fail: if result is null. +@subsubsection occt_1624647986_143003838724 Class STEPControl_Reader +

General description

+This high level class performs the reading of a STEP file and translating its contents into an OCCT shape. Only geometrical and topological entities conformant to the STEP AP 214 and the AP 203 formats can be translated into OCCT shapes. The result of translation is an OCCT topological shape. +Inheritance +XSControl_Reader +This class complements the XSControl_Reader class (deals directly with WorkSession object). +

Methods

+
Constructors
+STEPControl_Reader(); +Purpose: Creates a reader and initializes a new controller with the help of STEPControl_Controller::Init(). +STEPControl_Reader( const Handle(XSControl_WorkSession)& WS, +const Standard_Boolean scratch = Standard_True); +Purpose: Creates a reader and defines its work session. If scratch is true the method sets a new interface model. +
Method for dealing with STEP Model
+ * STEPControl_Reader::StepModel +Handle_StepData_StepModel StepModel() const; +Purpose: Returns a STEP Model. +
Method for performing translation
+ * STEPControl_Reader::TransferRoot +Standard_Boolean TransferRoot(const Standard_Integer num = 1) +Purpose: Translates a STEP root specified by its rank. Performs translation with the help of method XSControl_Reader::TransferOneRoot. +@subsubsection occt_1624647986_143003838725 Class STEPControl_Writer +

General description

+This class is intended to create and write a file compliant to STEP AP 214 or to AP203 out of OCCT shapes. The file produced by this component conforms to STEP AP214 or AP203. This component gives a possibility to write a STEP file containing the following models (shape_representations): +     faceted_brep +     shell_based_surface_model +     manifold_solid_brep +     geometric_curve_set +The write mode is selected by specifying the appropriate parameter. +Export into a STEP file can be performed on the basis of either an already existing STEP model (its representation in the memory) or a new one. +The translation of OCCT shapes (which can be a 2D or a 3D geometrical or topological object) into a STEP file is fulfilled in the following steps: + * Setting the translation parameters + * The translation. It can be performed in one or several operations. Each operation defines a root in the STEP file. + * Writing the STEP file. The output file is specified by its name. +

Methods

+
Constructors
+STEPControl_Writer(); +Purpose: Creates a writer, initializes a default STEPControl_Controller and sets a new work session. +STEPControl_Writer( const Handle(XSControl_WorkSession)& WS, +const Standard_Boolean scratch = Standard_True); +Purpose: Creates a writer, initializes a default STEPControl_Controller with an already existing WorkSession object. If scratch if True, this method clears the already recorded data. +
Methods for dealing with the uncertainty value
+ * STEPControl_Writer::SetTolerance +void SetTolerance(const Standard_Real Tol) ; +Purpose: Sets the value of tolerance, which will be written into a file as a value of uncertainty. + * STEPControl_Writer::UnsetTolerance +void UnsetTolerance() ; +Purpose: Unsets the tolerance set by method SetTolerance. The value of uncertainty will be then calculated as an average tolerance of the OCCT shape. +
Methods for dealing with a WorkSession object
+ * STEPControl_Writer::SetWS +void SetWS( const Handle(XSControl_WorkSession)& WS, +const Standard_Boolean scratch = Standard_True) ; +Purpose: Sets an existing WorkSession WS. + * STEPControl_Writer::WS +Handle_XSControl_WorkSession WS() const; +Purpose: Returns a current WorkSession object. +
Method for obtaining a model object
+ * STEPControl_Writer::Model +Handle_StepData_StepModel Model( +const Standard_Boolean newone = Standard_False) ; +Purpose: Returns a produced Model. Produces a new one if such is not yet produced or if newone is True. +
Method for performing the transfer process
+ * STEPControl_Writer::Transfer +IFSelect_ReturnStatus Transfer( const TopoDS_Shape& sh, +const STEPControl_StepModelType mode) ; +Purpose: Translates a shape sh to STEP entities. Allowed modes are: +STEPControl_AsIs                                             to select the resulting entity type automatically, according to the type of the OCCT shape to translate it into its highest possible model, +STEPControl_ManifoldSolidBrep                       to translate into manifold_solid_brep or brep_with_voids, +STEPControl_ShellBasedSurfaceModel              to translate into shell_based_surface_model, +STEPControl_FacetedBrep                                to translate into faceted_brep, +STEPControl_GeometricCurveSet                      to translate into geometric_curve_set. +Returns the transfer status (see Controller from STEPControl) +
Method for creating a STEP file
+ * STEPControl_Writer::Write +IFSelect_ReturnStatus Write(const Standard_CString filename) ; +Purpose: Writes a model into the file filename. Performs this operation with the help of method XSControl_WorkSession::SendAll. +
Method for obtaining statistics
+ * STEPControl_Writer::PrintStatsTransfer +void PrintStatsTransfer( const Standard_Integer what, +const Standard_Integer mode = 0) const; +Purpose: Intended to display all statistics on the last translation performed. Calls method XSControl_TransferWriter::PrintStats. +@subsubsection occt_1624647986_143003838726 Class STEPControl_ActorRead +

General description

+This class is intended for translation of AP214 and AP203 entities of the following types: +     faceted_brep +     brep_wiht_voids +     manifold_solid_brep +     shell_based_surface_model +     geometric_curve_set +     mapped_item +     face_surface +It can also translate assembly structures, shape_definition_representation and shape_representation referencing to the mentioned entities. +The result of translation is Transfer Binder with the resulting OCCT shape. +Inheritance +Transfer_ActorOfTransientProcess +Transfer_ActorOfProcessForTransient +MMgt_TShared +Standard_Trancient +

Methods

+
Constructor
+STEPControl_ActorRead(); +Purpose: Empty constructor. +
Method for recognizing entities
+ * STEPControl_ActorRead::Recognize +virtual Standard_Boolean Recognize( +const Handle(Standard_Transient)& start) ; +Purpose: Returns True if entity start can be translated by this Actor class, i.e. if entity type is one of the types listed above. +
Method for performing translation
+ * STEPControl_ActorRead::Transfer +virtual Handle_Transfer_Binder Transfer( +const Handle(Standard_Transient)& start, +const Handle(Transfer_TransientProcess)& TP) ; +Purpose: Performs access to transferable entities and translates them with the help of the class StepToTopoDS_Builder. Sets translation parameters with the help of method PrepareUnits. + * STEPControl_ActorRead::PrepareUnits +void PrepareUnits( const Handle(Standard_Transient)& start, +const Handle(Transfer_TransientProcess)& TP) ; +Purpose: If start is shape_definition_representation or shape_repesentation entity, this method sets the length and plane angle units taken from entity for performing translation. Sets the tolerance value to uncertainty if read.precision.mode is ;File;. +@subsubsection occt_1624647986_143003838727 Class STEPControl_ActorWrite +

General description

+This class provides an actor for performing the translation of OCCT shapes to STEP AP203 or AP214 entities according to the write mode and schema version (CD , DIS or IS). +An OCCT shape can be translated to STEP using one of the following models (shape_representations): +     manifold_solid_brep (advanced_brep_shape_representation) +     brep_with_voids (advanced_brep_shape_representation) +     faceted_brep (faceted_brep_shape_representation) +     shell_based_surface_model (manifold_surface_shape_representation) +     geometric_curve_set (geometrically_bounded_wireframe_shape_representation) +During the translation the actor computes the uncertainty value to be applied to the resulting model (shape_representation). +This actor also writes STEP assembly structures (according to group mode, which is initialised by the value of parameter write.step.assembly). +This parameter is used to create a STEP entity with or without assemblies. If write.step.assembly is 1, assemblies are created, if it is 0 assemblies are not created. If it is 2, assemblies are created for compound shapes containing more than one component. +The transfer mode is enumeration STEPControl_StepModeType, which defiles the resulting model. +Inheritance +Transfer_ActorOfFinderProcess +Transfer_ActorOfProcessForFinder +MMgt_TShared +Standard_Transient +

Methods

+
Constructors
+STEPControl_ActorWrite(); +Purpose: Sets the write mode to shell_based_surface_model, group mode to 0 and the default value for the uncertainty that will be computed as an average tolerance for each shape. +
Method for setting and obtaining translation parameters:
+ * STEPControl_ActorWrite::SetMode +void SetMode(const STEPControl_StepModelType M) ; +Purpose: Sets the write mode. M can be of the following values: +STEPControl_AsIs                                             to select the resulting entity type automatically, according to the type of OCCT shape to translate it into its highest possible model, +STEPControl_ManifoldSolidBrep                       to translate into manifold_solid_brep or brep_with_voids, +STEPControl_ShellBasedSurfaceModel              to translate into shell_based_surface_model, +STEPControl_FacetedBrep                                to translate into faceted_brep, +STEPControl_GeometricCurveSet                      to translate into geometric_curve_set. + * STEPControl_ActorWrite::Mode +STEPControl_StepModelType Mode(); +Purpose: Returns the write mode. + * STEPControl_ActorWrite::SetGroupMode +void SetGroupMode(const Standard_Integer mode) ; +Purpose. Sets the group mode, which determines whether assemblies should be created or not. mode can be one of the following values: +0 -        result of translating OCCT shape does not contain assemblies, +1 -        result of translating OCCT shape contains assemblies, +1 -      result of translating OCCT shape can either contain assemblies or not, depending on the original shape. + * STEPControl_ActorWrite::GroupMode +Standard_Integer GroupMode() const; +Purpose: Returns the group mode. + * STEPControl_ActorWrite::SetTolerance +void SetTolerance(const Standard_Real Tol) ; +Purpose: Sets the value of uncertainty for STEP entities. If Tol is more than zero, then Tol will be taken as an uncertainty, if Tol is less than the zero value of the uncertainty it will be calculated as an average tolerance of the shape. +
Method for recognizing entities
+ * STEPControl_ActorWrite::Recognize +virtual Standard_Boolean Recognize(const Handle(Transfer_Finder)& start) ; +Purpose. Checks whether a shape can be translated into a STEP entity according to a defined model. This method returns True if the shape referenced by start can be translated and False if it cannot. +TopoDS_Solid, TopoDS_Shell can be translated into manifold_solid_brep. +TopoDS_Solid can be translated into brep_with_voids. +TopoDS_Solid can be translated into faceted_brep if all its surfaces are planes and all its curves are lines. +TopoDS_Solid, TopoDS_Shell, TopoDS_Face can be translated into shell_based_surface_model. +Any OCCT shape can be translated into geometric_curve_set. +
Method for performing the translation
+ * STEPControl_ActorWrite::Transfer +virtual Handle_Transfer_Binder Transfer( +const Handle(Transfer_Finder)& start, +const Handle(Transfer_FinderProcess)& FP) ; +Purpose: Translates a single OCCT shape referenced by start into a STEP entity according to the tolerance, the write mode and the group mode. +Performs translation with the help of package TopoDSToStep and its Make... classes. Returns the transfer binder. +See also: Package TopoDSToStep, classes TopoDSToStep_Make... +@subsection occt_1624647986_14300383873 Package STEPConstruct +@subsubsection occt_1624647986_143003838731 General description +This package defines tools for creation and investigation of specific STEP constructs used for representing various kinds of data, such as product and assembly structure, unit contexts, and associated information. These structures are created according to the current schema (AP203, AP214 CD2, DIS or IS), which is defined by the parameter write.step.schema. +The package contains the following classes: +class STEPConstruct_Styles +class STEPConstruct_Part +@subsubsection occt_1624647986_143003838732 Class STEPConstruct_Styles +

General description

+This class provides a mechanism for reading and writing shape styles (such as color) to and from a STEP file. This tool maintains a list of styles, either taking them from the STEP model (when reading), or filling it by calls to AddStyle or directly (for writing). Some methods deal with general structures of styles and presentations in STEP, but there are methods dealing with a particular implementation of colors (implemented in accordance with the ;Recommended Practices for colors and layers;). +

Methods

+
Constructors
+STEPConstruct_Styles(); +Purpose: Empty constructor +STEPConstruct_Styles(const Handle(XSControl_WorkSession)& WS); +Purpose: Creates an object and calls Init +
Method for initializing the object
+ * STEPConstruct_Styles::Init +Standard_Boolean Init(const Handle(XSControl_WorkSession)& WS) ; +Purpose: Initializes a tool; returns True if succeeded. The XSControl_WorkSession object is used to access data +
Methods for dealing with styles
+ * STEPConstruct_Styles::NbStyles +Standard_Integer NbStyles() const; +Purpose: Returns the number of defined styles. + * STEPConstruct_Styles::Style +Handle_StepVisual_StyledItem Style(const Standard_Integer i) const; +Purpose: Returns a style with a given index + * STEPConstruct_Styles::ClearStyles +void ClearStyles() ; +Purpose: Clears all defined styles + * STEPConstruct_Styles::AddStyle +void AddStyle(const Handle(StepVisual_StyledItem)& style) ; +Purpose: Adds a style to a sequence (defines a style). + * STEPConstruct_Styles::AddStyle +Handle_StepVisual_StyledItem AddStyle( +const Handle(StepRepr_RepresentationItem)& item, +const Handle(StepVisual_PresentationStyleAssignment)& PSA, +const Handle(StepVisual_StyledItem)& Override) ; +Purpose: Creates a style linking giving PSA (presentation_style_assignment) to the item, and adds it to the sequence of stored styles. If Override is not Null, then the resulting style will be of the subtype overriding_styled_item (else just simple styled_item). + * STEPConstruct_Styles::AddStyle +Handle_StepVisual_StyledItem AddStyle( const TopoDS_Shape& Shape, +const Handle(StepVisual_PresentationStyleAssignment)& PSA, +const Handle(StepVisual_StyledItem)& Override) ; +Purpose: Creates a style linking giving PSA (presentation_style_assignment) to the Shape, and adds it to the sequence of stored styles. If Override is not Null, then the resulting style will be of the subtype overriding_styled_item (else just simple styled_item). The Shape is used to find a corresponding STEP entity by call to STEPConstruct::FindEntity(), then the previous method is called. + * STEPConstruct_Styles::CreateMDGPR +Standard_Boolean CreateMDGPR(const Handle(StepRepr_RepresentationContext)& Context) ; +Purpose: Creates MDGPR (MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_ REPRESENTATION), fills it with all the styles previously defined, and adds it to the model. + * STEPConstruct_Styles::FindContext +Handle_StepRepr_RepresentationContext FindContext(const TopoDS_Shape& Shape) const; +Purpose: Searches the STEP model for the RepresentationContext in which given shape is defined. This context (if found) can be used then in call to CreateMDGPR() + * STEPConstruct_Styles::LoadStyles +Standard_Boolean LoadStyles() ; +Purpose: Searches the STEP model for the MDGPR (MECHANICAL_DESIGN_GEOMETRIC_ PRESENTATION_REPRESENTATION) or DM (draughting_model) entities (which bring styles) and reads styles from these entities, thus filling the sequence of styles. +
Methods for dealing with colors
+ * STEPConstruct_Styles::MakeColorPSA +Handle_StepVisual_PresentationStyleAssignment MakeColorPSA( +const Handle(StepRepr_RepresentationItem)& item, +const Handle(StepVisual_Colour)& SurfCol, +const Handle(StepVisual_Colour)& CurveCol) const; +Purpose: Creates a presentation_style_assignment entity defining two colors (for filling surfaces and curves) + * STEPConstruct_Styles::GetColorPSA +Handle_StepVisual_PresentationStyleAssignment GetColorPSA( +const Handle(StepRepr_RepresentationItem)& item, +const Handle(StepVisual_Colour)& Col) ; +Purpose: Returns a PresentationStyleAssignment entity, which defines the surface and curve colors as Col. This PSA is either created or taken from the internal map where all PSAs are created by this method are remembered. + * STEPConstruct_Styles::GetColors +Standard_Boolean GetColors( +const Handle(StepVisual_StyledItem)& style, +Handle(StepVisual_Colour)& SurfCol, +Handle(StepVisual_Colour)& BoundCol, +Handle(StepVisual_Colour)& CurveCol) const; +Purpose: Extract color definitions from the style entity. For each type of color supported, the result can be either NULL if it is not defined by that style, or the last definition (if they are one or more) +
Methods for converting a STEP and Open CASCADE Technology color definition
+ * STEPConstruct_Styles::EncodeColor +Handle_StepVisual_Colour EncodeColor(const Quantity_Color& Col) ; +Purpose: Creates a STEP color entity from a given Quantity_Color. The analysis is performed for whether the color corresponds to the one of standard colors predefined in STEP. In that case, draughting_predefined_colour entity is created instead of rgb_colour. + * STEPConstruct_Styles::DecodeColor +Standard_Boolean DecodeColor(const Handle(StepVisual_Colour)& Colour,Quantity_Color& Col) ; +Purpose: Decodes STEP color and fills the Quantity_Color. Returns True if OK or False if color is not recognized +@subsubsection occt_1624647986_143003838733 Class STEPConstruct_Part +

General description

+Provides tools for creating STEP structures associated with shape_definition_representation, such as product, product_definition_formation etc., as required by the current schema (parameter write.step.schema). Also allows investigating and modifying this data. +

Methods

+
Constructors
+STEPConstruct_Part(); +Purpose: Empty constructor +
Methods for initializing and obtaining shape_definition_representation
+ * STEPConstruct_Part::MakeSDR +void MakeSDR( const Handle(StepShape_ShapeRepresentation)& aShape, +const Handle(TCollection_HAsciiString)& aName, +const Handle(StepBasic_ApplicationContext)& AC) ; +Purpose: Creates shape_definition_representation according to the currently active schema (AP203 or AP214 CD2, DIS or IS), which is taken from parameter write.step.schema. Creates all necessary product description entities as well. + * STEPConstruct_Part::ReadSDR +void ReadSDR(const Handle(StepShape_ShapeDefinitionRepresentation)& aSDR) ; +Purpose: Sets the current SDR (shape_definition_representation) to the specified shape_definition_ representation aSDR + * STEPConstruct_Part::SDRValue +Handle_StepShape_ShapeDefinitionRepresentation SDRValue() const; +Purpose: Returns the current SDR or Null if no SDR is set or created +
Method for obtaining the done status
+ * STEPConstruct_Part::IsDone +Standard_Boolean IsDone() const; +Purpose: Returns the done status +
Method for obtaining shape_representation
+ * STEPConstruct_Part::SRValue +Handle_StepShape_ShapeRepresentation SRValue() const; +Purpose: Returns used_representation from the current SDR or Null if not done +
Methods for dealing with product_context
+ * STEPConstruct_Part::PC +Handle_StepBasic_ProductContext PC() const; +Purpose: Returns the product_context associated with the current SDR + * STEPConstruct_Part::PCname +Handle_TCollection_HAsciiString PCname() const; +Purpose: Returns the Name of the product_context associated with the current SDR + * STEPConstruct_Part::PCdisciplineType +Handle_TCollection_HAsciiString PCdisciplineType() const; +Purpose: Returns the discipline type of the product_context associated with the current SDR + * STEPConstruct_Part::SetPCname +void SetPCname(const Handle(TCollection_HAsciiString)& name) ; +Purpose: Sets the Name of the product_context associated with the current SDR + * STEPConstruct_Part::SetPCdisciplineType +void SetPCdisciplineType(const Handle(TCollection_HAsciiString)& label); +Purpose: Sets the discipline type of the product_context associated with the current SDR +
Methods dealing with application_context
+ * STEPConstruct_Part::AC +Handle_StepBasic_ApplicationContext AC() const; +Purpose: Returns the application_context associated with the current SDR + * STEPConstruct_Part::ACapplication +Handle_TCollection_HAsciiString ACapplication() const; +Purpose: Returns the application of the application_context associated with the current SDR + * STEPConstruct_Part::SetACapplication +void SetACapplication(const Handle(TCollection_HAsciiString)& text) ; +Purpose: Sets the application of the application_context associated with the current SDR + * STEPConstruct_Part::PDC +Handle_StepBasic_ProductDefinitionContext PDC() const; +Purpose: Returns the product_definition_context associated with the current SDR + * STEPConstruct_Part::PDCname +Handle_TCollection_HAsciiString PDCname() const; +Purpose: Returns the name of the product_definition_context associated with the current SDR + * STEPConstruct_Part::PDCstage +Handle_TCollection_HAsciiString PDCstage() const; +Purpose: Returns the life cycle stage of the product_definition_context associated with the current SDR + * STEPConstruct_Part::SetPDCname +void SetPDCname(const Handle(TCollection_HAsciiString)& label) ; +Purpose: Sets the name of the product_definition_context associated with the current SDR + * STEPConstruct_Part::SetPDCstage +void SetPDCstage(const Handle(TCollection_HAsciiString)& label) ; +Purpose: Sets the life cycle stage of the product_definition_context associated with the current SDR +
Methods dealing with the product
+ * STEPConstruct_Part::Product +Handle_StepBasic_Product Product() const; +Purpose: Returns the product associated with the current SDR + * STEPConstruct_Part::Pid +Handle_TCollection_HAsciiString Pid() const; +Purpose: Returns ID of the product associated with the current SDR + * STEPConstruct_Part::Pname +Handle_TCollection_HAsciiString Pname() const; +Purpose: Returns the name of the product associated with the current SDR + * STEPConstruct_Part::Pdescription +Handle_TCollection_HAsciiString Pdescription() const; +Purpose: Returns the description of the product associated with the current SDR + * STEPConstruct_Part::SetPid +void SetPid(const Handle(TCollection_HAsciiString)& id) ; +Purpose: Sets ID of the product associated with the current SDR + * STEPConstruct_Part::SetPname +void SetPname(const Handle(TCollection_HAsciiString)& label) ; +Purpose: Sets the name of the product associated with the current SDR + * STEPConstruct_Part::SetPdescription +void SetPdescription(const Handle(TCollection_HAsciiString)& text) ; +Purpose: Sets the description of the product associated with the current SDR +
Methods dealing with product_definition_formation
+ * STEPConstruct_Part::PDF +Handle_StepBasic_ProductDefinitionFormation PDF() const; +Purpose: Returns the product_definition_formation associated with the current SDR + * STEPConstruct_Part::PDFid +Handle_TCollection_HAsciiString PDFid() const; +Purpose: Returns the ID of the product_definition_formation associated with the current SDR + * STEPConstruct_Part::PDFdescription +Handle_TCollection_HAsciiString PDFdescription() const; +Purpose: Returns the description of the product_definition_formation associated with the current SDR + * STEPConstruct_Part::SetPDFid +void SetPDFid(const Handle(TCollection_HAsciiString)& id) ; +Purpose: Sets the ID of the product_definition_formation associated with the current SDR + * STEPConstruct_Part::SetPDFdescription +void SetPDFdescription(const Handle(TCollection_HAsciiString)& text) ; +Purpose: Sets the description of the product_definition_formation associated with the current SDR +
Methods dealing with product_definition
+ * STEPConstruct_Part::PD +Handle_StepBasic_ProductDefinition PD() const; +Purpose: Returns the product_definition associated with the current SDR + * STEPConstruct_Part::PDdescription +Handle_TCollection_HAsciiString PDdescription() const; +Purpose: Returns the description of the product_definition associated with the current SDR + * STEPConstruct_Part::SetPDdescription +void SetPDdescription(const Handle(TCollection_HAsciiString)& text) ; +Purpose: Sets the description of the product_definition associated with the current SDR +
Methods dealing with product_definition_shape
+ * STEPConstruct_Part::PDS +Handle_StepRepr_ProductDefinitionShape PDS() const; +Purpose: Returns the product_definition_shape associated with the current SDR + * STEPConstruct_Part::PDSname +Handle_TCollection_HAsciiString PDSname() const; +Purpose: Returns the name of the product_definition_shape associated with the current SDR + * STEPConstruct_Part::PDSdescription +Handle_TCollection_HAsciiString PDSdescription() const; +Purpose: Returns the description of the product_definition_shape associated with the current SDR + * STEPConstruct_Part::SetPDSname +void SetPDSname(const Handle(TCollection_HAsciiString)& label) ; +Purpose: Sets the name of the product_definition_shape associated with the current SDR + * STEPConstruct_Part::SetPDSdescription +void SetPDSdescription(const Handle(TCollection_HAsciiString)& text) ; +Purpose: Sets the description of the product_definition_shape associated with the current SDR +
Methods dealing with product_related_product_category
+ * STEPConstruct_Part::PRPC +Handle_StepBasic_ProductRelatedProductCategory PRPC() const; +Purpose: Returns the product_related_product_category associated with the current SDR + * STEPConstruct_Part::PRPCname +Handle_TCollection_HAsciiString PRPCname() const; +Purpose: Returns the name of the product_related_product_category associated with the current SDR + * STEPConstruct_Part::PRPCdescription +Handle_TCollection_HAsciiString PRPCdescription() const; +Purpose: Returns the description of the product_related_product_category associated with the current SDR + * STEPConstruct_Part::SetPRPCname +void SetPRPCname(const Handle(TCollection_HAsciiString)& label) ; +Purpose: Sets the name of the product_related_product_category associated with the current SDR + * STEPConstruct_Part::SetPRPCdescription +void SetPRPCdescription(const Handle(TCollection_HAsciiString)& text) ; +Purpose: Sets the description of the product_related_product_category associated with the current SDR +@section occt_1624647986_383610185 Physical STEP file reading and writing +The following paragraphs describe the loading of data from a physical STEP file into a STEP model and data writing from a STEP model to a STEP file. +@subsection occt_1624647986_3836101851 Architecture of STEP Read and Write classes +@subsubsection occt_1624647986_38361018511 General principles +To perform data loading from a STEP file and to translate this data it is necessary to create correspondence between the EXPRESS schema and the structure of CDL classes. There are two possibilities to organize such correspondence: the so-called early binding and late binding. +Late binding means that the processor works with a description of the schema. The processor builds a dictionary of entities and can recognize and read any entity that is described in the schema. To change the behavior and the scope of processor based on late binding it is enough to change the description of the schema. However, this binding has some disadvantages (for example low speed of reading process). +In case of early binding, the structure of CDL classes is created beforehand with the help of a specific automatic tool or manually. If the processor finds an entity that is not found in this schema, it will simply be ignored. The processor calls constructors of appropriate classes and their read methods. To add a new type in the scope of the processor it is necessary to create a class corresponding to the new entity. +The STEP processor is based on early binding principles. It means that specific classes for each EXPRESS type have been created with the help of an automatic tool from the EXPRESS schema. There are two CDL classes for each EXPRESS type. The first class (named the representing class) represents the STEP entity in memory. The second one (RW - class) is intended to perform the initialization of the representing class and to output data to an intermediate structure to be written in a STEP file. +@subsubsection occt_1624647986_38361018512 Complex entities +EXPRESS schema allows multiple inheritance. Entities that are built on the basis of multiple inheritance are called complex entities. Multiple inheritance is not available in CDL. EXPRESS enables any type of complex entities that can be inherited from any EXPRESS type. In the manner of early binding it is not possible to create a CDL class for any possible complex type. Thus, only widespread complex entities have corresponding representing classes and RW-classes that are created manually beforehand. +@subsection occt_1624647986_3836101852 Physical file reading +Physical file reading consists of the following steps: +   1.Loading a STEP file and syntactic analysis of its contents +   2.Mapping STEP entities to the array of strings +   3.Creating empty OCCT objects representing STEP entities +   4.Initializing OCCT objects +   5.Building a references graph +@subsubsection occt_1624647986_38361018521 Loading a STEP file and syntactic analysis of its contents +In the first phase, a STEP file is syntactically checked and loaded in memory as a sequence of strings. +Syntactic check is performed on the basis of rules defined in step.lex and step.yacc files. Files step.lex and step.yacc are located in the StepFile nocdlpack development unit. These files describe text encoding of STEP data structure (for additional information see ISO 10303 Part 21). The step.lex file describes the lexical structure of the STEP file. It describes identifiers, numbers, delimiters, etc. The step.yacc file describes the syntactic structure of the file, such as entities, parameters, and headers. +These files have been created only once and need to be updated only when norm ISO 10303-21 is changed. +@subsubsection occt_1624647986_38361018522 Mapping STEP entities to arrays of strings +For each entity specified by its rank number the arrays storing its identifier, STEP type and parameters are filled. +@subsubsection occt_1624647986_38361018523 Creating empty Open CASCADE Technology objects that represent STEP entities +For each STEP entity an empty OCCT object representing this entity is created. A map of correspondence between entity rank and OCCT object is created and filled out. If a STEP entity is not recognized by the STEP processor then the StepData_UndefinedEntity object is created. +@subsubsection occt_1624647986_38361018524 Initializing Open CASCADE Technology objects +Each OCCT object (including StepData_UndefinedEntity) is initialized by its parameters with the help of the appropriate RW - class. If some entity has another entity as its parameter, the object that represents the latter entity will be initialized immediately. All initialized objects are put into a special map to avoid repeated initialization. +@subsubsection occt_1624647986_38361018525 Building a graph +The final phase is building a graph of references between entities. For each entity its RW-class is used to find entities referenced by this entity. Back references are built on the basis of direct references. In addition to explicit references defined in the STEP entities some additional (implicit) references are created for entities representing assembly structures (links from assemblies to their components). +@subsection occt_1624647986_3836101853 How to add a new entity in scope of the STEP processor +If it is necessary to read and translate a new entity by the STEP processor the Reader and Actor scope should be enhanced. Note that some actions to be made for adding a new type are different for simple and complex types. +The following steps should be taken: +1. Create a CDL class representing a new entity. This can be the Stepxxx_NewEntity class where xxx currently are the following: +     Basic +     Geom +     Shape +     Visual +     Repr +     AP214 +     AP203 +Each field of a STEP entity should be represented by a corresponding field of this class. The class should have methods for initializing, setting and obtaining fields and it should also have the default constructor. +2. Create the RWStepxxx_RWNewEntity class with a default constructor and methods ReadStep(), WriteStep() and if the entity references other entities, then method Share(). +3. Update file StepAP214_Protocol.cxx. In the constructor StepAP214_Protocol:: StepAP214_Protocol() add the new type to the map of registered types and associate the unique integer identifier with this type. +4. Update file RWStepAP214_ReadWriteModule.cxx. The changes should be the following: +     For simple types: + * Add a static object of class TCollection_AsciiString with name Reco_NewEntity and initialize it with a string containing the STEP type. + * In constructor RWStepAP214_ReadWriteModule::RWStepAP214_ReadWriteModule() add this object onto the list with the unique integer identifier of the new entity type. + * In function RWStepAP214_ReadWriteModule::StepType() add a new C++ case operator for this identifier. +     For complex types: + * In the method RWStepAP214_ReadWriteModule::CaseStep() add a code for recognition the new entity type returning its unique integer identifier. + * In the method RWStepAP214_ReadWriteModule::IsComplex() return True for this type. + * In the method RWStepAP214_ReadWriteModule::ComplexType() fill the list of subtypes composing this complex type. +     For both simple and complex types: + * In function RWStepAP214_ReadWriteModule::ReadStep() add a new C++ case operator for the new identifier and call the RWStepxxx_RWNewEntity class, method ReadStep to initialize the new class. +5. Update file RWStepAP214_GeneralModule.cxx. Add new C++ case operators to functions NewVoid() and FillSharedCase(), and in the method CategoryNumber() add a line defining a category of the new type. +6. Enhance the STEPControl_ActorRead class (methods Recognize() and Transfer()), or class(es) translating some entities, to translate the new entity into an OCCT shape. +@subsection occt_1624647986_3836101854 Physical file writing +Physical file writing consists of the following steps: +   1.Building a references graph +   2.Transferring data from a model to a sequence of strings +   3.Writing the sequence of strings into the file +@subsubsection occt_1624647986_38361018541 Building a references graph +Physical writing starts when STEP model, which was either loaded from a STEP file or created from OCCT shape with the help of translator, is available together with corresponding graph of references. +During this step the graph of references can be recomputed. +@subsubsection occt_1624647986_38361018542 Transferring data from the model to a sequence of strings +For each representing entity from the model a corresponding RW - class is called. RW - class performs the writing of data that is contained in the representing class into an intermediate data structure. The mentioned structure is a sequence of strings in memory. +@subsubsection occt_1624647986_38361018543 Writing the sequence of strings into the file +The sequence of strings is written into the file. This is the last phase of physical STEP writing. +@subsection occt_1624647986_3836101855 How to add a new entity to write in the STEP file. +If it is necessary to write and translate an OCCT shape into a new entity by the STEP processor the Writer and Actor scope should be enhanced. +For a description of steps, which should be taken for adding a new entity type to the STEP processor, see the previous chapter ;Physical file reading;. Then, enhance the STEPControl_ActorWrite class i.e. methods Recognize() and Transfer(), or other classes from TopoDSToStep, to translate the OCCT shape into a new STEP entity. +@section occt_1624647986_1896912212 Using DRAW +@subsection occt_1624647986_18969122121 DRAW STEP Commands Overview +TKXSDRAW toolkit provides commands for testing XSTEP interfaces interactively in the DRAW environment. It provides an additional set of DRAW commands specific for data exchange tasks, which allows loading and writing data files and an analysis of the resulting data structures and shapes. +This section is divided into five parts. Two of them deal with reading and writing a STEP file and are specific for the STEP processor. The first and the forth parts describe some general tools for setting parameters and analyzing the data. Most of them are independent of the norm being tested. Additionally, a table of mentioned DRAW commands is provided. +In the description of commands, square brackets ([]) are used to indicate optional parameters. Parameters given in the angle brackets () and sharps (#) are to be substituted by an appropriate value. When several exclusive variants are possible, a vertical dash (|) is used. +@subsection occt_1624647986_18969122122 Setting the interface parameters +A set of parameters for importing and exporting STEP data is defined in the XSTEP resource file. In XSDRAW, these parameters can be viewed or changed using the command +Draw: param [parameter_name [value]] +Command param with no arguments gives a list of all parameters with their values. When the argument parameter_name is specified, information about this parameter is printed (current value and short description). +The third argument is used to set a new value of the given parameter. The result of the setting is printed immediately. +During all interface operations, the protocol of the process (fail and warning messages, mapping of loaded entities into OCCT shapes etc.) can be output to the trace file. Two parameters are defined in the DRAW session: trace level (integer value from 0 to 9, default is 0), and trace file (default is standard output). +Command xtrace is intended to view and change these parameters: +Draw: xtrace +- prints current settings (e.g.: `Level=1 - Standard Output'); +Draw: xtrace # +- sets trace level to the value #; +Draw: xtrace tracefile.log +- sets the trace file as tracefile.log; and +Draw: xtrace . +- directs all messages to the standard output. +@subsection occt_1624647986_18969122123 Reading a STEP file +For a description of parameters used in reading a STEP file refer to 2.3.3 +For reading a STEP file, the following parameters are defined (see above, the command param): +It is possible either only to load a STEP file into memory (i.e. fill the *InterfaceModel* with data from the file), or to read it (i.e. load and convert all entities to OCCT shapes). +Loading is done by the command +Draw: xload file_name +Once the file is loaded, it is possible to investigate the structure of the loaded data. To find out how you do it, look in the beginning of the analysis subsection. +Reading a STEP file is done by the command +Draw: stepread file_name result_shape_name [selection] +Here a dot can be used instead of a filename if the file is already loaded by xload or stepread. +The optional selection (see below for a description of selections) specifies a set of entities to be translated. If an asterisk `*' is given, all transferable roots are translated. If a selection is not given, the user is prompted to define a scope of transfer interactively: +* root is an entity in the STEP file which is not referenced by another entities +Second parameter of the stepread command defines the name of the loaded shape. +During the STEP translation, a map of correspondence between STEP entities and OCCT shapes is created. +To get information on the result of translation of a given STEP entity use the command +Draw: tpent # +is used. +To create an OCCT shape, corresponding to a STEP entity, use the command +Draw: tpdraw # +is used. +To get the number of a STEP entity, corresponding to an OCCT shape, use the command +Draw: fromshape shape_name +is used. +To clear the map of correspondences between STEP entities and OCCT shapes the command +Draw: tpclear +is used. +@subsection occt_1624647986_18969122124 Analyzing the data transferred +The procedure of analysis of data import can be divided into two stages: +   1.to check the file contents, +   2.to estimate the translation results (conversion and validated ratios). +@subsubsection occt_1624647986_189691221241 Checking file contents +General statistics on the loaded data can be obtained by using the command +Draw: data symbol +Information printed by this command depends on the symbol specified: + +There is a set of special objects, which can be used to operate with a loaded model. They can be of the following types: +A list of these objects defined in the current session can be printed in DRAW by command +Draw: listitems +Command +Draw: givelist selection_name +prints a list of a subset of loaded entities defined by the selection argument: + + +The command listtypes gives a list of entity types, which were encountered in the last loaded file (with a number of STEP entities of each type). +The list cannot be shown for all entities but for a subset of them. This subset is defined by an optional selection argument (for the list of possible values for STEP, see the table above). +Two commands are used to calculate statistics on the entities in the model: +Draw: count counter [selection] +Draw: listcount counter [selection] +The former only prints a count of entities while the latter also gives a list of them. +The optional selection argument, if specified, defines a subset of entities, which are to be taken into account. The first argument should be one of the currently defined counters: +Entities in the STEP file are numbered in the succeeding order. An entity can be identified either by its number or by its label. Label is the letter `#' followed by the rank. To get a label for an entity with a known number, command +Draw: elab # +can be used. +In the same way, command +Draw: enum # +prints a number for the entity with a given label. +The contents of a STEP entity can be obtained by command +Draw: entity # level_of_information +The list of entities referenced by a given entity and the list of entities referencing to it can be obtained by command +Draw: estat # +A STEP assembly can be printed as a tree using the following DRAW command: +Draw: dumpassembly +Information about product names, next_assembly_usage_occurence, shape_definition_representation, context_dependent_shape_representation or mapped_item entities that are involved into the assembly structure will be printed. +@subsubsection occt_1624647986_189691221242 Estimating the results of reading STEP +All the following commands are available only after data is converted into OCCT shapes (i.e. after command 214read). +Command +Draw: tpstat [*|?]symbol [selection] +is provided to get all statistics on the last transfer, including a list of transferred entities with mapping from STEP to OCCT types, as well as fail and warning messages. The parameter symbol defines what information will be printed: + +The sign `*' before parameters n, s, b, t, r makes it work on all entities (not only on roots). The sign ‘?' before n, s, b, t limits the scope of information to invalid entities. +Optional argument selection can limit the action of the command to the selection, not to all entities. +To get help, run this command without arguments. +Example: The following command gives statistics on the result of translation of different types of entities (taking check messages into account) and calculates summary translation ratios. +Draw: tpstat *l +To get information on OCCT shape contents the command +Draw: statshape shape_name +is used. +It outputs the number of each kind of shapes (vertex, edge, wire, etc.) in the shape and some geometrical data (number of C0 surfaces, curves, indirect surfaces, etc.). +The number of faces is returned as a number of references. To obtain the number of single instances, the standard command (from TTOPOLOGY executable) nbshapes can be used. +To analyze the internal validity of the shape, command +Draw: checkbrep shape_name expurged_shape_name +is used. It checks shape geometry and topology for different cases of inconsistency, like self-intersecting wires or wrong orientation of trimming contours. If an error is found, it copies bad parts of the shape with the names ;expurged_subshape_name _#; and generates an appropriate message. If possible this command also tries to find STEP entities the OCCT shape was produced from. +expurged_shape_name will contain the original shape without invalid subshapes. +To get information on tolerances of the shape the command +Draw: tolerance shape_name [min [max] [symbol]] +is used. It outputs maximum, average and minimum values of tolerances for each kind of subshapes having tolerances and for the whole shape in general. +When specifying min and max arguments this command saves shapes with tolerances in the range [min, max] with names shape_name_... and gives their total number. +Symbol is used for specifying the kind of sub-shapes to analyze: v - for vertices, e - for edges, f - for faces, c - for shells and faces. +@subsection occt_1624647986_18969122125 Writing a STEP file +For writing shapes to a STEP file, the following parameters are defined (see above, the command param): +Several shapes can be written in one file. To start writing a new file, enter command +Draw: newmodel +Actually, command newmodel will clear the InterfaceModel to empty it, and the next command will convert the specified shape to STEP entities and add them to the InterfaceModel: +Draw: stepwrite mode shape_name [file_name] +The available modes are following: +     a - ;as is; mode +     m - manifold_solid_brep or brep_with_voids +     f - faceted_brep +     w - geometric_curve_set +     s - shell_based_surface_model +For further information, see ;Performing the OCCT shape translation;. +After a successful translation, if file_name parameter is not specified, the procedure asks you whether to write a STEP model in the file or not: +execution status : 1 +Mode (0 end, 1 file) : +It is necessary to call command +newmodel +in order to perform a new translation of the next OCCT shape. +@subsection occt_1624647986_18969122126 Index of useful XSDRAW commands + +@section occt_1624647986_241758891 Reading from and writing to XDE +The STEPCAFControl package (TKXDESTEP toolkit) provides tools to read and write STEP files to and from XDE format (see XDE User’s Guide). +In addition to the translation of shapes implemented in basic translator, it provides the following: + * STEP assemblies, read as OCCT compounds by basic translator, are translated to XDE assemblies + * Names of products are translated and assigned to assembly components and instances in XDE + * STEP external references are recognized and translated (if external documents are STEP files) + * Colors, layers, materials and validation properties assigned to parts or subparts are translated + * STEP dimensional tolerances are translated +@subsection occt_1624647986_2417588911 Description of the process +@subsubsection occt_1624647986_24175889111 Loading a STEP file +Before performing any other operation, you must load a STEP file with: +STEPCAFControl_Reader reader(XSDRAW::Session(), Standard_False); +IFSelect_ReturnStatus stat = reader.ReadFile(*filename.stp*); +Loading the file only memorizes the data, it does not translate it. +@subsubsection occt_1624647986_24175889112 Checking the loaded STEP file +This step is not obligatory. See a description of this step in paragraph 2.3.2. +@subsubsection occt_1624647986_24175889113 Setting the parameters for translation to XDE +See a description of this step in paragraph 2.3.3. +In addition, the following parameters can be set for XDE translation of attributes: + * Parameter for transferring colors: +reader.SetColorMode(mode); +// mode can be Standard_True or Standard_False + * Parameter for transferring names: +reader.SetNameMode(mode); +// mode can be Standard_True or Standard_False +@subsubsection occt_1624647986_24175889114 Performing the translation of a STEP file to XDE +The following function performs a translation of the whole document: +Standard_Boolean ok = reader.Transfer(doc); +where ;doc;  is a variable which contains a handle to the output document and should have a type Handle(TDocStd_Document). +@subsubsection occt_1624647986_24175889115 Initializing the process of translation from XDE to STEP +Here is how to initialize the process: +STEPCAFControl_Writer aWriter(XSDRAW::Session(),Standard_False); +@subsubsection occt_1624647986_24175889116 Setting the parameters for translation from XDE to STEP +The following parameters can be set for a translation of attributes to STEP: + * Parameter for transferring colors: +aWriter.SetColorMode(mode); +// mode can be Standard_True or Standard_False + * Parameter for transferring names: +aWriter.SetNameMode(mode); +// mode can be Standard_True or Standard_False +@subsubsection occt_1624647986_24175889117 Performing the translation of an XDE document to STEP +You can perform the translation of document by calling the function: +IFSelect_ReturnStatus aRetSt = aWriter.Transfer(doc); +where ;doc;  is a variable, which contains a handle to the input document for transferring and should have a type Handle(TDocStd_Document). +@subsubsection occt_1624647986_24175889118 Writing a STEP file +Write a STEP file with: +IFSelect_ReturnStatus statw = aWriter.WriteFile(;filename.stp;); +or +IFSelect_ReturnStatus statw = writer.WriteFile (S); +where S is OStream + + + diff --git a/dox/user_guides/tobj/images/tobj_image003.png b/dox/user_guides/tobj/images/tobj_image003.png new file mode 100644 index 0000000000000000000000000000000000000000..ffb6b1168ba5907d45e4140605c5d563ceb337ba GIT binary patch literal 10462 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 literal 0 HcmV?d00001 diff --git a/dox/user_guides/tobj/images/tobj_image004.jpg b/dox/user_guides/tobj/images/tobj_image004.jpg new file mode 100644 index 0000000000000000000000000000000000000000..c62b8b9311c4f474df2bb496dedd5efab2e1bbc2 GIT binary patch literal 29798 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 literal 0 HcmV?d00001 diff --git a/dox/user_guides/tobj/images/tobj_image005.png b/dox/user_guides/tobj/images/tobj_image005.png new file mode 100644 index 0000000000000000000000000000000000000000..cf79264f42a169b863df3b91a131f2408c84a585 GIT binary patch literal 2337 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 literal 0 HcmV?d00001 diff --git a/dox/user_guides/tobj/images/tobj_image007.png b/dox/user_guides/tobj/images/tobj_image007.png new file mode 100644 index 0000000000000000000000000000000000000000..3919188a0f14bb61a68bf5700173865041ff2e8f GIT binary patch literal 15992 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

){AMyU+xj-)q+nPcPXz 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�#cawGg=cMdH30ET9FH~ zASL;GJuNNfW6my}ac|7r?OKwO83+4uli3Y66RhhfMbvEhRYPXvGYzSHM+iW4k*nZH z)3BXA<;Yoh2wb(7uk*mMMlbr+jm_`s`FBD_K9=VFE_ZIbRc)8|;a({5OVx1urw9DCUU!0Bwg{PhTV#4Lsy|Bi?ieI$!$)#Z zrEGMwCThj%WHqdpJmM$%3k4(YkRbrCB5kv?8bn@o%oU0|kNd(>soS2l@>IQZpiU7G zn`vUQh)O{Nj2ouBd~=i?YLYd-ATc%}Wf#xBR4FeqgQ{=>NS9tsHycX@>M2jSrV&hQ zmt3@a>ZeUV^I<=3jbd`MeEViEGQ6CX#vM=I^DQK;J@Ir=ImhEC4oSFirJif$=L)4K zR(!&rfcEre~aXAqDK~L9+lfaBMQ`C zdbH$&{;uYzGt`45ON-K=B4&njia6&6wz^I`hbQVNI~l|;Hmks4?^2*hA0Vl2N8XCs zgF1ENl4A&QkR9VPZKxaBx2y?AVY2Rgj!Ez3>uL2vDQ6pO<_dKg`D#_4{L7t@N*$0J zFokj*>oxwzXLU=(kzEF4zoi{|@u&uAyVx1Z8(g+PubF1(Zhs={!O7x_-;f4OJL)@gSRolJv+faADdFr|8ySJ-@$x@;6JY@`@tv z?U5Z$3nHK5{o?1SR8INTm$ywt*28~ri~c&v|Mtn>agj7J8uD!_Yg51FfK;dJt3Z4e ziLYDC2m>X^;=WB4egk%jMwE7V zm9@PH9J{3wM0i1L9^VIoGJddBwBX<#_iM6p*czb+I~c^&55OoOi<6+Zz1YbWcC zME<(ipm?hp+9xscx=i{6_Af z3B`@MYk|s&GE`-z>PDmD)Ig`t8HAe>q34P2@a(4ulh6WfaFndo^wo%uvPt-_(xfHB z76O8bp$dyjXknzUJ@#d{_z{nW%OSB%twZpc(l=?wruv#N=+mqLzb`$M^tLHZgFTGC z!iTyy!C?Xov@|bf4hA~y>{88?lQmwcbJm zbIQ(84@aEN;eJ=iOVy9@`m5QBtThLqf~82tJrGD}#;PjPLSaNF^km{iRv=@H|M#fX zi67Cel#rlxdzSjTq|II;eSPIx<+8>zRZn!>IA4*TejDi=X@}hTMftjc+J{U%t7~YF z@aC2E{v}=f&1n9eR{no-tc5#r3p%U{Zf(>`L!@6bzFWVLwrDgExqW|rxAi}7|10;Q vRNQID8)b!?0=h=wya@ja^WcEIrrXiX`j=4oBRf3J?t$ku1~ptXA*TNqrs}Gy literal 0 HcmV?d00001 diff --git a/dox/user_guides/visualization/images/visualization_image011.jpg b/dox/user_guides/visualization/images/visualization_image011.jpg new file mode 100644 index 0000000000000000000000000000000000000000..c4c601fd2d8ae16080b25665fcaf11e8116b8873 GIT binary patch literal 19184 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 Hp8CH4Fd!Qe literal 0 HcmV?d00001 diff --git a/dox/user_guides/visualization/images/visualization_image012.jpg b/dox/user_guides/visualization/images/visualization_image012.jpg new file mode 100644 index 0000000000000000000000000000000000000000..fa00342f5a593b96c6eb090a29f73e3128e951d0 GIT binary patch literal 20641 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 literal 0 HcmV?d00001 diff --git a/dox/user_guides/visualization/images/visualization_image014.jpg b/dox/user_guides/visualization/images/visualization_image014.jpg new file mode 100644 index 0000000000000000000000000000000000000000..5dc35a8e75e11ce0954fe96bd8cb29e52c533bf2 GIT binary patch literal 26424 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 literal 0 HcmV?d00001 diff --git a/dox/user_guides/visualization/images/visualization_image015.jpg b/dox/user_guides/visualization/images/visualization_image015.jpg new file mode 100644 index 0000000000000000000000000000000000000000..4ca6f80027ba1f6d0ea37325bc679bf9069dc214 GIT binary patch literal 9591 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 O0WG!vS-dA=@Ba#j?In2t literal 0 HcmV?d00001 diff --git a/dox/user_guides/visualization/images/visualization_image016.jpg b/dox/user_guides/visualization/images/visualization_image016.jpg new file mode 100644 index 0000000000000000000000000000000000000000..7251d5140593d71fbc4ff419051c29b75083cef4 GIT binary patch literal 4464 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 literal 0 HcmV?d00001 diff --git a/dox/user_guides/visualization/images/visualization_image017.jpg b/dox/user_guides/visualization/images/visualization_image017.jpg new file mode 100644 index 0000000000000000000000000000000000000000..e4db85142001e0bca286ac059919b644daf5d670 GIT binary patch literal 20262 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 literal 0 HcmV?d00001 diff --git a/dox/user_guides/visualization/images/visualization_image018.jpg b/dox/user_guides/visualization/images/visualization_image018.jpg new file mode 100644 index 0000000000000000000000000000000000000000..eb00f9e16526e4fd2abc8c4c6325c51e3085f615 GIT binary patch literal 16485 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 literal 0 HcmV?d00001 diff --git a/dox/user_guides/visualization/images/visualization_image020.jpg b/dox/user_guides/visualization/images/visualization_image020.jpg new file mode 100644 index 0000000000000000000000000000000000000000..f0e8b6f3486118eb8bcdfe2fd72610eb3dc0db84 GIT binary patch literal 20701 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 S%SE2jY`yq<6oL&q^WOj*Zi_Mi literal 0 HcmV?d00001 diff --git a/dox/user_guides/visualization/images/visualization_image023.png b/dox/user_guides/visualization/images/visualization_image023.png new file mode 100644 index 0000000000000000000000000000000000000000..409b08159e6db95f5b76bfbc2491e0e155731784 GIT binary patch literal 9080 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 literal 0 HcmV?d00001 diff --git a/dox/user_guides/visualization/images/visualization_image024.png b/dox/user_guides/visualization/images/visualization_image024.png new file mode 100644 index 0000000000000000000000000000000000000000..a382525f18af9cd98af07160150eb929adedcf3e GIT binary patch literal 4761 zcmeAS@N?(olHy`uVBq!ia0y~yU@~D~U<}}31B$F*dvXa#F%}28J29*~C-V}>VM%xN zb!1@J*w6hZkrl}2EbxddW?X?_wfUrhf=VT>5hc#~xw)x%B@Ds&X(i=}MX6Q_ zzM08I`Ncr4f`3|CW^(G{JKj+Y3_=W^E{-7;ac{356l6B!VK)4Fe@iU8r%h0U^O-xZ z-o5+zlV2jCfssujLE%mV<6(A@C5z^Ocnys5#g4}rn0X8iFfg;S^+XsfGAf^I2;}gr zkrps%YJ(_Zd&GOhK4GuN-ut1)z=|7`L`%SWcnks(4s@_8YZYIY1etPR7o($c2F$K| z4u6=hbzk`%n+j2^5j1MqXfTc@kkNd0V6+4oEgMIxn9<4;)YKSl7L2y8M%#^}&2L~Q vVYFE=+AJ7t7K}CvMw)xt+{_~&z+=9Ju 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 literal 0 HcmV?d00001 diff --git a/dox/user_guides/visualization/images/visualization_image027.jpg b/dox/user_guides/visualization/images/visualization_image027.jpg new file mode 100644 index 0000000000000000000000000000000000000000..62135b3fa11493b5366744ef860242f420f8e2d3 GIT binary patch literal 12713 zcmeHt2T)V%+U`<%6G4z75D^d*K{`kaihwjDHA)rfARxUHibw|m0YL$gD!qe9@6tj? zdhacv1_;TG`)tqI=Rf=2f1f-5%$>P&k~Nu?tnd5YthYYTyFTm>>>O}eNnTMNxNzYD z@ErFBu#EX?@5UXNb(8_31AxmGGgHD!r6rjQ~Q|tsl{PTXmz!q9-u@2gT;R=(9 z(iqZJt0x^5>CNc8KeH8`*TqXHZR9_xP$;2Jwj17Re#YILdOX~Kc1YNsWoTHVorm-p zV(uwS)(gV=ahE>gu0&ONnPGuX&_M7#7-|`0i|WM!GDW054p;!$B|VM&fblb+K`� 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ɀ)@9%$yj|S`1Zn>Vmy=rQqjkjU(HP~ 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 literal 0 HcmV?d00001 diff --git a/dox/user_guides/visualization/visualization.md b/dox/user_guides/visualization/visualization.md new file mode 100644 index 0000000000..2050266b21 --- /dev/null +++ b/dox/user_guides/visualization/visualization.md @@ -0,0 +1,2999 @@ +Visualization {#user_guides__visualization} +=================== + +@section occt_1621831385_591811643 Introduction + + +This manual explains how to use Open CASCADE Technology Visualization. It provides basic documentation on setting up and using Visualization. For advanced information on Visualization and its applications, see our offerings on our web site +(Training and E-Learning) at http://www.opencascade.org/support/training/  + +Visualization in Open CASCADE Technology is based on the separation of: + * on the one hand - the data which stores the geometry and topology of the entities you want to display and select, and + * on the other hand - its *presentation* (what you see when an object is displayed in a scene) and *selection* (possibility to choose the whole object or its sub-parts interactively in order to apply some application-defined operations to the selected entities). + +@subsection occt_1621831385_5918116431 Open CASCADE Technology Visualization and the Organization of this guide + +Presentations are managed through the Presentation component, and selection through the Selection component. + +To make management of these functionalities in 3D more intuitive and consequently, more transparent, **Application Interactive Services** have been created. **AIS** use the notion of the *interactive object*, a displayable and selectable entity, which represents an element from the application data. As a result, in 3D, you, the user, have no need to be familiar with any functions underlying AIS unless you want to create your own interactive objects or selection filters. + +If, however, you require types of interactive objects and filters other than those provided, you will need to know the mechanics of presentable and selectable objects, specifically how to implement their virtual functions. To do this requires familiarity with such fundamental concepts as the sensitive primitive and the presentable object. + +The packages used to display 3D objects are the following: + * AIS + * StdPrs + * Prs3d + * PrsMgr + * V3d + * Graphic3d + +If you are concerned with 2D visualization, you must familiarize yourself with the fundamental concepts of presentation as outlined in the section on this subject in chapter 1, Fundamental Concepts. In brief, the packages used to display 2D objects are the following: + * AIS2D + * Prs2d + * PrsMgr + * V2d + * Graphic2d. + +Figure 1 below presents a schematic overview of the relations between the key concepts and packages in visualization. AIS stands for both AIS and AIS2D packages. Naturally, *Geometry & Topology* is just an example of application data that can be handled by AIS, and application-specific interactive objects can deal with any kind of data. + +![](/user_guides/visualization/images/visualization_image003.jpg) +**Figure 1. Key concepts and packages in visualization** + +To answer different needs of CASCADE users, this user’s guide offers the following three paths in reading it. +  + * If the 3D services proposed in AIS meet your requirements, you need only read chapter 3, *AIS: Application Interactive Services*. + + * If the services provided do not satisfy your requirements - if for example, you need a selection filter on another type of entity - you should read chapter 2 *Fundamental Concepts*, chapter 3 *AIS: Application Interactive Services*, and possibly chapters 4 and 5 *3D Presentations *and *3D Resources*. You may want to begin with the chapter presenting AIS. + + * If your display will be in 2D, you should read chapter 1 *Fundamental Concepts*, chapter 6 *2D Presentations* and chapter 7 *2D Resources*. + + +@section occt_1621831385_1633708282  Fundamental Concepts + +@subsection occt_1621831385_16337082821 Presentation + +In Open CASCADE Technology, presentation services are separated from the data, which they represent, which is generated by applicative algorithms. This division allows you to modify a geometric or topological algorithm and its resulting objects without modifying the visualization services. + +@subsubsection occt_1621831385_163370828211 Key difference in implementation of 2D and 3D visualization +Current implementation of 3D visualization services is based on OpenGL. +2D visualization packages use native window system API (Win32 GDI API on Windows, Xlib API on Unix and Linux). +@subsubsection occt_1621831385_163370828212 Structure of the Presentation     + +Displaying an object on the screen involves three kinds of entity: + * a presentable object, the *AIS_InteractiveObject * + * a viewer + * an interactive context, the *AIS_InteractiveContext*. + +

The presentable object

+The purpose of a presentable object is to provide  the graphical representation of an object in the form of Graphic2d or Graphic3d structure. On the first display request, it creates this structure by calling the appropriate algorithm and retaining this framework for further display. +Standard presentation algorithms are provided in the StdPrs and Prs3d packages. You can, however, write specific presentation algorithms of your own, provided that they create presentations made of structures from the Graphic2d or Graphic3d packages. You can also create several presentations of a single presentable object: one for each visualization mode supported by your application. +Each object to be presented individually must be presentable or associated with a presentable object. + +

The viewer

+The viewer allows you to interactively manipulate views of the object. When you zoom, translate or rotate a view, the viewer operates on the graphic structure created by the presentable object and not on the data model of the application. Creating Graphic2d and Graphic3d structures in your presentation algorithms allows you to use the 2D and 3D viewers provided in Open CASCADE Technology. + +

The Interactive Context

+(see chapter 2, AIS: Application Interactive Services) The interactive context controls the entire presentation process from a common high-level API. When the application requests the display of an object, the interactive context requests the graphic structure from the presentable object and sends it to the viewer for displaying. + +

Presentation packages

+Presentation involves at least the AIS, AIS2D, PrsMgr, StdPrs, V3d and V2d packages. Additional packages such as Prs3d, Prs2d, Graphic3d and Graphic2d may be used if you need to implement your own presentation algorithms. + +

AIS and AIS2D

+See chapter 2, **AIS: Application Interactive Services **The *AIS* package provides all classes to implement interactive objects (presentable and selectable 2D or 3D entities). + +

PrsMgr

+The *PrsMgr* package provides all the classes needed to implement the presentation process: the *Presentation* and *PresentableObject* abstract classes and the *PresentationManager2d* and *PresentationManager3d* concrete classes. + +

StdPrs

+The *StdPrs* package provides ready-to-use standard presentation algorithms of points, curves and shapes of the geometry and topology toolkits. + +

V2d and V3d

+The *V2d* and *V3d* packages provide the services supported by the 2D and 3D viewers. + +

Prs3d and Prs2d

+The *Prs3d* package provides some generic presentation algorithms such as wireframe, shading and hidden line removal associated with a Drawer class which controls the attributes of the presentation to be created in terms of color, line type, thickness, and so on. + +

Graphic2d and Graphic3d

+The *Graphic2d* and *Graphic3d* packages provide resources to create 2D and 3D graphic structures (please refer to chapters on 3D Resources and 2D Resources  for more information). + + +@subsubsection occt_1621831385_163370828213 A Basic Example: How to display a 3D object +

Example

+ +Void Standard_Real dx  = ...; //Parameters Void Standard_Real dy  = ...; //to build a wedge Void Standard_Real dz  = ...; Void Standard_Real ltx = ...; + +Handle(V3d_Viewer)aViewer = ...; Handle(AIS_InteractiveContext)aContext; aContext = new AIS_InteractiveContext(aViewer); +BRepPrimAPI_MakeWedge w(dx, dy, dz, ltx); TopoDS_Solid & = w.Solid(); Handle(AIS_Shape) anAis = new AIS_Shape(S); //creation of the presentable object aContext - Display(anAis); //Display the presentable object in the 3d viewer. + +The shape is created using the *BRepPrimAPI_MakeWedge* command. An AIS_Shape is then created from the shape. When calling the *Display *command, the interactive context calls the Compute method of the presentable object to calculate the presentation data and transfer it to the viewer. See Figure 2 below. + +** ** + + + + + + + +![](/user_guides/visualization/images/visualization_image004.png) +![](/user_guides/visualization/images/visualization_image005.png) +**Figure 2. Processes involved in displaying a presentable shape** + +@subsection occt_1621831385_16337082822 Selection +This chapter deals with the process used for selecting entities, which are displayed in the 2D space of the selection view. + +@subsubsection occt_1621831385_163370828221 The Selection Principle + +Objects that may be selected graphically, are displayed as sets of sensitive primitives, which provide sensitive zones in 2D graphic space. These zones are sorted according to their position on the screen when starting the selection process. +The position of the mouse is also associated with a sensitive zone. When moving within the window where objects are displayed, the areas touched by the zone of the mouse are analyzed. The owners of these areas are then highlighted or signaled by other means such as the name of the object highlighted in a list. That way, you are informed of the identity of the element detected. + +![](/user_guides/visualization/images/visualization_image006.jpg) +**Figure 3. A model ** + +![](/user_guides/visualization/images/visualization_image007.jpg) +**Figure 4. Modeling faces with sensitive primitives ** + +![](/user_guides/visualization/images/visualization_image008.jpg) +**Figure 5. In a dynamic selection, each sensitive polygon is represented by its bounding rectangle** + +![](/user_guides/visualization/images/visualization_image009.jpg) +Figure 6. Reference to the sensitive primitive, then to the owner + +@subsubsection occt_1621831385_163370828222 The Sensitive Primitive + +The sensitive primitive - along with the entity owner - allow you to define what can be made selectable, and in so doing, provide the link between the applicative object and the sensitive zones defined by the 2D bounding boxes. For an object to be dynamically selectable, it has to be represented either as a sensitive primitive or a set of them. These give 2D boxes that will be included in a sorting algorithm. +The use of 2D boxes allows a pre-selection of the detected entities. After pre-selection, the algorithm checks which sensitive primitives are actually detected. When detected, the primitives provide their owners’ identity. +

Example

+ +The sensitive line segment below proposes a bounding box to the selector. During selection, positions 1 and 2 of the mouse detect the box but after sorting, only position 2 retains the line segment as selected by the algorithm. + +![](/user_guides/visualization/images/visualization_image010.jpg) +**Figure 7. Example of sensitive primitives ** + +When the 2D box associated with the position of the mouse intersects the 2D box of a sensitive primitive, the owner of the sensitive primitive is called and its presentation is highlighted. +The notion of sensitive primitive is important for the developer when defining his own classes of sensitive primitives for the chosen selection modes. The classes must contain *Areas* and *Matches* functions. The former provides the list of 2D sensitive boxes representing the sensitive primitive at pre-selection and the latter determines if the detection of the primitive by the 2D boxes is valid. +@subsubsection occt_1621831385_163370828223 The Principles of Dynamic Selection + +Dynamic selection causes objects in a view to be automatically highlighted as the mouse cursor moves over them. This allows the user to be certain that the picked object is the correct one. Dynamic Selection is based on the following two concepts: + * a Selectable Object (see *AIS_InteractiveObject*) + * an Interactive Context  + +

Selectable Object

+A selectable object presents a given number of selection modes which can be redefined, and which will be activated or deactivated in the selection manager’s selectors. + +*The term, selection mode of a selectable object, can refer to the selection mode of the object itself or to that of one of its parts.* + +For each selection mode, a *SelectMgr_Selection* object class is included in the selectable object. (Each selection mode establishes a priority of selection for each class of selectable object defined.) + +The notion of SELECTION is comparable to the notion of DISPLAY. Just as a display contains a set of graphic primitives that allow display of the entity in a specific display mode, a SELECTION contains a set of sensitive primitives, which allow detection of the entities they are associated with. + +

Interactive Context

+See chapter 2, AIS: Application Interactive Services, Section 2.4 + +The interactive context is used to manage both selectable objects and selection processes. + +Selection modes may be activated or de-activated for given selectable objects. Information is then provided about the status of activated/de-activated selection modes for a given object in a given selector. +

Example

+ +Let’s consider the 3D selectable shape object, which corresponds to a topological shape. + +For this class, seven selection modes can be defined: + +mode 0 - selection of the shape itself +mode 1 - selection of vertices +mode 2 - selection of edges +mode 3 - selection of wires +mode 4 - selection of faces +mode 5 - selection of shells +mode 6 - selection of solids +mode 7 - selection of compounds + +Selection 2 includes the sensitive primitives that model all the edges of the shape. Each of these primitives contains a reference to the edge it represents. + +The selections may be calculated before any activation and are graph independent as long as they are not activated in a given selector. Activation of selection mode 3 in a selector associated with a view V leads to the projection of the 3D sensitive primitives contained in the selection; then the 2D areas which represent the 2D bounding boxes of these primitives are provided to the sorting process of the selector containing all the detectable areas. + +To deactivate selection mode 3 remove all those 2D areas. + + +*Selection Packages * +The selection packages are the following: *SelectBasics*, *SelectMgr*, *Select2D*, *Select3D*, *StdSelect*. + +*SelectBasics * +The *SelectBasics* package contains the basic classes of the selection: + * the main definition of a sensitive primitive: *SensitiveEntity * + * the definition of a sensitive primitive owner: *EntityOwner * + * the algorithm used for sorting sensitive boxes: *SortAlgo * + +*EntityOwner* is used to establish a link from *SensitiveEntity* to application-level objects. For example, *SelectMgr_EntityOwner* (see below) class holds a pointer to corresponding *SelectableObject*. + +*SelectMgr * +The *SelectMgr* package is used to manage the whole dynamic selection process. It contains the *SelectableObject**, Entity Owner containing a link to its SelectableObject,* *Selection*, *SelectionManager*, and *ViewSelector* classes. +There are also implementations of *ViewerSelector* interface for 2D and 3D selection: *ViewerSelector2d* and *ViewerSelector3d*, respectively. + +*Select2D * +The *Select2D* package contains the basic classes of 2D sensitive primitives such as Points, Segments, and Circles, which inherit from *SensitiveEntity* from *SelectBasics* and used to represent 2D selectable objects from a dynamic selection viewpoint. + +*Select3D * +The *Select3D* package contains all 3D standard sensitive primitives such as point, curve and face. All these classes inherit from 3D *SensitiveEntry* from *SelectBasics* with an additional method, which allows recovery of the bounding boxes in the 2D graphic selection space, if required. This package also includes the 3D-2D projector. + +*StdSelect * +The *StdSelect* package provides standard uses of the classes described above and main tools used to prevent the developer from redefining the selection objects. In particular, *StdSelect* includes standard means for selection of topological objects (shapes). + +@subsubsection occt_1621831385_163370828224 Methodology + +Several operations must be performed prior to using dynamic selection: +**1.   **Implement specific sensitive primitives if those defined in Select2D and Select3D are not sufficient. These primitives must inherit from *SensitiveEntity* from *SelectBasics* or from a suitable Select3D sensitive entity class when a projection from 3D to 2D is necessary. +**2.   **Define all the owner types, which will be used, and the classes of selectable objects, i.e. the number of possible selection modes for these objects and the calculation of the decomposition of the object into sensitive primitives of all the primitives describing this mode. It is possible to define only one default selection mode for a selectable object if this object is to be selectable in a unique way. +**3.   **Install the process, which provides the user with the identity of the owner of the detected entities in the selection loop. + +When all these steps have been carried out, follow the procedure below: +**1.   **Create an interactive context. +**2.   **Create the selectable objects and calculate their various possible selections. +**3.   **Load these selectable objects in the interactive context. The objects may be common to all the selectors, i.e. they will be seen by all the selectors in the selection manager, or local to one selector or more. +**4.   **Activate or deactivate the objects’ selection modes in the selector(s). When activating a selection mode in a selector for a given object, the manager sends the order to make the sensitive primitives in this selector selectable. If the primitives are to projected from 3D to 2D, the selector calls the specific method used to carry out this projection. + +At this stage, the selection of selectable entities in the selectors is available. +The selection loop informs constantly the selectors with the position of the mouse and questions them about the detected entities. + + +@subsubsection occt_1621831385_163370828225 Example of Use + +Let’s suppose you are creating an application that displays houses in a viewer of the V3d package and you want to select houses or parts of these houses (windows, doors, etc.) in the graphic window. +You define a selectable object called *House* and propose four possible selection modes for this object: +**1 -** selection of the house itself +**2 -** selection of the rooms +**3 -** selection of the walls +**4 - **selection of the doors. + +You have to write the method, which calculates the four selections above, i.e. the sensitive primitives which are activated when the mode is. +You must define the class *Owner* specific to your application. This class will contain the reference to the house element it represents: wall, door or room. It inherits from *EntityOwner* from *SelectMgr*. +For example, let’s consider a house with the following representation: +![](/user_guides/visualization/images/visualization_image011.jpg) +**Figure 8. Selection of the rooms of a house** + +To build the selection, which corresponds to the mode *selection of the rooms* (selection 2 in the list of selection modes) use the following procedure: +

Example

+ +Void House::ComputeSelection +(Const Handle(SelectMgr_Selection)& Sel, + const Standard_Integer mode { + switch(mode){  case 0: //Selection of the rooms  {  for(Standard_Integer i = 1; i = myNbRooms; i++)  { //for every room, create an instance of the owner +   //along with the given room and its name. Handle(RoomOwner) aRoomOwner = new RoomOwner (Room(i), NameRoom(i)); //Room() returns a room and NameRoom() returns its name. +Handle(Select3d_SensitiveBox) aSensitiveBox; +aSensitiveBox = new Select3d_SensitiveBox +(aRoomOwner, Xmin, Ymin, Zmin, Xmax, Ymax, Zmax); + Sel - Add(aSensitiveBox);  }  break;  Case 1: ... //Selection of the doors  } //Switch +) // ComputeSelection + + +![](/user_guides/visualization/images/visualization_image012.jpg) +**Figure 9. Activated sensitive boxes corresponding to selection mode 0 (selection of the rooms)** + +![](/user_guides/visualization/images/visualization_image013.jpg) +![](/user_guides/visualization/images/visualization_image014.jpg) +**Figure 11. Activated sensitive polygons corresponding to selection mode 1.** + +**(selection of the doors)** +![](/user_guides/visualization/images/visualization_image015.jpg) + +**Figure 12. Sensitive rectangles in the selector during dynamic selection in view 2** +@section occt_1621831385_810308609  AIS: Application Interactive Services +Application Interactive Services (**AIS**) offers a set of general services beyond those offered by basic Selection and Presentation packages such as **PrsMgr**, **SelectMgr** and **StdSelect**. These allow you to manage presentations and dynamic selection in a viewer simply and transparently. To use these services optimally, you should know various rules and conventions. Section I provides an overview of the important classes which you need to manipulate AIS well. Sections 2 and 3 explain in detail how to use them and how to implement them, as well as the rules and conventions to respect. The annexes offer various standard Interactive Objects in AIS, an example of an implementation of AIS and a reminder of how to manage presentation and selection. + +@subsection occt_1621831385_8103086091 Overview + +@subsubsection occt_1621831385_81030860911 Interactive Context/Local Context +

AIS_InteractiveContext

+The central entity, which pilots visualizations and selections, is the Interactive Context. It is linked to a main viewer (and if need be, a trash bin viewer.) It has two operating modes: the Neutral Point and the local visualization and selection context. The neutral point, which is the default mode, allows you to easily visualize and select interactive objects, which have been loaded into the context. Opening Local Contexts allows you to prepare and use a temporary selection environment without disturbing the neutral point. A set of functions allows you to choose the interactive objects, which you want to act on, the selection modes, which you want to activate, and the temporary visualizations, which you will execute. When the operation is finished, you close the current local context and return to the state in which you were before opening it (neutral point or previous local context). + +@subsubsection occt_1621831385_81030860912 The Interactive Object + +

AIS_InteractiveObject

+Entities, which are visualized and selected, are Interactive Objects. You can use classes of standard interactive objects for which all necessary functions have already been programmed, or you can implement your own classes of interactive objects, by respecting a certain number of rules and conventions described below. + +@subsubsection occt_1621831385_81030860913 Graphic Attributes Manager or *Drawer* + +![](/user_guides/visualization/images/visualization_image016.jpg) +An Interactive Object can have a certain number of graphic attributes specific to it (such as visualization mode, color and material) By the same token, the Interactive Context has a drawer which is valid by default for the objects it controls. When an interactive object is visualized, the required graphic attributes are first taken from its own Drawer if it has the ones required, or from the context drawer if it does not have them. + +@subsubsection occt_1621831385_81030860914 Selection Filters + +![](/user_guides/visualization/images/visualization_image017.jpg) + +An important need in selection is the filtering of entities, which you want to select. Consequently there are FILTER entities, which allow you to refine the dynamic detection context, which you want to put into effect. Some of these filters can be used at the Neutral Point, others only in an open local context. A user will be able to program his own filters and load them into the interactive context. + +@subsection occt_1621831385_8103086092 Rules and Conventions Governing Interactive Objects + An interactive object is a *virtual* entity, which can be presented and selected. It can also have its own visualization aspects such as color, material, and mode of visualization. In order to create and manipulate the interactive objects with ease, you must know the rules and conventions, which have been established. Several *virtual* functions must be implemented for these objects to have the behavior expected of them. A certain number of standard interactive objects, which respect the rules and conventions described below, have been implemented in AIS. The current list of them can be found in ANNEX I. The services that concern manipulation of presentations, selection and graphic attributes will be treated separately. + + +@subsubsection occt_1621831385_81030860921 Presentations: + +![](/user_guides/visualization/images/visualization_image018.jpg) +*Conventions * + * Either in 2D or in 3D, an interactive object can have as many presentations as its creator wants to give it. + * 3D presentations are managed by PresentationManager3D; 2D presentations by PresentationManager2D. As this is transparent in AIS, the user does not have to worry about it. + * A presentation is identified by an index and by the reference to the Presentation Manager which it depends on. + * By convention, the default mode of representation for the Interactive Object has index 0. + +*Virtual functions * + +Calculation of different presentations of an interactive object is done in the *Compute *functions inheriting from *PrsMgr_ PresentableObject::Compute *functions. They are automatically called by *PresentationManager* at a visualization or an update request. + +If you are creating your own type of interactive object, you must implement the Compute function in one of the following ways: + + * **For 2D: ** +

Example

+ +void PackageName_ClassName::Compute +(const Handle(PrsMgr_PresentationManager2d)& +aPresentationManager, + const Handle(Graphic2d_GraphicObject)& aGraphicObject, + const Standard_Integer aMode = 0); + * **For 3D: ** +

Example

+ +void PackageName_ClassName::Compute +(const Handle(PrsMgr_PresentationManager3d)& +aPresentationManager, + const Handle(Prs3d_Presentation)& aPresentation, + const Standard_Integer aMode = 0); + + * **For hidden line removal (HLR) mode in 3D (*): ** +

Example

+ +void PackageName_ClassName::Compute +(const Handle(Prs3d_Projector)& aProjector, + const Handle(Prs3d_Presentation)& aPresentation); + + +*WARNING (*) * +As its call is automatically ordered by a view, this function requires explanation; the view has two states: degenerate mode (normal mode) and non-degenerate mode (Hidden line mode). When the latter is active, the view looks for all presentations displayed in normal mode, which have been signaled as accepting hidden line mode. An internal mechanism allows us to call the interactive object’s own *Compute*, that is, projector, function. How do you declare that such and such a presentation will accept an *equivalent* in hidden line mode?  By convention, it is the Interactive Object, which accepts or rejects the representation of hidden-line mode. You can make this declaration in one of two ways, either initially by using one of the values of the enumeration PrsMgr_TypeOfPresentation: + * PrsMgr_TOP_AllView, + * PrsMgr_TOP_ProjectorDependant + +or later on, by using the function: + * * PrsMgr_PresentableObject::SetTypeOfPresentation + +@subsubsection occt_1621831385_81030860922 Important Specifics of AIS: + +There are four types of interactive object in AIS: + * the *construction element* or Datum, + * the Relation (dimensions and constraints) + * the Object + * the None type (when the object is of an unknown type). + +Inside these categories, additional characterization is available by means of a signature (an index.) By default, the interactive object has a NONE type and a signature of 0 (equivalent to NONE.) If you want to give a particular type and signature to your interactive object, you must redefine two virtual functions: + + * AIS_InteractiveObject::Type + * AIS_InteractiveObject::Signature. +   + +

WARNING

+Some signatures have already been used by *standard* objects delivered in AIS. (see the list of standard objects, Annex I.) + +As will be seen below, the interactive context can have a default mode of representation for the set of interactive objects. This mode may not be accepted by a given class of objects. Consequently, a virtual function allowing you to get information about this class must be implemented: + * AIS_InteractiveObject::AcceptDisplayMode. + +
Services You Should Know
+Display Mode: An object can have its own display mode, which is different from that proposed by the interactive context. The functions to use are: + * AIS_InteractiveContext::SetDisplayMode + * AIS_InteractiveContext::UnsetDisplayMode. + +Hilight Mode: At dynamic detection, the presentation echoed by the Interactive Context, is by default the presentation already on the screen. You can always specify the display mode used for highlighting purposes (so called highlight mode), which is valid no matter what the active representation of the object. It makes no difference whether this choice is temporary or definitive. To do this, you use the following functions: + * AIS_InteractiveObject::SetHilightMode + * AIS_InteractiveObject::UnSetHilightMode + +Note that the same presentation (and consequently the same highlight mode) is used for highlighting *detected* objects and for highlighting *selected* objects, the latter being drawn with a special *selection color *(refer to the section related to *Interactive Context* services). + +An example: For a shape - whether it is visualized in wireframe presentation or with shading - you want to systematically highlight the wireframe presentation. Consequently, you set the highlight mode to *0 *in the constructor of the interactive object. You mustn’t forget to effect the implementation of this representation mode in the *Compute* functions. + +Infinite Status: If you don’t want an object to be affected by a FitAll view, you must declare it infinite; you can cancel its *infinite* status in the same way. + * AIS_InteractiveObject::SetInfiniteState + * AIS_InteractiveObject::IsInfinite +

Example

+ +Let’s take the case of a class called IShape, representing an interactive object +myPk_IShape::myPK_IShape +(const TopoDS_Shape& SH, PrsMgr_TypeOfPresentation aType): + +AIS_InteractiveObject(aType),   myShape(SH),   myDrwr(new AIS_Drawer()) {     +SetHilightMode(0); +}  +void myPk_IShape::Compute +(const Handle(PrsMgr_PresentationManager3d) & PM,  const Handle(Prs3d_Presentation)& P,  const Standard_Integer TheMode) +{ +switch (TheMode){ + +case 0: +StdPrs_WFDeflectionShape::Add (P,myShape,myDrwr); +//algo for calculation of wireframe presentation break; + +case 1: +StdPrs_ShadedShape::Add (P,myShape,myDrwr); //algo for calculation of shading presentation. break; +} +} +void myPk_IsShape::Compute +(const Handle(Prs3d_Projector)& Prj, +const Handle(Prs3d_Presentation) P) +{ +StdPrs_HLRPolyShape::Add(P,myShape,myDrwr); +//Cas-cade hidden line mode calculation algorithm +} + + + +@subsection occt_1621831385_8103086093 Selections +@subsubsection occt_1621831385_81030860931 Conventions + +An interactive object can have an indefinite number of modes of selection, each representing a *decomposition* into sensitive primitives; each primitive has an Owner (*SelectMgr_EntityOwner*) which allows us to identify the exact entity which has been detected (see ANNEX II). + +The set of sensitive primitives, which correspond to a given mode, is stocked in a SELECTION (*SelectMgr_Selection*). + +Each Selection mode is identified by an index. By Convention, the default selection mode that allows us to grasp the Interactive object in its entirety is mode *0*. + +@subsubsection occt_1621831385_81030860932 Virtual functions + +The calculation of Selection primitives (or sensitive primitives) is done by the intermediary of a virtual function, *ComputeSelection*. This should be implemented for each type of interactive object on which you want to make different type selections using the following function: + + * AIS_ConnectedInteractive::ComputeSelection + +A detailed explanation of the mechanism and the manner of implementing this function has been given in ANNEX II. + +Moreover, just as the most frequently manipulated entity is TopoDS_Shape, the most used Interactive Object is AIS_Shape. You will see below that activation functions for standard selection modes are proposed in the Interactive context (selection by vertex, by edges etc.). To create new classes of interactive object with the same behavior as AIS_Shape - such as vertices and edges - you must redefine the virtual function: + + * AIS_ConnectedInteractive::AcceptShapeDecomposition. + + + +@subsubsection occt_1621831385_81030860933 Other Services +You can change the default selection mode index of an Interactive Object. For instance, you can: + * check to see if there is a selection mode + * check the current selection mode + * set a selection mode + * unset a selection mode. + The following functions are concerned: + + * AIS_InteractiveObject::HasSelectionMode + * AIS_InteractiveObject::SelectionMode + * AIS_InteractiveContext::SetSelectionMode + * AIS_InteractiveContext::UnsetSelectionMode + +These functions are only of interest if you decide that the *0* mode adopted by convention will not do. In the same way, you can temporarily change the priority of certain interactive objects for selection of 0 mode. You could do this to make it easier to detect them graphically. You can: + * check to see if there is a selection priority setting for the owner + * check the current priority + * set a priority + * unset the priority. + +To do this, you use the following functions: + * AIS_InteractiveObject::HasSelectionPriority + * AIS_InteractiveObject::SelectionPriority + * AIS_InteractiveObject::SetSelectionPriority + * AIS_InteractiveObject::UnsetSelectionPriority + + + +@subsection occt_1621831385_8103086094 Graphic attributes of an interactive object + +Keep in mind the following points concerning graphic attributes: + * Each interactive object can have its own visualization attributes. + * The set of graphic attributes of an interactive object is stocked in an *AIS_Drawer*, which is only a *Prs3d_Drawer* with the possibility of a link to another drawer + * By default, the interactive object takes the graphic attributes of the context in which it is visualized (visualization mode, deflection values for the calculation of presentations, number of isoparameters, color, type of line, material, etc.) + * In the *AIS_InteractiveObject* abstract class, several standard attributes have been privileged. These include: color, thickness of line, material, and transparency. Consequently, a certain number of virtual functions, which allow us to act on these attributes, have been proposed. Each new class of interactive object can redefine these functions in order to bring about the changes it should produce in the behavior of the class. + + +![](/user_guides/visualization/images/visualization_image019.jpg) +**Figure 13. Redefinition of virtual functions for changes in AIS_Point ** + +![](/user_guides/visualization/images/visualization_image020.jpg) +**Figure 14. **Redefinition** of virtual functions for changes in AIS_Shape.** + +The virtual functions concerned here allow you to provide settings for: + * color + * width + * material + * transparency + +The functions concerned are the following: + + * AIS_InteractiveObject::UnsetColor + * AIS_InteractiveObject::SetWidth + * AIS_InteractiveObject::UnsetWidth + * AIS_InteractiveObject::SetMaterial (const Graphic3d_NameOfPhysicalMaterial & aName) + * AIS_InteractiveObject::SetMaterial  (const Graphic3d_MaterialAspect & aMat) + * AIS_InteractiveObject::UnsetMaterial + * AIS_InteractiveObject::SetTransparency + * AIS_InteractiveObject::UnsetTransparency + +For other types of attribute, it is appropriate to change the Drawer of the object directly using: + + * AIS_InteractiveObject::SetAttributes + * AIS_InteractiveObject::UnsetAttributes + + +@subsubsection occt_1621831385_81030860941 Manipulation of Attributes + +Some of these functions may imply the recalculation of presentations of the object. It is important to know which ones. If an interactive object’s presentation mode is to be updated, a flag from *PrsMgr_PresentableObject* indicates this. The mode should be updated using the functions *Display* and *Redisplay* in *AIS_InteractiveContext*. + +@subsection occt_1621831385_8103086095 Complementary Services - Precautions + +@subsubsection occt_1621831385_81030860951 Changing an interactive object’s location + +When using complementary services for interactive objects, pay special attention to the following cases: +Functions allowing us to temporarily *move* the representation and selection of Interactive Objects in a view without recalculation. + * AIS_InteractiveContext::SetLocation + * AIS_InteractiveContext::ResetLocation + * AIS_InteractiveContext::HasLocation + * AIS_InteractiveContext::Location + +How you link applicative entities to interactive objects. + + +@subsubsection occt_1621831385_810308609552 Connecting an interactive object to an applicative entity + +Each Interactive Object has functions that allow us to attribute it an Owner in the form of a Transient. + * AIS_InteractiveObject::SetOwner + * AIS_InteractiveObject::HasOwner + * AIS_InteractiveObject::Owner + +An interactive object can therefore be associated with an applicative entity or not, without this affecting its behavior. + +@subsubsection occt_1621831385_810308609553 Resolving coincident topology + +Due to the fact that the accuracy of three-dimensional graphics coordinates has a finite resolution the elements of topological objects can coincide producing the effect of *popping* some elements one over another. + +To avoid such kind of a problem when the elements of two or more InteractiveObjects are coincident you can apply the polygon offset. It is a sort of graphics computational offset, or depth buffer offset, that allows you to arrange elements (by modifying their depth value) without changing their coordinates. The graphical elements that accept this kind of offsets are solid polygons or displayed as boundary lines and points. The polygons could be displayed as lines or points by setting the appropriate interior style. + +The following method allows you to set up the polygon offsets: + * void AIS_InteractiveObject::SetPolygonOffsets +(const Standard_Integer aMode, + const Standard_Real aFactor, + const Standard_Real aUnits) +The parameter aMode can contain various combinations of Aspect_PolygonOffsetMode enumeration elements. The enumeration has the following elements: + * Aspect_POM_None + * Aspect_POM_Off + * Aspect_POM_Fill + * Aspect_POM_Line + * Aspect_POM_Point + * Aspect_POM_All + +The combination of these elements defines the polygon display modes that will use the given offsets. You can switch off the polygon offsets by passing the Aspect_POM_Off.  Passing Aspect_POM_None allows you to change the aFactor and aUnits values without changing the mode. If aMode is different from Aspect_POM_Off, the aFactor and aUnits arguments are used by the graphics renderer to calculate the depth offset value: + offset = aFactor * m + aUnits * r, + where m – maximum depth slope for the polygons currently being displayed, r – minimum depth resolution (implementation-specific) + +Negative offset values move polygons closer to the viewer while positive values shift polygons away. + +**WARNING** +This method has a side effect – it creates its own shading aspect if not yet created, so it is better to set up the object shading aspect first. + +You can use the following functions to obtain the current settings for polygon offsets: + * void AIS_InteractiveObject::PolygonOffsets +(Standard_Integer &aMode, + Standard_Real &aFactor, + Standard_Real &aUnits) + * Standard_Boolean +AIS_InteractiveObject::HasPolygonOffsets() + +The same operation could be performed for the interactive object known by the AIS_InteractiveContext with the following methods: + * void AIS_InteractiveContext::SetPolygonOffsets +(const Handle(AIS_InteractiveObject) &anObj, + const Standard_Integer aMode, + const Standard_Real aFactor, + const Standard_Real aUnits) + * void AIS_InteractiveContext::PolygonOffsets +(const Handle(AIS_InteractiveObject) &anObj, + Standard_Integer &aMode, + Standard_Real &aFactor, + Standard_Real &aUnits) + * Standard_Boolean AIS_InteractiveContext::HasPolygonOffsets +(const Handle(AIS_InteractiveObject) &anObj) + +@subsection occt_1621831385_8103086096 The Interactive Context + +@subsubsection occt_1621831385_810308609661 Preliminary Rules + +The Interactive Context allows us to manage in a transparent way, the graphic and *selectable* behavior of interactive objects in one or more viewers. Most functions which allow us to modify the attributes of interactive objects, and which were presented in the preceding chapter, will be looked at again here. + +There is one essential rule to follow: the modification of an interactive object, which is already known by the Context, must be done using Context functions. You can only directly call the functions available for an interactive object if it has not been loaded into an Interactive Context. + +

Example

+ +Handle (AIS_Shape) TheAISShape = new AIS_Shape (ashape); myIntContext-Display(TheAISShape); +myIntContext-SetDisplayMode(TheAISShape ,1); +myIntContext-SetColor(TheAISShape,Quantity_NOC_RED); + +//but you can write + +Handle (AIS_Shape) TheAISShape = new AIS_Shape (ashape); TheAISShape-SetColor(Quantity_NOC_RED); +TheAISShape-SetDisplayMode(1); +myIntContext-Display(TheAISShape); + + +@subsubsection occt_1621831385_810308609662 Groups of functions + +You must distinguish two states in the Interactive Context: +§ No Open Local Context; which will be referred to as Neutral Point. +§ One or several open local contexts, each representing a temporary state of selection and presentation. + +Some functions can only be used in open Local Context; others in closed local context; others do not have the same behavior in one state as in the other. + +The Interactive Context is composed of a great many functions, which can be conveniently grouped according to theme: + * management proper to the context + * management in the local context + * presentations and selection in open/closed context + * selection strictly speaking + + +@subsubsection occt_1621831385_810308609663 Management proper to the Interactive Context + +The Interactive Context is made up of a Principal Viewer and, optionally, a trash bin or *Collector* Viewer. It also has a group of adjustable settings allowing you to personalize the behavior of presentations and selections: + * Default Drawer, containing all the color and line attributes which can be used by interactive objects, which do not have their own attributes. + * Default Visualization Mode for interactive objects +Default: mode 0 + * Highlight color of entities detected by mouse movement +Default: Quantity_NOC_CYAN1 + * Preselection color +Default: Quantity_NOC_GREEN + * Selection color (when you click on a detected object) +Default: Quantity_NOC_GRAY80 + * Sub-Intensity color +Default: Quantity_NOC_GRAY40 + +All of these settings can be modified by functions proper to the Context. + +When you change a graphic attribute pertaining to the Context (visualization mode, for example), all interactive objects, which do not have the corresponding appropriate attribute, are updated. +

Example

+ +//obj1, obj2: 2 interactive objects. + +TheCtx-Display(obj1,Standard_False); // False = no update +of viewer. +TheCtx-Display(obj2,Standard_True); // True = Update of +Viewer +TheCtx-SetDisplayMode(obj1,3,Standard_False); +TheCtx-SetDisplayMode(2); +// obj2 is visualised in mode 2 (if it accepts this mode) +// obj1 stays visualised in its mode 3. + +To the main Viewer, are associated a *PresentationManager3D* and a *Selector3D *which manage the presentation and selection of present interactive objects. The same is true of the optional Collector. As we shall see, this management is completely transparent for the user. + + +@subsection occt_1621831385_8103086097 Management of Local Context + +@subsubsection occt_1621831385_810308609771 Rules and Conventions + + * Opening a local context allows you to prepare an environment for temporary presentations and selections, which will disappear once the local context is closed. + * It is possible to open several local contexts, but only the last one will be active. + * When you close a local context, the one before, which is still on the stack, reactivates. If none is left, you return to Neutral Point. + * Each local context has an index created when the context opens. You should close the local context, which you have opened. + +@subsubsection occt_1621831385_810308609772 Important functionality + +The interactive object, which is used the most by applications, is *AIS_Shape*. Consequently, standard functions are available which allow you to easily prepare selection operations on the constituent elements of shapes (selection of vertices, edges, faces etc) in an open local context. The selection modes specific to *Shape* type objects are called **Standard Activation Mode**. These modes are only taken into account in open local context and only act on interactive objects which have redefined the virtual function *AcceptShapeDecomposition() *so that it returns *TRUE*. + * Objects, which are temporarily in a local context, are not recognized by other local contexts a priori. Only objects visualized in Neutral Point are recognized by all local contexts. + * The state of a temporary interactive object in a local context can only be modified while another local context is open (except for one special case - see III.4.2) + +

WARNING

+The specific modes of selection only concern the interactive objects, which are present in the Main Viewer. In the Collector, you can only locate interactive objects, which answer positively to the positioned filters when a local context is open. Under no circumstances are they decomposed in standard mode etc. + +@subsubsection occt_1621831385_810308609773 Use +Opening and closing a local context are easy to put into operation: + + * AIS_InteractiveContext::OpenLocalContext + +The options available allow you to control what you want to do: + * *UseDisplayedObjects*: allows you to load or not load the interactive objects visualized at Neutral Point in the local context, which you open. If* FALSE*, the local context is empty after being opened. If *TRUE*, the objects at Neutral Point are modified by their default selection mode. + * *AllowShapeDecomposition*: AIS_Shape allows or prevents decomposition in standard shape location mode of objects at Neutral Point, which are type-*privileged* (see selection chapter). This Flag is only taken into account when *UseDisplayedObjects* is *TRUE*. + * *AcceptEraseOfObjects*: authorises other local contexts to erase the interactive objects present in this context. This option is rarely used. The last option has no current use. + +This function returns the index of the created local context. It should be kept and used when the context is closed. + +To load objects visualized at Neutral Point into a local context or remove them from one: + * AIS_InteractiveContext::UseDisplayedObjects + * AIS_InteractiveContext::NotUseDisplayedObjects + +Closing Local Contexts is done by: + * AIS_InteractiveContext::CloseLocalContext + * AIS_InteractiveContext::CloseAllContexts + +*WARNING * + +When the index isn’t specified in the first function, the current Context is closed. This option can be dangerous, as other Interactive Functions can open local contexts without necessarily warning the user. For greater security, you have to close the context with the index given on opening. + +To get the index of the current context, use the following function: + + * AIS_InteractiveContext::IndexOfCurrentLocal + +The second function allows you to close all open local contexts at one go. In this case, you find yourself directly at Neutral Point. + +When you close a local context, all temporary interactive objects are erased (deleted), all selection modes concerning the context are cancelled, and all content filters are emptied. + + + +@subsubsection occt_1621831385_810308609774 Management of Presentations and Selections + +You must distinguish between the Neutral Point and the Open Local Context states. Although the majority of visualization functions can be used in both situations, their behavior is different: + +@subsubsection occt_1621831385_810308609775 Presentation in Neutral Point + +Neutral Point should be used to visualize the interactive objects, which represent and select an applicative entity. Visualization and Erasing orders are straightforward: + + * AIS_InteractiveContext::Display +(const Handle(AIS_InteractiveObject)& anIobj, + const Standard_Boolean updateviewer=Standard_True); + + * AIS_InteractiveContext::Display +(const Handle(AIS_InteractiveObject)& anIobj, + const Standard_Integer amode, + const Standard_Integer aSelectionMode, + const Standard_Boolean +updateviewer = Standard_True, + const Standard_Boolean +allowdecomposition = Standard_True); + + * AIS_InteractiveContext::Erase + * AIS_InteractiveContext::EraseMode + * AIS_InteractiveContext::ClearPrs + * AIS_InteractiveContext::Redisplay + * AIS_InteractiveContext::Remove + * AIS_InteractiveContext::EraseAll + * AIS_InteractiveContext::Hilight + * AIS_InteractiveContext::HilightWithColor + +@subsubsection occt_1621831385_810308609776 Important Remarks: + +Bear in mind the following points: + * It is recommended to display and erase interactive objects when no local context is opened, and open a local context for local selection only. + * The first **Display** function among the two ones available in *InteractiveContext* visualizes the object in its default mode (set with help of SetDisplayMode() method of InteractiveObject prior to Display() call), or in the default context mode, if applicable. If it has neither, the function displays it in 0 presentation mode. The object’s default selection mode is automatically activated (0 mode by convention). + * Activating the displayed object by default can be turned off with help of **SetAutoActivateSelection**() method. This might be efficient if you are not interested in selection immediately after displaying an object. + * The second **Display** function should only be used in Neutral Point to visualize a supplementary mode for the object, which you can erase by EraseMode (...). You activate the selection mode. This is passed as an argument. By convention, if you do not want to activate a selection mode, you must set the *SelectionMode *argument to the value of -1. This function is especially interesting in open local context, as we will see below. + * In Neutral Point, it is unadvisable to activate other selection modes than the default selection one. It is preferable to open a local context in order to activate particular selection modes. + * When you call **Erase **(Interactive object) function, the *PutIncollector* argument, which is FALSE by default, allows you to visualize the object directly in the Collector and makes it selectable (by activation of 0 mode). You can nonetheless block its passage through the Collector by changing the value of this option. In this case, the object is present in the Interactive Context, but is not seen anywhere. + * **Erase**() with *putInCollector* = Standard_True** might be slow as it re-computes the objects presentation in the Collector. Set putInCollector to Standard_False if you simply want to hide the object’s presentation temporarily. + * Modifications of visualization attributes and graphic behavior is effected through a set of functions similar to those which are available for the interactive object (color, thickness of line, material, transparency, locations etc.) The context then manages immediate and deferred updates. + * Call **Remove**() method of *InteractiveContext* as soon as the interactive object is no longer needed and you want to destroy it.. Otherwise, references to *InteractiveObject* are kept by *InteractiveContext*, and the *Object* is not destroyed that results in memory leaks. In general, if some interactive object’s presentation can be computed quickly, it is recommended to **Remove**() it instead of **Erase**()-ing. + +@subsubsection occt_1621831385_810308609777 Presentation in Local Context + +In open local context, the Display functions presented above apply as well. + +

WARNING

+The function, AIS_InteractiveObject::Display, automatically activates the object’s default selection mode. When you only want to visualize an Interactive Object in open Context, you must call the second function: + +AIS_InteractiveContext::Display. + +You can activate or deactivate specific selection modes in local open context in several different ways: +Use the Display functions with the appropriate modes +Activate standard mode: + + * AIS_InteractiveContext::ActivateStandardMode +only if a local Context is opened + + * AIS_InteractiveContext::DeactivateStandardMode + + * AIS_InteractiveContext::ActivatedStandardModes + + * AIS_InteractiveContext::SetShapeDecomposition + +This has the effect of activating the corresponding selection mode for all objects in Local Context, which accept decomposition into sub-shapes. Every new Object which has been loaded into the interactive context and which answers these decomposition criteria is automatically activated according to these modes. + +

WARNING

+If you have opened a local context by loading an object with the default options (AllowShapeDecomposition = Standard_True), all objects of the *Shape* type are also activated with the same modes. You can act on the state of these *Standard* objects by using SetShapeDecomposition(Status). + +Load an interactive object by the following function: + + * AIS_InteractiveContext::Load. + +This function allows you to load an Interactive Object whether it is visualized or not with a given selection mode, and/or with the desired decomposition option. If *AllowDecomp=TRUE* and obviously, if the interactive object is of the *Shape* type, these *standard* selection modes will be automatically activated as a function of the modes present in the Local Context. + +Directly activate/deactivate selection modes on an object: + + * AIS_InteractiveContext::Activate + * AIS_InteractiveContext::Deactivate. +    + + + + + + + +@subsubsection occt_1621831385_810308609778 Use of Filters + +When Interactive objects have been *prepared* in local context, you can add rejection filters. The root class of objects is *SelectMgr_Filter*. The principle behind it is straightforward: a filter tests to see whether the owners (*SelectMgr_EntityOwner*) detected in mouse position by the Local context selector answer *OK*. If so, it is kept; if not, it is rejected. + +You can therefore create your own class of filter objects by implementing the deferred function *IsOk()*: +

Example

+ +class MyFilter : public SelectMgr_Filter { +}; +virtual Standard_Boolean MyFilter::IsOk +(const Handle(SelectMgr_EntityOwner)& anObj) const = 0; + + +In *SelectMgr*, there are also Composition filters (AND Filters, OR Filters), which allow you to combine several filters. In InteractiveContext , all filters that you add are stocked in an OR filter (which answers *OK* if at least one filter answers *OK*). + +There are Standard filters, which have already been implemented in several packages: + + * StdSelect_EdgeFilter +Filters acting on edges such as lines and circles + * StdSelect_FaceFilter +Filters acting on faces such as planes, cylinders and spheres + * StdSelect_ShapeTypeFilter +Filters shape types such as compounds, solids, shells and wires + * AIS_TypeFilter +Acts on types of interactive objects + * AIS_SignatureFilter +Acts on types and signatures of interactive objects + * AIS_AttributeFilter +Acts on attributes of Interactive Objects such as color and width + +Because there are specific behaviors on shapes, each new Filter class must, if necessary, redefine a function, which allows a Local Context to know if it acts on specific types of sub-shapes: + + * AIS_LocalContext::ActsOn. + +By default, this function answers *FALSE*. + +*WARNING * +Only type filters are activated in Neutral Point. This is to make it possible to identify a specific type of visualized object. For filters to come into play, one or more object selection modes must be activated. + +There are several functions to manipulate filters: + + * AIS_InteractiveContext::AddFilter + +to add a filter passed as an argument. +  + * AIS_InteractiveContext::RemoveFilter + +to remove a filter passed as an argument. + + * AIS_InteractiveContext::RemoveFilters + +to remove all filters present. + + * AIS_InteractiveContext::Filters + +to get the list of filters active in a local context. +

Example

+ +myContext-OpenLocalContext(Standard_False); +// no object in neutral point is loaded + +myContext-ActivateStandardMode(TopAbs_Face); +//activates decomposition of shapes into faces. +Handle (AIS_Shape) myAIShape = new AIS_Shape ( ATopoShape); + +myContext-Display(myAIShape,1,-1,Standard_True,Standard_True); //shading visualization mode, no specific mode, authorization for //decomposition into sub-shapes. At this Stage, myAIShape is decomposed into faces... + +Handle(StdSelect_FaceFilter) Fil1= new +StdSelect_FaceFilter(StdSelect_Revol); +Handle(StdSelect_FaceFilter) Fil2= new +  StdSelect_FaceFilter(StdSelect_Plane); + +myContext-AddFilter(Fil1); myContext-AddFilter(Fil2); //only faces of revolution or planar faces will be selected + * +myContext-MoveTo( xpix,ypix,Vue); +// detects of mouse position + + +@subsubsection occt_1621831385_810308609779 Selection Strictly Speaking. +Dynamic detection and selection are put into effect in a straightforward way. There are only a few conventions and functions to be familiar with. The functions are the same in neutral point and in open local context: + + * AIS_InteractiveContext::MoveTo +passes mouse position to Interactive Context selectors + * AIS_InteractiveContext::Select +stocks what has been detected on the last MoveTo. Replaces the previously selected object. Empties the stack if nothing has been detected at the last move + * AIS_InteractiveContext::ShiftSelect +if the object detected at the last move was not already selected , it is added to the list of those selected. If not, it is withdrawn. Nothing happens if you click on an empty area. + * AIS_InteractiveContext::Select +selects everything found in the surrounding area + * AIS_InteractiveContext::ShiftSelect +selects what was not previously in the list of selected, deselects those already present. + +Highlighting of detected and selected entities is automatically managed by the Interactive Context, whether you are in neutral point or Local Context. The Highlight colors are those dealt with above. You can nonetheless disconnect this automatic mode if you want to manage this part yourself: + + * AIS_InteractiveContext::SetAutomaticHilight + * AIS_InteractiveContext::AutomaticHilight + + +If there is no open local context, the objects selected are called CURRENT OBJECTS; SELECTED OBJECTS if there is one. Iterators allow entities to be recovered in either case. A set of functions allows you to manipulate the objects, which have been placed in these different lists. + +*WARNING * +When a Local Context is open, you can select entities other than interactive objects (vertices, edges etc.) from decompositions in standard modes, or from activation in specific modes on specific interactive objects. Only interactive objects are stocked in the list of selected objects. You can question the Interactive context by moving the mouse. The following functions will allow you to: + * tell whether something has been detected + * tell whether it is a shape + * get the shape if the detected entity is one + * get the interactive object if the detected entity is one. + +The following functions are concerned: + * AIS_InteractiveContext::HasDetected + * AIS_InteractiveContext::HasDetectedShape + * AIS_InteractiveContext::DetectedShape + * AIS_InteractiveContext::DetectedInteractive + +After using the Select and ShiftSelect functions in Neutral Point, you can explore the list of selections, referred to as current objects in this context. You can: + * initiate a scan of this list + * extend the scan + * resume the scan + * get the name of the current object detected in the scan. + +The following functions are concerned: + * AIS_InteractiveContext::InitCurrent + * AIS_InteractiveContext::MoreCurrent + * AIS_InteractiveContext::NextCurrent + * AIS_InteractiveContext::Current + +You can: + * get the first current interactive object + * highlight current objects + * remove highlight from current objects + * empty the list of current objects in order to update it + * find the current object. + +The following functions are concerned: + * AIS_InteractiveContext::FirstCurrentObject + * AIS_InteractiveContext::HilightCurrents + * AIS_InteractiveContext::UnhilightCurrents + * AIS_InteractiveContext::ClearCurrents + * AIS_InteractiveContext::IsCurrent. + +In Local Context, you can explore the list of selected objects available. You can: + * initiate, + * extend, + * resume a scan, and then + * get the name of the selected object. + +The following functions are concerned: + + * AIS_InteractiveContext::InitSelected + * AIS_InteractiveContext::MoreSelected + * AIS_InteractiveContext::NextSelected + * AIS_InteractiveContext::SelectedShape. + +You can: + * check to see if you have a selected shape, and if not, + * get the picked interactive object, + * check to see if the applicative object has an owner from Interactive attributed to it + * get the owner of the detected applicative entity + * get the name of the selected object. + +The following functions are concerned: + + * AIS_InteractiveContext::HasSelectedShape + * AIS_InteractiveContext::Interactive + * AIS_InteractiveContext::HasApplicative + * AIS_InteractiveContext::Applicative + * AIS_InteractiveContext::IsSelected. + +

Example

+ + +myAISCtx-InitSelected(); +while (myAISCtx-MoreSelected()) +{ +if (myAISCtx-HasSelectedShape) +{ +TopoDS_Shape ashape = myAISCtx-SelectedShape(); +// to be able to use the picked shape +    } +else +{ +Handle_AIS_InteractiveObject aniobj = myAISCtx-Interactive(); +// to be able to use the picked interactive object +} +myAISCtx-NextSelected(); } + + +@subsubsection occt_1621831385_8103086097710 Remarks: + +In Local Context and in the iteration loop, which allows you to recover selected entities, you have to ask whether you have selected a shape or an interactive object before you can recover the entity. If you have selected a Shape from TopoDS on decomposition in standard mode, the *Interactive ()* function returns the interactive object, which provided the selected shape. Other functions allow you to manipulate the content of Selected or Current Objects: + * erase selected objects + * display them, + * put them in the list of selections + +The following functions are concerned: + + * AIS_InteractiveContext::EraseSelected + * AIS_InteractiveContext::DisplaySelected + * AIS_InteractiveContext::SetSelected + + +You can also: + + * take the list of selected objects from a local context and put it into the list of current objects in Neutral Point, + * add or remove an object from the list of selected entities, + * highlight and + * remove highlighting from a selected object + * empty the list of selected objects. + +The following functions are concerned: + + * AIS_InteractiveContext::SetSelectedCurrent + * AIS_InteractiveContext::AddOrRemoveSelected + * AIS_InteractiveContext::HilightSelected + * AIS_InteractiveContext::UnhilightSelected + * AIS_InteractiveContext::ClearSelected + +You can highlight and remove highlighting from a current object, and empty the list of current objects. + + *     AIS_InteractiveContext::HilightCurrents + *     AIS_InteractiveContext::UnhilightCurrents + *     AIS_InteractiveContext::ClearCurrents + +When you are in open Local Context, you may be lead to keep *temporary* interactive objects. This is possible using the following functions: + + * AIS_InteractiveContext::KeepTemporary + * AIS_InteractiveContext::SetSelectedCurrent + +The first function transfers the characteristics of the interactive object seen in its local context (visualization mode etc.) to the neutral point. When the local context is closed, the object does not disappear. The second allows the selected object to become the current object when you close the local context. +You can also want to modify in a general way the state of the local context before continuing a selection (emptying objects, removing filters, standard activation modes). To do that, you must use the following function: + + * AIS_InteractiveContext::ClearLocalContext + +@subsubsection occt_1621831385_8103086097711 Advice on Using Local Contexts + +The possiblities of use for local contexts are numerous depending on the type of operation that you want to perform: + * working on all visualized interactive objects, + * working on only a few objects, + * working on a single object. + +1. When you want to work on one type of entity, you should open a local context with the option UseDisplayedObjects set to FALSE. Some functions which allow you to recover the visualized interactive objects, which have a given Type, and Signature from the *Neutral Point* are: + +AIS_InteractiveContext::DisplayedObjects +(AIS_ListOfInteractive& aListOfIO) const; + +AIS_InteractiveContext::DisplayedObjects +(const AIS_KindOfInteractive WhichKind, + const Standard_Integer WhichSignature, +AIS_ListOfInteractive& aListOfIO) const; + +At this stage, you only have to load the functions Load, Activate, and so on. + +2. When you open a Local Context with default options, you must keep the following points in mind: + +The Interactive Objects visualized at Neutral Point are activated with their default selection mode. You must deactivate those, which you do not want to use. + +The Shape Type Interactive Objects are automatically decomposed into sub-shapes when standard activation modes are launched. + +The *temporary* Interactive Objects present in the Local Contexts are not automatically taken into account. You have to load them manually if you want to use them. + +The stages could be the following: +1. Open a Local Context with the right options; +2. Load/Visualize the required complementary objects with the desired activation modes. +3. Activate Standard modes if necessary +4. Create its filters and add them to the Local Context +5. Detect/Select/recover the desired entities +6. Close the Local Context with the adequate index. + +It is useful to create an INTERACTIVE EDITOR, to which you pass the Interactive Context. This will take care of setting up the different contexts of selection/presentation according to the operation, which you want to perform. +

Example

+ + +You have visualized several types of interactive objects: *AIS_Points*, *AIS_Axes*, *AIS_Trihedrons*, and *AIS_Shapes*. + +For your applicative function, you need an axis to create a revolved object. You could obtain this axis by identifying: + * an axis which is already visualized, + * 2 points, + * a rectilinear edge on the shapes which are present, + * a cylindrical face on the shapes (You will take the axis of this face) + +myIHMEditor::myIHMEditor +(const Handle(AIS_InteractiveContext)& Ctx, + ....) : + myCtx(Ctx), +... + +{ +} + +myIHMEditor::PrepareContext() +{ +myIndex =myCtx-OpenLocalContext(); + +//the filters + +Handle(AIS_SignatureFilter) F1 = new + AIS_SignatureFilter(AIS_KOI_Datum,AIS_SD_Point); +//filter on the points + +Handle(AIS_SignatureFilter) F2 = new +AIS_SignatureFilter(AIS_KOI_Datum,AIS_SD_Axis); +//filters on the axes. + +Handle(StdSelect_FaceFilter) F3 = new + StdSelect_FaceFilter(AIS_Cylinder); +//cylindrical face filters + +//... + +// activation of standard modes on the shapes.. +myCtx-ActivateStandardMode(TopAbs_FACE); +myCtx-ActivateStandardMode(TopAbs_VERTEX); +myCTX-Add(F1); +myCTX-Add(F2); +myCTX-Add(F3); + +// at this point, you can call the selection/detection function +} + +void myIHMEditor::MoveTo(xpix,ypix,Vue) + +{ myCTX-MoveTo(xpix,ypix,vue); // the highlight of what is detected is automatic. } +Standard_Boolean myIHMEditor::Select() { // returns true if you should continue the selection +myCTX-Select(); myCTX-InitSelected(); if(myCTX-MoreSelected()) + {  if(myCTX-HasSelectedShape()) +{ const TopoDS_Shape& sh = myCTX-SelectedShape(); +if( vertex){ +if(myFirstV...) +{ +//if it’s the first vertex, you stock it, then you deactivate the faces and only keep the filter on the points: +mypoint1 = ....; +myCtx-RemoveFilters(); +myCTX-DeactivateStandardMode(TopAbs_FACE); +myCtx-Add(F1); +// the filter on the AIS_Points +myFirstV = Standard_False; +return Standard_True; + } else  { +  mypoint2 =...; +// construction of the axis return Standard_False; +} + } + else +  { +//it is a cylindrical face : you recover the axis; visualize it; and stock it. +return Standard_False; +} +  } +// it is not a shape but is no doubt a point. +else +{ +Handle(AIS_InteractiveObject) +SelObj = myCTX-SelectedInteractive(); +if(SelObj-Type()==AIS_KOI_Datum) +{ +if(SelObj-Signature()==1) +{ +if (firstPoint) +{ +mypoint1 =... +return Standard_True; +} +else +{ +mypoint2 = ...; +//construction of the axis, visualization, stocking +return Standard_False; +} +} + +else +{ +// you have selected an axis; stock the axis +return Standard_False; +} +} +} +} +} +@subsection occt_1621831385_810308609111 ANNEX I: Standard Interactive Object Classes in AIS DATUMS: + +AIS_Point AIS_Axis AIS_Line AIS_Circle AIS_Plane AIS_Trihedron : 4 selection modes + * mode 0 : selection of a trihedron + * mode 1 : selection of the origin of the trihedron + * mode 2 : selection of the axes + * mode 3 : selection of the planes XOY, YOZ, XOZ + +when you activate one of modes 1 2 3 4 , you pick AIS objects of type: + * AIS_Point + * AIS_Axis (and information on the type of axis) + * AIS_Plane (and information on the type of plane). + +AIS_PlaneTrihedron offers 3 selection modes: + * mode 0 : selection of the whole trihedron + * mode 1 : selection of the origin of the trihedron + * mode 2 : selection of the axes - same remarks as for the Trihedron. + +

Warning

+For the presentation of planes and trihedra, the default unit of length is millimeter, and the default value for the representation of axes is 100. If you modify these dimensions, you must temporarily recover the object DRAWER. From inside it, take the Aspects in which the values for length are stocked (PlaneAspect for the plane, FirstAxisAspect for trihedra), and change these values inside these Aspects. Finally, recalculate the presentation. + +@subsubsection occt_1621831385_8103086092222 OBJECTS +AIS_Shape : 3 visualization modes : + * mode 0 : Line (default mode) + * mode 1 : Shading (depending on the type of shape) + * mode 2 : Bounding Box + +7 maximum selection modes, depending on the complexity of the shape : + * * mode 0 : selection of the AIS_Shape + * * mode 1 : selection of the vertices + * * mode 2 : selection of the edges + * * mode 3 : selection of the wires + * * mode 4 : selection of the faces + * * mode 5 : selection of the shells + * * mode 6 : selection of the constituent solids. + +AIS_Triangulation: Simple interactive object for displaying triangular mesh contained in Poly_Triangulation container. + +AIS_ConnectedInteractive: Interactive Object connecting to another interactive object reference, and located elsewhere in the viewer makes it possible not to calculate presentation and selection, but to deduce them from your object reference. + +AIS_ConnectedShape: Object connected to interactive objects having a shape; this class has the same decompositions as AIS_Shape. What’s more, it allows a presentation of hidden parts, which are calculated automatically from the shape of its reference. + +AIS_MultipleConnectedInteractive: Object connected to a list of interactive objects (which can also be Connected objects. It does not require memory hungry calculations of presentation) + +AIS_MultipleConnectedShape: Interactive Object connected to a list of interactive objects having a Shape (AIS_Shape, AIS_ConnectedShape, AIS_MultipleConnectedShape). The presentation of hidden parts is calculated automatically. + +AIS_TexturedShape: Interactive Object that supports texture mapping. It is constructed as a usual AIS_Shape, but has additional methods that allow to map a texture on it. + +MeshVS_Mesh: Interactive Object that represents meshes, it has a data source that provides geometrical information (nodes, elements) and can be built up from the source data with a custom presentation builder. + +@subsubsection occt_1621831385_8103086093333 RELATIONS +The list is not exhaustive. +AIS_ConcentricRelation +AIS_FixRelation +AIS_IdenticRelation +AIS_ParallelRelation +AIS_PerpendicularRelation +AIS_Relation +AIS_SymmetricRelation +AIS_TangentRelation + +@subsubsection occt_1621831385_810308609444 DIMENSIONS +AIS_AngleDimension +AIS_Chamf2dDimension +AIS_Chamf3dDimension +AIS_DiameterDimension +AIS_DimensionOwner +AIS_LengthDimension +AIS_OffsetDimension +AIS_RadiusDimension + +@subsubsection occt_1621831385_810308609555 MeshVS_Mesh +MeshVS_Mesh is an Interactive Object that represents meshes. +This object differs from the AIS_Shape as its geometrical data is supported by the data source (*MeshVS_DataSource*) that describes nodes and elements of the object. As a result, you can provide your own data source. +However, the *DataSource* does not provide any information on attributes, for example nodal colors, but you can apply them in a special way – by choosing the appropriate presentation builder. +The presentations of MeshVS_Mesh are built with the presentation builders (*MeshVS_PrsBuilder*). You can choose between the builders to represent the object in a different way. Moreover, you can redefine the base builder class and provide your own presentation builder. +You can add/remove builders using the following methods: + * MeshVS_Mesh::AddBuilder + (const Handle (MeshVS_PrsBuilder) &Builder, +  Standard_Boolean TreatAsHilighter) + * MeshVS_Mesh::RemoveBuilder (const Standard_Integer Index) + * MeshVS_Mesh::RemoveBuilderById + (const Standard_Integer Id) + +There is a set of reserved display and highlighting mode flags for MeshVS_Mesh. Mode value is a number of bits that allows you to select additional display parameters and combine the following mode flags: + * MeshVS_DMF_WireFrame + * MeshVS_DMF_Shading + * MeshVS_DMF_Shrink +base modes: display mesh in wireframe, shading, shrink modes. + + * MeshVS_DMF_VectorDataPrs + * MeshVS_DMF_NodalColorDataPrs + * MeshVS_DMF_ElementalColorDataPrs + * MeshVS_DMF_TextDataPrs + * MeshVS_DMF_EntitiesWithData +represent different kinds of data + + * MeshVS_DMF_DeformedPrsWireFrame + * MeshVS_DMF_DeformedPrsShading + * MeshVS_DMF_DeformedPrsShrink +display deformed mesh in wireframe, shading or shrink modes + + * MeshVS_DMF_SelectionPrs + * MeshVS_DMF_HilightPrs +selection and hilighting + + * MeshVS_DMF_User +user-defined mode + +These values will be used by the presentation builder. +There is also a set of selection modes flags that can be grouped in a combination of bits: + * MeshVS_SMF_0D + * MeshVS_SMF_Link + * MeshVS_SMF_Face + * MeshVS_SMF_Volume + * MeshVS_SMF_Element +Element: 0D, Link, Face and Volume grouped as a bit mask + + * MeshVS_SMF_Node + * MeshVS_SMF_All +All: Element and Node grouped as a bit mask + + * MeshVS_SMF_Mesh + * MeshVS_SMF_Group + +Such an object, for example, can be used for displaying the object, stored in the STL file format: +

Example

+ +**// read the data and create a data source** +Handle (StlMesh_Mesh) aSTLMesh = RWStl::ReadFile (aFileName); +Handle (XSDRAWSTLVRML_DataSource) aDataSource = + new XSDRAWSTLVRML_DataSource (aSTLMesh); + +**// create mesh** +Handle (MeshVS_Mesh) aMesh = new MeshVS(); +aMesh-SetDataSource (aDataSource); + +**// use default presentation builder** +Handle (MeshVS_MeshPrsBuilder) aBuilder = +    new MeshVS_MeshPrsBuilder (aMesh); +aMesh-AddBuilder (aBuilder, Standard_True); + +MeshVS_NodalColorPrsBuilder allows you to represent a mesh with a color scaled texture mapped on it. To do this you should define a color map for the color scale, pass this map to the presentation builder, and define an appropriate value in the range of 0.0 – 1.0 for every node. +The following example demonstrates how you can do this (**please check,** if the view has been set up to display textures): +

Example

+ +**// assign nodal builder to the mesh** +Handle (MeshVS_NodalColorPrsBuilder) aBuilder = +  new MeshVS_NodalColorPrsBuilder +    (aMesh,MeshVS_DMF_NodalColorDataPrs | MeshVS_DMF_OCCMask); +aBuilder-UseTexture (Standard_True); + +**// prepare color map** +Aspect_SequenceOfColor aColorMap; +aColorMap.Append ((Quantity_NameOfColor) Quantity_NOC_RED); +aColorMap.Append ((Quantity_NameOfColor) Quantity_NOC_BLUE1); + +**// assign color scale map values (0..1) to nodes** +TColStd_DataMapOfIntegerReal aScaleMap; +**…** +**   // iterate through the nodes and add an node id and an appropriate ** +**   // value to the map** + aScaleMap.Bind (anId, aValue); +  +**// pass color map and color scale values to the builder** +aBuilder-SetColorMap (aColorMap); +aBuilder-SetInvalidColor (Quantity_NOC_BLACK); +aBuilder-SetTextureCoords (aScaleMap); +aMesh-AddBuilder (aBuilder, Standard_True); + +@subsection occt_1621831385_810308609666 ANNEX II : Principles of Dynamic Selection     + + +The idea of dynamic selection is to represent the entities, which you want to select by a bounding box in the actual 2D space of the selection view. The set of these zones is ordered by a powerful sorting algorithm. To then find the applicative entities actually detected at this position, all you have to do is read which rectangles are touched at mouse position (X,Y) of the view, and judiciously reject some of the entities which have provided these rectangles. + + +@subsubsection occt_1621831385_81030860912222 How to go from the objects to 2D boxes + + +An intermediary stage consists in representing what you can make selectable by means of sensitive primitives and owners, entities of a high enough level to be known by the selector mechanisms. + +The sensitive primitive is capable of: + * giving a 2D bounding box to the selector. + * answering the rejection criteria positively or negatively by a *Matches* function. + * being projected from 3D in the 2D space of the view if need be. + * returning the owner which it will represent in terms of selection. + +A set of standard sensitive primitives exists in Select3D packages for 3D primitives, and Select2D for 2D primitives. + +The owner is the entity, which makes it possible to link the sensitive primitives and the objects that you really wanted to detect. It stocks the diverse information, which makes it possible to find objects. An owner has a priority (*5* by default), which you can modulate, so as to make one entity more selectable than another. +![](/user_guides/visualization/images/visualization_image021.jpg) + +@subsubsection occt_1621831385_81030860912341 Implementation in an interactive/selectable object + +1. Define the number of selection modes possible, i.e. what you want to identify by activating each of the selection modes. Example: for an interactive object representing a topological shape, +mode 0: selection of the interactive object itself +mode 1: selection of the vertices +mode 2: selection of the edges +mode 3: selection of the wires +mode 4: selection of the faces detectable + +2. For each selection mode of an interactive object, *model* the set of entities, which you want to locate by these primitives and these owners. + +3. There exists an *owner* root class, *SelectMgr_EntityOwne*r, containing a reference to a selectable object, which has created it. If you want to stock its information, you have to create classes derived from this root class. Example: for shapes, there is the *StdSelect_BRepOwner *class, which can save a TopoDS shape as a field as well as the Interactive Object. + +4. The set of sensitive primitives which has been calculated for a given mode is stocked in *SelectMgr_Selection*. + +5. For an Interactive object, the modeling is done in the *ComputeSelection *virtual function. + +

Example

+ +Let an interactive object represent a box. +We are interested in having 2 location modes: + * mode 0: location of the whole box. + * mode 1: location of the edges on the box. + + For the first mode, all sensitive primitives will have the same owner, which will represent the interactive object. In the second case, we have to create an owner for each edge, and this owner will have to contain the index for the edge, which it represents. You will create a class of owner, which derives from *SelectMgr_EntityOwner*. + +The *ComputeSelection* function for the interactive box can have the following form: + +void InteractiveBox::ComputeSelection +(const Handle(SelectMgr_Selection)& Sel, + const Standard_Integer Mode) +{ +switch(Mode) +{ case 0: //locating the whole box by making its faces sensitive... +{ +Handle(SelectMgr_EntityOwner) Ownr = new + SelectMgr_EntityOwner(this,5); +for(Standard_Integer I=1;I=Nbfaces;I++) +{ +//Array is a TColgp_Array1OfPnt: which represents the array of vertices. Sensitivity is +Select3D_TypeOfSensitivity value +Sel-Add(new +Select3D_SensitiveFace(Ownr,Array,Sensitivity)); +} +break; +   } +  case 1: +// locates the edges {   for(Standard_Integer i=1;i=12;i++) +{ +// 1 owner per edge... +Handle(mypk_EdgeOwner) Ownr = +new mypk_EdgeOwner(this,i,6); +//6-priority +Sel-Add(new Select3D_SensitiveSegment +    (Ownr,firstpt(i),lastpt(i))); +} +break; +} +} +} + + +@subsubsection occt_1621831385_81030860912432 How It Works Concretely + +Selectable objects are loaded in the selection manager, which has one or more selectors; in general, we suggest assigning one selector per viewer. All you have to do afterwards is to activate or deactivate the different selection modes for selectable objects. The *SelectionManager* looks after the call to the *ComputeSelection* functions for different objects. NOTE: This procedure is completely hidden if you use the interactive contexts of AIS (see section 3.3, Contexts) + +

Example

+ +//We have several * interactive boxes * box1, box2, box3; + +Handle(SelectMgr_SelectionManager) SM = new SelectMgr_SelectionManager(); +Handle(StdSelect_ViewerSelector3d) VS = new StdSelect_ViewerSelector3d(); + +SM-Add(VS); +SM-Load(box1);SM-Load(box2);SM-Load(box3); +// box load. +SM-Activate(box1,0,VS); +// activates mode 0 of box 1 in the selector VS +SM-Activate(box1,1,VS); +M-Activate(box3,1,VS); + +VS-Pick(xpix,ypix,vue3d) +// detection of primitives by mouse position. + +Handle(EntityOwner) POwnr = VS-OnePicked(); +// picking of the *best* owner detected + +for(VS-Init();VS-More();VS-Next()) +{ +VS-Picked(); +// picking of all owners detected +  } +SM-Deactivate(box1); +// deactivate all active modes of box1 + +![](/user_guides/visualization/images/visualization_image022.jpg) +1st activation of the box’s mode 1: calculation of sensitive primitives + 3D/2D projection + sorting + +deactivation of mode: only updated by sorting + +rotation of the view: only projection + sorting of active primitives + +modification of the box - Recalculation of the active selection, recalculation flag on the inactive ones  + 3D/2D projection + sorting + +@section occt_1621831385_1539918866 3D Presentations + +@subsection occt_1621831385_15399188661 Glossary of 3D terms + +@subsubsection occt_1621831385_153991886611 From Graphic3d + + + +@subsubsection occt_1621831385_153991886612 From V3d + + +**    **  + + +@subsection occt_1621831385_15399188662 Creating a 3D scene + +To create 3D graphic objects and display them on the screen, follow the procedure below: +**1. **Create attributes. +**2. **Create a 3D viewer.. +**3. **Create a view. +**4. **Create an interactive context. +**5. **Create interactive objects. +**6. **Create primitives in the interactive object +**7. **Display the interactive object. + +@subsubsection occt_1621831385_153991886621 Create attributes + +Create colors. +

Example

+ +Quantity_Color Black (Quantity_NOC_BLACK); +Quantity_Color Blue (Quantity_NOC_MATRABLUE); +Quantity_Color Brown (Quantity_NOC_BROWN4); +Quantity_Color Firebrick (Quantity_NOC_FIREBRICK); +Quantity_Color Forest (Quantity_NOC_FORESTGREEN); +Quantity_Color Gray (Quantity_NOC_GRAY70); +Quantity_Color +MyColor (0.99, 0.65, 0.31, Quantity_TOC_RGB); +Quantity_Color Beet (Quantity_NOC_BEET); +Quantity_Color White (Quantity_NOC_WHITE); + + + +Create line attributes. + +

Example

+ +Handle(Graphic3d_AspectLine3d) CTXLBROWN = +new Graphic3d_AspectLine3d (); +Handle(Graphic3d_AspectLine3d) CTXLBLUE = +new Graphic3d_AspectLine3d (); +Handle(Graphic3d_AspectLine3d) CTXLWHITE = +new Graphic3d_AspectLine3d(); +CTXLBROWN-SetColor (Brown); +CTXLBLUE-SetColor (Blue); +CTXLWHITE-SetColor (White); + + +Create marker attributes. +

Example

+ +Handle(Graphic3d_AspectMarker3d) CTXMFIREBRICK = +new Graphic3d_AspectMarker3d(); +CTXMFIREBRICK-SetColor (Firebrick); +CTXMFIREBRICK-SetScale (1.0); +CTXMFIREBRICK-SetType (Aspect_TOM_BALL); + + +Create facet attributes. +

Example

+ +Handle(Graphic3d_AspectFillArea3d) CTXF = +new Graphic3d_AspectFillArea3d (); +Graphic3d_MaterialAspect BrassMaterial +(Graphic3d_NOM_BRASS); +Graphic3d_MaterialAspect GoldMaterial +(Graphic3d_NOM_GOLD); +CTXF-SetInteriorStyle (Aspect_IS_SOLID); +CTXF-SetInteriorColor (MyColor); +CTXF-SetDistinguishOn (); +CTXF-SetFrontMaterial (GoldMaterial); +CTXF-SetBackMaterial (BrassMaterial); +CTXF-SetEdgeOn (); + + +Create text attributes. +

Example

+ +Handle(Graphic3d_AspectText3d) CTXT = +new Graphic3d_AspectText3d +(Forest, Graphic3d_NOF_ASCII_MONO, 1., 0.); + +@subsubsection occt_1621831385_153991886622 Create a 3D Viewer (a Windows example) +

Example

+ +Handle(Graphic3d_WNTGraphicDevice) TheGraphicDevice = ...; +TCollection_ExtendedString aName(*3DV*); +myViewer = +new V3d_Viewer (TheGraphicDevice,aName.ToExtString (), **); +myViewer - SetDefaultLights (); +myViewer - SetLightOn (); +@subsubsection occt_1621831385_153991886623 Create a 3D view (a Windows example) + +It is assumed that a valid Windows window may already be accessed via the method GetSafeHwnd().   +

Example

+ + + +@subsubsection occt_1621831385_153991886624 Create an interactive context +

Example

+ +myAISContext = new AIS_InteractiveContext (myViewer); + + +You are now able to display interactive objects such as an AIS_Shape. +

Example

+ +TopoDS_Shape aShape = BRepAPI_MakeBox(10,20,30)_Solid(); +Handle (AIS_Shape) aAISShape = new AIS_Shape(aShape); +myAISContext - Display (aAISShape); + +@subsubsection occt_1621831385_153991886625 Create your own interactive object + +Follow the procedure below to compute the presentable object: + +**1. **Build a presentable object inheriting from AIS_InteractiveObject (refer to the Chapter on Presentable Objects). + +**2. **Reuse the Prs3d_Presentation provided as an argument of the compute methods. + +*NOTE* +*There are two compute methods: one for a ‘standard representation, and the other for a ‘degenerated representation, i.e. in hidden line removal and wireframe modes.* +

Example of the compute methods

+ +Void +myPresentableObject::Compute +(const Handle(PrsMgr_PresentationManager3d)& +aPresentationManager, +const Handle(Prs3d_Presentation)& aPrs, +const Standard_Integer aMode) +( +//... +) + + + +void +myPresentableObject::Compute +(const Handle(Prs3d_Projector)&, +const Handle(Prs3d_Presentation)& aPrs) +( +//... +) + + +@subsubsection occt_1621831385_153991886626 Create primitives in the interactive object + +Get the group used in Prs3d_Presentation. +

Example

+ +Handle(Graphic3d_Group) TheGroup = Prs3d_Root::CurrentGroup(aPrs); + + +Update the group attributes. + +

Example

+ +TheGroup - SetPrimitivesAspect(CTXLBLUE); + + +Create two triangles in group TheGroup. +

Example

+ +Standard_Integer aNbTria = 2; +Handle(Graphic3d_ArrayOfTriangles) aTriangles = new Graphic3d_ArrayOfTriangles(3 * aNbTria, 0, Standard_True); +Standard_Integer anIndex; +for (anIndex = 1; anIndex = aNbTria; nt++) +{ +  aTriangles-AddVertex(anIndex * 5., 0., 0., 1., 1., 1.); +  aTriangles-AddVertex(anIndex * 5 + 5, 0., 0., 1., 1., 1.); +  aTriangles-AddVertex(anIndex * 5 + 2.5, 5., 0., 1., 1., 1.); +} +TheGroup-BeginPrimitives (); +mygroup-AddPrimitiveArray(aTriangles); +TheGroup-EndPrimitives (); + + +The BeginPrimitives () and EndPrimitives () methods are used when creating a set of various primitives in the same group. +Use the polyline function to create a boundary box for the Struct structure in group TheGroup. +

Example

+ +Standard_Real Xm, Ym, Zm, XM, YM, ZM; +Struct-MinMaxValues (Xm, Ym, Zm, XM, YM, ZM); + +Handle(Graphic3d_ArrayOfPolylines) aPolylines = new Graphic3d_ArrayOfPolylines(16, 4); +aPolylines-AddBound (4); +aPolylines-AddVertex (Xm, Ym, Zm); +aPolylines-AddVertex (Xm, Ym, ZM); +aPolylines-AddVertex (Xm, YM, ZM); +aPolylines-AddVertex (Xm, YM, Zm); +aPolylines-AddBound (4); +aPolylines-AddVertex (Xm, Ym, Zm); +aPolylines-AddVertex (XM, Ym, Zm); +aPolylines-AddVertex (XM, Ym, ZM); +aPolylines-AddVertex (XM, YM, ZM); +aPolylines-AddBound (4); +aPolylines-AddVertex (XM, YM, Zm); +aPolylines-AddVertex (XM, Ym, Zm); +aPolylines-AddVertex (XM, YM, Zm); +aPolylines-AddVertex (Xm, YM, Zm); +aPolylines-AddBound (4); +aPolylines-AddVertex (Xm, YM, ZM); +aPolylines-AddVertex (XM, YM, ZM); +aPolylines-AddVertex (XM, Ym, ZM); +aPolylines-AddVertex (Xm, Ym, ZM); + +TheGroup-BeginPrimitives (); +TheGroup-AddPrimitiveArray(aPolylines); +TheGroup-EndPrimitives (); + + +Create text and markers in group TheGroup. +

Example

+ +static char *texte[3] = {  *Application title*, +*My company*, +*My company address.* }; +Graphic3d_Array1OfVertex Tpts8 (0, 1); +Tpts8(0).SetCoord (-40.0, -40.0, -40.0); +Tpts8(1).SetCoord (40.0, 40.0, 40.0); +TheGroup-MarkerSet (Tpts8); +Graphic3d_Vertex Marker (0.0, 0.0, 0.0); + +for (i=0; i=2; i++) { +  Marker.SetCoord (-(Standard_Real)i*4 + 30, +    (Standard_Real)i*4, +   -(Standard_Real)i*4); +  TheGroup-Text (texte[i], Marker, 20.); +} + +@section occt_1621831385_1435012457 3D Resources + +The 3D resources include the Graphic3d and V3d packages. + +@subsection occt_1621831385_14350124571 Graphic3D + +@subsubsection occt_1621831385_143501245711 Overview + +The **Graphic3d** package is used to create 3D graphic objects in a 3D viewer. These objects called **structures** are made up of groups of primitives and attributes. A group is the smallest editable element of a structure. A transformation can be applied to a structure. Structures can be connected to form a tree of structures, composed by transformations. Structures are globally manipulated by the viewer. + +@subsubsection occt_1621831385_143501245712 Provided services + +Graphic structures can be: + * Displayed, + * Highlighted, + * Erased, + * Transformed, + * Connected to form a tree. + There are classes for: + * Visual attributes for lines, faces, markers, text, materials, + * Vectors and vertices, + * Defining an Advanced Graphic Device, + * Graphic objects, groups, and structures. + +@subsubsection occt_1621831385_143501245713 About the primitives +** ** +** **Markers** ** + * Have one or more vertices, + * Have a type, a scale factor, and a color, + * Have a size, shape, and orientation independent of transformations. +*Polygons * + * Have one closed boundary, + * Have at least three vertices, + * Are planar and have a normal, + * Have interior attributes - style, color, front and back material, texture and reflection ratio, + * Have a boundary with the following attributes - type, width scale factor, color. The boundary is only drawn when the interior style is hollow. + +*Polygons with holes * + * Have multiple closed boundaries, each one with at least three vertices, + * Are planar and have a normal, + * Have interior attributes - style, color, front and back material, + * Have a boundary with the following attributes - type, width scale factor, color. The boundary is only drawn when the interior style is hollow. + +*Polylines * + * Have two or more vertices, + * Have the following attributes - type, width scale factor, color. + +*Text * + * Has geometric and non-geometric attributes, + * Geometric attributes - character height, character up vector, text path, horizontal and vertical alignment, orientation, three-dimensional position, zoomable flag + * Non-geometric attributes - text font, character spacing, character expansion factor, color. + +@subsubsection occt_1621831385_143501245714 Primitive arrays + +Primitive arrays are a more efficient approach to describe and display the primitives from the aspects of memory usage and graphical performance. The key feature of the primitive arrays is that the primitive data is not duplicated. For example, two polygons could share the same vertices, so it is more efficient to keep the vertices in a single array and specify the polygon vertices with indices of this array. In addition to such kind of memory savings, the OpenGl graphics driver provides the Vertex Buffer Objects (VBO). VBO is a sort of video memory storage that can be allocated to hold the primitive arrays, thus making the display operations more efficient and releasing the RAM memory. + +The Vertex Buffer Objects are enabled by default, but VBOs availability depends on the implementation of OpenGl. If the VBOs are unavailable or there is not enough video memory to store the primitive arrays, the RAM memory will be used to store the arrays. + +The Vertex Buffer Objects can be disabled at the application level. You can use the following method to enable/disable VBOs: + * void Graphic3d_GraphicDriver::EnableVBO + (const Standard_Boolean status) + +The following example shows how to disable the VBO support: +

Example

+ +**// get the graphic driver** +Handle (Aspect_GraphicDriver) aDriver = +  myAISContext-CurrentViewer()-Device()-GraphicDriver(); + +**// disable VBO support** +Handle (Graphic3d_GraphicDriver):: +    DownCast (aDriver)-EnableVBO (Standard_False); + +**Please note** that the use of Vertex Buffer Objects requires the application level primitive data provided by the Graphic3d_ArrayOfPrimitives to be transferred to the video memory. TKOpenGl transfers the data and releases the Graphic3d_ArrayOfPrimitives internal pointers to the primitive data. Thus it might be necessary to pay attention to such kind of behaviour, as the pointers could be modified (nullified) by the TKOpenGl. + +The different types of primitives could be presented with the following primitive arrays: + * Graphic3d_ArrayOfPoints, + * Graphic3d_ArrayOfPolygons, + * Graphic3d_ArrayOfPolylines, + * Graphic3d_ArrayOfQuadrangles, + * Graphic3d_ArrayOfQuadrangleStrips, + * Graphic3d_ArrayOfSegments, + * Graphic3d_ArrayOfTriangleFans, + * Graphic3d_ArrayOfTriangles, + * Graphic3d_ArrayOfTriangleStrips. + +The Graphic3d_ArrayOfPrimitives is a base class for these primitive arrays. + +There is a set of similar methods to add vertices to the primitive array: + * Standard_Integer Graphic3d_ArrayOfPrimitives::AddVertex + +These methods take vertex coordinates as an argument and allow you to define the color, the normal and the texture coordinates assigned to the vertex. The return value is the actual number of vertices in the array. + +You can also modify the values assigned to the vertex or query these values by the vertex index: + * void Graphic3d_ArrayOfPrimitives::SetVertice + * void Graphic3d_ArrayOfPrimitives::SetVertexColor + * void Graphic3d_ArrayOfPrimitives::SetVertexNormal + * void Graphic3d_ArrayOfPrimitives::SetVertexTexel + * gp_Pnt Graphic3d_ArrayOfPrimitives::Verticie + * gp_Dir  Graphic3d_ArrayOfPrimitives::VertexNormal + * gp_Pnt2d Graphic3d_ArrayOfPrimitives::VertexTexel + * Quantity_Color Graphic3d_ArrayOfPrimitives::VertexColor + * void Graphic3d_ArrayOfPrimitives::Verticie + * void Graphic3d_ArrayOfPrimitives::VertexNormal + * void Graphic3d_ArrayOfPrimitives::VertexTexel + * void Graphic3d_ArrayOfPrimitives::VertexColor + +The following example shows how to define an array of points: +

Example

+ +**// create an array** +Handle (Graphic3d_ArrayOfPoints) anArray = +  new Graphic3d_ArrayOfPoints (aVerticiesMaxCount); + +**// add vertices to the array** +anArray-AddVertex (10.0, 10.0, 10.0); +anArray-AddVertex (0.0, 10.0, 10.0); + +**// add the array to the structure ** +Handle (Graphic3d_Group) aGroup = + Prs3d_Root::CurrentGroup (aPrs); +aGroup-BeginPrimitives (); +aGroup-AddPrimitiveArray (anArray); +aGroup-EndPrimitives (); + +If the primitives share the same vertices (polygons, triangles, etc) then you can define them as indices of the vertices array. The following method allows you to define the primitives by the indices: + *  Standard_Integer Graphic3d_ArrayOfPrimitives::AddEdge + +This method adds an *edge* in the range [1, VertexNumber() ] in the array. +It is also possible to query the vertex defined by an edge: + * Standard_Integer Graphic3d_ArrayOfPrimitives::Edge + +The following example shows how to define an array of triangles: +

Example

+ +**// create an array** +Standard_Boolean IsNormals = Standard_False; +Standard_Boolean IsColors  = Standard_False; +Standard_Boolean IsTextureCrds = Standard_False; +Handle (Graphic3d_ArrayOfTriangles) anArray = +  new Graphic3d_ArrayOfTriangles (aVerticesMaxCount, +  aEdgesMaxCount, +  IsNormals, +  IsColors, +  IsTextureCrds); +**// add vertices to the array** +anArray-AddVertex (-1.0, 0.0, 0.0);   **// vertex 1** +anArray-AddVertex ( 1.0, 0.0, 0.0);   **// vertex 2** +anArray-AddVertex ( 0.0, 1.0, 0.0);   **// vertex 3** +anArray-AddVertex ( 0.0,-1.0, 0.0);   **// vertex 4** + +**// add edges to the array** +anArray-AddEdge (1);  **// first triangle** +anArray-AddEdge (2); +anArray-AddEdge (3); +anArray-AddEdge (1);  **// second triangle** +anArray-AddEdge (2); +anArray-AddEdge (4); + +**// add the array to the structure** +Handle (Graphic3d_Group) aGroup = +  Prs3d_Root::CurrentGroup (aPrs); +aGroup-BeginPrimitives (); +aGroup-AddPrimitiveArray (anArray); +aGroup-EndPrimitives (); + +If the primitive array presents primitives built from sequential sets of vertices, for example polygons, then you can specify the bounds, or the number of vertices for each primitive. You can use the following method to define the bounds and the color for each bound: + * Standard_Integer Graphic3d_ArrayOfPrimitives::AddBound + +This method returns the actual number of bounds. +It is also possible to set the color and query the number of edges in the bound and bound color: + * Standard_Integer Graphic3d_ArrayOfPrimitives::Bound + * Quantity_Color Graphic3d_ArrayOfPrimitives::BoundColor + * void Graphic3d_ArrayOfPrimitives::BoundColor + +The following example shows how to define an array of polygons: +

Example

+ +**// create an array** +Standard_Boolean IsNormals  = Standard_False; +Standard_Boolean IsVertexColors = Standard_False; +Standard_Boolean IsFaceColors   = Standard_False; +Standard_Boolean IsTextureCrds  = Standard_False; +Handle (Graphic3d_ArrayOfPolygons) anArray = +  new Graphic3d_ArrayOfPolygons (aVerticesMaxCount, + aBoundsMaxCount, + aEdgesMaxCount, + IsNormals, +     IsVertexColors, + IsFaceColors, + IsTextureCrds); + +**// add bounds to the array, first polygon** +anArray-AddBound (3); +anArray-AddVertex (-1.0, 0.0, 0.0);   +anArray-AddVertex ( 1.0, 0.0, 0.0);   +anArray-AddVertex ( 0.0, 1.0, 0.0);   + +**// add bounds to the array, second polygon** +anArray-AddBound (4); +anArray-AddVertex (-1.0, 0.0, 0.0);   +anArray-AddVertex ( 1.0, 0.0, 0.0);   +anArray-AddVertex ( 1.0,-1.0, 0.0);   +anArray-AddVertex (-1.0,-1.0, 0.0);   + +**// add the array to the structure ** +Handle (Graphic3d_Group) aGroup = +  Prs3d_Root::CurrentGroup (aPrs); +aGroup-BeginPrimitives (); +aGroup-AddPrimitiveArray (anArray); +aGroup-EndPrimitives (); + +There are also several helper methods. You can get the type of the primitive array: + * Graphic3d_TypeOfPrimitiveArray    Graphic3d_ArrayOfPrimitives::Type + * Standard_CString Graphic3d_ArrayOfPrimitives::StringType + +and check if the primitive array provides normals, vertex colors, vertex texels (texture coordinates): + * Standard_Boolean    Graphic3d_ArrayOfPrimitives::HasVertexNormals + * Standard_Boolean    Graphic3d_ArrayOfPrimitives::HasVertexColors + * Standard_Boolean    Graphic3d_ArrayOfPrimitives::HasVertexTexels + +or get the number of vertices, edges and bounds: + * Standard_Integer    Graphic3d_ArrayOfPrimitives::VertexNumber + * Standard_Integer    Graphic3d_ArrayOfPrimitives::EdgeNumber + * Standard_Integer    Graphic3d_ArrayOfPrimitives::BoundNumber + +@subsubsection occt_1621831385_143501245715 About materials + +A **material** is defined by coefficients of: + * Transparency, + * Diffuse reflection, + * Ambient reflection, + * Specular reflection. + +Two properties define a given material: + * Transparency + * Reflection properties - its absorption and reflection of light. + +**Diffuse reflection** is seen as a component of the color of the object. + +**Specular reflection** is seen as a component of the color of the light source. + +The following items are required to determine the three colors of reflection: + * Color, + * Coefficient of diffuse reflection, + * Coefficient of ambient reflection, + * Coefficient of specular reflection. + + + +@subsubsection occt_1621831385_143501245716 About textures + +A **texture **is defined by a name. +Three types of texture are available: + * 1D, + * 2D, + * Environment mapping. + +@subsubsection occt_1621831385_143501245717 Graphic3d text + +The OpenGl graphics driver uses advanced text rendering powered by FTGL library. This library provides vector text rendering, as a result the text can be rotated and zoomed without quality loss. +Graphic3d text primitives have the following features: + * fixed size (non-zoomable) or zoomable, + * can be rotated to any angle in the view plane, + * support unicode charset. + +The text attributes for the group could be defined with the Graphic3d_AspectText3d attributes group. +To add any text to the graphic structure you can use the following methods: + *  void Graphic3d_Group::Text +(const Standard_CString AText, + const Graphic3d_Vertex& APoint, + const Standard_Real AHeight, + const Quantity_PlaneAngle AAngle, + const Graphic3d_TextPath ATp, + const Graphic3d_HorizontalTextAlignment AHta, + const Graphic3d_VerticalTextAlignment AVta, + const Standard_Boolean EvalMinMax), +AText parameter is the text string, APoint is the three-dimensional position of the text, AHeight is the text height, AAngle is the orientation of the text (at the moment, this parameter has no effect, but you can specify the text orientation through the Graphic3d_AspectText3d attributes). +ATp parameter defines the text path, AHta is the horizontal alignment of the text, AVta is the vertical alignment of the text. +You can pass Standard_False as EvalMinMax if you don’t want the graphic3d structure boundaries to be affected by the text position. +**Please note** that the text orientation angle can be defined by Graphic3d_AspectText3d attributes. + + * void Graphic3d_Group::Text +(const Standard_CString AText, + const Graphic3d_Vertex& APoint, + const Standard_Real AHeight, + const Standard_Boolean EvalMinMax) + * void Graphic3d_Group::Text +(const TCcollection_ExtendedString &AText, +const Graphic3d_Vertex& APoint, + const Standard_Real AHeight, + const Quantity_PlaneAngle AAngle, + const Graphic3d_TextPath ATp, + const Graphic3d_HorizontalTextAlignment AHta, + const Graphic3d_VerticalTextAlignment AVta, + const Standard_Boolean EvalMinMax) + * void Graphic3d_Group::Text +(const TCcollection_ExtendedString &AText, + const Graphic3d_Vertex& APoint, + const Standard_Real AHeight, + const Standard_Boolean EvalMinMax) + +

Example

+ +**// get the group** +Handle (Graphic3d_Group) aGroup = + Prs3d_Root::CurrentGroup (aPrs); + +**// change the text aspect** +Handle(Graphic3d_AspectText3d) aTextAspect = +   new Graphic3d_AspectText3d (); +aTextAspect-SetTextZoomable (Standard_True); +aTextAspect-SetTextAngle (45.0); +aGroup-SetPrimitivesAspect (aTextAspect); + +**// add a text primitive to the structure** +Graphic3d_Vertex aPoint (1, 1, 1); +aGroup-Text (Standard_CString (*Text*), aPoint, 16.0); + + +@subsubsection occt_1621831385_143501245718 Display priorities + +Structure display priorities control the order in which structures are drawn. When you display a structure you specify its priority. The lower the value, the lower the display priority. When the display is regenerated the structures with the lowest priority are drawn first. For structures with the same display priority the order in which they were displayed determines the drawing order. CAS.CADE supports eleven structure display priorities. + +@subsubsection occt_1621831385_143501245719 About structure hierarchies + +The root is the top of a structure hierarchy or structure network. The attributes of a parent structure are passed to its descendants. The attributes of the descendant structures do not affect the parent. Recursive structure networks are not supported. + +@subsection occt_1621831385_14350124572 V3d +@subsubsection occt_1621831385_143501245721 Overview +The **V3d** package provides the resources to define a 3D viewer and the views attached to this viewer (orthographic, perspective). This package provides the commands to manipulate the graphic scene of any 3D object visualized in a view on screen. +A set of high-level commands allows the separate manipulation of parameters and the result of a projection (Rotations, Zoom, Panning, etc.) as well as the visualization attributes (Mode, Lighting, Clipping, Depth-cueing, etc) in any particular view. + +@subsubsection occt_1621831385_143501245722 Provided services +The V3d package is basically a set of tools directed by commands from the viewer front-end. This tool set contains methods for creating and editing classes of the viewer such as: + * Default parameters of the viewer, + * Views (orthographic, perspective), + * Lighting (positional, directional, ambient, spot, headlight), + * Clipping planes (note that only Z-clipping planes can work with the Phigs interface), + * Instantiated sequences of views, planes, light sources, graphic structures, and picks, + * Various package methods. + +@subsubsection occt_1621831385_143501245723 A programming example +

Example

+ +This sample TEST program for the V3d Package uses primary packages Xw and Graphic3d and secondary packages Visual3d, Aspect, Quantity, Phigs, math. + +**//Create a Graphic Device from the default DISPLAY ** +Handle(Graphic3d_GraphicDevice) GD = +new Graphic3d_GraphicDevice(**) ; + +**// Create a Viewer to this Device ** +Handle(V3d_Viewer) VM = new V3d_Viewer(GD, 400., +// Space size +V3d_Xpos,// Default projection Quantity_NOC_DARKVIOLET, +// Default background +V3d_ZBUFFER, +// Type of visualization +V3d_GOURAUD, +// Shading model +V3d_WAIT); +// Update mode +**// Create a structure in this Viewer ** +Handle(Graphic3d_Structure) S = +new Graphic3d_Structure(VM-Viewer()) ; + +**// Type of structure ** +S-SetVisual (Graphic3d_TOS_SHADING); + +**// Create a group of primitives in this structure** +Handle(Graphic3d_Group) G = new Graphic3d_Group(S) ; + +**// Fill this group with one polygon of size 100** +Graphic3d_Array1OfVertex Points(0,3) ; +Points(0).SetCoord(-100./2.,-100./2.,-100./2.) ; +Points(1).SetCoord(-100./2., 100./2.,-100./2.) ; +Points(2).SetCoord( 100./2., 100./2.,-100./2.) ; +Points(3).SetCoord( 100./2.,-100./2.,-100./2.) ; Normal.SetCoord(0.,0.,1.) ; +G-Polygon(Points,Normal) ; + +**// Create Ambient and Infinite Lights in this Viewer** +Handle(V3d_AmbientLight) L1 = new V3d_AmbientLight +(VM,Quantity_NOC_GRAY50) ; +Handle(V3d_DirectionalLight) L2 = new V3d_DirectionalLight +(VM,V3d_XnegYnegZneg,Quantity_NOC_WHITE) ; + +**// Create a 3D quality Window from the same GraphicDevice** +Handle(Xw_Window) W = +new Xw_Window(GD,*Test V3d*,0.5,0.5,0.5,0.5) ; + +**// Map this Window to this screen** + W-Map() ; + +**// Create a Perspective View in this Viewer** +Handle(V3d_PerspectiveView) V = +new V3d_PerspectiveView(VM); + +**// Set the Eye position** +V-SetEye(100.,100.,100.) ; + +**// Associate this View with the Window ** +V-SetWindow(W) ; + +**// Activate ALL defined Lights in this View ** +V-SetLightOn() ; + +**// Display ALL structures in this View ** +(VM-Viewer())-Display() ; + +**// Finally update the Visualization in this View ** +V-Update() ; + +@subsubsection occt_1621831385_143501245724 Glossary of view transformations +The following terms are used to define view orientation, i.e. transformation from World Coordinates (WC) to the View Reference Coordinates system (VRC) + +The following terms are used to define view mapping, i.e. transformation from View Reference Coordinates (VRC) to the Normalized Projection Coordinates (NPC) + +The V3d_View API uses the following terms to define view orientation and mapping + + +@subsubsection occt_1621831385_143501245725 Management of perspective projection +The perspective projection allows definition of viewing volume as a truncated pyramid (frustum) with apex at the Projection Reference Point. In the View Reference Coordinate system it can be presented by the following picture: + +![](/user_guides/visualization/images/visualization_image023.png![](/user_guides/visualization/images/visualization_image024.png) +Figure 1 View Reference Coordinate System, perspective viewing volume and view mapping parameters + +During panning, window limits are changed, as if a sort of *frame* through which the user sees a portion of the view plane was moved over the view. The perspective frustum itself remains unchanged. + +The perspective projection is defined by two parameters: + * **Depth** value defines distance between Projection Reference Point and the nearest (front) clipping plane. + * **ZSize** defines distance between Front and Back clipping planes. The influence of this parameter is caused by the OCCT specific to center viewing volume around View Reference Point so the front and back plane distances were the same: FPD = BPD = ZSize / 2. +**Note** that the closer the displayed object to the Projection Reference Point the more visible its perspective distortion. Thus, in order to get a good perspective it is recommended to set ZSize value comparable with the expected model size and small Depth value. + +However, very small Depth values might lead to inaccuracy of *fit all* operation and to non-realistic perspective distortion. +

Example

+ +**// Create a Perspective View in Viewer VM** +Handle(V3d_PerspectiveView) V = +new V3d_PerspectiveView(VM); + +**// Set the ZSize ** +V-SetZSize(2000.) ; + +**// Set the Depth value** +V-SetDepth(20.) ; + +**// Set the current mapping as default** +**// to be used by Reset() operation** +V-SetViewMappingDefault() ; + +As an alternative to manual setting of perspective parameters the *V3d_View::DepthFitAll* function can be used. +

Example

+ +**// Display  shape in Viewer VM** +Handle(AIS_InteractiveContext) aContext = +new AIS_InteractiveContext(VM); +aContext-Display(shape); + +**// Create a Perspective View in Viewer VM** +Handle(V3d_PerspectiveView) V = +new V3d_PerspectiveView(VM); + +**// Set automatically the perspective parameters** +V-DepthFitAll() ; + +**// Fit view to object size ** +V-FitAll(); + +**// Set the current mapping as default** +**// to be used by Reset() operation** +V-SetViewMappingDefault() ; + + +It is necessary to take into account that during rotation Z size of the view might be modified automatically to fit the model into the viewing volume. +Make sure the Eye point never gets between the Front and Back clipping planes. +In perspective view, changing Z size results in changed perspective effect. To avoid this, an application should specify the maximum expected Z size using V3d_View::SetZSize() method in advance. +V3d_View::FitAll() with FitZ = Standard_True and V3d_View::ZFitAll() also change the perspective effect and should therefore be used with precautions similar to those for rotation. + +@subsubsection occt_1621831385_143501245726 Underlay and overlay layers management +In addition to interactive 3d graphics displayed in the view you can display an underlying and overlying graphics: text, color scales, drawings. + +All of the v3d view’s graphical objects in the overlay are managed by the default layer manager (*V3d_LayerMgr*). The v3d view has a basic layer manager capable of displaying the color scale, but you can redefine this class to provide your own overlay and underlay graphics. + +You can assign your own layer manager to the v3d view using the following method: + * void V3d_View::SetLayerMgr +(const Handle (V3d_LayerMgr)& aMgr) + +There are three virtual methods to prepare graphics in the manager for further drawing (set up layer dimensions, draw static graphics). These methods could be redefined: + * void V3d_LayerMgr::Begin () + * void V3d_LayerMgr::Redraw () + * void V3d_LayerMgr::End () + +The layer manager controls layers* *(*Visual3d_Layer*) and layer items* *(*Visual3d_LayerItem*). Both the overlay and underlay layers can be created by the layer manager. + +The layer entity is presented by the *Visual3d_Layer* class. This entity provides drawing services in the layer, for example: + * void Visual3d_Layer::DrawText + * void Visual3d_Layer::DrawRectangle + * void Visual3d_Layer::SetColor + * void Visual3d_Layer::SetViewport + +The following example demonstrates how to draw overlay graphics by the V3d_LayerMgr: +

Example

+ +**// redefined method of V3d_LayerMgr** +void MyLayerMgr::Redraw () +{ +  Quantity_Color aRed (Quantity_NOC_RED); +  myOverlayLayer-SetColor (aRed); +  myOverlayLayer-DrawRectangle (0, 0, 100, 100); +} + +The layer contains layer items that will be displayed on view redraw. Such items are the Visual3d_LayerItem entities. To manipulate Visual3d_LayerItem entities assigned to the layer’s internal list you can use the following methods: + * void Visual3d_Layer::AddLayerItem +(const Handle (Visual3d_LayerItem)& Item) + * void Visual3d_Layer::RemoveLayerItem +(const Handle (Visual3d_LayerItem)& Item)  + * void Visual3d_Layer::RemoveAllLayerItems () + * const Visual3d_NListOfLayerItem& +Visual3d_Layer::GetLayerItemList ()   + +The layer’s items are rendered when the following method is called by the graphical driver: + * void Visual3d_Layer::RenderLayerItems () + +The *Visual3d_LayerItem* has virtual methods that are used to render the item: + * void Visual3d_LayerItem::RedrawLayerPrs () + * void Visual3d_LayerItem::ComputeLayerPrs () + +The item’s presentation can be computed before drawing by the ComputeLayerPrs method to save time on redraw. It also has an additional flag that is used to tell that the presentation should be recomputed: + * void Visual3d_LayerItem::SetNeedToRecompute +(const Standard_Boolean NeedToRecompute) + * Standard_Boolean Visual3d_LayerItem::IsNeedToRecompute + +An example of Visual3d_LayerItem is *V3d_ColorScaleLayerItem* that represents the color scale entity as the layer’s item. +The *V3d_ColorScaleLayerItem* sends render requests to the color scale entity represented by it. As this entity (*V3d_ColorScale*) is assigned to the *V3d_LayerMgr* it uses its overlay layer’s services for drawing: +

Example

+ +**// tell V3d_ColorScale to draw itself** +void V3d_ColorScaleLayerItem::RedrawLayerPrs () +{ +  Visual3d_LayerItem::RedrawLayerPrs () +  if (!MyColorScale.IsNull ()) +    MyColorScale-DrawScale (); +} + +**// V3d_ColorScale has a reference to a LayerMgr** +void V3d_ColorScale::DrawScale () +{ +    **// calls *V3d_ColorScale::PaintRect, V3d_ColorScale::PaintText*, etc …** +} + +**// PaintRect method uses overlay layer of LayerMgr to draw a rectangle ** +void V3d_ColorScale::PaintRect +   (const Standard_Integer X, const Standard_Integer Y, +    const Standard_Integer W, const Standard_Integer H, +    const Quantity_Color aColor, +    const Standard_Boolean aFilled) +{ +  const Handle (Visual3d_Layer)& theLayer = + myLayerMgr-Overlay (); +** …** + +**  **theLayer-SetColor (aColor); +  theLayer-DrawRectangle (X, Y, W, H); +** …** +} + + +@subsubsection occt_1621831385_143501245727 View background styles +There are three types of background styles available for V3d_view: solid color, gradient color and image. + +To set solid color for the background you can use the following methods: + * void V3d_View::SetBackgroundColor +(const Quantity_TypeOfColor Type, + const Quantity_Parameter V1, + const Quantity_Parameter V2, + const Quantity_Parameter V3) +This method allows you to specify the background color in RGB (red, green, blue) or HLS (hue, lightness, saturation) color spaces, so the appropriate values of the Type parameter are Quantity_TOC_RGB and Quantity_TOC_HLS. **Note** that the color value parameters V1,V2,V3 should be in the range between 0.0-1.0. + + * void V3d_View::SetBackgroundColor +(const Quantity_Color &Color) + * void V3d_View::SetBackgroundColor +(const Quantity_NameOfColor Name) + +The gradient background style could be set up with the following methods: + * void V3d_View::SetBgGradientColors +(const Quantity_Color& Color1, + const Quantity_Color& Color2, + const Aspect_GradientFillMethod FillStyle, + const Standard_Boolean update) + * void V3d_View::SetBgGradientColors +(const Quantity_NameOfColor Color1, + const Quantity_NameOfColor Color2, + const Aspect_GradientFillMethod FillStyle, + const Standard_Boolean update) +The Color1 and Color2 parameters define the boundary colors of interpolation, the FillStyle parameter defines the direction of interpolation. You can pass Standard_True as the last parameter to update the view. + +The fill style can be also set with the following method: + * void V3d_View::SetBgGradientStyle +(const Aspect_GradientFillMethod AMethod, +const Standard_Boolean update) + +To get the current background color you can use the following methods: + * void V3d_View::BackgroundColor +(const Quantity_TypeOfColor Type, + Quantity_Parameter &V1, + Quantity_Parameter &V2, + Quantity_Parameter &V3) + * Quantity_Color V3d_View::BackgroundColor() + * void V3d_View::GradientBackgroundColors +(Quantity_Color& Color1, + Quantity_Color& Color2) + * Aspect_GradientBackground GradientBackground() + +To set the image as a background and change the background image style you can use the following methods: + * void V3d_View::SetBackgroundImage +(const Standard_CString FileName, + const Aspect_FillMethod FillStyle, + const Standard_Boolean update) + * void V3d_View::SetBgImageStyle +(const Aspect_FillMethod FillStyle, + const Standard_Boolean update) + +The FileName parameter defines the image file name and the path to it, the FillStyle parameter defines the method of filling the background with the image. The methods are: + * Aspect_FM_NONE:  draw the image in the default position + * Aspect_FM_CENTERED: draw the image at the center of the view + * Aspect_FM_TILED: tile the view with the image + * Aspect_FM_STRETCH: stretch the image over the view + +@subsubsection occt_1621831385_143501245728 User-defined clipping planes +The ability to define custom clipping planes could be very useful for some tasks. The v3d view provides such an opportunity. + +The V3d_Plane class provides the services of clipping planes: it holds the plane equation coefficients and provides its graphical representation. To set and get plane equation coefficients you can use the following methods: + * void V3d_Plane::SetPlane +(const Quantity_Parameter A, + const Quantity_Parameter B, + const Quantity_Parameter C, + const Quantity_Parameter D) + * void V3d_Plane::Plane +(Quantity_Parameter& A, + Quantity_Parameter& B, + Quantity_Parameter& C, + Quantity_Parameter& D) + + V3d_Plane also provides display services: + * void V3d_Plane::Display +(const Handle(V3d_View)& aView, + const Quantity_Color& aColor) + * void V3d_Plane::Erase () + * Standard_Boolean V3d_Plane::IsDisplayed () +The Display method could be redefined to provide custom representation of the clipping plane. + +The clipping planes could be activated with the following methods: + * void V3d_View::SetPlaneOn +(const Handle(V3d_Plane)& MyPlane) + * void V3d_View::SetPlaneOn () +The first method appends the given V3d_Plane to the internal list of user-defined clipping planes of a view and activates it. If the plane is already in the list, it becomes activated. The second method activates all of the planes defined for the view. + +The clipping planes could be deactivated with the similar methods: + * void V3d_View::SetPlaneOff +(const Handle(V3d_Plane)& MyPlane) + * void V3d_View::SetPlaneOff () + +The only difference is that these methods remove the user-defined clipping planes from the internal list. Thus, the view retains only active clipping planes. + +You can iterate through the active planes using the following methods: + * void V3d_View::InitActivePlanes () +sets the iterator to the beginning of the internal list of clipping planes + * Standard_Boolean V3d_View::MoreActivePlanes () +returns Standard_True if there are more active planes to return + * void V3d_View::NextActivePlanes () +sets the iterator to the next active plane in the list + * Handle(V3d_Plane) V3d_View::ActivePlane () +returns the active plane + +or check if a certain clipping plane has been activated: + * Standard_Boolean V3d_View::IsActivePlane +(const Handle (V3d_Plane)& aPlane)The number of clipping planes is limited. The following method allows you to check if it is possible to activate at least one more plane in the view or the limit has been reached: + * Standard_Boolean V3d_View::IfMorePlanes () +

Example

+ +**// try to use an existing clipping plane or create a new one** +Handle(V3d_Plane) aCustomPlane; +myView-InitActivePlanes (); +if (myView-MoreActivePlanes ()) +  aCustomPlane = myView-ActivePlane (); +else +  aCustomPlane = new V3d_Plane (); + +**// calculate new coefficients** +Standard_Real a, b, c, d; +Standard_Real x = 0.0, y = 0.0, z = 10.0; +Standard_Real dx = 0.0, dy = 0.0, dz = 1.0; +gp_Pln aPln (gp_Pnt (x, y, z), gp_Dir (dx, dy, dz)); +aPln.Coefficients (a, b, c, d); + +**// update plane** +aCustomPlane-SetPlane (a, b, c, d); +myView-SetPlaneOn (aCustomPlane); + +@subsubsection occt_1621831385_143501245729 Dumping a 3D scene into an image file +The 3D scene displayed in the view could be dumped in high resolution into an image file. The high resolution (8192x8192 on some implementations) is achieved using the Frame Buffer Objects (FBO) provided by the graphic driver. Frame Buffer Objects enable off-screen rendering into a virtual view to produce images in the background mode (without displaying any graphics on the screen). + +The V3d_View has the following methods for dumping the 3D scene: + * Standard_Boolean V3d_View::Dump +(const Standard_CString theFile, + const Image_TypeOfImage theBufferType) + * Standard_Boolean V3d_View::Dump +(const Standard_CString theFile, + const Aspect_FormatOfSheetPaper theFormat, + const Image_TypeOfImage theBufferType) +These methods dump the 3D scene into an image file passed by its name and path as theFile. +The raster image data handling algorithm is based on the Image_PixMap class. The supported extensions are *.png*, *.bmp*, *.jpg*, *.png*. +The first method dumps the scene into an image file with the view dimensions. The second method allows you to make the dimensions of the output image compatible to a certain format of printing paper passed by theFormat argument. +The value passed as theBufferType argument defines the type of the buffer for an output image (RGB, RGBA, floating-point, RGBF, RGBAF). Both methods return Standard_True if the scene has been successfully dumped. +**Please note** that dumping the image for a paper format with large dimensions is a memory consuming operation, it might be necessary to take care of preparing enough free memory to perform this operation. + + * Handle_Image_PixMap V3d_View::ToPixMap +(const Standard_Integer theWidth, + const Standard_Integer theHeight, + const Image_TypeOfImage theBufferType, + const Standard_Boolean theForceCentered) +This method allows you to dump the displayed 3d scene into a pixmap with a width and height passed as theWidth and theHeight arguments. +The value passed as theBufferType argument defines the type of the buffer for a pixmap (RGB, RGBA, floating-point, RGBF, RGBAF). +The last parameter allows you to center the 3D scene on dumping. + +All these methods assume that you have created a view and displayed a 3d scene in it. However, the window used for such a view could be virtual, so you can dump the 3d scene in the background mode without displaying it on the screen. To use such an opportunity you can perform the following steps: +1) Create a graphic device; +2) Create a window; +3) Set up the window as virtual, Aspect_Window::SetVirtual (); +4) Create a view and an interactive context; +5) Assign the virtual window to the view; +6) Display a 3D scene; +7) Use one of the functions described above to dump the 3D scene. + +The following example demonstrates this procedure for the WNT_Window: +

Example

+ +**// create a graphic device** +Handle (WNT_GraphicDevice) aDevice = +   new Graphic3d_WNTGraphicDevice (); + +**// create a window** +Standard_Integer aDefWidth  = 800; +Standard_Integer aDefHeight = 600; +Handle (WNT_WClass) aWClass = +     new WNT_WClass (*Virtual Class*,DefWindowProc, + CS_VREDRAW | CS_HREDRAW, 0, 0, + ::LoadCursor (NULL, IDC_ARROW)); +Handle (WNT_Window) aWindow = + new WNT_Window (aDevice, *VirtualWnd*,  aWClass, + WS_OVERLAPPEDWINDOW, 0, 0, + aDefWidth, aDefHeight); + +**// set up the window as virtual** +aWindow-SetVirtual (Standard_True); + +**// create a view and an interactive context** +Handle (V3d_Viewer) aViewer = + new V3d_Viewer (aDevice, + Standard_ExtString (*Virtual*)); +Handle (AIS_InteractiveContext) aContext = + new AIS_InteractiveContext (aViewer); +Handle (V3d_View) aView = aViewer-CreateView (); + +**// assign the virtual window to the view** +aView-SetWindow (aWindow); + +**// display a 3D scene** +Handle (AIS_Shape) aBox = + new AIS_Shape (BRepPrimAPI_MakeBox (5, 5, 5)); +aContext-Display (aBox); +aView-FitAll(); + +**// dump the 3D scene into an image file** +aView-Dump (*3dscene.png*); + +@subsubsection occt_1621831385_1435012457210 Printing a 3D scene +The contents of a view can be printed out. Moreover, the OpenGl graphic driver used by the v3d view supports printing in high resolution. The print method uses the OpenGl frame buffer (Frame Buffer Object) for rendering the view contents and advanced print algorithms that allow printing in, theoretically, any resolution. + +The following method prints the view contents: + * void V3d_View::Print +(const Aspect_Handle hPrnDC, + const Standard_Boolean showDialog, + const Standard_Boolean showBackground, + const Standard_CString  filename, + const Aspect_PrintAlgo   printAlgorithm) +The hPrnDC is the printer device handle. You can pass your own printer handle or *NULL* to select the printer by the default dialog. In that case you can use the default dialog or pass *Standard_False* as the showDialog argument to select the default printer automatically. +You can define the filename for the printer driver if you want to print out the result into a file. +If you do not want to print the background, you can pass *Standard_False* as the showBackground argument. +The printAlgorithm argument allows you to choose between two print algorithms that define how the 3d scene is mapped to the print area when the maximum dimensions of the frame buffer are smaller than the dimensions of the print area. You can pass the following values as the printAlgorithm argument: + * Aspect_PA_STRETCH, + * Aspect_PA_TILE + +The first value defines the stretch algorithm: the scene is drawn with the maximum possible frame buffer dimensions and then is stretched to the whole printing area. The second value defines TileSplit algorithm: covering the whole printing area by rendering multiple parts of the viewer. + +**Please note** that at the moment printing is implemented only for Windows. + +@subsubsection occt_1621831385_1435012457211 Vector image export +The 3D content of a view can be exported to the vector image file format. The vector image export is powered by the GL2PS library. You can export your 3D scenes into a file format supported by the GL2PS library: PostScript (PS), Encapsulated PostScript (EPS), Portable Document Format (PDF), Scalable Vector Graphics (SVG), LaTeX file format and Portable LaTeX Graphics (PGF). + +The following method of Visual3d_View class allows you to export your 3D scene: + * void Visual3d_View::Export +(const Standard_CString FileName, + const Graphic3d_ExportFormat Format, + const Graphic3d_SortType aSortType, + const Standard_Real Precision, + const Standard_Address ProgressBarFunc, + const Standard_Address ProgressObject) +The FileName defines the output image file name and the Format argument defines the output file format: + * Graphic3d_EF_PostScript (PS), + * Graphic3d_EF_EhnPostScript (EPS), + * Graphic3d_EF_TEX (TEX), + * Graphic3d_EF_PDF (PDF), + * Graphic3d_EF_SVG (SVG), + * Graphic3d_EF_PGF (PGF) + +The aSortType parameter defines the GL2PS sorting algorithm for the primitives. The Precision, ProgressBarFunc and ProgressObject parameters are implemented for future uses and at the moment have no effect. + +The Export method supports only basic 3d graphics and has several limitations: + * Rendering large scenes could be slow and can lead to large output files; + * Transparency is only supported for PDF and SVG output; + * Textures and some effects are not supported by the GL2PS library. +@section occt_1621831385_1090976821 2D Presentations +@subsection occt_1621831385_10909768211 Glossary of 2D terms + +@subsubsection occt_1621831385_10909768212 Creating a 2D scene + +To create 2D graphic objects and display them on the screen, follow the procedure below: +**1. **Create the marker map. +**2. **Create the attribute maps. +**3. **Define the connection to a graphic device. +**4. **Create a window. +**5. **Create a window driver. +**6. **Install the maps. +**7. **Create a view. +**8. **Create a view mapping. +**9. **Create one or more graphic objects associated with a view. +**10. **Create primitives and associate them with a graphic object. +**11. **Get the workspace of the driver. +**12. **Update the view in the driver. + +@subsubsection occt_1621831385_109097682121 Creating the marker map + +The marker map defines a set of markers available to the application. Markers may be predefined, Aspect_Tom_X for example, or user-defined. + +![](/user_guides/visualization/images/visualization_image025.jpg) +Figure 15. Markers. + +The markers are manipulated by an index. +A marker map is defined as follows: +

Example

+ +Handle(Aspect_MarkMap) mkrmap = new Aspect_MarkMap; +Aspect_MarkMapEntry mkrmapentry1 (1, Aspect_TOM_X) +Aspect_MarkMapEntry mkrmapentry2 (2, Aspect_TOM_PLUS) +Aspect_MarkMapEntry mkrmapentry3 (3, Aspect_O_PLUS) + +mkrmap-AddEntry (mkrmapentry1); +mkrmap-AddEntry (mkrmapentry2); +mkrmap-AddEntry (mkrmapentry3); + + +@subsubsection occt_1621831385_109097682122 Creating the attribute maps + +Maps are created for color, line type, line width, and text font. A map is used to reference a given attribute by an integer value. + + +![](/user_guides/visualization/images/visualization_image026.jpg) +Figure 16. Attributes + +The color map +The hardware system will certainly have default colors available but to make the application portable and durable, it must be insulated from external factors by defining the set of colors to be used. + +A color map is defined as follows: + +

Example

+ +Handle(Aspect_GenericColorMap) colmap = +new Aspect_GenericColorMap; +Aspect_ColorMapEntry colmapentry; +Quantity_Color YELLOW (Quantity_NOC_YELLOW); colmapentry.SetValue (1, YELLOW); +colmap-AddEntry (colmapentry); +Quantity_Color RED (Quantity_NOC_RED); +colmapentry.SetValue (2, RED); +colmap-AddEntry (colmapentry); +Quantity_Color GREEN (Quantity_NOC_GREEN); colmapentry.SetValue (3, GREEN); +colmap-AddEntry (colmapentry); + +You can include as many colors in your color map as you like, though there are some restrictions related to the hardware. + +

The type map

+Lines can be solid, dotted, dashed, dot-dashed, or user defined. For a user-defined type the pattern of solid and blank sections is listed. + +A type map is defined as follows: + +

Example

+ +Handle(Aspect_TypeMap) typmap = new Aspect_TypeMap; +{TColQuantity_Array1OfLength myLineStyle(1,2); myLineStyle.SetValue(1, 2); // the solid part is 2 mm myLineStyle.SetValue(2, 3); // the blank part is 3 mm Aspect_LineStyle linestyle1 (Aspect_TOL_SOLID); Aspect_LineStyle linestyle2 (Aspect_TOL_DASH); Aspect_LineStyle linestyle3 (myLineStyle); +Aspect_LineStyle linestyle4 (Aspect_TOL_DOTDASH); Aspect_TypeMapEntry typmapentry1 (1, linestyle1); Aspect_TypeMapEntry typmapentry2 (2, linestyle2); Aspect_TypeMapEntry typmapentry3 (3, linestyle3); Aspect_TypeMapEntry typmapentry4 (4, linestyle4); +typmap-AddEntry (typmapentry1); +typmap-AddEntry (typmapentry2); +typmap-AddEntry (typmapentry3); +typmap-AddEntry (typmapentry4); + + +*NOTE* +*The line type enumeration and all the other enumerations are available from the Aspect package.* + +

The width map

+The width map defines a set of levels of line thickness available to your application. Widths and all other distances are specified in mms or as members of an enumeration. + +A width map is defined as follows: +

Example

+ +Handle(Aspect_WidthMap) widmap = new Aspect_WidthMap; Aspect_WidthMapEntry widmapentry1 (1,Aspect_WOL_THIN); Aspect_WidthMapEntry widmapentry2 (2,Aspect_WOL_MEDIUM); Aspect_WidthMapEntry widmapentry3 (3, 3); Aspect_WidthMapEntry widmapentry4 (4, 40); widmap-AddEntry (widmapentry1); widmap-AddEntry (widmapentry2); widmap-AddEntry (widmapentry3); widmap-AddEntry (widmapentry4); + +The font map +The font map defines a set of text fonts available to your application. Default fonts enumerated in Aspect may be used with addition of any other font known to the X driver, specifying the size and slant angle desired. + +A font map is defined as follows: + +

Example

+ +Handle(Aspect_FontMap) fntmap = new Aspect_FontMap; Aspect_FontStyle fontstyle1 (*Courier-Bold*, 3, 0.0); Aspect_FontStyle fontstyle2 (*Helvetica-Bold*, 3, 0.0); Aspect_FontStyle fontstyle3 (Aspect_TOF_DEFAULT); Aspect_FontMapEntry fntmapentry1 (1, fontstyle1); Aspect_FontMapEntry fntmapentry2 (2, fontstyle2); Aspect_FontMapEntry fntmapentry3 (3, fontstyle3); fntmap-AddEntry (fntmapentry1); fntmap-AddEntry (fntmapentry2); fntmap-AddEntry (fntmapentry3); + + +@subsubsection occt_1621831385_109097682123 Creating a 2D driver (a Windows example) + +

Example

+ +Handle(WNT_GraphicDevice) TheGraphicDevice = ...; TCollection_ExtendedString aName(*2DV*); +my2DViewer = new V2d_Viewer(TheGraphicDevice, +aName.ToExtString()); +@subsubsection occt_1621831385_109097682124 Installing the maps + +When the 2D viewer has been created, you may install the maps created earlier. +

Example

+ +my2DViewer-SetColorMap(colormap); +my2DViewer-SetTypeMap(typmap); +my2DViewer-SetWidthMap(widthmap); +my2DViewer-SetFontMap(fntmap); + + +@subsubsection occt_1621831385_109097682125 Creating a view (a Windows example) + +It is assumed that a valid Windows window may be accessed via the method GetSafeHwnd(). +

Example

+ +Handle(WNT_Window) aWNTWindow; +aWNTWindow = new +WNT_Window(TheGraphicDevice, GetSafeHwnd()); +aWNTWindow-SetBackground(Quantity_NOC_MATRAGRAY); Handle(WNT_WDriver) aDriver = new +WNT_WDriver(aWNT_Window); +myV2dView = new V2d_View(aDriver, my2dViewer, 0,0,50); +// 0,0: view center and 50: view size + + +@subsubsection occt_1621831385_109097682126 Creating the presentable object + +Follow the procedure below to compute the presentable object. +**1.   **Build a presentable object inheriting from AIS_InteractiveObject (refer to Chapter 1 Fundamental Concepts, Section Presentable objects) +**2.   **Re-use the graphic object provided as an argument of the Compute method for your presentable object. +

Example

+ +void +myPresentableObject::Compute ( +const Handle(Prs_Mgr_PresentationManager2D)& +aPresentationManager, +const Handle(Graphic2d_GraphicObject)& aGrObj, +const Standard_Integer aMode) +{ +... +} + + +@subsubsection occt_1621831385_109097682127 Creating a primitive + +Primitives may be created using the resources of the Graphic2d package. Here for example an array is instantiated and filled with a set of three circles with different radii, line widths, and colors, centered on given origin coordinates (4.0, 1.0) and passed to the specified graphic object (go). +

Example

+ +Handle(Graphic2d_Circle) tcircle[4]; Quantity_Length radius; for (i=1; i=4; i++) { radius = Quantity_Length (i); tcircle[i-1] = new Graphic2d_Circle (aGrObj, 4.0, 1.0, radius); +tcircle[i-1]-SetColorIndex (i); +tcircle[i-1]-SetWidthIndex (1); } + +Add a filled rectangle to your graphic object. It will be put outside of your view mapping. +

Example

+ +TColStd_Array1OfReal aListX (1, 5); +TColStd_Array1OfReal aListY (1, 5); +aListX (1) = -7.0; aListY (1) = -1.0; +aListX (2) = -7.0; aListY (2) = 1.0; +aListX (3) = -5.0; aListY (3) = 1.0; +aListX (4) = -5.0; aListY (4) = -1.0; +aListX (5) = -7.0; aListY (5) = -1.0; +Handle(Graphic2d_Polyline) rectangle = +new Graphic2d_Polyline (go, 0., 0., aListX, aListY); rectangle-SetColorIndex (6); +rectangle-SetWidthIndex (1); +rectangle-SetTypeOfPolygonFilling(Graphic2d_TOPF_FILLED); rectangle-SetDrawEdge(Standard_True); +*A given primitive can only be assigned to a single graphic object.* + +![](/user_guides/visualization/images/visualization_image027.jpg) +Figure 17. Graphic object and view mapping in the space model. + +@subsection occt_1621831385_10909768213 Dealing with images + +@subsubsection occt_1621831385_109097682131 General case + +Images are primitives too. The graphic resources can currently accept all image types described in the *AlienImage* package. In the following example only **.xwd **formats are accepted. + +Define the primitive Image in the GraphicObject. +

Example

+ +Handle(Image_Image) anImage; if (XwdImage || RgbImage) { anImage = AlienUser-ToImage (); Handle(Graphic2d_Image) gImage = new Graphic2d_Image +(aGrObj, anImage, 0., 0., 0., 0., Aspect_CP_CENTER); } + + +

NOTE

+*The above constructor for image takes as arguments the graphic object which will contain the image, the image itself, XY coordinates for the center, XY offsets in the device space, and a cardinal point value to give a direction of display. * + +Now update the view in the driver. In other words, draw the image. + +

Example

+ +Standard_Boolean clear = Standard_True +view-Update (driver, viewmapping, W/2., H/2., scale, clear); + + +@subsubsection occt_1621831385_109097682132 Specific case: xwd format + +When the manipulated image is stored with the xwd format, a special class Graphic2d_ImageFile may be used to increase performance. +

Example

+ +OSD_Path aPath (*C:/test.xwd*); +OSD_File aFile (aPath); +Handle(Graphic2d_ImageFile)gImageFile = +new Graphic2d_ImageFile (aGrObj, +aFile, +0.,0., +0.,0., +Aspect_CP_Center, 1); +gImageFile-SetZoomable(Standard_True); + + +The graphic contains now an image, which is manipulated as a primitive. + + +@subsection occt_1621831385_10909768214 Dealing with text + +The constructor for the Graphic2d_Text takes a reference point in the space model and an angle (in radians) as its arguments, as well as the graphic object to which it is assigned. Note that the angle is ignored unless the Xdps driver, which allows angled text, is in use. +

Example

+ +TCollection_ExtendedString str1 (*yellow Courier-bold*); TCollection_ExtendedString str2 (*red Helevetica-bold*); TCollection_ExtendedString str3 (*green Aspect_TOF_DEFAULT*); Handle(Graphic2d_Text) t1 = new Graphic2d_Text +(aGrObj, str1, 0.3, 0.3, 0.0); +Handle(Graphic2d_Text) t2 = new Graphic2d_Text +(aGrObj, str2, 0.0, 0.0, 0.0); +Handle(Graphic2d_Text) t3 = new Graphic2d_Text +(aGrObj, str3, -0.3, -0.3, 0.0); +t1-SetFontIndex (1); t1-SetColorIndex (1); +t2-SetFontIndex (2); t2-SetColorIndex (2); +t3-SetFontIndex (3); t3-SetColorIndex (3); + + +@subsection occt_1621831385_10909768215 Dealing with markers + +A marker is a primitive that retains its original size when the view is zoomed. Markers can be used, for example, as references to dimensions. + +@subsubsection occt_1621831385_109097682151 Vectorial markers +Every marker takes an XY point as its reference point. The constructor also takes another pair of XY values as an offset from this reference point. For CircleMarker and EllipsMarker this offset point is its center. For PolylineMarker this offset point is its origin i.e. the first point in its list. +In the example below, a rectangle is created using Graphic2d_Polyline. +

Example

+ +TColStd_Array1OfReal rListX (1, 5); +TColStd_Array1OfReal rListY (1, 5); +rListX (1) = -0.3; rListY (1) = -0.3; +rListX (2) = -0.3; rListY (2) = 0.3; +rListX (3) = 0.3; rListY (3) = 0.3; +rListX (4) = 0.3; rListY (4) = -0.3; +rListX (5) = -0.3; rListY (5) = -0.3; +Handle(Graphic2d_Polyline) rp = +new Graphic2d_Polyline (aGrObj, rListX, rListY); + + +Two Graphic2d_CircleMarkers are created. The first one has no offset from its center. The second is constrained to be a given offset from a reference point. +

Example

+ +Handle(Graphic2d_CircleMarker) rc1 = new +Graphic2d_CircleMarker +(aGrObj, 0.04, 0.03, 0.0, 0.0, 0.01); Handle(Graphic2d_CircleMarker) rc2 = new +Graphic2d_CircleMarker +(aGrObj, 0.03, -0.03, 0.01, 0.0, 0.01); +window-Clear (); + +![](/user_guides/visualization/images/visualization_image028.jpg) +Figure 18. Figure of zoom and attachment point of a marker. + + +@subsubsection occt_1621831385_109097682152 Indexed markers + +Once the marker map has been created, indexed markers may be added to a graphic object. +

Example

+ +Handle (Graphic2d_Marker) xmkr = new Graphic2d_Marker +(aGrObj, 1, 0.04, 0.03, 0.0, 0.0, 0.0); +Handle (Graphic2d_Marker) plusmkr = new Graphic2d_Marker +(aGrObj, 2, 0.04, 0.0, 0.0, 0.0, 0.0); +Handle (Graphic2d_Marker) oplusmkr = new Graphic2d_Marker +(aGrObj, 3, 0.04, -0.03, 0.0, 0.0, 0.0); + +@subsection occt_1621831385_10909768216 Dragging with Buffers + +A **buffer** is used to draw very quickly a partial area of the scene without deleting the background context. + A buffer contains a set of graphic objects or primitives which are to be moved, rotated or scaled above the scene in the front planes of the view (in this case, double-buffering is not active). For example: + +**1.   **Draw a very complex scene in the view. +**2.   **Create a buffer of primitives with the primitive color index 10 and the font index 4: +buffer = new Graphic2d_Buffer (view, 0., 0., 10, 4); + +**3.   **Add graphic objects or primitives: +buffer-Add (go); +buffer-Add (tcircle[1]); +buffer-Add (t1); + +**4.   **Post the buffer in the view: +buffer-Post (); + +**5.   **Move, rotate or scale the buffer above the view:     +buffer-Move (x,y); buffer-Rotate (alpha); +buffer-Scale (zoom_factor); + +**6.   **Unpost the buffer from the view: +buffer-Unpost (); +@section occt_1621831385_86393950 2D Resources + + +The 2D resources include the Graphic2d, Image, AlienImage, and V2d packages.     + + +@subsection occt_1621831385_863939501 Graphic2d + + +@subsubsection occt_1621831385_8639395011 Overview + +The **Graphic2d** package is used to create a 2D graphic object. Each object, called a GraphicObject, is composed of primitives. Each primitive is a class and contains attributes. Each primitive has its own Draw method. + +A Graphic2d_Image is created from an Image from the Image package. + + +@subsubsection occt_1621831385_8639395012 The services provided + +The **Graphic2d** packages provides classes for creating the following primitives: + * Circle + * Curve + * Ellips + * InfiniteLine + * Polyline + * Segment + * SetOfSegments + * Text + * Marker + * SetOfMarkers + * VectorialMarker + * CircleMarker + +**2D Resources ** + * PolylineMarker + * EllipsMarker + * Image + * ImageFile + * SetOfCurves + + + +@subsection occt_1621831385_863939502 Image + +@subsubsection occt_1621831385_8639395021 Overview + +The **Image** package provides the resources to produce and manage bitmap images. It has two purposes: + * To define what is an image on the CAS.CADE platform. + * To define operations which can be carried out on an image. + +The package allows the user to manipulate images without knowing their type. For various functionalities such as zoom, pan, and rotation, an application does not need to know the type nor the format of the image. Consequently, the image could be stored as an integer, real, or object of the Color type. + +Another important asset of the package is to make the handling of images independent of the type of pixel. Thus a new image based on a different pixel type can be created without rewriting any of the algorithms. + +@subsubsection occt_1621831385_8639395022 The services provided + +The classes **ColorImage** and **PseudoColorImage** define the two types of image, which can be handled by the Image toolkit. These classes support different types of operations, such as zoom and rotate. The **PixMap** class defines system-independent bitmaps. It stores raster image data and provides special services, such as saving the image data into an image file. The PixMaps are powered by the FreeImage library. + +**ColorImage** is used to create 24-bit TrueColor images: + * Create a ColorImage object with a given background color. + * Request the type of the image. + * Request or set the color of a given pixel. + * Zoom, rotating, translating, simple and refining transformations. + * Set position and size. + * Transpose, shift, clip, shift, clear. + * Draw line and rectangle. + +**PseudoColorImage** is used to create 32-bit images: + * Create a PseudoColorImage object with a given background color associated with a given ColorMap (Generic, ColorCube, ColorRamp) + * Ask or set the color of a given pixel, row, or column. + * Find the maximum & minimum pixel values of an image. + * Change the pixel values by scaling. + * Change the pixel values below a threshold value. + * Zoom, rotating, translating, simple and refining transformations. + * Set position and size. + * Transpose, shift, clip, shift, clear. + * *    Draw line and rectangle. + +**PixMap **provides support for system-independent bitmaps: + * Supports different kinds of raster images, such as 24-bit, 32-bit, 96-bit, 128-bit, or RGB, RGBA, floating-point RGB and RGBA. + * Provides direct access to the pixel buffer. + * Provides image dump services. The use of FreeImage library enhances these services with the capability of saving raster images into different image file formats. **Note** that without FreeImage library support, the raster images could be dumped into the PPM format only. + * PixMaps could be used for handling system bitmaps and dumping window contents. +  +**Convertor** is used to: + * Change an image from a ColorImage to a PseudoColorImage. Select between two dithering algorithms for the change. + * Change an image from a PseudoColorImage to a ColorImage. + * Change a PseudoColorImage into one with a different ColorMap. + +**LookupTable** is used to: + * Transform the pixels of a PseudoColorImage. + +Various **PixelInterpolation** classes are available for dealing with pixel values at non-integer coordinates. + +The package also includes a number of **package methods** for zooming, rotation, translation, as well as simple and refining transformations. + +@subsection occt_1621831385_863939503 AlienImage + +@subsubsection occt_1621831385_8639395031 Overview + +The **AlienImage** package is used to import 2D images from some other format into the CAS.CADE format. + +@subsubsection occt_1621831385_8639395032 Available Services + * Reads the content of an AlienImage object from a file. + * Writes the content of an AlienImage object to a file. + * Converts an AlienImage object to an Image object. + * Converts an Image object to an AlienImage object. + +@subsection occt_1621831385_863939504 V2d + +@subsubsection occt_1621831385_8639395041 Overview + +This package is used to build a 2D mono-view viewer in a windowing system. It contains the commands available within the viewer (zoom, pan, pick, etc). + +@subsubsection occt_1621831385_8639395042 The services provided + +The **V2d** package contains the **View** class. **View** is used to: + * Create a view in an window. + * Handle the view: + * zoom + * fit all + * pan + * translate + * erase + * pick + * highlight + * set drawing precision + * Postscript output + +@section occt_1621831385_1676618855 Graphic Attributes +@subsection occt_1621831385_16766188551 Aspect + +@subsubsection occt_1621831385_167661885511 Overview + +The **Aspect** package provides classes for the graphic elements, which are common to all 2D and 3D viewers - screen background, windows, edges, groups of graphic attributes that can be used in describing 2D and 3D objects. + +@subsubsection occt_1621831385_167661885512 The services provided + +The **Aspect** package provides classes to implement: + * Color maps, + * Pixels, + * Groups of graphic attributes, + * Edges, lines, background, + * Font classes, + * Width map classes, + * Marker map classes, + * Type of Line map classes, + * Window, + * Driver, PlotterDriver (inherited by PS_Driver), WindowDriver, + * Graphic device (inherited by Xw_GraphicDevice, Graphic3d_GraphicDevice), + * Enumerations for many of the above, + * Array instantiations for edges, + * Array instantiations for map entries for color, type, font, width, and marker. + + diff --git a/dox/user_guides/wok/images/wok_image001.jpg b/dox/user_guides/wok/images/wok_image001.jpg new file mode 100644 index 0000000000000000000000000000000000000000..0e782cab77acff25a6036d54ba65f069d489b6a6 GIT binary patch literal 6870 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 m*2l*OQXOT`qhpC@6q? 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 Tjl)H7Er^tuylAP2q3{0zB2xGm literal 0 HcmV?d00001 diff --git a/dox/user_guides/wok/images/wok_image006.png b/dox/user_guides/wok/images/wok_image006.png new file mode 100644 index 0000000000000000000000000000000000000000..29a28432e0a8abd8b4c69b2a9cad75cbd2e83a94 GIT binary patch literal 8084 zcmbt(Wk6KjyZsOf0us_8LkZGlAT=;_he(&CN=k=ABOoFI(!!vWNP~csfQ0nWr8G!) z4KOp@{l35d|Kt5|?>!%2=FC1jp8cHlthIKGuC~fe5+)J|1aebNRZ$-T!TSn6V~O#> zUmL1CQwRiVrlu%w;5V}~8))#@=m*jMO}<6Qx_c_imYEUGJlWj=@=Q++=jk?8m*kJc4XdQ^zrc-VKyo= zulHOV?EbU8y)7Uph|m|fxVQ)i3~agBEG}<8WfG%0Ad>r_Zf|8ZzuK4T`~q zQSC8taW`+=I5;`EZ|Of6;O*m6TT?SWJ|6dxSy@rB>2kMGfG+ljT23k$HU@-5NvZQo zw}zUUNrM+}sryr{vnIW%;o+B?W4zdxj!com!^4Y8a>3h^#xoORtP8)V2s$gq#rnrKtDlu8vY+SdU*kqXn^Q~K9W8&Bk z6`wwRDk&++$&o{bZ%vf8H!vI!T`w4a!OYBTFUBYnpz+wPC-DwDJNr6Ibqo9b2M^Tq z^)tc+==dK!N*{1oe%v1oOB0BM>seY_8XHdy4dqxZ3Yk<9%Gjnq@-7iT0Ol^ z*MUUr5d3;~o0;*IM4FQu|I*>1N2Rf*0;RZo2eP?ow*_<9x3XeK2z^#F1D5>l+dX*q z#mSbqn3#Jl7{(zvHI+0HZn{hz+es{&qY+9#L_XBlPfQqgTgoTrFcw|SOA^V!$*I7d zB$}=nD%a{zt+yPWASopk&+-VaP*G9gKK}KIUnCpOd9fLBg~J|8%f=`szJDKb=Hr)` zk--$BsBdc8Yg4JnLG|tp8?J;_COO_Rn@vUrG27rxhf`v-W*5!`Z&62wVo4-baBanm zQaS~9#j_!L!r0hYqY~rL8j&TGBn>U?ux+EizrQpqg|KjkG;}0>1b#S3=HzdUknSTVNE`R z?7hkS;NHD^b`B2UGY7g=cktt*YTrG}dh@}xBNz^CYd|1+S^fQ*o3U}4c46_CFWueU za;Kqqot>RolHTeZ2`j6s&Dhi5T3TA`)crVtFvH^6S{E}*OV+6N1XZr@60{6D;5TPy z0rtG_-_w3Ae^L;+6z7RkPRhv0NKH*mPd70(j@~B7HLbE!Gcux2>UkRnGt8cb zO^<_rGHK_HqHIi{QZ#U%+fYZuV%P@Jx=E*mAWn7Fv!bM^>LdHOVc02&4cH0*g` zcZGz=Z{u?>Z*RX^Xbs&MEsX74%6#bdcV&eQk1E)q`^TF%Bp*k}9MoE88-3?NufoFd zlwpL5J19j{GqZt2M5?gWV0U*#6l;NCO_b*!Zt(&y@-&c$si`W$94;u!sYYMns-CG2 z>Z=*|oiJD|NCTVR?Z-t1=0a!4E6mzfdCL!gY|Oh)lhr$y4}Jh_P8WClanQwFJ3FHG zt|%$#v9t4bjngDKtMvNnDlH@9^ExSRas)$`a<2d7PTkhlmX`EhZp_fg$kNJ+7s#lY z8B;SX9apk?&5QA`r1V0XS&}E9cs(#T6In>xjE|T)nies}Fr^w64|I2bDKCcwVZNJG zq1xNSvv*rwE-S|=+qO@yEiQ^8F1&bn3QNuEz8df`56WWG0N~$<=e4*tTK)8EaWQ}= zzgsa}Fqjobf_uGr^)}CFfmYyRB)!An$LW!gD%)S=;HepX3W|784`A30od<@5ES{QX zW@bF%1%rcwJlY?v#nSck^wjfj9T2?+GmeBmRabw*i`rwZK@Le-y*g0x^*zf~i4Ve^ zuhnKCjt7e#7Y6wGu}JxpR8$NZR--~}B?C{l!-*(v!TqGOZ(B0r)xd1^?$XH1%WHBU zfg;8&)ok65jTqVRdgwNXIrs&2$t9L>INdM{0I1pMyEmguHAHC3m(+8Mn!4WHRZZ=N zL$Ec(#Ka`xJ?PaGeo6&rVPTP$mX6kBdh zYw{(7VgTuz!(cG|{hCPw)!9Fgx}f2!05F((YzSyI(OAHIm8M+<9#hlO%8!zFK15F? zEi}Q}N1xrxeBfdu!eCQ5b?2j0hE;LWYA(qqlm13RQFJ0~wt* zmCj<9WD*71+S)&U`~YE!)GiF%Dy`eLGg8_??Vs-a=Aj{phr(Pla+{aub?$Bn;=hAk z9t-9x$vHU}nRFT4rEzd{wEFJOe(xR)!0R~Hg9Ud99-ZuOt=NbF^!_3R3`5DnVs2>Y zAV`lFG`BrkXOKHgckHfPi}-@_6j9ijdP zgx|_iGG1yrqOt`ORPDslvpy2Xp~d&dbOh)M3kx$B`uusCkh+Fm+zS!a@t+;>O*J$I zWD9QGxDi2_uK5}r9;1n!C^d6jyu5MWW#(I|Wk3vS?cu|Rzh9i{ff^64lzDv(hEYaw z2LME%PzIt|h?h{-AJp@o7X)3O)`?ymWUAiZ=HwhC{I-%}I+*r4DvBD;$Hzw*EMj@Q zdN?SxXWSVCH}Rkv(w#1JE9#`f6Lir`6|zt#u8eZKCXZq42gT|JyRwXJYsKXa`*bC_ zb_eJ`|2X3|>`XVew?6_Pva)hJnvaV?i<1F(0@#$8Xw!7`F|HD+n_@_KPx;@urcCIA zN4Wa3`cecrBLE>`!!1lRF)Kf^RBg36LcUZ`OF<2S9hG8Sb z0zo2AJ3bP;KL9fGj~YeD@$oSjj}fF$+{+)aJ*U*YZBBAVg zjg8C)L^=vi{GNaND>tzbY327EmbS&+G_+s^)cp7X{{B?(GRx*S= z|BM=8rm4#$?sgjY;<=+^VJQeIE%cQ##sq508njb0>1+#Q=jM$wfuF`XZ_Ly<#d#%0 zt-jqjqQk3m`R%hdc)J5CJ@BXA^9H+%i%Tttw6b8Fi7IIPTtlNTTPD!?KFD!I8HcsD z_Pc4M_!3IUcq|C6b(ouLn1HxQX=rR*`}>#aRMMADqTnt*2kt#$*?vDP;hFL&3rm}s2pc|Db=<82P`x3xx>;%8ZHi+ zPxxrr71=1KPF-WmA3Y>1HQZWS5*u`TIQgQczP_Him^Q=6&8@t#G0@I#C2+6#;h<~f zNQz~>hyCCFbQW?RA)&!qGs(YcfYEhyb%VP?JQ0fxEtMLPL06 zrmOOEa&ig_e}U_DX3Pw-t-@FU-kq&7hXcOI`pR{WM-O~nwma-96krxI*AX)gfm<*gDO)CAn$$zWsG828Dz`i93WS$ zB1eE24D3T7zTe+|#^dY8xqyaI!h_Bl=cg5HU#?84v{NB#%iH5Z=ANT=HAt*TT zWm1PoM4-q(eZJNO_ljO1C{E*(E`Y+gBLy~yL!o{VK0f|;^IdwYS5IL|%>B5x93mpR zT(^=_QkYIR+aSsuw_=Fd1J8DAio@1cR!`%gakd&eE!9U7>mWOc;qm_4HKM8Eue)&N}&9RbK(3)6@j8 z{-M)^z(s-tB=)m@QJSWMqGHE9?z9e&h#9k^!UbAu1G73;7gtwp4Gqo+=eZ`v+xT?J zh+?C1?g$pyS5ranPC0Ozd^|i+l!+-RfB*h{Fxa<(m&Sd$;^F_~$&+W#z94+?mr&~; zv$8xrJj$$E0M#S9eqDr!Ft+yx*xeZy7#mLWLkKeH;<=lfuwk3^qv_PlOefT|iu)Y0 z2aQIn=8r^2M+5Xzh$8=_(7HWc=e=bpwRf`v>3_=|AY;;%kW0wg$ni=2sn9R&cvj- zF!V_QBrFHV=iFR^=_s_gIBUG`;?HYDL{U>yQz+OK%WeEFGZ*LSsyl*$aj3Q6qk)GH za5byZFefS|ri-(dtE|3NKyXS*1U}%mEg0}U@$m4Fmk(9t>h0-ib401g@1QVlgTHHC z`uh5o-6c2@p3OD+uTzTe8HFcPVKN>Qy`JP3}2 zFF83Ol=_B-T@Ka5JjNJPA=dcG;bAH&s)V$(yEG*CnQmSXa!YTJ5)@mD80!3hIkhM3U~7Auh9ojSKOa0M<+I%yMt|Ul=W9MA;QN61cdy7CNpm6crRGb0k>T0D)ryC_2c&J0O2Rim;ZyxzUZU5j4Kbu@?)92V-ycF z=P}ozY1Peot}k9l1{~ilJ$Tv`g$_p+m6fIR*d4EnM72+Y(MR$%DmiL>_>zG!@&ho1 z#J<&t_kaGFKgf(*P{6b?07n3bVen2O5Hjps;^Lm?hpQ4+Gfahn;8oQx`k;L_<$PM8 zm1zj%*O@pdQ-N#Got?*YuBU7MC4#=9q^1skTp(!W>FH@=G7V--%ntVOKRx&F zpPiXI8YzU=uiJcn$^;e-mVeQ}swKl3Uk5xZmQguOD6dBaz^Sia)nQPs2*9&IyafPR zeDo}Dthl7)LysNEt7BGKWDC$3k)-q&Xmn06@J_CS+yJQIIQa3?iG0JocmKLBH%Lf+ z@;QqE4g7m%W^;4%xX%n8t;%InX)HiTiikxMXnZo@OPwxw!dU+lHj3mWkFilNO+bc;v7w1`~ zrLNDPGp74SP=ZAPlu(MLJHNQ#I0TDwB3%KUf_hR{S2sC6zR?$H030$vM8L?F{;RaY z!otjH?7(un1qWsoF*{I~AlSKUs~a~6@vQ(+{QnM_^;59e%M4~8Utg={0B?g~-T3y! zejqo2jwZX_Zey#LuRq%ycm@{byZdKjef_)l)`W1Vm2&Joh?sE)~5)(_DOOx^~195BK0R?|?Ss4iW z`5ve;5%1gD3&ijp8vNLfSx@Ewbbi;+kqc!b+G8WwV+EMsr3`S-sL=hWQX z-2A*wwHOQ*Y(tTjovrQm_K_AdPpF)n+fZ8I$+(eK(7AmF%MwNFSnRWaaOFH)kYpsw zkq*ERnOib{-N4+X4^^04yp&^<`2TTniQ9~B4)?=7*GY(|EOU zftTb-v0+VJ-6b0R3cVP$P6=@e?aR`Ba5?9{mIWXQsK&WQ-|~`@w*wBjX23!|O+>J= zvH}VE5V)GbS3$r?75YkUO{;q;E_bSx`CtGTe50dDlt0&w^au$7u4tSNOJ#lh2y9qj zI{_1ANC{$$nbA1iI5|6;Zw{nal7j$a$sWqCSU7rea`K6oIHa@upYI)QZBK!pLile3 z3w!8&``!;gx#ax62FSUc-*rSpME@DZ=#+{E53d4UgWBf2i;vHS+ZMmP`=2|%wnr7H zC;{<`pH|T&By3%pl&y~crx$cJYCHEocUY@+DE=Ks#sMl18pm2)_REHGutAnkpfUX4 zJAwVOGN4Bgf;7ZGlM)Ep5x*pU69PPS&{*Ay5R{mSAv21xkpXh@%=}HF6l~h{mpX#w z?~C^smp%pL_27~B=+}fo=_rE@GZAAN!p$q2n|ukXdHTGT(R3e<4?o(MP_*paSJfU^ zr1jY#@h2mI2>>7K(dAtr;((ukM*Bs=Lnk@FtSqbI-`>UN=Hk+9AeOj$wW1Ye#boIp zXZlACriL5O6-;pxE_qCWJ;Zb4*VagEz6}I1%iJH_x$jjFCX>C!{Gw;S{5UwM(WbHP z?C{DZ_*fM|``d)P@5)H@IATYIQNNG0j^bgf)H!vLxyMeE?_nMEwk7Oq zeh+zzI*!ZnGV}OhPok-RsbWjIfvCj2t|WwKAUnc(gj0)rUwiHf_B&PTEjo$lQ0H$o z;T1ABDI%Y|r{fb7!>upcekxzDI7>g)YSl;n*5LR-eM z`t0$de2z58Qrn$+25e^tQ0r5d7N;e-TeTP?`}r@W*H_Oor{?=Fjz>av3+LjoLac(p z$HhVZr`IPYG=^#Gyc(hiQYXx3&v!Gn8|2TF`sUAsU&lr27Z@>b=Y@yyDdUm8^#Z^=F;<1up@HZqz= z@A=HOc4F$7MpNB=EUoy1(e63&a#ghj*#=}(@atPulkT;aZ%Y~czKqT`90$#7PrP>a zzse=T)o#VLkgc;`#c&?Q@7%NrzQyUvuztbm+3R_HmCKXcIL+qM`{rs?tusDe#ea!{ zG#bV{AluuaB=@UzK6OKg4ktU6Ou5u;jeT%oly~*w>PvlL!S2dh^7i=FeAb?Nff$Do zPYdeRJzi(&^x1A)we{>PUpR}!S~(r=(O0p?yxm$Jr$?E3IISm>@eyRRt`eRGw`(L{ zlr2-&K}88z<{Z|7mBm)+d=`iT!-5Xe!feV@aebro#|w~V7jvGy-n5VON@6IteUx6=fPaT zmGAe^cV$oc=Nyv`JzZd$O;%7D#wEtu#9!QTYo_I#Rsw%$?2vcdJv}cs3X$OGM@mu> zpMW3^clCPga3q7D;>O06kT1gU&Vde7O=Uw%mOh!J!Asgiy6~;iFsdZkmTE#tzs*O{z+B_MXMgu6~m6 zBoX4gI#{;&YH4<7Qz2Jn4xa8ge7QKA$@)QqC9bbeIfPNB##%JiRDC&C?-VayHEXvl`3TiSfGfe zK4D%A8*DU(l|v!?&8^`mm97lOfoM%X;R16G$q`A_-J-2SrN$N(TwI_Z{K9SA1iDwQ zdy`5muPlY@>IIrunEf4Ii{${$wQzyWA4&f(a8tYvdXTob+6cSQ$O?Fdo`2Gr*TTG^ zZH2VjrOSE-Wnt1cx>Dk*M_+cV;t9tct?sa%y9Q{wO+*p#kDU?M7nVt-VXE6lZS5=T z=Jmzgu@mtv=(y@N0UeKv;_}~aN$lPhuG*(ZdGkq7x_%YMMsSh>4lPQ&%!MqQo|Odo z1DNp{+5aHI&3UEq@>aNr*x(#f^Q=zuO(jNAGB|OJ8ogu1jcJ2Ffk;_+d&1kaMMtKO zTtcqv*o|SU=Te78ah5ypnz7iqB`sSRH>aBUpP@_LvuDgc0bNX8`}0AgqWijqqZ{1A~O{w5@96L8|{R=ft2Q j{l?Rq^(#6w+{O+DmB7l literal 0 HcmV?d00001 diff --git a/dox/user_guides/wok/images/wok_image007.png b/dox/user_guides/wok/images/wok_image007.png new file mode 100644 index 0000000000000000000000000000000000000000..3cd21fcf030aafb0123bbb58db052317e242f3f1 GIT binary patch literal 14919 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 literal 0 HcmV?d00001 diff --git a/dox/user_guides/wok/images/wok_image008.png b/dox/user_guides/wok/images/wok_image008.png new file mode 100644 index 0000000000000000000000000000000000000000..7df90f6c8e12917dc4211bffc5baa33885a55fcc GIT binary patch literal 39865 zcmeFZWmHw`+b@i=5d~=kB}A4;iFBvJBBZ;!yE`qA5D^h60RfTjZt0TlR_RzEEqyNB z&olmKJmb9M{cygXImTwV7p%4Byytyi*RSpwq9`wkgGGjghK7doR0^q#hIZ8#{>!_5 z6<%RS(S)I)-9vkde4^?(xiRCT8+AA%a?V4qj;}cZF#1IK|Rgu#44>MpjGMQ znJqprykBlfH7GC~nsc02L_%xZR^5B;k>^TdWT&GzJ?ozv&4jqmchrb-#cuov$&?C_ z4&0)ms*86PUiiL#6chCB)x*yH>e=KpHAzX#D`;rX&b8+8;Z*Lq!vEk`!@r*OW1yiu zUV-!b`x;sb_J6&G_KF#PElLVME?+~tt_MH{U6`__XGca^Z$7B z|2Uify!r1L{%>dVpEv)Hv-y9Q^6xGE9|QZJTl#;0R~|b^{K7|j=9D$Erc+_>bYW*_ zSLb`=%yQ^pWtEkmzqyDz-yRY0GmzA~>SbMBT~1EU!6Rm7=JN7#PnOH`Fqh3zwO(Fn z4I|x}t`b95ILv*NqWO9hA1F$F(q3vc^i?)a6nXdVU8Jdn1&`aBYHbE9u{tFsB`+2l zYYQSeI!PBNJ~^2ss`DC|v!8lqpWyEIFHfV6FLu0HfqG*$JnsBlUT#M1y0L(( z&kdVi-O&B!7@cY65$U||2g4#GgY7{*Xi>#Pj5V?U`t@tfE@POkH-{KuEY!19_3OOL zrljBA%GI4>k**LfO0pfTobhRXrbxf{`**CMS8-0x!)q?ou2;TY-F;RTpCsUsKb530 zYP1UH(WU+>#~#n$&JI;(GnSo`<0JBCC_}-+*}19m5qw9i0d@CesEoAq;LwngZJZ$o zde~3<9HWEH@3Cz2Rm(|Y*Y3l|E_9d{PgOX?eEjI1Pz)E)`-yKwom0-b?09V?Cx*pf za}^QN{e#rNmtcz$*6bSvPU7yU(&MvX&b0=f#Uf%Wd_4W1h)6>%%xNj5b<~Ww~@NNVt3CTedHp`#m zW5hFpYP8SfFz{c#&~R{+sPtp~^8y2#B=@xN*0>t>hvoVqZ(E_5)1f`WuEPIv3(=-Akbl389p66;~Kai_c zvVlT{Si%(Q6FQ_gQA&O?rLv!^oHgE1pj)-mj3~9`SaQJ#~x=x;H_d?y+@>^q)|A9@$vCV?BltZH*!YS zV9D6v@#2Rd3+j&J_i#P zJ=^SIdSdj%p_BsduG!CeO4C%cRLw0cTx{%rADxDi^ZaTefRiEQFQZB0U6E#v2{_$u z*WKSjq0Xk}&fObdU~Fz~lDI1=tEi|bD=Vw2e$l&v9oW>9z>_c|n4aImZRrA2`u6UJ z4{>pE@$p@2+;<}?+}1~-NPQ?z?46W+OYu}*-n^ovrG-hWxMgU_#gR)zS9f}{%m$Ok zujG+AthP3~7>GsgV<@#iR)B8fDw6I4aST_I~5o16j5 zVEX&_@ALAGQ{X9?nWan7baiyxD?zO+X+__&2g(6GcY3Y13zRmF@-i|U?W5+Xpm6vAgg4A}F`)#@Lqlr&6O|v{K0eU!R4TYE z<>Y!cCQ3p&Iy4^43M@x_^`$;y5g*s4vNsuv2EAR;EFiRq@Kpct=? zK<=#!+=q2EI!YTUrSF3(OA+aA3n!nrJr7j`r|!h-aj8y1PxV4N-OG`(2HvG9&$s;; ztoZ55aWE#w_C0my{XEgqw~^AHnfKTk(!b0@4e6wndm<` zI5;>xO+iK$|NcGuO6m`T>`Ey zOW!-YyYHvMYNOSLCJ(RQM0kJftspFW3YYv zMR|2FUFNl>*@1m?5RPQT-LjGrauI)Dg+nVFn;NfOT7t#JMVwS80l-mgYy-2ivyF|< zXLjZzL}n|UUIsJkRhxbY{2Ue*7AR_@rKM$Ll+vnuVAW?&l|%`P=UMymi}7(y`+m$e zor5UpbY~|gYQ4RTgID`bljGxsWTi1a07z!5T-v+4*P+UxS8M-DN>y=S^ZBM>;I}_s zWFldOYZksHc(>s5=Wp*PP0E%X@hV2mIa!(=Gt_eqHzwvcH#P4dTjD?ZU~Em62&~Qbw=S zhn0yS7#SN|PovaN8(`8d&HVDk6u;r5mDB)=^0^>JLeRp>3a|IxO1_7sgM)*$HPi`m z-JJdYqAMe!DXhZ6vj`n&IB}6&?F52qR#`V|h1qJiht&?4i~<5aKbr#ibz@VB${#z4 ziHTL*|9DdBcXA-il2Yxy=)V8^XEQ+Io+Ke1#%Qv77mYmi61uVB%8W%zN0&Dk?>GeJf{; zF)?4m9NM4N5wsqrhsl`+|0m)<{X1ab)eWNHmC-yMl2fhXva;|uZ*p^Th_C|L<80vq zeGWE^$h85%e2-Snx_SNjJ1H7p;fDNtW_>yg#(0r#odAWWw|5es%hHU;T(lI;>gp=Y|Bu7NZ-n&5NwEL`&-Jd{fFuX27QEMKrDKDdm9^5va_w% zNAs3uSvqJ70e~9)xf1r~jj3Eu0=L~{tyhVe>o&r*@jXLymv|V-QyRkOkMBiGvzbd* zzzB6Uebcm&v^3B@+w^EK;bNY$@PPFKOayKl*Rc&bf?J;-%9p2qo1lY*03eBLQSYA=jZ208p4or+ld$Qx_6D+bK|0{BwM#rfUufwgM2VH_?6?>9o82M^4q%I&0d&u$@X*+e3xOmjy? ziZs8Miy5N7<-ITQ#*myQSF0sPvIs~Q1|11%mo!ps9p)AYfg zCt-Y@WX#U= zD<)<%v!>y%Vj~qP-Iqnc_N3DV@3OG5IUVgRwzjqgJ*Bm;bl!T%;gWy>D{yKL&s<)< z_j?>icUKn@K|olMbF{lWHZoE~-Lo{_3-ySJ)#-3+E<#>6tri0+AG9tc&EJO0RVPe3 zMQJ%*>15LOW_9;`+Wg6}zmZr96i(DsJINuGv?qO1ER_Vl<~;dWDcDlF{SV6b@h@Q~ zoX2WfR#nE&t~wuRZ!muh3uC4s;No+@%;j6ZeEqsq(kEJc#(Kx$XQy6NGOl-~yj=Sv9=Z~Xl(XS{>~5kW*d5KH#;JDC!V zWx2y6BXO-`RDaJKyG%PzISWuh+bHL~)Y#Zq0MW2Kad$_rhfAoas?tPDM^NxJ*~9pF z9WBN{M;MSd*`~YliunhE)HR}v6+oqgq-6KvPK3z0CL+>NZ3&3za!-Oq?ycN6v1QIx zr+}MsOU+u0w*enP1D^Ao4^QB6zzP&4t`X~;dGX>ZQG?@?l^0d)Lq^2SS1S14NYPA| z+mUPhNfP$cW{h?g_+GN-w-~Kq{yo-c0`p68adBnkALwvqW@Z~C!pRLz^Ac24RHJ@5 z>N#V1I_+=YDAG^YdT}r#FxSF)W?93YQ(o6&m0^r#6cp5@jiPpv%ZoL6IT@UpVW$`^ zZ3b)B+M1Evs?4zQ#rAyr?$Ie=_Mtn|U!ufPR2gf`?L0j_6%`dL;^Gq%>-hgocFtw7-Fav$%T%oF$pt zEBfvUYU)?#T+TzAgCFNir>^net7!$VE*$Du<~j+Dl20* zn1D3JKLi?G?V6RH9ZG(?_4;3SzNb2NAeyd>nrleLc|89Yy|ChUf4rKJ_~{c=LhBFfkHRI= zl(W30wMa?{Sl6$fX3Dsqs zi?Xu*H&D&rb^8DpK9Zy1(`CpU6w)y^7Bkbd6MJ@Yw46)@P3GJQhKHQT9$!gDrW*z^ zBskAt;6`%a;r_lKC|81TcXf4L{XfP?r~4dkng#evOG_h>|7d$03(6Gs>ZK^&rlN}I z$GAOs!xE62ukgiimI^PKL_5ws((C_F`RzsOud_10g!TnDva9C|rDADmnS4c8MI|aS zav)i9e%tf;^XEV(6WGl{la$M+8qNTY>Pl{H&eS-yPAn6cB-Y%zb?fUWJABFR34(zb zi-(7Y0)L)_Xxfv?YOQl?w zPPuJlrzuECP|$C8n|~k_;oyi0zeSe{LI-FuX=xP?qoo&r{W7+0W#%rz-2FDHgCEu^ zrF&mmPHzA35a7OXk>|zvnUro?VObdv0KjL2AxLDY>+0aMXU|eo5fpLqFhLke!pzvU z%*|=zW3F6#oT6CRCd>Ktj*N;5kxlOX)ZAPq3jCoXYsamy$M+QJiFs)gt3}7N(#pz4 zkotsh-U;layTsw+$ zI~-f{73n{8np*TFaYe?w64qmNvo7=g)e>S}6c8*$%)Zd9Veln~Tn*TdI&iU@2|p_|#NQ zb#*bKZDo1;vMKX1ifLJ6-8{0IuJK^u$-7RD!ET%7P84Sy+>fCGn%T#sBzvrvA7Mm6 zGbk`<=rwk86x>S{yA>E8`lasoI3;10vSf(cp! zZFm{>9osbK@+E&GBO`fv+=?-NI$GMGK#+!W5)%`RMyCr33LNb0gaXb5vFD+P+qoHVkreO z2U(*4AGmAGqeN*9OoWRX@g1YulrB$IlHCX?%cJ zL6)1?udk>${I@GEFD;oHWh8+h150;r&(*%2zetmUkZ^Ec$~hr|FtYKux3QAcLbt+? zg&e~Gai}>4o30FD!7YtMyi_UnBMlYxEy2p0~~_u|0Me#XW`CsGcYi4at`Yr z+qijR077tG>8Doz#uo?>!m)R{WaS$vN2-g3KkE}MMOy#&_2^f-R3A(c~*<4&)N-%*=1aw;ajkOtzm) zbu+n;lE#4YRg9r_^YpC^CmASmAZo6U6@ac-zuv@RTR!!yZ3^!NLoQ}WKL*h);B26? z1Q)zM;EjZPQCV5}b2N6kFAV_HM7|^7R0f6{VwvBG6U;!pAR{FmV=%MmiC_Hr^Cy(p z7aE^ztG(RZ+?13CBJWF0{r#Dd_pz(AYS2HCGn&fbLd+WK6--<+_PBa% z-Eaw$r>G(TxKExuc@_P!htYmQnpSu8QZi2z7`u9`2uy%Qw-QKF)lN)V%LVsUfsLv88Q{m&ki;vG%&v|`LJk9(G^qW%Qc=S6K9VBmPQlYf)%=xMmu*lL70$K3+ zS2TSeDjF^UWM_+l&l#9XBA?5(`Ci#a_6nbP8zmU=l|Zq3|3GF5N;t*&0W4zZUiQ%{ zMVhs+j2iuf8~*$XV`(^b20j9;`*Aw0pbPh9rFW0G;$fq!gztVNCGS_c$VQ@@^~x z1aR&lKpr4OV-C=8SPy5aWXOk;adia;;EIyU66;J#WT_tbg8`3e83>0thsaDVHQKl2fPiJ@~9MKarc|ME*MYH=|-De3O5 zTd=Gj5QeZG^$ZNKadVdgZsqC(e%jvFc5or!xjD_3c5wr`p9!5plBr4b{!F$k666D0 ziHl07c@Q)~or42pXPDvnIT;{(Z13)#Trwda)#dMT&6C?evz|RslK>_M5(ot;=`slX zAU9Ef4!W0tc4u(6PbA>?k46v;VVS*p^$M7OmMWu**EW2s5`e!<52u;`&H~&=l*j5; zs50Kt`4y?tV-Nu2Gtq%9DcMeNU!ss4##sglvj1xJao>+51SjW*;90*zy&3hsm%k@% z3R+uQz{!iEQ}~r;X~-CDJ&-C+7(&CyxYo_m03eQ+b_NR<_maeEc9K(4&Lm?ax#_N^ zVE5yco655IRcB>oAwPWh@MR0}IBlTNp2o-LWFSq_r6S@s+Y7s}I^$N5>Efw{TVbk( zbU=}43d9Dri|csXpvL_XL7rC0wbp!UCn4J7q@&T*7X|h8`cx6RT3T6SeGz$iC}>(H z#>U`7o^VWsbN#&SQRj47oi#Kx)~X^@;0psiE6;B3Nis&?74jZ#YYTdWQ-I3KNHXSW zYi-3@TtJY7HJl&Y2nf^wqXK#V_;M;lQ1NVT2b>=*PoztDdGQH{Uz3@Jg;a7k3WV1? z=A!WuX#^q2OI29-?onRF>|~WoM*YPrkXu1m0QtpUTd6`5{r!LrE>!Ws=zJt%mHWFU zAyQm?^`u2rORJNXB^(OaWOc$;H?TuHTU&N^cJOMh9TLNY7jWMIFTlysv9P$9jK`jW z;Kn~!)9|vjD;=o`R=;dh9N%YP2q|L(l-Fmd@(nzmw-kKuK_%bi@dgbIsOHJx*4W{_ z0398j(F;)2q00GGlTWdZuS{7}U*d*R6?$U5fW5QBIhU-@V~A%s1J3YeMMbLz!XRzi z((HbGq;riRN>_uKbPXg-5Ki7qRS8)1QXqbnBd*nT_4b-~5|ENw6t+OGS_nektc&?F zlulC--G8#xP>``?(+e6v_s4MHb5;szn>pFp9pk%!mqS6qr1{NHjo&DTwKtwirhvr| zPT0BXQxCz~qCGb^Htct#BTPT79C`wHNLBLY4m>(aGkIe(M z*9&O5rdbrKsBnIM*ia&~&t}pl2#RgH{>1p@0j+3bs-oaRq0w!z_^i1s{0>JOF~7$| z7LiHTo*am--&hw!Pp7%k0Uy-W39Ua^P4_Cl7`H@&$pbUGZP&oAI$d7|8I3SjHmu!@3~j?UZ`_CwN}Lk~vx`>2Ux z$9O4fe>Y(xUFX|y&;>OzmJIAJS5jK!B{xb{5o03hUUUZ7m5+{B_2e8DI6X7-=$ygw zj~~DL0?tc@ghj!DVUL3bAJ-HV4F%i{OdX`_@tzfm9Fh&1#CQB!k*J*2idkx@welm4sgB6|m^{P{ zptj`6u^Bb}Q+~&tZu;JZ$E=rRfPoHobKy|!=SyQdSl@47O~tdIC`2fhzf8MFf`NyN z%gP|Le!GpFFr)>oX7q6A(%+MPf`IhJTGmVr2wd<2uvUE183mEE(nfcsysRvvw00;z zINa5kRL&sVHKgSYSiX4iV!^rU56E6tR#qhAICEqTn7oFX8WhI* zbwyv4WIX^7poJGyUZ0^JeTJTD2&5>^3y#YzW5K|bcl#~>Sxt)zD1z|qth2Ze;@WjNKnHmp`0{z6exCy)5`0m;H zT;Be}Led|?3s;{%Mnpm`XuUwFA!cbVIoeoV9cC^luL`oVr~3r~Gs$us74|dQ02xpV z74i{+?i=I4zFS(51_lO+7wJ&F@7%d__4zXyUBofC@e;_~k~`7N-`<7Jpkw0N0v;O6 z*Yl=~AIJc^;`8Twm&!CIh(t0jF1zam4d=@u7Zb8XIiP>{^+mML-y$Zy=Zce-nb|Qn zmwf5NeTfL`c=P6sS@%bR$izfF1@xsdAmw@;OJy>&Rhf@P$;9Q&S-;kQG4g?R2vo?pPh6 z90Iz}g+5EtA}G((_xJZf@KIunhTGv&(6_L#08UEOF-_Va2FF8p5F`(73g!!Uba!+3 zc3-YdP(9VuqSMmS4mQHT(}3U@Toz0HpQc)gi|mm#=*m=l&PXN_8=j??M!4soSB^7_ zRnP2#0t1s9=Xea}(d1Crz}$Vj6`M=(u(+6AI62_YZ=-x>i#yZP(;(K_^5byBvLpvE z1DNu^2<8C_W+GtEpgui-;s;X>R6^dRQ$`Gs%>u|qlL{7iQ6l>H)HX9ZmgkQPVXkvB zkta!~8=tI7{FUGD_!Yib9kS$vk2KP&nxxVWmnd;w?AqJg0}<7?HT2fk-4|?T*S|}E zI2h3miaX%%$qI;ig|!+Zu&}TO*NMN$yKl|%<@MhCmxKKBhPoUgRK?v_U-0@SdMa*|9*}E!GOs5HeQ{5 z*o%G)Y#zJG(&OV}&{!_kG#cXBOo9#~DyPrdMa~EM`+uyiPM{>N^21UGBEyJ?=d>CO zCb;k2plJ9qdvbEp`%bvAF7Q5Re%*b2P$S^0U?eK*O_P^lA~l?$9B^=OAiDRJdjzJk3QUz^9qc$kQL7X*D?C0g)Wo1=n|$5I_c?2y1G_>M}2HdxA+m z0&7RW4@U%|R)=!|2KVq=T3h1`cL}d4KR+@Wa`Cagu9l@*ka|*;@IA`E1%`k229P(i&I`) zg7s3{33e4tvGL#SPZ*<%xtJ#CxDkld^)UnH7znZvL>{E7g7Kf?f5z=F%M>Z)9XHy9 zV+9nA1S^o5np%v7fRn6e%m1*Zwzl?($cv1O<+<|%o;19ti%S>;m!?3q+d8XYNP=FV z2PlAmsd1WD)N)3k4qXoHI7TWMrDfJ?6#)V~%hEo6Hz7HO>&WpC3me-<`k1@je&%ysNI5qvvpvD(7l){uvZ^LK&m%*-C|^T`1EWmzyf<{*RvM5o{Mfh`at(N zXy&jU0QNj`HizVnnUm9Ykx9Ge=)v8J$+2IENK3FMX-_-=ChIzN8}GfZ*|4{j)Mxf4 zWzuB5iCqIc`ZCMK#unL%f=NQkqW^|XWr@5F$^v`bo0(#e1OfssymptWs;c7leX<8E zfvQ4+>0&z~z)`Dvej9QBzE6k_Enr=0>c+j-bD-nBDdIN08$kykeXC*Mtv&)K#29d( z47r3hcf2w~sD_Z90!q@?(eZd%`*xMCK1_`G__ZHD-X$b-`;|ky=LEQXywZ`5ii*qm z>Cq+APi96y+zAvL5J1jW(u}vhc#toM6GII zkQ^DAGQ&ytH%dnq^$6H~S9iC7&jAy;NJmIW$oBqzBA3lad3Bv(JMkP6` zOWwmrB9Vn-(|wXAHY0K3zrc$o1iVeh%$$Eg9%9KE4_I<|cv$Q;ZjlbCBG7!#E(?F@ zjr==icK-hU-roEe?SqGUAP7(TNRUe(kFbGZm#wNIFGNn|+X8 z1UITWDM8bT6+EZqB%fZ_&>v9Ya$p?leUDC$b`#^5f|S{wnW->FgVplr(IfZ?=xCE6 z$fwiX4*oT|8GwpT?F*ez5Ogi$!6N5$k=1?0tZBZv2{h7CPk=03B1KVE zP0dY*!qTFUdL8u3zs4G*4s5yz!CD2Ydv|;Ljv~+PXA)^yIXU-JLC-?)du&pWW}=6h z<~uK*_qfL%{Qi9p0f7cTUzP8iPN0Qb(Gir#kw&xwavkq4_&T8(VeivXc{>Tt2c+hb z5)L7&&-YUSd*Nob=6?Meban~bdF-b@>nAKhy1~%!b8_+=WPe@{a$@!eFh+-RQC`-` zC?^p&-CyzZ`F+>*3QMQuAaC*`azNacO4rKkEdn~Of2k{ulVoIV~EXTE}-+)`k(O=0590?O%&k#c8y=XsyM*M z(-VA4GGs)fa)#;Q!0AH|-+#zw%gPx{v{MIR7(m>=ioEm8RdvYgm6{Dk)*4-&(93 zdaRztbigL~PO zf>6)w?%o~~J-s3NJ;*cf3ng3+syR5W6$-##5(z#-f7^;?d5EdCfG>5as-STG99wn1 ze{fl)y^lhn-$KhgIXZfzSM3T)Kg?Q7>uY`sc40dS3doCxvU#*SZ9i8;^7%r8LES(g z5KLR^Ap_lpsn@iFzJB@QyFa3FRz;7Chi4(vOG`uZ&p-bF_@1|17k8PhQSqJasY!Pm z%JW^VT1r0mG4S$?8)<6paz|LJ`$v_Uhelr>BTXK7%M3b`RCKXBzeRJ*UUy657I<}b zS$7p&cy7-2B`q1%ae9Z2$k^a&R46(`?9$+qcPr1Hm0iA9#^yXWeSheH#B7vmtkx9T zff?80*w)=%m12#_*-sUAq0xOcUULuAr;<)nOLMo46hfvxRm}AGDIw~#KKYUhrKYAPCmXS_6oiI`J{R@}7qJ3aqeyRSZQaB+ zRyLJ>qrvHIPhIznBM*;zn@^PomC*TC8g?f&hv<72LGLeJeg!gu7_=W}eTD}HwxuE| zM4v}SK1U)KikMMNfeY7DgG~d!rp-SQ+w6V36D)hasV@nF9=h73POnHnEFH_^G^w|r zlka8>DNM|}?j*b#oT8+R*j%b#mc1KU^xx%2Anh^5A^R5 z1kyabTNERQq%N`|-E?zx6}0}t%{CY(IGR2pytdmXxpI)5pKo8OcLHt5_2G<$zLyy& z8bYloSd(ylLFboOf`|+jqD}6jLJr&%YVQqPcxNCipD0;owT=*x^|T36UtOh0@Hx!D zA2~fGO=O_a+71>Un@1bPnkjr0g^5T^L?^1R8(XcQr{O*_oy-~xN)|UBvp8D)$gHqk zV%d;zlEmS5h@|cemApRF7_bGifBf(*5IPbP+$a$W0Nl>^8DJqo8odTG(OMQii(ODqp`LEnXiRco^8%NE6vR|Pd$*S3Q)s% zh20eMb@2mtg^G{e&lo$l?j?T3Flnc_PZrhkchmR7}sFRxA4q7n1#{Pj<7qP@to7|c2bMn>3QU|91$xb+v9sxtA!ub!(Knrq1*U*l3TGB6wsC7%!5 zVY`4v@9SG@?*Xi4PY@UhNcIr%k&<$Ba^iFR0d1&Jhogn#%}a&fgPd0Ke!J;Sy4vU6 zaq|`|y4uld+4c>4TPzHF75ej-XZ^jA0en%XKK!-wXDS*=$mFuR!>K!=0qGCgi_gc} zRDUWb^AL7#t}I6QSS_jgd=kY3H@3B{4Yn?nh!21l=jysw82{v%!p&ISQHTQhczYKM zxUfnGBWr^hq1-`R7v(BVFX)a%I6YPBx_Zep}!8`6p?w={Mq%kIm)FCNSH; za^n3Ew2;s#!Cs^Qk0uk$CjcKH?6w_FpP^}Ad|sm31hGmmAXL4jhC^Qx>r{*W}(utW6-;CMr?MbJ6@wB zN+xphL(vMm=&7{2%Bb(@AEynAV{h5DF)zo^_J_|u)SWep#1xjVn5XYuocf|C8%3L9@Klv}-p8K*cjMGCz5Hc--Nt#TX z%kR>clLOAvWAv5jiC^9=NI9!TL}r2onT(#KCCPH~weTxzZOBV9d9{S{ULBj*!JcW& ztz@|eYd&3yW6xEm-(_AF-k;|9Zi(#3UWfFoyL-a#vPD#a)Ww6WM2dH-IY-j`Z_eJG zMbFaK(b0;*5wJu=UU%6A^*U86=WP9DEHNNiRZY!~pa&4ZdLqao>7xyl2DyieaNAnC zd%TfRy1r-Nt|MlpExItTi5()>t0owSF{QEMUU)-9LHTz+LSVado)@!?cA0VWfX}-M zl#9zU4uAheGR9!RoL|pdFk)qy1utbP3eqy0@wW^pUNNsEil*F_9>tXh=%=p!@$o&w zGAkg7dU}cS%;P1+#g5nREIsq?1piGt;% zMqIzTH?qQh$9vDwF~{{WL{k*+;Ts;x-u!a4ZmjH#Dvi^Ue*hDj@R>VXXtA^45_HeeA06d&gRxb@?QAtdpLPK{xo z4(MB#J2IBIgp;X2zPo)p*acs6_UR8GNz?9QzQP9d#AIJ}EN%zpgM{|>gMGqYWLcd7 zl02uxeFb{E@W}=T#C^{H-73^yg+cQ9?+zp(YU<}_8Z?A;$7?y3!%tQau032fu+arJ zs(^L_0^lECfAC!z8XDsK(*@MfFV5yJP_Vs?gE*FQ^vx%TyeB6|s8fi&W+qE@bFA$7 zDMiL>BUfIcu0fXzejnIR)O2*Og8^Sd?iDzp+39n`M&O$uQp4tg_L&#kSl9Jl<=?T$ zt8yJ(OZzQeh4v>G;Yv{5%;|~~S7tt=m6NgdZUhTTCECfa9ypV*@&HaWiVu%%(3f`$7n}FWW zpVqfwI&zidid*F2b}sJxyT8vl%5S2R4ffh}cVkQ5y5@R~7ZiGV`M2(p*T95Bz+KeE zxer%m{;_N&cjV#bZ)+ZO!bq4VwVp+=DN_4t%GARjKtMx7u~13c2Su<&?+V#Fg6ivf zyWQHZqh#r(kP_+q{(YD^z)SFwTf?3_*c#dUrCHEYYuzd18X-3$kj!=PUXe;+|6WLH z$*8M*0r)B)_)aFeAZduP&Q4GN&Gq&FBP2^E3eK+gF%5(qe<@#H)W}36r|hV;$7q)+ zd$X-G8oIT!B4f0kLe0PXBB8%uZhGsjC2^@!1Ml+Ry`S3Aa8FgXXfHE1kR%G-|*kZo1OQ+`3+2rFUK|~M)#i%Hv+{!0a zu)U7KoP=ME>hYQ~@Z>w$pXQ*#;5&28+4*gJxIfXmwWvQ$xnOv-REgp@E7kAuLrzeIl6!zHs zq@1-8-1PCAe%+L~=jFANLb^D5$5ZY!h8UN5j7KNX$Lj^^R@sg^HqYus`e1ugZ`9jKOT z%uj^0)o(BiB^}-^LPmT45~1wf#KT)=E`hzdN5KB!R+K!N;&;O@9y)`~4Nxdxk0KOc zC49VXa=-P_N6ZE_b$iqZ*qXYuw6wf@_?@Hg^GETOgD(Hj6B$?4fqqdIUP0Wk$tIR= zF0O z{jG{yodm@1b3J``@6x!P|92K3t)^;=PX$>lI&=xBPsByPw9k+Iq=ruUYTWV@cYy|e9S4g!L}7XJgg=BNzsFH*SF%kNC9vN@w?8u{4S zbes+|G&~d{6Y)F!qpq4nxg-k`_)J6?C{$ETtC`XXAN9N&U(ju>qwAa8UP(gm@NvJY zJN`C4JQ#%eQs6yoUxK~_wuv7ebTZH^_+0_QzxBZqPELORUKzHwUg=-AfVS`@Jw2q= zI7P8ze%qTb95j~{MS8*z*s}!(tTuNPR!1Bxu0i&e6e|$c zIVei-H_HZ&toQk|U9I+HFT|UMAG4rRThKqH?|43`!+h88p{3p0d@|QkyX5f)-Cm(>{dc?c zLs>R8?xSm`4BwQC%6sI`f-3MWIjsI{SgI#4?+p*mZ^vrJ zZ-DKSVkd{f25D+YGT>vF?TD(+9XwD+doBun`Ejp2X_wXs!JUpmqWhSy`+zqk$ht^ z8T&fqpAn*!FH*!}D9l-W{krDuXa0@}%cEpth1{A7BOi4&UB!1|GB1DCY$t8;Yv~B& zbz5snq8@c!7-;9xRtNB%H8+PNS*(N%J9f&R_h}Oe-Hlp2)zAME;5$KYX=5>0F*oH$ z8!VJ7L=frHv3Y2$?^HsIShqkQW5zpjtf@Uv_YqL@SCOZ#nV(JCvXw)Q9@zh+I^Tag z?ROFrSY|V$dvad0)91S%-5nj$5KFp7SxT2{ePSmsyL=FRd&Em9l*PMCezM*1h_ThoTJUJ660hbo^FUjmX9J}{PCUoO z-*8^iI5--mCzMDY!APc^Io4n1u2U}Q$tghV@5fyO_2=ierLm^kWGf}TgrXI;V`lpeU5 zX3!dN^ILuH>rJP{6#Mv%U36^Hf9-n=S>Ld}O}(lot$=ByCvA7qUqWn=%uq|bY2cH! zoi46|%F9Y$h?@8-w9tC>2na_O|YK+l9?i2I(T%4T&vX*VV?A0!`g&0So@L(p_m6Vg+H}OZ^i_|{# zOdo3KnQeMn%t|~(K+U++%HQP2ZViX-k*-S8U^{qntC5;UFhFo4`z+ zHw(uL30^TW>1?<8Dtoj~C39?PTbv}g99{Jxk>=QCAZq!2{ox5}VxeJrZoiYtz;myp zBpiht&iz2^k8jYXhgmDoYTXqdAu}E|*|)dvDLCug^4)+L&no!h9(8(dq`1G2iPB(v zOs;>T>gb?wKv?{EaUbi@X7A0J*5r2F92*WE^CdZF6)2kX- zY@dhqM6p@yuWM+Aqpmf#@7p}3^}f_G)_c<#BX`#ug>xgvW_gxcI$P)-n(#`}e)=9A zLn|q$&rwW1Uw3i%YV_CbyOB4n(#=AC_8kZ@j7}a!&(N_C`j_)c2=hE0JDzw@!!dZb zV1VF{zPA71@rA>5lmX?w?VqI6WRiAA+&6N)J#$3o8<})7b<@9YF90M^kMEIV-)w-S z;=6b6ASW!mbp#Fx#9Vc0ucF1WY_OY-H|M$0s4#l>8Yu&IEbL3eI6XaPFG%q^cNDW@Ot3W zXD5dMbRdSMxC)O&V$`DqZy(8NKg|nB7d&LdWW8Sv2xFI5r?|RS|Gfdw0rD;` zE&zi;QuFkL@H0GCDLsc{t9BQcAe>U*W9wa^)rpxB3%su=_*7913m~WR$-;IfCc6+? za^iuU;Na|RJ?!iY&xb$g=jnFPAGPFcIGNe1hYTbgU4~Mcgw;i6UESGbI79W{yp0%z zJtqq~Ttt~67_<<8+J}gwzyoFiNI^xA^Slj)UCj{@@OhsHDXrrKfT+XQK8>PdyyQtC3A627tjLuT1QfxZ_zwMa41Fi`h!a!qy5q<%FWPJxR< z19mOU1`-gSAmPK_G%eyeUeDrPesh?V1|Z;xlP3>+w+DxYFoxYyzrT^Nm%7a9r{o)( z-cVAyf1MUKT-2pcTiV;f4lOJo@QQrOa)6X4CDr!!O0u&P$KeIZj88t0VP$29<-@?h zryC_MbBAbbdkdR8JL&)P&oMDEik$51A!p?k_OM8qq+RFHFK1-I{1Bit-uUBv8od9*34VUt<=+yeOT*W!CZWyLG!wisWYF$f1v;LPnStIN9!}jT z-3J~&-qZntb%wkGe$#YbUIBAn0pfn=LL2-x7U|Ca{~`rHeqcbK>#?bs+4psP#4mF< zD(I)(m#JHUu@wtN=H%sZB;e1C4jGjA_h732rluy4$3SImg(=45Vj^@Ipjd&Zm6NJ~ zPtbpqAxQ-z1C{3E+}sfDnHU?lFYShR71(GTB(q2CVrxR~V5+@#TAKOy%KSe|e6~N> z1^0_-mn$_)@96=|8Pv`0_I_L^=Gik;0x8P{I0-vacC1q5(ieq=`ix4)zft{H3c^lq{u@*T!E8C zqm<;^RyN()*H;enug*?Q>>UGhgZR+a)_|EdKY&H%FZlimTgX{qRF6UOkV>J&==nZ z6ZD->IAQs^jMwrpF?AqCwH?V866fV@zDxKO>QYi6Y?cr)_d!4n9{Y2zML0b?eM%2L zKe&*?ytse7e2<^iI~APf1}ZMp-ayIwKg-PyYlhY7R@HyjtEI?+**b7y@nvx>V}Nvq z|Cv0W$hH%+mpYDJaCeuaL6DQp)(kl*=9{a_O>#s*Ek?^HH&b-sZA_bx3)gy{opY-aJq1OSm6BDwqrf66d45ZZCo7G z6#KLn6T%2nzv@E-9}Pwf9NHz#JL=7@x)fOCJ?%3>Plc5l%}=Mzh!QxMqg&zAwRV7~iFl+<0A}cFi(M%{GPm{@MDI-)ts!>r9kItRJX< z#(kA)*eRLyZhh+`)i=EU#McT<49NmzO1^BjzC`2vjrgd#x*Fs-n3NQ|ukf(};4r=Y=F&TC(?nXO9Km3XQp@#03>zB@bdih=TYDWA zDiM)#*L&36fHRw$n_Klb-@4WR)-#4WLG5TjdKFCuZXm72TJIcTB{iM;B89APsg=O};0eXM(eom}t!SKu?R{+NkWJ@UqncHEc3A zKv1M|id2Kx_EZR?{=<0j!=Kk8It~5(o{JVW7f-{a2Dbq)HbTkw?p*<1qU=LYluQRN zzJ~77+B)WhV{)}u4-qQiL+90rUhX-2-(5RN9kj0yY9ZHOCg5wW@eMif-sM^^LHj^=-0GS2J9A-6aNvEjvNA^(l0*TrdRQvjUj zsfe|(-obVDqXrr0(7s4&Avo*c)}mFOK7L#?>L4gg#ORl-p7{8oI-D*ZDw2AtO2rMX z(1F-z^Hb5-csS!)(W+M*soi<5#~)3EI0k9M>Y;38=V-w=37a+faFb}21{6hu@DBD$ zWF*5n&uOS(9|McOQ){I6)}vdcj*myru-&4d2i9oV>v3x2L#f)?dB8G$^4epd;rOPe zmc^Zot6o>QuV7KK`FZ8fuG+rZcfo~xkwjhI6)fQzO;dUqrwr6vgMu0O-N28Mlw4VF zf><297!X$Aw-dz2_z~vSj{LXvtP+ygPWI|TS-NQS=8!DS(!VF8DA2LD6puYe)RBR4zvr8`S(-n88+*v z8yIA1aNG5lcEnsiN7YGA#|6fJpqu85y7o@0rJTz?uB7pm z@^?zJ;Oz%OxE_RNb3TN)!( zRc!@Sj4KY6mo)YsP(JfbpHwVVGwsUJy`U_OH-{%ttUft*8DOtrtxj*Xv0HuThIT&KS;>6rXuF4alii;>iApf+HWeMPyg_gODqFivF%-NXdU zCldaG+4tS&vy?6a0KLVsSuYux5JON5QO0^_xvjNe7vwPT8UrZ|v4NX=C~V5WTSk5G z&wXPVr#q>Bh57kkSnHyi&0u~(x_x`qx&*C=R=gT&n7Wv)Rb)TxC7>M-B$9XHeelqf z^#n7)Lrsm8_Urx6LdSWUv{k~Sl6P)rOt9XDsxoR;l&h|E#?$do|wAnG;r51d0J}o@2>esLZ+RAvpWkGyt&hjG zNP{ikO}M06n@)~aI!l;Rq#R>G-C$S#A)$;)#fhB$aIc3WhpsVB6!GSEos9HUIq{lb zp=)tubksjEP*PH|eH5NXQ_C~Ge&JZ)*9Ev(OJ5fGhhcnSf4g%h$4u@X3ntR!7vHI` z?c7b)lWzzQPmKpNFD)2Oe?Z}?{H@~|R%#HP@MBoBvsH9|{={eai`K!Zrn3`N?$Zke z`|get`sOP9bC*Ig+(!+abnT~frKhP$>Z;Ej|%K`X6OM~;0Z+Q{43StQ@8-aAL#YE z^v*T!yfTh|6G4U{BC`1UJ@f9s#?hV|5w8bq3{*6NX4US6h2d~Ub|vN_N*TmAvJ7w< zWkCVfRsE?f_>h1d&6=-a1WIn4=dw1=2yiH`^+tjjPVh$sxfS2eEajoKStN3%p80Se z@ApST_7WaagX#MtsP){R?$Tj=M4byqlt+&qUB9-$TFTL2gw+GFsBvdH@-awknIk5$ zroq(}A^U2UqhT7NrFe@_8!1FsujXBG5&M$OO9Lrj~?yUW(DT_#oI z>60gW>FF_lWeq$}Fo*K4o_M96s=$6dv}4FIV0`zFPlIp~(hiowm%Z$N`sk6IE%ENa zJmgUj3%?6V=Rbq8;_8LQ-@kt&Ap$|wo;vXfTt)ZpHCeBL`5+b?xar0l>Q^&(mF!l| z9|CXIsCJi%Lr`W8oki4hPHMd}g;WhMq`08%3J|;1RCOPsqr>^fz^fxN&ZL&1+44+u z$_0r(&QM#6>Jo?^QZJ{xo@q48gJ~k1SS%egbx2%xhg5m5^t%vlT4&JSm~*D_Mp}A0 zsw`h_2q)&`9M?08yy?VOhY56z>=$(2IP1Kwr*$0O6-T;;Z@sOt00WtSgYK0 zhhfuVCF(q4Ry=SSEiXT1#$P+OFbJiojW}B=jvTj==8qr22_hOc$-871Uvlmk98ohr z@X!Y%p!N5UHVKkiUu=h@>H&0`IBopGp>gm1em?tb;(1loq&D0=OpoATVHRv4LUl{5 z_#pKdWvl- z>&NGKd9l)A&|@XN{z|BdgGmiXjiUaOz3`vB`B%nm>uwunPK^|X-8qT-T{==YiOa3Q(qLWinRwhu@7bD@W23+Wqo!3GPcI~0RPoct6pZP=EE}^RQX@UR zex#8TEtv5rT}K68%Fv|PPW(()0~(nrIS^){-7{R0b7Cuf=}k`1dECE$x9`9ST?}9f zIj7mKBgrS^{HPJIBPv@rm~bkEDq$W^g6oo#lgt0v`^Dw-&F}BQe**xH9N$4Ac8KNT zfn#PYrOMyzH$+3V_=(2fo(2Cwtrm7gyZqV3#OUw$?u36u{QYZMS{BLMUx4l}7lcUr z&iA&8^s+KZPbM5KzFzkrV8?qwmpay(STUxQZ+Gg`xmcT&Ddl5MRQxzD_Q^6+9>NAm#tvTkGP=_=9 zUXDv(O7BYcj74;|^R+$ueUm7vzO`Bvz_|tipU>J#aML-_Nu7A%XV?$*IaXhpn@UhGN@D&kL zM9&Ix_?#GW7p@3Q>4f3LT^dk|&MPYZghP)aCk~E7gK{@RjvPMhPyGwBoNAS>u#k|5#!&*M zF*#Y<#R4?#rMKwIJgpx`i`Fc2z?wo$o{SB995hG21G{Q#O<}#_7ml|k8FNBPN(wqP z>^FV{=wg`9^TdYkNL_+BO7b8Dap1@z$T-dCQfpd`BYhI8X7o1x6W;( zu3fs}g7N;`(^HDkg6VaRA=+S<_-H$0-PxKAAlYZ>cZ$=R*IkRVBWDOCf7 zoG%53smTg&^xywBBFjo241t`=H7X^REyPS}TpEa!)!>1TCZh*9Hx9gPp8(6Ox3{-> z<@}l%R96gqy0DKdGG=+OK@;XV_$V>Q-sj<2M3TUJ+5BpTSaqz9K6(0-Ru0i=lhe9v zk>KmJw3yTG&Xt*=jp1V4P zM0%@70QP7|{?x`U8yOinJ1-AzZn%`$Xl-xZ!9kXx850|;!Zc`RV)9v(fszJPh%`6p zeETbv8G!`VPh=xG+kud}-@!-_3bM29qj*0B?qR{%8Ut^R!nu1R-@m^bb-<%ds7}t! z*+q&UBTnU!fwxjcZ?%1bdMbPmUPMKGFv~;i__A0&kaRy)Es2c-4r9yI50H~#A02q1 zsje<3f1C8aE?>$7U(LO|yam{d2*Mobp+G8Bd5D*u$HXWTW^KiKM5|Ad^)_I>MPR(k zDPl`iR3ux?-c6#SBo$WQn`a)@|Kvb64*lbvmV&P`-cFDL`<6#YTy!*f>kj#M_4P*}cn2H?r~oFt*xCSk z!wu4Jq1z7$A$$s;u+Hfw>|G<@o;?NIEVp|aAY;77DY1Qk10-*L-=3j7`t6&{Ef)aq z(6ES|{_v&sq|ilq45^W^@seIM$w{B03*kZ{nhh{^6hu=m@+q;6`Y(z!s9bNl`1xLJ(hA8Q#8-$qol4BKN;OR;mV?eF z9^>bSj1{Dht$-A2ok70#E|s)mz%72%4;A+^F$HfEEZQe$?18Dj``}5DrqKO$^ozfK zO$xqU0qy_|=hHVwMEBNu!uEN>^2Vi0G<|v_UA8f{MePC#T|H;6dcUjwV?zn_5w<_? z^$+;;cJi4=-GVu*V@V$37bE(G(`%aTF+S*LFd1fVy0_^CWi|(8N`bAB zpO5iV=A?xOHyDgij#c~asx6@H?}zF~Aa)L8FTFl-5r_PE(KecP&kyR&cV8Bpl{VYv zvg^GmI>uHgrng&21I(`xBI>U129lb@h<=4c);OWc+(i z_k{!n3A|kkKXdfhv1n0iO*oInwFG`&h60qw)}d+C!Itmqj;EPBc=Y_`1SR5U+`FXT zJ#WeXEwz9C=8LCiDnI}5dDgT037lNO$OYhuO3zYjw|*QJKYW{Db_Z?haY{4PmB3~? z>G4}YmggOjcz5Bx7T^Lt}B}7+S(pLB{#M}&c?j^2nR>vn>P&`XCo|s=s?_j!t5}# zQi5hT&^tg?HKbEPx6;dVd`e$k{ZZ$x&lV!^-!je7TGX5W^B1VB%Aw)-j5snj_!L)E z^m7de^XO4%l{&#R$y82`c!tH2(|5Mydi^JJloF<NO)409E^?*Yp1h<+XE7 zf+7zZJ=P2GDw}!cZa?C1BCaLt_3M}J-wBr9`|RyG&JRc19-gI4uoi4hYA1{XVqEcG zE!ZUkysq^;UI21-vqU#qB|yqkvv}`pcV1x45d4T04cs``*`baDf_>`oTCA<97Kn4& z+T8}5t5?t7_~YRPXGqj}%F5Q@ZApDfH0Tl)IeC0-N5&=(bAt8xR#OdF+O;+1d9@I$ z{5G?xm<|Az04p7v(F;tM#u;XiA|=9@PaP5I-dz*k+B}`85#o|I`7*;YXw1QP?AQs{ zUz{B}azQezx3NwwKF4XMCArqwh`Ga!8Oc)A8Q)&-YnxU?tp(-d>QUc%54pnb9#dNa z)*^h7Wq_XA&yMvZEJV*A!;r%y$;e834~#01F8YNZ>i2{%CISpt|J^(M;NCrQkZ7r> z3Y3>-G7Fr1%N$0Pd^OBaVtDpUN&GPL?y+yxzGUxMUeC5QSaf=|`N_N)+Vg61rU*ES z$aw0xw;<(Whdgkn)+`Us0XJ{vd^Fy8?ZkF5gQ3795JH`Ny9}Y<5GD|cdnnE zZu+FCq?GW7sji5*%R+=8L*wR7IChru%U@VM{eYG(V~{xcNC9#+D3_ri_TOk$o_oH{ zHN}GH!0-w-Y@HmV9lPB^{0b|++hc@db3V!Xj_W)hZ;KemS<_(BO%=n=qx$eB9!2T%=Y*rcopcDL7GFC(4G$0Fci7m6}@58 z4m7~*Q|!d(s3{eV)++ZkeSNQ?cRPHK;JHx6*hxyd+wJn}N-|bg7n#o^F!G3d^2Efy zR1(+`m(v8(f=G$(TO8PKiyc{2kq1t3H}>c>-p8T+xTHls4~ z4@Ln;*;|oXa%5rk*U+m2TwhDaZHtLKuBQ&gwbaXI2`^NnUJ?L1!Uvi5_H@LIz!;sOGnKU^hP zt2>PDS}(y^t^Em=!h=EL16vNnr9hGeil~J`x0mL*BEJrdkMmQl`CXHqeKegUwr=_K zLVEQdW(dg)(_w^4un^G@ji%yZZtNr)z6bCFXHJbrai)4Iif{j53)9VOMF&KZhU0t;mel9w$cH1mN@oWFNS6qbU{jNPOY^5Bv>^V;sqN(MI zVo8B25n^1Kp7ZjY;T$HXkN3P>x%i_qB_M!w)e#O78AW~k8kZ+pG^gId(;C~FVcUI+ zD^yK&1Ig8dl;NJjqlk#wQHPB2=WGog+v#if-BS?Zz0)#=wB^|;UfIeY3&4EW3OOHm zEMYrcJ+jN6*dW1l;cnFXLU=4te)tJ}K~z4tw06xCg7hp$CmFLd-(T_&Iuf>%NHP%uYoCZd3bD8Q`UM%HYH*eDYvMYOwCugsj9t<*YgPZ0^{RD zA$q$5Nm_Sk-nV?-0;4aIlhfn29X`?4^R@lI;mH}*nq^WyWIvtjIi~h9EqY193@Bii zr0e*nG04zuUdoc5TKe24FvjTjR}si)c>!jwZWMgDWHuiHO%erhUbA83=)8TvphloEWx0r6IGj^lw9?5 z`VpGms8&jd?0WUtM*jFQ)P>ZAWtl7THAl!#U_}PthUs3RyMI}wlT=d#XN{Fd#Kx{ zGnWZAR0(t?6+y^fTB=jn%xrtZ5t|4$%GqYy2X?ZpJHODJOV9nXm$5Ha zHc{r6BbBJN#T{&E$@Lna%u94<=jK|5=SgXH*p_!bjf{j3;|tB16o};QC74kuK_OZ@ z&$LP;3WsWYk?%wlKMYS~Ceu2s;4mj2vWDfryuF9cVz1&gRxRJa{RtESH6F~d3*G5M zg!2$4Cmqs>Az@(zmli;JCc%6X8Jfo<8$sMpA5?h$W)6M`YwHT=#ejSmv2n8*g0kW# zGmmHnj)vC>h>M75IlIX_RSO7`jpdyPy$)^wkVhc+`%6@nlypj+CSX7?Q#S_he?4_| zLe_HDa|dxX9BKx71%&!3(hKLr1=u(WFR{)DTFr0lq}CJYW1RCy4v9s+r^-$On5?Jo zfgbk129&qI&Z~8Gbim6-V6t(@9t=mS(8Z`viJDyxc0{%FzZ2P|TVU1k)^p85GI{pn zsHej8Wk*-oLac^;e&r}GUbJ7>jQaRgmqJ(?&p8784kOmTjpCW5)c3Q_xlk=yhO(?c{gIq))t9F=f- z)^O#Vy-*4G{V3EehVI-|AZ#Fgf-B6AsBjT6NBgw=|-J)7wg}S zjSBV*@czS@8+Xc8o$Ik+4Cz)~$LO89wI;Cw!`BY4xMOnwE&LHN8LOKf;KzWA6!FylQOaqW;L13GeXb{!kF9J3(9rEx2JW$IWmFIf~(aB6rkIu z9#4~5GVnKk51ODz-#;A#EELIjHwb>NbWwOcQ6SyAgw=F@Jl5H={bzeDOu?k@);1Ju!b zWE_ve7Me!Rf~+X1Dw;1_opi7HYxPv5--l_>!@DzHKCsE{RP+`KO9P8bIQ+OD_=y?^ z!TU)rJzk1;{L+o+I$4e*Vrpp}=m_>4;A0&NW$R=?z#;E!r#lhvhU_1BB%e(jaww@u zEY2T0$i@juqqOwk3sMh^1VI-{e;n*ge*QhepWW0_HNKQ4g~kGM^@7nG^KNs__itO} z!!aEpT83x_-<Ri-bF;yObhDZ%U30x~@ zESr!(skWbZS5tF^dmmT4=vP-v0>o}icN}^>FC&<~2>_Em_)HR^FNA%{DTFJ`3Jg9k zEWt@wBY?+9?QrX~_eQ|m`iCU(Qgr)v;yWK1w1cPkPV+nn37K)JCusscvBOmuX@i%j~Qw4QkDKw2Lua&qOr*lDXWO+c9CibM@1_PGEx`r>Uo+a$iu zAo|!Sdd<%W2kqwXdTA{lO(=Fz4P9H`i$%rm_qkAqT93%976HWhxc#@jq=-EGQ`aqlx^* z(Cu}30Pdl=r4L>T^Zsl6m9h_>r|Tz~xJJ<7=I>-$R+H_o$*CKI?i4z+4Y_0AQAtWt ziIaN1IN+(m7YVD^pdd0wew70uX7Gd4xCtr^rPmbTueE!~o>S1r$DSY46{&1gWR!>{ zEgQi$jy}vdfrWWOz9s;sO?zFwHt2%X19Sp?*`AF&QD8x^yX69FI?L+q+27pMG(BU9 zd~sw<$`{X1Ils7QlGlx-)$!^L#BijK8YL}&hQM%YczU|8clI`@dZ7HU`jw+-H}TayKusj2ZPALu!c9u1;ytLG+Ffu0A*9eWLJ;>*gEzboFGE^;5>UZ?7ylu#M* z>Q0~^^&J_*S&}a7ZZ8f6r5jYf6(3YVgjLZBKa)ij6BAB0Kd~PoJ^>psWslw{u*Xx$ zLQhD^+_+jyXueRYdF6`d@1Z~vPjWXMm8_~$5}+VsGe-|It!4YjS>eU9PNIdIDDufE zBGa?)q)c&F0ucN-_L0+|Qrki#Y{7H1Y-U^FF7^vmm$ovy0L?sXi8<2@AwuC*ZfI5o zkCwTduyssKgm5tXZW`0qOzXfJNf2|XMdadtRHT@w?6Wb z?wPGLrLcBdM_a44ot?P7svw6=w^=E6#VhjHY*Be~+1wYhCJ^@>@EW=}w8x1aP&M{e zyTj>6XdiR-MaTrp=z*hrY$n(X7VTZYH={q*w_fDER)oV`r%>jvqR%0MBPV6dA%R(g zix*qKn-)yrBt#r<;z@RyU^Ucvw8T3}dak5DKCldqm(=>!m**=t z*D6uS&JPH%Sf)CC<5l2zjj>ky1Tw6;+c$yU5*TK0-Vor-C&z)yM^Jws8md;Yanm)D zTe(#!dF$kh)z7x`h?aOZ^yCSn;d`%?sSN$#?8w+a2Q_o+$AM+Bvk~-?)e0}POIbQ+`Zk3Hqu_GZBL?Af|!qSmYW zm%-tON13FYB5YF-DXgC6O&;R)3kPT5I-k?IL>b<%u1+IALBOGvL*O59oui|FJ#CMu z`c9hrE$@#4mJU61x-{%~Ou1^1)Gq(K+ANf2zu*y?K2&ygQ7GH_iBeKl7Jp!kpuG@4 zkOq_7ZD%NA_HofK5*l)W_Gaf=fs-u`4PK$*l@2m$`us4fU<&0@j~LJk)5`^FGVfN!i^|p>gwsODf+>k3IPb5HO)$G zqsL9x&o{p3b=hMXFi!kg7&R^U6dgYv+&DTpr;ow|06ds78qd3@Vh03O$4PP%>{E2r z0SmroF{(X%4?GY-n`x@L9y4Ord^ho!m0!4doM+)V<0nI~yM+R1tNzY(IaOZz+-vuv zUSU_o>W?H9#aEN+@zBEv`5&H|_3wmpt=xx*w1jc;6a1s_w3Uzm*Bx2L&=wXI5rQ)$ zZHqx&>Nsd|0|Z7V3aHJ^Gq?;?0;qn$g`m*-wtqkXtsIPDQ+JRysX_^XmPzQAh$cN$ zj=GyT>);WAyMj>?fyh5ehu4atCxT8;V!iQ%6+6COMpw2}_=%SRWLkDNeSV>Dybp>gdRqIzv%+b&F=vrMAsrZs+t=9KF%KWg^KMubr4Tk%)w$0krNOZ7oK za7c**xJGPXcwh&ACZKEu3<$ObXv%|dtjQN8M8yjiz)zv)SEwag5z3|-|Hv29%*V~$ zHkgA)lLm(k@FfRF4ZCDFfpe0Q!o+Nf9+XjjWy zPvEvtU%wM^W0j(!BK0nRQgdOEX7AtbdE+Nv|Kn?jsFy2d;r1TgB3-T4f%3 z4lk?U54R|?CO)z%9I*pjy!{X7kR5Re$vSOge09)}`l9u*epBuv?Q(AYarPJp0AWb- zJ%4>XA{JkUu4sN}|GDSdEzZv|v+%0&#$jhK#(2UKyCglI?uS!|57yV$0gS;k!FIka zZ1tN8!&gegf4D1v_n1gts9i_bBWQp#ZU?5O2Xb!Me%}7%0)_z^0_@wWx!P5;!gtse znX;+rCjw?0e=L*V)YuWVD(briM06Sy-=C{JNqBG@(NbsKp7NqS2-hX51S z)t!B)n2*_&=GKd|iZ{N)3XQT%grci6H3tU{|8QwW(8w1Fo4LUYPwT@)Sclwe`=wd{-Gi#gwP=G)+dHT9Dr~XE{K4pntBFKfS#)SS)mGn{Viu_ z0t~*&#Z}TVkCcCT(2tJvrQQtzE1|uGm6Z%ZzUEwVONhWkc%@9~m zE-iHf?=rui5U;}v{(+?#6)Nr9;lg+OHuz5j{t=>LREi2(4R1eg`HEb0Zm_a4HT7Q0 zm^UUF;{DhSIyhFK(F1_H&DE|-9q!a^2^7F+L$_v65b~M3gt>v zJYnXFzfblg0UHLv7pkuZrM)~@p3iuf)SnFjn2mf*JynF8yTMJ@|BGai^GpxAW`Oz< z7dJOI7e;P&r4;QO+CF^vfV0UPEugS|py2>C%OU2dlcDJihX8hDkaXqB@mi*Q?Sx?0?@3+$ug zM~}V~-09i!6*b+I2$cag5*D+sn_p;aKI1GJ7t$MeBsg zvtd_)z2sf_s{n6+q##O@Ba3SpEU=EeQtNzo0JLz-?WQN8_kK2r4H6MCshwAl)%Z_A zr9|Q9HcMM=?Pv||r1pYADkHeeAhL)^i9*DXVbnyG+-d=G5}|+Trli6I(rK=VZ`Q|{ zU?j?U;=~`UU_WZG*`O`*H54&)Y*Qw?7Ze1(zc?0LF;f1u-#(~&zIru+WuhW!Zv0nJ z9$o%Y4krwnOF99*&2dwIPD!SB$6pdc+mo5URy>DoTGIkC%C#23wkl@=bGH}ygi2L z2iOC8_1bhJ6f;2r5E0pHUbGydlvIl97w$mq=ojzUS|fh|45Xx=a2CPmlfKVLz3V1; z$9Vpgwg<#_Shs!*W#}Tv)AC>Z@WjHF9Xq4)LmbaEDTAV4gTu_f;_Mwq^~8-!?o zYIRM`vt$#QxhQ@J2??>X`pl9B%nSsM6C3XDH+`CdVy>H5vK@0dSR+7D=*4%tC1z&M z5}2h~23;>xko#waE`?4KWD`I)4n~o>9bNEU4lX%aK*@!;(jW)ZV**jn`6*97OV4jBU4~ zCdI{4it*|KmuKOQZX&cltbT1gF-&FONrgmdbg=2q@(p!bXx(r3!TGADCu(_ zFMF|hbhSD5vAN|Tvy7qyMuxTY=59?K51Pe+oV;`Os(}8sai$-CKLi*>u$3Bamz`3e zmBU*H;48>V^p!9FOlHP$a2p>y$;g>GnMlMqq}6%T)PZ?EgjkXby?4=Wt=lGEtr*zb zfqj%j+50rOI|y|p0C8q{@a>&`X(oY%O5k+?rbUXStg1TdP@%G%OH-3=2g-P+MUp7Jp{ih5m{qIPkdqc2u2CH`%cG;CGeDbc%=`!U zMCa99Z3=vACXE{cNq#40TGzizk?>==>>RyGCXZx zIK0*{7Nd_`yxRM^x*qEHAb+_hzYBI3!TM?=D#PClRA=t%bya5!JQ7EAj^k`*quShmP3EO|$vMLY?E zuvuwQ+?x|PDZns5Lt!(4Y!mj-WZ6Pb-Tfs~womhX;TP%mIIrtA7r7~=ap>B5UgOG( zUoj(bdbvZAVf%#my7@+P>;pUMxf?<=ygyc7Z)jwR9N6q=Jf#_IoFY-4zoBKzG%{ex0!=aoeSuM-;trsTDOhZ!C^EIfG~+>X&%Y=-(8co z$;a=?uv%DJR!1$$rm*ui#az;UqyOMj>)?iUiT6{iK z>Tg!vh36Mitgo1OQY(>>D_?eMD^kUOKa{!|U>w9YrtI^@=X;~B*!hJ@shh61_O69# zzd0ARr*6&~*X%*an*Nid!K7KE%BaN{i`_i=ZS^goZ3+3EYsh8%@18AxpY^Ju;2ViuTRX*sK}KYY_vYlhg&oJJs{(;Po+7??=}6euc%bz}0f=+$ zOZrg8Uia0{(R%Q3;uz2Sv5eN#y;uCUfM`KL@j%|Ej4H``dL>s~2vUjOBgwz439exO=4ErFdR z`GG@J?uPNrGnc(-RP=1$ObtFdMqz$?g4flUt0ihw^~O<+#iPzj-x8v4klc3n3$Iu8 z-{d!%tv4BrzF5p}C^$p&Y&XHZI))wwx5%cuWe173t8X(jLbqpd{U>(oaXp4Y1jHBi zx;JYFz8}gy#jPBh_12}L*r$BGSDWrf;JJ>Gr`DyJn+q(Q-&Hrsec$H0EE-f^SR*-6 zI3}HEx548XdLvz0PwnqTO&#LX-nI=R=XTgg>CQjamg-Z^OD_pf6M&g=4x#4=B(z7av$~EA>St&b!V;Rh>98fS@y^wVO&(xr^Xjdas1;eMP>92|3lpY(u z+XxH)xfv0;yLRSdDN+$ia&l1K+5LhP5}rPN3QDfiezxtcjYO2oxw6%2+(!Y z(F(NP@V>Xd+qL3(#tv`k4Q2b>YVQf-kWuY-<0-lHPs24|{ysrbDBbF5rMr=SH{*VJ zjkH0%qzGGvOlyy-(XG>`f4$B*rOY^E{yVVJvz23GNE4A+!tvv0~^v zAUMM_ivLBPL!|+kP?cF8wC6SN-c6V39nDT5*VWKaP`)OR%*!PJv?&e7wWj9g!kWaQ zdy94Xc6;8rB^PExWj2j(Bqk;nFvi~fm2!(k7DX=2<_DgTj}KA0X_b;QlrsKsuRW2Q z#C8XjjG9zleBU*HxOWx_FR+64RA9C53xk#w|7*Lhtp~HW7ce3seBYh}Avh`Vqr2IJ z=HD4wIqU)g)P*|)Rz79Dd81@tZP~OfpB_L?kk&RTc1;lBw@B6>kd|NHAb$LED=mPD z5twArJ1zaTd3?ZxI-9xvFfOhoHto`a3ruIx>@<*^nDqYH#1gk9E2z_;0enlcUuqxr z_HPUb`GByabMsP|*T z6ivg({;A4;eGO=cC^=sID%(DSQWCE5+bE_K=^*&;LGVrzU;A)721I~4jW?v~nXq{% zO03*FyGQGg<6i?@f!Eg=7T7lE&h~qE0tJyk8IeJmb8{7OGJVVc38AS9^&%?JY01)Z z0>lZozg}$lcvK(Lmo!?)ZA(jgs%VWm$B$i3{{80<2piX<3(X>CZZaVLlb4qVfPc#I zhst|-!i{R0Z%5ydNc==ZOw?bW$ohti1B#FrXikRiiP=GWD&LEVi{mpOQI;X~`Iha2 z&cbk;)JM;%s64`Dn_qTVAwZrTs91x&6|~0AD_4Y+|DxOmgk2byLdixVNmXhCEv`!d zg`iE-m&ErD63p<&iX&bq+t2!q|(+W$-cz zZ3Tq|&b``O7jS6Tm-e(xvfZsXt2@qhQI*;dH5MGjEaZ6n-HRXH>ZKY#v&Ud8w*5#e^4l)1os0UBElm^1*0ImRZ%8m1Nx$rL~BgE^;tKx7=s)G5a7+5@ukY5 zj6{Zx65~!M9}p9DswgPDN4ichc6$E&)=53goO9;_;Q=~7U;Pb^2e_2bEAjiAMZO|dtK>w zj^Fcbglt5u->#Jbj^{?MmmyLS)OKUsM)=uz%F;Gwsq$d6`wa#Sx9awknM-TBK!(jJ!U_22I&*9S026)udXL{bg9PA62; zZ9T&3Sk)bpEz1SeL6?@9vE9fi0y6ZckeA9-2@c*hY%Ycha(j|*j6Qk)&FP+&XFZzk zJX}1i4vp2ys?wX=JU`vY(J^3UNfp{K?oKvV^`rhid19cXm!;F}S0eGiy5rDg?HQ}G zr!+OYg8H0(wzVH0IoP*1er5aCg5!XdE(CJa5IVNix1&rrgT6Ope-_&>1}@+IB*oM+ z;g%%mG93F>^S-k8iQ7|4!=oY3VR(@@ZxEPR5ff^=+CJ96C#Tp|k=xE|eR_~9K5N5vO>mY)&!^vgGK=msZ zR8;aUu742sWAV;@F*>72c5`v}-*)dLn?(*+0|oTlc3H8}|2WU6J$p62?M#^%m9|9=!_XWBku%HX8lo#*#%R+sN2P;(sk52dC>6 zaru%wYZsKHRzSmYQRT?iGV%ven-KZ|=?4tAe=`uwJ3_hL&|o?Kmsb8<@O5I?v+VkzBQMlFzU{f>{q{?XfotW6r2qMl$x=Q3Iljg^LWn=h zjxCn3RPSkUd;a{kjqN>HL_ln-tK+?^J${Fi5&|(aC9d8j^?tZ_sVnBglUu^&%pZ*l zZo61~F?d#<=zmT^_#io3BG+&K?XP!#avg2))O~mJ*8~3n&a5~Fqr-bW)?0ox*re<@$dwQq)u;fslm(*w5Hy@g>svEdoz3l&cSo+M*%4s{(XZtsHW{UrLw8^rw zcCkTE)imz!pPF(m+GU-eJXcq$KKxdjOEz|QX8Clb@Y0ZHp9b5;?RDj?d!kX?k-qOB zQPnD%TWoC`$0~$T5O-rB5L18X71DFwrlVcG;WVCg(LjEMUPLOv^;E_VmPKcwspo2+ zR~sGS@SEv8X;7XgWu0hHRM{QnToAFby3sM*dRn)K|0L*0p1Slz!Nl0nt>KU2 zB#)P-aIkncnAf<_Ccav7op_t|4%O*x*^mSh{4?O?Qzm|j)erUE5qQM0`oZ?_wwumT z^%d;VC$gA5j;TJ(Yu(9oo9F?N_%0&N2Gq5c$>6g#fS|B+v#_G#IW>6prh>IFaziG< zgft#jf{dOWuzRUTkqL4eRFxQyZtaY8+3*EG5R9-1uX(+G!g3Y|=_=nR;HzTx$rL_U zIJOk3;En7T|AlHN)MFCNpQvdaw-F)FA?p9;Py$w;$M2tP88zwc6X39&Ba1(AW-HvO zdV=P4!PGEYe$zgIR;dbU*SGK3aoyyfb5cc3?K5gws8ZzX@ba!I=H1>#h=_b9{(SS@ zL&gRduOg4ub3|3tGDu+y(G$-D$9|5DC@jrjUvxHToK|i-@wUATut6ds%6km29cpUA zGTn-&e7s-~gjni-4PR=h@vr}m!2aKbK89W!(o}60YKMw%T_D`V`7;+3GUW{K{(lxl BJa7O2 literal 0 HcmV?d00001 diff --git a/dox/user_guides/wok/images/wok_image009.png b/dox/user_guides/wok/images/wok_image009.png new file mode 100644 index 0000000000000000000000000000000000000000..5ede9e433f21befd434ba87ad6a7f493231ff33f GIT binary patch literal 22519 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 PyqCW2h0|rItC9Z$fSK~5 literal 0 HcmV?d00001 diff --git a/dox/user_guides/wok/images/wok_image010.png b/dox/user_guides/wok/images/wok_image010.png new file mode 100644 index 0000000000000000000000000000000000000000..a4fcaa0495b007a7b90705fb69b3429e11c2cd46 GIT binary patch literal 11557 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 WW%$(pW&#S0K{65w;;=U#eE$Q>r&xjj literal 0 HcmV?d00001 diff --git a/dox/user_guides/wok/images/wok_image011.png b/dox/user_guides/wok/images/wok_image011.png new file mode 100644 index 0000000000000000000000000000000000000000..172cafd8bd4115874de2311fab474ad63d8b3454 GIT binary patch literal 26654 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 literal 0 HcmV?d00001 diff --git a/dox/user_guides/wok/images/wok_image012.png b/dox/user_guides/wok/images/wok_image012.png new file mode 100644 index 0000000000000000000000000000000000000000..241f534789a4d972ff60037ce87010193c0454d5 GIT binary patch literal 15588 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 t%_Q?E6(IqT4g;>qK=NS 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 BBpLt! literal 0 HcmV?d00001 diff --git a/dox/user_guides/wok/images/wok_image013.jpg b/dox/user_guides/wok/images/wok_image013.jpg new file mode 100644 index 0000000000000000000000000000000000000000..f1fa7e83e73fc614813d2b6e88e4e058ff1d93b7 GIT binary patch literal 7171 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 literal 0 HcmV?d00001 diff --git a/dox/user_guides/wok/images/wok_image016.png b/dox/user_guides/wok/images/wok_image016.png new file mode 100644 index 0000000000000000000000000000000000000000..bc68e2927e8888e86e3122b9465508477a9f4e74 GIT binary patch literal 1254 zcmVPx#1ZP1_K>z@;j|==^1poj532;bRa{vGi!~g&e!~vBn4jTXf03vinSad^gZEa<4 zbO2LtW^{L9a%DOoO=)9tZ*y;EbRbV=W@%$(qufhc000C{Nkl&5XF&P zVdP5WUSTD2C3a-4fkcjsMRJ6Z*c@T5z!9?btJG^MoenT7_FIv!o1{~D{p!`9W^+ED z$N%NpyaMEU>Bn>bIri7f*qXm$ifPt-+ z&6<^2G$G#dVuf6x$_JPaxW;Jb;~3HC!nMePU09N+7i@>ia?V=UjQndKMk~Ce9V60v zc;Dwd*JfA`5V=eGc?PPfnM@%&#E1Y5mpK?faKVt)IS>=DG=zTGl(KQ1Hn_iF#xrnY zMR^0`7~>f)0mvDufcVbdEwYHF5HUcsp|!N3%{Mb}&I=eIY_(9k1B|m`8z_tb#MWj; z044XdLS4_EYbMnZUV<4|L9o&dptz^P2{Ql}AQ+XFfuqRFlL+7P5;u zggj|xiYgaw#f})2juc^aA!akp3|!|0xxqzjpfi}3ZV+$QjOU!g&vCz-3Th7N?79UQ z6}MK>>rMda-7Pa_U^O#iVAO6XH>p(Ak@ZwFnHhaV##(tsV%A!(V|$Az6EmY+f(^h( zUkZ0c@RFGjt(ZXrpr=$Q@zqJs!Bp(HMhr|2ZGl1Dow3LD8Z%KGz2Ffc0jle!P{w5^ z1L$+Rr!}q@XJnc500SFzdXt{0;R}mSM8{UGn1$-p+kMx}c8VbBqI7=`8u!Q1lo}%3;ULUCyUyHZu3_}K?%BwkOI2G<`dTT- z^{U&i}sxFw$NwqpLw4*7} zsfJ4Dq0+|$16f0wvqpyhsv%d>Tc|(8_Ux?PN{l+Hw3@2Ag_vbvKOMwTC8uc3>mAl% z+4>hk_i}U9vaP0T=BDiH+!X!mdHH`vDO}C9CpP{!iFPvoCiSaX_mSVR4!7oK`Tb%$ z8u;>VH2xD9b5p57Q6Sf95=|4)rIUbhy=$V&=SX;)h4R{@c)pRlb0nvwDw&1_f QZ2$lO07*qoM6N<$f`bfGPXGV_ literal 0 HcmV?d00001 diff --git a/dox/user_guides/wok/images/wok_image017.png b/dox/user_guides/wok/images/wok_image017.png new file mode 100644 index 0000000000000000000000000000000000000000..47e1ed5dfdafb181502b648aee90b08f3f69625a GIT binary patch literal 1514 zcmVPx#1ZP1_K>z@;j|==^1poj532;bRa{vGi!~g&e!~vBn4jTXf03vinSad^gZEa<4 zbO2LtW^{L9a%DOoO=)9tZ*y;EbRbV=W@%$(qufhc000G1NklHBO#9iN?l8`XJut6UhSLV)6vlp zw{PD@U0t05XfZfSiyj>q7zlb)Qc@Cfa&pu=iQq0=xPW)>-l4Fta2`-%Vj|wY{RgjK z|Bk7tKZIUkeEd%tzryI~C>$Id)I}N^8kBl1QY%%)O?-TO6c`?wl9HlSM-L-7f*l(h zlf%a`H#djb*;%}N`5XHCyK(8#F9H}ML5Q*cjW=%wFfuZNiHQkp*swvF3Z+PgFx%#+ z(%rjvgU`p0ALIG+=SWRWMP_EEa(#k3fBrmXW@d2z{(U6{UZ}UXNiH*uHERITB6PaH z@Zv=W^!j3TvB}9vOixe4&dyE&qnVfujse=&*B5ztd3f^V2_8Oth=_;?q^GAVbrW1d zLV}7<1g+UwP>@alw#$VI1$4fwtwnx*f%;CHWB8hyni2`WQ~-yDhRg@YxcBtwQ-p_y z&)b|{uSZu`7wYTl6}VNaR;fdilauE!aQX6OHD_aE16x~L^t@UU_ks`0^t2g)g^8H**i9Js{- zwl+u5=gys*2j}JGrBuo9bOHwG{{DU?^{rdCDtk5C<~{~E4In{M;si~wpA9%esaqU` zKbGYF|KR9(j6ph`4p9dVzWA(=7vM@@$mEW!=p!! zlsB6?l0|CeMs)daB^-E4t>v_SJ=`~Kf{U{=eh`2JU|9O_P>z|7e!6l6&Re#?LjvyR zb?e|QAVVZp(nC!FS_FQ$#(iR-V3o%FsxVs}GIvVayPDm0!eC7&BR=aoa-u-akvc%RrMU}^-Uh~_& z9SLD!2o})Gf%Dt3L-BJR*Sm=%PmArXfLoCqYqF)fFU=uVY|h-)a7A*GRo*KIf7Uj~ z48atXDnXUR6sD7YV7VadzjG&kmeiHDf4^FD=ExD`9zFWuf-sYKUtgc9|4$q|2>tQn zD3;U|lQ|(VP^NG{f^K}#W5%?qA9=On3pP*e?ORl#nbzayfgQsKNQui=>A`R|1MM@60Sl2^IU zQtSBbplD|SxPgHI)hKhbXsIMjiD0-WHa1q#VmwRDX=}Ki`z*z$ok6~T0V9bQY1LUG QSO5S307*qoM6N<$f>8j)e*gdg literal 0 HcmV?d00001 diff --git a/dox/user_guides/wok/images/wok_image018.png b/dox/user_guides/wok/images/wok_image018.png new file mode 100644 index 0000000000000000000000000000000000000000..57a221ddb43812a30226b97ebe0049a2d6a3af09 GIT binary patch literal 1573 zcmV+=2HN?FP)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!~g&e!~vBn4jTXf03vinSad^gZEa<4 zbO2LtW^{L9a%DOoO=)9tZ*y;EbRbV=W@%$(qufhc000GyNkl zE0ouO0aE6G8J#g09}uHF;--K2m&W)=zPrCu@AdZHdrDnuZ1TzJIrrRqKKX4Ek)@vL!5OY-}uhPHbFU&@}E#|8=ol@}ZATDOXTX0K46eaHO|x-NO070Zc!f zh4(_AX4*Bx* z?TW#oyee|x5~JskoMYEfw5A{7a^7?l?U_HR0Aa;Hz9 zh87e#rCgg3MSF_SuV3NPAHtA%pGqz#Cnr3StFEp_^_erMIa?dRg+F{MIo6jnSh8fv z+v#&-V`CWijo{B=UjT!>{hD%KuNPX#2ZYgR3{T|f^$nTKX#P51h4@n1Qk%`j%EWT< zJEdCBr~2~I8Xq68Ek_jztJTA(ukU7yGTmHWUXJ$mc1%uA;=zLl3{jkR5|pQF9*-xW zT>j(e*-oz$4!0k>%Zcpl>;SpQ$VhFuix)2n5xI(M*UmBS+$lgtMh3gNtE-DetF*Kf z#l^)8xg6!`+VkhnxpMUU^JQN2Tm6i7cvUMzOiYZn98C?EFIQo1PS1G!c$IYXvuDo& zgya#S$jL>uzKa`zUpJSa!RV)L-|JB<_PMC2D8Ag>Tq^F~&0$PWnTRuA-s>1VvzAU;vjcUBdkQJS!t8s#HeTsP8Gu>6**s zV*9*>`IK?C6yc%RLQkh!f5e zp~wXt5K1|VB_20#9t+^%!(`T1Mn^|swmMMQQx_D=*eO;&6gloxLN_bro;)#Qb~ZhL zM~^m3jeS*Li0v%}K}qZUA!Ir3B&;Q;l%1K$!S(CuQe!6fVWhVn;bL?bLEm&RWI68g zr6mXK7iO{7Jbk(!GcyxXV@k2T<28`8d(eVyuEvn%xC_6Q+{TR`W7#sD#Nx#|EL!vd zS1uw-SbjKL@=*F5cgv(DM-5plXW*)Bg00d4dzAytHRsT6cjKDxFV*X$`gN5xuz4C_ zb@*v)vBKeXVf5Q~1v&oaAc`BvOhP?jD0QR^`H07v%eNqFuehj2JuW~^-?x9*K zH#;jF(_T#h+Z~6I;yk26-sh8FYW<{2W77$VO-?3B zjit5}EjTJu8xKhJY28$=21>EIJwJzjs3tk!bAf!kc#)6$_y3U^EBdzrxqqMKl08z1 zt!}qef7d5v&y_1BkgHZ>2`O-)U>apQ*ONaL0BM&+B|RkeHZ= zojXm~wJS}iOz7EWlgiVCe0r)O2x%}H3{w46;d^RY5Yi1W82$CBZEDLP+@twN4qY^v zOvuX0Qo$?Ns!L^WTAu_nGc%E#>|e80e}T~`S-pDoJ7vw9HEg$|k|X1F>(;$<=m_~A X@S}hw@oKV800000NkvXXu0mjf*Ny(w literal 0 HcmV?d00001 diff --git a/dox/user_guides/wok/images/wok_image019.png b/dox/user_guides/wok/images/wok_image019.png new file mode 100644 index 0000000000000000000000000000000000000000..fa39eff4b0265c149a90e10a85bf3ff13d9bfdf1 GIT binary patch literal 1541 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

7$`h? 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%0AZ#4{O~DO=gb0VJRK#_XHbF3gpz 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/lib with all the libraries produced in the workbench + * /bin with all the binaries produced in the workbench + * /MyUD with all the station dependent files which are private to the development unit such as objects + * /MyUD/.adm with all the station dependent administration files + * /MyUD/.tmp with all the temporary files constructed in the development unit. + + +![](/user_guides/wok/images/wok_image011.png "Structure of the workbench *Mywb* ") + +@subsection occt_wok_2_23 Workshops +A **workshop**is an independent workspace inside which the complete cycle of software production is carried out. Workbenches inside a workshop are organized so that development units can be shared either by being published in a father workbench or by being placed in reference in the root workbench. + +![](/user_guides/wok/images/wok_image012.png "Visibility between Workbenches in a Workshop") + +In this image: + * **A** is the development unit A from Grandchild 11 placed in reference in root. It is visible throughout the workshop. + * **B** is the development unit B from Grandchild 12 published in ancestor Child 1. It is visible to Child 1, Grandchild 11 and Grandchild 12. + + +In a large-scale development that involves one or more teams of developers, you should decide how you are going to structure a workshop right at the beginning. If need be, you can review your decision later. +An existing workshop can be duplicated and the original workshop can be used as the basis for maintaining the present version of a product. The new workshop can then be used to develop and maintain a new version of the product. +When creating a new workshop, you specify - in the form of parcels – which resources are to be available within the workshop. + +@subsection occt_wok_2_2_4 Factories +A factory contains a number of workshops and a warehouse. When Open CASCADE Technology is installed, the system administrator creates a single factory. This contains a single workshop as well as the warehouse containing OCCT resources in the form of parcels. +There is no theoretical limit to the number of workshops that can be added to a factory. However, a single factory should be enough. + +@section occt_wok_3 Development Process +@subsection occt_wok_3_1 WOK Environment +The WOK interface is based on tcl, a command language provided by the Regents of the University of California and Sun Microsystems, Inc. The WOK development environment is in fact a tcl session. Before you run a tcl session you must make sure that your account is configured for using tcl, see the *Configuring Your Account for Tcl and WOK* section. + +To start a tcl session use the command: +~~~~~ +% tclsh +~~~~~ +Within this session, all WOK commands are available as well as standard tcl commands. You can also use tcl language extensions, if these are installed. +To exit from a tcl session use the command: +~~~~~ +> exit +~~~~~ +Online help is provided with tcl. To access this, use the following command: +~~~~~ +% tclhelp +~~~~~ +Online help is also available for all WOK commands. To display help on a particular WOK command, give the command name followed by the -h flag, as in the following example: +~~~~~ +> wokcd -h +~~~~~ + +@subsection occt_wok_3_2 Steps +Implementation of an application is based on the following steps: +1. Enter the software factory using the command wokcd MyFactory +2. Enter a workshop using the command wokcd MyWorkshop +3. Open a workbench using the command wokcd MyWorkbench +4. Search for the data types required among the existing OCCT libraries +5. Define one or more packages which will contain the classes +6. Define new data types as classes +7. Implement the methods of those classes in C++ +8. Implement any package methods in C++ +9. Unite the test packages +10. Define any nocdlpacks (if any) +11. Test the components + +**Note:** Steps 1-3 can be performed with a single WOK command: +~~~~~ +> wokcd MyFactory:MyWorkshop:MyWorkbench +~~~~~ + +@subsection occt_wok_3_3 Getting Started +@subsubsection occt_wok_3_3_1 Entity Names +Before you start, the following restrictions on WOK entity names must be noted: + * Entity names may only contain alphanumeric characters and dashes. + * Entity names must be unique within a hierarchy. For example, you must not have two workbenches called MyBench in the same Workshop. Likewise, you may not have a workshop called CSF in a factory of the same name. + * Do not use upper and lower case characters to distinguish between two entity names, for example ENT1 and eNt1. This restriction is for reasons of portability. + * Parcel names must be unique. + +@subsubsection occt_wok_3_3_2 Entering the Factory +When you start work you go to the factory using the following command: +~~~~~ +> wokcd +~~~~~ +@subsubsection occt_wok_3_3_3 Creating a New Workshop +If you don’t want to work in a workshop already present in the factory, you can create a new one. To do this, use the following command: +~~~~~ +> screate –d +~~~~~ +This creates the new workshop **MyWorkshop** in the current factory. To create the same workshop in a different factory use the syntax below: +~~~~~ +> screate –d +~~~~~ + +When you create a new workshop, it is empty. + +@subsubsection occt_wok_3_3_4 Selecting Parcels +When you create a workshop, you select existing OCCT resources, for example, parcels, to use in it. To do this, you create the workshop and add the parcels using the following syntax: +~~~~~ +> screate –d -DparcelConfig=Parcel1,Parcel2… +~~~~~ +To display available OCCT resources, in other words, to see what parcels are available, you use the following command: +~~~~~ +Winfo –p +~~~~~ +**Note:** parcel configuration rarely needs to change. If it does, only the workshop administrator should make them. +@subsubsection occt_wok_3_3_5 Opening a Workshop +To open a workshop, you use the following command: +~~~~~ +> wokcd +~~~~~ +@subsubsection occt_wok_3_3_6 Creating a New Workbench +When you create a new workshop, it is empty. In other words, it does not contain any workbenches. +To create the root workbench of a new workshop, you use the following command: +~~~~~ +> wcreate -d +~~~~~ +This creates a tree of workbench subdirectories. +If workbenches already exist in your workshop, but you do not want to work in any of these, create a new workbench as a child of an existing one. You do this using the following syntax: +~~~~~ +> wcreate –d -f +~~~~~ +@subsubsection occt_wok_3_3_7 Opening a Workbench +To open a workbench, you use the command below: +~~~~~ +> wokcd +~~~~~ +This automatically takes you to the root directory of the workbench + +@subsubsection occt_wok_3_3_8 Using Existing Resources +Before creating new data types, you should look for existing components that you can reuse. In particular, you should look through the existing resources of your Open CASCADE Technology platform to see if any of the required components already exist, or if any existing generic components can be suitably implemented. This search can be conducted using the online documentation. You should note the packages and classes, which you can reuse. +@subsection occt_wok_3_4 Creating Software Components +@subsubsection occt_wok_3_4_1 Creating a Package +To develop new software components, you usually need to create one or more packages. You do this, by using the following command: +~~~~~ +> ucreate –p +~~~~~ +Because the key -p defines the default value for the *ucreate* command, you do not need to specify it. The following syntax, for example, will also create a package: +~~~~~ + > ucreate +~~~~~ +Enter a Package or other Development Unit Structure +---------------------------------------------------- +Enter the package or any other development unit structure using the *wokcd* command as in the syntax below: +~~~~~ +> wokcd MyPackage +~~~~~ +The current directory is now: +~~~~~ +MyWorkbenchRoot/src/MyPackage +~~~~~ + +Writing the Package and Class Specifications in CDL +--------------------------------------------------- +Write the descriptions of the software components in CDL using an editor of your choice. Write each class in its own .cdl file and write one .cdl file (MyPackage.cdl) to specify the package that contains those classes. +CDL Compilation of the Package +------------------------------ +Compile and check the package and its classes using: +~~~~~ + > umake –e xcpp +~~~~~ +This command also extracts the C++ header files (.hxx) and stores them in the derived files directory. + +Implementing Methods in C++ +--------------------------- +A package will contain methods, which may be: + * Instance methods + * Class methods + * Package methods. +Extract **prototypes** for the C++ methods using the following command: +~~~~~ + > umake -o xcpp.fill -o xcpp.template +~~~~~ + +You should not confuse this syntax with the template feature of C++ used to implement the genericity. +The *umake -o xcpp.template* command creates a skeleton C++ file for: + * Each class + * All the package methods. +The packages methods will be created in a file called package.cxx.template. This command is *not *included in the umbrella command MyPackage. +You will need to use an editor to implement these methods in C++. +Compiling the Package +--------------------- +To compile the package, use the command: +~~~~~ + > umake -o obj +~~~~~ +If you do not specify a package, the current development unit is compiled. + +Sample Construction of a Package +--------------------------------- + +In the following example a workbench named **MyWb** is created as a child of an existing workbench **Topo**. MyWb is used for working on the package **MyPack**. Commands preceded by an asterisk below are used only once per session: +1. Create the MyWb workbench as a child of Topo. +~~~~~ + > wcreate MyWb -f Topo -d +~~~~~ +2. Create MyPack in MyWb. +~~~~~ + > ucreate MyPack     +~~~~~ +3. Move to the source directory of MyPack. +~~~~~ + > wokcd MyPack +~~~~~ +4. Edit the source files (MyPack.cdl etc.). You do this outside tcl, using the editor of your choice. +5. Start the extraction of MyPack. +~~~~~ +  > umake -e xcpp +~~~~~ +6. Generate the .cxx templates for MyPack: MyPack.cxx.template +~~~~~ +   > umake -o xcpp.fill -o xcpp.template -t +~~~~~ +7. Edit the source files (MyPack.cxx etc). You do this outside tcl, using the editor of your choice. + +**Note*** *umake* command used without arguments will carry out all the above *umake* steps. You can also use it with specific arguments as above to go through the development process step by step. + +Package Files +------------- +* Primary Files for a Package ++ .cdl Primary package file. ++ _.cdl Primary class file. +* C++ Files for a Package ++ .cxx Primary package source file. ++ _[1..9[0..9]*].cxx Secondary package source files. ++ .lxx Inline package methods source file. ++ .pxx Private instructions source file. +* C++ Files for a Class ++ _.cxx Primary class source file. ++ __[1..9[0..9]*].cxx +* Secondary class source files. ++ _.gxx Generic class methods source file. This is an alternative to the .cxx file(s), you do not have both. ++ _.lxx Inline methods source file. ++ _.pxx Private instructions source file. +* Derived C++ Files for a Package ++ .hxx User header file. ++ .ixx User header file included in .cxx. ++ .jxx User header file included in _[1-9].cxx. +* Derived C++ files for a class ++ _.hxx User header file. ++ _.ixx User header file included in _.cxx. ++ _.jxx User header file in __[1..9[0..9]*].cxx. ++ Handle__.hxx Persistent or Transient class header file. ++ __0.cxx For instantiated classes. + +Umake Steps for a Package +------------------------- +The umake steps for development units of package type are explained below. +* src             Processes the file MyPackage.cdl to generate a list of all the CDL files in the development unit. Processes FILES to list source files. +* xcpp.fill     Compiles the internal data structure to prepare for subsequent extractions. +* xcpp.src    Lists the source files (.cxx, .gxx, .lxx) deduced from the CDL files. +* xcpp.header                                   Extracts header files for the classes in the development unit. +* xcpp.template (Hidden step.)          Extracts a template for implementation of methods. +* obj.inc       Based on the list of source files generated by the src and xcpp.src steps, this step publishes the include files for the development unit so that other units can use them. +* obj.cgen                            Processes the source files to generate code. +* obj.comp                           Compiles each file that can be compiled. +* obj.idep                             Generates dependency information for the unit. This comprises: + + Includes performed by unit compilation (Unit.MakeState) + + Implementation dependencies in terms of the unit suppliers (Unit.ImplDep) +* obj.lib                                            Generates the shared library for the development unit. +@subsubsection occt_wok_3_4_2 Creating a Nocdlpack +If your executable requires the use of a nocdlpack, create a development unit of nocdlpack type and move to its structure using the commands below: +~~~~~ + > ucreate -n + > wokcd +~~~~~ +Use an editor to write FILES. This file must list all the C, C++, Fortran, lex, and yacc sources. +Build the nocdlpack using the following command: +~~~~~ + > umake [] +~~~~~ +**Note** that a nocdlpack unit is not intended to perform tests. Use an executable unit instead. + + +*FILES: * Is a nomenclature file for a nocdlpack. It is a list of Fortran, C, C++, lex, and yacc files (one per line). + +Sample Construction of a Nocdlpack +----------------------------------- +In the following example a nocdlpack, MyNocdlpack, is created. Commands preceded by an asterisk below are used only once per session: +1. \*Create MyNocdlpack in MyWb. +~~~~~ +> ucreate -n +~~~~~ +2. Move to the source directory of MyNocdlpack. +~~~~~ +> wokcd +~~~~~ +3. Write the FILES list. You do this outside tcl, using the editor of your choice. +4. Write the source code. +5. Build MyNocdlpack. +~~~~~ +> umake [] +~~~~~ + +Umake Steps for a Nocdlpack +--------------------------- +The *umake* steps for development units of nocdlpack type are explained below. +* src                         Processes FILES to list source files. +* obj.cgen    Processes the source files to generate code. +* obj.inc Based on the list of source files, this step publishes the header files for the unit so that other units can use them. +* obj.comp   Compiles each file that can be compiled. +* obj.idep     Generates dependency information for the unit. This comprises: + + Includes performed by unit compilation. (Unit.MakeState) + + Implementation dependencies in terms of the unit suppliers. (Unit.ImplDep) +* obj.lib                    Generates the shared library for the unit. +@subsubsection occt_wok_3_3_3 Creating a Schema +If the application, which you intend to build, stores data in a file, you need to define a schema for the persistent data types that are known. +You create a schema and go to its root directory using the commands: +~~~~~ +> ucreate -n +> wokcd +~~~~~ +Using the editor of your choice, write a .cdl file to define the schema. This schema file lists all the packages that contain persistent data types used in the implementation of your application. It has the following format: +~~~~~ + schema MySchema + is +class from ; + end; +~~~~~ + +Building a Schema +~~~~~~~~~~~~~~~~~ +Compile and check the coherence of the CDL specification for the schema: +~~~~~ +> umake -e xcpp.fill +~~~~~ +Extract the C++ description: +~~~~~ +> umake -o xcpp +~~~~~ +Compile the C++ description of the schema: +~~~~~ +> umake -o obj +~~~~~ +Alternatively, the above three steps can all be carried out by one command: +~~~~~ +> umake +~~~~~ +Sample Construction of a Schema +------------------------------- +In the following example the schema *MySchema* is created. It contains all the schemas of the persistent classes of your own packages and the packages they depend on. Commands preceded by an asterisk below are used only once per session: +1. Create MySchema in MyWb. +~~~~~ + > ucreate -s MySchema +~~~~~ +2. Move to the source directory of MySchema. +~~~~~ +> wokcd MySchema +~~~~~ +3. Edit the source file MySchema.cdl. You do this outside tcl, using the editor of your choice. +4. Derive implementation files. +~~~~~ + > umake -e xcpp.sch +~~~~~ +5. Derive application schema files. +~~~~~ + > umake -o xcpp.ossg +~~~~~ +6. Compile the schema. +~~~~~ + > umake -o obj +~~~~~ +Schema Files +------------ +* Primary Files for a Schema ++ .cdl Primary schema file. +* Derived C++ Files for a Schema ++ .hxx User header files. ++ .cxx Schema implementation files. ++ .cxx Schema implementation files. + +Umake Steps for a Schema +------------------------ +The umake steps for development units of schema type are explained below. +* src        Processes MySchema.cdl to generate a list of CDL files for the development unit. Processes the FILES file to list source files. +* xcpp.fill  Compiles the internal data structure to prepare for subsequent extractions. +* xcpp.sch   Extracts the schema implementation code. +* obj.comp   Compiles the extracted files that can be compiled. +* obj.lib    Generates the shared library for the unit. +* obj.idep   Generates dependency information for the schema. + +@subsection occt_wok_3_5 Building an Executable +@subsubsection occt_wok_3_5_1 Creating an Executable +To make an executable from one or more of the packages, which you have created, write a .cdl file to specify the packages to use. +Writing an Executable +--------------------- +Refer to the *CDL User’s Guide *for full details. A simple example is given below. + executable // the executable unit +is + executable myexec // the binary file +uses +Tcl_Lib as external +is + myexec; // the C++ file +end; // several binaries can be specified in one .cdl file. +executable myex2 +is + myex2; +end; + end; +Write the C++ file(s). For the example above you write the files: myexec.cxx and myex2.cxx. +Building the Executable +----------------------- +To build the executable, use the command: + > umake + +Construction of an Executable +----------------------------- +In the following example an executable, MyExec, is created in the workbench MyWb. Commands preceded by an asterisk below are used only once per session: +1. \*Create MyExec in MyWb. + > ucreate -x MyExec +2. Move to the source directory of MyExec. + > wokcd MyExec +3. Edit the cdl source file (MyExec.cdl). You do this outside tcl, using the editor of your choice. +4. Edit the C++ files (AnExe.cxx etc.). You do this outside tcl, using the editor of your choice. +5. Build MyExec. + > umake +6. Run the executable file. + > wokcd -PLib + > MyExec + +Executable Files +---------------- +* Primary Files for an Executable ++ .cdl Primary executable file +* C++ Files for an Executable ++ .cxx Source file ++ _[1-9].cxx Other source files +Umake Steps for an Executable +----------------------------- +The umake steps for development units of executable type are explained below. +* src Processes MyExe.cdl to generate a list of CDL files for the development unit. Processes FILES to list source files. +* src.list Based on MyExe.cdl, works out the list of parts and the source files involved for each part. +* exec.comp Compiles the files that can be compiled for each part of the executable. +* exec.idep Generates dependency information for each part of the executable. +* exec.libs Computes full implementation dependency to prepare for linking for each part of the executable. +* exec.tks Performs toolkit substitution according to TOOLKITS for each part of the executable. +* exec.link Links each part of the executable. +@subsection occt_wok_3_6 Test Environments +@subsubsection occt_wok_3_3_1 Testing an Executable +To test an executable, you create an executable development unit and move to its structure. See the *Building an Executable* section for details. +When you write the .cdl file for your test executable, specify the packages to test, for example: +~~~~~ +executable MyTest // the executable unit + is +executable mytest1 // the binary file +is + mytest1; //the C++ file +end; // several binaries can be specified in one .cdl file. +executable mytest2 +is + mytest2; +end; + end; +~~~~~ +Write the C++ test file(s), in the example, *mytest1.cxx* and *mytest2.cxx*. +Building the Executable +----------------------- +To build the executable use the command: +~~~~~ +> umake +~~~~~ + +Sample Construction of a Test Executable +---------------------------------------- +The overall process of constructing a test executable is the same as for any other executable. For a sample, refer to the *Construction of an Executable* section. + +Setting up a Test Environment +----------------------------- +To set up a test environment, move to the * /drv* subdirectory that corresponds to the current profile (e.g. the directory: * /MyExec/drv/DFLT/sun* directory) and run the executable test file. +~~~~~ +> wokcd -PLib +> wokenv -s +> myApp +~~~~~ +The command *wokenv* is used with -s option to configure the test environment. +The command *wokenv –s* uses the current workbench to decide what actions are needed to configure the tcl shell for use as your test environment. +WOK sets the following environment variables: + +* *$STATION* - The current station. +* *$TARGET_DBMS* - The current database platform. +* *$PATH* - The current path, plus the bin directories of the parcels. +* *$LD_LIBRARY_PATH* The current path, plus the lib directories of the parcels. +WOK then sets a variable for each parcel listed in the parcel configuration of the current workshop. This variable is the original name of the delivery unit in the uppercase, with the suffix *HOME*. *$ORIGDELIVUNITHOME* is set as the root directory of the parcel. +WOK then sources the following files: + * MyFactory.tcl, found in the admin directory of the factory. + * MyWorkshop.tcl found in the admin directory of the workshop. +Then for each Workbench, WOK sources according to the hierarchy of the workbenches: + * Workbench.tcl, found in the /Adm directory of the workbench. +After the environment is set up, you are at a C shell prompt and can run the executable. +**Note** Environment variables are only set when the command is used with the option *-s*. Thus, if you change a workbench or a factory within WOK and then return to the test environment you must use *wokenv -s* *to ensure that the set environment variables configuration is correct for the current WOK state. +The configuration actions that WOK performs can be written to a file and saved as a script. You can then edit this script to suit it to your own needs, and generate a personalized test environment. To create the script file use the following command: +~~~~~ + > wokenv -f -t csh +~~~~~ +This commands generates a file, ScriptFile, which configures a C shell to mirror the current WOK environment. An example script file is given below. +~~~~~ +setenv STATION *sil* +setenv TARGET_DBMS *DFLT* +setenv KERNELHOME */adv_22/WOK/BAG/KERNEL-K1-2-WOK* +setenv LD_LIBRARY_PATH */adv_22/WOK/BAG/wok-K1-2/lib/sil:/adv_22/WOK/BAG/KERNEL-K1-2-WOK/sil/lib/* +setenv PATH */usr/tcltk/bin:/usr/bin:/bin:/usr/bin/X11:/lib:.:/SGI_SYSTEM/util_MDTV/factory_proc:/adv_22/WOK/BAG/KERNEL-K1-2-WOK/sil/bin/* +source /adv_22/WOK/BAG/KERNEL-K1-2-WOK/adm/Kernel.csh +~~~~~ + +@subsection occt_wok_3_7 Building a Toolkit +@subsubsection occt_wok_3_7_1 Creating a Toolkit + +You create and enter a toolkit development unit using the following commands: +~~~~~ + > ucreate -t + > wokcd +~~~~~ +Write the Nomenclature File for the Toolkit +------------------------------------------- +Using an editor, write a nomenclature file called PACKAGES which lists all the packages, one per line, that make up the toolkit. Add PACKAGES to FILES. +Build the shareable library for this toolkit as follows: +~~~~~ +> umake [] +~~~~~ +**Note:** when one of the packages in the toolkit is modified, recompile the toolkit. A package should belong to one toolkit only. + +Sample Construction of a Toolkit +-------------------------------- +In the following example, the toolkit **TKMyToolkit** is created. Commands preceded by an asterisk below are used only once per session: +1. \*Create MyToolkit in MyWb. +~~~~~ + > ucreate -t TKMyToolkit +~~~~~ +2. Move to the source directory of MyToolkit. +~~~~~ + > wokcd TKMyToolkit +~~~~~ +3. Edit the nomenclature files, PACKAGES and FILES. You do this outside tcl, using the editor of your choice. +4. \*Create the library for MyToolkit +~~~~~ + > umake TKMyToolkit +~~~~~ +Umake Steps for a Toolkit +------------------------- +The umake steps for development units of toolkit type are explained below. +* src Processes FILES to list source files. +* lib.list Works out the objects and archive library to add to the toolkit shared library. +* lib.limit Manages the build process strategy within the limitations of a particular platform. +* lib.arch Builds archives according to the building strategy. +* lib.uncomp Decompresses third party archives. +* lib.arx Extracts object files from archives. +* lib.build Generates the shared library for the toolkit. +Building strategy depends on the platform. The following step sequences apply: + * On Sun (Solaris): +~~~~~ +src +lib.list +lib.arx +lib.build +~~~~~ + * On sil (IRIX): +~~~~~ +src +lib.list +lib.uncomp +lib.build +~~~~~ + +The TOOLKITS File +----------------- +When executables are compiled, a TOOLKITS file is used to determine which toolkits are included. This file is located in the src directory of the entity being compiled. The process is as follows: +No TOOLKITS file found: +All toolkits are candidates for substitution. To find out which toolkits are candidates, use the command *w_info -k*. +Empty TOOLKITS file found: +No toolkit is a candidate for substitution. +Non-empty TOOLKITS file found: +Only those toolkits listed in the TOOLKITS file are candidates for substitution. + +Toolkit Substitution +-------------------- +Toolkit substitution is performed as follows: +MyEngine uses: + A, B and C +The toolkit TK provides: + A and D + D uses: E +Compilation of *MyEngine* includes: +TK, B C and E +Here, for simplicity, assume that additional toolkits are not substituted for B, C and E. +@subsection occt_wok_3_8 Building a Delivery Unit +@subsubsection occt_wok_3_8_1 Creating a Delivery Unit +> ucreate -d +Writing the COMPONENTS File +--------------------------- +Create a file named COMPONENTS in the src subdirectory of the delivery development unit. List in this file the prerequisites of the delivery and the components that are part of the delivery. Use the syntax shown below. +Note that keywords and default options are shown in bold. + +~~~~~ +**Name** ParcelName +Put path +Put include +Put lib +**Requires** DeliveryName\* +**Package** MyPack **[CDL][LIBRARY][INCLUDES][SOURCES]** +**Nocdlpack** MyNcdl **[LIBRARY][INCLUDES][SOURCES]** +**Executable** MyExec **[CDL][DYNAMIC][SOURCES]** +**Interface** MyIntf **[CDL][STUB_SERVER][SOURCES]** +**Client** MyClient **[CDL]**[STUB_CLIENT][SOURCES] +**Engine** MyEng **[CDL][DYNAMIC][SOURCES]** +**Schema** MyShma **[CDL][LIBRARY][SOURCES][DOC]** +**Toolkit** MyTk **[LIBRARY][SOURCES]** +**Get** DevelopmentUnitName::Type:::File +~~~~~ +\* Without mention of the version +If no keywords are specified then all default arguments shown in bold are taken into account. To select arguments, list the ones required explicitly. The arguments are explained below: +**Name** The full name of the current delivery, including a version number. This is the name of the parcel. +**Put path** Requires that the delivery be inserted in the user path (bin directory). +**[CDL]** Copy the cdl files to the delivery. +**[LIBRARY]** Generate the static library. Copy the shareable library to the delivery. Copy the list of objects of the library. +**[INCLUDES]** Generate includes.origin. Copy the includes to the delivery. Copy the ddl to the delivery. +**[DYNAMIC]** Select to copy the static or dynamic executable file. +**[SOURCES]** Copy the source files. + +Build the Delivery +----------------- +To build the delivery unit, use the command: +~~~~~ +> umake +~~~~~ +The result of building a delivery unit is a **parcel**, which can be installed in a warehouse and used by other workbenches. + +Sample Delivery of a Parcel +--------------------------- +In the following example a delivery is created, compiled and made into a parcel. Commands preceded by an asterisk below are used only once per session: +1. Move to the root workbench under which the parcel is to be made. +~~~~~ +> wokcd MyRootWb +~~~~~ +2. \*Create MyDelivery in MyRootwb. +~~~~~ +> ucreate -d MyDelivery +~~~~~ +3. Move to the source directory of MyDelivery. +~~~~~ +> wokcd MyDelivery +~~~~~ +4. Use an editor to list all the prerequisites and components of the delivery in the COMPONENTS files using the appropriate syntax. +5. Build MyDelivery. +~~~~~ +> umake MyDelivery +~~~~~ +The output of the umake process is a parcel + +Umake Steps for a Delivery Unit +------------------------------- +The umake steps for development units of type delivery are explained below. +* src                         Processes FILES to list source files. +* base     Creates directories, defines the list of units, copies the parcels and the release notes. +* get.list                   Lists files to get (using Get, Resource). +* get.copy    Copy the files listed by get.list. +* cdl.list                   Lists CDL files to copy. +* cdl.copy    Copies the files listed by cdl.list. +* source.list Lists units from which sources are to be copied. +* source.build           Creates a file for sources (in the format: unit.type.Z). +* inc.list                    Lists includes to copy. +* inc.copy    Copies files listed by inc.list. +* lib.shared   Works out the inputs for building or copying shareable libraries. +* lib.shared.build Copies or builds (depending on the platform) the shareable libraries. +* lib.server.list          Lists interface files to copy. +* exec.list     Lists inputs for executable delivery. +* exec.build Creates executable in the parcel. +* files                       Works out the list of files delivered in the parcel. +@subsubsection occt_wok_3_8_2 Installing a Parcel +You open the root workbench of the workshop where you want to install the parcel using the following command: +~~~~~ +> wokcd +~~~~~ +To install the parcel, use the following syntax: +~~~~~ +> pinstall +~~~~~ +@subsection occt_wok_3_9 Working with Resource +Building a Resource +------------------- +There is a single umake step for development units of resource type. +* src                         Processes FILES to list source files. + +@subsection occt_wok_3_10 Java wrapping +@subsubsection occt_wok_3_10_1 Creating an interface + +To create an interface development unit and move to its structure, use commands: +~~~~~ +> ucreate -i +> wokcd +~~~~~ + +Writing an Interface +-------------------- +Having created the interface, you select the classes and packages that you wish to make available for Java wrapping in the jni units. Use an editor of your choice to write a .cdl interface file that specifies these exported services. This file has the format: + +~~~~~ +interface MyInterface +uses +  ListOfPackages; +is +  ListOfPackages; +  ListOfClasses; +  ListOfMethods; +end; +~~~~~ + +Building an Interface +--------------------- +To make the services of the interface available for further wrapping, build the interface, using the command: +~~~~~ +> umake [] -o src +~~~~~ + +Sample Construction of an Interface +---------------------------------- +In the following example a workbench, MyWb, is used for working on the interface MyInterface. Commands preceded by * (asterisk) are used only once during a session. + +1. \*Create MyInterface in MyWb. +~~~~~ +>ucreate -i MyInterface +~~~~~ +2. Move to the source directory of MyInterface. +~~~~~ +>wokcd MyInterface +~~~~~ +3. Edit the source file MyInterface.cdl. You do this outside tcl, using an editor of your choice. +4. Build the interface. +~~~~~ +> umake -o src +~~~~~ + +Interface Files +--------------- +Primary files for an interface + +.cdl - primary interface file + +Umake Steps for an Interface +---------------------------- +The umake steps for development units of type interface are explained below. + +* src - processes MyInt.cdl to list the CDL files for the development unit. Processes the FILES file to list source files. + +**Note** Make sure you only use the *src* step of umake. Using umake without arguments will lead to an attempt of launching other steps relevant to the interface unit. However these steps will fail and anyway are not required for use in Java wrapping. + +@subsubsection occt_wok_3_10_2 Creating a jni +To create a development unit of type jni and move to its structure, use commands: +~~~~~ +> ucreate -j +> wokcd +~~~~~ + +Writing a Jni +------------- +Use an editor to write a .cdl file that specifies the interface or interfaces required by the jni. This file has the following format: +~~~~~ +client MyJni +is +{interface MyInterface;} +{interface YourInterface;} +end; +~~~~~ + +Building a Jni +-------------- +To wrap services exported by the interfaces to Java, build the jni, using the command: +~~~~~ + > umake [MyJni] +~~~~~ + +Sample Construction of a Jni +---------------------------- +In the following example a workbench, MyWb, is used for working on the jni, MyJni. Commands preceded by * (asterisk) are used only once during a session. + +1. \*Create MyJni in MyWb. +~~~~~ +> ucreate -j MyJni +~~~~~ +2. Move to the source directory of MyJni. +~~~~~ +> wokcd MyJni +~~~~~ +3. Edit the source file MyJni.cdl. You do this outside tcl, using an editor of your choice. + +4. Derive Java files (.java and .class files) and C++ files (.h and .cxx) used for wrapping. +~~~~~ + > umake -e xcpp +~~~~~ +5. Compile the sources. +~~~~~ +> umake -o obj +~~~~~ +6. Link the object files. +~~~~~ +> umake -o exec +~~~~~ +Jni Files +--------- +Primary jni file is *Jni.cdl* + +Derived Java files for a Jni +---------------------------- +*_.java* - Java source file of the class to be wrapped. +*_.class* - Compiled java source file. + +Derived C++ files for a Jni +--------------------------- +*___java.h* - Include file for the C++ implementation of JNI. +*___java.cxx* - C++ implementation of JNI. + +Umake Steps for a Jni +--------------------- +The umake steps for development units of type jni are explained below. + +* src        Processes MyJni.cdl to list the CDL files for the development unit. Processes the FILES file to list source files. +* xcpp.fill     Compiles the internal data structure to prepare for subsequent extractions. +* xcpp.client        Extracts the services declared in included interface unit(s) into Java and creates .java and *_java.cxx files. +* xcpp.javac Compiles .java files into .class files. +* xcpp.javah Creates .h header files. +* obj.comp   Compiles generated C++ files. +* obj.idep     Generates dependency information for the unit. +* exec.libs    Computes full implementation dependency to prepare for linking. +* exec.tks     Performs toolkit substitution. +* exec.link    Generates the shared library for the development unit. + +@subsection occt_wok_3_11 More Advanced Use +@subsubsection occt_wok_3_11_1 Default User Profile +There is a default user profile. If you wish to change this profile the command wokprofile is available. +You display the current profile using the command *> wokprofile* +An example profile is given below. +~~~~~ + Info : Profile in : WOK:k1dev:ref + Info : Extractor : DFLT + Info : Compile Mode : Optimized + Info : Station Type : sil +~~~~~ +@subsubsection occt_wok_3_11_2 Changing Parcel Configuration +Parcel configuration rarely needs changes. However, if you do need to modify the list of resources, you can do so by editing the admin parameter file of the factory. This file is found in the admin directory of the factory and is named after the workshop. It has the suffix .edl. Its full name has the following format: +~~~~~ +.edl. +~~~~~ + +Move to the admin directory of the factory: +~~~~~ +> wokcd -PAdm +~~~~~ + +Then use the editor of your choice to edit the admin parameter file, MyWorkshop.edl. +In this file, the parcel configuration is defined by an entry of the form: +~~~~~ +\@set %_ParcelConfig = “Parcel1 Parcel2...Parceln”; +~~~~~ +The resources are listed within quotation marks. They are separated by spaces. +Edit this list as required. Save the file and close it. +To validate and take into account your changes use the command: +~~~~~ +> wokclose -a +~~~~~ +This command closes and reopens all the entities. Without the -a option, *wokclose* only applies to the current entity. +@section occt_wok_4_ Available Services +@subsection occt_wok_4_1 Synopsis +WOK provides sets of services, which can be grouped according to the entity they apply to: + * General Services + * Factories + * Warehouses + * Parcels + * Workshops + * Workbenches + * Development Units + * Source Management Services + * Session Services +@subsubsection occt_wok_4_1_1 Common Command Syntax +Command Names +------------- +All WOK commands follow a common naming convention. This is based on a set of common command names and a group of prefixes, which denote entity type. The command name takes a prefix representing the entity to which it applies. +The following prefixes exist: + * f: for factories + * s: for workshops + * w: for workbenches + * u: for development units + * W: for warehouses + * p: for parcels + * wok: for commands that apply to any type of entity +These prefixes are followed by a command that determines the action to be executed. Examples of such commands are: + * create: create an entity + * rm: delete an entity + * info: request information +Consequently, the command ucreate creates a development unit. The command wrm removes a workbench. +Command Options +--------------- +All command options are expressed using a dash (-) followed by one or more key letters and, if applicable, an argument. For example: +~~~~~ +> umake -f -o MyUnit +~~~~~ +The compact version of this syntax is also valid: +~~~~~ + umake -fo argument MyUnit +~~~~~ +This syntax conforms to the POSIX recommendations for UNIX commands. +For all commands, there is a –h option, which displays help on usage. + +Presentation of Commands +------------------------ +The general syntax of the commands is presented in this document as follows: +~~~~~ +CommandName [option(s) [] []] +~~~~~ +Consequently, there are four general cases for a command: +~~~~~ +CommandName +CommandName [] +CommandName [] +CommandName +~~~~~ +**Note** a few commands described in this chapter do not completely respect this syntax; for example, *create* and *rm*. +As a rule, where an ** is given as an argument it specifies which entity the command applies to. Where no ** is specified, the command applies to the nearest appropriate entity. The *create* and *rm* commands are notable exceptions: you **must** specify an entity path with these commands. + +@subsection occt_wok_4_2 General Services +General services are commands that apply to any entity manipulated by WOK. +This includes commands for: + * Navigation + * Managing parameters + * Managing profiles. +wokcd                   **Navigates** between different WOK entities. +wokclose   **Closes **and reopens entities. +wokenv      **Gets information **about the current WOK environment. +wokinfo     **Displays **information common to all entities. +woklocate **Locates **files within the development units. +wokparam **Queries **parameters. +wokprofile **Modifies **the parameters of the session. + +@subsubsection occt_wok_4_2_1 wokcd +~~~~~ +wokcd +wokcd +wokcd -P [] +~~~~~ + +Navigates between different WOK entities and changes the current working directory. Without any arguments wokcd lists the current position (the WOK equivalent of ‘pwd’). With an argument, wokcd moves to the specified location. +Options: + Moves to the home directory of the entity specified by , i.e. moves to the location given by the parameter: %wokcd _Home. +-P [] +Moves to the directory of the entity specified by . i.e. moves to the location given by the parameter: %_. If no entity path is specified, this command moves to the directory of the current entity. + +Possible values for are: Home, Adm and Src. +Use the following commands to change directories within a development unit: +**wsrc                      **To access the source files. +**winc                      **To access the include files. +**wobj                      **To access objects. +**wlib                       **To access shareable libraries. +**wbin                      **To access executables. +**wadm                    **To access the workbench administration files. + +Examples +-------- +*wokcd* - Lists the current position. +*wokcd MODEL:GTI:gti:gp* - Moves to the home directory of the gp package of the gti workbench in the GTI workshop in the MODEL factory. +*wokcd -P Adm* - Moves to the administration directory of the current entity. +@subsubsection occt_wok_4_2_2 wokclose +~~~~~ +wokclose [-a] +~~~~~ +Closes and reopens entities, i.e. reloads them into memory thus taking any changes into account. +Options: +**-a** Closes and reloads all entities. + +Examples +-------- +~~~~~ +wokclose +~~~~~ +Closes and reopens the current entity. +~~~~~ +wokclose -a +~~~~~ +Closes and reopens all the entities. +@subsubsection occt_wok_4_2_3 wokenv + +wokenv -f -t csh +Creates the file . This file is a script, which configures a C shell to mirror the current WOK environment. See the *Test Environments* section for more details. +Options: +**-f** - Specifies the name of the file to produce. +**-t csh** - Produces a file for configuring a C shell. +**-s** - Sets up environment variables for application launching. +Example +------- +~~~~~ +> wokenv -f MyTestEnvScript -t csh +~~~~~ +Generates the shell script MyTestEnvScript to configure a C shell so that it mirrors the current WOK environment. +@subsubsection occt_wok_4_2_4 wokinfo +~~~~~ +wokinfo -

|EPZ!sglAHhohl~yy{F`e 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 literal 0 HcmV?d00001 diff --git a/dox/user_guides/modeling_algos/images/modeling_algos_image048.jpg b/dox/user_guides/modeling_algos/images/modeling_algos_image048.jpg new file mode 100644 index 0000000000000000000000000000000000000000..146d252ac6e590d5b017a297fb527b6672858168 GIT binary patch literal 23192 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 AFaQ7m literal 0 HcmV?d00001 diff --git a/dox/user_guides/modeling_algos/images/modeling_algos_image050.jpg b/dox/user_guides/modeling_algos/images/modeling_algos_image050.jpg new file mode 100644 index 0000000000000000000000000000000000000000..7bf04ab3917e6c138b31e700959da0a0988a2a15 GIT binary patch literal 26584 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 AL;wH) literal 0 HcmV?d00001 diff --git a/dox/user_guides/modeling_algos/images/modeling_algos_image051.jpg b/dox/user_guides/modeling_algos/images/modeling_algos_image051.jpg new file mode 100644 index 0000000000000000000000000000000000000000..6cd2adbcc53c7c9cbb78a1456f02aa6b5d2d66b1 GIT binary patch literal 16033 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 literal 0 HcmV?d00001 diff --git a/dox/user_guides/modeling_algos/images/modeling_algos_image052.jpg b/dox/user_guides/modeling_algos/images/modeling_algos_image052.jpg new file mode 100644 index 0000000000000000000000000000000000000000..23c5b18272b4c59c81c6edb585f8fcc313853cfa GIT binary patch literal 19199 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 literal 0 HcmV?d00001 diff --git a/dox/user_guides/modeling_algos/images/modeling_algos_image053.jpg b/dox/user_guides/modeling_algos/images/modeling_algos_image053.jpg new file mode 100644 index 0000000000000000000000000000000000000000..1b1c9a8908bcaa18f1e0342e34c50f51661ac162 GIT binary patch literal 19501 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 literal 0 HcmV?d00001 diff --git a/dox/user_guides/modeling_algos/images/modeling_algos_image054.jpg b/dox/user_guides/modeling_algos/images/modeling_algos_image054.jpg new file mode 100644 index 0000000000000000000000000000000000000000..94b9cb4dffe982d2d7425269c7b943784b1c62b1 GIT binary patch literal 9890 zcmds6S5%Whw@nC;(4|BZ2@p&WrAd<-kf=0~D!um}dJ9D%2toveAYBkdq@(n%Aiasw zyP+$+NKrtp|6TW0@9SOn`{r$C)>&uHnSIXQb3SoS23)wOq^bk}0)YU_KR@7n8gK_d z3kE~L)U*%?gpQV$juCc&k%57c1A37ehT`HuU*WpKeU)GG#?|ZM*SW6s?1U=4H;1 zuW_i#MR@q117JSv+M;a^k37EDDf#iCANxoP#^;Z_g)|z(1vIudbP@BDSAK0_;d~39 zq}jV~7uWJVet~d!>Ah}R8uX~;1Dg>CpF4x;Y+bX_oQvb~Eq*0ky9Zg>k=7qJS;Y2j z#vT9HBP_G% zO!xC(Dx+ENDPmPZ#}LFiY-OHXGuWHATuJm2V*Y@1O7^cc4jD2tG97U7?4E*|s(_q|C>=y0=4Hf_a!4P8kC zzcGmcZ@ee8i6(ZacOL5HA*u-?QQ>b9<*&}HRj4`T+#4Ia*FyKWx9_TK_$gn&;#P`FvS)42VU!3t)hgPv@VhY)`ujA2vv<2C=Buxcy;La_sVC8eb<612j z22oY3A#!hcbIPUza?ADymC|P=G>_PM(phmFWTAf9an421IA9TIxB^$5Dg#Qjb~AhhaLu>=y87>HS@$eP zR5Vy@WYo%^@pG|gLR44!6JE4uJQyyGim`o`9)=_^Lbi=}`YXGd12&X%O4;E_27SEH zVqAm%$@R?KIDIgCs1Er;M1=x~mpz)y5>j;Cngln$uAQ3zE6$C9q6$#uZ-zu8br|es z+P`#rN!?6)1hnK){C-rf>+ad-b?(F02+VBZ#C=oY%0Ean@74qa@Ur=J!(+R=VC||zr7BYe9Hj{I?gAXgS>c>O*q*uj8F1)Jyor>0ahqO`C(!tASP}! z=bzYN@c7ha$F|0}VE1aKWweb)wmHV=r-Q&lKaOyUToj>YH5tB_K3v_fzgHr>m?gt( zu$eE?4eS9ECu&G+X`GJ1#~-34p=jn2&URk}bG#^oTys~~@}goq4$S|8LP=$bQCYJs zCeEpfIUf7XMP_B9YoDpq!3?{q1zm~adC1tG9bNbzjJKXIF|*E_CN9b_`?=vKPadHg0uMuJfZOWp&X@~?a) zzGwe~9YLM77WTvMyYkHzOw_}VaC>Dt?^C@VnhQh76#Q|q{a*af=B3w-%kL)&X{~Z7 zdm8Jfa4=`=mts9WSh_eU*|S8WY`EKPD5dCz1^2vvw-n^XzDioO&PyPYN?^8u%&nXY z8R`jla&*Kx?9`ZJpCKHeX(7NFwBjO{1bAI{{o9Rjd7OmCR3h`Ni{y%1fcb zQSUC(WDUA_*nNzA})HLyPjqk^ipf}qU zvjG9MN<8X0Y)Zxfl|a&DS7)_*c{lP%m7q#v2TMmvin3693Ew;HK^<4f`xX27-{-Khrp*G% zDLUT~iHPPn<2RooN2-1n(hdi#!4Tfv80HN{qpVBGOtoQ2{`}WHP>z(g7F z>8REC>vXn3)|4W@rz3izlAfbpN(%WRJm!Fd=53)>I)5rEi$=#VPiwb325zR(jf~5V zJK*_Od!TI&-+eG2d?;#m{8AZTmXmD6`#xgFoTcBeflQx0h$>o?M)3rvR|^VZj&~mJ z9mrSbI7mekvm$FsZbXzP`aHxnw?8!fvg%~p?Z#wHOJKspVd2!B<-P^8eXhSA3(}T0 zlor8yslqeEy!&pLvZ%_xsr-gQhJPNjo4G1EJ24hATb~Jhuzv%)Zj`k475tmKCc~d8 z@}?0-$rjwY+zuOMYj0CUwtZs1rrHWBM+a5^(;MvpdIMoq%3XB%y*za6h-gCs0V0Rx zC|>@`evH!Dd039onZ7^et@it=pVE@AG#?#+`V^GVbz7m6W+h=tVkSoSM8DUzmA*0l z=hHe@50#~u3yiu;oJ>-!->{{!E?qAv@L9^VMRX($Kns@w05lBEv%icxbV9fdFIqYF zNqHXK-h}ss%=pMg22${A-%pS%lNxmH%MwF8hPG@P)s8K_yvdd&@0@3$6wJ3fTJ~Xn z+Dzgc@L>ODad78%j}}#_pTvrDz$1vTrfDH>0q^I3Rv}`?u6rad*ld0}_R9CBw_*%z ztsrqBX?n4r2+Met?t$P|-+bj<3-jqYHTv;D-<_~hzxp_jytYhoAua8-F3Km}oqVVw zQ&V%fj+u=9$8NF;w15`c+z72d%qJ88u%vBdKO28Ao?!fWU?na&` z;Yq52%8O>}^@bO)lz|si7PA77`xZLKChg1t`E7oIBf=OupVz4`2--=+cin5E`QVrs z4;lUDe+Jy#W!HWFpo@rnYBWq6Qqu`GvgYp7gi$4F(Vw<#0cR|( zH-?Kv*{0vE_1BL_&JLseW->?|WAp>%~m&5A3OQ=mmeU|EVPB z9mfbfoVr#b=-xR8-&s#RFteYc(IZsx-6s{IJbIA=)Y3h$r9k4+o8!%SseF=n_2^Yy z>sNQfDC)okGi35fXh`A9o%c=r=KzH>i{Gam=YTH$?47sm9~h1s);IhfsJjRFv(+>x zJVOFlbP2i#7zYe%4E?yt-(X+QS5TtQa5#VXfX=6`y3VXZ=?wDwF((#507Cb<+BKQ5 z^Up4Sb*k|gfWGYEsY~JI>!q2})MKc}u5OV@*fK9Trcm#U>DIk*WyYM(OPp9}o`d|4 zsex{?evFgrn0HD7Y1xSW&aoMuUM6HqH!d95NQUJRRqO)tl;ZAMm&FO|{z2W&jQhzV zS1u?8EL7OWbS^RfD49OigPUR5qi4UTzoj3V*8Ectchy+If3}pwFk&fvkVkJ{Kjb)` zle1~rbv8cCWiwzlZLT`HbX7`U`DE=9jLY-64>&6TyPSNx;I8)tjtC2$J;G2Wd!*^8w(C$62)bAVmjS?!-*n``>FyX1zs za?(+p#MbK8qV#q;=2l3yQ+mhdlK)h5M7vI6?o8M6!mTD?9SmJYy9HrX+6`}cn^z_0 zt+{(Ki7_`{gVe!S$j4#y$~vb;e#oPRIbo{mZ+XxEayKR1=j&z1mEIqCZ{_5g2ED$P zx%X=xqRnSfl)?EAre;!2`MG8j2f0d}b1M*qr7rm3Z{e3yqfYanz-EWek{|b z$}8sg!-JoCUycg5346y{cfF@a$_;p*0zUPeWY&;&k4kU)vf|~=gqXw#MWC*2VhbFd z^*Wv8&SdH&Q6m#s&D!P^_)3L^SD)lF-H3wIN-L;&NfMy%6t!!c)%bfHs%xUdx})6^ z9QIn}R8TGmPg31dJg^lWNb2*tyS0fbir~rMbq;0oo&W$iQ-2f+U}QbV$L$sw4)=i{<@Zth!09XI+nfWHqI-JEx2LU@Hy&hd^YowPYRfr!e4%W<*<8$PaiRs`Z5STV*akxhVyq|9q>kIQ=Mqdz|-Os z=yQWu2`2e@0XH2D2b(c()^eYD8cXb_vcFMuHJTL{MSl~Ort-hQp-KO`5KPI!2qBN8 zSWgcyIl`@dyJNowbp~2xI1>T}K{*`z+8wN#qIWa=Rayzu zt=q5Bd$}UMRfWnVA?Cu2<>4>;b?0+{J-bhoeCv1lvm>sfeUQ73yh1$~>}%DQH@hY# zt{*Q>y0RTiPiZdNKMPe-GK>d%>n)m?1nt#gw@SaHa#i*$!@*K~MvUM)y{nu_&SqXd z5t}~me&JpdbyTvGYBiX+nq5y<5jH@)l-`VYgr{vqX7}ydhccsZYe(B_vmwfXcF>Kl zz*BW!fs}`^wBWvgS1xt7Lf%~cMcrWa*EL%r;f-Yhf0z5>9IfjKD!kD=M7`^1x16Mr zmW1DQ0M@y|K@Tnb0Qs}{u zzz;Ns^Q)>-HYJ5`wkK3nX}!R^DoY24Cy^<#=?M?5;;cxAYbNLl(uzZMY%Q9B`&xe1 z?H}O8pXqN7*IG^v<@jX+PHTT17OchPa?PgP+DOk+bO|sqO=)|Nsu(5lef^x{?Vw_8nqN0PZo-qT}Iz{StE6e5J>(Y8La+?3w#zyLgTq_K`?ygRoZ6tpL4mIm6;- zGW<0kOftSlj#WbZK9+WSk>{geKb0V8hpi+Dp&Pu-o&x)Dh*{yc;)!eDE@c784}uG< z>#c(9Rxw5vSCwpm4IC|&yMur@&n-G08^I5gcr|VA1l*S>MRb;DmI|0XgBJ#Gfig{6 z(i-%^ZoOR9-4-0;CiFIlyYL~t|zJt*_2izWedkzQ{ zJqPUGOvBsx=FiHNZdQ%eGA{-{P|_Ypp^$r0$lo^)9KvrcDSv*n!R~$zcr{k@SGHSr zYk@ax17npJUAE0RhLfjBpY1P7ptb{xvb^4;qV|jvGw08v3!(LzGTk^bp~#p|vc%6W z`&`RM+Mc%G*om|)uJL1;+qQFDh!nsl-k;YNJN*RYRx%`$5!x#qP9ZBsJ?PJG;Ys(E z6jAgg&^RDvc;pi2C{J06+|rY7J4YK@`#SE&T3hg+(FnwnO+CzP5T>qf=%Mov#~Y?|)Nu6yoV z=9(GObC+*ii<4>{eB>(oo0aK8{>6sZQ-S_ZH7SNfL+;&$s`>T6TR<4v&Qe)9H^cSlsBOs5+Z}eQEZWvzkv_rLJ=en{T!*6MBoiZFCoSR#QcdrQfIp)J zf)bB^w7_6%Ug{==r%@I1yYr7aEA{NM^zIrY8^QRB2>tCl0FHr69>&IOC-%AYb?$Q} zMye|+)HGa8fUfXRQFzVP$!h|?#J*lEI#TT#tA?8WEUVH|uStxU3SMw8E>#Q5SDg5Q z|Kz88KHiq3>|p(AtG%*Z8lAOzQ=iCRcR^-&Q zg1(X5Mx%=KR?q#Id^ z&3-|Fg~QO=BL|b)Wojl$$@<@$t>V~pZDS)P#0nUA`&tD__=B5IZ;p5@u_lAIi2ZoZ zJ1N#*AE>_~^3Od42N;KlDL0I}<4y~GIf`A;G2jbv{-76|Udk}|M1H(t;9uWY0tPz= z*>gW;T^bg$N<#nKo}_(G`=O5$D{Cl9Y6I*v?J44+q1v*hYPLu5CU4UOtcYczP_=|^ zv;J%{!8;U-j4t7E(2tGtTXZkucix(GEfHKyW;;>ueH#1QY8K(Zty@M-bMjNVx60Ng z^UK7`Im;gdj>EYL3%KqH@lx?;@k1iuf{$0QHEy(jbkY_hUK{51R{n;_} zTnU=UYfuxd#>;G9rm+b3hpG5E$1%mIq;r5?c^I7iJ+6&A62PwND%&@mvHql?xjuQp z{$!|sIhAZf3JEQVemmPa(b>8_a}J2mE0qJ?{XO?S$YN7nR(+B=abQFUlR8bwkWD_F zS>+5JH6Zm$(R+N{S6LGi$aiade2cGe4dUB_7JVnHOU!CBX&kn6w2bT+&G3}G9L!qd z0iH{Mg>~Iu+%J~#?kWA0?A>Kw=w##dP3H@Ww=ZnQO=Q!-J>Ie$vxn`WcBeSTpK30g zFi7_7<4(Wue3m6d=`QaXBqZ#GcL`7{xvZsH5vTsVB%q1co})cqMd)e?13=lJYSq6` zME!>!iaWBuU7D(zrkzq4qQp~xE#-B4z8R94yky3EB>c_+P7Nx({ST7k+qhEKh@u;p zP*Pf&T2f1KRc5C6Ju0PCla8d?I3vl__;Sno77oM2P$2pR{pjR;2!o)J?PQ^3lHXfS z@>s7fCctunCmf97sME~gd9D$|0ezwb&(D4C`m9~A+nwzyqx|C^h4NG3!@qy!Mef1f z^mtObpOE%kg%m&-#-$$svTaPfG_$$$?S(N}L*yRHR6KvcUQCJ$AL+NFhWi*p-HP6G ze%*ujUoth{tP_cd$ajxV0`Q3??lI&7vZyb~8VCrlq^;sU1^R%pUtLRgxE2AV9oVna z4yD16q+7_oya3yHzQLDvxP9X;@mglnZ6f{v!CgG`m*c;KPS*b*DHpA7U7V<@@l3#r7lBByD3#NgrCYQx) zwq@qlw4m=EV`A%xPYI!1Jepwdi;A*dy7CLc3^p@smke~=lku=nsMjR70#GRg0ARAx z`wZN|5)k(p`T7)DNr4{bHNM-t2Oa9LsE zI(}%u5YYSkqw1EMUaC6BK)39Q0eda$sWQ6IZCO(z{Kcy(aehd(p!qc+_}CB-qk4J`Ccx=Gqn7T(;*&U#N}!zeSl=Z_$f^`n>nk@8OF zSix8kC#xskOVFl5^m!fo!d&9>2~84^-UJcq8CSh+&US2-bL`TWWoY%G=^2$BiHeS$ z;e!mQKAeMyw+U}_YiT!d_zRN$Hy?t&eCwEOj`||x6N@#SHZ9Pfm^M;D5||2*oB@mR z%Funum{aDW0Df)58#SspF{$c$C0LpPT-G}Y<S!taQ~Eq?0GiMb-Ap#dO!sh&FjTgN5xcQmnJ(^cam+Jj7@u?kB;76X)fmAqP| z&MaEz(4T`>Mt+!dUkP_lyOnIr^GW2SqxT5()?8*p;vszefKIoe;`0G}FPwAShN`GI04r)wxaaLF62ea-bZKoYZ3H&%q zoj%M6o!-yNGT%zwj>|0#G$^Qb|xX%y( literal 0 HcmV?d00001 diff --git a/dox/user_guides/modeling_algos/images/modeling_algos_image055.jpg b/dox/user_guides/modeling_algos/images/modeling_algos_image055.jpg new file mode 100644 index 0000000000000000000000000000000000000000..3255ef582a1f668881cc92002e6dfef500137324 GIT binary patch literal 12277 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 literal 0 HcmV?d00001 diff --git a/dox/user_guides/modeling_algos/modeling_algos.md b/dox/user_guides/modeling_algos/modeling_algos.md new file mode 100644 index 0000000000..9f5520c13a --- /dev/null +++ b/dox/user_guides/modeling_algos/modeling_algos.md @@ -0,0 +1,2661 @@ +Modeling Algorithms {#user_guides__modeling_algos} +========================= + +@section occt_modalg_1 Introduction + +@subsection occt_modalg_1_1 The Modeling Algorithms Module + + +This manual explains how to use the Modeling Algorithms. It provides basic documentation on modeling algorithms. For advanced information on Modeling Algorithms, see our offerings on our web site at www.opencascade.org/support/training/ + +The Modeling Algorithms module brings together a wide range of topological algorithms used in modeling. Along with these tools, you will find the geometric algorithms, which they call. + +The algorithms available are divided into: + * Geometric tools + * Topological tools + * The Topology API + +@subsection occt_modalg_1_2 The Topology API + +The Topology  API of Open CASCADE Technology (**OCCT**) includes the following six packages: + + * BRepAlgoAPI + * BRepBuilderAPI + * BRepFilletAPI + * BRepFeat + * BRepOffsetAPI + * BRepPrimAPI + +The classes in these six packages provide the user with a simple and powerful interface. + * A simple interface: a function call works ideally, + * A powerful interface: including error handling and access to extra information provided by the algorithms. + +As an example, the class BRepBuilderAPI_MakeEdge can be used to create a linear edge from two points. + +~~~~~ +gp_Pnt P1(10,0,0), P2(20,0,0); +TopoDS_Edge E = BRepBuilderAPI_MakeEdge(P1,P2); +~~~~~ + +This is the simplest way to create edge E from two points P1, P2, but the developer can test for errors when he is not as confident of the data as in the previous example. + +~~~~~ +#include +#include +#include +void EdgeTest() +{ +gp_Pnt P1; +gp_Pnt P2; +BRepBuilderAPI_MakeEdge ME(P1,P2); +if (!ME.IsDone()) +{ +// doing ME.Edge() or E = ME here +// would raise StdFail_NotDone +Standard_DomainError::Raise +(“ProcessPoints::Failed to createan edge”); +} +TopoDS_Edge E = ME; +} +~~~~~ + +In this example an intermediary object ME has been introduced. This can be tested for the completion of the function before accessing the result. More information on **error handling** in the topology programming interface can be found in the next section. + +BRepBuilderAPI_MakeEdge provides valuable information. For example, when creating an edge from two points, two vertices have to be created from the points. Sometimes you may be interested in getting these vertices quickly without exploring the new edge. Such information can be provided when using a class. The following example shows a function creating an edge and two vertices from two points. + +~~~~~ +void MakeEdgeAndVertices(const gp_Pnt& P1, +const gp_Pnt& P2, +TopoDS_Edge& E, +TopoDS_Vertex& V1, +TopoDS_Vertex& V2) +{ +BRepBuilderAPI_MakeEdge ME(P1,P2); +if (!ME.IsDone()) { +Standard_DomainError::Raise +(“MakeEdgeAndVerices::Failed to create an edge”); +} +E = ME; +V1 = ME.Vextex1(); +V2 = ME.Vertex2(); +~~~~~ + +The BRepBuilderAPI_MakeEdge class provides the two methods Vertex1 and Vertex2, which return the two vertices used to create the edge. + +How can BRepBuilderAPI_MakeEdge be both a function and a class? It can do this because it uses the casting capabilities of C++. The BRepBuilderAPI_MakeEdge class has a method called Edge; in the previous example the line E = ME could have been written. + +~~~~~ +E = ME.Edge(); +~~~~~ + +This instruction tells the C++ compiler that there is an **implicit casting **of a BRepBuilderAPI_MakeEdge into a TopoDS_Edge using the Edge method. It means this method is automatically called when a BRepBuilderAPI_MakeEdge is found where a TopoDS_Edge is required. + +This feature allows you to provide classes, which have the simplicity of function calls when required and the power of classes when advanced processing is necessary. All the benefits of this approach are explained when describing the topology programming interface classes. + + +@subsubsection occt_modalg_1_2_1 Error Handling in the Topology API + +A method can report an error in the two following situations: + * The data or arguments of the method are incorrect, i.e. they do not respect the restrictions specified by the methods in its specifications. Typical example: creating a linear edge from two identical points is likely to lead to a zero divide when computing the direction of the line. + * Something unexpected happened. This situation covers every error not included in the first category. Including: interruption, programming errors in the method or in another method called by the first method, bad specifications of the arguments (i.e. a set of arguments that was not expected to fail). + +The second situation is supposed to become increasingly exceptional as a system is debugged and it is handled by the **exception mechanism**. Using exceptions avoids handling error statuses in the call to a method: a very cumbersome style of programming. + +In the first situation, an exception is also supposed to be raised because the calling method should have verified the arguments and if it did not do so, there is a bug. For example if before calling MakeEdge you are not sure that the two points are non-identical, this situation must be tested. + +Making those validity checks on the arguments can be tedious to program and frustrating as you have probably correctly surmised that the method will perform the test twice. It does not trust you. +As the test involves a great deal of computation, performing it twice is also time-consuming. + +Consequently, you might be tempted to adopt the *highly inadvisable *style of programming illustrated in the following example: + +~~~~~ +#include +try { +TopoDS_Edge E = BRepBuilderAPI_MakeEdge(P1,P2); +// go on with the edge +} +catch { +// process the error. +} +~~~~~ + +To help the user, the Topology API classes only raise the exception **StdFail_NotDone**. Any other exception means that something happened which was unforeseen in the design of this API. + +The **NotDone **exception is only raised when the user tries to access the result of the computation and the original data is corrupted. At the construction of the class instance, if the algorithm cannot be completed, the internal flag NotDone is set. This flag can be tested and in some situations a more complete description of the error can be queried. If the user ignores the NotDone status and tries to access the result, an exception is raised. + +~~~~~ +BRepBuilderAPI_MakeEdge ME(P1,P2); +if (!ME.IsDone()) { +// doing ME.Edge() or E = ME here +// would raise StdFail_NotDone +Standard_DomainError::Raise +(“ProcessPoints::Failed to create an edge”); +} +TopoDS_Edge E = ME; +~~~~~ + +@section occt_modalg_2 Geometric Tools + +@subsection occt_modalg_2_1 Overview + +Open CASCADE Technology geometric tools include: + + * Computation of intersections + * Interpolation laws + * Computation of curves and surfaces from constraints + * Computation of lines and circles from constraints + * Projections + +@subsection occt_modalg_2_2 Intersections + +The *Geom2dAPI_InterCurveCurve *class allows the evaluation of the intersection points (*gp_Pnt2d*) between two geometric curves (*Geom2d_Curve*)* *and the evaluation of the points of self-intersection of a curve. + +![](/user_guides/modeling_algos/images/modeling_algos_image003.jpg "Intersection and self-intersection of curves") + +In both cases, the algorithm requires a value for the tolerance (Standard_Real) for the confusion between two points. The default tolerance value used in all constructors is *1.0e-6.* + +![](/user_guides/modeling_algos/images/modeling_algos_image004.jpg "Intersection and tangent intersection") + +The algorithm returns a point in the case of an intersection and a segment in the case of tangent intersection. + +@subsubsection occt_modalg_2_2_1 Geom2dAPI_InterCurveCurve + +This class may be instantiated either for intersection of curves C1 and C2. +~~~~~ +Geom2dAPI_InterCurveCurve Intersector(C1,C2,tolerance); +~~~~~ + +or for self-intersection of curve C3. +~~~~~ +Geom2dAPI_InterCurveCurve Intersector(C3,tolerance); +~~~~~ + +~~~~~ +Standard_Integer N = Intersector.NbPoints(); +~~~~~ +Calls the number of intersection points + +To select the desired intersection point, pass an integer index value in argument. +~~~~~ +gp_Pnt2d P = Intersector.Point(Index); +~~~~~ + +~~~~~ +Standard_Integer M = Intersector.NbSegments(); +~~~~~ + +Calls the number of intersection segments. + +To select the desired intersection segment pass integer index values in argument. +~~~~~ +Handle(Geom2d_Curve) Seg1, Seg2; +Intersector.Segment(Index,Seg1,Seg2); +// if intersection of 2 curves +Intersector.Segment(Index,Seg1); +// if self-intersection of a curve +~~~~~ + +If you need access to a wider range of functionalities the following method will return the algorithmic object for the calculation of intersections: + +~~~~~ +Geom2dInt_GInter& TheIntersector = Intersector.Intersector(); +~~~~~ + +@subsubsection occt_modalg_2_2_2 Intersection of Curves and Surfaces +The *GeomAPI_IntCS *class is used to compute the intersection points between a curve and a surface. + +This class is instantiated as follows: +~~~~~ +GeomAPI_IntCS Intersector(C, S); +~~~~~ + +~~~~~ +Standard_Integer nb = Intersector.NbPoints(); +~~~~~ +Calls the number of intersection points. + +~~~~~ +gp_Pnt& P = Intersector.Point(Index); +~~~~~ + +Where *Index *is an integer between *1 *and *nb*, calls the intersection points. + +@subsubsection occt_modalg_2_2_3 Intersection of two Surfaces +The *GeomAPI_IntSS *class is used to compute the intersection of two surfaces from *Geom_Surface *with respect to a given tolerance. + +This class is instantiated as follows: +~~~~~ +GeomAPI_IntSS Intersector(S1, S2, Tolerance); +~~~~~ +Once the *GeomAPI_IntSS *object has been created, it can be interpreted. + +~~~~~ +Standard_Integer nb = Intersector. NbLines(); +~~~~~ +Calls the number of intersection curves. + +~~~~~ +Handle(Geom_Curve) C = Intersector.Line(Index) +~~~~~ +Where *Index *is an integer between *1 *and *nb*, calls the intersection curves. + +@subsection occt_modalg_2_3 Interpolations +*Interpolation* provides functionalities for interpolating BSpline curves, whether in 2D, using *Geom2dAPI_Interpolate*, or 3D using *GeomAPI_Interpolate*. + + +@subsubsection occt_modalg_2_3_1 Geom2dAPI_Interpolate +This class is used to interpolate a BSplineCurve passing through an array of points. If tangency is not requested at the point of interpolation, continuity will be *C2 *. If tangency is requested at the point, continuity will be *C1*. If Periodicity is requested, the curve will be closed and the junction will be the first point given. The curve will then have a continuity of *C1* only. +This class may be instantiated as follows: +~~~~~ +Geom2dAPI_Interpolate +(const Handle_TColgp_HArray1OfPnt2d& Points, +const Standard_Boolean PeriodicFlag, +const Standard_Real Tolerance); + +Geom2dAPI_Interpolate Interp(Points, Standard_False, +                                    Precision::Confusion()); +~~~~~ + + +It is possible to call the BSpline curve from the object defined above it. +~~~~~ +Handle(Geom2d_BSplineCurve) C = Interp.Curve(); +~~~~~ + +Note that the *Handle(Geom2d_BSplineCurve)* operator has been redefined by the method Curve(). Consequently, it is unnecessary to pass via the construction of an intermediate object of the *Geom2dAPI_Interpolate *type and the following syntax is correct. + +~~~~~ +Handle(Geom2d_BSplineCurve) C = +Geom2dAPI_Interpolate(Points, +    Standard_False, +    Precision::Confusion()); +~~~~~ + +@subsubsection occt_modalg_2_3_2 GeomAPI_Interpolate + +This class may be instantiated as follows: +~~~~~ +GeomAPI_Interpolate +(const Handle_TColgp_HArray1OfPnt& Points, +const Standard_Boolean PeriodicFlag, +const Standard_Real Tolerance); + +GeomAPI_Interpolate Interp(Points, Standard_False, +                                    Precision::Confusion()); +~~~~~ + +It is possible to call the BSpline curve from the object defined above it. +~~~~~ +Handle(Geom_BSplineCurve) C = Interp.Curve(); +~~~~~ +Note that the *Handle(Geom_BSplineCurve)* operator has been redefined by the method Curve(). Thus, it is unnecessary to pass via the construction of an intermediate object of the GeomAPI_Interpolate type and the following syntax is correct. + +Handle(Geom_BSplineCurve) C = + GeomAPI_Interpolate(Points, + Standard_False, + 1.0e-7); + +Boundary conditions may be imposed with the method Load. +~~~~~ +GeomAPI_Interpolate AnInterpolator +(Points, Standard_False, 1.0e-5); +AnInterpolator.Load (StartingTangent, EndingTangent); +~~~~~ + +@subsection occt_modalg_2_4 Lines and Circles from Constraints + +There are two packages to create lines and circles from constraints: *Geom2dGcc *and *GccAna*. *Geom2dGcc* deals with reference-handled geometric objects from the *Geom2d *package while *GccAna* deals with value-handled geometric objects from the *gp* package. + +The *Geom2dGcc* package solves geometric constructions of lines and circles expressed by constraints such as tangency or parallelism, that is, a constraint expressed in geometric terms. As a simple example the following figure shows a line which is constrained to pass through a point and be tangent to a circle. + +![](/user_guides/modeling_algos/images/modeling_algos_image005.jpg "A constrained line") + +The *Geom2dGcc *package focuses on algorithms; it is useful for finding results, but it does not offer any management or modification functions, which could be applied to the constraints or their arguments. This package is designed to offer optimum performance, both in rapidity and precision. Trivial cases (for example, a circle centered on one point and passing through another) are not treated. + +The *Geom2dGcc *package deals only with 2d objects from the *Geom2d *package. These objects are the points, lines and circles available. + +All other lines such as Bezier curves and conic sections - with the exception of circles -are considered general curves and must be differentiable twice. + +The *GccAna *package deals with points, lines, and circles from the *gp *package. Apart from constructors for lines and circles, it also allows the creation of conics from the bisection of other geometric objects. + +@subsection occt_modalg_2_5 Provided algorithms + +The following analytic algorithms using value-handled entities for creation of 2D lines or circles with geometric constraints are available: + + * circle tangent to three elements (lines, circles, curves, points), + * circle tangent to two elements and having a radius, + * circle tangent to two elements and centered on a third element, + * circle tangent to two elements and centered on a point, + * circle tangent to one element and centered on a second, + * bisector of two points, + * bisector of two lines, + * bisector of two circles, + * bisector of a line and a point, + * bisector of a circle and a point, + * bisector of a line and a circle, + * line tangent to two elements (points, circles, curves), + * line tangent to one element and parallel to a line, + * line tangent to one element and perpendicular to a line, + * line tangent to one element and forming angle with a line. + +@subsection occt_modalg_2_6 Types of algorithms +There are three categories of available algorithms, which complement each other: + * analytic, + * geometric, + * iterative. + +An analytic algorithm will solve a system of equations, whereas a geometric algorithm works with notions of parallelism, tangency, intersection and so on. + +Both methods can provide solutions. An iterative algorithm, however, seeks to refine an approximate solution. + +@subsection occt_modalg_2_7 Performance factors + +The appropriate algorithm is the one, which reaches a solution of the required accuracy in the least time. Only the solutions actually requested by the user should be calculated. A simple means to reduce the number of solutions is the notion of a "qualifier". There are four qualifiers, which are: + + * Unqualified: the position of the solution is undefined with respect to this argument. + * Enclosing: the solution encompasses this argument. + * Enclosed: the solution is encompassed by this argument. + * Outside: the solution and argument are outside each other. + + +@subsection occt_modalg_2_8 Conventions + +@subsubsection occt_modalg_2_8_1 Exterior/Interior +It is not hard to define the interior and exterior of a circle. As is shown in the following diagram, the exterior is indicated by the sense of the binormal, that is to say the right side according to the sense of traversing the circle. The left side is therefore the interior (or "material"). + +![](/user_guides/modeling_algos/images/modeling_algos_image006.jpg "Exterior/Interior of a Circle") + +By extension, the interior of a line or any open curve is defined as the left side according to the passing direction, as shown in the following diagram: + +![](/user_guides/modeling_algos/images/modeling_algos_image007.jpg "Exterior/Interior of a Line and a Curve") + +@subsubsection occt_modalg_2_8_2 Orientation of a Line +It is sometimes necessary to define in advance the sense of travel along a line to be created. This sense will be from first to second argument. + +The following figure shows a line, which is first tangent to circle C1 which is interior to the line, and then passes through point P1. + +![](/user_guides/modeling_algos/images/modeling_algos_image008.jpg "An Oriented Line") + +@subsection occt_modalg_2_9 Examples + +@subsubsection occt_modalg_2_9_1 Line tangent to two circles +The following four diagrams illustrate four cases of using qualifiers in the creation of a line. The fifth shows the solution if no qualifiers are given. + +Note that the qualifier "Outside" is used to mean "Mutually exterior". + +**Example 1 Case 1** + +![](/user_guides/modeling_algos/images/modeling_algos_image009.jpg "Both circles outside") + +Constraints: +Tangent and Exterior to C1. +Tangent and Exterior to C2. + +Syntax: + +~~~~~ +GccAna_Lin2d2Tan + Solver(GccEnt::Outside(C1), + GccEnt::Outside(C2), + Tolerance); +~~~~~ + +**Example 1 Case 2** + +![](/user_guides/modeling_algos/images/modeling_algos_image010.jpg "Both circles enclosed") + +Constraints: +Tangent and Including C1. +Tangent and Including C2. + +Syntax: + +~~~~~ +GccAna_Lin2d2Tan + Solver(GccEnt::Enclosing(C1), + GccEnt::Enclosing(C2), + Tolerance); +~~~~~ + +**Example 1 Case 3** + +![](/user_guides/modeling_algos/images/modeling_algos_image011.jpg "C1 enclosed, C2 outside") + +Constraints: +Tangent and Including C1. +Tangent and Exterior to C2. + +Syntax: +~~~~~ +GccAna_Lin2d2Tan + Solver(GccEnt::Enclosing(C1), + GccEnt::Outside(C2), + Tolerance); +~~~~~ + +**Example 1 Case 4** + +![](/user_guides/modeling_algos/images/modeling_algos_image012.jpg "C1 outside, C2 enclosed") +Constraints: +Tangent and Exterior to C1. +Tangent and Including C2. + +Syntax: +~~~~~ +GccAna_Lin2d2Tan + Solver(GccEnt::Outside(C1), + GccEnt::Enclosing(C2), + Tolerance); +~~~~~ + +**Example 1 Case 5** + +![](/user_guides/modeling_algos/images/modeling_algos_image013.jpg "With no qualifiers specified") + +Constraints: +Tangent and Undefined with respect to C1. +Tangent and Undefined with respect to C2. + +Syntax: +~~~~~ +GccAna_Lin2d2Tan + Solver(GccEnt::Unqualified(C1), + GccEnt::Unqualified(C2), + Tolerance); +~~~~~ + +@subsubsection occt_modalg_2_9_2 Circle of given radius tangent to two circles +The following four diagrams show the four cases in using qualifiers in the creation of a circle. + +**Example 2 Case 1** +![](/user_guides/modeling_algos/images/modeling_algos_image014.jpg "Both solutions outside") + +Constraints: +Tangent and Exterior to C1. +Tangent and Exterior to C2. + +Syntax: +~~~~~ +GccAna_Circ2d2TanRad + Solver(GccEnt::Outside(C1), + GccEnt::Outside(C2), Rad, Tolerance); +~~~~~ + +**Example 2 Case 2** + +![](/user_guides/modeling_algos/images/modeling_algos_image015.jpg "C2 encompasses C1") + +Constraints: +Tangent and Exterior to C1. +Tangent and Included by C2. + +Syntax: +~~~~~ +GccAna_Circ2d2TanRad + Solver(GccEnt::Outside(C1), + GccEnt::Enclosed(C2), Rad, Tolerance); +~~~~~ + +**Example 2 Case 3** +![](/user_guides/modeling_algos/images/modeling_algos_image016.jpg "Solutions enclose C2") + +Constraints: +Tangent and Exterior to C1. +Tangent and Including C2. + +Syntax: +~~~~~ +GccAna_Circ2d2TanRad + Solver(GccEnt::Outside(C1), + GccEnt::Enclosing(C2), Rad, Tolerance); +~~~~~ + +**Example 2 Case 4** +![](/user_guides/modeling_algos/images/modeling_algos_image017.jpg "Solutions enclose C1") + +Constraints: +Tangent and Enclosing C1. +Tangent and Enclosing C2. + +Syntax: +~~~~~ +GccAna_Circ2d2TanRad + Solver(GccEnt::Enclosing(C1), + GccEnt::Enclosing(C2), Rad, Tolerance); +~~~~~ + +**Example 2 Case 5** +The following syntax will give all the circles of radius *Rad, *which are tangent to *C1 *and *C2 *without discrimination of relative position: + +~~~~~ +GccAna_Circ2d2TanRad Solver(GccEnt::Unqualified(C1), + GccEnt::Unqualified(C2), + Rad,Tolerance); +~~~~~ + +@subsection occt_modalg_2_10 Algorithms + +The objects created by this toolkit are non-persistent. + +@subsubsection occt_modalg_2_10_1 Qualifiers +The *GccEnt* package contains the following package methods: + * Unqualified, + * Enclosing, + * Enclosed, + * Outside. + +This enables creation of expressions, for example: +~~~~~ +GccAna_Circ2d2TanRad + Solver(GccEnt::Outside(C1), + GccEnt::Enclosing(C2), Rad, Tolerance); +~~~~~ + +The objective in this case is to find all circles of radius *Rad*, which are tangent to both circle *C1* and *C2*, C1 being outside and C2 being inside. + +@subsubsection occt_modalg_2_10_2 General Remarks about Algorithms + +We consider the following to be the case: + * If a circle passes through a point then the circle is tangential to it. + * A distinction is made between the trivial case of the center at a point and the complex case of the center on a line. + +@subsubsection occt_modalg_2_10_3 Analytic Algorithms +GccAna package implements analytic algorithms. It deals only with points, lines, and circles from gp package. Here is a list of the services offered: + +Creation of a Line +------------------ + +~~~~~ +Tangent ( point | circle ) & Parallel ( line ) +Tangent ( point | circle ) & Perpendicular ( line | circle ) +Tangent ( point | circle ) & Oblique ( line ) +Tangent ( 2 { point | circle } ) +Bisector( line | line ) +~~~~~ + +Creation of Conics +------------------ + +~~~~~ +Bisector ( point | point ) +Bisector ( line | point ) +Bisector ( circle | point ) +Bisector ( line | line ) +Bisector ( circle | line ) +Bisector ( circle | circle ) +~~~~~ + +Creation of a Circle +-------------------- +~~~~~ +Tangent ( point | line | circle ) & Center ( point ) +Tangent ( 3 { point | line | circle } ) +Tangent ( 2 { point | line | circle } ) & Radius ( real ) +Tangent ( 2 { point | line | circle } ) & Center ( line | circle ) +Tangent ( point | line | circle ) & Center ( line | circle ) & Radius ( real ) +~~~~~ + +For each algorithm, the tolerance (and angular tolerance if appropriate) is given as an argument. Calculation is done with the highest precision available from the hardware. + +@subsubsection occt_modalg_2_10_4 Geometric Algorithms + +*Geom2dGcc *package offers algorithms, which produce 2d lines or circles with geometric constraints. For arguments, it takes curves for which an approximate solution is not requested. A tolerance value on the result is given as a starting parameter. The following services are provided: + +Creation of a Circle +-------------------- + +~~~~~ +Tangent ( curve ) & Center ( point ) +Tangent ( curve , point | line | circle | curve ) & Radius ( real ) +Tangent ( 2 {point | line | circle} ) & Center ( curve ) +Tangent ( curve ) & Center ( line | circle | curve ) & Radius ( real ) +Tangent ( point | line | circle ) & Center ( curve ) & Radius ( real ) +~~~~~ + +All calculations will be done to the highest precision available from the hardware. + +@subsubsection occt_modalg_2_10_5 Iterative Algorithms +Geom2dGcc package offers iterative algorithms find a solution by refining an approximate solution. It produces 2d lines or circles with geometric constraints. For all geometric arguments except points, an approximate solution may be given as a starting parameter. The tolerance or angular tolerance value is given as an argument. The following services are provided: + +Creation of a Line +------------------ +~~~~~ +Tangent ( curve ) & Oblique ( line ) +Tangent ( curve , { point | circle | curve } ) +~~~~~ + +Creation of a Circle +-------------------- + +~~~~~ +Tangent ( curve , 2 { point | circle | curve } ) +Tangent ( curve , { point | circle | curve } ) +& Center ( line | circle | curve ) +~~~~~ + +@subsection occt_modalg_2_1 Curves and Surfaces from Constraints + +@subsubsection occt_modalg_2_1_1 Fair Curve + +*FairCurve* package provides a set of classes to create faired 2D curves or 2D curves with minimal variation in curvature. + +Creation of Batten Curves +------------------------- +The class Batten allows producing faired curves defined on the basis of one or more constraints on each of the two reference points. These include point, angle of tangency and curvature settings. +The following constraint orders are available: + + * 0 the curve must pass through a point + * 1 the curve must pass through a point and have a given tangent + * 2 the curve must pass through a point, have a given tangent and a given curvature. + +Only 0 and 1 constraint orders are used. +The function Curve returns the result as a 2D BSpline curve. + +Creation of Minimal Variation Curves +------------------------------------ +The class MinimalVariation allow producing curves with minimal variation in curvature at each reference point. The following constraint orders are available: + + * 0 the curve must pass through a point + * 1 the curve must pass through a point and have a given tangent + * 2 the curve must pass through a point, have a given tangent and a given curvature. + +Constraint orders of 0, 1 and 2 can be used. The algorithm minimizes tension, sagging and jerk energy. + +The function *Curve* returns the result as a 2D BSpline curve. + +Specifying the length of the curve +---------------------------------- +If you want to give a specific length to a batten curve, use: + +~~~~~ +b.SetSlidingFactor(L / b.SlidingOfReference()) +~~~~~ +where *b* is the name of the batten curve object + +Limitations +----------- +Free sliding is generally more aesthetically pleasing than constrained sliding. +However, the computation can fail with values such as angles greater than p/2, because in this case, the length is theoretically infinite. + +In other cases, when sliding is imposed and the sliding factor is too large, the batten can collapse. + +Computation Time +---------------- +The constructor parameters, *Tolerance* and *NbIterations*, control how precise the computation is, and how long it will take. + +@subsubsection occt_modalg_2_11_2 Surfaces from Boundary Curves + +The *GeomFill* package provides the following services for creating surfaces from boundary curves: + +Creation of Bezier surfaces +--------------------------- +The class *BezierCurves* allows producing a Bezier surface from contiguous Bezier curves. Note that problems may occur with rational Bezier Curves. + +Creation of BSpline surfaces +---------------------------- +The class *BSplineCurves* allows producing a BSpline surface from contiguous BSpline curves. Note that problems may occur with rational BSplines. + +Creation of a Pipe +------------------ +The class *Pipe* allows you producing a pipe by sweeping a curve (the section) along another curve (the path). The result is a BSpline surface. + +Filling a contour +---------------- +The class *GeomFill_ConstrainedFilling* allows filling a contour defined by two, three or four curves as well as by tangency constraints. The resulting surface is a BSpline. + +Creation of a Boundary +---------------------- +The class *GeomFill_SimpleBound* allows you defining a boundary for the surface to be constructed. + +Creation of a Boundary with an adjoining surface +------------------------------------------------ +The class *GeomFill_BoundWithSurf* allows defining a boundary for the surface to be constructed. This boundary will already be joined to another surface. + +Filling styles +-------------- +The enumerations *FillingStyle* specify the styles used to build the surface. These include: + + * *Stretch* - the style with the flattest patches + * *Coons* - a rounded style with less depth than *Curved* + * *Curved* - the style with the most rounded patches. + +![](/user_guides/modeling_algos/images/modeling_algos_image018.jpg "Intersecting filleted edges with different radii leave a gap, is filled by a surface) + + +@subsubsection occt_modalg_2_11_3 Surfaces from curve and point constraints +The *GeomPlate* package provides the following services for creating surfaces respecting curve and point constraints: + +Definition of a Framework +------------------------- +The class *BuildPlateSurface* allows creating a framework to build surfaces according to curve and point constraints as well as tolerance settings. The result is returned with the function *Surface*. + +Note that you do not have to specify an initial surface at the time of construction. It can be added later or, if none is loaded, a surface will be computed automatically. + +Definition of a Curve Constraint +-------------------------------- +The class *CurveConstraint* allows defining curves as constraints to the surface, which you want to build. + +Definition of a Point Constraint +-------------------------------- +The class *PointConstraint* allows defining points as constraints to the surface, which you want to build. + +Applying Geom_Surface to Plate Surfaces +-------------------------------------- +The class *Surface* allows describing the characteristics of plate surface objects returned by **BuildPlateSurface::Surface** using the methods of *Geom_Surface* + +Approximating a Plate surface to a BSpline +------------------------------------------ +The class *MakeApprox* allows converting a *GeomPlate* surface into a *Geom_BSplineSurface*. + +![](/user_guides/modeling_algos/images/modeling_algos_image019.jpg "Surface generated from four curves and a point") + +**Example** + +Create a Plate surface and approximate it from a polyline as a curve constraint and a point constraint + +~~~~~ +Standard_Integer NbCurFront=4, +NbPointConstraint=1; +gp_Pnt P1(0.,0.,0.); +gp_Pnt P2(0.,10.,0.); +gp_Pnt P3(0.,10.,10.); +gp_Pnt P4(0.,0.,10.); +gp_Pnt P5(5.,5.,5.); +BRepBuilderAPI_MakePolygon W; +W.Add(P1); +W.Add(P2); +W.Add(P3); +W.Add(P4); +W.Add(P1); +// Initialize a BuildPlateSurface +GeomPlate_BuildPlateSurface BPSurf(3,15,2); +// Create the curve constraints +BRepTools_WireExplorer anExp; +for(anExp.Init(W); anExp.More(); anExp.Next()) +{ +TopoDS_Edge E = anExp.Current(); +Handle(BRepAdaptor_HCurve) C = new +BRepAdaptor_HCurve(); +C-ChangeCurve().Initialize(E); +Handle(BRepFill_CurveConstraint) Cont= new +BRepFill_CurveConstraint(C,0); +BPSurf.Add(Cont); +} +// Point constraint +Handle(GeomPlate_PointConstraint) PCont= new +GeomPlate_PointConstraint(P5,0); +BPSurf.Add(PCont); +// Compute the Plate surface +BPSurf.Perform(); +// Approximation of the Plate surface +Standard_Integer MaxSeg=9; +Standard_Integer MaxDegree=8; +Standard_Integer CritOrder=0; +Standard_Real dmax,Tol; +Handle(GeomPlate_Surface) PSurf = BPSurf.Surface(); +dmax = Max(0.0001,10*BPSurf.G0Error()); +Tol=0.0001; +GeomPlate_MakeApprox +Mapp(PSurf,Tol,MaxSeg,MaxDegree,dmax,CritOrder); +Handle (Geom_Surface) Surf (Mapp.Surface()); +// create a face corresponding to the approximated Plate +Surface +Standard_Real Umin, Umax, Vmin, Vmax; +PSurf-Bounds( Umin, Umax, Vmin, Vmax); +BRepBuilderAPI_MakeFace MF(Surf,Umin, Umax, Vmin, Vmax); +~~~~~ + +@subsection occt_modalg_2_12 Projections +This package provides functionality for projecting points onto 2D and 3D curves and surfaces. + +@subsubsection occt_modalg_2_12_1 Projection of a Point onto a Curve +*Geom2dAPI_ProjectPointOnCurve* allows calculation of all the normals projected from a point (*gp_Pnt2d*) onto a geometric curve (*Geom2d_Curve*). The calculation may be restricted to a given domain. + + +![](/user_guides/modeling_algos/images/modeling_algos_image020.jpg "Normals from a point to a curve") + +Note +---- +The curve does not have to be a *Geom2d_TrimmedCurve*. The algorithm will function with any +class inheriting Geom2d_Curve. + +@subsubsection occt_modalg_2_12_2 Geom2dAPI_ProjectPointOnCurve +This class may be instantiated as in the following example: + +~~~~~ +gp_Pnt2d P; +Handle(Geom2d_BezierCurve) C = + new Geom2d_BezierCurve(args); +Geom2dAPI_ProjectPointOnCurve Projector (P, C); +~~~~~ + +To restrict the search for normals to a given domain *[U1,U2]*, use the following constructor: +~~~~~ +Geom2dAPI_ProjectPointOnCurve Projector (P, C, U1, U2); +~~~~~ +Having thus created the *Geom2dAPI_ProjectPointOnCurve* object, we can now interrogate it. + +Calling the number of solution points +------------------------------------- +~~~~~ +Standard_Integer NumSolutions = Projector.NbPoints(); +~~~~~ + +Calling the location of a solution point +---------------------------------------- +The solutions are indexed in a range from *1* to *Projector.NbPoints()*. The point, which corresponds to a given *Index* may be found: +~~~~~ +gp_Pnt2d Pn = Projector.Point(Index); +~~~~~ + +Calling the parameter of a solution point +----------------------------------------- +For a given point corresponding to a given *Index*: + +~~~~~ +Standard_Real U = Projector.Parameter(Index); +~~~~~ + +This can also be programmed as: + +~~~~~ +Standard_Real U; +Projector.Parameter(Index,U); +~~~~~ + +Calling the distance between the start and end points +----------------------------------------------------- +We can find the distance between the initial point and a point, which corresponds to the given *Index*: + +~~~~~ +Standard_Real D = Projector.Distance(Index); +~~~~~ + +Calling the nearest solution point +--------------------------------- + +This class offers a method to return the closest solution point to the starting point. This solution is accessed as follows: +~~~~~ +gp_Pnt2d P1 = Projector.NearestPoint(); +~~~~~ + +Calling the parameter of the nearest solution point +--------------------------------------------------- +~~~~~ +Standard_Real U = Projector.LowerDistanceParameter(); +~~~~~ + +Calling the minimum distance from the point to the curve +------------------------------------------------------- +~~~~~ +Standard_Real D = Projector.LowerDistance(); +~~~~~ + +@subsubsection occt_modalg_2_12_3 Redefined operators + +Some operators have been redefined to find the closest solution. + +*Standard_Real()* returns the minimum distance from the point to the curve. + +~~~~~ +Standard_Real D = Geom2dAPI_ProjectPointOnCurve (P,C); +~~~~~ + +*Standard_Integer()* returns the number of solutions. + +~~~~~ +Standard_Integer N = +Geom2dAPI_ProjectPointOnCurve (P,C); +~~~~~ + +*gp_Pnt2d()* returns the nearest solution point. + +~~~~~ +gp_Pnt2d P1 = Geom2dAPI_ProjectPointOnCurve (P,C); +~~~~~ + +Using these operators makes coding easier when you only need the nearest point. Thus: +~~~~~ +Geom2dAPI_ProjectPointOnCurve Projector (P, C); +gp_Pnt2d P1 = Projector.NearestPoint(); +~~~~~ +can be written more concisely as: +~~~~~ +gp_Pnt2d P1 = Geom2dAPI_ProjectPointOnCurve (P,C); +~~~~~ +However, note that in this second case no intermediate *Geom2dAPI_ProjectPointOnCurve* object is created, and thus it is impossible to have access to other solution points. + + +@subsubsection occt_modalg_2_12_4 Access to lower-level functionalities + +If you want to use the wider range of functionalities available from the *Extrema* package, a call to the *Extrema()* method will return the algorithmic object for calculating extrema. For example: + +~~~~~ +Extrema_ExtPC2d& TheExtrema = Projector.Extrema(); +~~~~~ + +@subsubsection occt_modalg_2_12_5 GeomAPI_ProjectPointOnCurve + +This class is instantiated as in the following example: +~~~~~ +gp_Pnt P; +Handle(Geom_BezierCurve) C = + new Geom_BezierCurve(args); +GeomAPI_ProjectPointOnCurve Projector (P, C); +~~~~~ +If you wish to restrict the search for normals to the given domain [U1,U2], use the following constructor: +~~~~~ +GeomAPI_ProjectPointOnCurve Projector (P, C, U1, U2); +~~~~~ +Having thus created the *GeomAPI_ProjectPointOnCurve* object, you can now interrogate it. + +Calling the number of solution points +------------------------------------- +~~~~~ +Standard_Integer NumSolutions = Projector.NbPoints(); +~~~~~ + +Calling the location of a solution point +---------------------------------------- +The solutions are indexed in a range from 1 to *Projector.NbPoints()*. The point, which corresponds to a given index, may be found: +~~~~~ +gp_Pnt Pn = Projector.Point(Index); +~~~~~ + +Calling the parameter of a solution point +----------------------------------------- +For a given point corresponding to a given index: + +~~~~~ +Standard_Real U = Projector.Parameter(Index); +~~~~~ + +This can also be programmed as: +~~~~~ +Standard_Real U; +Projector.Parameter(Index,U); +~~~~~ + +Calling the distance between the start and end point +---------------------------------------------------- +The distance between the initial point and a point, which corresponds to a given index, may be found: +~~~~~ +Standard_Real D = Projector.Distance(Index); +~~~~~ + +Calling the nearest solution point +---------------------------------- +This class offers a method to return the closest solution point to the starting point. This solution is accessed as follows: +~~~~~ +gp_Pnt P1 = Projector.NearestPoint(); +~~~~~ + +Calling the parameter of the nearest solution point +--------------------------------------------------- +~~~~~ +Standard_Real U = Projector.LowerDistanceParameter(); +~~~~~ + +Calling the minimum distance from the point to the curve +-------------------------------------------------------- +~~~~~ +Standard_Real D = Projector.LowerDistance(); +~~~~~ + +Redefined operators +-------------------- +Some operators have been redefined to find the nearest solution. + +*Standard_Real()* returns the minimum distance from the point to the curve. + +~~~~~ +Standard_Real D = GeomAPI_ProjectPointOnCurve (P,C); +~~~~~ + +*Standard_Integer()* returns the number of solutions. +~~~~~ +Standard_Integer N = GeomAPI_ProjectPointOnCurve (P,C); +~~~~~ + +*gp_Pnt2d()* returns the nearest solution point. + +~~~~~ +gp_Pnt P1 = GeomAPI_ProjectPointOnCurve (P,C); +~~~~~ +Using these operators makes coding easier when you only need the nearest point. In this way, + +~~~~~ +GeomAPI_ProjectPointOnCurve Projector (P, C); +gp_Pnt P1 = Projector.NearestPoint(); +~~~~~ + +can be written more concisely as: +~~~~~ +gp_Pnt P1 = GeomAPI_ProjectPointOnCurve (P,C); +~~~~~ +In the second case, however, no intermediate *GeomAPI_ProjectPointOnCurve* object is created, and it is impossible to access other solutions points. + +Access to lower-level functionalities +------------------------------------- +If you want to use the wider range of functionalities available from the Extrema package, a call to the *Extrema()* method will return the algorithmic object for calculating the extrema. For example: + +~~~~~ +Extrema_ExtPC& TheExtrema = Projector.Extrema(); +~~~~~ + +@subsubsection occt_modalg_2_12_6 Projection of a Point on a Surface + +*GeomAPI_ProjectPointOnSurf* class allows calculation of all normals projected from a point from *gp_Pnt* onto a geometric surface from Geom_Surface. + + +![](/user_guides/modeling_algos/images/modeling_algos_image021.jpg "Projection of normals from a point to a surface") + +Note +---- +Note that the surface does not have to be of *Geom_RectangularTrimmedSurface* type. +The algorithm will function with any class inheriting Geom_Surface. + +*GeomAPI_ProjectPointOnSurf* is instantiated as in the following example: +~~~~~ +gp_Pnt P; +Handle (Geom_Surface) S = new Geom_BezierSurface(args); +GeomAPI_ProjectPointOnSurf Proj (P, S); +~~~~~ + +To restrict the search for normals within the given rectangular domain [U1, U2, V1, V2], use the following constructor: + +~~~~~ +GeomAPI_ProjectPointOnSurf Proj (P, S, U1, U2, V1, V2); +~~~~~ + +The values of U1, U2, V1 and V2 lie at or within their maximum and minimum limits, i.e.: +~~~~~ +Umin <= U1 < U2 <= Umax +Vmin <= V1 < V2 <= Vmax +~~~~~ +Having thus created the *GeomAPI_ProjectPointOnSurf* object, you can interrogate it. + +Calling the number of solution points +------------------------------------- + +~~~~~ +Standard_Integer NumSolutions = Proj.NbPoints(); +~~~~~ + +Calling the location of a solution point +---------------------------------------- +The solutions are indexed in a range from 1 to *Proj.NbPoints()*. The point corresponding to the given index may be found: + +~~~~~ +gp_Pnt Pn = Proj.Point(Index); +~~~~~ + +Calling the parameters of a solution point +------------------------------------------ +For a given point corresponding to the given index: + +~~~~~ +Standard_Real U,V; +Proj.Parameters(Index, U, V); +~~~~~ + +Calling the distance between the start and end point +---------------------------------------------------- + +The distance between the initial point and a point corresponding to the given index may be found: +~~~~~ +Standard_Real D = Projector.Distance(Index); +~~~~~ + +Calling the nearest solution point +---------------------------------- +This class offers a method, which returns the closest solution point to the starting point. This solution is accessed as follows: +~~~~~ +gp_Pnt P1 = Proj.NearestPoint(); +~~~~~ + +Calling the parameters of the nearest solution point +---------------------------------------------------- +~~~~~ +Standard_Real U,V; +Proj.LowerDistanceParameters (U, V); +~~~~~ + +Calling the minimum distance from a point to the surface +-------------------------------------------------------- +~~~~~ +Standard_Real D = Proj.LowerDistance(); +~~~~~ + +Redefined operators +------------------- +Some operators have been redefined to help you find the nearest solution. + +*Standard_Real()* returns the minimum distance from the point to the surface. + +~~~~~ +Standard_Real D = GeomAPI_ProjectPointOnSurf (P,S); +~~~~~ + +*Standard_Integer()* returns the number of solutions. + +~~~~~ +Standard_Integer N = GeomAPI_ProjectPointOnSurf (P,S); +~~~~~ + +*gp_Pnt2d()* returns the nearest solution point. + +~~~~~ +gp_Pnt P1 = GeomAPI_ProjectPointOnSurf (P,S); +~~~~~ + +Using these operators makes coding easier when you only need the nearest point. In this way, + +~~~~~ +GeomAPI_ProjectPointOnSurface Proj (P, S); +gp_Pnt P1 = Proj.NearestPoint(); +~~~~~ + +can be written more concisely as: + +~~~~~ +gp_Pnt P1 = GeomAPI_ProjectPointOnSurface (P,S); +~~~~~ + +In the second case, however, no intermediate *GeomAPI_ProjectPointOnSurf* object is created, and it is impossible to access other solution points. + +@subsubsection occt_modalg_2_12_7 Access to lower-level functionalities + +If you want to use the wider range of functionalities available from the Extrema package, a call to the Extrema() method will return the algorithmic object for calculating the extrema as follows: + +~~~~~ +Extrema_ExtPS& TheExtrema = Proj.Extrema(); +~~~~~ + + +@subsubsection occt_modalg_2_12_8 Switching from 2d and 3d Curves +The To2d and To3d methods are used to; + + * build a 2d curve from a 3d Geom_Curve lying on a gp_Pln plane + * build a 3d curve from a Geom2d_Curve and a gp_Pln plane. + +These methods are called as follows: +~~~~~ +Handle(Geom2d_Curve) C2d = GeomAPI::To2d(C3d, Pln); +Handle(Geom_Curve) C3d = GeomAPI::To3d(C2d, Pln); +~~~~~ + + +@section occt_modalg_3 Topological Tools + +Open CASCADE Technology topological tools include: + + * Standard topological objects combining topological data structure and boundary representation + * Geometric Transformations + * Conversion to NURBS geometry + * Finding Planes + * Duplicating Shapes + * Checking Validity + + +@subsection occt_modalg_3_1 Creation of Standard Topological Objects + +The standard topological objects include + * Vertices + * Edges + * Wires + * Faces + * Shells + * Solids. + +There are two root classes for their construction and modification: +* The deferred class *BRepBuilderAPI_MakeShape* is the root of all *BRepBuilderAPI* classes, which build shapes. It inherits from the class *BRepBuilderAPI_Command* and provides a field to store the constructed shape. +* The deferred *BRepBuilderAPI_ModifyShape* is used as a root for the shape modifications. It inherits *BRepBuilderAPI_MakeShape* and implements the methods used to trace the history of all sub-shapes. + +@subsubsection occt_modalg_3_1_1 Vertex + +*BRepBuilderAPI_MakeVertex* creates a new vertex from a 3D point from gp. +~~~~~ +gp_Pnt P(0,0,10); +TopoDS_Vertex V = BRepBuilderAPI_MakeVertex(P); +~~~~~ + +This class always creates a new vertex and has no other methods. + +@subsubsection occt_modalg_3_1_2 Edge + +Use *BRepBuilderAPI_MakeEdge* to create from a curve and vertices. The basic method is to construct an edge from a curve, two vertices, and two parameters. All other constructions are derived from this one. The basic method and its arguments are described first, followed by the other methods. The BRepBuilderAPI_MakeEdge class can provide extra information and return an error status. + +Basic Edge construction +----------------------- + +~~~~~ +Handle(Geom_Curve) C = ...; // a curve +TopoDS_Vertex V1 = ...,V2 = ...;// two Vertices +Standard_Real p1 = ..., p2 = ..;// two parameters +TopoDS_Edge E = BRepBuilderAPI_MakeEdge(C,V1,V2,p1,p2); +~~~~~ + +where C is the domain of the edge; V1 is the first vertex oriented FORWARD; V2 is the second vertex oriented REVERSED; p1 and p2 are the parameters for the vertices V1 and V2 on the curve. The default tolerance is associated with this edge. + +![](/user_guides/modeling_algos/images/modeling_algos_image022.jpg "Basic Edge Construction") + +The following rules apply to the arguments: + +**The curve** + * Must not be a Null Handle. + * If the curve is a trimmed curve, the basis curve is used. + +**The vertices** + * Can be null shapes. When V1 or V2 is Null the edge is open in the corresponding direction and the corresponding parameter p1 or p2 must be infinite (i.e p1 is RealFirst(), p2 is RealLast()). + * Must be different vertices if they have different 3d locations and identical vertices if they have the same 3d location (identical vertices are used when the curve is closed). + +**The parameters** + * Must be increasing and in the range of the curve, i.e.: +~~~~~ + C->FirstParameter() <= p1 < p2 <= C->LastParameter() +~~~~~ + +* If the parameters are decreasing, the Vertices are switched, i.e. V2 becomes V1 and V1 becomes V2. +* On a periodic curve the parameters p1 and p2 are adjusted by adding or subtracting the period to obtain p1 in the range of the curve and p2 in the range p1 < p2 <= p1+ Period. So on a parametric curve p2 can be greater than the second parameter, see the figure below. +* Can be infinite but the corresponding vertex must be Null (see above). +* The distance between the Vertex 3d location and the point evaluated on the curve with the parameter must be lower than the default precision. + +The figure below illustrates two special cases, a semi-infinite edge and an edge on a periodic curve. + +![](/user_guides/modeling_algos/images/modeling_algos_image023.jpg "Infinite and Periodic Edges") + + +Other Edge constructions +------------------------ +*BRepBuilderAPI_MakeEdge* class provides methods, which are all simplified calls of the previous one: + + * The parameters can be omitted. They are computed by projecting the vertices on the curve. + * 3d points (Pnt from gp) can be given in place of vertices. Vertices are created from the points. Giving vertices is useful when creating connected vertices. + * The vertices or points can be omitted if the parameters are given. The points are computed by evaluating the parameters on the curve. + * The vertices or points and the parameters can be omitted. The first and the last parameters of the curve are used. + +The five following methods are thus derived from the basic construction: + +~~~~~ +Handle(Geom_Curve) C = ...; // a curve +TopoDS_Vertex V1 = ...,V2 = ...;// two Vertices +Standard_Real p1 = ..., p2 = ..;// two parameters +gp_Pnt P1 = ..., P2 = ...;// two points +TopoDS_Edge E; +// project the vertices on the curve +E = BRepBuilderAPI_MakeEdge(C,V1,V2); +// Make vertices from points +E = BRepBuilderAPI_MakeEdge(C,P1,P2,p1,p2); +// Make vertices from points and project them +E = BRepBuilderAPI_MakeEdge(C,P1,P2); +// Computes the points from the parameters +E = BRepBuilderAPI_MakeEdge(C,p1,p2); +// Make an edge from the whole curve +E = BRepBuilderAPI_MakeEdge(C); +~~~~~ + + +Six methods (the five above and the basic method) are also provided for curves from the gp package in place of Curve from Geom. The methods create the corresponding Curve from Geom and are implemented for the following classes: + +*gp_Lin*       creates a *Geom_Line* +*gp_Circ*      creates a *Geom_Circle* +*gp_Elips*    creates a *Geom_Ellipse* +*gp_Hypr*    creates a *Geom_Hyperbola* +*gp_Parab*   creates a *Geom_Parabola* + +There are also two methods to construct edges from two vertices or two points. These methods assume that the curve is a line; the vertices or points must have different locations. + +~~~~~ + +TopoDS_Vertex V1 = ...,V2 = ...;// two Vertices +gp_Pnt P1 = ..., P2 = ...;// two points +TopoDS_Edge E; + +// linear edge from two vertices +E = BRepBuilderAPI_MakeEdge(V1,V2); + +// linear edge from two points +E = BRepBuilderAPI_MakeEdge(P1,P2); +~~~~~ + +Other information and error status +---------------------------------- +If BRepBuilderAPI_MakeEdge is used as a class, it can provide two vertices. This is useful when the vertices were not provided as arguments, for example when the edge was constructed from a curve and parameters. The two methods Vertex1 and Vertex2 return the vertices. Note that the returned vertices can be null if the edge is open in the corresponding direction. + +The *Error* method returns a term of the *BRepBuilderAPI_EdgeError* enumeration. It can be used to analyze the error when *IsDone* method returns False. The terms are: + + * **EdgeDone** - No error occurred, *IsDone* returns True. + * **PointProjectionFailed** - No parameters were given, but the projection of the 3D points on the curve failed. This happens if the point distance to the curve is greater than the precision. + * **ParameterOutOfRange** - The given parameters are not in the range *C->FirstParameter()*, *C->LastParameter()* + * **DifferentPointsOnClosedCurve** - The two vertices or points have different locations but they are the extremities of a closed curve. + * **PointWithInfiniteParameter** - A finite coordinate point was associated with an infinite parameter (see the Precision package for a definition of infinite values). + * **DifferentsPointAndParameter** - The distance of the 3D point and the point evaluated on the curve with the parameter is greater than the precision. + * **LineThroughIdenticPoints** - Two identical points were given to define a line (construction of an edge without curve), *gp::Resolution* is used to test confusion . + +The following example creates a rectangle centered on the origin of dimensions H, L with fillets of radius R. The edges and the vertices are stored in the arrays *theEdges* and *theVertices*. We use class *Array1OfShape* (i.e. not arrays of edges or vertices). See the image below. + +![](/user_guides/modeling_algos/images/modeling_algos_image024.jpg "Creating a Wire") + +~~~~~ +#include +#include +#include +#include +#include +#include +#include + +// Use MakeArc method to make an edge and two vertices +void MakeArc(Standard_Real x,Standard_Real y, +Standard_Real R, +Standard_Real ang, +TopoDS_Shape& E, +TopoDS_Shape& V1, +TopoDS_Shape& V2) +{ +gp_Ax2 Origin = gp::XOY(); +gp_Vec Offset(x, y, 0.); +Origin.Translate(Offset); +BRepBuilderAPI_MakeEdge +ME(gp_Circ(Origin,R), ang, ang+PI/2); +E = ME; +V1 = ME.Vertex1(); +V2 = ME.Vertex2(); +} + +TopoDS_Wire MakeFilletedRectangle(const Standard_Real H, +const Standard_Real L, +const Standard_Real R) +{ +TopTools_Array1OfShape theEdges(1,8); +TopTools_Array1OfShape theVertices(1,8); + +// First create the circular edges and the vertices +// using the MakeArc function described above. +void MakeArc(Standard_Real, Standard_Real, +Standard_Real, Standard_Real, +TopoDS_Shape&, TopoDS_Shape&, TopoDS_Shape&); + +Standard_Real x = L/2 - R, y = H/2 - R; +MakeArc(x,-y,R,3.*PI/2.,theEdges(2),theVertices(2), +theVertices(3)); +MakeArc(x,y,R,0.,theEdges(4),theVertices(4), +theVertices(5)); +MakeArc(-x,y,R,PI/2.,theEdges(6),theVertices(6), +theVertices(7)); +MakeArc(-x,-y,R,PI,theEdges(8),theVertices(8), +theVertices(1)); +// Create the linear edges +for (Standard_Integer i = 1; i <= 7; i += 2) +{ +theEdges(i) = BRepBuilderAPI_MakeEdge +(TopoDS::Vertex(theVertices(i)),TopoDS::Vertex +(theVertices(i+1))); +} +// Create the wire using the BRepBuilderAPI_MakeWire +BRepBuilderAPI_MakeWire MW; +for (i = 1; i <= 8; i++) +{ +MW.Add(TopoDS::Edge(theEdges(i))); +} +return MW.Wire(); +} +~~~~~ + +@subsubsection occt_modalg_3_1_3 Edge 2D + +Use *BRepBuilderAPI_MakeEdge2d* class to make edges on a working plane from 2d curves. The working plane is a default value of the *BRepBuilderAPI* package (see the *Plane* methods). + +*BRepBuilderAPI_MakeEdge2d* class is strictly similar to BRepBuilderAPI_MakeEdge, but it uses 2D geometry from gp and Geom2d instead of 3D geometry. + +@subsubsection occt_modalg_3_1_4 Polygon + +*BRepBuilderAPI_MakePolygon* class is used to build polygonal wires from vertices or points. Points are automatically changed to vertices as in *BRepBuilderAPI_MakeEdge*. + +The basic usage of *BRepBuilderAPI_MakePolygon* is to create a wire by adding vertices or points using the Add method. At any moment, the current wire can be extracted. The close method can be used to close the current wire. In the following example, a closed wire is created from an array of points. + +~~~~~ +#include +#include +#include + +TopoDS_Wire ClosedPolygon(const TColgp_Array1OfPnt& Points) +{ +BRepBuilderAPI_MakePolygon MP; +for(Standard_Integer i=Points.Lower();i=Points.Upper();i++) +{ +MP.Add(Points(i)); +} +MP.Close(); +return MP; +} +~~~~~ + +Short-cuts are provided for 2, 3, or 4 points or vertices. Those methods have a Boolean last argument to tell if the polygon is closed. The default value is False. + +Two examples: + +Example of a closed triangle from three vertices: +~~~~~ +TopoDS_Wire W = BRepBuilderAPI_MakePolygon(V1,V2,V3,Standard_True); +~~~~~ + +Example of an open polygon from four points: +~~~~~ +TopoDS_Wire W = BRepBuilderAPI_MakePolygon(P1,P2,P3,P4); +~~~~~ + +BRepBuilderAPI_MakePolygon class maintains a current wire. The current wire can be extracted at any moment and the construction can proceed to a longer wire. After each point insertion, the class maintains the last created edge and vertex, which are returned by the methods Edge, FirstVertex and LastVertex. + +When the added point or vertex has the same location as the previous one it is not added to the current wire but the most recently created edge becomes Null. The **Added** method can be used to test this condition. The MakePolygon class never raises an error. If no vertex has been added, the Wire is Null. If two vertices are at the same location, no edge is created. + +@subsubsection occt_modalg_3_1_5 Face + +Use *BRepBuilderAPI_MakeFace* class to create a face from a surface and wires. An underlying surface is constructed from a surface and optional parametric values. Wires can be added to the surface. A planar surface can be constructed from a wire. An error status can be returned after face construction. + +Basic face construction +----------------------- + +A face can be constructed from a surface and four parameters to determine a limitation of the UV space. The parameters are optional, if they are omitted the natural bounds of the surface are used. Up to four edges and vertices are created with a wire. No edge is created when the parameter is infinite. + +~~~~~ +Handle(Geom_Surface) S = ...; // a surface +Standard_Real umin,umax,vmin,vmax; // parameters +TopoDS_Face F = BRepBuilderAPI_MakeFace(S,umin,umax,vmin,vmax); +~~~~~ + +![](/user_guides/modeling_algos/images/modeling_algos_image025.jpg Basic Face Construction) + +To make a face from the natural boundary of a surface, the parameters are not required: + +~~~~~ +Handle(Geom_Surface) S = ...; // a surface +TopoDS_Face F = BRepBuilderAPI_MakeFace(S); +~~~~~ + +Constraints on the parameters are similar to the constraints in *BRepBuilderAPI_MakeEdge*. + * umin,umax (vmin,vmax) must be in the range of the surface and must be increasing. + * On a U (V) periodic surface umin and umax (vmin,vmax) are adjusted. + * umin, umax, vmin, vmax can be infinite. There will be no edge in the corresponding direction. + + +Other face constructions +------------------------ +The two basic constructions (from a surface and from a surface and parameters) are implemented for all the gp package surfaces, which are transformed in the corresponding Surface from Geom. + +*gp_Pln*                creates a *Geom_Plane* +*gp_Cylinder*           creates a *Geom_CylindricalSurface* +*gp_Cone*               creates a *Geom_ConicalSurface* +*gp_Sphere*             creates a *Geom_SphericalSurface* +*gp_Torus*              creates a *Geom_ToroidalSurface* + +Once a face has been created, a wire can be added using the Add method. For example, the following code creates a cylindrical surface and adds a wire. + +~~~~~ +gp_Cylinder C = ..; // a cylinder +TopoDS_Wire W = ...;// a wire +BRepBuilderAPI_MakeFace MF(C); +MF.Add(W); +TopoDS_Face F = MF; +~~~~~ + +More than one wire can be added to a face, provided that they do not cross each other and they define only one area on the surface. (Note that this is not checked). The edges on a Face must have a parametric curve description. + +If there is no parametric curve for an edge of the wire on the Face it is computed by projection. + +For one wire, a simple syntax is provided to construct the face from the surface and the wire. The above lines could be written: + +~~~~~ +TopoDS_Face F = BRepBuilderAPI_MakeFace(C,W); +~~~~~ + +A planar face can be created from only a wire, provided this wire defines a plane. For example, to create a planar face from a set of points you can use *BRepBuilderAPI_MakePolygon* and *BRepBuilderAPI_MakeFace*. + +~~~~~ +#include +#include +#include +#include + +TopoDS_Face PolygonalFace(const TColgp_Array1OfPnt& thePnts) +{ +BRepBuilderAPI_MakePolygon MP; +for(Standard_Integer i=thePnts.Lower(); +i<=thePnts.Upper(); i++) +{ +MP.Add(thePnts(i)); +} +MP.Close(); +TopoDS_Face F = BRepBuilderAPI_MakeFace(MP.Wire()); +return F; +} +~~~~~ + +The last use of MakeFace is to copy an existing face to add new wires. For example the following code adds a new wire to a face: + +~~~~~ +TopoDS_Face F = ...; // a face +TopoDS_Wire W = ...; // a wire +F = BRepBuilderAPI_MakeFace(F,W); +~~~~~ + +To add more than one wire an instance of the *BRepBuilderAPI_MakeFace* class can be created with the face and the first wire and the new wires inserted with the Add method. + +Error status +------------ +The Error method returns an error status, which is a term from the *BRepBuilderAPI_FaceError* enumeration. + +* *FaceDone* - no error occurred. +* *NoFace* - no initialization of the algorithm; an empty constructor was used. +* *NotPlanar* - no surface was given and the wire was not planar. +* *CurveProjectionFailed* - no curve was found in the parametric space of the surface for an edge. +* *ParametersOutOfRange* - the parameters umin,umax,vmin,vmax are out of the surface. + +@subsubsection occt_modalg_3_1_6 Wire +The wire is a composite shape built not from a geometry, but by the assembly of edges. *BRepBuilderAPI_MakeWire* class can build a wire from one or more edges or connect new edges to an existing wire. + +Up to four edges can be used directly, for example: + +~~~~~ +TopoDS_Wire W = BRepBuilderAPI_MakeWire(E1,E2,E3,E4); +~~~~~ + +For a higher or unknown number of edges the Add method must be used; for example, to build a wire from an array of shapes (to be edges). + +~~~~~ +TopTools_Array1OfShapes theEdges; +BRepBuilderAPI_MakeWire MW; +for (Standard_Integer i = theEdge.Lower(); +i <= theEdges.Upper(); i++) +MW.Add(TopoDS::Edge(theEdges(i)); +TopoDS_Wire W = MW; +~~~~~ + +The class can be constructed with a wire. A wire can also be added. In this case, all the edges of the wires are added. For example to merge two wires: + +~~~~~ +#include +#include + +TopoDS_Wire MergeWires (const TopoDS_Wire& W1, +const TopoDS_Wire& W2) +{ +BRepBuilderAPI_MakeWire MW(W1); +MW.Add(W2); +return MW; +} +~~~~~ + +*BRepBuilderAPI_MakeWire* class connects the edges to the wire. When a new edge is added if one of its vertices is shared with the wire it is considered as connected to the wire. If there is no shared vertex, the algorithm searches for a vertex of the edge and a vertex of the wire, which are at the same location (the tolerances of the vertices are used to test if they have the same location). If such a pair of vertices is found, the edge is copied with the vertex of the wire in place of the original vertex. All the vertices of the edge can be exchanged for vertices from the wire. If no connection is found the wire is considered to be disconnected. This is an error. + +BRepBuilderAPI_MakeWire class can return the last edge added to the wire (Edge method). This edge can be different from the original edge if it was copied. + +The Error method returns a term of the *BRepBuilderAPI_WireError* enumeration: +*WireDone* - no error occurred. +*EmptyWire* - no initialization of the algorithm, an empty constructor was used. +*DisconnectedWire* - the last added edge was not connected to the wire. +*NonManifoldWire* - the wire with some singularity. + +@subsubsection occt_modalg_3_1_7 Shell +The shell is a composite shape built not from a geometry, but by the assembly of faces. +Use *BRepBuilderAPI_MakeShell* class to build a Shell from a set of Faces. What may be important is that each face should have the required continuity. That is why an initial surface is broken up into faces. + +@subsubsection occt_modalg_3_1_8 Solid +The solid is a composite shape built not from a geometry, but by the assembly of shells. Use *BRepBuilderAPI_MakeSolid* class to build a Solid from a set of Shells. Its use is similar to the use of the MakeWire class: shells are added to the solid in the same way that edges are added to the wire in MakeWire. + + +@subsubsection occt_modalg_3_2 Modification Operators + +@subsubsection occt_modalg_3_2_1 Transformation +*BRepBuilderAPI_Transform* class can be used to apply a transformation to a shape (see class *gp_Trsf*). The methods have a boolean argument to copy or share the original shape, as long as the transformation allows (it is only possible for direct isometric transformations). By default, the original shape is shared. + +The following example deals with the rotation of shapes. + +~~~~~ + +TopoDS_Shape myShape1 = ...; +// The original shape 1 +TopoDS_Shape myShape2 = ...; +// The original shape2 +gp_Trsf T; +T.SetRotation(gp_Ax1(gp_Pnt(0.,0.,0.),gp_Vec(0.,0.,1.)), +2.*PI/5.); +BRepBuilderAPI_Transformation theTrsf(T); +theTrsf.Perform(myShape1); +TopoDS_Shape myNewShape1 = theTrsf.Shape() +theTrsf.Perform(myShape2,Standard_True); +// Here duplication is forced +TopoDS_Shape myNewShape2 = theTrsf.Shape() +~~~~~ + +@subsubsection occt_modalg_3_2_2 Duplication + +Use the BRepBuilderAPI_Copy class to duplicate a shape. A new shape is thus created. +In the following example, a solid is copied: + +~~~~~ +TopoDS Solid MySolid; +....// Creates a solid + +TopoDS_Solid myCopy = BRepBuilderAPI_Copy(mySolid); +~~~~~ + +@section occt_modalg_4 Construction of Primitives +@subsection occt_modalg_4_1 Making Primitives +@subsubsection occt_modalg_4_1_1 Box + +BRepPrimAPI_MakeBox class allows building a parallelepiped box. The result is either a Shell or a Solid. There are four ways to build a box: + +* From three dimensions dx,dy,dz. The box is parallel to the axes and extends for [0,dx] [0,dy] [0,dz]. +* From a point and three dimensions. The same as above but the point is the new origin. +* From two points, the box is parallel to the axes and extends on the intervals defined by the coordinates of the two points. +* From a system of axes (gp_Ax2) and three dimensions. Same as the first way but the box is parallel to the given system of axes. + +An error is raised if the box is flat in any dimension using the default precision. The following code shows how to create a box: +~~~~~ +TopoDS_Solid theBox = BRepPrimAPI_MakeBox(10.,20.,30.); +~~~~~ + +The four methods to build a box are shown in the figure: + +![](/user_guides/modeling_algos/images/modeling_algos_image026.jpg "Making Boxes") + +@subsubsection occt_modalg_4_1_2 Wedge +BRepPrimAPI_MakeWedge class allows building a wedge, which is a slanted box, i.e. a box with angles. The wedge is constructed in much the same way as a box i.e. from three dimensions dx,dy,dz plus arguments or from an axis system, three dimensions, and arguments. + +The following figure shows two ways to build wedges. One is to add an ltx dimension, which is the length in x of the face at dy. The second is to add xmin, xmax, zmin, zmax to describe the face at dy. + +The first method is a particular case of the second with xmin = 0, xmax = ltx, zmin = 0, zmax = dz. +To make a centered pyramid you can use xmin = xmax = dx / 2, zmin = zmax = dz / 2. + +![](/user_guides/modeling_algos/images/modeling_algos_image027.jpg "Making Wedges") + +@subsubsection occt_modalg_4_1_3 Rotation object +BRepPrimAPI_MakeOneAxis is a deferred class used as a root class for all classes constructing rotational primitives. Rotational primitives are created by rotating a curve around an axis. They cover the cylinder, the cone, the sphere, the torus, and the revolution, which provides all other curves. + +The particular constructions of these primitives are described, but they all have some common arguments, which are: + + * A system of coordinates, where the Z axis is the rotation axis.. + * An angle in the range [0,2*PI]. + * A vmin, vmax parameter range on the curve. + +The result of the OneAxis construction is a Solid, a Shell, or a Face. The face is the face covering the rotational surface. Remember that you will not use the OneAxis directly but one of the derived classes, which provide improved constructions. The following figure illustrates the OneAxis arguments. + +![](/user_guides/modeling_algos/images/modeling_algos_image028.jpg "MakeOneAxis arguments") + +@subsubsection occt_modalg_4_1_4 Cylinder +BRepPrimAPI_MakeCylinder class allows creating cylindrical primitives. A cylinder is created either in the default coordinate system or in a given coordinate system (gp_Ax2). There are two constructions: + + * Radius and height, to build a full cylinder. + * Radius, height and angle to build a portion of a cylinder. + +The following code builds the cylindrical face of the figure, which is a quarter of cylinder along the Y axis with the origin at X,Y,Z, a length of DY, and a radius R. + +~~~~~ + +Standard_Real X = 20, Y = 10, Z = 15, R = 10, DY = 30; +// Make the system of coordinates +gp_Ax2 axes = gp::ZOX(); +axes.Translate(gp_Vec(X,Y,Z)); +TopoDS_Face F = +BRepPrimAPI_MakeCylinder(axes,R,DY,PI/2.); +~~~~~ +![](/user_guides/modeling_algos/images/modeling_algos_image029.jpg "Cylinder") + +@subsubsection occt_modalg_4_1_5 Cone +BRepPrimAPI_MakeCone class allows creating conical primitives. Like a cylinder, a cone is created either in the default coordinate system or in a given coordinate system (gp_Ax2). There are two constructions: + + * Two radii and height, to build a full cone. One of the radii can be null to make a sharp cone. + * Radii, height and angle to build a truncated cone. + +The following code builds the solid cone of the figure, which is located in the default system with radii R1 and R2 and height H. + +~~~~~ +Standard_Real R1 = 30, R2 = 10, H = 15; +TopoDS_Solid S = BRepPrimAPI_MakeCone(R1,R2,H); +~~~~~ + +![](/user_guides/modeling_algos/images/modeling_algos_image030.jpg "Cone") + +@subsubsection occt_modalg_4_1_6 Sphere +BRepPrimAPI_MakeSphere class allows creating spherical primitives. Like a cylinder, a sphere is created either in the default coordinate system or in a given coordinate system (gp_Ax2). There are four constructions: + + * From a radius - builds a full sphere. + * From a radius and an angle - builds a lune (digon). + * From a radius and two angles - builds a wraparound spherical segment between two latitudes. The angles a1, a2 must follow the relation: PI/2 <= a1 < a2 <= PI/2. + * From a radius and three angles - a combination of two previous methods builds a portion of spherical segment. + +The following code builds four spheres from a radius and three angles. + +~~~~~ +Standard_Real R = 30, ang = + PI/2, a1 = -PI/2.3, a2 = PI/4; +TopoDS_Solid S1 = BRepPrimAPI_MakeSphere(R); +TopoDS_Solid S2 = BRepPrimAPI_MakeSphere(R,ang); +TopoDS_Solid S3 = BRepPrimAPI_MakeSphere(R,a1,a2); +TopoDS_Solid S4 = BRepPrimAPI_MakeSphere(R,a1,a2,ang); +~~~~~ + +Note that we could equally well choose to create Shells instead of Solids. + +![](/user_guides/modeling_algos/images/modeling_algos_image031.jpg "Examples of Spheres") + + +@subsubsection occt_modalg_4_1_7 Torus +BRepPrimAPI_MakeTorus class allows creating toroidal primitives. Like the other primitives, a torus is created either in the default coordinate system or in a given coordinate system (gp_Ax2). There are four constructions similar to the sphere constructions: + + * Two radii - builds a full torus. + * Two radii and an angle - builds an angular torus segment. + * Two radii and two angles - builds a wraparound torus segment between two radial planes. The angles a1, a2 must follow the relation 0 < a2 - a1 < 2*PI. + * Two radii and three angles - a combination of two previous methods builds a portion of torus segment. + +![](/user_guides/modeling_algos/images/modeling_algos_image032.gif "Examples of Tori") + +The following code builds four toroidal shells from two radii and three angles. + +~~~~~ +Standard_Real R1 = 30, R2 = 10, ang = PI, a1 = 0, + a2 = PI/2; +TopoDS_Shell S1 = BRepPrimAPI_MakeTorus(R1,R2); +TopoDS_Shell S2 = BRepPrimAPI_MakeTorus(R1,R2,ang); +TopoDS_Shell S3 = BRepPrimAPI_MakeTorus(R1,R2,a1,a2); +TopoDS_Shell S4 = + BRepPrimAPI_MakeTorus(R1,R2,a1,a2,ang); +~~~~~ + +Note that we could equally well choose to create Solids instead of Shells. + +@subsubsection occt_modalg_4_1_8 Revolution +BRepPrimAPI_MakeRevolution class allows building a uniaxial primitive from a curve. As other uniaxial primitives it can be created in the default coordinate system or in a given coordinate system. + +The curve can be any *Geom_Curve*, provided it is planar and lies in the same plane as the Z-axis of local coordinate system. There are four modes of construction: + + * From a curve, use the full curve and make a full rotation. + * From a curve and an angle of rotation. + * From a curve and two parameters to trim the curve. The two parameters must be growing and within the curve range. + * From a curve, two parameters, and an angle. The two parameters must be growing and within the curve range. + + +@subsection occt_modalg_4_2 Sweeping: Prism, Revolution and Pipe +@subsubsection occt_modalg_4_2_1 Sweeping + +Sweeps are the objects you obtain by sweeping a **profile** along a **path**. The profile can be of any topology. The path is usually a curve or a wire. The profile generates objects according to the following rules: + + * Vertices generate Edges + * Edges generate Faces. + * Wires generate Shells. + * Faces generate Solids. + * Shells generate Composite Solids + +It is forbidden to sweep Solids and Composite Solids. A Compound generates a Compound with the sweep of all its elements. + +![](/user_guides/modeling_algos/images/modeling_algos_image033.jpg "Generating a sweep") + +*BRepPrimAPI_MakeSweep class* is a deferred class used as a root of the the following sweep classes: +* *BRepPrimAPI_MakePrism* - produces a linear sweep +* *BRepPrimAPI_MakeRevol* - produces a rotational sweep +* *BRepPrimAPI_MakePipe* - produces a general sweep. + + +@subsubsection occt_modalg_4_2_2 Prism +BRepPrimAPI_MakePrism class allows creating a linear **prism** from a shape and a vector or a direction. +* A vector allows creating a finite prism; +* A direction allows creating an infinite or semi-infinite prism. The semi-infinite or infinite prism is toggled by a Boolean argument. All constructors have a boolean argument to copy the original shape or share it (by default). +The following code creates a finite, an infinite and a semi-infinite solid using a face, a direction and a length +. +~~~~~ +TopoDS_Face F = ..; // The swept face +gp_Dir direc(0,0,1); +Standard_Real l = 10; +// create a vector from the direction and the length +gp_Vec v = direc; +v *= l; +TopoDS_Solid P1 = BRepPrimAPI_MakePrism(F,v); +// finite +TopoDS_Solid P2 = BRepPrimAPI_MakePrism(F,direc); +// infinite +TopoDS_Solid P3 = BRepPrimAPI_MakePrism(F,direc,Standard_False); +// semi-infinite +~~~~~ + +![](/user_guides/modeling_algos/images/modeling_algos_image034.jpg "Finite, infinite, and semi-infinite prisms") + +@subsubsection occt_modalg_4_2_3 Rotation +BRepPrimAPI_MakeRevol class allows creating a rotational sweep from a shape, an axis (gp_Ax1), and an angle. The angle has a default value of 2*PI which means a closed revolution. + +BRepPrimAPI_MakeRevol constructors have a last argument to copy or share the original shape. The following code creates a a full and a partial rotation using a face, an axis and an angle. + +~~~~~ +TopoDS_Face F = ...; // the profile +gp_Ax1 axis(gp_Pnt(0,0,0),gp_Dir(0,0,1)); +Standard_Real ang = PI/3; +TopoDS_Solid R1 = BRepPrimAPI_MakeRevol(F,axis); +// Full revol +TopoDS_Solid R2 = BRepPrimAPI_MakeRevol(F,axis,ang); +~~~~~ + +![](/user_guides/modeling_algos/images/modeling_algos_image035.jpg "Full and partial rotation") + +@section occt_modalg_5 Boolean Operations + +Boolean operations are used to create new shapes from the combinations of two shapes. +|Fuse | all points in S1 or S2 | +|Common | all points in S1 and S2 | +|Cut S1 by S2| all points in S1 and not in S2 | + +BRepAlgoAPI_BooleanOperation class is the deferred root class for Boolean operations. + +![](/user_guides/modeling_algos/images/modeling_algos_image036.jpg "Boolean Operations") + +@subsection occt_modalg_5_1 Fuse + +BRepAlgoAPI_Fuse performs the Fuse operation. +~~~~~ +TopoDS_Shape A = ..., B = ...; +TopoDS_Shape S = BRepAlgoAPI_Fuse(A,B); +~~~~~ + +@subsection occt_modalg_5_2 Common +BRepAlgoAPI_Common performs the Common operation. + +~~~~~ +TopoDS_Shape A = ..., B = ...; +TopoDS_Shape S = BRepAlgoAPI_Common(A,B); +~~~~~ + +@subsection occt_modalg_5_3 Cut +BRepAlgoAPI_Cut performs the Cut operation. + +~~~~~ +TopoDS_Shape A = ..., B = ...; +TopoDS_Shape S = BRepAlgoAPI_Cut(A,B); +~~~~~ + +@subsection occt_modalg_5_4 Section + +BRepAlgoAPI_Section performs the section, described as a *TopoDS_Compound* made of *TopoDS_Edge*. + +![](/user_guides/modeling_algos/images/modeling_algos_image037.jpg "Section operation") + +~~~~~ +TopoDS_Shape A = ..., TopoDS_ShapeB = ...; +TopoDS_Shape S = BRepAlgoAPI_Section(A,B); +~~~~~ + +@section occt_modalg_6 Fillets and Chamfers +@subsection occt_modalg_6_1 Fillets +@subsection occt_modalg_6_1_1 Fillet on shape + +A fillet is a smooth face replacing a sharp edge. + +*BRepFilletAPI_MakeFillet* class allows filleting a shape. + +To produce a fillet, it is necessary to define the filleted shape at the construction of the class and add fillet descriptions using the *Add* method. +A fillet description contains an edge and a radius. The edge must be shared by two faces. The fillet is automatically extended to all edges in a smooth continuity with the original edge. +It is not an error to Add a fillet twice, the last description holds. + +![](/user_guides/modeling_algos/images/modeling_algos_image038.jpg "Filleting two edges using radii r1 and r2.") + +In the following example a filleted box with dimensions a,b,c and radius r is created. + +Constant radius +---------------- + +~~~~~ +#include +#include +#include +#include +#include +#include + +TopoDS_Shape FilletedBox(const Standard_Real a, + const Standard_Real b, + const Standard_Real c, + const Standard_Real r) +{ + TopoDS_Solid Box = BRepPrimAPI_MakeBox(a,b,c); + BRepFilletAPI_MakeFillet MF(Box); + + // add all the edges to fillet + TopExp_Explorer ex(Box,TopAbs_EDGE); + while (ex.More()) + { + MF.Add(r,TopoDS::Edge(ex.Current())); + ex.Next(); + } + return MF.Shape(); + } +~~~~~ + +![](/user_guides/modeling_algos/images/modeling_algos_image039.jpg "Fillet with constant radius") + +Changing radius +--------------- + +~~~~~ +void CSampleTopologicalOperationsDoc::OnEvolvedblend1() +{ + TopoDS_Shape theBox = BRepPrimAPI_MakeBox(200,200,200); + + BRepFilletAPI_MakeFillet Rake(theBox); + ChFi3d_FilletShape FSh = ChFi3d_Rational; + Rake.SetFilletShape(FSh); + + TColgp_Array1OfPnt2d ParAndRad(1, 6); + ParAndRad(1).SetCoord(0., 10.); + ParAndRad(1).SetCoord(50., 20.); + ParAndRad(1).SetCoord(70., 20.); + ParAndRad(1).SetCoord(130., 60.); + ParAndRad(1).SetCoord(160., 30.); + ParAndRad(1).SetCoord(200., 20.); + + TopExp_Explorer ex(theBox,TopAbs_EDGE); + Rake.Add(ParAndRad, TopoDS::Edge(ex.Current())); + TopoDS_Shape evolvedBox = Rake.Shape(); +} +~~~~~ + +![](/user_guides/modeling_algos/images/modeling_algos_image040.jpg "Fillet with changing radius") + +@subsection occt_modalg_6_1_2 Chamfer + +A chamfer is a rectilinear edge replacing a sharp vertex of the face. + +The use of *BRepFilletAPI_MakeChamfer* class is similar to the use of *BRepFilletAPI_MakeFillet*, except for the following: + +*The surfaces created are ruled and not smooth. +*The *Add* syntax for selecting edges requires one or two distances, one edge and one face (contiguous to the edge): + +~~~~~ +Add(dist, E, F) +Add(d1, d2, E, F) with d1 on the face F. +~~~~~ + +![](/user_guides/modeling_algos/images/modeling_algos_image041.jpg "Chamfer") + +@subsection occt_modalg_6_1_3 Fillet on a planar face + +BRepFilletAPI_MakeFillet2d class allows constructing fillets and chamfers on planar faces. +To create a fillet on planar face: define it, indicate, which vertex is to be deleted, and give the fillet radius with *AddFillet* method. +A chamfer can be calculated with *AddChamfer* method. It can be described by + * two edges and two distances + * one edge, one vertex, one distance and one angle. +Fillets and chamfers are calculated when addition is complete. + +If face F2 is created by 2D fillet and chamfer builder from face F1, the builder can be rebuilt (the builder recovers the status it had before deletion). To do so, use the following syntax: +~~~~~ +BRepFilletAPI_MakeFillet2d builder; +builder.Init(F1,F2); +~~~~~ + +Planar Fillet +------------- + +~~~~~ +#include “BRepPrimAPI_MakeBox.hxx” +#include “TopoDS_Shape.hxx” +#include “TopExp_Explorer.hxx” +#include “BRepFilletAPI_MakeFillet2d.hxx” +#include “TopoDS.hxx” +#include “TopoDS_Solid.hxx” + +TopoDS_Shape FilletFace(const Standard_Real a, + const Standard_Real b, + const Standard_Real c, + const Standard_Real r) + +{ + TopoDS_Solid Box = BRepPrimAPI_MakeBox (a,b,c); + TopExp_Explorer ex1(Box,TopAbs_FACE); + + const TopoDS_Face& F = TopoDS::Face(ex1.Current()); + BRepFilletAPI_MakeFillet2d MF(F); + TopExp_Explorer ex2(F, TopAbs_VERTEX); + while (ex2.More()) + { + MF.AddFillet(TopoDS::Vertex(ex2.Current()),r); + ex2.Next(); + } + // while... + return MF.Shape(); +} +~~~~~ + +@section occt_modalg_7 Offsets, Drafts, Pipes and Evolved shapes +@subsection occt_modalg_7_1 Shelling + +Shelling is used to offset given faces of a solid by a specific value. It rounds or intersects adjacent faces along its edges depending on the convexity of the edge. + +The constructor *BRepOffsetAPI_MakeThickSolid* shelling operator takes the solid, the list of faces to remove and an offset value as input. + +~~~~~ +TopoDS_Solid SolidInitial = ...; + +Standard_Real Of = ...; +TopTools_ListOfShape LCF; +TopoDS_Shape Result; +Standard_Real Tol = Precision::Confusion(); + +for (Standard_Integer i = 1 ;i <= n; i++) { + TopoDS_Face SF = ...; // a face from SolidInitial + LCF.Append(SF); +} + +Result = BRepOffsetAPI_MakeThickSolid (SolidInitial, + LCF, + Of, + Tol); +~~~~~ + +![](/user_guides/modeling_algos/images/modeling_algos_image042.jpg "Shelling") + + +@subsection occt_modalg_7_2 Draft Angle + +*BRepOffsetAPI_DraftAngle* class allows modifying a shape by applying draft angles to its planar, cylindrical and conical faces. +The class is created or initialized from a shape, then faces to be modified are added; for each face, three arguments are used: + + * Direction: the direction with which the draft angle is measured + * Angle: value of the angle + * Neutral plane: intersection between the face and the neutral plane is invariant. + +The following code places a draft angle on several faces of a shape; the same direction, angle and neutral plane are used for each face: + +~~~~~ +TopoDS_Shape myShape = ... +// The original shape +TopTools_ListOfShape ListOfFace; +// Creation of the list of faces to be modified +... + +gp_Dir Direc(0.,0.,1.); +// Z direction +Standard_Real Angle = 5.*PI/180.; +// 5 degree angle +gp_Pln Neutral(gp_Pnt(0.,0.,5.), Direc); +// Neutral plane Z=5 +BRepOffsetAPI_DraftAngle theDraft(myShape); +TopTools_ListIteratorOfListOfShape itl; +for (itl.Initialize(ListOfFace); itl.More(); itl.Next()) { + theDraft.Add(TopoDS::Face(itl.Value()),Direc,Angle,Neutral); + if (!theDraft.AddDone()) { + // An error has occurred. The faulty face is given by // ProblematicShape + break; + } +} +if (!theDraft.AddDone()) { + // An error has occurred + TopoDS_Face guilty = theDraft.ProblematicShape(); + ... +} +theDraft.Build(); +if (!theDraft.IsDone()) { + // Problem encountered during reconstruction + ... +} +else { + TopoDS_Shape myResult = theDraft.Shape(); + ... +} +~~~~~ + +![](/user_guides/modeling_algos/images/modeling_algos_image043.jpg "DraftAngle") + +@subsection occt_modalg_7_3 Pipe Constructor + +*BRepOffsetAPI_MakePipe* class allows creating a pipe from a Spine, which is a Wire and a Profile which is a Shape. This implementation is limited to spines with smooth transitions, sharp transitions are precessed by *BRepOffsetAPI_MakePipeShell*. To be more precise the continuity must be G1, which means that the tangent must have the same direction, though not necessarily the same magnitude, at neighboring edges. +The angle between the spine and the profile is preserved throughout the pipe. + +~~~~~ +TopoDS_Wire Spine = ...; +TopoDS_Shape Profile = ...; +TopoDS_Shape Pipe = BRepOffsetAPI_MakePipe(Spine,Profile); +~~~~~ + +![](/user_guides/modeling_algos/images/modeling_algos_image044.jpg "Example of a Pipe") + +@subsection occt_modalg_7_4 Evolved Solid + +*BRepOffsetAPI_MakeEvolved* class allows creating an evolved solid from a Spine (planar face or wire) and a profile (wire). +The evolved solid is an unlooped sweep generated by the spine and the profile. +The evolved solid is created by sweeping the profile’s reference axes on the spine. The origin of the axes moves to the spine, the X axis and the local tangent coincide and the Z axis is normal to the face. + +The reference axes of the profile can be defined following two distinct modes: + +* The reference axes of the profile are the origin axes. +* The references axes of the profile are calculated as follows: + + the origin is given by the point on the spine which is the closest to the profile + + the X axis is given by the tangent to the spine at the point defined above + + the Z axis is the normal to the plane which contains the spine. + +~~~~~ +TopoDS_Face Spine = ...; +TopoDS_Wire Profile = ...; +TopoDS_Shape Evol = +BRepOffsetAPI_MakeEvolved(Spine,Profile); +~~~~~ + +@section occt_modalg_8 Sewing operators +@subsection occt_modalg_8_1 Sewing + +*BRepOffsetAPI_Sewing* class allows sewing TopoDS Shapes together along their common edges. The edges can be partially shared as in the following example. + +![](/user_guides/modeling_algos/images/modeling_algos_image045.jpg "Shapes with partially shared edges") + +The constructor takes as arguments the tolerance (default value is 10-6) and a flag, which is used to mark the degenerate shapes. +The following methods are used in this class: +* *Add* adds shapes, as it is needed; +* *Perform* forces calculation of the sewed shape. +* *SewedShape* returns the result. +Additional methods can be used to give information on the number of free boundaries, multiple edges and degenerate shapes. + +@subsection occt_modalg_8_2 Find Contiguous Edges +*BRepOffsetAPI_FindContiguousEdges* class is used to find edges, which coincide among a set of shapes within the given tolerance; these edges can be analyzed for tangency, continuity (C1, G2, etc.)... + +The constructor takes as arguments the tolerance defining the edge proximity (10-6 by default) and a flag used to mark degenerated shapes. +The following methods are used in this class: +* *Add* adds shapes, which are to be analyzed; +* *NbEdges* returns the total number of edges; +* *NbContiguousEdges* returns the number of contiguous edges within the given tolerance as defined above; +* *ContiguousEdge* takes an edge number as an argument and returns the *TopoDS* edge contiguous to another edge; +* *ContiguousEdgeCouple* gives all edges or sections, which are common to the edge with the number given above. +* *SectionToBoundary* finds the original edge on the original shape from the section. + +@section occt_modalg_9 Features + +@subsection occt_modalg_9_1 The BRepFeat Classes and their use +BRepFeat package is used to manipulate extensions of the classical boundary representation of shapes closer to features. In that sense, BRepFeat is an extension of BRepBuilderAPI package. + +@subsubsection occt_modalg_9_1_1 Form classes +The Form from BRepFeat class is a deferred class used as a root for form features. It inherits MakeShape from BRepBuilderAPI and provides implementation of methods keep track of all sub-shapes. + +MakePrism +--------- +MakePrism from BRepFeat class is used to build a prism interacting with a shape. It is created or initialized from + * a shape (the basic shape), + * the base of the prism, + * a face (the face of sketch on which the base has been defined and used to determine whether the base has been defined on the basic shape or not), + * a direction, + * a Boolean indicating the type of operation (fusion=protrusion or cut=depression) on the basic shape, + * another Boolean indicating if the self-intersections have to be found (not used in every case). + +There are six Perform methods: + +|Perform(Height)       | The resulting prism is of the given length. | +|Perform(Until)        | The prism is defined between the position of the base and the given face. | +|Perform(From, Until)  | The prism is defined between the two faces From and Until. | +|PerformUntilEnd()     | The prism is semi-infinite, limited by the actual position of the base. | +|PerformFromEnd(Until) | The prism is semi-infinite, limited by the face Until. | +| PerformThruAll()     | The prism is infinite. In the case of a depression, the result is similar to a cut with an infinite prism. In the case of a protrusion, infinite parts are not kept in the result. | + +**Note** *Add* method can be used before *Perform* methods to indicate that a face generated by an edge slides onto a face of the base shape. + +In the following sequence, a protrusion is performed, i.e. a face of the shape is changed into a prism. + +~~~~~ +TopoDS_Shape Sbase = ...;  // an initial shape +TopoDS_Face Fbase = ....; // a base of prism + +gp_Dir Extrusion (.,.,.); + +// An empty face is given as the sketch face + +BRepFeat_MakePrism thePrism(Sbase, Fbase, TopoDS_Face(), Extrusion, Standard_True, Standard_True); + +thePrism, Perform(100.); +if (thePrism.IsDone()) { + TopoDS_Shape theResult = thePrism; + ... +} +~~~~~ + +![](/user_guides/modeling_algos/images/modeling_algos_image047.jpg "Fusion with MakePrism") + +![](/user_guides/modeling_algos/images/modeling_algos_image048.jpg "Creating a prism between two faces with Perform(From, Until)") + +MakeDPrism +---------- +MakeDPrism from BRepFeat class is used to build draft prism topologies interacting with a basis shape . These can be depressions or protrusions. A class object is created or initialized from + * a shape (basic shape), + * the base of the prism, + * a face (face of sketch on which the base has been defined and used to determine whether the base has been defined on the basic shape or not), + * an angle, + * a Boolean indicating the type of operation (fusion=protrusion or cut=depression) on the basic shape, + * another Boolean indicating if self-intersections have to be found (not used in every case). + +Evidently the input data for MakeDPrism are the same as for MakePrism except for a new parameter Angle and a missing parameter Direction: the direction of the prism generation is determined automatically as the normal to the base of the prism. +The semantics of draft prism feature creation is based on the construction of shapes: + * along a length + * up to a limiting face + * from a limiting face to a height. + +The shape defining construction of the draft prism feature can be either the supporting edge or the concerned area of a face. + +In case of the supporting edge, this contour can be attached to a face of the basis shape by binding. When the contour is bound to this face, the information that the contour will slide on the face becomes available to the relevant class methods. +In case of the concerned area of a face, it is possible to cut it out and move it to a different height, which will define the limiting face of a protrusion or depression direction . + +The *Perform* methods are the same as for *MakePrism*. + +~~~~~ +TopoDS_Shape S = BRepPrimAPI_MakeBox(400.,250.,300.); +TopExp_Explorer Ex; +Ex.Init(S,TopAbs_FACE); +Ex.Next(); +Ex.Next(); +Ex.Next(); +Ex.Next(); +Ex.Next(); +TopoDS_Face F = TopoDS::Face(Ex.Current()); +Handle(Geom_Surface) surf = BRep_Tool::Surface(F); +gp_Circ2d +c(gp_Ax2d(gp_Pnt2d(200.,130.),gp_Dir2d(1.,0.)),50.); +BRepBuilderAPI_MakeWire MW; +Handle(Geom2d_Curve) aline = new Geom2d_Circle(c); +MW.Add(BRepBuilderAPI_MakeEdge(aline,surf,0.,PI)); +MW.Add(BRepBuilderAPI_MakeEdge(aline,surf,PI,2.*PI)); +BRepBuilderAPI_MakeFace MKF; +MKF.Init(surf,Standard_False); +MKF.Add(MW.Wire()); +TopoDS_Face FP = MKF.Face(); +BRepLib::BuildCurves3d(FP); +BRepFeat_MakeDPrism MKDP (S,FP,F,10*PI180,Standard_True, + Standard_True); +MKDP.Perform(200); +TopoDS_Shape res1 = MKDP.Shape(); +~~~~~ + +![](/user_guides/modeling_algos/images/modeling_algos_image049.jpg "A tapered prism") + +MakeRevol +--------- +The MakeRevol from BRepFeat class is used to build a revolution interacting with a +shape. It is created or initialized from + + * a shape (the basic shape,) + * the base of the revolution, + * a face (the face of sketch on which the base has been defined and used to determine whether the base has been defined on the basic shape or not), + * an axis of revolution, + * a boolean indicating the type of operation (fusion=protrusion or cut=depression) on the basic shape, + * another boolean indicating whether the self-intersections have to be found (not used in every case). + +There are four Perform methods: +|Perform(Angle)       | The resulting revolution is of the given magnitude. | +|Perform(Until)       |The revolution is defined between the actual position of the base and the given face. | +|Perform(From, Until) | The revolution is defined between the two faces, From and Until. | +|PerformThruAll()     |          The result is similar to Perform(2*PI). | + +**Note** *Add* method can be used before *Perform* methods to indicate that a face generated by an edge slides onto a face of the base shape. + + +In the following sequence, a face is revolved and the revolution is limited by a face of the base shape. + +~~~~~ +TopoDS_Shape Sbase = ...;  // an initial shape +TopoDS_Face Frevol = ....; // a base of prism +TopoDS_Face FUntil = ....; // face limiting the revol + +gp_Dir RevolDir (.,.,.); +gp_Ax1 RevolAx(gp_Pnt(.,.,.), RevolDir); + +// An empty face is given as the sketch face + +BRepFeat_MakeRevol theRevol(Sbase, Frevol, TopoDS_Face(), RevolAx, Standard_True, Standard_True); + +theRevol.Perform(FUntil); +if (theRevol.IsDone()) { + TopoDS_Shape theResult = theRevol; + ... +} +~~~~~ + +MakePipe +-------- +This method constructs compound shapes with pipe features: depressions or protrusions. A class object is created or initialized from + * a shape (basic shape), + * a base face (profile of the pipe) + * a face (face of sketch on which the base has been defined and used to determine whether the base has been defined on the basic shape or not), + * a spine wire + * a Boolean indicating the type of operation (fusion=protrusion or cut=depression) on the basic shape, + * another Boolean indicating if self-intersections have to be found (not used in every case). + +There are three Perform methods: + +| Perform()            | The pipe is defined along the entire path (spine wire) | +| Perform(Until)       | The pipe is defined along the path until a given face | +| Perform(From, Until) | The pipe is defined between the two faces From and Until | + +~~~~~ +TopoDS_Shape S = BRepPrimAPI_MakeBox(400.,250.,300.); +TopExp_Explorer Ex; +Ex.Init(S,TopAbs_FACE); +Ex.Next(); +Ex.Next(); +TopoDS_Face F1 = TopoDS::Face(Ex.Current()); +Handle(Geom_Surface) surf = BRep_Tool::Surface(F1); +BRepBuilderAPI_MakeWire MW1; +gp_Pnt2d p1,p2; +p1 = gp_Pnt2d(100.,100.); +p2 = gp_Pnt2d(200.,100.); +Handle(Geom2d_Line) aline = GCE2d_MakeLine(p1,p2).Value(); + +MW1.Add(BRepBuilderAPI_MakeEdge(aline,surf,0.,p1.Distance(p2))); +p1 = p2; +p2 = gp_Pnt2d(150.,200.); +aline = GCE2d_MakeLine(p1,p2).Value(); + +MW1.Add(BRepBuilderAPI_MakeEdge(aline,surf,0.,p1.Distance(p2))); +p1 = p2; +p2 = gp_Pnt2d(100.,100.); +aline = GCE2d_MakeLine(p1,p2).Value(); + +MW1.Add(BRepBuilderAPI_MakeEdge(aline,surf,0.,p1.Distance(p2))); +BRepBuilderAPI_MakeFace MKF1; +MKF1.Init(surf,Standard_False); +MKF1.Add(MW1.Wire()); +TopoDS_Face FP = MKF1.Face(); +BRepLib::BuildCurves3d(FP); +TColgp_Array1OfPnt CurvePoles(1,3); +gp_Pnt pt = gp_Pnt(150.,0.,150.); +CurvePoles(1) = pt; +pt = gp_Pnt(200.,100.,150.); +CurvePoles(2) = pt; +pt = gp_Pnt(150.,200.,150.); +CurvePoles(3) = pt; +Handle(Geom_BezierCurve) curve = new Geom_BezierCurve +(CurvePoles); +TopoDS_Edge E = BRepBuilderAPI_MakeEdge(curve); +TopoDS_Wire W = BRepBuilderAPI_MakeWire(E); +BRepFeat_MakePipe MKPipe (S,FP,F1,W,Standard_False, +Standard_True); +MKPipe.Perform(); +TopoDS_Shape res1 = MKPipe.Shape(); +~~~~~ + +![](/user_guides/modeling_algos/images/modeling_algos_image050.jpg "Pipe depression") + +@subsubsection occt_modalg_9_1_2 Linear Form +-------------- +*MakeLinearForm* class creates a rib or a groove along a planar surface. +The semantics of mechanical features is built around giving thickness to a contour. This thickness can either be symmetrical - on one side of the contour - or dissymmetrical - on both sides. As in the semantics of form features, the thickness is defined by construction of shapes in specific contexts. + +The development contexts differ, however, in the case of mechanical features. +Here they include extrusion: + * to a limiting face of the basis shape; + * to or from a limiting plane; + * to a height. +A class object is created or initialized from + * a shape (basic shape); + * a wire (base of rib or groove); + * a plane (plane of the wire); + * direction1 (a vector along which thickness will be built up); + * direction2 (vector opposite to the previous one along which thickness will be built up, may be null); + * a Boolean indicating the type of operation (fusion=rib or cut=groove) on the basic shape; + * another Boolean indicating if self-intersections have to be found (not used in every case). + +There is one Perform() method, which performs a prism from the wire along the direction1 and direction2 interacting base shape Sbase. The height of the prism is Magnitude(Direction1)+Magnitude(direction2). + +~~~~~ +BRepBuilderAPI_MakeWire mkw; +gp_Pnt p1 = gp_Pnt(0.,0.,0.); +gp_Pnt p2 = gp_Pnt(200.,0.,0.); +mkw.Add(BRepBuilderAPI_MakeEdge(p1,p2)); +p1 = p2; +p2 = gp_Pnt(200.,0.,50.); +mkw.Add(BRepBuilderAPI_MakeEdge(p1,p2)); +p1 = p2; +p2 = gp_Pnt(50.,0.,50.); +mkw.Add(BRepBuilderAPI_MakeEdge(p1,p2)); +p1 = p2; +p2 = gp_Pnt(50.,0.,200.); +mkw.Add(BRepBuilderAPI_MakeEdge(p1,p2)); +p1 = p2; +p2 = gp_Pnt(0.,0.,200.); +mkw.Add(BRepBuilderAPI_MakeEdge(p1,p2)); +p1 = p2; +mkw.Add(BRepBuilderAPI_MakeEdge(p2,gp_Pnt(0.,0.,0.))); +TopoDS_Shape S = BRepBuilderAPI_MakePrism(BRepBuilderAPI_MakeFace + (mkw.Wire()),gp_Vec(gp_Pnt(0.,0.,0.),gp_P +  nt(0.,100.,0.))); +TopoDS_Wire W = BRepBuilderAPI_MakeWire(BRepBuilderAPI_MakeEdge(gp_Pnt + (50.,45.,100.), +gp_Pnt(100.,45.,50.))); +Handle(Geom_Plane) aplane = + new Geom_Plane(gp_Pnt(0.,45.,0.), gp_Vec(0.,1.,0.)); +BRepFeat_MakeLinearForm aform(S, W, aplane, gp_Dir + (0.,5.,0.), gp_Dir(0.,-3.,0.), 1, Standard_True); +aform.Perform(); +TopoDS_Shape res = aform.Shape(); +~~~~~ + +![](/user_guides/modeling_algos/images/modeling_algos_image051.jpg "Creating a rib") + +@subsubsection occt_modalg_9_1_3 Gluer + +The Gluer from BRepFeat class allows gluing two solids along faces. The contact faces of the glued shape must not have parts outside the contact faces of the basic shape. +The class is created or initialized from two shapes: the “glued” shape and the basic shape (on which the other shape is glued). +Two Bind methods are used to bind a face of the glued shape to a face of the basic shape and an edge of the glued shape to an edge of the basic shape. + +**Note** Every face and edge has to be bounded, if two edges of two glued faces are coincident they must be explicitly bounded. + +~~~~~ +TopoDS_Shape Sbase = ...; // the basic shape +TopoDS_Shape Sglued = ...; // the glued shape + +TopTools_ListOfShape Lfbase; +TopTools_ListOfShape Lfglued; +// Determination of the glued faces +... + +BRepFeat_Gluer theGlue(Sglue, Sbase); +TopTools_ListIteratorOfListOfShape itlb(Lfbase); +TopTools_ListIteratorOfListOfShape itlg(Lfglued); +for (; itlb.More(); itlb.Next(), itlg(Next()) { +const TopoDS_Face& f1 = TopoDS::Face(itlg.Value()); +const TopoDS_Face& f2 = TopoDS::Face(itlb.Value()); +theGlue.Bind(f1,f2); +// for example, use the class FindEdges from LocOpe to +// determine coincident edges +LocOpe_FindEdge fined(f1,f2); +for (fined.InitIterator(); fined.More(); fined.Next()) { +theGlue.Bind(fined.EdgeFrom(),fined.EdgeTo()); +} +} +theGlue.Build(); +if (theGlue.IsDone() { +TopoDS_Shape theResult = theGlue; +... +} +~~~~~ + +@subsubsection occt_modalg_9_1_3 Split Shape + +SplitShape from BRepFeat class is used to split faces of a shape with wires or edges. The shape containing the new entities is rebuilt, sharing the unmodified ones. + +The class is created or initialized from a shape (the basic shape). +Three Add methods are available: + +| Add(Wire, Face) | Adds a new wire on a face of the basic shape. | +| Add(Edge, Face)  | Adds a new edge on a face of the basic shape. | +| Add(EdgeNew, EdgeOld) | Adds a new edge on an existing one (the old edge must contain the new edge). | + +**Note** The added wires and edges must define closed wires on faces or wires located between two existing edges. Existing edges must not be intersected. + +~~~~~ +TopoDS_Shape Sbase = ...; // basic shape +TopoDS_Face Fsplit = ...; // face of Sbase +TopoDS_Wire Wsplit = ...; // new wire contained in Fsplit +BRepFeat_SplitShape Spls(Sbase); +Spls.Add(Wsplit, Fsplit); +TopoDS_Shape theResult = Spls; +... +~~~~~ + + +@section occt_modalg_10 Hidden Line Removal + +To provide the precision required in industrial design, drawings need to offer the possibility of removing lines, which are hidden in a given projection. + +For this the Hidden Line Removal component provides two algorithms: HLRBRep_Algo and HLRBRep_PolyAlgo. + +These algorithms are based on the principle of comparing each edge of the shape to be visualized with each of its faces, and calculating the visible and the hidden parts of each edge. Note that these are not the algorithms used in generating shading, which calculate the visible and hidden parts of each face in a shape to be visualized by comparing each face in the shape with every other face in the same shape. +These algorithms operate on a shape and remove or indicate edges hidden by faces. For a given projection, they calculate a set of lines characteristic of the object being represented. They are also used in conjunction with extraction utilities, which reconstruct a new, simplified shape from a selection of the results of the calculation. This new shape is made up of edges, which represent the shape visualized in the projection. + +HLRBRep_Algo takes the shape itself into account whereas HLRBRep_PolyAlgo works with a polyhedral simplification of the shape. When you use HLRBRep_Algo, you obtain an exact result, whereas, when you use HLRBRep_PolyAlgo, you reduce the computation time. + +No smoothing algorithm is provided. Consequently, a polyhedron will be treated as such and the algorithms will give the results in form of line segments conforming to the mathematical definition of the polyhedron. This is always the case with HLRBRep_PolyAlgo. + +HLRBRep_Algo and HLRBRep_PolyAlgo can deal with any kind of object, for example, assemblies of volumes, surfaces, and lines, as long as there are no unfinished objects or points within it. + +However, there some restrictions in HLR use: + * Points are not processed; + * Z-clipping planes are not used; + * Infinite faces or lines are not processed. + + +![](/user_guides/modeling_algos/images/modeling_algos_image052.jpg "Sharp, smooth and sewn edges in a simple screw shape") + +![](/user_guides/modeling_algos/images/modeling_algos_image053.jpg "Outline edges and isoparameters in the same shape") + +![](/user_guides/modeling_algos/images/modeling_algos_image054.jpg "A simple screw shape seen with shading") + +![](/user_guides/modeling_algos/images/modeling_algos_image055.jpg "An extraction showing hidden sharp edges") + + +@subsection occt_modalg_10_2 Services +The following services are related to Hidden Lines Removal : + +Loading Shapes +-------------- +To pass a *TopoDS_Shape* to an *HLRBRep_Algo* object, use *HLRBRep_Algo::Add*. With an *HLRBRep_PolyAlgo* object, use *HLRBRep_PolyAlgo::Load*. If you wish to add several shapes, use Add or Load as often as necessary. + +Setting view parameters +----------------------- +HLRBRep_Algo::Projector and HLRBRep_PolyAlgo::Projector set a projector object which defines the parameters of the view. This object is an HLRAlgo_Projector. + +Computing the projections +------------------------- +HLRBRep_PolyAlgo::Update launches the calculation of outlines of the shape visualized by the HLRBRep_PolyAlgo framework. +In the case of HLRBRep_Algo, use HLRBRep_Algo::Update. With this algorithm, you must also call the method HLRBRep_Algo::Hide to calculate visible and hidden lines of the shape to be visualized. With an HLRBRep_PolyAlgo object, visible and hidden lines are computed by HLRBRep_PolyHLRToShape. + +Extracting edges +---------------- +The classes HLRBRep_HLRToShape and HLRBRep_PolyHLRToShape present a range of extraction filters for an HLRBRep_Algo object and an HLRBRep_PolyAlgo object, respectively. They highlight the type of edge from the results calculated by the algorithm on a shape. With both extraction classes, you can highlight the following types of output: + * visible/hidden sharp edges; + * visible/hidden smooth edges; + * visible/hidden sewn edges; + * visible/hidden outline edges. + +To perform extraction on an *HLRBRep_PolyHLRToShape* object, use *HLRBRep_PolyHLRToShape::Update* function. +For an *HLRBRep_HLRToShape* object built from an *HLRBRepAlgo* object you can also highlight: + * visible isoparameters and + * hidden isoparameters. + +@subsection occt_modalg_10_3 Examples + +HLRBRep_Algo +------------ +~~~~~ +// Build The algorithm object +myAlgo = new HLRBRep_Algo(); + +// Add Shapes into the algorithm +TopTools_ListIteratorOfListOfShape anIterator(myListOfShape); +for (;anIterator.More();anIterator.Next()) +myAlgo-Add(anIterator.Value(),myNbIsos); + +// Set The Projector (myProjector is a +HLRAlgo_Projector) +myAlgo-Projector(myProjector); + +// Build HLR +myAlgo->Update(); + +// Set The Edge Status +myAlgo->Hide(); + +// Build the extraction object : +HLRBRep_HLRToShape aHLRToShape(myAlgo); + +// extract the results : +TopoDS_Shape VCompound           = aHLRToShape.VCompound(); +TopoDS_Shape Rg1LineVCompound                            = +aHLRToShape.Rg1LineVCompound(); +TopoDS_Shape RgNLineVCompound                            = +aHLRToShape.RgNLineVCompound(); +TopoDS_Shape OutLineVCompound                            = +aHLRToShape.OutLineVCompound(); +TopoDS_Shape IsoLineVCompound                            = +aHLRToShape.IsoLineVCompound(); +TopoDS_Shape HCompound           = aHLRToShape.HCompound(); +TopoDS_Shape Rg1LineHCompound                            = +aHLRToShape.Rg1LineHCompound(); +TopoDS_Shape RgNLineHCompound                            = +aHLRToShape.RgNLineHCompound(); +TopoDS_Shape OutLineHCompound                            = +aHLRToShape.OutLineHCompound(); +TopoDS_Shape IsoLineHCompound                            = +aHLRToShape.IsoLineHCompound(); +~~~~~ + +HLRBRep_PolyAlgo +---------------- + +~~~~~ + +// Build The algorithm object +myPolyAlgo = new HLRBRep_PolyAlgo(); + +// Add Shapes into the algorithm +TopTools_ListIteratorOfListOfShape +anIterator(myListOfShape); +for (;anIterator.More();anIterator.Next()) +myPolyAlgo-Load(anIterator.Value()); + +// Set The Projector (myProjector is a +HLRAlgo_Projector) +myPolyAlgo->Projector(myProjector); + +// Build HLR +myPolyAlgo->Update(); + +// Build the extraction object : +HLRBRep_PolyHLRToShape aPolyHLRToShape; +aPolyHLRToShape.Update(myPolyAlgo); + +// extract the results : +TopoDS_Shape VCompound = +aPolyHLRToShape.VCompound(); +TopoDS_Shape Rg1LineVCompound = +aPolyHLRToShape.Rg1LineVCompound(); +TopoDS_Shape RgNLineVCompound = +aPolyHLRToShape.RgNLineVCompound(); +TopoDS_Shape OutLineVCompound = +aPolyHLRToShape.OutLineVCompound(); +TopoDS_Shape HCompound = +aPolyHLRToShape.HCompound(); +TopoDS_Shape Rg1LineHCompound = +aPolyHLRToShape.Rg1LineHCompound(); +TopoDS_Shape RgNLineHCompound = +aPolyHLRToShape.RgNLineHCompound(); +TopoDS_Shape OutLineHCompound = +aPolyHLRToShape.OutLineHCompound(); +~~~~~ + +@section occt_modalg_10_4 Meshing of Shapes + +The *HLRBRep_PolyAlgo* algorithm works with triangulation of shapes. This is provided by the function *BRepMesh::Mesh*, which adds a triangulation of the shape to its topological data structure. This triangulation is computed with a given deflection. + +~~~~~ +Standard_Real radius=10. ; +Standard_Real height=25. ; +BRepBuilderAPI_MakeCylinder myCyl (radius, height) ; +TopoDS_Shape myShape = myCyl.Shape() ; +Standard_Real Deflection = 0.01 ; +BRepMesh::Mesh (myShape, Deflection); +~~~~~ + +Meshing covers a shape with a triangular mesh. Other than hidden line removal, you can use meshing to transfer the shape to another tool: a manufacturing tool, a shading algorithm, a finite element algorithm, or a collision algorithm, for example. + +You can obtain information on the shape by first exploring it. To then access triangulation of a face in the shape, use *BRepTool::Triangulation*. To access a polygon which is the approximation of an edge of the face, use *BRepTool::PolygonOnTriangulation*. \ No newline at end of file diff --git a/dox/user_guides/modeling_data/images/modeling_data_image001.jpg b/dox/user_guides/modeling_data/images/modeling_data_image001.jpg new file mode 100644 index 0000000000000000000000000000000000000000..b81c818e931a3b5936193e50b1e6439d9065c452 GIT binary patch literal 6951 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 literal 0 HcmV?d00001 diff --git a/dox/user_guides/modeling_data/images/modeling_data_image002.jpg b/dox/user_guides/modeling_data/images/modeling_data_image002.jpg new file mode 100644 index 0000000000000000000000000000000000000000..5f87a335b2723b73a30c3bb9dc9575270dab7bac GIT binary patch literal 3610 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 literal 0 HcmV?d00001 diff --git a/dox/user_guides/modeling_data/images/modeling_data_image005.jpg b/dox/user_guides/modeling_data/images/modeling_data_image005.jpg new file mode 100644 index 0000000000000000000000000000000000000000..701c2f1e7a52595ade8ef2942909afaf555d61cc GIT binary patch literal 20440 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 pD*u9YNFM?@H5d8I6%Y4BIVU|khvjZUw(Y zAQ_P;L5fUOm-n5%=N$XqJKpKO-LJ=ZXV;iN*4n$)-gButR$S))##(zoj z(nW4@)hm*63d+jLe4^L2)D&;XC@Cxa7z9L0Mn*|N$wp1hrXa{IsPLyR>}!CA7#PR9 z1O{;fcr+j|4G7x}Z~_2`0Qa>&KKR!Qga^haAS5CtAtl2-fTRZSKwvN)KA3<2A0PL0 z816oRPeX9w;uTdwT0J`=Zf`n?$g~1to@+Io^!md)yjO4gM3Im(FfuW-@bL=>Ub-wP zB`qT>C$Dy0T|@JR)=dLLBV!X&Gjsbp4vtRFF0Q_Q{sDnO!6DK2V`AeTJd97zc=R|k z>q&M_VNr3(^U|{N7q4pTko66XP0eq*x_f&2-oAT3GCDSnnwb1FwXnFf{AK0q>e~A5 z-uHdT7#Bq!vdsVJLmRAKf&hcLglbP`n^Kf#0xB7 zzUBBKut2EZ?>vfrWLSl5;;)kz z72W@0dXX!ox81E85o&=2xWj9)fHf@^SS4(~nNL-YVZ#FNl!hT2<1mCDvi~PM01D#; z{~dy-@NlWVAwAgi^7WX>yw~J8dz{g;mof}?t=l}j`C)Zzvl^Ab_|n8!p#8>K#jB&z zif5d!VrKU_<2(zLnh(cEL0-1Hl+0!92`}(s0q=H$6E+MT2<<=@v62}< zDp>fZMMCjsoBUUr39Mi?Bw0;8%~y}OlXbWEbe!!eVJGwa39Y4O9ByK@`=Q-5md-D4 zWHzTfCgy9uzLz@hyRLQSHX@Y0lXVuWh+BwuHs?j`fL~f+Z+yJ?3vuN~>q1Fm=!t~x zzysf-#I-b)nqWP|t9LCv%jq}s_CcTYEH{F3*d>U$o6_BS^QaGMD{WbO1z73GfzQ<( zaY{*sb-Q67jT{vm@pypJu4A zJ~EM`O7t)j#Xs0)?e$W%N&4!f-K&PkvZxQ;BN7@)Q4nZvNvKlj--0Zp%%7+Cm zrqIDAO|XD-p9;H_U4OCb@cLoaR6wZ*p4H|Y+d=F#(kj`D6UWA1=s<%uK|Y5D>0}B0 zzmVl#r*Pd-ud&aSlc4AQ%JZc+gaN%s1}FO9^UAX=qIp(orX$;x*GQBS?Jq!18MLa& zHi1*a&IQBnrjV=fQ1qgN1#^Nh!v|97og$E?3f>_v+}vPcaNoJ$RPTJY@USK7`}eET zvmIOh2Z;BA;LMRTPHDKmgOH6yvl*cwjoE`K-S;MbN$F-y8-3w&i>F6Ea-n>TabKRi z()3I{?$q#k(q+5s56tgc80r#TWxW4I+Jt&A*fYH;sWAQhJFdM?OcFKBe97~&0vzK8 zdPC@YW}JpHI+*M4c!fRpqMVE-#VWHyO0-Ezx&yHX@ zC$c4Oi(z%1O2odaCtX}c@lNWM0k`7ex`|QYj}lsBEph?k7L|fmCj}4CyyGY4fM8+# zzm&JTUS|(a2G4__SRkL}_;Ne)r;Z5a(j#9izc2!HM>Vs~ETx2t{mdO92a+t;@0fd9S;`+3SD^n`sIwu3i^ z1s)cia(2V_6=q@c?LV6Nl)dpw9W`fKSU|1qD~4_!?0Cw zOJU>oChP)iXge4SM4iGg{3(BIMkufdC1d(_1iOoZF=i<5~zwt*A)!r)oP3@xV3--X3H0-&mzizt&R#uJoBXcAEKyHf$9;OP89AYm%ouRrA{B+2>RpqyvrUnKiRNFL!h7 zGaWNNST_-!<{@D-!{D>uRf0;Ds1VTU{W+l@aGl#pUkgdh$$Q#mRC8BxMk+#!2MAlu zZ90%DC=80$*(IpevAZI|-2L)~^arvKi9B_{W#TFf3-Cd^An1)i+%6HnR*{WcH|eDd z@Dp?k78p_o0u6s63wMGVFxStWFs%Z(`xK#%ZOo7U*rCE{aQ26Y-!12l+sx44nT@4M zGGy6h2X+p7hXo4z1CTvIOBf9}5f+#@gP#Zw;Wy94BP4TUUPfJ#VmH=1tswKXJgr$x z_~xceMQXhfcx9bKtVugP&QJc19K+CwCl<&{`WA%PQcxeQ%NFIWsk>3!l=@EcX_n8e zV1cLi{3^zP_!sf?hL_7;1Gb$uCV|0;bTGKwuH-!dMiK zuv=W)6yq5QwQ$ez*m(AG=3+l$;uLWvFo^}w6)#>)oP_0-JMld`Zw+MFBbW3cPpPgs z%qRAr4OJ?)$Asbd(GZ31DB1&}zH=-4Ub&T~2cDVQce&+f(Gl_)o0kVlTqsiRZ;OaL zDi$|=n^w-daE+Q!$6&ZlNdgPp81g4;k^S0)ta)&4#D`W;uJ4!AAwth>>Y&Nc_VCC8 z$S#NIw~1*?aQPV)kYB5N#t9wTH2$E2)DALvg|=VsD_35rLjMS0*8V&Jq>n)y8BZ8B zS!tkLBxlU8oVIL)v#u@`Ro5V<1i=}|U8|L(K#trc;tMD(R(F<1T<1AUqXI{)le_wJ z)VL&&_5EiJL>xO;eJa?@r4ANj%-dS&c{9(Ph>wKdrj^MU7_R;9=P^c{Waoh~&W(uawf4zYE^1fc=t$z|;u1I-Nt!GX> zYMzU&Zmnp#>nZHXglt0*LgpzV$4sE=fUUE&NZoi9>#gRP{U5XQfi;eD{mp%0B;UCe3K}15W-@FV#c{vH0`+JZv3%#E%2aIDQ_YGl&VJ7PY$D8kL2$u8 zM>g#WD8)p~c9qB%ExXM38d}s}OzC8~P}e#5M)#>mSIh5O-)l*bHJ%+Hm=W%?T~$)T zq1~vq@ZD?Qb-4R3Pz-##`$9>p>ZT3Ndb_~mEk*7qR&_o{lql`8jot-#d)SFVR#y)E z;TP==28kZmVo7;Lsz)|zLR9Tx%_b&vdR-UP$=%qT#mk~Wn)!4fHML=`p-P?Bt5C&s zNVeklCa1@5fttZv&j?(8!ma;I(Bm6280R%mcrq7w&kFw0*PVR0%oY3x3zvunK#Jz+kju* ztc60o7WJ|?Ze81KeKa3X=ymJhnwVr;O?wJlg}bPD@T z-)V@Hzl;_b%PT(3Y58-U0B1*P^?PnoW2iLC?n8zniS9}=ehm$EsHyz+{Vl0`F=Han zGjzraIh#8g7BGqO;s;VU2YVQsb*5bM#9|e+EVrWd5->_t;iW%dT!r04S9O_#SZO1( zDM|?Tu$?KEI9(8h+IHoR(R;m0;LjBW!lw?#53F*<0+^fdSl9+?8w;q?fo6W9W1zIf zxno*1{A34?1yrQ=jKbW0>Hxx^zY9fOy|&J8-K!|ulw@p*p9;AD-ZM=`94t$eho<_C zWftk|jERMnSzDL9*Wx?mEU?HgmPdQrlhP1_>Oe`_RTK zkIM25a-SdbC}}jld|OM^R>SAYx;X6eif0`{wWwnxOIwU@rBF2eOk&e$7SZ_h8+pDh zpg`%`cObQC%^p~XG#v9llWcR{B6{*mm5RW5v3s~AXjr=BcA9W?FkbKG`>H#vT9%p2 z2UEUl(Yl@0E{xKzW>m|kwD37M9Lye7!VL0+(rw6H>-9btiYSxbC?6@+F zMALpC75>k1HqBB`9^!B~x3(5{{gQm*KI_Xm)dOwdLvz6@-Zn@L&1tnsp_0Ihpte z;chmridkrr>3Z4xNuyt}wcr2BoMhj4?uj45J!5QGg@7Jj>DKHR>Ds{ZY~)Qh>5mdL3ZNI1d z&x4%dN9y|p@ME7ioU_t_vY#L6ASa zPqkZ03ls{c*HKh0X>a0x;2CApThLlgSGA)Nt{>#}rmhT}EbrJfzarsmhxTCdnYxpb zozH&uTuJkk|FPHNxbnrLTPOJ0JUIhfj~x?>l8JOfOzbQN^0kgi7t(_v4!@FrqX9V0 zx_;OT3no-Iq?-NLMT3b36B}Tn?atsrDD@g4nO5B9W_uE-pS;oXm`%5e)9*1oU6Y5CMZSqQfE}Uw$ev_ zqnMH#isMv*V2GenhzZ|$3Zhe3Mn-xf@s(NF)4o!XX1eZV6+c@;LSxIVB`)+LJh)(; zL0+`Hq^nT7jCI3wWL8bs-F}+Ms;WPwSz{qG3d)pE3GZ=Ira)04?$4bFPrUO-!{Zxw z9BbewMEySksL<@6gReX7GOyzF@A0NY&vKrf zTGjG*-d?aT)7p1EIl%6T(+@uoq$Wl{l?E+oROkmEY>Of(gfRYx|2)8OWEK?DF4x{7mT|76pZeUB0`w&i#c4Dk{Y= z-0Qvmu}IiE1zO^%3+A;NeibW}mY7`FZnI1E@XW|#k*K~6<>>&w+3X)PnOKBp!UJxs zF5CDDOJt!-4ZS{tAL{y$^|?aFXP)l>MiR7&1t>iI?_mMrzA`tNkr{1&9z{oei85Kv zGJZI0ac#T$&Pb?$d(Pu^_FAheJ;>_Q{xi)p#0ke>~xVmj>m72Nh*K3}3dDFUQ(oR-TYL1q;>Z!0rqWs~+i()iF>+-g; zI_5LVL496wIG!(5j%=xKM<%b21byR5b>K~URjG`;1Vk0%5qIJko8_~)7%@M$Y$-9K zfy`HOGt#-2uz&`96%yIj1Nguhkx4N1F+^scVPotY%%`*ked%v(GAqO{U?k{jnhk3% zZHpxHh5Ze(+rQu^72CUtK|?Y0LuV$VU&qeCgauO78U9Y(+QO>Q$9AzO=ItoWFP2!K z%Sx={RuVX@ zYukmz7ov<8znV76p!jd-U(>K3Bqw6uwVn=JVBQqt9S`NZo8!L}Ix;1Wn~5gKme>y5 z+gf$;87by#-4)nb127iD-L~9yZBHI(ZQI}{W1G6Z)^{z==cqt}nck4YUb(9Hktqd*8y)?j^!Tqf2q?GJs?d8X>iO~wz=e&|Ri6(AygR6O z;5IZ&eOhgVU!}U8Jg%rL#P3Y8lBI+|_P1tTxwR(*W)Zx7gDpDxsR8Sos~4jr$7Z!z zweDn+2_ypALP?e90ZCsuqEWSV2wIbtc4VAUykAXSZTjcpUS+j1s~5WIlfYS@7t<0B zAF7fTPdzMj<8k<4zIc_F)zkjbOD0}%gGcUcOB?+^;Gys+#Dm|#MGE9ir+4hlRi7-~ zS0RyD)5l)n6G4lYNQygr@_&}%{DtbK`F|9$s|5OHImV=P46cn!wuy>d3zH5Ah}Y^? ziH?#}UXq%|El9D0l$4HDomyO?x)667hI2|;84DCh4`Knr1PuMmUr+pI4>t@wvivBf zE=hmQDP9XvP#=ksrS(hPyE(i&2agrg61D**^`s5;1wgyT2}I+X0qwSB*jd%*v}t3 z!=DI9*0UUq`-@ybPzrCmmp+ZNc_N|cO0>{a1|~bz?3>%?|AYnRhhcA0wm3OqL%B{^ zAX*)F9%gQ=RnP7D3>1WHeCDC6^fAr7n=5f&n2gOg27mE|YrD`TGMM8uRM^dzoPUSQ zS?y{*PZg9RaS1rgC-3;

&gnj@9+S9qm#s#ilW1?LdT5bxd=KuO0df7xvERPYDuYlC?M zWrnx<2zn+q749m3;er=M{|tJz{XWHEx!HI?xVL)sIu#DcvN9l$w!#6BY6c-C=z-5^ z)l9TaZp5-aXg4yyzf!$>l`!dWO6a%@bggp@xT!?2_+EAcr~Z|)W=b0KG$DBNDU{#T zeKdzHqO{a()X!M*l`*72-%pOm(dloJQL}p`AZZ}C?*ao+$pxd>HF1*4j{$KqlS^jk zc~qSa9Pn#|b%md*!+~QuR}h^eL9b$*9hFePcnF;mmRU>)oht^DSQ#(^u`Ah^tROF@ z3kQsKlJOv`=asF6DwbLoq)jO_v0F=QlguRiWB!3cE(Fc(-EC5C_+9I9oUZQEqjXhg6y#pYGl)N~I>>qd^Z8#fxu%2A;7 zW7gAEeZ;-qYiV~b`fyE2yoM%bHWQo*TU}@I#_TeRq@*MS$nHW(n&3b{{(OFFw3Lpt zRux%!L#iQ7NB(q&UWO?@xqGChv-hpN(9lm>kLG&>BDwr|YPv3y4*Ft6JQCIz5JEtm zNMCE^Z2dqTB)8jIRMqO?iqHc-7YHeB(e1N(dm-gzPq|^32CE|r&Wuf>C&N!Z-o@N! zq(7~v@lujOA{AU6;I4*U1X4R4HtjWalVT&#S0B|EMO>^GI#(v>?ts_Pup ziZ!D|N7AS=$nlVtLZbpV8;%b)qfD~~t`dObbcWgzJ&U!IfWL_9i=I7WQ3R=uRE7UAv#{ z-A}$sT@Vr>`6|Y@1yhNriq-DAsOwop4@4n#_wSQihXel(TroYBgafoKGH{?`_FPbI zYYidh^QrM%J+E^D7S^N?=Qj0R*=C6UPa|f?Vi6ZeNt+m3#%zM^@7RO391go}@hFxOw~ZpISr`VQ9cUrH=qaV$O6 z`bsbnqRhKeGg$Q1p8_I8?NC4NIb|2!bj*3f+dPuzSNs*ylcq!)#{AZrjK zCrg@Z>_mfj*WFJ@jSITh-R%B;lN&}^A*C{bRBcK~Ouy6i0=G}w3RZQo{Am{Y=0@gTz9Fa+eD(#~juK$pJfSN7El7;l<0waG zJSer=hEuL@OCMB&#bdHsEKA^cvY*3F$-cXRXda)?t zcC^8OfYst$Y{*({&N4AG$aJaEUTVPn@`>~kIqxppP{>N+TRQi|a&BZLl zvWU8bJvJx^p)t5kla5jkm|RMY>>g3xG8asV7mIX3iCOL}(Xuv{6lSMM7x|QWNkbt7 zM*Q#Kz`gt2SOTg`X#T zf|%7`5!MC@V5NjzK(d|?4lsO%hEnc@xbDJ&*l+yt?aJ&7N4E7@&SSG;Q&w$~#Unw;FLb^F1F)jW7 z(nER3UJ}Q(q)_*-hPTd8HEO-9^pjyL4k_WhN-^o3!jzB@$IpoVmVgy@DUxmO%?KMU z8xb8^k-kdBBlWDR#8jitBX3u9KSEm+zQM{k0{>KTt2V50PWO&$${CweGT*iub}O~o z;nEWZTHgRY!II0(wBL677cUXPoHQZqDTqYA4HGt^dsD2R@DWyO^2OO$;mR{zeVW@= zA*P2MxRU4B6ge!AUuxR4Tv@xt{CGJq2Lb3EQ){31SyuH`m?A{&DSj=+cs`Moz+bw86I;g~61xc69zxcFky&PfDnyY-xR-j2rYF0KGCZ~wkN6$}% ztVWC9iRkO!uKdzh5^#-sQ^z)M@zj6~!?o{gqyDhgPv;4r+9a(F46zy)fXJ^7Gcz)P zUvsDN+S9dQ_x4T_7eXm?*j~K(9;l%51`F5ON#ujcnSX>#(S33)wNqVTch%xMy?OJY zO5nh}s-#$m>1ODt(h)OLq^@J^K&cH_85&lC;Y z_TYcV?nBIDewORHB!y9wY4jUe9rbV7m9N8f*z;Bz^n^7?@5){9oN8cV%xFizvt2I?A5e^wke444sk|J+I4HDPwMCR(jvyyY-PABJM{+l^9n*Bja1UXtgpkDtwWsAzS&e%#rm z_L|ZUBBBMb+^cguW%jIdR=iSMdCis=T_)5gR|VErkopvUv{RH1je5a>H%B_EPN~X+ z%r?d^yCYN+G41=d*p4e`*@)wO| z>$ogq32{>-Q{O#gzk(>mQZLr-Zq5U&PnlNY;6sc@P-LqBzZ zeFgW(%s4zq=#8Xg5!X$ANF3>(iZFi(hVk1xpTPmSy>CT9KcN-JOcsvZ5{;{MQPNDPrvN?7IDrt$In)v z@5OeV$O1XvHxgmZ>^Q!7j3mw!iu*euLhOA9G*teYF<(#LG(}HZ;G9-AA6$iNQ*y_) z`r5b))_h*Xm~x2Vgv=$+A=G@V4!`X>fraOG636@8OtZe2kHo3>ac~Z)w$ZH@enJ>H zLU$Dv|1DbmR{)RqOzGAzVXSIRK>ozcdi<+X&yPTH=8E}ek~Cp!RvDOiM5PRLD#UyIy^@g4 z@>Tg;Kk=)Lt2qVWo?R??bsFYO@V7x>!})rTP8}}I(iDxKZnkc|#+D{xwU&Ga?vATj zR)4KkL1qIT;*#`O;})qMi0UT7k)a*oX<*Ww7vz8>3n{pM=_y|R(o?j<-kA%76dJXt z|1UiS^opPiQvT8dnlsDy`tqFxQ)Gd3jy7usW7FJ}K&7p?rT1Q07LlQdkeZoY!MNrO zOXkp4Og!!mhthZ3w9iD(6agHrNEH_0r^c*7`gzmQRwvyuJMp*5{OF8PR`mE0_@`|7 z(=c?N%UAhpRfTo+-~aGzP_|!-yQH(H0~#qahRf-u>tEl5WE4uqH z7MU}w)iFXAv!(13$|h!#A}6~~A_k_UzO+*_3BKoV!GWOV&_w%+lLb_S=V=wJXKQww z*|B67li6D`q{9Y3j?ohV_no1oNp=ZwDnrkXBq-vurXCqLj9AZGn1p+vR}tadCaw6` zrBOY1To|)&dFM`2+o-X8vYZFPd#^4-T+e3b<W#@sqCLXVo_t4x^o}pa`jc;j3=y+MBm)gOsgFI9(@3<# z0=lV_1-T#{XQz|>=vEWEdROZKZjyd@2L#x!oy33DuJ&d4?FDTi6$7m*$Cv!{wJsUR zo2owLO>wfm-xoodfRRB&;~TLpT9B5PwNszPh65`qzx3fCf;1_-v8RLOPS+ESn;|#k zCjI|ZX6@HrWf!Nro=UuBwIk|Uc7-FKZ@j+Tb#P`q<Vk;%L^$`$=Y zdMCsW(^g8sL0DwbN^VH~T?+-*mkZ2~v$Yk&CTEURtU6MJwQLNSHi>mHr4ZpqSO zR`F)5uK5GuPu-pU0~kKHDsKdbsg-_chynF8c2sd$^maXss-L1|khe~o)x!AMn-53| zewIvdzs4w_ekI;_q_hMh8+Oo{kuK0$Gb@yvaj&f(i>6E@2J|75pG%ECpSj+4NLr~O z+D;1|u`=}Iu6&GLAm>A!ON55<#4tn!y5+^T#iDawIwNJ)^n7373{vJ37QDzEKiQ>b;w?Tyk|t8s9{ZVmC1 zHI8IYn+vIY*yE!ODu*e2$zw9vNWWR2amyHn#Qvch)${Lo~CiSQVdbAz#laX%Q2!q|3YHhxrYS{q9}6$fQ+% zo}Bq@!{=40;(T%5?i=UwFJ%IGlyP(4?C2r*uOzLCAcI-RA*sQSl3^m8J=hN!KQ*NR zq1C|Rsd|(MYDeD3lCn1)2Zj3KTLT}`Cy6MYkr}J?d*(MS`mT%P-l(;NyvsioYH|OW zG?DVoM7VVOkpAFn*La(lYn64A(|Wty*YNp(*n|VIH|5(Fl1O#qh1)xoS_M7;afY6Y z-wPw$J_Qto8IVO3?cS#Z3D)Pi>lF6_pssMh+-G7+tiY_4ffEH|dVJMaIh?}6`FWk- zn2%Gg`lm7zg-Oo>RH_~0rsqwIw1<-+Cr98>39ju6D^#u_K|n>lfCAYu<=&!k?<(iYzjpI;5Tq@2Hcsa~Ee zP_|N1b)k}$qALBI7~|o41aF{uF%5B%>b&oofXD~GthS>Zy)wXx&hKP{DV}7J*^nVO zlW`H{Z8HiDM(f-n3JDa=0>@RA1)J6CJ=BoSKgL;{_V$aCd-j_hO=ougW5UiLr^P}a zSWYl}zba7P!iK+ZB_K*Vcv(lAx()?BLPOTpep2!2l&L9+WZV0(d*hin+Z>bVd8`EY ziKkSOZb3TEq!DcDEkT$DdzYqTHakw?7*TohD&pk1CH+do8Cfw|@lIk97ESn*(>ih| ziWoEVU9#e&{E>#WC2@P9OQmc_vB7?8a$ zMQ&(KJx3WMdok_WxyAr;)BkTtW58JOjcqrMYy48sz^i@y#kTL6DB7Qv+(Yt+k5L9| zI}N~9SN^Hjr15BERX5A$SF|EkI}mHN zybamjr6Vwpz}7Nz@0Yjw_Q}k_EuypK0qCvPT7G#eYR=m{dD_x%g$X^(a;IG5nkyBJ z^Glgae-M5vJR|)=?t1ptu-7idm9}bluQ-&s?#ZD>ePM6>r-@JHy{WE=bmHPdK4Nb6 zc1Z|BR7OS!8UOe>0bn`Bwa{Annz@C8(D#pp#$fHv-=0T+aIN6-x*CCr^!E$Qp)I!Z zXL#D=dP4Y#)#QeBcg+ET4I9Bw^Z_3V753?h&x6yOn5Sg#C7AU`6^$$0^k#vLz`h@P z=0Z!Ou#Vrpxa^vJ)FC3W`QIS36#xqlXCw^gSnMt0d1=(U@AA{HI5A{|tLll7RL>_0 zfL4dL&a0+;=0Y&a{*BRyydW1sOhzGX-gKG|i=JB^h<+FP>U^eaI($ma4B=LLuJ*k( z)b(%9j*vF<^P&<&QN{-UXQpwIwxfHu4H@UOr0=QG8s)vB_rnsg^C8c*AjwY5o!0QG z&QdSp9zA@?jr7dJpDd`UZHf)?fNQMYiA~>xQCpfW6EhCFzgI{^ZS$V3=W6#oq)!it zIaW2QtcR|Ebtos1A5r&*zS{-7bGX}NS8I={ zMH?Qm$CMrWwQFHTD87&?))hL^weQz?L?8K7hqsxHV&BqgbVZ_k1)IT{BA_IC80H9R z+Nh~0cA6VDJAQyV;>ly@b-!c4Ge>5@lD_+=x=hn5eShIgP(l9a>0mi}qKMRn&6c{_ zcQYDa8kd8ZlWH0V+$zclh9yk5qE7A$hEaTZemn{6Kq?x9?vO=>I@?CZJ^nd&5H69E z0#GCMd3|=siO~Wl`}3S>no2ofh1+8K;jRkod*GI)By&w>!Co`PR=YE{dmcI2Qe^a) zz)D#esmqv^qb}}L@45qBFhMY{UMjz;C&nJ?i^ZJoUJvV*oF7_Ubbh_JGfDT>iJtL& zHd(@2&_g|@xu5BG+e$BNW`;J9=slw}Nx%z)G{6=Kkp2C!4BD%~b%e$XCV~5`MUFkH zBN|ra=zKpIZ{41dx#*5gGNP!Wp%(#b$y!~ZZE+O|p^brc#^xuQwOo=&Yfm(1BP)?e z!#@O)84@r0J;a>(a`|X}`xk9e^D++$q)qZMDeiA=c(C^!qEJO@zjmJ~-dov`XT#<> zDW3lcN&*{(m@Aq;+=@e~LaMUPNkb7*Lg-)1olju;K$C*{Og&3!zaxZLN2Y@+EG_Jq z?yqUdKdUk~IPC)q8a!alm6Yc!xqH9Y3XdjlCy@k%ev29QHm?8v6fZA|j|l@ivSaR~ zND+3O&;uDIkkP!xaj)GV$-#p6U+S6b~>BzPdv9R>Q z9mzuC6n>lH$0gPboyoQC^L^aiYyl1EL%V79_mIQy2Yi*pAnH70s?AzQ%u6!JMWWzAo=11WY z^Mbw6Cw*@#&v}9$p`_+_THRW-v|BOw#Eyc-DToK9OKX;#TW=zv^ns zj#+7YW}BwK9C-m{Mt?XM$XbAcr)R0Q&1`H89&B#&FT3rHZr;;E-kv`?NS?T zW?%nS*$F8(I#*Cv5#c)RJ2}>VE?Vf6Zb49!6}??m{$3`Y7P(!8pDKoiD&zna|5!2L zQrdW-@YbZt7e{K9Tk0c~L`F?hZ+tuG`;GL%Zl~RGUjYjf$R^eV7fgQ*QI_+`*H!CO z%li`n!Aqe{#}pryRHiLj``0G26SKYi4o-HTAA0wZSH_BsN{0$ z+=~QryllBw(HAsZTEZ8)T+rl3{=C>typ(5V0`&rT_fE-HL+P^87o%L(3x^|x&Gz^gU#X?6P z7&lAnxl+`F$u@p4*_IC`+xo7e{+RLn>rVX7*k%8u)|@HHA{ECqr{#oD$xKiiTf02# z$m3W5-AV&TFY`7(EvsOXNxg;Z9|EX;$n}bH>4`d!k`}iD)#u1xKpnY=m9jWdqxrtt z6{IZulB64q4v)O@zv&(!4~p$suz^P-jE?-xu>}8pH+iHsT3F5^I;lKZU=V!n>?3RA zeei`nXsLHJz@CGc++$Snn$-O!seXe~2gFvuO3f*-Rq}wbj7 zLcDuQ*y2qern}9;iEGDpe}@j0{hqUboxQCfa>tylop!AMypF?sTTR7;%9dbubbi-> zq=gfgxWNae4x)%KOq#cORCiiKe1PJo1v=OBxqzX$yL50l8}6F>>^L{5jQt`yaFM$G zKrwM8O}Bo@v#QOV>_WBg|L&=}zG#jyeHY{l)pSN3Ev7|Du~W z0pzt~651xeJMu0K;g8PC5$5>gLw0@@{QRvj`quA1`)5?-{uk<07*mRKS))JBnm-8` z?VXYB3M;^uH#{ovnD$WmY>_BHFrihI(r)pIv%O*g$`o0Zl&31<29`6+F~xzZu&84v z;qaGF$oxeZP07 z{PU#!BliU#-rS;BUM?^Au+2u>25iL2?}U`fq7&_(s8(UzJIuIjK6`v0A zHH^q|h>((49Ds;nR%ZKV;f$qiZNm&V%0zQs33X zMql1HZQFRG-=BOC-KmrHzV!2iJ+hF!IB`+1563kj1O5#i!_92k4E?VI&gQ}|prBra z+6U{b5Dxrg0S^o80c-Z4Js^Io2Aj17$QJ#6IsCol?9IF128C z6)q7u?u#UqK~?!G{5s-xUpJ{;WG@54!{C)@tr1q9mX9qbk5lMUzb7x)hbU=%+16>v zts-8U3(hxNBu%`4Ky6HyX(|KND&+;T+=v%s&FZ_6@mwiHcO1!Co zto6NE2j*NI6+@0ZB1EHT#-CdjLegVAEV^1z_2SWUt zMXLdFI{faL&6+Ykl1LwoGhX-P@?e^_$<$tTQG@2s>_a9wREA+?7gjFHRioMcKQ&o~ zxnwY4&n-;{`6*vdM>yDK>_SmRharOl+9BRd4Q5WHK{!8{j}q@!RV$Mc(-}vt@ZNR- zko6FaD6kr&dc$+4r+e&>hM#_j;=@JPppu%d!iSvE;xC1LuV+9|t?I*ob}H^SUR6QY zqJQNQiGF`1oe$RUek;lSh@SP=LBfcO3O$J(NdKcP~6 zc$Px%2Q5TC%E(iF-tRxGLf3z^?9;NubuadTteZ}vqb0GZfrHPByIkScPh|__U69{- z@x1o7nsOfG#$Mc&!Hb~``sTpqfT*UrX;!4IZ8j*6HdCvx^ia4uY@XHoSuZt`#F^`y zbsA>aQ(VPZjcg9VZtez$PO{$cMuY4}5B^Vk=N}DK8piRPAK4_86iTV3GurVZBa>lJ ztAnZC?51X_Nuz`sN(k9#NK%>^$7m=D8(OV0O+z7#K~m#KDrQhZlOJhD4Pr3HzSi!Z zooUOS&i=7~^vAvb+JGi@_1dOVDA-t3eCHS| zY-#!hb$5)$;|nXuT1-zrX6ISU!?>>QP7Wj#4c1y^=BKD=nQTct?=`UFVThCa7;C_5 z7d5DC*@<*g)^_4CcC%V4y9JLOX%5o96UtCyS9a%A>E^js{20cQX|i;1aE+f#Xw}-G zW*J&y6>g)S0B&G=HT<&#KT zTZ+Txv_4P7sF8yTYFZ>$n9!Zq2qVg%;M~S447!DM zhW5g?$SecXae5t}cJ1AX)1?7X3$9?i0|ODyFBLAOKzrp3d~gN-9##=bp0nm?6E3Xdkrhd%8Y1wXhqmqmOP*D>4JgS##6 zWzlv7>e|+4pesI2#@toxZt-T;oVLr@7W(C@2(q>wJknChjW_YBNoD zuM5_~GG^a8rBiwp?U216FB`c*%jq%GLwDXrrkiB`1K>By5MX%Ezu8rV25ZRGzP>bu zt{*jLJtW%mHh^>82`Ve+}*18>@Tb!&p?dtVo*sPX>6s}7iEPhi1o3jOX(PCypjv05Y zbVN^2pbs4QJmjV9TDu0-AG4E=`umVKhWc;0yw(t{!6_7mEGu~o{Q1=;EM0f66o1q! zs*h6})ANDX@_4$o2gvhMYoUhV+fNI8T1@hV&(U=f`y(URfTV4PCo1}8!pH#)k`NIi z-x_u#VTsvEG}}Amj+tY-zZ*H%lfHa7W7hRSihbj&{Ripa-7wNbxa@Bzf}*Q-7y!{} zSGv!YmL?r!PgxenJ4~-Bs^062wVw4-lzjm)4uX^A0^?)?D@XE#;FU{&VA-hC=$RkmWc39qfd&6o@vB8CD&i!ya4MIZPjVJ9x~v5zGj8ivVza+|z>#HXxrB%y!i5UT}(orpEHoiwD&| zS?-uDfxva-bw9vxlLuB&e<29|FfS_>=L8CQ?j(6Yj(-d(+#pArytX|Y1LR^85YT$+ zfO8_QK?;;cqz6cTUH?#pbQjqN9Wm!%_!{aPq0Re7UV7M`q1Hn$yNnqtEHKRSc`gpg z`ui47kEZ;O5R{+XlDs0ex;Ppe6YLA$F0DSBs(1MeVrJLAd-+L0US2!T+1@H|vGxA!%CLw|qVxDNt~ml%n=k0xMHZm!Ieh!+ZI(p*G-ge!=K6m{?N-cmTk=Si zxw&7z#uX#!<5vT`!o7U`^Nmn$8qCC^!uG-p%@hCgx2w!zAY$*Ozl)c;ib+z8RfOxK zF&%02!SJ`{eh!rn?gv%X^Z4=~G+wpoO(~$&C*pa7Bq2lOaC78`@occVz>*Ig}q)iKwm^;IN9k;+HkF~*evlyd+? z4E?EY6fzxt45`N;cLHiVUn=P|c*ib*gYwWgK_;yPqC@A2&-N3&CDEQY2ZgYyG z5R-xqlJNJ3Id zTIR8$(hFr3RW)@zeS_DAM#d(#cJ>aAPR=e~@4S89`}+BZg@25QjQaFBIyvP_YFc_m zW>!&gNoiSmMP*e}^VgQvw)T$Bfx)5Ske~9={=wn*qvMm)AD8<= z0+4^*)?aq^)4uS*eO*IAK}JEl+!xX{NAN+$N4b8R6O};x8Jey&AuX2&I?;pBq{2oF zI_~GY#IJ1nF>gY6=IHk>xAx1<{~v8 zKTI=@XM%T>48XgW+Ab1^&T87rsWi|sgnM;Nsu2KsTMzxA6^ryaOIJN(&8 z1VAP_N3u6_L8Nn@+z7un-v2*q_@8t5A9?s6z4-sxKCB=B9Q!Rt#Ze*oG*g#^qxVO0 zo#I6C4LRq5`@at`%n;Pl5o# z5*DCmR-pO2Q!M~6Cj0-Pr)AIVc-IK$;jaG+&hdx3!opd#)mayZJtB-|J7F!iSH{6Dr~D9()$|I<-9_M=lQe za(UeIJLlmzI`A>j=dG?H7bp8O0)Oy9{#JJrJomkYoihx)3sPYsS5^cNy3jUrL_qz6 z%Y_ly^r|z}H1rW&Oh1`{Pl_JO9C8uqoZlqOz?~xQ?l(~n6=nVqpZPo<(p-%j+T$6$)6(;b}(hV zJUsPlQ8s_YnLA;;p0zir)@8?r5(@;9El?gT8{XgA5hGK2asRs;7YxRn`JG%fF@{R1 z=t)*^{3pol3M|1sV{Ghe*tGV{|KL`b4lK27KHm08 z65lnY!0}db6uqGrAMHbtQ&5#jv2n$Tfc49>TM%JG0395|2w*E19u!n9@Y4(Kf&zc= zh%c{3sB6yhJeW!Z0ThIQ`W)Ub)iiTTCFF(xbZ;Yo6ozDX-WpB>Krh;g0FLIs5J}F# zzST(&{um1C=N5PskD@nM|FCS`YJu*fd%>HOseh;tn=7;XBY;JGw2OB+qKA1*u*7Tr zjER`)y)hSlZj0(Mm2Z3RbXlDV4VKI~I`lpn6-;BD>h-tlYQ}DzCdcw6d-(FGGeDj8 zmg)J}DLKks8_KAT1YoOPI&`z{-k|y$<1_@|=hlJB82vn<=AEI5r@W?NnHxqHr$okD zq=bLFK1{zBRhWgr&E_XBH6P(lk;uT=tk6l5QicfU_(x~1nO z81p7zD?8daZoh7#R(Vn8kTU6%W(TZ zwtYSJ+XC=DR|wg*DC{2ck+J55vZWi_tVi?kdh%~YtCUB`Ok-xSAR9l^i0dikg}K$7}FY7(u+I@ z(>GTpeHJf?i;*|j>|m~&+=4|OCfmXAP93#!Qh z=1R}pugi*ECweA!-8$hGbn%l3C?#zOKuQX96jxsmql~+J+aG+W46Zn(l%IrFj9mLC zue2calhoP)&m@Tc$b`_`s6#;ji97Je@(AGTGX#L;*pP4trVkx5 z2;jsY*j&xyhTq)r5M2e6kg#wButx-Kn%ZT!K!ff-hr($=6=x1W0N&NJ@;`7v75Rby z&LyaK%Uv-LfcVV$#{>l6n~2-vzaTniaY6|9sz1FeiU9DX{x`0rqW44n{*!yqGd<9X zq@-Nk9q~6;$&SCcVsHA;a{u6MUEVO#vJMt> z(P{7a;@x|AK)k=mRR@MtIv0F;7tV(O%JD7;OpEiluX?aQCZytToKX|>tl#`16oj(O zvvFA|kXaii$}E?by@Ye$AIBG77NUn53aETPUCYlGYj(m7f8>S+Z!ALqKUhso-1&bJ zAmv+rZ|@sLa*&*h60S$F)JU)QKP093K8ehUf(rm%#~%3#pkWujSC8rBZ|%5HPcD*- zd^7k-aapDR0Gkfw4elExx)r(s1WnbZqW+?|C1*;dMMHC?<-vlqK27=(9UToA9vuvO zdF%ebz82Oz-@DCo$NAi+3(Dih8E(Ow18(t(%VxgWySM02j;~cguS&Pduc_`8+5GwX ze@%C=TOYUyRVIwd^l0UFjO<`TIrg?BRkew`FkO5ChEXX`l9(d zHPe-guUTn##&3CdI*s#eg8Y6>I*{4iQgBx%DzO2w=#&2%JX)yO$rNSjz}ht3zD2)7 z#xT#JRbbP8e^s{i0f87L$E{lX`m4&B*W(YQela;BJBq?hPm^DP$yaxU>#=QeDmDWy zUa-8;u=D$SBB^sT*NnR}jl$)U67GdRE4tVa6B?abkvjIwqx=vMU{2CwI%pTCCpT)Q zd@Nh*vprRK@O2z!g-c?u+(?RsVi+oR%jgfr;s@;B_4`6jXYi(n2tZO^g8GUA0kGY+ z^N$FC905$chx^?dA0@r2Lce(GOK<(JKS9RHWu7uC5w!mF?2w?w7ev@$GONIjrW|M? zgUhGn(wvwd$9%ojzocz<%BsunY7sI^r4l6e(#fn3&77xSLmYC@87e^#6(;pE%O6z+ zatJu)-`|6N)nHYW9N`JZ8PnW&r2Ztz(JHX)s9i6Fn-u-j7gHM9XY=cxisIaM()`_) znV|1cLt?M`*CNgO)g`(X(nx)=IVL$;F?2QR7>Y^<;nb!MWy*c9iMF)KO@ERm+GSn_ z!0J8(&V$6~CAuip2i+tGi%7{MW!bkH6ZYv=MUQaG!63?1L+KYY)VV?T)Dpi(=#lPC zYW;U=&L$F5kQyxchxqLxb?Vmm|1yb*dR%BuANC+!*KfT`@0x61L%9uZOv*lzM9CVeY2X& zcX<6ygdVkcsnnbnXa`$0a2Pc@T{&ci>x)xSB;wMvvdg!q4+kA4Elw*f#?v0y_1mZ7 z;W@u`ehnYoZ|hw;#e>(^UBI>ZTxWbt%aYysS#d|OG}w`+nhA1SlQ5+mdASZUi$iy} zhJBV$3{#Z`RU``rXa~O(7X)!4w>@03%HP#syEW+ zhbZB6T_dF^5;TDsbX8-3kViQQS{ai$CX8HG6j@uGEVcVwI!Y1gpr>B{@+;~LPz=+U zYyO%(@b|vc*?+%lrP!QMis%&p%2ZPQ4cci=+nGv2ThZak_>M@J032Gs^xO8Cd{R=bv z5GzS%A|!`@OPd%I@wiSj5CC0UaQ!Ak^icos*_D9lKbXa5EJrgNLE@dCGbTUZm)<0P zCe{IocgOwSu6=UkCbe~Q8l!)CbencE*FKc^iy1%Nw^zso^ti+8xgkSHquo5peKJD( zU!FZmT?`##O7;ko5e6tX{OV6akIphndaoNRI(hyO%I-;^&tbp|9H2n%+-t|i!-;<7 zDm)}4!C$>MUG&2jTV0r|JDOR#($%h+6Um3%hoq5(xvUse*{$azoiK6@r-LF!J@gOZ z;qLqtVNfz){-0{RR%u*BUV=&FulgPr`jF(2W^61{!(#Z!(4hj7Y8^M2^-^ntX_9#x z{DTQBgWYU)h{b{>FXe!B`;}4Zlh8`lmjOXiXr;hwr>p)OjQ^ChFXO*kaJgOt(9(|p zFh79t-!(A)s|4e}s$b(j;#*++cO3zQ+k)|*9keMKjQ@c8eG4d@?a%R_1Q`DzK^H*_ za;`MP8cfbnL{3__If4dgI!A=D%kYC+Z z*B)Ba%=NLgemV0LGl#ko--Oa9Z&fM+No+2Leb0@M`!BWR>R0{Sn?|0y1=cy};1kf* zHRj?hb;(fO#5Jq6XniV)FXS~9$HnGdH-!orGKJT-0HS9S0P#1IX_P@r_Lvs~OEHgz zd*mm~p7wGqmeI>s(?-%1(6PE>wAdZ~QtijM(O7PH92>)?mKG~F>bd} ze~Sg=T;~>adB zfAM}ni;@Uw|8-ohQ~Zi5M*4<8@WgjgJ-^TFlvEC98KmXd3;d))D#MY=GkS%dqrK5k zTKeGbxMP_+sC=B;ZKMn%HOLKAI8Jr!bx{s{X?`r>g%Rp^LT+EqN@_b#a01Ooj{1**nNGHorww4@1R`5C!Thh4qfX-0`o~v5Wp8`JA+0L z-VUsn7c^f)rsbmFhZgbjO@Q%}+qPNj>Qt$j>n<%z@UsX{{%r$eq1+D@A*u@B(Myo` z=zs9&W0P*mfZw?{V)Pc$Un6T`Vdo}EUZPWXV{R}Eb&21gXE4Ac)>=JcS%=t82hS*4 zD4wC*-&|1rz_r>mP(%^Ai*CDTJ~7C9EEd(gVv<{oa{F_>vCFsP0^?&pp(@v9tWOQM zldYs1QE<6%(Pw98cTFGEJ?y`?rPv(pJH+#$t+WzT(Z&7Y-F0*tPXP-2A><*#{8pCnt~_Df!Y|GDZEvy~aXtoBl}{@LzZPmF&Li@ww?^tGlbP_hW4L zaI~>_6FOuZvVG8&biLZq%Ab}1t`CO3n~Stby_XykX|&ET*;OlnKb9@kad>8M-J!p|zb=$P#*!J^vyp!;+)$~ucEJzGVg{YWzuC`m<@vin;ssC=H zl;=u|6}Zx41>Ne^Chye_t<-;$?^HAzfzuDvytp1&Ja4)6;Y~K_lF}K916)IL*WIR) z!4C(p{;}e@R-`;b#ls4bs< zqM}?|8s1e=Rv4|C0BjjN5O18_7aTGCY7RzL;=6ZJGS|XSZ&^8OYsL_lEh{NDUlSmN z6|=jNFUUP;o$uV3zxCPDmQaETs`r4885=)joPufyN%ZQ?{?xqx2f_qgk*0q~n8eWj zn|vqf5dy$Hmp9Ix+E6%Ix}{M2LS`HH1IFtY0KhfF*g%R*+R$VDY<;0Mo}{iXt!gjo zD5CZ#-_nqUdOV~#!baxQM_!_hWMib1HK#@`#q@{NQ38muC^cti)5ZY%NX4(b;Hr;j zw>9Ij_54NX5Wu%=1fWNs0Pp>Cxma1pFP~xXoH<(?*0D6Hq1w$N@9t2PL^HeVOu35u zyr#D1);yHb>2b?f+|v_QgskvAAu@3lfRE;>y>XlOvd5k%Q1@XN`LO5f%^(GyiF z`3csPgf4iiN13I%~C9*^^7l9bCEDlsz{awL6Fm(SH z4bl}6>O=as4AM_x3;YAQ{rh73f5CSqRu0w}CzqyfjRuKKS+M6OM^2nEk<_$==?4Th zgz;MpA$^`dadn*2!PeSY!hF9o#CPd+kIZz1S@_UOyzNM#RFe)i%!D`ECukHV zJe+bop=|L zsnOG&kr5sUM(K4qzGm3VL;$~WnmqqwjZXfF3;)^bW||7f2OS229T7z^A@x{s3xdg< z*KZo#dfUPpu(-g#;eRiVq0L3|Jrq3ZriO#MHggDE=ZFWZ{#9hFjdiSji{13qv>u3Q z<_lk^A|9}`_;SF;W~Ljd(m?(>gusfQB7QhiwGR8T2mrQ%3e4-_AJk$0<)X`Cjc)$N zkGIuHM$^>6PfY_=wn$C)ZcFSBYh+ObVL1p_DYKO)y2^~!7sH1cyu;5#eh7}$q*(C@ z7$Oznb@lQ$9_Pvvf@K8xU8#$Du-6}|6$j$X_UsVA`ZMt5EYbNj1Td5W78PFnT65PD z{qYgHZxVb`1^vzldhp>tVcTxW!&9lxqf_8)2^Wt=Pw)MTXKNWm0GU!?(w_lV7}62I z^I*8#ul4LB{?P~(zs*1q9&G?%^(<>H7?3+1Wl8|R?R9xlYN;uUt3|^Ey3O< zmnZ2Zx>KDl{C?umChg49mQk!s{aL&kc{#K=pbt$D0sPI47^H619*WpkM=CgkbiVlb zgP7)qn{QTrzH#AHjB;H0`~C5+PxVyV$)9|JkwdTvo9C1G6^0s8oZ!uQv@AKK0blJzVvProS&Hd>ED>#!-fsnAe;9hT@r z%}L|XV}y+LXCaaL^SM-MXqn2_n0osxppHN6gh&Qt#m?2eP;7v3gY>} z@**75pH360=FK`m^!aXk7DYe|g=UBIf7>htgK2(NuI71%h*WjsK0a?UW@!TS@$QaS zSxMsjZT!The?EV$IK!^IwZ5qsmALZk>kjz$gLwIyiako@={&`k-S7AQMailEdNMN! zUtM0*ehrbanV1Wax~r-cd4~qS*1gF}3gXc%Yny9)6eS5WZV$Dt@g0v8I-G9M<%ahY zA$5aw%il8wYL3p9dKQM2AyOo_Z9Qcmvj7?-yy04=sPAD$$r}4|rO`{je#n8YozwUj zlaC})6#e^WGs29>$ba6$Uu6ior9nTCpyaI1{7BLqgJr5@(F5Cpb^6x9;IQ#=3Jx65C$g(LwG@iS&JiLPhQhc;Kqs zXoxT)fRIPjM+5~3V4xxcnf$k~tqrg-ef9TWx@)*tPwG$NveuNN1F+^K{I^l!?^)ZB zFf+cyN{PPZw>P$Bg^Me2$fLb}r0$wc zv~xS6b&i6gCbyh_^1(H+UfUMHR`hqT26TBCRAH7$MY8q0&hs*Qsws}xLDI_YC`b`P zD?!`={!t1en>^LN=G&>(!cBrLL{>GyG;-AiL?GKQda5{rV2?I2FKP zt7kOp$>qEiOBUItTs)*UFtvzB%}UW%BOlae>TYE{nv{rZ_-8#)drLP8hn(m=s2s7> z+bxMansCgaovoZ~ltiMj*PX7Vx(c{R#7O`P^6kO-&@tWx5XoLj#eJoJAp}}AT9H}= z@Ny#f;^vT3FNipJ18*#+{=u37>>7e_1-uI{u+4U;J^}*ouJ$wjGng^ts|NV@JUQm5 zK!o?lLJ7w=mX?q|UT+evSp(0JyhuP7P9InqX8~CCYjZy~u{sAH(uE#bIAXYl`aZbBigU~a>jInj3z=*BdK82iC(igiV z2J&bXi!P(01f@&MUX(!zwgwk*xA{c$aR}O|!@8C{C8=3Dj%BFXY#XxQq8AE4Jr8}U zh9;hrS!3wwk2RJZR8ZN5x%8p>j@YGGvHGOHHl%O((5uy^d%L2?iNujx7)F6IhdI3e32ziGVHSz6qB&?(JGERF3j zSJ;XRXX+_U>o%W9-_ffYVr7B1(gYZfSbuwV943y+N5jF~4!Fj~e?%H#Mpft(N72Wh zjw}`uG&&L>&aM97u0;63(?{aEAFzoeiPQ=-v@$;hF*T>T2;i6%1Tl7-O+nlDQbAwO zdjNtT)JOQvM-aeSBnV|&F0-g#bOJ?bliV5XIkOrelYd13Aa?{G0f0T59}pEoO+&w* zDq$dE^S9B#B@zyN`|=9}P#6XpN<*+!S7&a`2 z80hv0xTt7=4uq`7!!c`SqcD&5y+VIVvHvUaYjT5&_@jUT+@2@$M^Lt#9t-TvSnm5z zo9arm%0~XzwZ5Du+!y5?jG$0?_=4S@(Tt(c=Y@mmMsRVf5;p4CPI&K=+uv6}sAay- z_MrG~fBf{mOi4A;^_JAQz4DO4K&0CdL!8*38eekA9Omxe8Mi$x`bh4~3Uh`%51SHh z-UrCz#w(iw+^vLv#Hlj^dEEa*9ujfl9N`b(U~pIvjsVu^Tl8GPgzB>jyj528BEHOi z<`nD17TzQec2%N?1NW%m20CY?ETHJQfL&n_%<~i2_ixa@AgX~mymp|Jx4$$HRgm|y zJ#QuFbctWly-(o>o(~NiZvZH|QnXc_jL4yNeWj$Xq6=8kTgTm*f-z!Rwv4>}H1~U{ zxe8V&nONnU2IMkLsyFl5^@jDa$%G$E(*!unlCu=%e5i1Zdr)}0z}kOvH4!`4q;=k| zAbR*ou%2DFRc4_FehYXyMY2M|-kVtNOv2eE~0fivqJv^dCjAZ5?gJr=q{<2+t)$^L@;2RIFyD0ci7)LVu zvJq3vibgSYl*Eru1h*#tdD>N1hu)FYi)nP|@pJph{SkWz{=t!E_SIzAY9LiQ!9O}?)5 z>m6b~*vBX?UR6SOeS56^AeRflF5%j(_kL{lsx0w8n5$J^-X%<~kt1)nJt(*?9bVYm z)i<&QD%**vI4Gmpe%lIWk)8LZDL4p7x9RmMcavWrd$bBOOK!K$>)c#(?6_&ZwZ)ba zx-X*a@GhfG`vIT)36p<#!Rr#O030p87ScBDUw?}VpA?wM$;j|y$vLGHEYGkF zxJ&x1J+I0iSh5fjc79_pFX(`SQ9GnpS#IztDfBr%|71-DD>-|{#+ot@E2J??#?|g@ zL-T>IqFbhnEuDb}KdO{MJ>yFLV7&y0ENFGr0^2;1y~3%7eo6eK(qfU)|KLC_f^qL_)|gY7vO~U z^wISC{Q5L0pNuh0kO54xl`#)Z_^q;HTdr+6?s2)x;;~C=Yuv?WuGC^FIwo3Y#))yH zub*G*dg4trtVHKnV5`U1lXY1ITW3$SW?KMZ@`tLbiLb;oy@eLv*!}{6#@3#exKsLN z!UX3vt3-G!JG;8FN|+Q5;S*V|9rP?bddEFjnsff!4&EsIin1#Id76=O_3%)xBEAmF z_AXC{@ZN8{N7y)k!;lIVD?Ht9#O1{oKFoTf3jaBa?{_@P6Q76X>}7Lb%TvYg?eeri z&s3LFUwG^}zLOh}0As)5$to#kL5FU8qhc(F@~H-m{$``F5prpA(fNIss2@Bw*-szK zKv<7_u;)U@rCIpRh-s*14RcL?X`o-SLw~ni1(GJB!3LQP$c7o|9z72x)4A}n6g@P^ z1@xQ}Kn{hc=oSL(Vm|WU-1s>h?nAm#r1~Wr6g}^(KjKmY!;wP}l>@@rRbnP_Sd62k zEBEW?XyHReXBOX1C&1LU{CNK$uDVXAI%s%}NC7Q=;-S-zjDA&>=DNPKn zc0h6Cg}a~?((#=#mXa9ay}<7^${{%}Zh*+J3a8+t3={NpWjCS zCbhIhU;1>TH@-#hubV>opRz&>I9WW(QPC{6$e3W)W*Ywsok(~zf}k;AN=O4IjzC1Rvy_UblB>cKLsSgsy3 z^jQ|=!g#JU*;Prx(HWM*CFqGR@{TObT?hfF`^(tJblhWo_@rEs;&p?znhehuXDH`8 zKgE@qdhhFXJHpHlTHCdp!Zz3GwiL&W9c<`2s0NA>gt)ysU~QI}ZFKj>o{3QzCk5WE zxo;u#;6eS7R^s5}l^%>EgAT9ynEG#Lu?rTa19}~SGE=d5wWE8->A!M8D1KXr-7x$u z9q4MHbd?PTg6OYyfPTLt^mDyFM+X(!9-Md?>4RD+k!!Air1?7U2e(tgix0{#)y!C7 z*WV`j#eCZ9{oK%ce)H3O_;;kzsGP44^`l1lNi z%&aa00~*7FuN=ysYy=a_62iKZ$Az;eLre2W zI79L;co2X}fbH6J?X{2)RQYS}Ld!?Yq50ibxkAw|%Hm%B@Gj~2yz+tDqhjUc?Li*b zSX&0SQ`3CUGOO+@|EV3?LU#TAuFtkhVfkk6`Y+2_@U&|%ca-PR;u6(Tj3ZD2f6-6W zwj?Gix8PJ6F$#kX<1n3dym@5&(3FR1kv;qIDk3TuJTuFNhWrz%4#v#J(YNbr2XoD! z1vzz{_E?gi)wOc#yT1DQaW4G`4-K%5KRS~n6ur(IumRW>sRK}4XiIz6`DpHHL=?!&3 zx1J?^8t05KvtG6>$B(H$lEcJr(5TvFD$Q z+o!^`YyHPz&7z-t0}PDG#E>TOI)&=2Jss^ya$zZMDdQ$=MVhT=L*`RNz4!(_4q;y` zbo4^E#3&YY!Z*%gSt&Ny6Z#Jv1OtK+U(ZY)`@WMtdO&B6b>z#l=e@htdq&G@v8)|8dujoSXLDV&K{+w0Tw8jN#i z()iz=QR{!!)O~Aq%|`ON9qZf{Mq(iBX8;lvh$5cawbrtiX|gcKf`2gq2G_;aEJ;@*IwwM(i5S2-Oe zV$0SlYDKb&ybju)f|SS@!oR6nVB5?_s^En6$8+c{&hGQ)1m6Ree3z4$mITLrbc3kwjHzb4o zP3CsLqdCdix%ug^k&tleM2nEDnYN(sx92PaLMdHz*HPyk^3UjyVeTBPo0bN9uDcJj zd$H~W8rE48$wA(CCy;h-A?I18jQKlw<*dJD&`{#@X$WK+*;g)qbVurAoft03bt;|F z<#kRi;`mSlUA_bq8|S(Q8lNGb7xl<)GGV;3_1x;!ejB0bWcgS_L&Iom(VLZ4RhMH@ zh8(?>BQ?T{VhaqzDr<+^ z=7=Y$)7ONPydBOU|I9)gxP;4=U_5sE&2Xh>vYa_sePg+=WPILJwD?oxl*1$QMWe_0 z)NBe~CA0c={L6_tn5%`bMsu7Lamvb&mPI*;na9kV41<>rk&AiOg8`U8b=p)aJj&FW zVog9Evz=aoDL({POvv30M?GU}Yp$d$2sRDzCkcUACpKkyxC4iomlo@4n!6}9TE9td4U)lN!C*4@_Zu&O5cp?W5wFY63-sbvC; z9=IS0Q22jJHvcYR9~s=rUlLZI;>@)lDgkz%zmsp6GRDZ)h|_<~CW|~^4dVK0>+W=v zqj4cGKTyZR@+0tj=|{P_DNk8H<$J70p4O3cvB+(uT9q-)Z&~(&Vt^>wkz_CVYKH(G zM=Wwu)&_{JSKyeaI?y{@8po`1k}%u5+5NQVtntzU+aS338X442=5-e11NAGb25x50GfQz!OnwQt#lr2)5D?m1YrG+l;BzjU zWkhD@2-D8V%@FJ`D{A9sVohJnlLr3@;(hOPZDhxP@OBmdL*lwbr2oCtl4iJyE!ExcR9wrL9T&KI3e9A3N)fKUl#q z+FNaexy4ASiE88$O{j58L04w`w5lS!W1NW3y1MMn11qGCS;7;Qlo9sx+wtHymn2hZ z1kgZIe-i!cum|j)6EtP^tM#vp-yJn^RX=}jod2w^Y9cIqhCbV_l)2()zIK%cQSxzg zf$Vy(9XJaBz!`Fs(h|?IJJst|nnAON8^uzzcJReIbWYtVug5QWDL-dSMdO-p+Bk?7GCWdAL=Gy;>X&ZmjIUQm5b-kVB zl)VYo9vwtY&Ukm2kMm+2^+fG`-mY$}sm@#_c>QToz%wU8xVz3NpC||olKP3?_3PAv zD^#)mpZQ&2e<{V~u(@_~O0H{@d}~3H4rhD6^&Cv4ytk0zXBNDTo^T=TtG# zx!*1Zg#HpQR;@H-BhysvUQD;CImQScz4mUMb+CLQkU{=_kFbp{_qF<(2-?5`$H`3N zt!V82Il1=eWm7fP41N_!QO?t#X)B_o;uheIIdRkYIopYShI;C7oh9~pCkN(`hMA8ygMb}DQ6$iC4J^k1Yf5L=+J-qLnX zbYjpsadbU)dFq#LdX~)L+&?8_YBT5iN=qx6CNXc4onc9&w7+@pVedu9tIER#>3zgj$N2f_yxQq@GgmMD z)o)aLd_=o`uAAZO(OrWam|NEL{YP2xdTAurkUB$LIL|@Q^yQq0-yZlMy#0Sp-|G>Q z+bwT&fqL7UPH2(;3HHCGNSTu%&Cl-Dz9Z%H_T~w@!fsyp8~YUJs9U@oUCb9*x|N@i z7?5`F3upXG9Kp78+1=tNefGZgaiU@|s{JweQ)||;ccUq0okMR-BuvQ&%jrw(1{hBL|yBjnn=Tdm5bMNEkfkRReGELZe zRk`QDAuRjmaLJp>FPwO+9_(15J;*mLBLLkXNk-(s&2#QV<6{|ngQT^Qa{Lwj0+?h_ zB?&)`zLoU3>GPsPQ39iB`cggtkrW&l`wY6(S_iUCEZ2&0t5^?z?&Dvk9{o*IFg1Ja zCOBJw_j6_=I9s6nTkspUO%7e~zCETZ6aEzdUn?t@@72ZlIa^Y zi!@y+EG2njy;2(GQ^R08uQ9Bze3MV{6D^A*Uw1{8C&r?_fi!<2o?dbdI46OQvU^}% zgl^v)zpP;3@Yv=<)9!#Ex9!0-Bw-u!QgBYf74GSO(lqteQJg$IXnV^v$i@?Q6b&7N zcT>aYskBc%h~6%;k+Lz_@q3G9RL)z_HCJt9wmtiiTf&wn7pG~_Ky$I^LWQ!;N(otG z-i}kVan6^)kKSJgUmX%!<)iYP;)eJ-`j!^T-}lrTUc1!qg>JdIEl!>|o-u!g31uDM z47BHjb&9JgvOT=bFT58zbVFn4FL4<1PxAv_fU_ij!~YHbV^{b`Si4s(!=)+y4=iPr zbk7kkrG|(zz*@yWP#M3EE zHT8Lzu~f(^A>p>5KcN znY7K<-#k$tcsP#$@Psc)tH7*4UW%EZEQt+g6J3i!2}NEy9Ge6`kff zp*~j`LA8lV;k?9v4tnqTQ^o9S#)dM069-Q}Km6bm`UwWUL>&(}Mb$+Mlgi&XV-1HHUF`Gq`1Fd^@fyO1Rhstt)KNvQ?eO%L8S&Y?6#602Sk6+>+MU8gG)w5tB_>h{ zY#8Nncb@nqxpvv6JEcv!ehZ^1s(j@Hd-s|n#iz^Wt?rtF)ZWvkCW-Pr<6Ql z@HTCiu!qM=3aHxe=PCKV@}`-R*1w^?b#uVASc6ykF0H-tbyeF@G*XI@RBJf%ZtBMR z-T4G80Szb5ajVry2`I@1kynrvD)|_805e;e$GoYQsawv6BTDrd+8w#iZ7~=m9n{kg zE2XU)u?2U5yQT?vu6%jzZ0cQ`x4PJ4qef7~x$0(Hicm?51PUPf3uw_DA+8U01HZiH zE8BDX$ov`kc6kkOca|b#)*MZgyYLm~bTy0-`BNWAG_=$TnPA-+V~^CK-?VJ-G;nKq zFdNIQZ}(ify$6qYa74Rut`?-yCr_vjCV^CX?^eqDC|kN9m7cVbwC!G()Etz=>G6QX zZdpxqZjPz1-IOjL5t3Nb<1e-mNGeNWBtP`s9ZOX34fmvEeVkcb7b?}m5lev`?mhLWj(7O`BG#-M#!m9<7x1BaR4fGyAVTqd2sXdj%S=jKF&awm zr7ds}#IZ^_2RQg8@RtNH7CXFQ(c@&4)P9fhyYyEP^nS~GYhOA)gcCkAB?RlF+i2fJ z6w3pANX+&m-Zw+brygdWjJ~*>UNaYlb~(M~$yUHiDwTNPrL*R!IX0(;IK_=e;P9Gv zK|BiJ@EQQH0~``@NkypEsc2)hPIlDX9-*>QeSY0d{6(`)K=+e-Gfp%1%Shr0wQ=>e zqfAo+b1*q|9w*{_cR8$y0#`;fP+sB}#K>i@{_^>oDV={i4-KiuDZi0S$G@K;$}KI^ zqM~Go=2cNc!?t20xjS9bTDT`hx4zSxHrokPd?(pfe79gtY8FQtBuf_oy1NV5lY8!5 z=(BNNRXO!HPTt7vNd~h;Wj$Pe$iUS6-mh99{u}psV>?6vHI;ZJ+M+h!iTs(D%wFld z_L`&I(%6RBOUY*U@V!PFL+f71(kK1=q`u!}$p232j`sPd0hCwAo+zM>UYS2x(R*cj z>D5E}C$)n=5z8*gWq*E1Kr`-jE+o0=kvi(V zd>@Nwb385hbisYc!V&#D7T0#ek&c5%u;)~SygDw&YAx{0__-L@3F!E-z6J+Pai3)` zoTUQ=ow7|4r!KMAo+6oSuIIu(r>_^VkOc;oZa$v)>WI(cPmW@UjmOWB;IcpsPB5Aq z@1F6v7d7bda=GJBCkkk+(B0~0K9y{!E^&{aOKyecnj#4aPO3C=go5}AK)BJ-t>MN! zFXG`{KEktu50fHzyZwXP(#m0lF`)ALC%qLL=Z(qu%R>;I(`!tH@3cg-rOX{`lNr-; zPuvvBf)sjH`XBV^VGF7#>Vg%h92}82H}f|HWzF<8*|a_l{GH)F=nK=iD$LN`nPxuQ z+^M*j)#Hq6z3PE4yuBnHJ=e}FX+mV4TUoEUNj04@+ZwOoq=km!;Gcvo&V5Wbs zEH@QLWDevfluz(jqs->`azkRoNzJY~)2#S78O{rlQTrUm$P*Y<1w~mz_O;+9Es>h1 z>Oi=7zmrZjP=7>ivu$iZOY2wrAzA;$w9gs#G}YWG>BT1r8Ws;9$))vluSQ_kjrqZ^ z!%&xnbms83cIXrb*`URxXL!+_r%>vt`s0wrBmRzA&(0}fB2YhVTjX5VQcXwJzMOav zk+Q^#`+1=3yj$FPPF(EyI7ECcynhsH@4-Tomz2`zJ@!HqUIb7-xL9_YmmD6JkeZz$+#Cs8Qc)R(I=nN7 z2wA%=D}H2J#P7lU-ZF(e*AtjB#g^(aXsTWb1DV|lmiLZ<3MSkKvl%q|&1st|8e$Z$ zV|EASZnY`x(GN{ShI*iHTt)5NBl)E(73%pOhM>1&DTp?IK9t_3-<7O)PVTy+s{UA_ zB~wuBEDuAOUWNVO1{csqJoQYBf`v+G*zPXXOzRKq5e#aE7lnao#k!U545a!!M1YOV zOKJ6ue>gNv#Wc9~#Pkc)2!vv+a!;PTQNR=nfBLfU{;9)z-@u&240_4F$rTU_RFGT& z85OdeQ~OE=4}sGazNQs^DD&ZXA&SnGj$)Sm2_yB_)+%A-Rw}AJk-Zd?kSQVOshgP6 zKjlIHz}0Gc!BVEo&MEC%qojigB;^N6Ee3Z zP4!8()y1dppbzj+sKimoO0}UGCx&Xf2E#q&vt1FqOmpIi+tjj-o{#OU@myO4t zo@@7${FgCk;vtcDmA?Fv$#ICIWzdz{kVQ4i@yy^THajXhSt^oTZ24Xcx+~4i&pke` zMMYwO+`A-6V%g6_iBBXsLCVQZzl%a$D#!I`l^JxR*$$-D88%hV8y2&BUj3`_Ont7B z?rUVZrGv!mOU&~x6s%+(`XKW!1}zLJ*V@L@?oxTp%Z%*LPi@(w7&z^0PIShp5;snY z>>-I=_h?x2|Nq+i>Zq!^wcm{(9g>2igeV~0wLz3{ODbI|-JJrPP?RnK$qmxo-Q6JF z-Q6YOUHG05-gDk_zVDtd?j7fkJs9k<#$Id9c;=kX^9w+*IU7}Y7p^ZQv|rZtz$ar8u&ZFnF2hoj_ZfkxU*(EzX&n0rQC4cQ|cn`-i!rN zfk7>FqIM=MAvSl+$+C9*!)S@7dE%F#e=M0i z$}l#RZHJKCKiuV9%PE2#SV|{MlDl4l-(jeUQ6x=bn5(&d&o+EEL#Bs1a1`$GL}q72 z+AzJS`}|DJ2%0q-LgIAtGf{zN@(t zds56?94q~Sz0DFm`10s9Fs;FaoWWtDOzopwN^FZ@!)$TM%=%FIj%k(_WyPDUL)B*t zGO4X>aZ{p;a(E`>*`_&-k}sb^#!Sfto;xvAqD;G!+XEY|2XT)F+YGzRzy0}TW@Dq?!q(Tcn??OL9$XzwK)^XIx1``Kzj9ImiLe8+=N1J7 zc9_+GsYtyL>-Ne@#gVH~9Z6w8^~INoRo>uSS)H_|h3BK=B}CLXcIb?DWTh<}g9?9m zhG2(FduFaEh_fs08IxT}oGs9mpN$xhUKU0X$2sWL*6tPxXUU7vDb%FmGxsdZ?||3N zyD*~%bFwQi$HMDz^ulX~j=I^;A+C1=rAb_EtzVgU;df&9Afz$KrP?ouqGu;+-w~4$ za|{M(CD*o_zuSiYB}UTw?s9qP`JXyT&cb2%S0K()3qNT}eZ&_*O>(Pozw~%b6rKrC zQniXD*nO`-5xXr_S>Vj1ocET|`c#dLZuz4^?NlOm>mjK(um|9o%eg&jA2C}A$%tW- zFH%r7dD3aW1h`FA{aAQZ!k7x%o7vTgPAy=CD` zqP@e@o{D7lH@4fqZp;5wTW>{{xf=ZG72f2KWP?cBqoS#_We1CkwAbT{>3NH8q$pdw z?*_pq66baRGIsq3h+YQz0YrYI%vagb7-GNONIt5$`@|V`#wX`_cKKun9I?2(u<5&; z1AaaRu+3qB0gF`4UJ(+oYyBy77jm+F={0<*06+jy!Lzi0;RbHbd6w`c-ftpz)RzG9 z`m4=>0x{4z(iIx_#(?ifB8A3Y$!!~%k9*et6`{A4_ zqaooWWb?aFUg*6J`6t`xf(nE!bo-^Z>$7k9e&5sGF>6$R(9yul3CmHP($DwNk1Gk= zLb@{vy7f_l#jkWsf*am^!QaqXPhoc|Cw_Vrwv%%XD^`_2inu6%H=ate@h24s=Vyzk(I~V6s!I(Z zRMJXJOYW0%@cbnH0u<@Q^6UvtvC3po)VmCGW;jYN5*E4|7V1M%EK(%TOZo}PL=otm zGv-ozw>(36QX9MSx8W#olB`;oP1YF-^{FEg7hWc1~zbu9#2wxA_T69RZXpz{mp~D=Fabnq>_xrsS zdNkD?X-}u8OOlGB#jy&nyI4I)GKI!iS46P=nWebN++BHEHx8LR$&E{k{7t0mMOZI_ z*{YYNX=%JoXXkpt2Y|+M`I>ga`Q(k z0upohK0spjY8OL4>r-X6Q3I4sdnQh!e%few1XRVwWDx&Hr?-rTvdS7kj?p_4pwReb z8n5@GXkBY7Kba8tgC%t5@5i3o06_(st1g*#LN6cHaNMU8i*UNB3rHUOE?}zqBg=5B z^@9C5deFta=E<=(3Rk`thjl$JrTKiTRdhkNf`~d;cnlLjcw7rcV%I0KE8PjPT>cQh z^E|1DbScC~^+W#{4{kge#O3L49WXWQsbNpw#Ad|nnV~fkQRw4UOpKdixFdYTO7*Z| zaW>Qo!4+@Uch4yE+hL7&7-ur6Rz35Yzu-cf^X-a5>a99DM_1;%DLh>uM}e!7!GC2G zv^M{f!TZDf*v64TR(jbFX7_K|W;Hvqs99~cnMH(uqjw)D(!6VQ&-%Md{7w_&W7E6FLDfZ= z$mgXLd&moSkTcEDp6$ZdhfIzupYSa9CcQlx!dd%Ppu)m)U%Q7+%AV@mGM^8~vFKmi z64~}Io9wrLGXi0inr z+LOc{z>%NRsPI@3mVU0DTyr0i>!UpmH0j8pVkm%GL|-few_e$o=TJ53EE68vMf zkwbO_y%J=Hdf1j|%yMwP%SbguaTv?P2d$efeWpYqJ;9^$_wDRL(U9bY&{&9x#B9+@JZ_Aq9XFEd@)-66JgtU#?d5?5XKRx`O)x`7in5L<5 zqaeIq6zZVR1SdCG^eq&SyNjnPDOknlWp9qzS0fK}yTIon$tS@Q*k75xv7nI=W;^iT zV%3Lt0pxXx`n43x>^g$6DZP^HT4<47^UiOJJg7)+F~AreL(l7hJrp5+zNeLqEv)5h z)q=12s;JyYtzgJxQ{zBYRoZlDH=iEHlJL4+?I(+vhbpJ&)w{={)3SL(ijw}Kp2S}g z3yQSS5wiUW3GPFjU|du*0dsIJnz#mcPC*j|RrRgCVt_Ql_F^E3i9D@2gP@vT4#~YN zo4F3|>_Yv`Fvyo8NVrF*KM`@qn7@>H3IeOEa2>n_|Dz@W@Y5QfCiAs^;e4JC6TwVh zh+CPCY@U4&Lc{fSl~@k?l67G6e6(=2D~hLhn29l#J&4OeE~37)4L&iwQIETaXwH?( zzaoY4D+79;LsPNo9(l*~#WWi+7qlSyOkU|+I;D}nA|sEXPtr1vrYbYD^L~idLm3o? zGSGZl8$2nC8GDxFYNNCfJ@TQwsf)yY2$aSYeo^SO!-O~rDyNFDL)RP-zeZ4gm^E-T z{?=boHlif0Hgb_n5Uz&~^9EHDk7FIFZ>L_#eqln7p8E>qHss1IH1f_5c|kr zYRtg+wmjfB2D2&B!~Kf1`9X1xoWJCSf6fvM7;??R7X$Jm08J_;amD-o^?xC(e+>SZ+71lq@4c0dv6u4koQ+(|y@yX1HN zcsmK>A0UR_9kx&bAqK?R(4Hqowq+MqwNqrfx4%_Y|fWb=%8URbS^PrS8&d*W1TF17N~y-cpr z|Ln8(!Pugc@XV=cQK^%}>{(;KP3fzQiu?LzFG<9h5i9}`XItUp@7uasz;KFSgkm%A zCb`shCiA=%{ImxdOiP|%9$K8`bEVEOD!IW@@z;wMV|jO-vuk$N8+na~`T>AmKp5r3KWVq$BG z>$Qb%Do^IwCOtrDP*p4n#2-i~dr4d$)`c^HA}Awhd8SBf%i1_|5Qnhd-cdCcm9C3IYw*;!tF6$Dl}!hUs&?a$BTeFfk;=Y7QdtTV=4@NLfOY`y1LZV zeOu%0nR&RaRX|xc@6mdb@ySQ&D7k(DLS}96B{WxGbLzcCWlmW3gbaKFfN^_VS#S{_ z_@q5MxPG@4jpX4-Etf#)a=xw8qx-@$LNF7m9TjXQ zi<8o%5x=tM84iWBwC74tIt;@-^%lXWF-M5{te3isFD=(wB%lJR5>hI}FdwsgoarA` z-(a=G$AYeyKn4f4o5q8SPd}+{?sziDfuZOB7)nY{+sI20pEhCtUbV5p>_B{z!qy!A`8`Xq z)U)+&mY$)wVPlT2w>=8Q-pzCP0}K)OWvP)r96^&XwZi-X#;=uC zp4@T%@Fg9uTebD%Y0B?334tt;dDiHv=DERvr)ZJ(#nAw z-jBm@ysG#9`uSaf?xxMwZ+ZZ~=2-t#IaSQNEv%CUmn=KU1(-ppYYInT#ZZRkbl&GY+}sm=8ZcJct#y5|5;1Qih9p!@CULIA#y&|v%l zs?+=d(h)mnfPN3I1ZdXoHJ9xbybrI?${zxNbyLx&W=9cFasxJdXyliPId`Em0M;b` z%5~+c$n?vDzk=4c0Gf96P17fU_R>a10pM}*4<2M4t+ATzn-eXZv&sdITtz~$bff_{ zcfG%BD3wM1avB~SpzHAKUDH(pnn~%!_kMs1&-v!~$hibH$Be@SPMR&snk|A(y&W|H zJVsN<$NtU!dPkMK#^XS*>_t%N574WLhqIQL$ZJF&@v{=o1$K_YoytE4N~WzD`A!?M z5iL^Rd9}aisrC>7Bt!}*x;TMxzm~c4%A81@tU6!Qm_U!`mX5Iqb@zjk z@U4STQMUd4b9#RzGWvqQo#X6hV#u;VQ!J_~_FS8KVdkyhknnmzn+%JByuP&K2gnlu z_?Jh$+)>Ej`na9g!H=>()@gn+Nz_VGLUJe0yetlL&3jgFx4CTA3!7hS_985XT%m6? zsRSY4RT+80n@fv2Se#F|htxDA)1Z9Qdur7#cXGT~&_0S!3a$Y&eT0f)#&_@Gtxcdd zO$Ob4SI=xTMHnJi+`m*hxKWH|W&9yA2;$l*1pHi6)hF6`9w!(<;YktU!74w?oOV@& zU5oJ$Dvix@V8xzTyTg%S=+qFCmlJ*RN%9b3j?;>6@n?vMo$=WNH#ek*Bi!9c3s^G9 zAb`#ON7F53wVEDKc{l;?P$<5YtfsW)wbzh($HK2>ulogl`+~bfGpkz#>VINNYD?|{ zo^<_f2;Vh|@bXwBsNUHR2D#NC5OGr+4&=l(9SmBRRl`O85$xPSrB@k*rGO~GD zyKu*z>@!?@)2`gmyR^+WJ1}qU(&F*ur;+AN1hb(NTnpNkY(rNFW-ofF;A^h z|LQ_IVu_8(ioEp@;9gw&-5bFvgOePGpUsX>MMFa{z|p51BB{V;yzA?$UD6SZOo2#? zBv`tZ`Y(!bUe&bEOb|kPW`2P1oA91%NRUecpmgnE$PQ>*zHr-@S0QH!s%vl8Xg8(6 z-&3H>5XBa)XB4f6w8yc6-@Xo5gpsPss!L&8C9XYh^4p4F3ZmDu-I%!}F=06};Rskz z+%~%&Pspza^Yr5>@J{sNA)58BZdfOqKr|(BsoO*FAQL)|F>CET4(UBWSUm;&2cj>w}hHK4$chL zo-vU-<)MNnUH?W;)#!4!k6%7TAS^>a*gZ+>3*1t@6pv_2yCqUyGcuL;mAc@yE__9X z7`8668{mByQRpWoSyFvQ9$a$NeAgr>zl0QvDo@~nLv%M!qOgp(HE&o< z>`g1~o^3EDt3`V-1ikd&uRF{?FXsQMh5U;8fyHq0VLk^#8sNo>0jQq7N@0W&uLW`b zB;Q=Cm{M-Rh#uo%tJ&?lD;jiXVn;N`W7Sl#eO3rw`Nd)`$&oAF=R0$&!l5xK| zq#(VDNk7j+`1R{x0(JqarlTqHme_lmbbFgR^8SNfwMhIV0^$_v!pK z#SqS-jF>tG_QQQmbBw@7ZAR2UF$UhvCXh{0x4lnGB$ns0Dxc5C@&VFNs@wuiPTRMN z@cL(oo(PCkRLMs8>|o-PbPK_njGB)O@?HVbeL5GXi?!3tJ>2yDbYeSc*-=k-vOQ)S z;l=y1vXmZ4bG&5D4+%z#&Le6;IJ(MTM(LkJ=a!YTm!we)q-u7zk#VNPGw<@e1>2gd zBHY#ycr|lx^4mGa>^9aU@i>H>^Wrr4`(kH5-)m3ju9(bmf7^MUZ1>;Sz-OJ_0llHL z%Den=%jR)plv2kXkJiBR9&9?U+vDA{(^b+t+fCmIa^hDbY5b03pnAzo%MFXX8zZS% z`}m;QPbBwdUBIh+W`!|2I9f|jkNS$iwiQwfL@nrcH7{E=c<;ex5Q6}1QWH~gaG4PT zaPpjyW1RQ_8m0;s1oWy$Q~yR?o<3m6g-D-ktHe=G&@Jt0qKI9x%R&x1k9;lF(lX&& zL@qe>55U?8NjsUYPeqJRN%79~c*tdowlGN<%thd;&2yR?&r+}Rsav$>W2Mb(4Q|Wb zBhwU=(r`BedW0``Dn5-kaFae?Fn8e2cF(PZ%yc0&1>y~6VlSc<^L;+m4e;<~UW0pU z8=dXwAw*oLh;|V^KaB>=HJlhZa@;W#t0Q&Du^nC1evxiB(I>4i7sOt-a}FcXlc>1q z3Khfb?}$k_9vsOjXTg<^W}`p>QNFXEh{kS%Ozl55jG1|}J6KoAk+TxVR@RpEuT__`JLCI3cCgY#cUvCmp=i>Jp{#`)E!&`&+a~cA>QW-N$Z1s)=dFaK# z&%QL68ddRNvfK&b9uFv&Qh#++pSN;($9_)}d$mu0EUTd_U77J9=<|{iB8Xvf1lL^( z<+e1fMI6@i%qnQ3qqHZ3+_7@S+2hLKPod`}PI(A!9}o^+o+>0+k>jv$Z-PHY4%S31 z8W*!|jaLZD;%MbKf9Ww^jszfPOrNH33wEcyi}?Ihb&}(czy%UV4$=|%lsUC(zPJ;p zhv}!_I$p{XpJo+}P|Ad7?6b*=Z{rhW)SJa9LgkRkNc@WqKY-+G`q?iOZhOe)6<2ww z+WXJZ1c|)%opoDA*xy!jf}t@mP#XoHu6+;qXo}fTj1sA&mVtvFl-IE%UT6HyrpE?w zu#pB4uky>o|a50hh-P;*U9+yz9_@yD^e1&PY5jL=R^ts#RZ z$>Z|xYimu=QTWr{v4|*OQljrrGoZ-^-!st=6SS_-V7sJ^5K7NFq6YYGl;tVc2Y-8) zHW1pVp0;m$Z)$Ykz7McT>BDAvR&4A>;!$Z|x3VHv^+v#ik((1JPV zf<1~p<5RGV5&P;T+2TVKdJh2Sxy&NSL%?|sOq~HppXo@;8{@h&i`ugT&U3SRJ7gL0 z;^Ab-!^yegC->wJ{5Ya8+Qo@F9+)=<1w-zjeuH7B^iq}hG=IOnkxsx!AXJo{J#%VCU?fS7FcY+GgjA-Ajh&BAWEn zAtWua1Ca$t4rCVnB=!8PX-txMeG6C-p7Cg<@DM_bN>c_h`1d?v=HUb-Xyrh;gZ!IE z9a5k$VwPf=Nl2a5M!r zs@M390Vg8-z+w5x5U|d;vOss);TB={bb1eg^RrPEl|mn5Hi1I%=Vx|AfgkIhv~VLQ zazgIFL9H}GlkEfQ?|5lU;ok7<; zmn7fuv{$_RkVW+a1bPd|^6CTo=j(4N_WS2X2c8>EMeGvP1h|Iw-gs`nR_Mh!@Zchh zz=ON>LU-jC0dB7#3uJjhe~KUiLHLE0A)VCR=yDsy4ybjy+bXmfo?PZ;bBUebV5)*n zpAbem%zr>d403nh!WO0_DYyeVroC0|d19A!VkN#)RmpWMNZwaOEsNjgxi{h*M~l1| z)IIOfM$1=X;Z6_aQm%K%@9*&Y4nctdgi{@WaLUVcN%y-Bfz}hvYJMju3^<4L0Zh*0 zP%_T}0`6T2Bb{u6VMQE0ZJEjDtq~$_(83PNIlWxv50FA{VHVXK)B{|=-T|a2HmCGP zCC|2#L)J-a$Ikh-ToB%%)a1~-+Msd*h&3%Hd;oG4y; zssp_T{}t%H)ZcgBjb;STUhBLo=aL&QdA;+1%+0lzOt>+A05wMZLvqX$pW5L&qwC+T zk8OjKI+>fGm}fu0;I(P{uOB5hA3>0uz}|Gpe#WDbS1rH2 z?l(>}?N840K+laBz|mnp-|(F=6#OBjztD&Hk!qvDC+(7A@sVt$c{(H__y9u?pv3m4 zbPX^$ug_#v`IZyudKcod9a|s%OR~PjFm*wsV6l9^h>_;RVDW{JDOZk~>p@8oJfA~g z&ufOP8IgV9r_)EZpyD+j>g&t-2*muxZNxrq9K+UUAaWcbY=qoB9Smwp{wvb0w-HH z{mRXzWxsLvI8+sIBNMt|q(Ig|`BaP^!!Ba*lu@CgSB;mrF&U<)Iop7_;r4$tHu49| z8VeHlI@x4TsjVxpj4QE?j|fckde9Z*;?M^pK1oKAZ4Jp?Ux)pTiT&R^E=?4po#b}9 z-GICxK!7e3;2oL+)BZ-Ajex6zr*apY*9iD|;=J?s0T>QFe&_hJ+h{8)0bYfk1Jbx;X$>yhZpE9`qnP!9mg(tH%(c$VNQz_r!|Qjh@G`pFePmnx`^YB$GV z2i#nmL-v@jNthyLRE}?DfI-YxR~Ghp!G@fvt5>MY_8yX_HO7K zjzrTMFRt5TBztFvEt5lvv1GtOOJ1hA=*&kJ2p##2mg!$e1UIMB7YmxVN z%ch|5?qqkU-MqS#Bo6YMT;-=049FQoWATuO8k}JW?z|qchemapcWj^t-Rt@|OYOQC z9Erf*kBTADd8oG8fs_>!QPArjFLH}T6*V6mPETouuF z<+?GRv^0b%%ASTD3sMw$ziJ~6^>An9At4(C`$QU?+s%@)ZH5PqX*ic`Vvnl>5WQj= zoi{_dUuH=hcg_>WwU z|0kM3G-wtBt-hMO;Ic9AjA_hzJcsKz`>eRlETFQ5-2UJ&bpuC|Yp&lwMq^qaL?5ir ztftY$dm3x6K3%C>R}0k7vP=FmviJ|P!E+49*ut|buglAdRjVAwrnJoX8heP5&?`QB zcpSzdUKj1U+24FU2>Om!JZL}BpA{DqmDMXEH2Rk-b%v-LUHR|P^FK9-mJf+_dtE3` zq=wqhWC@OIjL)9FG{o%;Hhz!aYDeWR5eMglHVfD!g*P0Rb4DGhdNCz>!Fq!Bl7}os zi9W3*?4?}-r-;88L8|g@pMSX0$$di$nB+jbn@@mZ4QtMYZy5AU05Bd0$gcQ4zY1t) z_IN9ns6ZRCu4v>&s-MmQ`r>^twNBR=e=&rB=E4U%wjozc@&^EVKTU$lS!46((ijpb zW(ZnzV!IM7`S`&)YCMa$v$QPFQ(1HKB}Qi}3OANp+olTax?V+=z7uKUIKbwWNC%Ec zINbe;6+ca%sb}EEV8C%SIpzll%v*DbX$lx6Z-TV`NY!De=bSRq?)-cWxReK|n$H(P z>mQ{+d%A&AwntRWB_E&~fBo(^oZ4*)es@Rm9dCo_{rwCeE4;J~_)}fgTmR6>9l#M? zzp2>Ghl2CF83V6NMyP^s-1BOG@n72x=_)Wlg=poGPTFdubdVillFnk=k(a8e>D!kL zETkx#(!0(9N9dQtQBpO7R7QS|LsPH6$26wz=Dlr~pK!-SGF&+aRw0T{;0>BLKR`(q zGXIpi@NEaC2G~bI+~G=;6hp_@kmbpqrPE;Nukw>#>SCz1*6>9()kNPO+hC!ta+N4X zR{kb$14v+~`&|tuoY$7`Lu_y0j5Xc^!sLoV@>&uHav;F?$ zOM8^&KlF;4`3{QE34GE1u)3EXg-#8TDOldL133g3#M1s- zT)FP2G?6p)sN&tX=C$saN1Qt}^OOk&S(glR@!EV>aV|_NQ}pPh{xC*_Ia`#Ar@ck~ za4ssz-WG%GMAGEZ9-*TcvqPIzZ@vs)Su zP71?xL2a}pRq63pLyY{az>*TuliK4;Jk)Cmk3H=jQ`I%&@1S2o4KU$!hcYS-foTU1#uxCRZ zu?4bUxt%wjD5yJGapcP88*P0UhpsiZo`CF;1v zGc*5S7y$B1Che<_Zj|R&`1i(pORiG~BX_=2a;w{aWr@fGY@1;xVa`6Auzmc?-sweX ze-EqxI4ig=@3t6PUlRGxta(Dh5HGigOGgzEk-R9;rk75?B9*Agz%%hf7(>nM$C5sq z_m~*a%q6m&`Y`C5kI)Ds=vcCxi-gD*VG;VV&hhar^fTm;qED$WCFjQZ*y3%`2e%-( zGBdlFzVAu3*PU0)uaOjy@!QJIOf2wM$||OQcp)y=7;Ij4nrrKSTcfIPi(CfC!`qQ& zbv(Tv*nt$8Pw`d^?(+i92v18VP;uZ4N*_0JRO9ta@br9bF7JWv{>s-M6Pb!Kdw{@P zAS=9{;sbRu=oMT z(qB!>fA4hx*m#Kj)t=|dZRgj$2*B{tHRR1K9v=E`6PiCUH6ccw8vI=A+0!u;UDQU) zHEyIVgCX67B#4!>S?Z`-R?%jq<M?eduw7yGw3Zwv=$ z??kvNB`QU#h1H!tceV1J{YaXQ7C=;|rM(Fytpb#R?!o!lHlG4~o z9kwlldpxMxj8kyUj)(ITeFOZ;R@!3&K1nDh){2^ikR!j$mAA?$&&E42M(QZu?Ym_q ztinbW3WS#(s!b-2iN;IFw6h*er6h0YRrATCZKGf0w=^nD8;@R;!J^uGLe4(>B)gcE z#ZFpm3!zTY5SXQ9rx_e+Zmd76(jtj{tsmvWht9P%P8HOTFp!p|E@Fki8|todk;ygc zt>*APKYP!g(=W@l#jjzJzxUnj2nX@zbE7nfaO&!+7WH%HCuxCU7_paTDTK#g1qil` zzC0KxLMT6bXjbsPWYkk?BZtj_K3npJ~M9QHkZU z=)J9BVn76Gwenl}Wg)2*4R2^H4T)>Ee{P@+VQqJ-Me-!UcE_6kCa=WLLlYaCC~V;9 z^)7MDM?YKJ!?Jus{&ia^38}X^p(PSWnwAMi;cZjK$TbDaO)89p*mgd+5vxOXINje3 z_Z#biE9W2BQH>5m7no*y&QQRY!D`o}msbF_NN)g)c>-)&sT+WuR5AEFFE8L|a^s5? zP$n@9M*^KId{sN&APj?YLd{{Cd+)?D6>kew1U?LDksGljH280lV9vLObQ zn()Gs^pxc+xj8Cf7%iQ2r};CGnB82ON&l-dNdb)x@o=4iE5h*^Zxwq@995Z=9~_=(~6R9zMuvl+dh z)En_U-}7lJf%5sOq^PH5s^e+KHdy&0&J@9`2&&P!LJ?vUoH*$Tfs@>IORkUCR3b-2 z;Ka{Yvy%WJZFBVvVS#s`^v1&(G7KF}`*ah|p+!^cMcxkus;0%B&h6{`UpaIv6Zp4g z+}e*?IWp2#6J)$G^1tX6eUU_{uroGCULcFhU>0oLR}Lq;8+Q62a_>Up$gYTq!5m*G z@C6NOs!~u$MR3dZySJ{4(`)?(8pP#;Ia&DHMQ%&M$VpSoanXnrHt>CE#Wm^90PRka zjLORFmfCC%v*!Z_PMA`KE$@MKaVxpKDArX5k`#a(16{YqS(QT3atCi|dT` zk~Z8C1{_+*IW1Hj-U)6s2bJjYFL$o`PaVK1Fx@GREA|j8f|cUuWa(;0mMM(@|PL*yN!oAzVM;Ny^_DYz{X{@dL~F zF`6(?<^h4BB(aVBYJuJxIsHT&pb{>%GvH{NWa2>D!Q+YcIgodszKia8PwX^nEX(wm z>qBV0a}w0RIck$YRdD!7pvG9U&>>bY97antUQuo3Z{cs0o@oSdGW)FXixUrKOj#OkA%C2%Eu01tC38M7pSlimbRvc$&h)lXB z|CLc*97UG(+C)1jf%0h>&)sxhZX2_@&lW;N;nfeqC5oy{q?)K=hq@t+{wU{7VeH(- zEbx4=lRM zRMxdf3|ZLQ9z9efefz5E4)r=JwK1@&YwS^8s%674M? zlgkFL(R*6ZWSX<)gCHn0LD50Y%1QiMB~_}h7yF0nk6(6=AE`RT?;S1MebM6Swr>ev z?RHLuXKZPbn{0dCx0;O1WSUfQp5e6WcasBq#h7ey(B!{N9P6OA zQj6H77&#+#H>r~m(cVHrt7R{~B-*>*pKzwToxApOTCW4Z(z11*^6m!k9O9YUQyUiiC3Q)k)dc8H-BMBhgzSz@8f{1^@;FrD=wf)-LID7b;dW*O^SrLta@ zX4~tMdrskK*k90y7t7=#;DbRFzWyx!_79Q;Nxa32^pm1<2eOA&pT{8*yz)~dYNciu zE(mDwF48hcea6=VP0i}S9|>x}3ccsM%+1hPB4y>zean^Ux`Lz4m0;qpijHsvzh+>r zTbTW^Jo^8R!%qw}#~@O>nZCk`02+u*0nGaqMBpdaOpoVm`Paj<4aEeexpi{44_!|d#OijXzmAf^+W@rY zCv2?lB5(r<7Q+D+YFi0k*Q_9!^~JjKRRhMR^MSm#>4{2kZlSbNJZ(uvZbso(h-s=i zgn82pWNpN5(PwaHRf|2_iy#x782@xC9dXXXZykq5+Zd@hk_BM07rgiGGmyQ);bSFn z8kdK_wYE{f#TpjncxP@Mo*t}}5K`uO@2J0rJ{s(>b~0(kBUz3P8kE%2kCaN89e3uH z&XaI#ORCdhkbUmjyc=wX(TGmEOigm0;PIkz=P1d^2FbJRuvgTZG!mqqn?vYapy zy5eyH0%i;MJOwF6a#_k$tCpwUWMR42ef#q!!j1fJ8L0yWP`1;#OF?jo(DO;bi zXo3<6kshWe<`NOnA(QUPCzcFwsIC*~_Qy6E^S8Y1i^nN=DnqwPyKvfeS{$7^m&)j6 zgY}_O0Ab8zpoG^s+M<=gbckrq{1dXmRC-6CCEDv5n>ft$p*6H|o6_Py3EX9L0e`GD zV-WL}+UDcuXqX325N)XL8kUi6JZ%>R*%VzveHe1?@8X0V)GNrbfE! zmtuZQfVng5JL`}uOQrNbbO*ShCw*NV^*0_8eav8`vXRk(m<~m-GSlX!0l7N3t$DqXg4&Im>(l|tEq1G0mE z$6j4WznV_+$ht5K+#O*Z&~M{^N_tIW+4qOP z{abgNRI=7vil>&^#~v=A^XM4(pxY2m)x?05i-!u&I$#BLJbFAMFO1V3@NT^2tOk!h zDA+oeMLJ53(0MzhHuz&TwbX{^p_ra^gT@mFpn$kfkHiYvME#gb$bmjlycI8pn@=DrE?&m?CGE+KPg z^cNJ24K(SxlWt%DMt)UTyKqP4}bC$<0W31|NpZl~!$Tw2$}Q8ni8f2H<1lL@3 z6?(vW`{CIWv{zmq^N=h+^P!|=aTs3?FIXW&Ot;&xpU!b9`i1@cc`ii0j~%{ybni$- zhvmEyi*5O&h9#)6w(REw2jw6}Y~X{kQR5i^)pI&y1rTEglPD%KRk*4;4vM}o`W;4Oi{cU_OUV6NsA zK^Q3c&|_WDd*@aEnuAdl1R#BZPsxvPa)EkKX(~MNA9=O>$q(b7^Od-T*3t0}&C0@x zHk^<`4Qa20p84gFfV;Kw#B+{Z^cimWO?DnEj~w>`uh_ ztl+lwzF(YCev>A^V)Crmq~kskk375`b*wOGv}m|+yd%#9pREK;q#7MP*SZP7G%pZ~zIXVzu`<{UDi%I1hAtFMKq2DB2Z#pqv z|Nk3e&mZQ($=I$^;Q-Y-*QDjr$BP&{C<5-LTh8CG zX8k)tS^r}`u(Glf(3ZlQE%HS*Ot&PZ338Ogqc*x}eL0A2K1ThbYe`)od5s?+j71cO z^(6gRap=f$tcfr5U0LN9A%rdG%#ov0*#N=NhLUlbo#aR_3v>kw!(myqs!ma*V1!_6 zp*122AqAEJ%!pRRubc|n`X%8ZO4G{EvX+R3zCANTH!-b6K4v@jlzC4wQ_b>C2FWIQ zO=c|+!j8I@rv@<I^Ki@02%JQ>5k`0{srqh+Epm1ESi;7ne!2c(#Q|V>8l35>~k!W9lnJ z4A5Sz6W;zL8{!+tb~0GLZ-(#3U~kq48>?s9tSS){)8uRa0SbEu_R;N%%G+DEeK+*s zJnSfzDcGsO!G>mmu6QqjWao*y8+E2D#d+RJCzN!bj4aQh=ggkAGkPG{8@ z=U6L`H32cl<>cI=d=JI2q1zuaorLu;lIsAQ`{rRw+T&NJ0fEez^Fm}FmF+Gm^7;Ek!DYKXy@LW!2)x8Y$z^g+Y-D?-!;KXj+)=$Y@)t$tM{h+NkDTsa;@=es=} zxi->HRntY2LD%GnVM#;m#qtdbOK_nTsDKqs7w; zp2JNc(vUTomQ0bPP$;jF10%jG@sk9~K!8gjj{y!y0BEehxVlhC@)(} zaa2YOI$gV5dn34>FLxnmqnj>V4eb*faoRzhetB)2CKJ-Ow}^e&-ElVERzy8yp|+)2 zU`Q{A8E$KaiGj`A$j7k2Px$fhU9j6ir}ixf)|;=`Q8Kp}4$3NDQp=4=d>xHatfpx0 z*Qsm>Tc`b=1C=^}TM2#nVjzCdxN87)&E4QlgDa+1P=e|EtEt~)ar74BD5c3oHusF> z?C!W#iCy%Wo!NZn-g&g%Qul^}dbI81xYb~Yl^Mw+i&O{mwY)rcwMkCa#zkF1Vu`lJ zT((Hi!FM`;A3k+`TP_T<#|02GVnW@wJ!G$(GNq~gPnUA8T)qCt8TjAp&yZ(<9S00> zb))FdHXB(z_SP!VZ-84;wK{8&^%t<}c@FB?1)qQZ0YZR|{{UTj;RCszcP1I@f_yte zDHk6cbPST6Gd6M5Ism}FGQnW21YxXLiiLU%=pUBO{!9zK`S(T@;`h~QknwuW-rb$$ zi}yf!T7r@O+B{8}^I9mb+Bx_(CTY8##(DpJoGoDOTuNf5qrtl;_PlkMU1j*w@;5Dy zhVY>doy_qmNt(u?aRqi-yU9>5{(~lv?ZK5^KI|@Z;fo<4ZP5Z~_lR9-_uTm6nsWS= z#QvW@Hyr4)VEBO32PM`SiV}2HP2TTUW09d? z7yZJ%Ee_+RJDP%~r}1+CIep@&y4V$Rq5&^0&^A8~LEGGcG(+yc$Rcf+Xl^kQi}Xb7 z}l9gzVzajm%Jsm#KM{5cLhL3%+c=r3>X6^4}eP6{42PkX8;kYUJ<}x z73Tn=BStls9Af|fT-0XtefkKi8Lu2T9N0X*B*#8gajuD>T$+h#)OM=W5=>O64#@79 zVUnw`+q>HWS4oi+1nU+bJmUdX?m#>5b7uNyp*^ zI8iV{;z$CYfdrXwA#-4CeRHu{*d3+ERpUL>$3qVuhPw2yYS~Itmu64>ri=djYHjdI zl8#NP6Yt<-}wu$mL5QGj{_Co zI*w^z8xQE={=a|C@+F3n(3pu=QM`)c)f8;;h3 zxVsz$5~(UYk?T^AaOl)THt-Y+?|G+NzayAuVcuGmJDZ^K43~#dzyAH4817^ z1k$$4KKhI76U$9VzgoDb&6zp?Dw7NyjLji!D)MD{4jVbvGok~DKDFofA58iGZxURq zBV8d_Z_IKlFm};X0AiWC8mSA*=&=KbF1B0*Sy$xIu`DLQ#|f;!#Zv4xmgjur5a7i^ zw9nG1C=5d$J*dZHyDuX}xErGJ@i!^Vf0Yd8pXD(BxBUG_ED%!8oSo%*$D=gPl(bbr z=ZQ0?Ho;!Ht@;ln^l;xW2c>Ut6J!B)@E-z%0pHv|#{UA%{YNP0-e&+;^qS}24HUEW zzaIgJum5fZtADq`4^YUzTjBPGvF)-%lj literal 0 HcmV?d00001 diff --git a/dox/dev_guides/cdl/images/cdl_image011.jpg b/dox/dev_guides/cdl/images/cdl_image011.jpg new file mode 100644 index 0000000000000000000000000000000000000000..d67dff7e0b7db3100ca8258bd49e7f16d72e085d GIT binary patch literal 61182 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�}L^&s1k*Iu?p)|=j zRvFq{#PS#@xJ9B(*_o(2_|i{B-DA*(f`Kx^1!$=Cr#^+Y`%NPZm)esEj#A;bw__&2 ziRv;ys=I<758ROmNk3>|Laokh5Zbs&aHmdz6fX0&^h_~30#i~D+Hc;8nh|^wVkzZ` zO6BU&m?`BrXsdQDqPWhf^FLpXPMF^c+G?2FZ3$vOeJcRG*+|7@LT$*bSGM3_!wZ^N z)R@A5y3EX3BGKeF&-Dt&Z?KkQR0d|T<`)|^!Vl`L!34;@3pFlIMs~|QMZfIQ-vm1Z2Z$V*fBUA zbQl4GWK@lThUS-b&*JN**h)(|A-+{6^~Aeg7fSJ!q(O?Iz@&Giri6r-`6NhndyRE0 zyX+NvDQ`WIug7>rQ1vGsFeT(}16?S!hww)XUl}LUy}gC)O9hfRG1CY=*wh$sD;q{! ztH8C*r?)Lh0^D?1J!ZKL@Qxtaf93t^ZO=$cO-XKlZavsL){Jj07P#q`4OiG5yW{uF zpzL4fBN`&QTDDdiL{@?D5KG3dv?47_xFB5PCaPObIrz?Obc zWVA7=a1j8Ez9A=OA$yM%nU@@4@AMmts3T;ke`}^X33O3I+&Pd18k&ik-i+#!wjAO< z!Yss9FuJ0u;4xfU(hGaGux-u3UPDtg0*2;40k^rd4JyS9oxfa7OWLAcbp;^uiz9H2 zd@?(&=k4K2w(s6fY)jBRA{D^pK_YjYRn7WoZ9o39!0{JBqL&iyh@a%9ZBRMrAAe7L z2-<6v)%iYbPms#XJ@p@efkLtMU8HI{>jxlO3+Y)fwEAu&_U(i3sZGS!M&B*YR@+OSjNoc527`l(-0rm3EFe+oIX zaJXo1lIi=<`tpVH+$am!BzTHF%I zXIQ*du+9Y`3k!?4kJS7M?#dgQ(fY|{+-dOr`@sBp9PHCqR40v{K}@0%T<>$2Nkwh2 z*FaO=BOM#tqBUup@9auz=Ao?hFB|0QV1xmBsF(}=AFQh)2jfYPB0AyWFve04KI-w~B zr4;7hYaim;OwC0)1poMlC`?nSXlMxDTOV8juL=h1Ki2X10ayl_zb1?Z*OELK!=BMO z?QverlM7NDoI_>9yb348^})z-{`AKqY>FW!PmZED(Wfx0_pybZ7PKj5YlV@$W~*q2Na7;5&`E~KatdA(|1-5@& zKu~`d+g&DbyzPI&*hNlM8)m`yHoLBNxgwYU?&vm~vp8xI^>o4CZ@>Q!DoY literal 0 HcmV?d00001 diff --git a/dox/dev_guides/cdl/images/cdl_image012.jpg b/dox/dev_guides/cdl/images/cdl_image012.jpg new file mode 100644 index 0000000000000000000000000000000000000000..e60fdd6fa1b4b11cae124619a0a5ea6990b3e3ad GIT binary patch literal 43104 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 literal 0 HcmV?d00001 diff --git a/dox/dev_guides/dev_guides.md b/dox/dev_guides/dev_guides.md new file mode 100644 index 0000000000..e72a1dc8b9 --- /dev/null +++ b/dox/dev_guides/dev_guides.md @@ -0,0 +1,102 @@ + Developer Guides {#dev_guides} +================ + +@section OCCT_OVW_SECTION1 Source Repository + +This directory contains sources of Open CASCADE Technology (OCCT), a collection +of C++ libraries providing services for 3D surface and solid modeling, CAD data +exchange, and visualization. OCCT can be best applied in development of +software dealing with 3D modeling (CAD), manufacturing / measuring (CAM) or +numerical simulation (CAE). + +The OCCT code is subject to the Open CASCADE Technology Public License Version +6.6 (the "License"). You may not use the content of the relevant files except in +compliance with the License. Please see the LICENSE file or obtain a copy of the +License at http://www.opencascade.org and read it completely before using this +software. + +@section OCCT_OVW_SECTION11 Building OCCT Libraries + +The source package of the Open CASCADE Technology including the source files of samples +and tools and the set of building procedures is available for self-dependent preparation +binary files on UNIX and Windows platforms. + +In order to build OCCT libraries from these sources for use in your program, +you need to: + +1. Install the required third-party libraries. + + Follow the instructions provided in the documents titled "Building 3rd party + products for OCCT" on http://dev.opencascade.org/?q=home/resources for + choice of the needed libraries, their installation and building. + +2. If you use OCCT sources from Git repository or do come changes affecting + CDL files or dependencies of OCCT toolkit, update header files generated + from CDL, and regenerate build scripts for your environment using WOK. + See \subpage dev_guides__wok "WOK" for details. + + Skip to step 3 if you use complete source package (e.g. official OCCT + release) without changes in CDL. + +3. Build using your preferred build tool. + - \subpage dev_guides__building__automake "Building on Linux with Autotools" + - \subpage dev_guides__building__cmake "Building with CMake (cross-platform)" + - \subpage dev_guides__building__code_blocks "Building on Mac OS X with Code::Blocks" + - \subpage dev_guides__building__msvc "Building on Windows with MS Visual Studio 2005-2012" + - \subpage dev_guides__building__xcode "Building on Mac OS X with Xcode" + +The current version of OCCT can be consulted in the file src/Standard/Standard_Version.hxx + +@section OCCT_OVW_SECTION111 Automatic tests + +OCCT automatic testing system is integrated with @ref draw "DRAW Test Harness", +a console application based on Tcl (a scripting language). +All tests are run from DRAW command prompt (run **draw.bat** or +**draw.sh** to start it). + +Standard OCCT tests are located in subdirectory **tests** of the OCCT root +folder. This location is set as default at DRAW start (see environment variable +_CSF_TestScriptsPath_ defined in **src/DrawResources/DrawDefaults**). + +The tests are organized in three levels: +- Group: a group of related test grids, usually testing a particular subset of OCCT functionality (e.g. *blend*). +- Grid: a set of test cases within a group, usually aimed at testing a particular aspect or mode of execution of the relevant functionality (e.g. *buildevol*). +- Test case: a script implementing an individual test (e.g. *K4*). + +To run all tests, type command *testgrid*: + + Draw[]\> testgrid + +For running only a group or a grid of tests, give additional arguments indicating the group and (if needed) the grid name: + + Draw[]\> testgrid blend simple + +As the tests progress, the result of each test case is reported. +At the end of the log a summary of test cases is output, including the list of +detected regressions and improvements, if any. +The tests are considered as non-regressive if only OK, BAD (i.e. known problem), +and SKIPPED (i.e. not executed, typically because of lack of a data file) +statuses are reported. + +To run a single test, type command 'test' followed by the names of +group, grid, and test case. + + Draw[1]\> test blend simple A1 + CASE blend simple A1: OK + +To see intermediate commands and their output during the test execution, +add one more argument '-echo' at the end of the command line, or type 'dlog get' +after test completion. + +For more information consult \subpage dev_guides__tests "Automatic Testing System" + +@section OCCT_OVW_SECTION1112 CDL Overview + +CDL is the component definition language of the Open CASCADE Technology (OCCT) programming platform. +Some components, which CDL allows you to create, are specific to OCCT application architecture. + +For more information consult \subpage dev_guides__cdl "Component Definition Language Developer's Guide" + +@section OCCT_OVW_SECTION1113 Documentation Overview + +\subpage dev_guides__documentation "Documentation Developer's Guide" diff --git a/dox/dev_guides/documentation/documentation.md b/dox/dev_guides/documentation/documentation.md new file mode 100644 index 0000000000..d8965dd884 --- /dev/null +++ b/dox/dev_guides/documentation/documentation.md @@ -0,0 +1,531 @@ + Documentation {#dev_guides__documentation} +================= + +@section OCCT_DM_SECTION_1 Introduction + +This document provides practical guidenes for generation and editing of OCCT user documentation. + +@section OCCT_DM_SECTION_2 Prerequisites + +Tcl/Tk +The lates version: http://www.tcl.tk/software/tcltk/download.html + +Doxygen ( >= 1.8.4 ) +The latest version: http://www.stack.nl/~dimitri/doxygen/download.html + +MathJax (used for rendering math formulas in browser). Download it for local installation or use the MathJax Content Delivery Network. \(read +@htmlonly Formulas @endhtmlonly paragraph for more detailed description\). +The latest version: http://www.mathjax.org/download/ + +MiKTeX or equivalent tool (used for PDF document creation) +Latest version: http://miktex.org/download + +@section OCCT_DM_SECTION_2_1 Documentation Generation + +Run gendoc.bat from OCCT directory to generate all articles are defined in FILES.txt: + +gendoc.bat options: + + * -html : To generate HTML files (cannot be used with -pdf); + * -pdf : To generate PDF files (cannot be used with -html); + * -m= : Specifies list of articles to generate. If it is not specified, all files, mentioned in FILES.txt are processed; + * -l= : Specifies the article caption for a single document; + * -h : Prints help message; + * -v : Specifies the Verbose mode (info on all script actions is shown). + +If you run the command without arguments (like example above) it will generate HTML documentation +for all articles are defined into FILES.txt. + +**Note**: the generation process generates PDF files for each article, +but in html case it generates common Html page with references to the ones. + +For generation of specific article you need: + * have it's name with relative path (from \%OCCDIR\%/dox/ to the file) contained in FILES.txt + (is located into \%OCCDIR\%/dox/ directory). + +@verbatim +devs_guid/documentation/documentation.md +@endverbatim + +where documentation .md is name of article and devs_guid/documentation/ is relative path of it + + * use this name with -m option in the generation process: + +@verbatim +% gen.bat -html -m=devs_guid/documentation/documentation.md +@endverbatim + +Multiple files are separated with comma: + +@verbatim +% gen.bat -html -m=MD_FILE_1,MD_FILE_2 +@endverbatim + +To sepcify a article name with -l option, use tcl list to prevent whitespaces incorrect interpretation: + +@verbatim +% gen.bat -pdf -m=MD_FILE_1 -l=[list MD File 1 Label] +@endverbatim + +@section OCCT_DM_SECTION_3 Documentation Conventions + +This section contains information about conventions in the field of OCCT documentation file format, +structure of documentation directories, etc. + +@subsection OCCT_DM_SECTION_3_1 File Format + +It is proposed to use MarkDown file format for easy maintainance of generic text documents. +The MarkDown files have a "*.md" extension and are based on rules desribed in +@htmlonly Document Syntax @endhtmlonly section. + +@subsection OCCT_DM_SECTION_3_2 Directory Structure + +![](/devs_guide/documentation/images/documentation_image001.png) + +Every separate article has own folder if images are used in it. These images +are stored into "images" subfolder. + +If you want to use the same image for several articles, you can place the one into "dox/resources" folder. + +**Note**: Every article can use any image that is used by others articles. To avoid incorrect image +displaying, use relative path to the image (starting from dox folder). For instance +@verbatim +![](/devs_guide/snv/images/snv_image001.svg) +@endverbatim + +Result of generation of the documentation is: + +%OCCT_DIR% / doc - a folder for generated articles; + * html/ - a directory for generated HTML pages; + * pdf/ - a directory for generated PDF files. + +@section OCCT_DM_SECTION_4 Adding a New Article + + - Place a new article into folder that is chosen taking into account the place of the article +at the hierarchy of the documentation. For instance the article about "using SVN working with OCCT +source code" (svn.md - the file of the article) might be placed into /dox/devs_guide/ . If the article has images then you may create +the own folder of the article and subfolder in it for images. For instance +*/dox/devs_guide/svn/ - for svn.md file +*/dox/devs_guide/svn/images/ - for images + + - Update dox/FILES.txt to add relative path to svn.md. For instance +@verbatim +devs_guide/snv/svn.md +@endverbatim + +**Note**: the place of the relative path to an article is connected with the place +into treeview of html version. + + +Note, that you should specify a file tag, not the document name. +See Header section for details. + +@section OCCT_DOC_SECTION_5 Additional Resources + +More information about OCCT can be found at http://www.opencascade.org + +The information on formula syntax can be found at: +http://en.wikipedia.org/wiki/Help:Displaying_a_formula + +More information on MarkDown and Doxygen syntax can be found at: +http://www.stack.nl/~dimitri/doxygen/manual + + +@section OCCT_DM_SECTION_A Appendix 1: Document Syntax + +Each OCCT document file in *.md format has a simple structure. +It can contain: + +| Content type | Obligation | +| :---------------- | :-------------------: | +| Header | M | +| Footer | M | +| Plain text | O | +| List | O | +| Table | O | +| Code | O | +| Formula | O | +| Image | O | +| Page numbers | M (auto generation) | +| Table of contents | M (auto generation) | + +The legend: + + * M is for Mandatory + * O is for Optional + +@subsection OCCT_DM_SECTION_A_1 Text Caption (a header) + +headings of different levels can be specified with the following code: + +@verbatim +Header 1 {#header1} +======= +@endverbatim + + to get + + Header 1 +========= + + and with the following code: + +@verbatim +Header 2 {#header2} +-------- +@endverbatim + +to get + +Header 2 +--------- + +Where a word in curly braces is a MarkDown-style reference, which can be used in table of contents. +If you would like to have the table of contents, it is recommended to use \@section, +\@subsection and \@subsubsection pages instead of MarkDown headers as follows: + +@verbatim + @section Section_Name Section Header + @subsection SubSection_Name SubSection Header + @subsubsection SubSubSection_Name SubSubSection Header +@endverbatim + +@subsection OCCT_DM_SECTION_A_2 Plain Text + +Plain text is a text in a notepad-like format. To insert special symbols, +like \< , \> or \\, prepend them with \\ character: \\\<, \\\>, \\\\ +To emphasize some words, write one pair of asterisks ( * ) or underscores ( _ ) across the word +to make it *italic* and two pairs of these symbols to make a word **Bold**. + +@subsection OCCT_DM_SECTION_A_3 Lists + +To create a bulleted list, start each line with a hyphen or an asterisk, +followed by a space. List items can be nested. This code: + +@verbatim + * Bullet 1 + * Bullet 2 + * Bullet 2a + * Bullet 2b + * Bullet 3 +@endverbatim + + produces this list: + + * Bullet 1 + * Bullet 2 + * Bullet 2a + * Bullet 2b + * Bullet 3 + +To create a numbered list, start each line with number and a period, then a space. Thus this code + +@verbatim + 1. ListItem_1 + 2. ListItem_2 + 3. ListItem_3 +@endverbatim + + produces this list: + + 1. ListItem_1 + 2. ListItem_2 + 3. ListItem_3 + +It is recommended to indent lists with 2 spaces. + +@subsection OCCT_DM_SECTION_A_4 Tables + +A table consists of a header line, a separator line, and at least one row line. +Table columns are separated by the pipe (|) character. The following example: + +@verbatim +First Header | Second Header +------------- | ------------- +Content Cell | Content Cell +Content Cell | Content Cell +@endverbatim + + will produce the following table: + +First Header | Second Header +------------ | ------------- +Content Cell | Content Cell +Content Cell | Content Cell + +Column alignment can be controlled via one or two colons at the header separator line: + +@verbatim +| Right | Center | Left | +| ----: | :----: | :---- | +| 10 | 10 | 10 | +| 1000 | 1000 | 1000 | +@endverbatim + +which will looks as follows: + +| Right | Center | Left | +| ----: | :----: | :---- | +| 10 | 10 | 10 | +| 1000 | 1000 | 1000 | + +@subsection OCCT_DM_SECTION_A_5 Code Blocks + +It is recommended to indent a code lines with 4 spaces. +A fenced code block does not require indentation, and is defined by a pair of "fence lines". +Such line consists of 3 or more tilde (~) characters on a line. +The end of the block should have the same number of tildes. Here is an example: + +~~~~~~~~~~~~~~~~~~~~~~~ + a one-line code block +~~~~~~~~~~~~~~~~~~~~~~~ + +By default the output is the same as for a normal code block. +To highlight the code, the developer has to indicate the typical file extension, +which corresponds to the programming language, after the opening fence. +For highlighting according to the C++ language, for instance, write the following code (the curly braces and dot are optional): + +@verbatim +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{.cpp} + int func(int a,int b) { return a*b; } +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +@endverbatim + +which will produce: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{.cpp} + int func(int a,int b) { return a*b; } +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Verbatim content can be written by using framing \@verbatim \@endverbatim . For instance + +@verbatim + verbatim text +@endverbatim + +@subsection OCCT_DM_SECTION_A_6 References + +To insert a reference to a website, it is proposed to write a URL. For example: http://en.wikipedia.org +To insert a reference to another part of the same document, the developer can write: + +@verbatim + @htmlonly + Doxygen Configuration file + @endhtmlonly +@endverbatim + +to get a link to paragraph : @htmlonly Doxygen configuration @endhtmlonly + +@subsection OCCT_DM_SECTION_A_7 Images + +To insert image into document the developer can write the following code(in Doxygen-style): +@verbatim +![alt-caption](relative/path/to/image/image001.svg "Image Caption") +@endverbatim + +This code tells Doxygen to insert a picture right in the place this code was written. Like this: +@verbatim +![](/resources/occt_logo.png "OCCT logo") +@endverbatim + +![](/resources/occt_logo.png "OCCT logo") + +@subsection OCCT_DM_SECTION_A_8 Table Of Contents + +To get the table of contents at the beginning of the document, write \@tableofcontents tag. +But it is not needed now because TreeView option for HTML is used. +The TOC in the PDF document will be generated automatically. + +@subsection OCCT_DM_SECTION_A_9 Formulas + +Formulas within documents will be generated using MathJax tool. + +A developer has to specify these parameters in Doxyfile to enable support of MathJax in Doxygen: + + USE_MATHJAX = YES + MATHJAX_FORMAT = HTML-CSS + MATHJAX_RELPATH = http://cdn.mathjax.org/mathjax/latest + MATHJAX_EXTENSIONS = TeX/AMSmath TeX/AMSsymbols + +To use MathJax tool with the HTML page, it's \ block has to contain + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{.html} + + + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +First script configures MathJax to understand separator types and to left allign formulas. +The second script inserts reference to MathJax tool. +This tool will always be used when the HTML output will be shown. + +Equations can be written by several ways: + +1.Unnumbered displayed formulas that are centered on a separate line. +These formulas should be put between \@f\[ and \@f\] tags. An example: + +@verbatim +@f$[ + |I_2|=\left| \int_{0}^T \psi(t) + \left\{ + u(a,t)- + \int_{\gamma(t)}^a + \frac{d\theta}{k(\theta,t)} + \int_{a}^\theta c(\xi)u_t(\xi,t)\,d\xi + \right\} dt + \right| +@f$] +@endverbatim + +gives the following result: + + @f$ + |I_2|=\left| \int_{0}^T \psi(t) + \left\{ + u(a,t)- + \int_{\gamma(t)}^a + \frac{d\theta}{k(\theta,t)} + \int_{a}^\theta c(\xi)u_t(\xi,t)\,d\xi + \right\} dt + \right| + @f$ + +2.Formulas can also be put between @verbatim \begin{align} @endverbatim and @verbatim \end{align} @endverbatim tags. An example: + +@verbatim + \begin{align} + \dot{x} & = \sigma(y-x) \\ + \dot{y} & = \rho x - y - xz \\ + \dot{z} & = -\beta z + xy + \end{align} +@endverbatim + + gives the following result: +@latexonly + \begin{align} + \dot{x} & = \sigma(y-x) \\ + \dot{y} & = \rho x - y - xz \\ + \dot{z} & = -\beta z + xy + \end{align} +@endlatexonly + +@htmlonly + \begin{align} + \dot{x} & = \sigma(y-x) \\ + \dot{y} & = \rho x - y - xz \\ + \dot{z} & = -\beta z + xy + \end{align} +@endhtmlonly + +3.Inline formulas can be specified using this syntax: + +@verbatim + @f$ \sqrt{3x-1}+(1+x)^2 @f$ +@endverbatim + + that leads to the following result: @f$ \sqrt{3x-1}+(1+x)^2 @f$ + +@section OCCT_DM_SECTION_B Appendix 2: Doxygen Configuration + +@subsection OCCT_DM_SECTION_B_1 Doxygen Configuration File + +To generate documentation from "source" *.md files a developer can use file OCCT.doxyfile, +which is located in /docs directory of OCCT (more information can be found at @htmlonly +Directory Structure @endhtmlonly paragraph) +or create his own configuration file, called "Doxyfile". The configuration file may look as follows: + +@verbatim + DOXYFILE_ENCODING = UTF-8 + PROJECT_NAME = "OCCT User's Guides" + PROJECT_NUMBER = 1.0.1 + PROJECT_LOGO = "D:/OS/OCCT/docs/OCCT_logo.png" + OUTPUT_LANGUAGE = English + TAB_SIZE = 4 + MARKDOWN_SUPPORT = YES + AUTOLINK_SUPPORT = NO + SHOW_FILES = NO + WARNINGS = YES + WARN_IF_UNDOCUMENTED = YES + WARN_IF_DOC_ERROR = YES + WARN_NO_PARAMDOC = NO + WARN_FORMAT = "$file:$line: $text" + INPUT = "D:/OS/OCCT/docs/" + INPUT_ENCODING = UTF-8 + FILE_PATTERNS = *.md + RECURSIVE = YES + IMAGE_PATH = tmp + GENERATE_HTML = YES + SEARCHENGINE = NO + HTML_OUTPUT = html + HTML_FILE_EXTENSION = .html + HTML_HEADER = "static/header.html" + HTML_FOOTER = "static/footer.html" + HTML_STYLESHEET = "static/general.css" + HTML_EXTRA_STYLESHEET = "static/styles.css" + HTML_COLORSTYLE_HUE = 220 + HTML_COLORSTYLE_SAT = 100 + HTML_COLORSTYLE_GAMMA = 80 + HTML_TIMESTAMP = YES + HTML_DYNAMIC_SECTIONS = NO + HTML_INDEX_NUM_ENTRIES = 100 + GENERATE_LATEX = YES + GENERATE_RTF = YES +@endverbatim + +@subsection OCCT_DM_SECTION_B_2 Doxygen Output Customization + +The customization of the output files, produced by Doxygen, can be made by using different Doxyfile parameters, +like HTML_COLORSTYLE_SAT, which specifies one of HSV color component of HTML page header, and also by using DoxygenLayout xml file. +A developer can use default file from /docs directory or generate his own with doxygen -l command. It may looks as follows: + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{.xml} + + + + + + + + + + + + + + + + + + + + + + + + ... + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +The tag \ specifies tabs which appear at the head of each html page. For the OCCT user documentation + "mainpage" and "pages" tabs are usually needed and their visible parameter should always be "yes". +The visibility of other tabs should be set to "no". + +Developers can find more information about Doxygen configuration in the help file +or at http://www.stack.nl/~dimitri/doxygen/manual/ + +@subsection OCCT_DM_SECTION_B_3 Doxywizard Usage + +The easiest way of applying and modification of Doxyfile is to use a Doxywizard application, +which is usually a part of the Doxygen tool. To apply a configuration file, the developer should +select "Open..." item of the File menu or press Ctrl + O. Modification of Doxyfile can be made +using "Wizard" or "Expert" tabs of Doxywizard application. + +Developers can find more information about Doxywizard usage in the help file or at +http://www.stack.nl/~dimitri/doxygen/manual/doxywizard_usage.html. diff --git a/dox/dev_guides/documentation/images/documentation_image001.png b/dox/dev_guides/documentation/images/documentation_image001.png new file mode 100644 index 0000000000000000000000000000000000000000..770587ec3bccb7abe848131e8eb40bfa4a62f28e GIT binary patch literal 8571 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 testgrid d:/occt/results-2012-02-27 +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +If empty string is given as log directory name, the name will be generated automatically +using current date and time, prefixed by *results_*. Example: + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{.tcl} + Draw[]> testgrid {} +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +For running only some group or a grid of tests, +give additional arguments indicating group and (if needed) grid. Example: + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{.tcl} + Draw[]> testgrid d:/occt/results-2012-02-28 blend simple +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +As the tests progress, the result of each test case is reported. +At the end of the log summary of test cases is output, +including list of detected regressions and improvements, if any. Example: + + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{.tcl} + Tests summary + + CASE 3rdparty export A1: OK + ... + CASE pipe standard B1: BAD (known problem) + CASE pipe standard C1: OK + No regressions + Total cases: 208 BAD, 31 SKIPPED, 3 IMPROVEMENT, 1791 OK + Elapsed time: 1 Hours 14 Minutes 33.7384512019 Seconds + Detailed logs are saved in D:/occt/results_2012-06-04T0919 +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +The tests are considered as non-regressive if only OK, BAD (i.e. known problem), +and SKIPPED (i.e. not executed, e.g. because of lack of data file) statuses are reported. +See Grid’s *cases.list* file chapter for details. + +The detailed logs of running tests are saved in the specified directory and its sub-directories. +Cumulative HTML report summary.html provides links to reports on each test case. +An additional report TESTS-summary.xml is output in JUnit-style XML format +that can be used for integration with Jenkins or other continuous integration system. +Type *help testgrid* in DRAW prompt to get help on additional options supported by testgrid command. + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{.tcl} + Draw[3]> help testgrid + testgrid: Run all tests, or specified group, or one grid + Use: testgrid logdir [group [grid]] [options...] + Allowed options are: + -verbose {0-2}: verbose level, 0 by default, can be set to 1 or 2 + -parallel N: run in parallel with up to N processes (default 0) + -refresh N: save summary logs every N seconds (default 60) + -overwrite: force writing logs in existing non-empty directory +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +@subsubsection testmanual_1_3_3 Running Single Test + +To run single test, type command *test*’ followed by names of group, grid, and test case. + +Example: + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{.tcl} + Draw[1]> test blend simple A1 + CASE blend simple A1: OK + Draw[2]> +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Note that normally intermediate output of the script is not shown. +To see intermediate commands and their output, type command *decho on* +before running the test case. (Type ‘decho off’ to disable echoing when not needed.) +The detailed log of the test can also be obtained after the test execution by command *dlog get*. + +@section testmanual_2 Organization of Test Scripts + +@subsection testmanual_2_1 General Layout + +Standard OCCT tests are located in subdirectory tests of the OCCT root folder ($CASROOT). +Additional test folders can be added to the test system +by defining environment variable CSF_TestScriptsPath. +This should be list of paths separated by semicolons (*;*) on Windows +or colons (*:*) on Linux or Mac. Upon DRAW launch, +path to tests sub-folder of OCCT is added at the end of this variable automatically. +Each test folder is expected to contain: + + * Optional file parse.rules defining patterns for interpretation of test results, common for all groups in this folder + * One or several test group directories. + +Each group directory contains: + + * File grids.list that identifies this test group and defines list of test grids in it. + * Test grids (sub-directories), each containing set of scripts for test cases, and optional files cases.list, parse.rules, begin, and end. + * Optional sub-directory data + * Optional file parse.rules + * Optional files begin and end + +By convention, names of test groups, grids, and cases should contain no spaces and be lowercase. +Names begin, end, data, parse.rules, grids.list, cases.list are reserved. +General layout of test scripts is shown on Figure 1. + +![](/devs_guide/tests/images/tests_image001.png "") + +Figure 1. Layout of tests folder + +@subsection testmanual_2_2 Test Groups + +@subsubsection testmanual_2_2_1 Group Names + +Test folder usually contains several directories representing test groups (Group 1, Group N). +Each directory contains test grids for certain OCCT functionality. +The name of directory corresponds to this functionality. +Example: + +@verbatim + caf + mesh + offset +@endverbatim + +@subsubsection testmanual_2_2_2 Group's *grids.list* File + +The test group must contain file *grids.list* file +which defines ordered list of grids in this group in the following format: + +~~~~~~~~~~~~~~~~~ +001 gridname1 +002 gridname2 +... +NNN gridnameN +~~~~~~~~~~~~~~~~~ + +Example: + +~~~~~~~~~~~~~~~~~ + 001 basic + 002 advanced +~~~~~~~~~~~~~~~~~ + +@subsubsection testmanual_2_2_3 Group's *begin* File + +The file *begin* is a Tcl script. It is executed before every test in current group. +Usually it loads necessary Draw commands, sets common parameters and defines +additional Tcl functions used in test scripts. +Example: + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{.tcl} + pload TOPTEST ;# load topological command + set cpulimit 300 ;# set maximum time allowed for script execution +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +@subsubsection testmanual_2_2_4 Group's *end* File + +The file end is a TCL script. It is executed after every test in current group. +Usually it checks the results of script work, makes a snap-shot +of the viewer and writes *TEST COMPLETED* to the output. +Note: *TEST COMPLETED* string should be presented in output +in order to signal that test is finished without crash. +See Creation And Modification Of Tests chapter for more information. +Example: + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{.tcl} + if { [isdraw result] } { + checkshape result + } else { + puts *Error: The result shape can not be built* + } + puts *TEST COMPLETED* +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +@subsubsection testmanual_2_2_5 Group’s *parse.rules* File + +The test group may contain *parse.rules* file. +This file defines patterns used for analysis of the test execution log +and deciding the status of the test run. +Each line in the file should specify a status (single word), +followed by a regular expression delimited by slashes (*/*) +that will be matched against lines in the test output log to check if it corresponds to this status. +The regular expressions support subset of the Perl re syntax. +The rest of the line can contain a comment message +which will be added to the test report when this status is detected. +Example: + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{.tcl} + FAILED /\b[Ee]xception\b/ exception + FAILED /\bError\b/ error + SKIPPED /Cannot open file for reading/ data file is missing + SKIPPED /Could not read file .*, abandon/ data file is missing +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Lines starting with a *#* character and blank lines are ignored to allow comments and spacing. +See Interpretation of test results chapter for details. + +If a line matches several rules, the first one applies. +Rules defined in the grid are checked first, then rules in group, +then rules in the test root directory. This allows defining some rules on the grid level +with status IGNORE to ignore messages that would otherwise be treated as errors due to the group level rules. +Example: + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{.tcl} + FAILED /\bFaulty\b/ bad shape + IGNORE /^Error [23]d = [\d.-]+/ debug output of blend command + IGNORE /^Tcl Exception: tolerance ang : [\d.-]+/ blend failure +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +@subsection testmanual_2_3 Test Grids + +@subsubsection testmanual_2_3_1 Grid Names + +Group folder can have several sub-directories (Grid 1… Grid N) defining test grids. +Each test grid directory contains a set of related test cases. +The name of directory should correspond to its contents. + +Example: + +caf + basic + bugs + presentation + +Where **caf** is the name of test group and *basic*, *bugs*, *presentation*, etc are the names of grids. + +@subsubsection testmanual_2_3_2 Grid’s *begin* File + +The file *begin* is a TCL script. It is executed before every test in current grid. +Usually it sets variables specific for the current grid. +Example: + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{.tcl} + set command bopfuse ;# command tested in this grid +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +@subsubsection testmanual_2_3_3 Grid’s *end* File + +The file *end* is a TCL script. It is executed after every test in current grid. +Usually it executes specific sequence of commands common for all tests in the grid. +Example: + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{.tcl} + vdump $logdir/${casename}.gif ;# makes a snap-shot of AIS viewer +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +@subsubsection testmanual_2_3_4 Grid’s *cases.list* File + +The grid directory can contain an optional file cases.list +defining alternative location of the test cases. +This file should contain singe line defining the relative path to collection of test cases. + +Example: + +../data/simple + +This option is used for creation of several grids of tests with the same data files +and operations but performed with differing parameters. +The common scripts are usually located place in common +subdirectory of the test group (data/simple as in example). +If cases.list file exists then grid directory should not contain any test cases. +The specific parameters and pre- and post-processing commands +for the tests execution in this grid should be defined in the begin and end files. + +@subsection testmanual_2_4 Test Cases + +The test case is TCL script which performs some operations using DRAW commands +and produces meaningful messages that can be used to check the result for being valid. +Example: + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{.tcl} + pcylinder c1 10 20 ;# create first cylinder + pcylinder c2 5 20 ;# create second cylinder + ttranslate c2 5 0 10 ;# translate second cylinder to x,y,z + bsection result c1 c2 ;# create a section of two cylinders + checksection result ;# will output error message if result is bad +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +The test case can have any name (except reserved names begin, end, data, cases.list, parse.rules). +For systematic grids it is usually a capital English letter followed by a number. + +Example: + +@verbatim + A1 + A2 + B1 + B2 +@endverbatim + +Such naming facilitates compact representation of results +of tests execution in tabular format within HTML reports. + +@subsection testmanual_2_5 Directory *data* + +The test group may contain subdirectory data. +Usually it contains data files used in tests (BREP, IGES, STEP, etc.) +and / or test scripts shared by different test grids +(in subdirectories, see Grid’s *cases.list* file chapter). + +@section testmanual_3 Creation And Modification Of Tests + +This section describes how to add new tests and update existing ones. + +@subsection testmanual_3_1 Choosing Group, Grid, and Test Case Name + +The new tests are usually added in context of processing some bugs. +Such tests in general should be added to group bugs, in the grid +corresponding to the affected OCCT functionality. +New grids can be added as necessary to contain tests on functionality not yet covered by existing test grids. +The test case name in the bugs group should be prefixed by ID +of the corresponding issue in Mantis (without leading zeroes). +It is recommended to add a suffix providing a hint on the situation being tested. +If more than one test is added for a bug, they should be distinguished by suffixes; +either meaningful or just ordinal numbers. + +Example: + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{.tcl} + 12345_coaxial + 12345_orthogonal_1 + 12345_orthogonal_2 +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +In the case if new test corresponds to functionality for which +specific group of tests exists (e.g. group mesh for BRepMesh issues), +this test can be added (or moved later by OCC team) to this group. + +@subsection testmanual_3_2 Adding Data Files Required for a Test + +It is advisable that tests scripts should be made self-contained whenever possible, +so as to be usable in environments where data files are not available. +For that simple geometric objects and shapes can be created using DRAW commands in the test script itself. +If test requires some data file, it should be put to subdirectory data of the test grid. +Note that when test is integrated to master branch, +OCC team can move data file to data files repository, +so as to keep OCCT sources repository clean from big data files. +When preparing a test script, try to minimize size of involved data model. +For instance, if problem detected on a big shape can be reproduced on a single face +extracted from that shape, use only this face in the test. + +@subsection testmanual_3_3 Implementation of the Script + +Test should run commands necessary to perform the operations being tested, +in a clean DRAW session. This includes loading necessary functionality by *pload* command, +if this is not done by *begin* script. The messages produced by commands in standard output +should include identifiable messages on the discovered problems if any. +Usually the script represents a set of commands that a person would run interactively +to perform the operation and see its results, with additional comments to explain what happens. +Example: + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{.tcl} + # Simple test of fusing box and sphere + box b 10 10 10 + sphere s 5 + bfuse result b s + checkshape result +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Make sure that file parse.rules in the grid or group directory contains +regular expression to catch possible messages indicating failure of the test. +For instance, for catching errors reported by *checkshape* command +relevant grids define a rule to recognize its report by the word *Faulty*: FAILED /\bFaulty\b/ bad shape +For the messages generated in the script the most natural way is to use the word *Error* in the message. +Example: + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{.tcl} + set expected_length 11 + if { [expr $actual_length - $expected_length] > 0.001 } { + puts *Error: The length of the edge should be $expected_length* + } +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +At the end, the test script should output *TEST COMPLETED* string +to mark successful completion of the script. +This is often done by the end script in the grid. +When test script requires data file, use Tcl procedure *locate_data_file* +to get path to the data file, rather than explicit path. +This will allow easy move of the data file from OCCT repository +to the data files repository without a need to update test script. +Example: + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{.tcl} + stepread [locate_data_file CAROSKI_COUPELLE.step] a * +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +When test needs to produce some snapshots or other artifacts, +use Tcl variable logdir as location where such files should be put. +Command *testgrid* sets this variable to the subdirectory of the results folder +corresponding to the grid. Command *test* sets it to $CASROOT/tmp unless it is already defined. +Use Tcl variable casename to prefix all the files produced by the test. +This variable is set to the name of the test case. +Example: + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{.tcl} + xwd $logdir/${casename}.gif + vdisplay result; vfit + vdump $logdir/${casename}-axo.gif + vfront; vfit + vdump $logdir/${casename}-front.gif +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +could produce: + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{.tcl} + A1.gif + A1-axo.gif + A1-front.gif +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +@subsection testmanual_3_4 Interpretation of Test Results + +The result of the test is evaluated by checking its output against patterns +defined in the files parse.rules of the grid and group. +The OCCT test system recognizes five statuses of the test execution: + + * SKIPPED: reported if line matching SKIPPED pattern is found (prior to any FAILED pattern). This indicates that the test cannot be run in the current environment; most typical case is absence of the required data file. + * FAILED: reported if some line matching pattern with status FAILED is found (unless it is masked by preceding IGNORE pattern or a TODO statement, see below), or if message TEST COMPLETED is not found at the end. This indicates that test produces bad or unexpected result, and usually highlights a regression. + * BAD: reported if test script output contains one or several TODO statements and corresponding number of matching lines in the log. This indicates a known problem (see 3.5). The lines matching TODO statements are not checked against other patterns and thus will not cause a FAILED status. + * IMPROVEMENT: reported if test script output contains TODO statement for which no corresponding line is found. This is possible indication of improvement (known problem disappeared). + * OK: If none of the above statuses have been assigned. This means test passed without problems. + +Other statuses can be specified in the parse.rules files, these will be classified as FAILED. +Before integration of the change to OCCT repository, all tests should return either OK or BAD status. +The new test created for unsolved problem should return BAD. +The new test created for a fixed problem should return FAILED without the fix, and OK with the fix. + +@subsection testmanual_3_5 Marking BAD Cases + +If the test produces invalid result at a certain moment then the corresponding bug +should be created in the OCCT issue tracker [3], and the problem should be marked as TODO in the test script. +The following statement should be added to such test script: + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{.tcl} + puts *TODO BugNumber ListOfPlatforms: RegularExpression* +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +where: + + * BugNumber is an ID of the bug in the tracker. For example: #12345 + * ListOfPlatform is a list of platforms at which the bug is reproduced (e.g. Mandriva2008, Windows or All). + +*Note: the platform name is custom for the OCCT test system;* +*it can be consulted as value of environment variable os_type defined in DRAW.* + +Example: + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{.tcl} + Draw[2]> puts $env(os_type) + windows +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{.tcl} + + * RegularExpression is a regular expression which should be matched against the line indicating the problem in the script output. +Example: + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{.tcl} + puts *TODO #22622 Mandriva2008: Abort .* an exception was raised* +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Parser checks the output of the test and if an output line matches +the RegularExpression then it will be assigned a BAD status instead of FAILED. +For each output line matching to an error expression a separate TODO line +must be added to mark the test as BAD. +If not all the TODO statements are found in the test log, +the test will be considered as possible improvement. +To mark the test as BAD for an incomplete case +(when final TEST COMPLETE message is missing) +the expression *TEST INCOMPLETE* should be used instead of regular expression. + +Example: + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{.tcl} + puts *TODO OCC22817 All: exception.+There are no suitable edges* + puts *TODO OCC22817 All: \\*\\* Exception \\*\\** + puts *TODO OCC22817 All: TEST INCOMPLETE* +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +@section testmanual_4 Extended Use + +@subsection testmanual_4_1 Running Tests on Older Versions of OCCT + +Sometimes it might be necessary to run tests on previous versions of OCCT (up to to 6.5.3) +that do not include this test system. This can be done by adding DRAW configuration file DrawAppliInit +in the directory which is current by the moment of DRAW startup, +to load test commands and define necessary environment. Example +(assume that d:/occt contains up-to-date version of OCCT sources +with tests, and test data archive is unpacked to d:/test-data): + +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{.tcl} + set env(CASROOT) d:/occt + set env(CSF_TestScriptsPath) $env(CASROOT)/tests + source $env(CASROOT)/src/DrawResources/TestCommands.tcl + set env(CSF_TestDataPath) d:/test-data + return +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Note that on older versions of OCCT the tests are run in compatibility mode +and not all output of the test command can be captured; +this can lead to absence of some error messages (can be reported as improvement). + +@subsection testmanual_4_2 Adding Custom Tests + +You can extend the test system by adding your own tests. +For that it is necessary to add paths to the directory where these tests are located, +and additional data directory(ies), to the environment variables CSF_TestScriptsPath and CSF_TestDataPath. +The recommended way for doing this is using DRAW configuration file DrawAppliInit +located in the directory which is current by the moment of DRAW startup. + +Use Tcl command *_path_separator* to insert platform-dependent separator to the path list. +Example: +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{.tcl} + set env(CSF_TestScriptsPath) \ + $env(TestScriptsPath)[_path_separator]d:/MyOCCTProject/tests + set env(CSF_TestDataPath) \ + d:/occt/test-data[_path_separator]d:/MyOCCTProject/tests + return ;# this is to avoid an echo of the last command above in cout +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +@section testmanual_5 References + +-# DRAW Test Harness User’s Guide +-# Perl regular expressions, http://perldoc.perl.org/perlre.html +-# OCCT MantisBT issue tracker, http://tracker.dev.opencascade.org diff --git a/dox/dev_guides/wok/images/wok_image001.jpg b/dox/dev_guides/wok/images/wok_image001.jpg new file mode 100644 index 0000000000000000000000000000000000000000..37fd7350d49ea39e45082dd203850f465f7704b5 GIT binary patch literal 43953 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 G*}nm#na!C1 literal 0 HcmV?d00001 diff --git a/dox/dev_guides/wok/images/wok_image002.jpg b/dox/dev_guides/wok/images/wok_image002.jpg new file mode 100644 index 0000000000000000000000000000000000000000..b805c9b218175f3f8f5155dd6a76d37bf7eab1eb GIT binary patch literal 74182 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%0AZ>6% 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 z z`;h9%Q~iJC-);0n!30Vgv)32H<@}oS2tX`AD$U9juwWd2Ucr@|GwD(r1@vt>tiCK;cYDvzhpMG1iD9z^Gyv?F= zliy&CV-{0y%9?NQr0RJOTj`gfF{!KpS0HQztEAh&LPBI#zrZBnk#1R0zn^N&&0>oq~435h#~ku z;2JH2e|G|4lwujnqo|(LQOh1evTiFa71W)hk`j)J)P)GewBSN%#2IWT!50_}*qlPg zw!(Ioz?<0DGI&~3UGI2o@uT9z&TMw}A6j3C*1;2mBO0CAIE4j;0bCqv?0PwQj=Z62 z+*JgZ<;``2uNLz~w;k?RM2&cutx>H83+s@%o=2XhdPdr1FVEzWNya?dYV9C2OVdJw z8mL)v>zR!(2AbAJUMZawdxr*yL%`X^M7EXj_oCd9^!LmN;*G6oYA! ztbR@KidEb)0k=W04EJQF!g(VR<%rlQ(Y%>vjp7We&Cz|xdL1%>G&%o&duR7)4!5@8 zQ!<||{VQHMy-@8q)oQQ_3I?&3JU8s(<~#Jx0(T_fJpNWPLTuPzWuaUy)Er4BG2n+d zkxU|hMN{D!L|#Y&f)87{qy6%xWCBxkmB&6LHx!WRmNiKnFiq?h{Gj+oFfN+0OzqJl zW;@3CbQafQf-ekR*}1RmLalWw>t$g1Hv5oDRa5yZ;@4?bL>SDX#iu@@nYSI40e8(x z9=H}L#2(J2jczXdz?*`8*k)f4TO(p1gBHlHQ4SkIY>|>}FM+y9XH;iL`dpW1?Mi!{ zm3MJ31D+YHSaslB@ufY_aM%VpVnnNZ=h7Y>cp(4}mQuo&s9?w1%Vq}JJZbpcwhytG z5?i4H4$2qr16p9t3Sx^8_!WZ^F#jhyi--;5Juk1l9k6gK@9aZP??ZfGlY(Lkl>qy28(%>{w*mb=Y>sz$kE77hFu0KOMnVPIY#w%R)vxS_lQhCm!xI(M*k zhS}F_<{AE+6xI_F2B^K>HrONw@MJtr15)8JiN;HZ#1@-(@$q*z-t0sCkb9K-5Mt0p zYuLbx(v6oQF)qG03mJLVzJ-8(DT?h7oE!=M6Jj$TR|*)18)H3Fu%n7&J~}A*X(xp~ zsT5!eN&LOMr=U-qa#sb(jn7CWvJbWPshbK%Ea z2>c5sH20qzip@VgoreEj6I6e%39w55EB|k>kDm;SIBzSOjPB|uTm4hEt-9KkV+ILA z8=QPY%1~xdKTA#Qgb6!g;C}75fhg5#>poM)L-rX#=sXD!JcRHK z)dR=5_C9EPZ0q_%8{X6WT*MBx^IUT^1^>XTvZo*W8Z53oksU2B9MP>{Mb*|W)b7mGx}Ss9F1YQDih)R2i={h@qm%yE z>&x18F_(Fzh60BNu{OJDT~LiF+KL~wgC_a}hT}(BCO?r`L$DVU1w!wNQ}w+u-beor DzI|b2 literal 0 HcmV?d00001 diff --git a/dox/dev_guides/wok/images/wok_image003.jpg b/dox/dev_guides/wok/images/wok_image003.jpg new file mode 100644 index 0000000000000000000000000000000000000000..bc3844af55682bca8fa55a6cc846236ccca29405 GIT binary patch literal 44448 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 K(RcO#Zvp^ayH0fg literal 0 HcmV?d00001 diff --git a/dox/dev_guides/wok/images/wok_image004.jpg b/dox/dev_guides/wok/images/wok_image004.jpg new file mode 100644 index 0000000000000000000000000000000000000000..260d03242523f2fd05027df84eb8f222fca91d4a GIT binary patch literal 51721 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 literal 0 HcmV?d00001 diff --git a/dox/dev_guides/wok/wok.md b/dox/dev_guides/wok/wok.md new file mode 100644 index 0000000000..808868d930 --- /dev/null +++ b/dox/dev_guides/wok/wok.md @@ -0,0 +1,153 @@ +WOK {#dev_guides__wok} +========= + +WOK is a legacy build environment for Open CASCADE Technology. It is required +for generation of header files for classes defined with @ref ug_cdl "CDL" +("Cascade Definition Language"). Also tools for generation of project files +for other build systems, and OCCT documentation, are integrated to WOK. + +WOK thus is needed in the following situations: +- Building from OCCT sources from Git repository (do not contain generated files) +- Building after some changes made in CDL files + +Before installing and using WOK, make sure that you have installed a compiler (it is assumed that it is Visual Studio on Windows or gcc on Linux and MacOS) and third-party components required for building OCCT. + +@section wok1 Installing WOK + + Download the latest version of binary distribution WOK from http://dev.opencascade.org/index.php?q=home/resources + +@subsection wok11 Windows + + Run the installer. You will be prompted to read and accept the OCCT Public License to proceed: + + ![](/devs_guide/wok/images/wok_image001.jpg "") + + Click Next and proceed with the installation. + At the end of the installation you will be prompted to specify the version and the location of Visual Studio to be used, and the location of third-party libraries: + + ![](/devs_guide/wok/images/wok_image002.jpg "") + + You can change these settings at any time later. For this click on the item "Customize environment (GUI tool)" in the WOK group in the Windows Start menu. + + The shortcuts from this group provide two ways to run WOK: + * In command prompt window ("WOK TCL shell"). + * In Emacs editor ("WOK Emacs"). Using Emacs is convenient if you need to work within WOK environment. + + By default WOK installer creates a WOK factory with name "LOC" within workshop "dev" (WOK path :LOC:dev). + +@subsection wok12 Linux + + * Unpack the .tgz archive containing WOK distributive into an installation directory . + + * Perform the following commands assuming that you have unpacked WOK distributive archive into : + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{.tcl} + cd /site + wok_confgui.sh + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + Define all necessary paths to third-party products in the dialog window: + + ![](/devs_guide/wok/images/wok_image003.jpg "") + + * Run the following commands to create WOK LOC factory: + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{.tcl} + cd /site + wok_init.sh + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + * Your installation procedure is over. To run WOK use one the following commands: + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{.tcl} + cd /site + wok_emacs.sh + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + or + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{.tcl} + cd /site + wok_tclsh.sh + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +@subsection wok13 Mac OS X + + * In the Finder double click on wokSetup.dmg file. This will open a new window. Drag and drop "wokSetup" folder from this window at the location in the Finder where you want to install WOK, i.e. . + + * Browse in the Finder to the folder /site and double click on WokConfig. This will open a window with additional search path settings. Define all necessary paths to third-party products in the dialog window: + + ![](/devs_guide/wok/images/wok_image004.jpg "") + + * Run the following commands to create WOK LOC factory: + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{.tcl} + cd /site + wok_init.sh + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + * Your installation procedure is over. To run WOK in Emacs navigate in the Finder to the folder /site and double click on WokEmacs. + + +@section wok2 Initialization of Workbench + + To start working with OCCT, clone the OCCT Git repository from the server (see http://dev.opencascade.org/index.php?q=home/resources for details) or unpack the source archive. + + Then create a WOK workbench (command wcreate) setting its Home to the directory, where the repository is created ($CASROOT variable). The workbench should have the same name as that directory. + + For example, assuming that OCCT repository has been cloned into D:/occt folder: + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{.tcl} + LOC:dev> wcreate occt -DHome=D:/occt + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + Note: $CASROOT is equal to D:/occt now + + Then you can work with this workbench using normal WOK functionality (wprocess, umake, etc.; see WOK User’s Guide for details) or use it only for generation of derived sources and project files, and build OCCT with Visual Studio on Windows or make command on Linux, as described below. + +@section wok3 Generation of building projects + + Use command wgenproj in WOK to generate derived headers, source and building projects files: + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{.tcl} + LOC:dev> wokcd occt + LOC:dev:occt> wgenproj [ -target= ] [ -no_wprocess ] + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +TARGET: + * vc8 - Visual Studio 2005 + * vc9 - Visual Studio 2008 + * vc10 - Visual Studio 2010 + * vc11 - Visual Studio 2012 + * cbp - CodeBlocks + * cmake - CMake + * amk - AutoMake + * xcd - Xcode +-no_wprocess - skip generation of derived headers and source files + +Note that this command takes several minutes to complete at the first call. + +Re-execute this step to generate derived headers, source and building projects files if some CDL files in OCCT have been modified (either by you directly, or due to updates in the repository). Note that in some cases WOK may fail to update correctly; in such case remove sub-directories drv and .adm and repeat the command. + +To regenerate derived headers and source files without regeneration of projects use command: + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{.tcl} + LOC:dev> wokcd occt + LOC:dev:occt> wprocess -DGroups=Src,Xcpp + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +The generated building project has been placed into $CASROOT/adm folder: + * for vc8 - $CASROOT/adm/msvc/vc8 + * for vc9 - $CASROOT/adm/msvc/vc9 + * for vc10 - $CASROOT/adm/msvc/vc10 + * for vc11 - $CASROOT/adm/msvc/vc11 + * for cbp - $CASROOT/adm/ /cbp + * for cmake - $CASROOT/adm/cmake + * for amk - $CASROOT/adm/lin/amk + * xcd - $CASROOT/adm//xcd + +@section wok4 Generation of documentation + + Use command wgendoc in WOK to generate reference documentation: + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{.tcl} + :LOC:dev> wokcd occt + :LOC:dev:occt> wgendoc + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +The following options can be used: + * -wb=< workbench name > the name of OCCT workbench (the current one by default); + * -m=< list of modules > the list of modules that will be contained in the documentation; + * -outdir=< path > the output directory for the documentation; + * -chm the option to generate CHM file; + * -hhc=< path > the path to HTML Help Compiler (hhc.exe) or equivalent; + * -qthelp=< path > the option to generate Qt Help file, it is necessary to specify the path to qthelpgenerator executable; + * -doxygen=< path > the path to Doxygen executable + * -dot=< path > the path to GraphViz dot executable \ No newline at end of file diff --git a/dox/occdoc.tcl b/dox/occdoc.tcl new file mode 100644 index 0000000000..2d493f8437 --- /dev/null +++ b/dox/occdoc.tcl @@ -0,0 +1,690 @@ +# ----------------------------------------------------------------------- +# Script name: CompileDocs.tcl +# This script compiles OCCT documents from *.md files to HTML pages +# Author: omy +# ----------------------------------------------------------------------- + +# Generates Doxygen configuration file for Overview documentation +proc OverviewDoc_MakeDoxyfile {casDir outDir tagFileDir {doxyFileName} {generatorMode ""} DocFilesList verboseMode} { + + if {$verboseMode == "YES"} { + puts "INFO: Doxygen is now generating Doxyfile..." + } + + set doxyFile [open $doxyFileName "w"] + set casroot $casDir + set inputDir $casDir/dox + + # Common configs + puts $doxyFile "DOXYFILE_ENCODING = UTF-8" + puts $doxyFile "PROJECT_NAME = \"Open CASCADE Technology\"" + puts $doxyFile "PROJECT_NUMBER = 6.6.0" + puts $doxyFile "PROJECT_BRIEF = " + puts $doxyFile "PROJECT_LOGO = $inputDir/resources/occt_logo.png" + + puts $doxyFile "OUTPUT_DIRECTORY = $outDir" + puts $doxyFile "CREATE_SUBDIRS = NO" + puts $doxyFile "OUTPUT_LANGUAGE = English" + puts $doxyFile "ABBREVIATE_BRIEF = \"The \$name class\" \ + \"The \$name widget\" \ + \"The \$name file\" \ + is \ + provides \ + specifies \ + contains \ + represents \ + a \ + an \ + the" + + puts $doxyFile "FULL_PATH_NAMES = YES" + puts $doxyFile "INHERIT_DOCS = YES" + puts $doxyFile "TAB_SIZE = 4" + puts $doxyFile "MARKDOWN_SUPPORT = YES" + puts $doxyFile "EXTRACT_ALL = YES" + puts $doxyFile "CASE_SENSE_NAMES = NO" + puts $doxyFile "INLINE_INFO = YES" + puts $doxyFile "SORT_MEMBER_DOCS = YES" + puts $doxyFile "WARNINGS = YES" + puts $doxyFile "WARN_IF_UNDOCUMENTED = YES" + puts $doxyFile "WARN_IF_DOC_ERROR = YES" + puts $doxyFile "WARN_NO_PARAMDOC = NO" + puts $doxyFile "WARN_FORMAT = \"\$file:\$line: \$text\"" + puts $doxyFile "INPUT_ENCODING = UTF-8" + puts $doxyFile "FILE_PATTERNS = *.md *.dox " + puts $doxyFile "RECURSIVE = YES" + puts $doxyFile "SOURCE_BROWSER = NO" + puts $doxyFile "INLINE_SOURCES = YES" + puts $doxyFile "COLS_IN_ALPHA_INDEX = 5" + + # Generation options + puts $doxyFile "GENERATE_DOCSET = NO" + puts $doxyFile "GENERATE_HTMLHELP = NO" + puts $doxyFile "GENERATE_CHI = NO" + puts $doxyFile "GENERATE_QHP = NO" + puts $doxyFile "GENERATE_ECLIPSEHELP = NO" + puts $doxyFile "GENERATE_RTF = NO" + puts $doxyFile "GENERATE_MAN = NO" + puts $doxyFile "GENERATE_XML = NO" + puts $doxyFile "GENERATE_DOCBOOK = NO" + puts $doxyFile "GENERATE_AUTOGEN_DEF = NO" + puts $doxyFile "GENERATE_PERLMOD = NO" + + set PARAM_INPUT "INPUT = " + set PARAM_IMAGEPATH "IMAGE_PATH = $inputDir/resources/ " + + foreach docFile $DocFilesList { + set NEW_IMG_PATH [file normalize [file dirname "$inputDir/$docFile"]] + if { [string compare $NEW_IMG_PATH $casroot] != 0 } { + if {[file isdirectory "$NEW_IMG_PATH/images"]} { + append PARAM_IMAGEPATH " " "$NEW_IMG_PATH/images" + } + } + append PARAM_INPUT " " $inputDir/$docFile + } + puts $doxyFile $PARAM_INPUT + puts $doxyFile $PARAM_IMAGEPATH + + if { $generatorMode == "PDF_ONLY"} { + set PARAM_LATEX_EF "LATEX_EXTRA_FILES =" + foreach docFile $DocFilesList { + set NEW_LEF_PATH [file normalize [file dirname "$inputDir/$docFile"]] + if { [string compare $NEW_LEF_PATH $casroot] != 0 } { + append PARAM_LATEX_EF " " "$NEW_LEF_PATH/images" + } + } + puts $doxyFile $PARAM_LATEX_EF + } + + if { $generatorMode == "HTML_ONLY"} { + # Set a reference to a TAGFILE + if { $tagFileDir != "" } { + if {[file exists $tagFileDir/OCCT.tag] == 1} { + set tagPath [OverviewDoc_GetRelPath $tagFileDir $outDir/html] + puts $doxyFile "TAGFILES = $tagFileDir/OCCT.tag=$tagPath/html" + } + } + + # HTML Output + puts $doxyFile "GENERATE_LATEX = NO" + puts $doxyFile "GENERATE_HTML = YES" + puts $doxyFile "HTML_COLORSTYLE_HUE = 220" + puts $doxyFile "HTML_COLORSTYLE_SAT = 100" + puts $doxyFile "HTML_COLORSTYLE_GAMMA = 80" + puts $doxyFile "HTML_TIMESTAMP = YES" + puts $doxyFile "HTML_DYNAMIC_SECTIONS = YES" + puts $doxyFile "HTML_INDEX_NUM_ENTRIES = 100" + puts $doxyFile "DISABLE_INDEX = YES" + puts $doxyFile "GENERATE_TREEVIEW = YES" + puts $doxyFile "ENUM_VALUES_PER_LINE = 8" + puts $doxyFile "TREEVIEW_WIDTH = 250" + puts $doxyFile "EXTERNAL_PAGES = NO" + puts $doxyFile "SEARCHENGINE = YES" + puts $doxyFile "SERVER_BASED_SEARCH = NO" + puts $doxyFile "EXTERNAL_SEARCH = NO" + puts $doxyFile "SEARCHDATA_FILE = searchdata.xml" + puts $doxyFile "SKIP_FUNCTION_MACROS = YES" + # Formula options + puts $doxyFile "FORMULA_FONTSIZE = 12" + puts $doxyFile "FORMULA_TRANSPARENT = YES" + puts $doxyFile "USE_MATHJAX = YES" + puts $doxyFile "MATHJAX_FORMAT = HTML-CSS" + puts $doxyFile "MATHJAX_RELPATH = http://cdn.mathjax.org/mathjax/latest" + + } elseif { $generatorMode == "PDF_ONLY"} { + + puts $doxyFile "GENERATE_HTML = NO" + puts $doxyFile "DISABLE_INDEX = YES" + puts $doxyFile "GENERATE_TREEVIEW = NO" + puts $doxyFile "PREDEFINED = PDF_ONLY" + puts $doxyFile "GENERATE_LATEX = YES" + puts $doxyFile "COMPACT_LATEX = YES" + puts $doxyFile "PDF_HYPERLINKS = YES" + puts $doxyFile "USE_PDFLATEX = YES" + puts $doxyFile "LATEX_BATCHMODE = YES" + puts $doxyFile "LATEX_OUTPUT = latex" + puts $doxyFile "LATEX_CMD_NAME = latex" + puts $doxyFile "MAKEINDEX_CMD_NAME = makeindex" + } + + close $doxyFile +} + +# Returns the relative path between two directories +proc OverviewDoc_GetRelPath {targetFile currentpath} { + set cc [file split [file normalize $currentpath]] + set tt [file split [file normalize $targetFile]] + + if {![string equal [lindex $cc 0] [lindex $tt 0]]} { + # not on *n*x then + return -code error "$targetFile not on same volume as $currentpath" + } + while {[string equal [lindex $cc 0] [lindex $tt 0]] && [llength $cc] > 0} { + # discard matching components from the front + set cc [lreplace $cc 0 0] + set tt [lreplace $tt 0 0] + } + set prefix "" + if {[llength $cc] == 0} { + # just the file name, so targetFile is lower down (or in same place) + set prefix "." + } + # step up the tree + for {set i 0} {$i < [llength $cc]} {incr i} { + append prefix " .." + } + # stick it all together (the eval is to flatten the targetFile list) + return [eval file join $prefix $tt] +} + +# Prints Help message +proc OverviewDoc_PrintHelpMessage {} { + puts "\nUsage : occdoc \[-h\] \[-html\] \[-pdf\] \[-m=\] \[-l=\] \[-v\]" + puts "" + puts " Options are : " + puts " -html : To generate HTML files" + puts " (cannot be used with -pdf)" + puts " -pdf : To generate PDF files" + puts " (cannot be used with -html)" + puts " -m= : Specifies list of documents to generate." + puts " If it is not specified, all files, " + puts " mentioned in FILES.txt are processed." + puts " -l= : Specifies the document caption " + puts " for a single document" + puts " -h : Prints help message" + puts " -v : Specifies the Verbose mode" + puts " (info on all script actions is shown)" +} + +# Parses command line arguments +proc OverviewDoc_ParseArguments {arguments} { + global args_names + global args_values + set args_names {} + array set args_values {} + + foreach arg $arguments { + if {[regexp {^(-)[a-z]+$} $arg] == 1} { + set name [string range $arg 1 [string length $arg]-1] + lappend args_names $name + set args_values($name) "NULL" + continue + } elseif {[regexp {^(-)[a-z]+=.+$} $arg] == 1} { + set equal_symbol_position [string first "=" $arg] + set name [string range $arg 1 $equal_symbol_position-1] + lappend args_names $name + set value [string range $arg $equal_symbol_position+1 [string length $arguments]-1] + + # To parse a list of values for -m parameter + if { [string first "," $value] != -1 } { + set value [split $value ","]; + } + set args_values($name) $value + } else { + puts "Error in argument $arg" + return 1 + } + } + return 0 +} + +# Loads a list of docfiles from file FILES.txt +proc OverviewDoc_LoadFilesList {} { + + set INPUTDIR [file normalize [file dirname [info script]]] + + global available_docfiles + set available_docfiles {} + + # Read data from file + if { [file exists "$INPUTDIR/FILES.txt"] == 1 } { + set FILE [open "$INPUTDIR/FILES.txt" r] + while {1} { + set line [gets $FILE] + if {$line != ""} { + lappend available_docfiles $line + } + + if {[eof $FILE]} { + close $FILE + break + } + } + } else { + return -1 + } + return 0 +} + +# Writes new tex file for conversion from tex to pdf for a specific doc +proc OverviewDoc_MakeRefmanTex {fileName latexDir docLabel verboseMode} { + + if {$verboseMode == "YES"} { + puts "INFO: Making refman.tex file for $fileName" + } + set DOCNAME "$latexDir/refman.tex" + if {[file exists $DOCNAME] == 1} { + file delete -force $DOCNAME + } + set texfile [open $DOCNAME w] + + puts $texfile "\\batchmode" + puts $texfile "\\nonstopmode" + puts $texfile "\\documentclass\[oneside\]{article}" + puts $texfile "\n% Packages required by doxygen" + puts $texfile "\\usepackage{calc}" + puts $texfile "\\usepackage{doxygen}" + puts $texfile "\\usepackage{graphicx}" + puts $texfile "\\usepackage\[utf8\]{inputenc}" + puts $texfile "\\usepackage{makeidx}" + puts $texfile "\\usepackage{multicol}" + puts $texfile "\\usepackage{multirow}" + puts $texfile "\\usepackage{textcomp}" + puts $texfile "\\usepackage{amsmath}" + puts $texfile "\\usepackage\[table\]{xcolor}" + puts $texfile "\\usepackage{indentfirst}" + puts $texfile "" + puts $texfile "% Font selection" + puts $texfile "\\usepackage\[T1\]{fontenc}" + puts $texfile "\\usepackage{mathptmx}" + puts $texfile "\\usepackage\[scaled=.90\]{helvet}" + puts $texfile "\\usepackage{courier}" + puts $texfile "\\usepackage{amssymb}" + puts $texfile "\\usepackage{sectsty}" + puts $texfile "\\renewcommand{\\familydefault}{\\sfdefault}" + puts $texfile "\\allsectionsfont{%" + puts $texfile " \\fontseries{bc}\\selectfont%" + puts $texfile " \\color{darkgray}%" + puts $texfile "}" + puts $texfile "\\renewcommand{\\DoxyLabelFont}{%" + puts $texfile " \\fontseries{bc}\\selectfont%" + puts $texfile " \\color{darkgray}%" + puts $texfile "}" + puts $texfile "" + puts $texfile "% Page & text layout" + puts $texfile "\\usepackage{geometry}" + puts $texfile "\\geometry{%" + puts $texfile " a4paper,%" + puts $texfile " top=2.5cm,%" + puts $texfile " bottom=2.5cm,%" + puts $texfile " left=2.5cm,%" + puts $texfile " right=2.5cm%" + puts $texfile "}" + puts $texfile "\\tolerance=750" + puts $texfile "\\hfuzz=15pt" + puts $texfile "\\hbadness=750" + puts $texfile "\\setlength{\\emergencystretch}{15pt}" + puts $texfile "\\setlength{\\parindent}{0.75cm}" + puts $texfile "\\setlength{\\parskip}{0.2cm}" + puts $texfile "\\makeatletter" + puts $texfile "\\renewcommand{\\paragraph}{%" + puts $texfile " \@startsection{paragraph}{4}{0ex}{-1.0ex}{1.0ex}{%" + puts $texfile "\\normalfont\\normalsize\\bfseries\\SS@parafont%" + puts $texfile " }%" + puts $texfile "}" + puts $texfile "\\renewcommand{\\subparagraph}{%" + puts $texfile " \\@startsection{subparagraph}{5}{0ex}{-1.0ex}{1.0ex}{%" + puts $texfile "\\normalfont\\normalsize\\bfseries\\SS@subparafont%" + puts $texfile " }%" + puts $texfile "}" + puts $texfile "\\makeatother" + puts $texfile "" + puts $texfile "% Headers & footers" + puts $texfile "\\usepackage{fancyhdr}" + puts $texfile "\\pagestyle{fancyplain}" + puts $texfile "\\fancyhead\[LE\]{\\fancyplain{}{\\bfseries\\thepage}}" + puts $texfile "\\fancyhead\[CE\]{\\fancyplain{}{}}" + puts $texfile "\\fancyhead\[RE\]{\\fancyplain{}{\\bfseries\\leftmark}}" + puts $texfile "\\fancyhead\[LO\]{\\fancyplain{}{\\bfseries\\rightmark}}" + puts $texfile "\\fancyhead\[CO\]{\\fancyplain{}{}}" + puts $texfile "\\fancyhead\[RO\]{\\fancyplain{}{\\bfseries\\thepage}}" + puts $texfile "\\fancyfoot\[LE\]{\\fancyplain{}{}}" + puts $texfile "\\fancyfoot\[CE\]{\\fancyplain{}{}}" + puts $texfile "\\fancyfoot\[RE\]{\\fancyplain{}{\\bfseries\\scriptsize © Open CASCADE Technology 2001\-2013}}" + puts $texfile "\\fancyfoot\[LO\]{\\fancyplain{}{\\bfseries\\scriptsize © Open CASCADE Technology 2001\-2013}}" + puts $texfile "\\fancyfoot\[CO\]{\\fancyplain{}{}}" + puts $texfile "\\fancyfoot\[RO\]{\\fancyplain{}{}}" + puts $texfile "\\renewcommand{\\footrulewidth}{0.4pt}" + puts $texfile "\\renewcommand{\\sectionmark}\[1\]{%" + puts $texfile " \\markright{\\thesection\\ #1}%" + puts $texfile "}" + puts $texfile "" + puts $texfile "% Indices & bibliography" + puts $texfile "\\usepackage{natbib}" + puts $texfile "\\usepackage\[titles\]{tocloft}" + puts $texfile "\\renewcommand{\\cftsecleader}{\\cftdotfill{\\cftdotsep}}" + puts $texfile "\\setcounter{tocdepth}{3}" + puts $texfile "\\setcounter{secnumdepth}{5}" + puts $texfile "\\makeindex" + puts $texfile "" + puts $texfile "% Hyperlinks (required, but should be loaded last)" + puts $texfile "\\usepackage{ifpdf}" + puts $texfile "\\ifpdf" + puts $texfile " \\usepackage\[pdftex,pagebackref=true\]{hyperref}" + puts $texfile "\\else" + puts $texfile " \\usepackage\[ps2pdf,pagebackref=true\]{hyperref}" + puts $texfile "\\fi" + puts $texfile "\\hypersetup{%" + puts $texfile " colorlinks=true,%" + puts $texfile " linkcolor=black,%" + puts $texfile " citecolor=black,%" + puts $texfile " urlcolor=blue,%" + puts $texfile " unicode%" + puts $texfile "}" + puts $texfile "" + puts $texfile "% Custom commands" + puts $texfile "\\newcommand{\\clearemptydoublepage}{%" + puts $texfile " \\newpage{\\pagestyle{empty}\\cleardoublepage}%" + puts $texfile "}" + puts $texfile "\n" + puts $texfile "%===== C O N T E N T S =====\n" + puts $texfile "\\begin{document}" + puts $texfile "" + puts $texfile "% Titlepage & ToC" + puts $texfile "\\hypersetup{pageanchor=false}" + puts $texfile "\\pagenumbering{roman}" + puts $texfile "\\begin{titlepage}" + puts $texfile "\\vspace*{7cm}" + puts $texfile "\\begin{center}%" + puts $texfile "\\includegraphics\[width=0.75\\textwidth, height=0.2\\textheight\]{occttransparent.png}\\\\\\\\" + puts $texfile "{\\Large Open C\\-A\\-S\\-C\\-A\\-D\\-E Technology \\\\\[1ex\]\\Large 6.\\-6.\\-0 }\\\\" + puts $texfile "\\vspace*{1cm}" + puts $texfile "{\\Large $docLabel}\\\\" + puts $texfile "\\vspace*{1cm}" + puts $texfile "{\\large Generated by Doxygen 1.8.4}\\\\" + puts $texfile "\\vspace*{0.5cm}" + puts $texfile "{\\small \\today}\\" + puts $texfile "\\end{center}" + puts $texfile "\\end{titlepage}" + puts $texfile "\\clearpage" + puts $texfile "\\pagenumbering{roman}" + puts $texfile "\\tableofcontents" + puts $texfile "\\newpage" + puts $texfile "\\pagenumbering{arabic}" + puts $texfile "\\hypersetup{pageanchor=true}" + puts $texfile "" + puts $texfile "\\hypertarget{$fileName}{}" + puts $texfile "\\input{$fileName}" + puts $texfile "" + puts $texfile "% Index" + puts $texfile "\\newpage" + puts $texfile "\\phantomsection" + puts $texfile "\\addcontentsline{toc}{part}{Index}" + puts $texfile "\\printindex\n" + puts $texfile "\\end{document}" + + close $texfile +} + +# Postprocesses generated TeX files +proc OverviewDoc_ProcessTex {{texFiles {}} {latexDir} verboseMode} { + + foreach TEX $texFiles { + if {$verboseMode == "YES"} { + puts "INFO: Preprocessing file $TEX" + } + set IN_F [open "$TEX" r] + set TMPFILENAME "$latexDir/temp.tex" + set OUT_F [open $TMPFILENAME w] + + while {1} { + set line [gets $IN_F] + if { [string first "\\includegraphics" $line] != -1 } { + # Center images in TeX files + set line "\\begin{center}\n $line\n\\end{center}" + } elseif { [string first "\\subsection" $line] != -1 } { + # Replace \subsection with \section tag + regsub -all "\\\\subsection" $line "\\\\section" line + } elseif { [string first "\\subsubsection" $line] != -1 } { + # Replace \subsubsection with \subsection tag + regsub -all "\\\\subsubsection" $line "\\\\subsection" line + } elseif { [string first "\\paragraph" $line] != -1 } { + # Replace \paragraph with \subsubsection tag + regsub -all "\\\\paragraph" $line "\\\\subsubsection" line + } + puts $OUT_F $line + + if {[eof $IN_F]} { + close $IN_F + close $OUT_F + break + } + } + file delete -force $TEX + file rename $TMPFILENAME $TEX + } +} + +# Main procedure for documents compilation +proc OverviewDoc_Main { {docfiles {}} generatorMode docLabel verboseMode} { + + set INDIR [file normalize [file dirname [info script]]] + set CASROOT [file normalize [file dirname "$INDIR/../../"]] + set OUTDIR $CASROOT/doc + set PDFDIR $OUTDIR/overview/pdf + set HTMLDIR $OUTDIR/overview/html + set LATEXDIR $OUTDIR/overview/latex + set TAGFILEDIR $OUTDIR/refman + set DOXYFILE $OUTDIR/OCCT.cfg + + # Create or clean the output folders + if {[file exists $OUTDIR] == 0} { + file mkdir $OUTDIR + } + if {[file exists $HTMLDIR] == 0} { + file mkdir $HTMLDIR + } + if {[file exists $LATEXDIR] == 0} { + file mkdir $LATEXDIR + } + if {[file exists $PDFDIR] == 0} { + file mkdir $PDFDIR + } + + # Run tools to compile documents + puts "" + puts " [clock format [clock seconds] -format {%Y.%m.%d %H:%M}] Generation process started..." + puts "" + puts " Please, wait while Doxygen finishes it\'s work" + OverviewDoc_MakeDoxyfile $CASROOT "$OUTDIR/overview" $TAGFILEDIR $DOXYFILE $generatorMode $docfiles $verboseMode + + # Run doxygen tool + if { $generatorMode == "HTML_ONLY"} { + puts " [clock format [clock seconds] -format {%Y.%m.%d %H:%M}] Doxygen is now generating HTML files...\n" + } + set RESULT [catch {exec doxygen $DOXYFILE > $OUTDIR/doxygen_out.log} DOX_ERROR] + if {$RESULT != 0} { + if {[llength [split $DOX_ERROR "\n"]] > 1} { + if {$verboseMode == "YES"} { + puts "INFO: See Doxygen messages in $OUTDIR/doxygen_warnings_and_errors.log" + } + set DOX_ERROR_FILE [open "$OUTDIR/doxygen_warnings_and_errors.log" "w"] + puts $DOX_ERROR_FILE $DOX_ERROR + close $DOX_ERROR_FILE + } else { + puts $DOX_ERROR + } + } + # Close the Doxygen application + after 300 + + # Start PDF generation routine + if { $generatorMode == "PDF_ONLY" } { + puts "" + puts " [clock format [clock seconds] -format {%Y.%m.%d %H:%M}] Doxygen is now generating PDF files...\n" + + set OS $::tcl_platform(platform) + if { $OS == "unix" } { + set PREFIX ".sh" + } elseif { $OS == "windows" } { + set PREFIX ".bat" + } + + # Prepare a list of TeX files, generated by Doxygen + cd $LATEXDIR + + set TEXFILES [glob $LATEXDIR -type f -directory $LATEXDIR -tails "*.tex" ] + set REFMAN_IDX [lsearch $TEXFILES "refman.tex"] + set TEXFILES [lreplace $TEXFILES $REFMAN_IDX $REFMAN_IDX] + set REFMAN_IDX [lsearch $TEXFILES "index.tex"] + set TEXFILES [lreplace $TEXFILES $REFMAN_IDX $REFMAN_IDX] + + set IDX [lsearch $TEXFILES "$LATEXDIR"] + while { $IDX != -1} { + set TEXFILES [lreplace $TEXFILES $IDX $IDX] + set IDX [lsearch $TEXFILES "$LATEXDIR"] + } + + # Preprocess generated TeX files + OverviewDoc_ProcessTex $TEXFILES $LATEXDIR $verboseMode + + # Generate PDF files from + foreach TEX $TEXFILES { + # Rewrite existing REFMAN.tex file... + set TEX [string range $TEX 0 [ expr "[string length $TEX] - 5"]] + OverviewDoc_MakeRefmanTex $TEX $LATEXDIR $docLabel $verboseMode + + if {$verboseMode == "YES"} { + puts "INFO: Generating PDF file from $TEX" + } + # ...and use it to generate PDF from TeX... + set RESULT [catch {eval exec [auto_execok $LATEXDIR/make$PREFIX] > "$OUTDIR/pdflatex_out.log"} LaTeX_ERROR] + if {$RESULT != 0} { + if {[llength [split $LaTeX_ERROR "\n"]] > 1} { + set LaTeX_ERROR_FILE [open "$OUTDIR/pdflatex_warnings_and_errors.log" "w"] + puts $LaTeX_ERROR_FILE $LaTeX_ERROR + close $LaTeX_ERROR_FILE + } else { + puts $DOX_ERROR + } + } + + # ...and place it to the specific folder + if { [file exists $PDFDIR/$TEX.pdf] == 1 } { + file delete -force $PDFDIR/$TEX.pdf + } + file rename $LATEXDIR/refman.pdf "$PDFDIR/$TEX.pdf" + } + if {$verboseMode == "YES"} { + puts "INFO: See LaTeX messages in $OUTDIR/pdflatex_warnings_and_errors.log" + } + } + + cd $INDIR + puts " [clock format [clock seconds] -format {%Y.%m.%d %H:%M}] Generation process finished..." + puts "" + puts "--------------------------------------------------------------------" + if { $generatorMode == "HTML_ONLY" } { + puts " You can look at generated HTML pages by opening: " + set RESFILE $OUTDIR/overview/html/index.html + puts " $RESFILE" + } + if { $generatorMode == "PDF_ONLY" } { + puts " You can look at generated PDF files in: " + puts " $OUTDIR/overview/pdf folder" + } + puts "" + puts " Copyright \u00a9 Open CASCADE Technology 2001-2013" + puts "--------------------------------------------------------------------\n" +} + +# A command for User Documentation compilation +proc occdoc {args} { + # Programm options + set GEN_HTML "NO" + set GEN_PDF "NO" + set DOCFILES {} + set DOCLABEL "Default OCCT Document" + set VERB_MODE "NO" + set GEN_MODE "DEFAULT" + global available_docfiles + global args_names + global args_values + + # Load list of docfiles + if { [OverviewDoc_LoadFilesList] != 0 } { + puts "ERROR: File FILES.txt was not found" + return + } + + # Parse CL arguments + if {[OverviewDoc_ParseArguments $args] == 1} { + return + } + if {$args_names == {}} { + set GEN_HTML "YES" + set VERB_MODE "YES" + } else { + foreach arg_n $args_names { + if {$arg_n == "h"} { + OverviewDoc_PrintHelpMessage + return + } elseif {$arg_n == "html"} { + set GEN_HTML "YES" + } elseif {$arg_n == "pdf"} { + set GEN_PDF "YES" + } elseif {$arg_n == "v"} { + set VERB_MODE "YES" + } elseif {$arg_n == "m"} { + if {$args_values(m) != "NULL"} { + set DOCFILES $args_values(m) + } else { + puts "Error in argument m" + return + } + # Check if all chosen docfiles are correct + foreach docfile $DOCFILES { + if { [lsearch $available_docfiles $docfile] == -1 } { + puts "File \"$docfile\" is not presented in the list of available docfiles" + puts "Please, specify the correct docfile name" + return + } else { + puts "File $docfile is presented in FILES.TXT" + } + } + } elseif {$arg_n == "l"} { + if { [llength $DOCFILES] <= 1 } { + if {$args_values(l) != "NULL"} { + set DOCLABEL $args_values(l) + } else { + puts "Error in argument l" + return + } + } + } else { + puts "\nWrong argument: $arg_n" + OverviewDoc_PrintHelpMessage + return + } + } + } + + # Specify generation mode + if {$GEN_HTML == "YES" && $GEN_PDF == "NO"} { + set GEN_MODE "HTML_ONLY" + } elseif {$GEN_PDF == "YES"} { + set GEN_MODE "PDF_ONLY" + } + # Check if -v is the only option + if {$GEN_MODE == "DEFAULT"} { + if { $VERB_MODE == "YES" } { + puts "\nArgument -v can't be used without -pdf or -html argument" + OverviewDoc_PrintHelpMessage + } + return + } + + # Specify verbose mode + if { $GEN_PDF != "YES" && [llength $DOCFILES] > 1 } { + set DOCLABEL "" + } + + # If we don't specify list for docfiles with -m argument, + # we assume that we have to generate all docfiles + if { [llength $DOCFILES] == 0 } { + set DOCFILES $available_docfiles + } + + # Start main activities + OverviewDoc_Main $DOCFILES $GEN_MODE $DOCLABEL $VERB_MODE +} diff --git a/dox/overview/images/overview_c__ie.png b/dox/overview/images/overview_c__ie.png new file mode 100644 index 0000000000000000000000000000000000000000..3cfc12e82c819be6008e1d3ac833232052c84f35 GIT binary patch literal 38265 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 $+ZBHq=kU6g?!ayuI-sgW!TrqOvIyMqk( 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 literal 0 HcmV?d00001 diff --git a/dox/overview/images/overview_mvc.png b/dox/overview/images/overview_mvc.png new file mode 100644 index 0000000000000000000000000000000000000000..f4104834e658ae2f72febe69cc1cd4676ea0ea47 GIT binary patch literal 32022 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⁡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 UDF{oEp8x;=07*qoM6N<$g0553*Z=?k literal 0 HcmV?d00001 diff --git a/dox/overview/tutorial/images/tutorial_image001.png b/dox/overview/tutorial/images/tutorial_image001.png new file mode 100644 index 0000000000000000000000000000000000000000..5fd0189eac770ab0a224441b28575fb47770aea3 GIT binary patch literal 3971 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 literal 0 HcmV?d00001 diff --git a/dox/overview/tutorial/images/tutorial_image004.png b/dox/overview/tutorial/images/tutorial_image004.png new file mode 100644 index 0000000000000000000000000000000000000000..b10ce22b3c99794ef8ddd34fc2deaba30ac183c1 GIT binary patch literal 1948 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 W?tIblGgf#~pzt_1`&wJVZ~p=1w8jJg literal 0 HcmV?d00001 diff --git a/dox/overview/tutorial/images/tutorial_image008.png b/dox/overview/tutorial/images/tutorial_image008.png new file mode 100644 index 0000000000000000000000000000000000000000..85efc0e311b5fd03a2f92820f41412430f18a8f7 GIT binary patch literal 3702 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