0028654: Existed tool (gendoc) for generation documentation does not take into accoun...
authorysn <ysn@opencascade.com>
Fri, 2 Jun 2017 08:55:34 +0000 (11:55 +0300)
committerbugmaster <bugmaster@opencascade.com>
Fri, 9 Jun 2017 09:59:02 +0000 (12:59 +0300)
The parameter defining image width has been added to all figures to improve their layout in PDF documents and tweaked depending on the nature of each image.
Additionally, some minor changes improving image and text layout have been introduced.

Remove temporary added possibility for setting image width automatically for generation of pdf documentation.

20 files changed:
adm/gendoc.tcl
adm/occaux.tcl
dox/dev_guides/contribution_workflow/contribution_workflow.md
dox/dev_guides/documentation/documentation.md
dox/dev_guides/git_guide/git_guide.md
dox/dev_guides/tests/tests.md
dox/tutorial/tutorial.md
dox/user_guides/boolean_operations/boolean_operations.md
dox/user_guides/draw_test_harness/draw_test_harness.md
dox/user_guides/foundation_classes/foundation_classes.md
dox/user_guides/iges/iges.md
dox/user_guides/modeling_algos/modeling_algos.md
dox/user_guides/modeling_data/modeling_data.md
dox/user_guides/ocaf/ocaf.md
dox/user_guides/shape_healing/shape_healing.md
dox/user_guides/step/step.md
dox/user_guides/tobj/tobj.md
dox/user_guides/vis/vis.md
dox/user_guides/visualization/visualization.md
dox/user_guides/xde/xde.md

index 885fcec..5184b4b 100644 (file)
@@ -29,7 +29,7 @@ source [file join [file dirname [info script]] occaux.tcl]
 
 # Prints help message
 proc OCCDoc_PrintHelpMessage {} {
-    puts "\nUsage: gendoc \[-h\] {-refman|-overview} \[-html|-pdf|-chm\] \[-m=<list of modules>|-ug=<list of docs>\] \[-v\] \[-s=<search_mode>\] \[-mathjax=<path>\] \[-update_images_size\]"
+    puts "\nUsage: gendoc \[-h\] {-refman|-overview} \[-html|-pdf|-chm\] \[-m=<list of modules>|-ug=<list of docs>\] \[-v\] \[-s=<search_mode>\] \[-mathjax=<path>\]"
     puts ""
     puts "Options are:"
     puts ""
@@ -57,7 +57,6 @@ proc OCCDoc_PrintHelpMessage {} {
     puts "                       Can be: none | local | server | external"
     puts "  -h                 : Prints this help message"
     puts "  -v                 : Enables more verbose output"
-    puts "  -update_images_size: Updates width of images in *.md files during pdf generation for @figure alias. It takes actual size of image."
 }
 
 # A command for User Documentation compilation
@@ -70,7 +69,6 @@ proc gendoc {args} {
   set MODULES                   {}
   set DOCLABEL                  ""
   set VERB_MODE                 "NO"
-  set UPDATE_IMAGES_SIZE        "NO"
   set SEARCH_MODE               "none"
   set MATHJAX_LOCATION          "https://cdn.mathjax.org/mathjax/latest"
   set mathjax_js_name           "MathJax.js"
@@ -199,8 +197,6 @@ proc gendoc {args} {
       
     } elseif {$arg_n == "v"} {
       set VERB_MODE "YES"
-    } elseif {$arg_n == "update_images_size"} {
-      set UPDATE_IMAGES_SIZE "YES"
     } elseif {$arg_n == "ug"} {
       if { ([ lsearch $args_names "refman" ]   != -1) } {
         continue
@@ -317,19 +313,19 @@ proc gendoc {args} {
   # Start main activities
   if { $GEN_MODE != "PDF_ONLY" } {
     if { [OCCDoc_GetProdRootDir] == ""} {
-      OCCDoc_Main $DOC_TYPE $DOCFILES $MODULES $GEN_MODE $VERB_MODE $UPDATE_IMAGES_SIZE $SEARCH_MODE $MATHJAX_LOCATION $GENERATE_PRODUCTS_REFMAN $DOXYGEN_PATH $GRAPHVIZ_PATH $INKSCAPE_PATH $HHC_PATH
+      OCCDoc_Main $DOC_TYPE $DOCFILES $MODULES $GEN_MODE $VERB_MODE $SEARCH_MODE $MATHJAX_LOCATION $GENERATE_PRODUCTS_REFMAN $DOXYGEN_PATH $GRAPHVIZ_PATH $INKSCAPE_PATH $HHC_PATH
     } else {
       if { $DOC_TYPE == "REFMAN" } {
         if { $MODULES != "" } {
           foreach module $MODULES {
-            OCCDoc_Main $DOC_TYPE $DOCFILES $module $GEN_MODE $VERB_MODE $UPDATE_IMAGES_SIZE $SEARCH_MODE $MATHJAX_LOCATION $GENERATE_PRODUCTS_REFMAN $DOXYGEN_PATH $GRAPHVIZ_PATH $INKSCAPE_PATH $HHC_PATH
+            OCCDoc_Main $DOC_TYPE $DOCFILES $module $GEN_MODE $VERB_MODE $SEARCH_MODE $MATHJAX_LOCATION $GENERATE_PRODUCTS_REFMAN $DOXYGEN_PATH $GRAPHVIZ_PATH $INKSCAPE_PATH $HHC_PATH
           }
         } else {
-          OCCDoc_Main $DOC_TYPE $DOCFILES $MODULES $GEN_MODE $VERB_MODE $UPDATE_IMAGES_SIZE $SEARCH_MODE $MATHJAX_LOCATION $GENERATE_PRODUCTS_REFMAN $DOXYGEN_PATH $GRAPHVIZ_PATH $INKSCAPE_PATH $HHC_PATH
+          OCCDoc_Main $DOC_TYPE $DOCFILES $MODULES $GEN_MODE $VERB_MODE $SEARCH_MODE $MATHJAX_LOCATION $GENERATE_PRODUCTS_REFMAN $DOXYGEN_PATH $GRAPHVIZ_PATH $INKSCAPE_PATH $HHC_PATH
         }
       } else {
         foreach md $DOCFILES {
-          OCCDoc_Main $DOC_TYPE $md $MODULES $GEN_MODE $VERB_MODE $UPDATE_IMAGES_SIZE $SEARCH_MODE $MATHJAX_LOCATION $GENERATE_PRODUCTS_REFMAN $DOXYGEN_PATH $GRAPHVIZ_PATH $INKSCAPE_PATH $HHC_PATH
+          OCCDoc_Main $DOC_TYPE $md $MODULES $GEN_MODE $VERB_MODE $SEARCH_MODE $MATHJAX_LOCATION $GENERATE_PRODUCTS_REFMAN $DOXYGEN_PATH $GRAPHVIZ_PATH $INKSCAPE_PATH $HHC_PATH
         }
       }
     }
@@ -340,14 +336,14 @@ proc gendoc {args} {
       puts "Info: Processing file $pdf\n"
 
       # Some values are hardcoded because they are related only to PDF generation
-      OCCDoc_Main "OVERVIEW" [list $pdf] {} "PDF_ONLY" $VERB_MODE $UPDATE_IMAGES_SIZE "none" $MATHJAX_LOCATION "NO" $DOXYGEN_PATH $GRAPHVIZ_PATH $INKSCAPE_PATH $HHC_PATH
+      OCCDoc_Main "OVERVIEW" [list $pdf] {} "PDF_ONLY" $VERB_MODE "none" $MATHJAX_LOCATION "NO" $DOXYGEN_PATH $GRAPHVIZ_PATH $INKSCAPE_PATH $HHC_PATH
     }
     puts "[clock format [clock seconds] -format {%Y-%m-%d %H:%M}] Generation completed."
   }
 }
 
 # Main procedure for documents compilation
-proc OCCDoc_Main {docType {docfiles {}} {modules {}} generatorMode verboseMode updateImagesSize searchMode mathjaxLocation generateProductsRefman DOXYGEN_PATH GRAPHVIZ_PATH INKSCAPE_PATH HHC_PATH} {
+proc OCCDoc_Main {docType {docfiles {}} {modules {}} generatorMode verboseMode searchMode mathjaxLocation generateProductsRefman DOXYGEN_PATH GRAPHVIZ_PATH INKSCAPE_PATH HHC_PATH} {
 
   global available_docfiles
   global available_pdf
@@ -465,14 +461,6 @@ proc OCCDoc_Main {docType {docfiles {}} {modules {}} generatorMode verboseMode u
     return -1
   }
 
-  # update image sizes in *.md files if necessary
-  if { ("$::tcl_platform(platform)" == "windows") &&
-       ($updateImagesSize == "YES") } {
-    if { [OCCDoc_UpdateImagesSize $docfiles [OCCDoc_GetDoxDir [OCCDoc_GetProdRootDir]] $verboseMode] == -1 } {
-      return -1
-    }
-  }
-
   # Run doxygen tool
   set starttimestamp [clock format [clock seconds] -format {%Y-%m-%d %H:%M}]
 
index 0f89267..ba0cc85 100644 (file)
@@ -899,101 +899,4 @@ proc OCCDoc_ProcessTex {{texFiles {}} {latexDir} verboseMode} {
     file delete -force $TEX
     file rename $TMPFILENAME $TEX
   }
-}
-
-# update image sizes in *.md files for PDF documentation if necessary
-proc OCCDoc_UpdateImagesSize {{DocFilesList {}} DoxDir verboseMode} {
-
-  foreach DocFile $DocFilesList {
-    if {$verboseMode == "YES"} {
-      puts "Info: Updating image sizes for file $DocFile..."
-    }
-
-    if {![file exists $DoxDir/$DocFile]} {
-      puts "Error: file $DoxDir/$DocFile does not exist."
-      return -1
-    }
-
-    if { [catch {set aFile [open $DoxDir/$DocFile r]} aReason] } {
-      puts "Error: cannot open file \"$DoxDir/$DocFile\" for reading: $aReason"
-      return -1
-    }
-
-    set aFileContent [read $aFile]
-    close $aFile
-
-    set aNumberOfImages [regexp -all -line {@figure\s*\{[^\}]+\}} $aFileContent]
-    set aLastImageIndex 0
-
-    if {!$aNumberOfImages} {
-      continue
-    }
-
-    while { $aNumberOfImages } {
-      set currentFigureIndex [string first "@figure" $aFileContent ${aLastImageIndex}]
-      set first_figure_inclusion [string range $aFileContent $currentFigureIndex end]
-      set line ""
-      set path ""
-      set name ""
-      set width ""
-      set dump ""
-      if [regexp {^(@figure[\s\t]*\{[^\}]+\})} $first_figure_inclusion dump line] {
-        if { [regexp {@figure[\s\t]*\{([^,\}]+)[\s\t]*\}} $line dump aPath] } {
-          set path "${aPath}"
-        } elseif { [regexp {@figure[\s\t]*\{([^,\}]+)[\s\t]*,[\s\t]*\"(.*)\"\}} $line dump aPath aName] } {
-          set path "${aPath}"
-          set name "\"${aName}\""
-        } elseif { [regexp {@figure[\s\t]*\{([^,\}]+)[\s\t]*,[\s\t]*\"(.*)\"[\s\t]*,[\s\t]*([0-9]+)\}} $line dump aPath aName aWidth] } {
-          set path "${aPath}"
-          set name "\"${aName}\""
-          set width "${aWidth}"
-        }
-
-        if {$name == ""} {
-          set name "\"\""
-        }
-        # find image
-        set anImagePath ""
-        if {[file exists "$DoxDir/$path"]} {
-          set anImagePath "$DoxDir/$path"
-        } elseif {[file exists "[OCCDoc_GetDoxDir]/$path"]} {
-          set anImagePath "[OCCDoc_GetDoxDir]/$path"
-        } elseif {[file exists "[OCCDoc_GetDoxDir]/resources/$path"]} {
-          set anImagePath "[OCCDoc_GetDoxDir]/resources/$path"
-        } elseif {[file exists "$DoxDir/[file dirname ${DocFile}]/images/$path"]} {
-          set anImagePath "$DoxDir/[file dirname ${DocFile}]/images/$path"
-        }
-        if { ![file exists "$anImagePath"] } {
-          puts "Warning: Could not find \"$DoxDir/$path\" file"
-          incr aNumberOfImages -1
-          set aLastImageIndex [expr $currentFigureIndex + [string length $dump]]
-          continue
-        }
-        # get image width
-        if [catch {exec identify "$anImagePath"} res] {
-          puts "Error: identify returns \"${identify_error}\""
-          incr aNumberOfImages -1
-          set aLastImageIndex [expr $currentFigureIndex + [string length $dump]]
-          continue
-        } else {
-          if [regexp {([0-9]+)x[0-9]+} $res dump2 loc_width] {
-            set width $loc_width
-          }
-        }
-
-        set newInfo "@figure{$path,$name,$width}"
-        set aFileContent "[string replace $aFileContent $currentFigureIndex [expr $currentFigureIndex + [string length $dump] - 1] $newInfo]"
-        set aLastImageIndex [expr $currentFigureIndex + [string length $newInfo]]
-      }
-      incr aNumberOfImages -1
-    }
-
-    if { [catch {set aFile [open $DoxDir/$DocFile w]} aReason] } {
-      puts "Error: cannot open file \"$DoxDir/$DocFile\" for writting: $aReason"
-      return -1
-    }
-
-     puts $aFile "${aFileContent}"
-     close $aFile
-  }
-}
+}
\ No newline at end of file
index 6625507..ffc6191 100644 (file)
@@ -35,7 +35,7 @@ According to his access level, the user can participate in the issue handling pr
 @subsection occt_contribution_workflow_general General scheme
 
 <center>
-@figure{OCCT_ContributionWorkflow_V3_image001.svg, "Standard life cycle of an issue"}
+@figure{OCCT_ContributionWorkflow_V3_image001.svg,"Standard life cycle of an issue",360}
 </center>
   
 @subsection occt_contribution_workflow_issue Issue registration
@@ -280,7 +280,7 @@ Each change is integrated as a single commit without preserving the history of c
 This is done to have the master branch history plain and clean.
 The following picture illustrates the process:
   
-@figure{OCCT_ContributionWorkflow_V3_image002.png, "Integration of several branches"}
+@figure{OCCT_ContributionWorkflow_V3_image002.png,"Integration of several branches",420}
   
 The new integration branch is tested against possible regressions that might appear due to interference between separate changes.
 When the tests are OK, the integration branch is pushed as the new master to the official repository.
@@ -461,3 +461,4 @@ The category corresponds to the component of OCCT where the issue is found:
   | Suspended             | The issue is postponed (for Acknowledged status).                            |
   | Documentation updated | The documentation has been updated to resolve a misunderstanding causing the issue. |
   | Won’t fix             | It is decided to keep the existing behavior.                                     |
+
index 92c3f77..704a8c9 100644 (file)
@@ -30,7 +30,7 @@ You can use *custom.bat* file to add necessary paths to the *PATH* variable.
 Note that in the process of PDF generation MiKTeX may need some packages not installed by default.
 We recommend setting option "Install missing packages on-the-fly" to "Ask me first" (default) during MiKTeX installation:
 
-@figure{/dev_guides/documentation/images/documentation_miktex.png}
+@figure{/dev_guides/documentation/images/documentation_miktex.png,"",320}
 
 On the first run of **pdflatex** it will open a dialog window prompting for installation of missing packages.
 Follow the instructions to proceed (define proxy settings if needed, select a mirror site to download from, etc.).
@@ -102,7 +102,7 @@ The MarkDown files have a <i>*.md</i> extension and are based on rules described
 
 @subsection  OCCT_DM_SECTION_3_2 Directory Structure
 
-@figure{/dev_guides/documentation/images/documentation_folders.png}
+@figure{/dev_guides/documentation/images/documentation_folders.png,"",160}
 
 Each document has its own folder if there are any images used in it. These images are stored in *images* subfolder.
 
@@ -112,7 +112,7 @@ If you want to use the same image for several documents, you can place it in *do
 
 
 @verbatim
-@figure{/dev_guides/documentation/images/documentation_test_image.svg}
+@figure{/dev_guides/documentation/images/documentation_test_image.svg,"",420}
 @endverbatim
 
 
@@ -140,13 +140,13 @@ dev_guides/svn/svn.md
 
 @section  OCCT_DOC_SECTION_5 Additional Resources
 
-More information about OCCT can be found at http://www.opencascade.com and http://dev.opencascade.org sites. 
+More information about OCCT can be found at http://www.opencascade.com and <br> http://dev.opencascade.org sites. 
 
 
-The information on formula syntax can be found at: 
+The information on formula syntax can be found at: <br>
 http://en.wikipedia.org/wiki/Help:Displaying_a_formula
 
-More information on MarkDown and Doxygen syntax can be found at:
+More information on MarkDown and Doxygen syntax can be found at: <br>
 http://www.stack.nl/~dimitri/doxygen/manual
 
 @section  OCCT_DM_SECTION_A Appendix 1: Document Syntax
@@ -389,7 +389,7 @@ Example:
 
 is rendered as:
 
-@figure{/dev_guides/documentation/images/documentation_test_image.svg,"Test SVG image"}
+@figure{/dev_guides/documentation/images/documentation_test_image.svg,"Test SVG image",320}
 
 We recommend using **Inkscape** for creation and edition of vector graphics.
 The graphics created in MS Word Draw and some other vector editors can be copy-pasted to Inkscape and saved as SVG images.
@@ -399,11 +399,10 @@ Note that the image that will be included in documentation is the whole page of
 Note that the *figure* command is an alias to the standard Doxygen command *image* repeated twice: once for HTML and then for Latex output (used for PDF generation). Thus if HTML and PDF outputs should include different images or captions, command "image" can be used:
 
 @verbatim
-  @figure{/relative/path/to/image/occ_logo.png, "OCC logo"}
+  @image html /relative/path/to/image/occ_logo_for_html.png
+  @image latex /relative/path/to/image/occ_logo_for_pdf.png
 @endverbatim
 
-@figure{/resources/occ_logo.png, "OCC logo"}
 @subsection  OCCT_DM_SECTION_A_8 Table Of Contents
 
 Use \@tableofcontents tag to get the table of contents at the beginning of the document. 
@@ -482,4 +481,4 @@ gives the following result:
 @endverbatim
 
   that leads to the following result: @f$ \sqrt{3x-1}+(1+x)^2 @f$
-  
\ No newline at end of file
+  
index 6a3f2a5..794117a 100644 (file)
@@ -124,7 +124,7 @@ The official repository contains:
   
   TortoiseGit integrates into Windows Explorer, thus it is possible to use context menu in Windows Explorer to access its functionality:  
   
-@figure{OCCT_GitGuide_V2_image005.png}
+@figure{OCCT_GitGuide_V2_image005.png,"",100}
   
 
  
@@ -137,7 +137,7 @@ The official repository contains:
   
   Select Git->Config to add your user name and Email address to the local <i>.gitconfig</i> file
   
-  @figure{OCCT_GitGuide_V2_image006.png}
+  @figure{OCCT_GitGuide_V2_image006.png,"",320}
 
 @subsection occt_gitguide_2_2 Linux platform
 
@@ -188,7 +188,7 @@ The official repository contains:
   To generate the key with this client, run **Puttygen** (e.g. from Start menu -> TortoiseGit -> Puttygen), 
   then click **Generate** and move mouse cursor over the blank area until the key is generated. 
   
-@figure{OCCT_GitGuide_V2_image007.png, "Putty key generator"}
+@figure{OCCT_GitGuide_V2_image007.png,"Putty key generator",320}
 
   After the key is generated, you will see GUI controls to define the public key comment 
   and / or specify the password for the private key protection. 
@@ -292,7 +292,7 @@ Click **Save** to input the key to the system.
     
   * In TortoiseGit: create a new folder, open it and right-click in the Explorer window, then choose **Git Clone** in the context menu:
  
-@figure{OCCT_GitGuide_V2_image009.png}
+@figure{OCCT_GitGuide_V2_image009.png,"",320}
 
   If you have chosen Putty as SSH client during TortoiseGit installation, check the **Load Putty Key** option and specify the location of the private key file saved by PuttyGen (see 3.2.1). This shall be done for the first time only.   
   
@@ -317,7 +317,7 @@ In TortoiseGit:
   * Right-click in the Explorer window, then choose **Git Create Branch**.
   * Select **Base On** Branch *remotes/origin/master*.  
 
-@figure{OCCT_GitGuide_V2_image012.png}
+@figure{OCCT_GitGuide_V2_image012.png,"",320}
 
   Check option **Switch to new branch** if you are going to start working with the newly created branch immediately.
 
@@ -332,7 +332,7 @@ In TortoiseGit:
   
   In TortoiseGit: right-click in the explorer window and select in the context menu **TortoiseGit** -> **Switch/Checkout**.
  
-@figure{OCCT_GitGuide_V2_image013.png}
+@figure{OCCT_GitGuide_V2_image013.png,"",320}
 
   Note that in order to work with the branch locally you need to set option 
   **Create new branch** when you checkout the branch from the remote repository for the first time. 
@@ -366,7 +366,7 @@ In TortoiseGit:
 
   * In TortoiseGit: right-click in the explorer window and select in the context menu <b>Git Commit -> CR…</b>:
  
-@figure{OCCT_GitGuide_V2_image014.png}
+@figure{OCCT_GitGuide_V2_image014.png,"",320}
 
   Unstaged files will be shown if you check the option ‘Show Unversioned Files’. 
   Double-click on each modified file to see the changes to be committed (as a difference vs. the base version). 
@@ -384,13 +384,13 @@ In TortoiseGit:
 
   * In TortoiseGit: right-click in the explorer window and select in the context menu, TortoiseGit -> **Push**
 
-@figure{OCCT_GitGuide_V2_image015.png}
+@figure{OCCT_GitGuide_V2_image015.png,"",320}
 
 Note that Git forbids pushing a branch if the corresponding remote branch already exists and has some changes, which are not in the history of your local branch. This may happen in different situations:
   * You have amended the last commit which is already in the remote repository. If you are sure that nobody else uses your branch, push again with **Force** option. 
   * You have rebased your branch, so that now it is completely different from the branch in the remote repository. In this case, push it under a different name (add a suffix): 
  
-@figure{OCCT_GitGuide_V2_image016.png}
+@figure{OCCT_GitGuide_V2_image016.png,"",320}
 
   Then remove the original remote branch so that other people recognize that it has been replaced by the new one. For that, select TortoiseGit -> **Push** again, select an empty line for your local branch name, 
   and enter the name of the branch to be removed in **Remote** field:
@@ -410,7 +410,7 @@ Note that Git forbids pushing a branch if the corresponding remote branch alread
     
   * In TortoiseGit: right-click in the explorer window and select in the context menu **TortoiseGit** -> **Fetch**. Check in **Prune** check-box.  
   
-@figure{OCCT_GitGuide_V2_image018.png}
+@figure{OCCT_GitGuide_V2_image018.png,"",320}
 
   If the branch you are working with has been changed in the remote repository,  use Git command *pull* to get the remote changes and merge them with your local branch. 
   
@@ -423,7 +423,7 @@ Note that Git forbids pushing a branch if the corresponding remote branch alread
 
   * In TortoiseGit: right-click in the explorer window and select in the context menu **TortoiseGit** -> **Pull**.
 
-@figure{OCCT_GitGuide_V2_image019.png}
+@figure{OCCT_GitGuide_V2_image019.png,"",320}
 
 Note that the local branches of your repository are the primary place, where your changes are stored until they get integrated to the official version of OCCT (master branch). The branches submitted to official repository are for collaborative work, review, and integration -- that repository should not be used for long-term storage of incomplete changes. 
   
@@ -436,7 +436,7 @@ Remove the local branches that you do not need any more. Note that you cannot de
     
   * In TortoiseGit: right-click in the explorer window and select in the context menu **TortoiseGit** -> **Git Show Log**.
 
-@figure{OCCT_GitGuide_V2_image020.png}
+@figure{OCCT_GitGuide_V2_image020.png,"",420}
 
   Select **All branches** check-box to view all branches.
   Right-click on the branch you want to delete and select **Delete** item in the context menu. 
@@ -450,13 +450,13 @@ If you have a fix made on a previous version of OCCT, perform the following sequ
   * Find a tag or a commit corresponding to this version in the Git history log of the master branch.
   * Create a branch basing on this tag or commit. In TortoiseGit history log: right-click on the base commit, then select **Create branch at this version**.
   
-@figure{OCCT_GitGuide_V2_image021.png}
+@figure{OCCT_GitGuide_V2_image021.png,"",320}
 
   * Check option **Switch to the new branch** to start working within the new branch immediately, or switch to it separately afterwards.
   * Put your fix in the working copy, build and check that it works, then commit to the branch.
   * Rebase the branch on the current master. In TortoiseGit: right-click on the working directory, choose **TortoiseGit** -> **Rebase**, select *remotes/origin/master* as UpStream revision, and click **Start**:
  
-@figure{OCCT_GitGuide_V2_image022.png}
+@figure{OCCT_GitGuide_V2_image022.png,"",320}
 
 Note that you can get some conflicts during rebase. To resolve them, double-click on each conflicted file   (highlighted by red in the file list) to open visual merge tool.   Switch between conflicting fragments by red arrows, and for each one decide if the code of one or both conflicting versions is to be taken.
 
@@ -473,16 +473,16 @@ To rebase your branch into a single commit, you need to do the following:
   * In TortoiseGit history log, select a branch to rebase on <i>(remotes/origin/master)</i> and in the context menu choose **Rebase “CR12345” onto this**.
   * In the **Rebase** dialog, check **Squash All**.  You can also change the order of commits and define for each commit whether it should be kept (**Pick**), edited, or just skipped.
   
-@figure{OCCT_GitGuide_V2_image023.png}
+@figure{OCCT_GitGuide_V2_image023.png,"",320}
 
   * Click **Start**.
   * The process will stop if a conflict is detected. In that case, find files with status **Conflicted** in the list (marked by red), and double-click on them to resolve the conflict. When all conflicts are resolved, click **Continue**.
    
-@figure{OCCT_GitGuide_V2_image024.png}
+@figure{OCCT_GitGuide_V2_image024.png,"",320}
  
   * At the end of the process, edit the final commit message (it should start from the issue ID and  a description from Mantis in the first line, followed by a summary of actual changes), and click **Commit**.
    
-@figure{OCCT_GitGuide_V2_image025.png}
+@figure{OCCT_GitGuide_V2_image025.png,"",320}
 
 @section occt_gitguide_5 Work with repository: Reviewer operations
 
@@ -508,5 +508,6 @@ To rebase your branch into a single commit, you need to do the following:
   * To review commits one-by-one, select each commit in the log. The list of changed files is shown at the bottom of the window; double-click on the file will open visual compare tool.
   * To review all changes made in the branch at once, or to compare two arbitrary revisions, select the corresponding commits in the log (e.g. the last commit in the branch and the branching point), ight-click for the context menu, and choose **Compare revisions**.
 
-@figure{OCCT_GitGuide_V2_image026.png}
+@figure{OCCT_GitGuide_V2_image026.png,"",320}
+
 
index 9812ce2..3f04e71 100644 (file)
@@ -242,7 +242,7 @@ The names *begin, end, data, parse.rules, grids.list* and *cases.list* are reser
 
 General layout of test scripts is shown in Figure 1.
 
-@figure{/dev_guides/tests/images/tests_image001.png, "Layout of tests folder"}
+@figure{/dev_guides/tests/images/tests_image001.png,"Layout of tests folder",400}
 
 
 @subsection testmanual_2_2 Test Groups
@@ -1406,3 +1406,4 @@ Use options <i>-tol_\* </i> for that.
 ~~~~~
 checktrinfo result -defl 1 -tol_abs_defl 0.001
 ~~~~~
+
index fc4189b..a26405c 100644 (file)
@@ -18,7 +18,7 @@ From a programming standpoint, Open CASCADE Technology is designed to enhance yo
 
 To illustrate the use of classes provided in the 3D geometric modeling toolkits, you will create a bottle as shown:
 
-@figure{/tutorial/images/tutorial_image001.png}
+@figure{/tutorial/images/tutorial_image001.png,"",240}
 
 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.
 
@@ -34,7 +34,7 @@ We first define the bottle specifications as follows:
 
 In addition, we decide that the bottle's profile (base) will be centered on the origin of the global Cartesian coordinate system.
 
-@figure{/tutorial/images/tutorial_image002.png}
+@figure{/tutorial/images/tutorial_image002.png,"",240}
 
 This modeling requires four steps:
 
@@ -50,7 +50,7 @@ This modeling requires four steps:
 
 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.
 
-@figure{tutorial/images/tutorial_image003.svg}
+@figure{tutorial/images/tutorial_image003.svg,"",466}
 
 There are two classes to describe a 3D Cartesian point from its X, Y and Z coordinates in Open CASCADE Technology:
 
@@ -83,7 +83,7 @@ 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.
 
-@figure{/tutorial/images/tutorial_image004.png}
+@figure{/tutorial/images/tutorial_image004.png,"",240}
 
 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*).
@@ -139,7 +139,7 @@ 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.
 
-@figure{/tutorial/images/tutorial_image005.png}
+@figure{/tutorial/images/tutorial_image005.png,"",240}
     
 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:
@@ -177,7 +177,7 @@ Once the first part of your wire is created you need to compute the complete pro
   * compute a new wire by reflecting the existing one.
   * add the reflected wire to the initial one.
 
-@figure{/tutorial/images/tutorial_image006.png}
+@figure{/tutorial/images/tutorial_image006.png,"",377}
 
 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.
@@ -260,7 +260,7 @@ To compute the main body of the bottle, you need to create a solid shape. The si
 | Face   | Solid              |
 | Shell  | Compound of Solids |
 
-@figure{/tutorial/images/tutorial_image007.png}
+@figure{/tutorial/images/tutorial_image007.png,"",240}
 
 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.
@@ -297,7 +297,7 @@ For our purposes, we will specify that fillets must be:
   * applied on all edges of the shape
   * have a radius of *myThickness* / 12
 
-@figure{/tutorial/images/tutorial_image008.png}
+@figure{/tutorial/images/tutorial_image008.png,"",240}
 
 To apply fillets on the edges of a shape, you use the *BRepFilletAPI_MakeFillet* class. This class is normally used as follows:
 
@@ -353,7 +353,7 @@ Once this is done, you perform the last step of the procedure by asking for the
 
 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.
 
-@figure{/tutorial/images/tutorial_image009.png}
+@figure{/tutorial/images/tutorial_image009.png,"",240}
 
 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:
@@ -395,7 +395,7 @@ In Open CASCADE Technology, a hollowed solid is called a *Thick* *Solid* and is
   * 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.
 
-@figure{/tutorial/images/tutorial_image010.png}
+@figure{/tutorial/images/tutorial_image010.png,"",240}
     
 To compute a thick solid, you create an instance of the *BRepOffsetAPI_MakeThickSolid* class by giving the following information:
     
@@ -500,7 +500,7 @@ As a first step, you compute these cylindrical surfaces. You are already familia
 
 Using the same coordinate system *neckAx2* used to position the neck, you create two cylindrical surfaces *Geom_CylindricalSurface* with the following radii:
 
-@figure{/tutorial/images/tutorial_image011.png}
+@figure{/tutorial/images/tutorial_image011.png,"",300}
 
 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.
 
@@ -525,7 +525,7 @@ P(U, V) = O + R * (cos(U) * xDir + sin(U) * yDir) + V * zDir, where :
   * R is the radius of the cylindrical surface.
   * U range is [0, 2PI] and V is infinite.
 
-@figure{/tutorial/images/tutorial_image012.png}
+@figure{/tutorial/images/tutorial_image012.png,"",400}
 
 The advantage of having such parameterized geometries is that you can compute, for any (U, V) parameters of the surface:
 
@@ -534,7 +534,7 @@ The advantage of having such parameterized geometries is that you can compute, f
 
 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:
 
-@figure{/tutorial/images/tutorial_image013.png}
+@figure{/tutorial/images/tutorial_image013.png,"",320}
 
 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:
 
@@ -549,14 +549,14 @@ The helicoidal curve type is exactly what you need. On the neck's surface, the e
   * 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:
 
-@figure{/tutorial/images/tutorial_image014.png}
+@figure{/tutorial/images/tutorial_image014.png,"",440}
 
 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.
   
-@figure{/tutorial/images/tutorial_image015.png}
+@figure{/tutorial/images/tutorial_image015.png,"",440}
   
 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:
 
@@ -572,7 +572,7 @@ To use 2D primitive geometry types of Open CASCADE Technology for defining a poi
 
 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).
 
-@figure{/tutorial/images/tutorial_image016.png}
+@figure{/tutorial/images/tutorial_image016.png,"",440}
 
 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:
 
@@ -628,7 +628,7 @@ 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.
 
-@figure{/tutorial/images/tutorial_image017.png}
+@figure{/tutorial/images/tutorial_image017.png,"",440}
 
 Previously, you have built:
 
@@ -668,7 +668,7 @@ You have computed the wires of the threading. The threading will be a solid shap
 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:
   
-@figure{/tutorial/images/tutorial_image018.png}
+@figure{/tutorial/images/tutorial_image018.png,"",285}
   
   * 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.
@@ -698,7 +698,7 @@ You are almost done building the bottle. Use the *TopoDS_Compound* and *BRep_Bui
 
 Congratulations! Your bottle is complete. Here is the result snapshot of the Tutorial application:
 
-@figure{/tutorial/images/tutorial_image019.png}
+@figure{/tutorial/images/tutorial_image019.png,"",320}
 
 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.com/content/technology-support. Our professional services can maximize the power of your Open CASCADE Technology applications.
@@ -847,3 +847,4 @@ Complete definition of MakeBottle function (defined in the file src/MakeBottle.c
         return aRes;
     }
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
index 0ad6d65..b224df2 100644 (file)
@@ -61,7 +61,7 @@ For example, for two arguments *S<sub>1</sub>* and *S<sub>2</sub>* the result *R
 
 <i>R<sub>GF</sub> = GF (S<sub>1</sub>, S<sub>2</sub>) = S<sub>p1</sub> + S<sub>p2</sub> + S<sub>p12</sub></i>  
 
-@figure{/user_guides/boolean_operations/images/operations_image001.svg,  "Operators"}
+@figure{/user_guides/boolean_operations/images/operations_image001.svg,"Operators",320}
 
 This Figure shows that 
 * <i>B<sub>common</sub> (S<sub>1</sub>, S<sub>2</sub>) = S<sub>p12</sub>;</i>
@@ -152,7 +152,7 @@ At second, there are interferences that occur between a solid *Z1* and a shape *
 
 For two vertices *Vi* and *Vj*, the distance between their corresponding 3D points is less than the sum of their tolerances *Tol(Vi)* and *Tol(Vj)*.
 
-@figure{/user_guides/boolean_operations/images/operations_image002.svg,  "Vertex/vertex interference"}
+@figure{/user_guides/boolean_operations/images/operations_image002.svg,"Vertex/vertex interference",420}
 
 The result is a new vertex *Vn* with 3D point *Pn* and tolerance value <i>Tol(Vn)</i>. 
 
@@ -162,7 +162,7 @@ The coordinates of *Pn* and the value <i>Tol(Vn)</i> are computed as the center
 
 For a vertex *Vi* and an edge *Ej*, the distance *D* between 3D point of the vertex and its projection on the 3D curve of edge *Ej* is less or equal than sum of tolerances of vertex *Tol(Vi)* and edge *Tol(Ej)*.
 
-@figure{/user_guides/boolean_operations/images/operations_image003.svg,  "Vertex/edge interference"}
+@figure{/user_guides/boolean_operations/images/operations_image003.svg,"Vertex/edge interference",420}
 
 The result is vertex *Vi* with the corresponding tolerance value <i>Tol(Vi)=Max(Tol(Vi), D+Tol(Ej))</i>, where <i>D = distance (Pi, PPi)</i>; 
 
@@ -172,7 +172,7 @@ and parameter *t<sub>i</sub>* of the projected point *PPi* on 3D curve *Cj* of e
 
 For a vertex *Vi* and a face *Fj* the distance *D* between 3D point of the vertex and its projection on the surface of the face is less or equal than sum of tolerances of the vertex *Tol(Vi)* and the face *Tol(Fj)*. 
 
-@figure{/user_guides/boolean_operations/images/operations_image004.svg,  "Vertex/face interference"}
+@figure{/user_guides/boolean_operations/images/operations_image004.svg,"Vertex/face interference",420}
 
 The result is vertex *Vi* with the corresponding tolerance value <i>Tol(Vi)=Max(Tol(Vi), D+Tol(Fj))</i>, where <i>D = distance (Pi, PPi)</i>
 
@@ -186,7 +186,7 @@ Let us examine two cases:
 
 In  the first case two edges have one or several common parts of 3D curves in terms of tolerance.
 
-@figure{/user_guides/boolean_operations/images/operations_image005.svg,  "Edge/edge interference: common parts"}
+@figure{/user_guides/boolean_operations/images/operations_image005.svg,"Edge/edge interference: common parts",420}
 
 The results are: 
 * Parametric range <i>[t<sub>i1</sub>, t<sub>i2</sub> ]</i> for 3D curve *Ci* of edge *Ei*.
@@ -194,7 +194,7 @@ The results are:
 
 In the second case two edges have one or several common points in terms of tolerance.
 
-@figure{/user_guides/boolean_operations/images/operations_image006.svg, "Edge/edge interference: common points"}
+@figure{/user_guides/boolean_operations/images/operations_image006.svg,"Edge/edge interference: common points",420}
 
 The result is a new vertex *Vn* with 3D point *Pn* and tolerance value *Tol(Vn)*.
 
@@ -211,13 +211,13 @@ Let us examine two cases:
 
 In the first case Edge *Ei* and Face *Fj* have one or several common parts in terms of tolerance. 
 
-@figure{/user_guides/boolean_operations/images/operations_image007.svg, "Edge/face interference: common parts"}
+@figure{/user_guides/boolean_operations/images/operations_image007.svg,"Edge/face interference: common parts",420}
 
 The result is a parametric range <i>[t<sub>i1</sub>, t<sub>i2</sub>]</i> for the 3D curve *Ci* of the edge *Ei*.
 
 In the second case Edge *Ei* and Face *Fj* have one or several common points in terms of tolerance.
 
-@figure{/user_guides/boolean_operations/images/operations_image008.svg,  "Edge/face interference: common points"}
+@figure{/user_guides/boolean_operations/images/operations_image008.svg,"Edge/face interference: common points",420}
 
 The result is a new vertex *Vn* with 3D point *Pn* and tolerance value *Tol(Vn)*. 
 
@@ -230,11 +230,11 @@ The coordinates of *Pn* and the value *Tol(Vn)* are computed as the center and t
 
 For a face *Fi* and a face *Fj* (with the corresponding surfaces *Si* and *Sj*) there are some places in 3D space, where the distance between the surfaces is less than (or equal to) sum of tolerances of the faces.
 
-@figure{/user_guides/boolean_operations/images/operations_image009.svg,  "Face/face interference: common curves"}
+@figure{/user_guides/boolean_operations/images/operations_image009.svg,"Face/face interference: common curves",418}
 
 In the first case the result contains intersection curves *C<sub>ijk</sub> (k = 0, 1, 2…k<sub>N</sub>,* where *k<sub>N</sub>* is the number of intersection curves with corresponding values of tolerances *Tol(C<sub>ijk</sub>)*.
 
-@figure{/user_guides/boolean_operations/images/operations_image010.svg, "Face/face interference: common points"}
+@figure{/user_guides/boolean_operations/images/operations_image010.svg,"Face/face interference: common points",305}
 
 In the second case Face *Fi* and face *Fj* have one or several new vertices *V<sub>ijm</sub>*, where <i>m=0,1,2, ... mN, mN </i> is the number of intersection points.
 
@@ -247,25 +247,25 @@ The coordinates of a 3D point *P<sub>ijm</sub>* and the value *Tol(V<sub>ijm</su
 
 For a vertex *Vi* and a solid *Zj* there is Vertex/Solid interference if the vertex *Vi* has no BRep interferences with any sub-shape of *Zj* and *Vi* is completely inside the solid *Zj*.
 
-@figure{/user_guides/boolean_operations/images/operations_image060.png,  "Vertex/Solid Interference"}
+@figure{/user_guides/boolean_operations/images/operations_image060.png,"Vertex/Solid Interference",220}
 
 @subsubsection occt_algorithms_3_1_8 Edge/Soild Interference
 
 For an edge *Ei* and a solid *Zj* there is Edge/Solid interference if the edge *Ei* and its sub-shapes have no BRep interferences with any sub-shape of *Zj* and *Ei* is completely inside the solid *Zj*.
 
-@figure{/user_guides/boolean_operations/images/operations_image061.png,  "Edge/Solid Interference"}
+@figure{/user_guides/boolean_operations/images/operations_image061.png,"Edge/Solid Interference",220}
 
 @subsubsection occt_algorithms_3_1_9 Face/Soild Interference
 
 For a face *Fi* and a solid *Zj* there is Face/Solid interference if the face *Fi* and its sub-shapes have no BRep interferences with any sub-shape of *Zj* and *Fi* is completely inside the solid *Zj*. 
 
-@figure{/user_guides/boolean_operations/images/operations_image062.png,  "Face/Solid Interference"}
+@figure{/user_guides/boolean_operations/images/operations_image062.png,"Face/Solid Interference",220}
 
 @subsubsection occt_algorithms_3_1_10  Solid/Soild Interference
 
 For a solid *Zi* and a solid *Zj* there is Solid/Solid interference if the solid *Zi* and its sub-shapes have no BRep interferences with any sub-shape of *Zj* and *Zi* is completely inside the solid *Zj*. 
 
-@figure{/user_guides/boolean_operations/images/operations_image063.png,  "Solid/Solid Interference"}
+@figure{/user_guides/boolean_operations/images/operations_image063.png,"Solid/Solid Interference",220}
 
 
 @subsubsection occt_algorithms_3_1_11 Computation Order
@@ -299,7 +299,7 @@ The result of interferences of the type Face/Face in most cases is intersection
 The position of vertex *Vi* on curve *C* can be defined by a value of parameter <i>t<sub>i</sub></i> of the 3D point of the vertex on the curve.
 Pave *PVi* on curve *C* is a structure containing the vertex *Vi* and correspondent value of the parameter  <i>t<sub>i</sub></i> of the 3D point of the vertex on the curve. Curve *C* can be a 3D or a 2D curve.
 
-@figure{/user_guides/boolean_operations/images/operations_image011.svg,  "Paves"}
+@figure{/user_guides/boolean_operations/images/operations_image011.svg,"Paves",340}
 
 Two paves *PV1* and *PV2* on the same curve *C* can be compared using the parameter value @code PV1 > PV2 if t1 > t2 @endcode  
 
@@ -312,7 +312,7 @@ A set of paves *PVi (i=1, 2...nPV)*, where *nPV* is the number of paves] of curv
 
 A pave block *PBi* is a part of the object (edge, intersection curve) between neighboring paves. 
 
-@figure{/user_guides/boolean_operations/images/operations_image012.svg, "Pave Blocks"}
+@figure{/user_guides/boolean_operations/images/operations_image012.svg,"Pave Blocks",340}
 
 Any finite source edge *E* has at least one pave block that contains two paves *PVb* and *PVe*:
 * Pave *PVb* corresponds to the vertex *Vb* with minimal parameter <i>t<sub>b</sub></i> on the curve of the edge.
@@ -324,7 +324,7 @@ Pave block *PV* of curve *C* is bounded by vertices *V1* and *V2* with tolerance
 * In case of edge, the tolerance value is the tolerance of the edge.
 * In case of intersection curve, the tolerance value is obtained from an intersection algorithm.
 
-@figure{/user_guides/boolean_operations/images/operations_image013.svg, "Shrunk Range"}
+@figure{/user_guides/boolean_operations/images/operations_image013.svg,"Shrunk Range",340}
 
 The theoretical parametric range of the pave block is <i>[t1C, t2C]</i>.
 
@@ -343,14 +343,14 @@ The interferences of the type Edge/Edge, Edge/Face produce results as common par
 
 In case of Edge/Edge interference the common parts are pave blocks that have different base edges. 
 
-@figure{/user_guides/boolean_operations/images/operations_image014.svg, "Common Blocks: Edge/Edge interference"}
+@figure{/user_guides/boolean_operations/images/operations_image014.svg,"Common Blocks: Edge/Edge interference",340}
 
 If the pave blocks <i>PB<sub>1</sub>, PB<sub>2</sub>…PB<sub>NbPB</sub></i> , where *NbPB* is the number of pave blocks have the same bounding vertices and geometrically coincide, the pave blocks form common block *CB*.
        
 
 In case of Edge/Face interference the common parts are pave blocks lying on a face(s).
 
-@figure{/user_guides/boolean_operations/images/operations_image015.svg, "Common Blocks: Edge/Face interference"}
+@figure{/user_guides/boolean_operations/images/operations_image015.svg,"Common Blocks: Edge/Face interference",265}
 
 If the pave blocks *PBi* geometrically coincide with a face *Fj*, the pave blocks form common block *CB*.
 
@@ -369,7 +369,7 @@ The structure *FaceInfo* contains the following information:
 * Pave blocks built up from intersection curves for the face;
 * Vertices built up from intersection points for the face.
 
-@figure{/user_guides/boolean_operations/images/operations_image016.svg,  "Face Info"}
+@figure{/user_guides/boolean_operations/images/operations_image016.svg,"Face Info",420}
 
 In the figure, for face *F1*:
 * Pave blocks that have state **In** for the face: *PB<sub>in1</sub>*.
@@ -467,7 +467,7 @@ The information about interferences is stored in the instances of classes that a
 
 The Figure shows inheritance diagram for *BOPDS_Interf* classes.
 
-@figure{/user_guides/boolean_operations/images/operations_image017.svg,  "BOPDS_Interf classes"}
+@figure{/user_guides/boolean_operations/images/operations_image017.svg,"BOPDS_Interf classes",420}
 
 
 @subsection occt_algorithms_4_4        Pave, PaveBlock and CommonBlock
@@ -553,7 +553,7 @@ Intersection Part (IP) is used to
 
 IP is implemented in the class *BOPAlgo_PaveFiller*.
 
-@figure{/user_guides/boolean_operations/images/operations_image064.svg,  "Diagram for Class BOPAlgo_PaveFiller"}
+@figure{/user_guides/boolean_operations/images/operations_image064.svg,"Diagram for Class BOPAlgo_PaveFiller",230}
 
 @subsection occt_algorithms_5_1a Class BOPAlgo_Algo
 The class *BOPAlgo_Algo* provides the base interface for all algorithms to provide the possibility to:
@@ -599,7 +599,7 @@ The input data for this step is the DS after the @ref occt_algorithms_5_1 "Initi
 
 The example of connexity chains of interfered vertices is given in the image:
 
-@figure{/user_guides/boolean_operations/images/operations_image018.svg, "Connexity chains of interfered vertices"}
+@figure{/user_guides/boolean_operations/images/operations_image018.svg,"Connexity chains of interfered vertices",394}
 
 
 @subsection occt_algorithms_5_3        Compute Vertex/Edge Interferences
@@ -642,7 +642,7 @@ The input data for this step is the DS after updating Pave Blocks.
 
 The example of coinciding chains of pave blocks is given in the image:
 
-@figure{/user_guides/boolean_operations/images/operations_image019.png,  "Coinciding chains of pave blocks"}
+@figure{/user_guides/boolean_operations/images/operations_image019.png,"Coinciding chains of pave blocks",420}
 
 * The pairs of coincided pave blocks are: <i>(PB11, PB12), (PB11, PB13), (PB12, PB13), (PB21, PB22), (PB21, PB23), (PB22, PB23).</i>
 * The pairs produce  two chains: <i>(PB11, PB12, PB13)</i> and <i>(PB21, PB22, PB23).</i>
@@ -746,7 +746,7 @@ BP is implemented in the following classes:
 * *BOPAlgo_BOP* -- for the Boolean Operation operator   (BOA).
 * *BOPAlgo_Section* -- for the Section operator  (SA).
 
-@figure{/user_guides/boolean_operations/images/operations_image020.svg, "Diagram for BP classes"}
+@figure{/user_guides/boolean_operations/images/operations_image020.svg,"Diagram for BP classes",300}
 
 The class *BOPAlgo_BuilderShape* provides the interface for algorithms that have:
 * A Shape as the result;
@@ -783,7 +783,7 @@ Please, have a look at the examples, which can help to better understand the def
 
 Let us consider three edges: *E1, E2* and *E3* that intersect in one 3D point.
 
-@figure{/user_guides/boolean_operations/images/operations_image021.svg, "Three Intersecting Edges"}
+@figure{/user_guides/boolean_operations/images/operations_image021.svg,"Three Intersecting Edges",420}
 
 The result of the GFA operation is a compound containing 6 new edges: *E11, E12, E21, E22, E31*, and *E32*. These edges have one shared vertex *Vn1*.
 
@@ -796,7 +796,7 @@ In this case:
 
 Let us consider two wires *W1 (Ew11, Ew12, Ew13)* and *W2 (Ew21, Ew22, Ew23)* and edge *E1*.
 
-@figure{/user_guides/boolean_operations/images/operations_image022.svg,  "Two wires and an edge"}
+@figure{/user_guides/boolean_operations/images/operations_image022.svg,"Two wires and an edge",420}
 
 The result of the GF operation is a compound consisting of 2 wires: *Wn1 (Ew11, En1, En2, En3, Ew13)* and *Wn2 (Ew21, En2, En3, En4, Ew23)* and two edges: *E11* and *E12*. 
 
@@ -810,7 +810,7 @@ The edges *En1, En2, En3, En4* and vertex *Vn1* are new shapes created during th
 
 Let us consider edge *E1* and face *F2*:
 
-@figure{/user_guides/boolean_operations/images/operations_image023.svg,  "An edge intersecting with a face"}
+@figure{/user_guides/boolean_operations/images/operations_image023.svg,"An edge intersecting with a face",420}
 
 The result of the GF operation is a compound consisting of 3 shapes: 
 * Split edge parts *E11* and *E12* (image of *E1*).
@@ -820,7 +820,7 @@ The result of the GF operation is a compound consisting of 3 shapes:
 
 Let us consider edge *E1* and face *F2*:
 
-@figure{/user_guides/boolean_operations/images/operations_image024.svg,  "An edge lying on a face"}
+@figure{/user_guides/boolean_operations/images/operations_image024.svg,"An edge lying on a face",420}
 
 The result of the GF operation is a compound consisting of 5 shapes: 
 * Split edge parts *E11, E12* and *E13* (image of *E1*).
@@ -831,7 +831,7 @@ The result of the GF operation is a compound consisting of 5 shapes:
 
 Let us consider edge *E1* and shell *Sh2* that consists of 2 faces: *F21* and *F22*
 
-@figure{/user_guides/boolean_operations/images/operations_image025.svg, "An edge and a shell"}
+@figure{/user_guides/boolean_operations/images/operations_image025.svg,"An edge and a shell",488}
 
 The result of the GF operation is a compound consisting of 5 shapes: 
 * Split edge parts *E11, E12 , E13* and *E14* (image of *E1*).
@@ -840,7 +840,7 @@ The result of the GF operation is a compound consisting of 5 shapes:
 @subsubsection occt_algorithms_7_3_6 Case 6: A wire and a shell
 
 Let us consider  wire *W1 (E1, E2, E3, E4)* and  shell *Sh2 (F21, F22)*. 
-@figure{/user_guides/boolean_operations/images/operations_image026.svg,  "A wire and a shell"}
+@figure{/user_guides/boolean_operations/images/operations_image026.svg,"A wire and a shell",427}
 
 The result of the GF operation is a compound consisting of 2 shapes: 
 
@@ -849,7 +849,7 @@ The result of the GF operation is a compound consisting of 2 shapes:
 
 @subsubsection occt_algorithms_7_3_7 Case 7: Three faces
 
-Let us consider 3 faces: *F1, F2* and *F3*. @figure{/user_guides/boolean_operations/images/operations_image027.png,  "Three faces"}
+Let us consider 3 faces: *F1, F2* and *F3*. @figure{/user_guides/boolean_operations/images/operations_image027.png,"Three faces",420}
 
 The result of the GF operation is a compound consisting of 7 shapes:
 * Split face parts: *Fn1, Fn2, Fn3, Fn4, Fn5, Fn6* and *Fn7*.
@@ -857,7 +857,7 @@ The result of the GF operation is a compound consisting of 7 shapes:
 @subsubsection occt_algorithms_7_3_8 Case 8: A face and a shell
 
 Let us consider shell *Sh1 (F11, F12, F13)* and face *F2*.
-@figure{/user_guides/boolean_operations/images/operations_image028.png,  "A face and a shell"}
+@figure{/user_guides/boolean_operations/images/operations_image028.png,"A face and a shell",420}
 
 The result of the GF operation is a compound consisting of 4 shapes:
 * Image shell *Sh11* that consists of split face parts from shell *Sh1: Fn1, Fn2, Fn3, Fn4, Fn5* and *Fn6*.
@@ -865,23 +865,23 @@ The result of the GF operation is a compound consisting of 4 shapes:
 
 @subsubsection occt_algorithms_7_3_9 Case 9: A shell and a solid
 
-Let us consider shell *Sh1 (F11, F12…F16)* and solid *So2*. @figure{/user_guides/boolean_operations/images/operations_image029.png,  "A shell and a solid: arguments"}
+Let us consider shell *Sh1 (F11, F12…F16)* and solid *So2*. @figure{/user_guides/boolean_operations/images/operations_image029.png,"A shell and a solid: arguments",220}
 
 The result of the GF operation is a compound consisting of 2 shapes:
 * Image shell *Sh11* consisting of split face parts of *Sh1: Fn1, Fn2 ... Fn8.*
 * Solid *So21* with internal shell. (image of *So2*).
-@figure{/user_guides/boolean_operations/images/operations_image030.png,  "A shell and a solid: results"}
+@figure{/user_guides/boolean_operations/images/operations_image030.png,"A shell and a solid: results",420}
 
 @subsubsection occt_algorithms_7_3_10 Case 10: A compound and a solid
 
 Let us consider compound *Cm1* consisting of 2 solids *So11* and *So12*) and solid *So2*.
-@figure{/user_guides/boolean_operations/images/operations_image031.png, "A compound and a solid: arguments"}
+@figure{/user_guides/boolean_operations/images/operations_image031.png,"A compound and a solid: arguments",220}
 
 The result of the GF operation is a compound consisting of 4 shapes:
 * Image compound *Cm11* consisting of split solid parts from *So11* and *So12 (Sn1, Sn2, Sn3, Sn4)*.
 * Split parts of solid *So2 (Sn2, Sn3, Sn5)*.
 
-@figure{/user_guides/boolean_operations/images/operations_image032.png, "A compound and a solid: results"}
+@figure{/user_guides/boolean_operations/images/operations_image032.png,"A compound and a solid: results",420}
 
 @subsection occt_algorithms_7_4        Class BOPAlgo_Builder
 
@@ -910,7 +910,7 @@ The input data for this step is a *BOPAlgo_PaveFiller* object (in terms of @ref
 
 @subsubsection occt_algorithms_7_4_3 Build Images for Vertices
 
-The input data for this step is *BOPAlgo_Builder* object  after Initialisation.
+The input data for this step is *BOPAlgo_Builder* object  after Initialization.
 
 | No | Contents | Implementation  |
 | :--- | :--- | :--- | 
@@ -976,7 +976,7 @@ The input data for this step is *BOPAlgo_Builder* object after building result o
 
 The example of chains of same domain faces is given in the image:
 
-@figure{/user_guides/boolean_operations/images/operations_image033.svg,  "Chains of same domain faces"}
+@figure{/user_guides/boolean_operations/images/operations_image033.svg,"Chains of same domain faces",420}
 
 * The pairs of same domain faces are: <i>(F11, F21), (F22, F31), (F41, F51) , (F41, F6)</i> and <i>(F51, F6)</i>.
 * The pairs produce the three chains: <i>(F11, F21), (F22, F31)</i> and <i>(F41, F51, F6)</i>.
@@ -1152,8 +1152,8 @@ bsplit result
 
 <table align="center">
 <tr>
-  <td>@figure{/user_guides/boolean_operations/images/bsplit_image001.png, "Arguments"}</td>
-  <td>@figure{/user_guides/boolean_operations/images/bsplit_image002.png, "Result"}</td>
+  <td>@figure{/user_guides/boolean_operations/images/bsplit_image001.png,"Arguments",160}</td>
+  <td>@figure{/user_guides/boolean_operations/images/bsplit_image002.png,"Result",160}</td>
 </tr>
 </table>
 
@@ -1186,8 +1186,8 @@ bsplit result
 
 <table align="center">
 <tr>
-  <td>@figure{/user_guides/boolean_operations/images/bsplit_image003.png, "Arguments"}</td>
-  <td>@figure{/user_guides/boolean_operations/images/bsplit_image004.png, "Result"}</td>
+  <td>@figure{/user_guides/boolean_operations/images/bsplit_image003.png,"Arguments",160}</td>
+  <td>@figure{/user_guides/boolean_operations/images/bsplit_image004.png,"Result",160}</td>
 </tr>
 </table>
 
@@ -1196,8 +1196,8 @@ bsplit result
 Splitting shell hull by the planes:
 <table align="center">
 <tr>
-  <td>@figure{/user_guides/boolean_operations/images/bsplit_image005.png, "Arguments"}</td>
-  <td>@figure{/user_guides/boolean_operations/images/bsplit_image006.png, "Results"}</td>
+  <td>@figure{/user_guides/boolean_operations/images/bsplit_image005.png,"Arguments",160}</td>
+  <td>@figure{/user_guides/boolean_operations/images/bsplit_image006.png,"Results",160}</td>
 </tr>
 </table>
 
@@ -1251,11 +1251,11 @@ Splitting shell hull by the planes:
 
 Let us consider two interfering vertices *V1* and *V2*:
 
-@figure{/user_guides/boolean_operations/images/boolean_image001.svg}
+@figure{/user_guides/boolean_operations/images/boolean_image001.svg,"",160}
 
 * The result of *Fuse* operation is the compound that contains new vertex *V*.
 
-@figure{/user_guides/boolean_operations/images/boolean_image002.svg}
+@figure{/user_guides/boolean_operations/images/boolean_image002.svg,"",160}
 
 * The result of *Common* operation is a compound containing new vertex *V*.
 
@@ -1266,13 +1266,13 @@ Let us consider two interfering vertices *V1* and *V2*:
 
 Let us consider vertex *V1* and the edge *E2*, that intersect in a 3D point:
 
-@figure{/user_guides/boolean_operations/images/boolean_image004.png}
+@figure{/user_guides/boolean_operations/images/boolean_image004.png,"",230}
 
 * The result of *Fuse* operation is result is not defined because the dimension of the vertex (0) is not equal to the dimension of the edge (1).
 
 * The result of *Common* operation is a compound containing vertex *V<sub>1</sub>* as the argument *V<sub>1</sub>* has a common part with edge *E2*.
 
-@figure{/user_guides/boolean_operations/images/boolean_image005.png}
+@figure{/user_guides/boolean_operations/images/boolean_image005.png,"",230}
 
 * The result of *Cut12* operation is an empty compound.
 * The result of *Cut21* operation is not defined because the dimension of the vertex (0) is less than the dimension of the edge (1).
@@ -1281,13 +1281,13 @@ Let us consider vertex *V1* and the edge *E2*, that intersect in a 3D point:
 
 Let us consider  vertex *V1* and face *F2*, that intersect in a 3D point:
 
-@figure{/user_guides/boolean_operations/images/boolean_image006.png}
+@figure{/user_guides/boolean_operations/images/boolean_image006.png,"",230}
 
 * The result of *Fuse* operation is not defined because the dimension of the vertex (0) is not equal to the dimension of the face (2).
 
 * The result of *Common* operation is a compound containing vertex *V<sub>1</sub>* as the argument *V<sub>1</sub>* has a common part with face *F2*.
 
-@figure{/user_guides/boolean_operations/images/boolean_image007.png}
+@figure{/user_guides/boolean_operations/images/boolean_image007.png,"",230}
 
 * The result of *Cut12* operation is an empty compound.
 * The result of *Cut21* operation is not defined because the dimension of the vertex (0) is less than the dimension of the face (2).
@@ -1296,13 +1296,13 @@ Let us consider  vertex *V1* and face *F2*, that intersect in a 3D point:
 
 Let us consider  vertex *V1* and solid *S2*, that intersect in a 3D point:
 
-@figure{/user_guides/boolean_operations/images/boolean_image008.png}
+@figure{/user_guides/boolean_operations/images/boolean_image008.png,"",230}
 
 * The result of *Fuse* operation is not defined because the dimension of the vertex (0) is not equal to the dimension of the solid (3).
 
 * The result of *Common* operation is a compound containing vertex *V<sub>1</sub>* as the argument *V<sub>1</sub>* has a common part with solid *S2*.
 
-@figure{/user_guides/boolean_operations/images/boolean_image009.png}
+@figure{/user_guides/boolean_operations/images/boolean_image009.png,"",230}
 
 * The result of *Cut12* operation is an empty compound.
 * The result of *Cut21* operation is not defined because the dimension of the vertex (0) is less than the dimension of the solid (3).
@@ -1311,14 +1311,14 @@ Let us consider  vertex *V1* and solid *S2*, that intersect in a 3D point:
 
 Let us consider edges *E1* and *E2* that intersect in a 3D point:
 
-@figure{/user_guides/boolean_operations/images/boolean_image010.svg}
+@figure{/user_guides/boolean_operations/images/boolean_image010.svg,"",230}
 
 * The result of *Fuse* operation is a compound containing split parts of arguments i.e. 4 new edges *E11, E12, E21*, and *E22*. These edges have one shared vertex *Vn1*. 
 In this case: 
        * argument edge *E1* has resulting split edges *E11* and *E12* (image of *E1*);
        * argument edge *E2* has resulting split edges *E21* and *E22* (image of *E2*).
        
-@figure{/user_guides/boolean_operations/images/boolean_image011.svg}
+@figure{/user_guides/boolean_operations/images/boolean_image011.svg,"",230}
 
 * The result of *Common* operation is an empty compound because the dimension (0) of the common part between the edges (vertex) is less than the dimension of the arguments (1).
 
@@ -1326,19 +1326,19 @@ In this case:
 
 In this case the argument edge *E1* has resulting split edges *E11* and *E12* (image of *E1*).
 
-@figure{/user_guides/boolean_operations/images/boolean_image012.svg}
+@figure{/user_guides/boolean_operations/images/boolean_image012.svg,"",230}
 
 * The result of *Cut21* operation is a compound containing split parts of the argument  *E2*, i.e. 2 new edges *E21* and *E12*. These edges have one shared vertex *Vn1*. 
 
 In this case the argument edge *E2* has resulting split edges *E21* and *E22* (image of *E2*).
 
-@figure{/user_guides/boolean_operations/images/boolean_image013.svg}
+@figure{/user_guides/boolean_operations/images/boolean_image013.svg,"",70}
 
 @subsubsection occt_algorithms_9_4_6   Case 6: Two edges having a common block
 
 Let us consider edges *E1* and *E2* that have a common block:
 
-@figure{/user_guides/boolean_operations/images/boolean_image014.svg}
+@figure{/user_guides/boolean_operations/images/boolean_image014.svg,"",230}
 
 * The result of *Fuse* operation is a compound containing split parts of arguments i.e. 3 new edges *E11*, *E12* and *E22*. These edges have two shared vertices. 
 In this case: 
@@ -1346,27 +1346,27 @@ In this case:
        * argument edge *E2* has resulting split edges *E21* and *E22* (image of *E2*);
        * edge *E12* is common for the images of *E1* and *E2*.
        
-@figure{/user_guides/boolean_operations/images/boolean_image015.svg}
+@figure{/user_guides/boolean_operations/images/boolean_image015.svg,"",230}
 
 * The result of *Common* operation is a compound containing split parts of arguments i.e. 1 new edge *E12*. In this case edge *E12* is common for the images of *E1* and *E2*. 
 The common part between the edges (edge) has the same dimension (1) as the dimension of the arguments (1).
 
-@figure{/user_guides/boolean_operations/images/boolean_image016.svg}
+@figure{/user_guides/boolean_operations/images/boolean_image016.svg,"",230}
 
 * The result of *Cut12* operation is a compound containing a split part of argument  *E1*, i.e. new edge *E11*. 
 
-@figure{/user_guides/boolean_operations/images/boolean_image017.svg}
+@figure{/user_guides/boolean_operations/images/boolean_image017.svg,"",230}
 
 * The result of *Cut21* operation is a compound containing a split part of argument  *E2*, i.e. new edge *E22*.
 
-@figure{/user_guides/boolean_operations/images/boolean_image018.svg}
+@figure{/user_guides/boolean_operations/images/boolean_image018.svg,"",230}
 
 
 @subsubsection occt_algorithms_9_4_7   Case 7: An Edge and a Face intersecting at a point
 
 Let us consider edge *E1* and face *F2* that intersect at a 3D point:
 
-@figure{/user_guides/boolean_operations/images/boolean_image019.png}
+@figure{/user_guides/boolean_operations/images/boolean_image019.png,"",230}
 
 * The result of *Fuse* operation is not defined because the dimension of the edge (1) is not equal to the dimension of the face (2).
        
@@ -1376,7 +1376,7 @@ Let us consider edge *E1* and face *F2* that intersect at a 3D point:
 
 In this case the argument edge *E1* has no common parts with the face *F2* so the whole image of *E1* is in the result.
 
-@figure{/user_guides/boolean_operations/images/boolean_image020.png}
+@figure{/user_guides/boolean_operations/images/boolean_image020.png,"",230}
 
 * The result of *Cut21* operation is not defined because the dimension of the edge (1) is less than the dimension of the face (2).
 
@@ -1384,7 +1384,7 @@ In this case the argument edge *E1* has no common parts with the face *F2* so th
 
 Let us consider edge *E1* and face *F2* that have a common block:
 
-@figure{/user_guides/boolean_operations/images/boolean_image021.png}
+@figure{/user_guides/boolean_operations/images/boolean_image021.png,"",230}
 
 * The result of *Fuse* operation is not defined because the dimension of the edge (1) is not equal to the dimension of the face (2).
        
@@ -1392,13 +1392,13 @@ Let us consider edge *E1* and face *F2* that have a common block:
 
 In this case the argument edge *E1* has a common part with face *F2* so the corresponding part of the image of *E1* is in the result. The yellow square is not a part of the result. It only shows the place of *F2*.
 
-@figure{/user_guides/boolean_operations/images/boolean_image022.png}
+@figure{/user_guides/boolean_operations/images/boolean_image022.png,"",230}
 
 * The result of *Cut12* operation is a compound containing split part of the argument  *E1*, i.e. new edge *E11*.  
 
 In this case the argument edge *E1* has a common part with face *F2* so the corresponding part is not included into the result. The yellow square is not a part of the result. It only shows the place of F2.
 
-@figure{/user_guides/boolean_operations/images/boolean_image023.png}
+@figure{/user_guides/boolean_operations/images/boolean_image023.png,"",230}
 
 * The result of *Cut21* operation is not defined because the dimension of the edge (1) is less than the dimension of the face (2).
 
@@ -1406,7 +1406,7 @@ In this case the argument edge *E1* has a common part with face *F2* so the corr
 
 Let us consider edge *E1* and solid *S2* that intersect at a point:
 
-@figure{/user_guides/boolean_operations/images/boolean_image024.png}
+@figure{/user_guides/boolean_operations/images/boolean_image024.png,"",230}
 
 * The result of *Fuse* operation is not defined because the dimension of the edge (1) is not equal to the dimension of the solid (3).
        
@@ -1414,13 +1414,13 @@ Let us consider edge *E1* and solid *S2* that intersect at a point:
 
 In this case the argument edge *E1* has a common part with solid *S2* so the corresponding part of the image of *E1* is in the result. The yellow square is not a part of the result. It only shows the place of *S2*.
 
-@figure{/user_guides/boolean_operations/images/boolean_image025.png}
+@figure{/user_guides/boolean_operations/images/boolean_image025.png,"",230}
 
 * The result of *Cut12* operation is a compound containing split part of the argument *E1*, i.e. new edge *E11*.  
 
 In this case the argument edge *E1* has a common part with solid *S2* so the corresponding part is not included into the result. The yellow square is not a part of the result. It only shows the place of *S2*.
 
-@figure{/user_guides/boolean_operations/images/boolean_image071.png}
+@figure{/user_guides/boolean_operations/images/boolean_image071.png,"",230}
 
 * The result of *Cut21* operation is not defined because the dimension of the edge (1) is less than the dimension of the solid (3).
 
@@ -1428,7 +1428,7 @@ In this case the argument edge *E1* has a common part with solid *S2* so the cor
 
 Let us consider edge *E1* and solid *S2* that have a common block:
 
-@figure{/user_guides/boolean_operations/images/boolean_image072.png}
+@figure{/user_guides/boolean_operations/images/boolean_image072.png,"",230}
 
 * The result of *Fuse* operation is not defined because the dimension of the edge (1) is not equal to the dimension of the solid (3).
        
@@ -1436,13 +1436,13 @@ Let us consider edge *E1* and solid *S2* that have a common block:
 
 In this case the argument edge *E1* has a common part with solid *S2* so the corresponding part of the image of *E1* is in the result. The yellow square is not a part of the result. It only shows the place of *S2*.
 
-@figure{/user_guides/boolean_operations/images/boolean_image073.png}
+@figure{/user_guides/boolean_operations/images/boolean_image073.png,"",230}
 
 * The result of *Cut12* operation is a compound containing split part of the argument *E1*, i.e. new edge *E11*.  
 
 In this case the argument edge *E1* has a common part with solid *S2* so the corresponding part is not included into the result. The yellow square is not a part of the result. It only shows the place of *S2*.
 
-@figure{/user_guides/boolean_operations/images/boolean_image026.png}
+@figure{/user_guides/boolean_operations/images/boolean_image026.png,"",230}
 
 * The result of *Cut21* operation is not defined because the dimension of the edge (1) is less than the dimension of the solid (3).
 
@@ -1450,107 +1450,107 @@ In this case the argument edge *E1* has a common part with solid *S2* so the cor
 
 Let us consider two intersecting faces *F1* and *F2*:
 
-@figure{/user_guides/boolean_operations/images/boolean_image027.png}
+@figure{/user_guides/boolean_operations/images/boolean_image027.png,"",230}
 
 * The result of *Fuse* operation is a compound containing split parts of arguments  i.e. 2 new faces *F11* and *F21*. These faces have one shared edge *En1*.
 
-@figure{/user_guides/boolean_operations/images/boolean_image028.png}
+@figure{/user_guides/boolean_operations/images/boolean_image028.png,"",230}
 
 
 * The result of *Common* operation is an empty compound because the dimension (1) of the common part between *F1* and *F2* (edge) is less than the dimension of arguments (2).
 
 * The result of *Cut12* operation is a compound containing split part of the argument *F1*, i.e. new face *F11*.  
 
-@figure{/user_guides/boolean_operations/images/boolean_image029.png}
+@figure{/user_guides/boolean_operations/images/boolean_image029.png,"",230}
 
 * The result of *Cut21* operation is a compound containing split parts of the argument  *F2*, i.e. 1 new face *F21*.
 
-@figure{/user_guides/boolean_operations/images/boolean_image030.png}
+@figure{/user_guides/boolean_operations/images/boolean_image030.png,"",127}
        
 @subsubsection occt_algorithms_9_4_12  Case 12: Two faces that have a common part
 
 Let us consider two faces *F1* and *F2* that have a common part:
 
-@figure{/user_guides/boolean_operations/images/boolean_image031.png}
+@figure{/user_guides/boolean_operations/images/boolean_image031.png,"",230}
 
 * The result of *Fuse* operation is a compound containing split parts of arguments, i.e. 3 new faces: *F11*, *F12* and *F22*. These faces are shared through edges In this case: 
        * the argument edge *F1* has resulting split faces *F11* and *F12* (image of *F1*)
        * the argument face *F2* has resulting split faces *F12* and *F22* (image of *F2*)
        * the face *F12* is common for the images of *F1* and *F2*.
        
-@figure{/user_guides/boolean_operations/images/boolean_image032.png}
+@figure{/user_guides/boolean_operations/images/boolean_image032.png,"",230}
 
 * The result of *Common* operation is a compound containing split parts of arguments i.e. 1 new face *F12*. 
 In this case: face *F12* is common for the images of *F1* and *F2*.
 The common part between the faces (face) has the same dimension (2) as the dimension of the arguments (2).
 
 
-@figure{/user_guides/boolean_operations/images/boolean_image033.png}
+@figure{/user_guides/boolean_operations/images/boolean_image033.png,"",230}
 
 * The result of *Cut12* operation is a compound containing split part of the argument *F1*, i.e. new face *F11*.  
        
-@figure{/user_guides/boolean_operations/images/boolean_image034.png}
+@figure{/user_guides/boolean_operations/images/boolean_image034.png,"",230}
        
 * The result of *Cut21* operation is a compound containing split parts of the argument  *F2*, i.e. 1 new face *F21*.
 
-@figure{/user_guides/boolean_operations/images/boolean_image035.png}
+@figure{/user_guides/boolean_operations/images/boolean_image035.png,"",230}
 
 @subsubsection occt_algorithms_9_4_13  Case 13: Two faces that have a common edge
 
 Let us consider two faces *F1* and *F2* that have a common edge:
 
-@figure{/user_guides/boolean_operations/images/boolean_image036.png}
+@figure{/user_guides/boolean_operations/images/boolean_image036.png,"",230}
 
 * The result of *Fuse* operation is a compound containing split parts of arguments, i.e. 2 new faces: *F11* and *F21*. These faces have one shared edge *En1*.
        
-@figure{/user_guides/boolean_operations/images/boolean_image037.png}
+@figure{/user_guides/boolean_operations/images/boolean_image037.png,"",230}
 
 * The result of *Common* operation is an empty compound because the dimension (1) of the common part between *F1* and *F2* (edge)is less than the dimension of the arguments (2)
 
 * The result of *Cut12* operation is a compound containing split part of the argument *F1*, i.e. new face *F11*.  The vertices are shown just to clarify the fact that the edges are spitted.
        
-@figure{/user_guides/boolean_operations/images/boolean_image038.png}
+@figure{/user_guides/boolean_operations/images/boolean_image038.png,"",230}
        
 * The result of *Cut21* operation is a compound containing split parts of the argument  *F2*, i.e. 1 new face *F21*.  The vertices are shown just to clarify the fact that the edges are spitted.
 
-@figure{/user_guides/boolean_operations/images/boolean_image039.png}
+@figure{/user_guides/boolean_operations/images/boolean_image039.png,"",230}
 
 @subsubsection occt_algorithms_9_4_14  Case 14: Two faces that have a common vertex
 
 Let us consider two faces *F1* and *F2* that have a common vertex:
 
-@figure{/user_guides/boolean_operations/images/boolean_image040.png}
+@figure{/user_guides/boolean_operations/images/boolean_image040.png,"",230}
 
 * The result of *Fuse* operation is a compound containing split parts of arguments, i.e. 2 new faces: *F11* and *F21*. These faces have one shared vertex *Vn1*.
        
-@figure{/user_guides/boolean_operations/images/boolean_image041.png}
+@figure{/user_guides/boolean_operations/images/boolean_image041.png,"",230}
 
 * The result of *Common* operation is an empty compound because the dimension (0) of the common part between *F1* and *F2* (vertex) is less than the dimension of the arguments (2)
 
 * The result of *Cut12* operation is a compound containing split part of the argument *F1*, i.e. new face *F11*.  
        
-@figure{/user_guides/boolean_operations/images/boolean_image042.png}
+@figure{/user_guides/boolean_operations/images/boolean_image042.png,"",230}
        
 * The result of *Cut21* operation is a compound containing split parts of the argument  *F2*, i.e. 1 new face *F21*. 
 
-@figure{/user_guides/boolean_operations/images/boolean_image043.png}
+@figure{/user_guides/boolean_operations/images/boolean_image043.png,"",230}
 
 
 @subsubsection occt_algorithms_9_4_15  Case 15: A Face and a Solid that have an intersection curve.
 
 Let us consider face *F1* and solid *S2* that have an intersection curve:
 
-@figure{/user_guides/boolean_operations/images/boolean_image044.png}
+@figure{/user_guides/boolean_operations/images/boolean_image044.png,"",230}
 
 * The result of *Fuse* operation is not defined because the dimension of the face (2) is not equal to the dimension of the solid (3).
        
 * The result of *Common* operation is a compound containing split part of the argument  *F1*. In this case the argument face *F1* has a common part with solid *S2*, so the corresponding part of the image of *F1* is in the result. The yellow contour is not a part of the result. It only shows the place of *S2*.
 
-@figure{/user_guides/boolean_operations/images/boolean_image045.png}
+@figure{/user_guides/boolean_operations/images/boolean_image045.png,"",230}
 
 * The result of *Cut12* operation is a compound containing split part of the argument *F1*. In this case  argument face *F1* has a common part with solid *S2* so the corresponding part is not included into the result. The yellow contour is not a part of the result. It only shows the place of *S2*.
        
-@figure{/user_guides/boolean_operations/images/boolean_image046.png}
+@figure{/user_guides/boolean_operations/images/boolean_image046.png,"",230}
        
 * The result of *Cut21* operation is is not defined because the dimension of the face (2) is less than the dimension of the solid (3).
 
@@ -1558,17 +1558,17 @@ Let us consider face *F1* and solid *S2* that have an intersection curve:
 
 Let us consider face *F1* and solid *S2* that have overlapping faces:
 
-@figure{/user_guides/boolean_operations/images/boolean_image047.png}
+@figure{/user_guides/boolean_operations/images/boolean_image047.png,"",230}
 
 * The result of *Fuse* operation is not defined because the dimension of the face (2) is not equal to the dimension of the solid (3).
 
 * The result of *Common* operation is a compound containing split part of the argument  *F1*. In this case the argument face *F1* has a common part with solid *S2*, so the corresponding part of the image of *F1* is included in the result. The yellow contour is not a part of the result. It only shows the place of *S2*.
 
-@figure{/user_guides/boolean_operations/images/boolean_image048.png}
+@figure{/user_guides/boolean_operations/images/boolean_image048.png,"",230}
 
 * The result of *Cut12* operation is a compound containing split part of the argument *F1*. In this case  argument face *F1* has a common part with solid *S2* so the corresponding part is not included into the result. The yellow contour is not a part of the result. It only shows the place of *S2*.
        
-@figure{/user_guides/boolean_operations/images/boolean_image049.png}
+@figure{/user_guides/boolean_operations/images/boolean_image049.png,"",230}
        
 * The result of *Cut21* operation is is not defined because the dimension of the face (2) is less than the dimension of the solid (3).
 
@@ -1577,7 +1577,7 @@ Let us consider face *F1* and solid *S2* that have overlapping faces:
 
 Let us consider face *F1* and solid *S2* that have overlapping edges:
 
-@figure{/user_guides/boolean_operations/images/boolean_image050.png}
+@figure{/user_guides/boolean_operations/images/boolean_image050.png,"",230}
 
 * The result of *Fuse* operation is not defined because the dimension of the face (2) is not equal to the dimension of the solid (3).
        
@@ -1585,7 +1585,7 @@ Let us consider face *F1* and solid *S2* that have overlapping edges:
 
 * The result of *Cut12* operation is a compound containing split part of the argument *F1*. In this case  argument face *F1* has a common part with solid *S2* so the corresponding part is not included into the result. The yellow contour is not a part of the result. It only shows the place of *S2*.
        
-@figure{/user_guides/boolean_operations/images/boolean_image051.png}
+@figure{/user_guides/boolean_operations/images/boolean_image051.png,"",230}
        
 * The result of *Cut21* operation is is not defined because the dimension of the face (2) is less than the dimension of the solid (3).
 
@@ -1593,7 +1593,7 @@ Let us consider face *F1* and solid *S2* that have overlapping edges:
 
 Let us consider face *F1* and solid *S2* that have overlapping vertices:
 
-@figure{/user_guides/boolean_operations/images/boolean_image052.png}
+@figure{/user_guides/boolean_operations/images/boolean_image052.png,"",230}
 
 * The result of *Fuse* operation is not defined because the dimension of the face (2) is not equal to the dimension of the solid (3).
        
@@ -1601,7 +1601,7 @@ Let us consider face *F1* and solid *S2* that have overlapping vertices:
 
 * The result of *Cut12* operation is a compound containing split part of the argument *F1*. In this case  argument face *F1* has a common part with solid *S2* so the corresponding part is not included into the result. The yellow contour is not a part of the result. It only shows the place of *S2*.
        
-@figure{/user_guides/boolean_operations/images/boolean_image053.png}
+@figure{/user_guides/boolean_operations/images/boolean_image053.png,"",230}
        
 * The result of *Cut21* operation is is not defined because the dimension of the face (2) is less than the dimension of the solid (3).
 
@@ -1609,100 +1609,101 @@ Let us consider face *F1* and solid *S2* that have overlapping vertices:
 
 Let us consider two intersecting solids *S1* and *S2*:
 
-@figure{/user_guides/boolean_operations/images/boolean_image054.png}
+@figure{/user_guides/boolean_operations/images/boolean_image054.png,"",230}
 
 * The result of *Fuse* operation is a compound composed from the split parts of arguments *S11, S12* and *S22* <i>(Cut12, Common, Cut21)</i>. All inner webs are removed, so the result is one new solid *R*. 
        
-@figure{/user_guides/boolean_operations/images/boolean_image055.png}
+@figure{/user_guides/boolean_operations/images/boolean_image055.png,"",230}
        
 * The result of *Common* operation is a compound containing split parts of arguments i.e. one new solid *S12*.  In this case solid *S12* is common for the images of *S1* and *S2*. The common part between the solids (solid) has the same dimension (3) as the dimension of the arguments (3). The yellow contour is not a part of the result. It only shows the place of *S1*. 
 
-@figure{/user_guides/boolean_operations/images/boolean_image056.png}
+@figure{/user_guides/boolean_operations/images/boolean_image056.png,"",176}
 
 * The result of *Cut12* operation is a compound containing split part of the argument *S1*, i.e. 1 new solid *S11*.
        
-@figure{/user_guides/boolean_operations/images/boolean_image057.png}
+@figure{/user_guides/boolean_operations/images/boolean_image057.png,"",230}
        
 * The result of *Cut21* operation is a compound containing split part of the argument *S2*, i.e. 1 new solid *S21*.
 
-@figure{/user_guides/boolean_operations/images/boolean_image058.png}
+@figure{/user_guides/boolean_operations/images/boolean_image058.png,"",230}
 
 @subsubsection occt_algorithms_9_4_20  Case 20: Two Solids that have overlapping faces.
 
 Let us consider two solids *S1* and *S2* that have a common part on face:
 
-@figure{/user_guides/boolean_operations/images/boolean_image059.png}
+@figure{/user_guides/boolean_operations/images/boolean_image059.png,"",230}
 
 * The result of *Fuse* operation is a compound composed from the split parts of arguments *S11, S12* and *S22* <i>(Cut12, Common, Cut21)</i>. All inner webs are removed, so the result is one new solid *R*. 
        
-@figure{/user_guides/boolean_operations/images/boolean_image060.png}
+@figure{/user_guides/boolean_operations/images/boolean_image060.png,"",230}
        
 * The result of *Common* operation is an  empty compound because the dimension (2) of the common part between *S1* and *S2* (face) is less than the lower dimension of the arguments (3). 
 
 * The result of *Cut12* operation is a compound containing split part of the argument *S1*, i.e. 1 new solid *S11*.
        
-@figure{/user_guides/boolean_operations/images/boolean_image061.png}
+@figure{/user_guides/boolean_operations/images/boolean_image061.png,"",230}
        
 * The result of *Cut21* operation is a compound containing split part of the argument *S2*, i.e. 1 new solid *S21*.
-@figure{/user_guides/boolean_operations/images/boolean_image062.png}
+@figure{/user_guides/boolean_operations/images/boolean_image062.png,"",230}
 
 
 @subsubsection occt_algorithms_9_4_21  Case 21: Two Solids that have overlapping edges.
 
 Let us consider two solids *S1* and *S2* that have overlapping edges:
 
-@figure{/user_guides/boolean_operations/images/boolean_image063.png}
+@figure{/user_guides/boolean_operations/images/boolean_image063.png,"",230}
 
 * The result of *Fuse* operation is a compound composed from the split parts of arguments i.e. 2 new solids *S11* and *S21*. These solids have one shared edge *En1*.
        
-@figure{/user_guides/boolean_operations/images/boolean_image064.png}
+@figure{/user_guides/boolean_operations/images/boolean_image064.png,"",230}
        
 * The result of *Common* operation is an  empty compound because the dimension (1) of the common part between *S1* and *S2* (edge) is less than the lower dimension of the arguments (3). 
 
 * The result of *Cut12* operation is a compound containing split part of the argument *S1*. In this case 
 argument *S1* has a common part with solid *S2* so the corresponding part is not included into the result.
        
-@figure{/user_guides/boolean_operations/images/boolean_image065.png}
+@figure{/user_guides/boolean_operations/images/boolean_image065.png,"",230}
        
 * The result of *Cut21* operation is a compound containing split part of the argument *S2*. In this case 
 argument *S2* has a common part with solid *S1* so the corresponding part is not included into the result.
-@figure{/user_guides/boolean_operations/images/boolean_image066.png}
+
+@figure{/user_guides/boolean_operations/images/boolean_image066.png,"",230}
 
 @subsubsection occt_algorithms_9_4_22  Case 22: Two Solids that have overlapping vertices.
 
 Let us consider two solids *S1* and *S2* that have overlapping vertices:
 
-@figure{/user_guides/boolean_operations/images/boolean_image067.png}
+@figure{/user_guides/boolean_operations/images/boolean_image067.png,"",230}
 
 * The result of *Fuse* operation is a compound composed from the split parts of arguments i.e. 2 new solids *S11* and *S21*. These solids share *Vn1*.
        
-@figure{/user_guides/boolean_operations/images/boolean_image068.png}
+@figure{/user_guides/boolean_operations/images/boolean_image068.png,"",230}
        
 * The result of *Common* operation is an  empty compound because the dimension (0) of the common part between *S1* and *S2* (vertex) is less than the lower dimension of the arguments (3). 
 
 * The result of *Cut12* operation is a compound containing split part of the argument *S1*.
        
-@figure{/user_guides/boolean_operations/images/boolean_image069.png}
+@figure{/user_guides/boolean_operations/images/boolean_image069.png,"",230}
        
 * The result of *Cut21* operation is a  compound containing split part of the argument *S2*. 
 
-@figure{/user_guides/boolean_operations/images/boolean_image070.png}
+@figure{/user_guides/boolean_operations/images/boolean_image070.png,"",230}
 
 @subsubsection occt_algorithms_9_4_23  Case 23: A Shell and a Wire cut by a Solid.
 
 Let us consider Shell *Sh* and Wire *W* as the objects and Solid *S* as the tool:
 
-@figure{/user_guides/boolean_operations/images/boolean_image136.png}
+@figure{/user_guides/boolean_operations/images/boolean_image136.png,"",230}
 
 * The result of *Fuse* operation is not defined as the dimension of the arguments is not the same.
        
 * The result of *Common* operation is a compound containing the parts of the initial Shell and Wire common for the Solid. The new Shell and Wire are created from the objects.
 
-@figure{/user_guides/boolean_operations/images/boolean_image137.png}
+@figure{/user_guides/boolean_operations/images/boolean_image137.png,"",230}
 
 * The result of *Cut12* operation is a  compound containing new Shell and Wire split from the arguments *Sh* and *W*. In this case they have a common part with solid *S* so the corresponding part is not included into the result.
        
-@figure{/user_guides/boolean_operations/images/boolean_image138.png}
+@figure{/user_guides/boolean_operations/images/boolean_image138.png,"",230}
        
 * The result of *Cut21* operation is not defined as the objects have a lower dimension than the tool. 
 
@@ -1710,23 +1711,23 @@ Let us consider Shell *Sh* and Wire *W* as the objects and Solid *S* as the tool
 
 Let us consider two Wires that have overlapping edges, *W1* is the object and *W2* is the tool:
 
-@figure{/user_guides/boolean_operations/images/boolean_image139.png}
+@figure{/user_guides/boolean_operations/images/boolean_image139.png,"",230}
 
 * The result of *Fuse* operation is a compound containing two Wires, which share an overlapping edge. The new Wires are created from the objects:
 
-@figure{/user_guides/boolean_operations/images/boolean_image140.png}
+@figure{/user_guides/boolean_operations/images/boolean_image140.png,"",230}
        
 * The result of *Common* operation is a compound containing one Wire consisting of an overlapping edge. The new Wire is created from the objects:
 
-@figure{/user_guides/boolean_operations/images/boolean_image141.png}
+@figure{/user_guides/boolean_operations/images/boolean_image141.png,"",230}
 
 * The result of *Cut12* operation is a compound containing a wire split from object *W1*. Its common part with *W2* is not included into the result.
        
-@figure{/user_guides/boolean_operations/images/boolean_image142.png}
+@figure{/user_guides/boolean_operations/images/boolean_image142.png,"",230}
        
 * The result of *Cut21* operation is a compound containing a wire split from *W2*. Its common part with *W1* is not included into the result.
        
-@figure{/user_guides/boolean_operations/images/boolean_image143.png}
+@figure{/user_guides/boolean_operations/images/boolean_image143.png,"",230}
 
 
 @subsection occt_algorithms_9_5 Class BOPAlgo_BOP
@@ -1792,37 +1793,37 @@ The arguments of BOA are shapes in terms of *TopoDS_Shape*. The main requirement
 
 Let us consider two interfering vertices: *V1* and *V2*.
 
-@figure{/user_guides/boolean_operations/images/boolean_image080.png}
+@figure{/user_guides/boolean_operations/images/boolean_image080.png,"",131}
 
 The result of *Section* operation is the compound that contains a new vertex *V*.
 
-@figure{/user_guides/boolean_operations/images/boolean_image081.png}
+@figure{/user_guides/boolean_operations/images/boolean_image081.png,"",128}
 
 @subsubsection occt_algorithms_10a_3_2 Case 1: Case 2: A Vertex and an Edge
 
 Let us consider vertex *V1* and the edge *E2*, that intersect in a 3D point:
 
-@figure{/user_guides/boolean_operations/images/boolean_image082.png}
+@figure{/user_guides/boolean_operations/images/boolean_image082.png,"",230}
 
 The result of *Section* operation is the compound that contains vertex *V1*.
 
-@figure{/user_guides/boolean_operations/images/boolean_image083.png}
+@figure{/user_guides/boolean_operations/images/boolean_image083.png,"",230}
 
 @subsubsection occt_algorithms_10a_3_3 Case 1: Case 2: A Vertex and a Face
  
 Let us consider vertex *V1* and face *F2*, that intersect in a 3D point:
 
-@figure{/user_guides/boolean_operations/images/boolean_image084.png}
+@figure{/user_guides/boolean_operations/images/boolean_image084.png,"",230}
 
 The result of *Section* operation is the compound that contains vertex *V1*.
 
-@figure{/user_guides/boolean_operations/images/boolean_image085.png}
+@figure{/user_guides/boolean_operations/images/boolean_image085.png,"",230}
 
 @subsubsection occt_algorithms_10a_3_4 Case 4: A Vertex and a Solid
 
 Let us consider vertex *V1* and solid *Z2*. The vertex *V1* is inside the solid *Z2*.
 
-@figure{/user_guides/boolean_operations/images/boolean_image086.png}
+@figure{/user_guides/boolean_operations/images/boolean_image086.png,"",230}
  
 The result of *Section* operation is an empty compound.
 
@@ -1830,174 +1831,174 @@ The result of *Section* operation is an empty compound.
 
 Let us consider edges *E1* and *E2*, that intersect in a 3D point:
 
-@figure{/user_guides/boolean_operations/images/boolean_image087.png}
+@figure{/user_guides/boolean_operations/images/boolean_image087.png,"",230}
 
 The result of *Section* operation is the compound that contains a new vertex *Vnew*.
 
-@figure{/user_guides/boolean_operations/images/boolean_image088.png}
+@figure{/user_guides/boolean_operations/images/boolean_image088.png,"",230}
 
 @subsubsection occt_algorithms_10a_3_6 Case 6: Two edges having a common block
 
 Let us consider edges *E1* and *E2*, that have a common block:
 
-@figure{/user_guides/boolean_operations/images/boolean_image089.png}
+@figure{/user_guides/boolean_operations/images/boolean_image089.png,"",230}
  
 The result of *Section* operation is the compound that contains a new edge *Enew*.
 
-@figure{/user_guides/boolean_operations/images/boolean_image090.png}
+@figure{/user_guides/boolean_operations/images/boolean_image090.png,"",230}
 
 @subsubsection occt_algorithms_10a_3_7 Case 7: An Edge and a Face intersecting at a point
 
 Let us consider edge *E1* and face *F2*, that intersect at a 3D point:
  
-@figure{/user_guides/boolean_operations/images/boolean_image091.png}
+@figure{/user_guides/boolean_operations/images/boolean_image091.png,"",230}
 
 The result of *Section* operation is the compound that contains a new vertex *Vnew*.
 
-@figure{/user_guides/boolean_operations/images/boolean_image092.png}
+@figure{/user_guides/boolean_operations/images/boolean_image092.png,"",230}
  
 @subsubsection occt_algorithms_10a_3_8 Case 8: A Face and an Edge that have a common block
 
 Let us consider edge *E1* and face *F2*, that have a common block:
 
-@figure{/user_guides/boolean_operations/images/boolean_image093.png}
+@figure{/user_guides/boolean_operations/images/boolean_image093.png,"",230}
 
 The result of *Section* operation is the compound that contains new edge *Enew*. 
 
-@figure{/user_guides/boolean_operations/images/boolean_image094.png}
+@figure{/user_guides/boolean_operations/images/boolean_image094.png,"",230}
  
  
 @subsubsection occt_algorithms_10a_3_9 Case 9: An Edge and a Solid intersecting at a point
 
 Let us consider edge *E1* and solid *Z2*, that intersect at a point:
 
-@figure{/user_guides/boolean_operations/images/boolean_image095.png}
+@figure{/user_guides/boolean_operations/images/boolean_image095.png,"",230}
 
 The result of *Section* operation is the compound that contains a new vertex *Vnew*. 
 
-@figure{/user_guides/boolean_operations/images/boolean_image096.png}
+@figure{/user_guides/boolean_operations/images/boolean_image096.png,"",230}
 
 @subsubsection occt_algorithms_10a_3_10 Case 10: An Edge and a Solid that have a common block
 
 Let us consider edge *E1* and solid *Z2*, that have a common block at a face:
 
-@figure{/user_guides/boolean_operations/images/boolean_image097.png}
+@figure{/user_guides/boolean_operations/images/boolean_image097.png,"",230}
  
 The result of *Section* operation is the compound that contains a new edge *Enew*. 
 
-@figure{/user_guides/boolean_operations/images/boolean_image098.png}
+@figure{/user_guides/boolean_operations/images/boolean_image098.png,"",230}
  
 @subsubsection occt_algorithms_10a_3_11 Case 11: Two intersecting faces
 
 Let us consider two intersecting faces *F1* and *F2*:
  
-@figure{/user_guides/boolean_operations/images/boolean_image099.png}
+@figure{/user_guides/boolean_operations/images/boolean_image099.png,"",230}
 
 The result of *Section* operation is the compound that contains a new edge *Enew*. 
 
-@figure{/user_guides/boolean_operations/images/boolean_image100.png}
+@figure{/user_guides/boolean_operations/images/boolean_image100.png,"",230}
  
 @subsubsection occt_algorithms_10a_3_12 Case 12: Two faces that have a common part
 
 Let us consider two faces *F1* and *F2* that have a common part:
 
-@figure{/user_guides/boolean_operations/images/boolean_image133.png}
+@figure{/user_guides/boolean_operations/images/boolean_image133.png,"",230}
  
 The result of *Section* operation is the compound that contains 4 new edges.
 
-@figure{/user_guides/boolean_operations/images/boolean_image134.png}
+@figure{/user_guides/boolean_operations/images/boolean_image134.png,"",230}
 
 @subsubsection occt_algorithms_10a_3_13 Case 13: Two faces that have overlapping edges
 
 Let us consider two faces *F1* and *F2* that have a overlapping edges:
 
-@figure{/user_guides/boolean_operations/images/boolean_image101.png}
+@figure{/user_guides/boolean_operations/images/boolean_image101.png,"",230}
 
 The result of *Section* operation is the compound that contains a new edge *Enew*.
 
-@figure{/user_guides/boolean_operations/images/boolean_image102.png}
+@figure{/user_guides/boolean_operations/images/boolean_image102.png,"",230}
  
 @subsubsection occt_algorithms_10a_3_14 Case 14: Two faces that have overlapping vertices
 
 Let us consider two faces *F1* and *F2* that have overlapping vertices:
 
-@figure{/user_guides/boolean_operations/images/boolean_image103.png}
+@figure{/user_guides/boolean_operations/images/boolean_image103.png,"",230}
  
 The result of *Section* operation is the compound that contains a new vertex *Vnew*. 
  
-@figure{/user_guides/boolean_operations/images/boolean_image104.png}
+@figure{/user_guides/boolean_operations/images/boolean_image104.png,"",230}
  
 @subsubsection occt_algorithms_10a_3_15 Case 15: A Face and a Solid that have an intersection curve
 
 Let us consider face *F1* and solid *Z2* that have an intersection curve:
  
-@figure{/user_guides/boolean_operations/images/boolean_image105.png}
+@figure{/user_guides/boolean_operations/images/boolean_image105.png,"",230}
  
 The result of *Section* operation is the compound that contains new edges.
 
-@figure{/user_guides/boolean_operations/images/boolean_image106.png}
+@figure{/user_guides/boolean_operations/images/boolean_image106.png,"",230}
  
 @subsubsection occt_algorithms_10a_3_16 Case 16: A Face and a Solid that have overlapping faces.
 
 Let us consider face *F1* and solid *Z2* that have overlapping faces:
 
-@figure{/user_guides/boolean_operations/images/boolean_image107.png}
+@figure{/user_guides/boolean_operations/images/boolean_image107.png,"",230}
  
 The result of *Section* operation is the compound that contains new edges
  
-@figure{/user_guides/boolean_operations/images/boolean_image108.png}
+@figure{/user_guides/boolean_operations/images/boolean_image108.png,"",230}
  
 @subsubsection occt_algorithms_10a_3_17 Case 17: A Face and a Solid that have overlapping edges.
 
 Let us consider face *F1* and solid *Z2* that have a common part on edge:
 
-@figure{/user_guides/boolean_operations/images/boolean_image109.png}
+@figure{/user_guides/boolean_operations/images/boolean_image109.png,"",230}
 
 The result of *Section* operation is the compound that contains a new edge *Enew*.
 
-@figure{/user_guides/boolean_operations/images/boolean_image110.png}
+@figure{/user_guides/boolean_operations/images/boolean_image110.png,"",230}
  
 @subsubsection occt_algorithms_10a_3_18 Case 18: A Face and a Solid that have overlapping vertices.
 
 Let us consider face *F1* and solid *Z2* that have overlapping vertices:
 
-@figure{/user_guides/boolean_operations/images/boolean_image111.png}
+@figure{/user_guides/boolean_operations/images/boolean_image111.png,"",230}
   
 The result of *Section* operation is the compound that contains a new vertex *Vnew*.
  
-@figure{/user_guides/boolean_operations/images/boolean_image112.png}
+@figure{/user_guides/boolean_operations/images/boolean_image112.png,"",230}
 
 @subsubsection occt_algorithms_10a_3_19 Case 19: Two intersecting Solids
 
 Let us consider two intersecting solids *Z1* and *Z2*:
-@figure{/user_guides/boolean_operations/images/boolean_image113.png}
+@figure{/user_guides/boolean_operations/images/boolean_image113.png,"",230}
 
 The result of *Section* operation is the compound that contains new edges.
-@figure{/user_guides/boolean_operations/images/boolean_image114.png}
+@figure{/user_guides/boolean_operations/images/boolean_image114.png,"",230}
 
 @subsubsection occt_algorithms_10a_3_20 Case 20: Two Solids that have overlapping faces
 
 Let us consider two solids *Z1* and *Z2* that have a common part on face:
-@figure{/user_guides/boolean_operations/images/boolean_image115.png}
+@figure{/user_guides/boolean_operations/images/boolean_image115.png,"",230}
 
 The result of *Section* operation is the compound that contains new edges.
-@figure{/user_guides/boolean_operations/images/boolean_image116.png}
+@figure{/user_guides/boolean_operations/images/boolean_image116.png,"",230}
  
 @subsubsection occt_algorithms_10a_3_21 Case 21: Two Solids that have overlapping edges
 
 Let us consider two solids *Z1* and *Z2* that have overlapping edges:
-@figure{/user_guides/boolean_operations/images/boolean_image117.png}
+@figure{/user_guides/boolean_operations/images/boolean_image117.png,"",230}
  
 The result of *Section* operation is the compound that contains a new edge *Enew*.
-@figure{/user_guides/boolean_operations/images/boolean_image118.png}
+@figure{/user_guides/boolean_operations/images/boolean_image118.png,"",230}
 
 @subsubsection occt_algorithms_10a_3_22 Case 22: Two Solids that have overlapping vertices
 
 Let us consider two solids *Z1* and *Z2* that have overlapping vertices: 
-@figure{/user_guides/boolean_operations/images/boolean_image119.png}
+@figure{/user_guides/boolean_operations/images/boolean_image119.png,"",230}
 
 The result of *Section* operation is the compound that contains a new vertex *Vnew*.
-@figure{/user_guides/boolean_operations/images/boolean_image120.png}
+@figure{/user_guides/boolean_operations/images/boolean_image120.png,"",230}
 
 @subsection occt_algorithms_10a_4 Class BOPAlgo_Section
 
@@ -2084,8 +2085,8 @@ Creation of 9832 solids from sphere and set of 63 planes:
 
 <table align="center">
 <tr>
-  <td>@figure{/user_guides/boolean_operations/images/mkvolume_image001.png, "Arguments"}</td>
-  <td>@figure{/user_guides/boolean_operations/images/mkvolume_image002.png, "Results"}</td>
+  <td>@figure{/user_guides/boolean_operations/images/mkvolume_image001.png,"Arguments",200}</td>
+  <td>@figure{/user_guides/boolean_operations/images/mkvolume_image002.png,"Results",200}</td>
 </tr>
 </table>
 
@@ -2094,8 +2095,8 @@ Creating compartments on a ship defined by hull shell and a set of planes. The s
 
 <table align="center">
 <tr>
-  <td>@figure{/user_guides/boolean_operations/images/mkvolume_image003.png, "Arguments"}</td>
-  <td>@figure{/user_guides/boolean_operations/images/mkvolume_image004.png, "Results"}</td>
+  <td>@figure{/user_guides/boolean_operations/images/mkvolume_image003.png,"Arguments",200}</td>
+  <td>@figure{/user_guides/boolean_operations/images/mkvolume_image004.png,"Results",200}</td>
 </tr>
 </table>
 
@@ -2218,7 +2219,7 @@ plane p 0 0 20 1 0 0
 mkface f p -25 30 -17 17
 ~~~~
 
-@figure{/user_guides/boolean_operations/images/cells_algorithm_001.png, "Arguments"} 
+@figure{/user_guides/boolean_operations/images/cells_algorithm_001.png,"Arguments",160} 
 
 ~~~~
 bclearobjects
@@ -2235,7 +2236,7 @@ bcremoveall
 bcadd res c 1 s 1 f 1
 ~~~~
 
-@figure{/user_guides/boolean_operations/images/cells_algorithm_002.png, "The result of COMMON operation"} 
+@figure{/user_guides/boolean_operations/images/cells_algorithm_002.png,"The result of COMMON operation",126} 
 
 #### 2. Common between cylinder and face
 
@@ -2244,7 +2245,7 @@ bcremoveall
 bcadd res f 1 c 1
 ~~~~
 
-@figure{/user_guides/boolean_operations/images/cells_algorithm_003.png, "The result of COMMON operation between cylinder and face"} 
+@figure{/user_guides/boolean_operations/images/cells_algorithm_003.png,"The result of COMMON operation between cylinder and face",90} 
 
 #### 3. Common between cylinder and sphere
 
@@ -2253,7 +2254,7 @@ bcremoveall
 bcadd res c 1 s 1
 ~~~~
 
-@figure{/user_guides/boolean_operations/images/cells_algorithm_004.png, "The result of COMMON operation between cylinder and sphere"} 
+@figure{/user_guides/boolean_operations/images/cells_algorithm_004.png,"The result of COMMON operation between cylinder and sphere",120} 
 
 #### 4. Fuse of cylinder and sphere
 
@@ -2264,7 +2265,7 @@ bcadd res s 1 -m 1
 bcremoveint res
 ~~~~
 
-@figure{/user_guides/boolean_operations/images/cells_algorithm_005.png, "The result of FUSE operation between cylinder and sphere"} 
+@figure{/user_guides/boolean_operations/images/cells_algorithm_005.png,"The result of FUSE operation between cylinder and sphere",160} 
 
 #### 5. Parts of the face inside solids - FUSE(COMMON(f, c), COMMON(f, s))
 
@@ -2274,13 +2275,13 @@ bcadd res f 1 s 1 -m 1
 bcadd res f 1 c 1 -m 1
 ~~~~
 
-@figure{/user_guides/boolean_operations/images/cells_algorithm_006_1.png, "Parts of the face inside solids"} 
+@figure{/user_guides/boolean_operations/images/cells_algorithm_006_1.png,"Parts of the face inside solids",160} 
 
 ~~~~
 bcremoveint res
 ~~~~
 
-@figure{/user_guides/boolean_operations/images/cells_algorithm_006_2.png, "Unified parts of the face inside solids"} 
+@figure{/user_guides/boolean_operations/images/cells_algorithm_006_2.png,"Unified parts of the face inside solids",160} 
 
 #### 6. Part of the face outside solids
 
@@ -2289,7 +2290,7 @@ bcremoveall
 bcadd res f 1 c 0 s 0
 ~~~~
 
-@figure{/user_guides/boolean_operations/images/cells_algorithm_007.png, "Part of the face outside solids"} 
+@figure{/user_guides/boolean_operations/images/cells_algorithm_007.png,"Part of the face outside solids",160} 
 
 #### 7. Fuse operation (impossible using standard Boolean Fuse operation)
 
@@ -2301,7 +2302,7 @@ bcadd res f 1 c 0 s 0
 bcremoveint res
 ~~~~
 
-@figure{/user_guides/boolean_operations/images/cells_algorithm_008.png, "Fuse operation"} 
+@figure{/user_guides/boolean_operations/images/cells_algorithm_008.png,"Fuse operation",160} 
 
 
 These examples may last forever. To define any new operation, it is just necessary to define, which Cells should be taken and which should be avoided.
@@ -2350,43 +2351,43 @@ The argument should not be self-interfered, i.e. all sub-shapes of the argument
 #### Example 1: Compound of two edges
 The compound of two edges *E1* and *E2* is a self-interfered shape and cannot be used as the argument of the Algorithms.
 
-@figure{/user_guides/boolean_operations/images/operations_image036.svg, "Compound of two edges"}
+@figure{/user_guides/boolean_operations/images/operations_image036.svg,"Compound of two edges",230}
 
 #### Example 2: Self-interfered Edge
 The edge *E* is a self-interfered shape and cannot be used as an argument of the Algorithms.
 
-@figure{/user_guides/boolean_operations/images/operations_image037.svg, "Self-interfered Edge"}
+@figure{/user_guides/boolean_operations/images/operations_image037.svg,"Self-interfered Edge",140}
  
 #### Example 3: Self-interfered Face
 The face *F* is a self-interfered shape and cannot be used as an argument of the Algorithms.
 
-@figure{/user_guides/boolean_operations/images/operations_image038.svg, "Self-interfered Face"}
+@figure{/user_guides/boolean_operations/images/operations_image038.svg,"Self-interfered Face",230}
  
 ####   Example 4: Face of Revolution
 The face *F* has been obtained by revolution of edge *E* around line *L*.
 
-@figure{/user_guides/boolean_operations/images/operations_image039a.png, "Face of Revolution: Arguments"}
-@figure{/user_guides/boolean_operations/images/operations_image039b.png, "Face of Revolution: Result"}
+@figure{/user_guides/boolean_operations/images/operations_image039a.png,"Face of Revolution: Arguments",230}
+@figure{/user_guides/boolean_operations/images/operations_image039b.png,"Face of Revolution: Result",230}
 
 In spite of the fact that face *F* is valid (in terms of *BRepCheck_Analyzer*) it is a self-interfered shape and cannot be used as the argument of the Algorithms.
 
 @subsubsection occt_algorithms_10_1_4  Self-interferences due to tolerances
 #### Example 1: Non-closed Edge
 
-Let us consider edge *E* based on a non-closed circle. @figure{/user_guides/boolean_operations/images/operations_image040.png, "Edge based on a non-closed circle"}
+Let us consider edge *E* based on a non-closed circle. @figure{/user_guides/boolean_operations/images/operations_image040.png,"Edge based on a non-closed circle",230}
 
 The distance between the vertices of *E* is *D=0.69799*. The values of the tolerances *Tol(V1)=Tol(V2)=0.5*.
-@figure{/user_guides/boolean_operations/images/operations_image041.png,  "Distance and Tolerances"}
+@figure{/user_guides/boolean_operations/images/operations_image041.png,"Distance and Tolerances",230}
  
 In spite of the fact that the edge *E* is valid in terms of *BRepCheck_Analyzer*, it is a self-interfered shape because its vertices are interfered. Thus, edge *E* cannot be used as an argument of the Algorithms.
 
 #### Example 2: Solid containing an interfered vertex
 
-Let us consider solid *S* containing vertex V. @figure{/user_guides/boolean_operations/images/operations_image042.png,  "Solid containing an interfered vertex"}
+Let us consider solid *S* containing vertex V. @figure{/user_guides/boolean_operations/images/operations_image042.png,"Solid containing an interfered vertex",230}
 
 The value of  tolerance Tol(V)= 50.000075982061.
 
-@figure{/user_guides/boolean_operations/images/operations_image043.png,  "Tolerance"}
+@figure{/user_guides/boolean_operations/images/operations_image043.png,"Tolerance",230}
 
 In spite of the fact that solid *S* is valid in terms of *BRepCheck_Analyzer* it is a self-interfered shape because vertex *V* is interfered with a lot of sub-shapes from *S* without any topological connection with them. Thus solid *S* cannot be used as an argument of the Algorithms.
 
@@ -2396,21 +2397,21 @@ The parameterization of some surfaces (cylinder, cone, surface of revolution) ca
 ####   Example 1: Cylindrical surface
 The parameterization range for cylindrical surface is:
 
-@figure{/user_guides/boolean_operations/images/boolean_image135.png}
+@figure{/user_guides/boolean_operations/images/boolean_image135.png,"",230}
 
 The range of *U* coordinate is always restricted while the range of *V* coordinate is non-restricted.
 
 Let us consider a cylinder-based *Face 1* with radii *R=3* and *H=6*. 
 
-@figure{/user_guides/boolean_operations/images/operations_image044.png, "Face 1"}
+@figure{/user_guides/boolean_operations/images/operations_image044.png,"Face 1",230}
 
-@figure{/user_guides/boolean_operations/images/operations_image045.png, "P-Curves for Face 1"}
+@figure{/user_guides/boolean_operations/images/operations_image045.png,"P-Curves for Face 1",230}
 
 Let us also consider a cylinder-based *Face 2* with radii *R=3000* and *H=6000* (resulting from scaling Face 1 with scale factor *ScF=1000*). 
 
-@figure{/user_guides/boolean_operations/images/operations_image046.png, "Face 2"}
+@figure{/user_guides/boolean_operations/images/operations_image046.png,"Face 2",230}
 
-@figure{/user_guides/boolean_operations/images/operations_image047.png, "P-Curves for Face 2"}
+@figure{/user_guides/boolean_operations/images/operations_image047.png,"P-Curves for Face 2",230}
 
 Please, pay attention to the Zoom value of the Figures.
 
@@ -2423,7 +2424,7 @@ It is possible to create shapes that use sub-shapes of lower order to avoid gaps
 
 Let us consider the following example:
 
-@figure{/user_guides/boolean_operations/images/operations_image048.png, "Example"}
+@figure{/user_guides/boolean_operations/images/operations_image048.png,"Example",230}
 
 * Face *F* has two edges *E1* and *E2* and two vertices, the base plane is <i>{0,0,0, 0,0,1}</i>;
 * Edge *E1* is based on line <i>{0,0,0, 1,0,0}, Tol(E1) = 1.e-7; </i>
@@ -2444,7 +2445,7 @@ Let us consider the intersection between two edges:
 * *E1* is based on a line: <i>{0,-10,0, 1,0,0}, Tol(E1)=2.</i>
 * *E2* is based on a circle: <i>{0,0,0, 0,0,1}, R=10, Tol(E2)=2.</i>
 
-@figure{/user_guides/boolean_operations/images/operations_image049.png, "Intersecting Edges"}
+@figure{/user_guides/boolean_operations/images/operations_image049.png,"Intersecting Edges",320}
 
 The result of pure intersection between *E1* and *E2* is vertex *Vx {0,-10,0}*.
 
@@ -2464,7 +2465,7 @@ Let us consider two planar rectangular faces *F1* and *F2*.
 
 The intersection curve between the planes is curve *C12*. The curve produces a new intersection edge *EC12*. The edge goes through vertices *V1* and *V2* thanks to big tolerance values of vertices *Tol(V1)* and *Tol(V2)*. So, two straight edges *E12* and *EC12* go through two vertices, which is  impossible in this case.
 
-@figure{/user_guides/boolean_operations/images/operations_image050.svg, "Intersecting Faces"}
+@figure{/user_guides/boolean_operations/images/operations_image050.svg,"Intersecting Faces",320}
 
 
 The problem cannot be solved in general, because the length of *E12* can be infinite and the values of *Tol(V1)* and *Tol(V2)* theoretically can be infinite too.
@@ -2481,11 +2482,11 @@ Let us consider two edges *E1* and *E2*, which have common vertices *V1* and *V2
 
 *C1* practically coincides in 3D with *C2*. The value of deflection is *Dmax* (e.g. *Dmax=1.e<sup>-6</sup>*). 
 
-@figure{/user_guides/boolean_operations/images/operations_image051.svg, "Intersecting Edges"}
+@figure{/user_guides/boolean_operations/images/operations_image051.svg,"Intersecting Edges",420}
 
 The evident and prospective result should be the Common Block between *E1* and *E2*. However, the result of intersection differs. 
 
-@figure{/user_guides/boolean_operations/images/operations_image052.svg, "Result of Intersection"}
+@figure{/user_guides/boolean_operations/images/operations_image052.svg,"Result of Intersection",420}
 
 The result contains three new vertices *Vx1, Vx2* and *Vx3*, 8 new edges <i>(V1, Vx1, Vx2, Vx3, V2)</i> and no Common Blocks. This is correct due to the source data: *Tol(E1)=1.e<sup>-7</sup>, Tol(E2)=1.e<sup>-7</sup>* and <i>Dmax=1.e<sup>-6</sup></i>.
 
@@ -2495,7 +2496,7 @@ In this particular case the problem can be solved by several ways:
 
 The example can be extended from 1D (edges) to 2D (faces).
 
-@figure{/user_guides/boolean_operations/images/operations_image053.svg, "Intersecting Faces"}
+@figure{/user_guides/boolean_operations/images/operations_image053.svg,"Intersecting Faces",420}
 
 The comments and recommendations are the same as for 1D case above.
 
@@ -2505,7 +2506,7 @@ The comments and recommendations are the same as for 1D case above.
 
 Let us consider vertex *V1* and edge *E2*. 
 
-@figure{/user_guides/boolean_operations/images/operations_image054.svg, "Vertex and Edge"}
+@figure{/user_guides/boolean_operations/images/operations_image054.svg,"Vertex and Edge",171}
 
 Vertex *V1* interferes with vertices *V12* and *V22*.
 So vertex *V21* should interfere with vertex *V22*, which is impossible because vertices *V21* and *V22* are the vertices of edge *E2*, thus *V21* is not equal to *V22*.
@@ -2518,7 +2519,7 @@ In a particular case the problem can be solved by refinement of arguments, i.e.
   
 Let us consider vertex *V2* and wire consisting of edges *E11* and *E12*. 
 
-@figure{/user_guides/boolean_operations/images/operations_image055.svg, "Vertex and Wire"}
+@figure{/user_guides/boolean_operations/images/operations_image055.svg,"Vertex and Wire",200}
 
 The arguments themselves are not self-intersected.
 Vertex *V2* interferes with edges *E11* and *E12*. Thus, edge *E11* should interfere with edge *E22*, but it is impossible because edges *E11* and *E12* cannot interfere by the condition.
@@ -2550,13 +2551,13 @@ The following examples demonstrate the advantages of usage Fuzzy option operatio
 
 In this example the cylinder (shown in yellow and transparent) is subtracted from the box (shown in red). The cylinder is shifted by  5e<sup>-5</sup> relatively to the box along its axis (the distance between rear faces of the box and cylinder is 5e<sup>-5</sup>).
 
-@figure{/user_guides/boolean_operations/images/boolean_image121.png}
+@figure{/user_guides/boolean_operations/images/boolean_image121.png,"",240}
   
 The following results are obtained using Basic Operations and the Fuzzy ones with the fuzzy value 5e<sup>-5</sup>:
 
-@figure{/user_guides/boolean_operations/images/boolean_image122.png, "Result of CUT operation obtained with Basic Operations"}
+@figure{/user_guides/boolean_operations/images/boolean_image122.png,"Result of CUT operation obtained with Basic Operations",240}
 
-@figure{/user_guides/boolean_operations/images/boolean_image123.png, "Result of CUT operation obtained with Fuzzy Option"}
+@figure{/user_guides/boolean_operations/images/boolean_image123.png,"Result of CUT operation obtained with Fuzzy Option",240}
 
 In this example Fuzzy option allows eliminating a very thin part of the result shape produced by Basic algorithm due to misalignment of rear faces of the box and the cylinder. 
 
@@ -2564,13 +2565,13 @@ In this example Fuzzy option allows eliminating a very thin part of the result s
 
 In this example two boxes are fused. One of them has dimensions 10*10*10, and the other is 10*10.000001*10.000001 and adjacent to the first one. There is no gap in this case as the surfaces of the neighboring faces coincide, but one box is slightly greater than the other. 
 
-@figure{/user_guides/boolean_operations/images/boolean_image124.png}
+@figure{/user_guides/boolean_operations/images/boolean_image124.png,"",240}
 
 The following results are obtained using Basic Operations and the Fuzzy ones with the fuzzy value 1e<sup>-6</sup>: 
 
-@figure{/user_guides/boolean_operations/images/boolean_image125.png, "Result of CUT operation obtained with Basic Operations"}
+@figure{/user_guides/boolean_operations/images/boolean_image125.png,"Result of CUT operation obtained with Basic Operations",240}
 
-@figure{/user_guides/boolean_operations/images/boolean_image126.png, "Result of CUT operation obtained with Fuzzy Option"}
+@figure{/user_guides/boolean_operations/images/boolean_image126.png,"Result of CUT operation obtained with Fuzzy Option",240}
 
 In this example Fuzzy option allows eliminating an extremely narrow face in the result produced by Basic operation.
 
@@ -2578,13 +2579,13 @@ In this example Fuzzy option allows eliminating an extremely narrow face in the
 
 In this example the small planar face (shown in orange) is subtracted from the big one (shown in yellow). There is a gap 1e<sup>-5</sup> between the edges of these faces.
 
-@figure{/user_guides/boolean_operations/images/boolean_image127.png}
+@figure{/user_guides/boolean_operations/images/boolean_image127.png,"",240}
 
 The following results are obtained using Basic Operations and the Fuzzy ones with the fuzzy value 1e<sup>-5</sup>: 
 
-@figure{/user_guides/boolean_operations/images/boolean_image128.png, "Result of CUT operation obtained with Basic Operations"}
+@figure{/user_guides/boolean_operations/images/boolean_image128.png,"Result of CUT operation obtained with Basic Operations",240}
 
-@figure{/user_guides/boolean_operations/images/boolean_image129.png, "Result of CUT operation obtained with Fuzzy Option"}
+@figure{/user_guides/boolean_operations/images/boolean_image129.png,"Result of CUT operation obtained with Fuzzy Option",240}
 
 In this example Fuzzy options eliminated a pin-like protrusion resulting from the gap between edges of the argument faces.
 
@@ -2592,13 +2593,13 @@ In this example Fuzzy options eliminated a pin-like protrusion resulting from th
 
 In this example the small edge is subtracted from the big one. The edges are overlapping not precisely, with max deviation between them equal to 5.28004e<sup>-5</sup>. We will use 6e<sup>-5</sup> value for Fuzzy option.
 
-@figure{/user_guides/boolean_operations/images/boolean_image130.png}
+@figure{/user_guides/boolean_operations/images/boolean_image130.png,"",240}
 
 The following results are obtained using Basic Operations and the Fuzzy ones with the fuzzy value 6e<sup>-5</sup>: 
 
-@figure{/user_guides/boolean_operations/images/boolean_image131.png, "Result of CUT operation obtained with Basic Operations"}
+@figure{/user_guides/boolean_operations/images/boolean_image131.png,"Result of CUT operation obtained with Basic Operations",240}
 
-@figure{/user_guides/boolean_operations/images/boolean_image132.png, "Result of CUT operation obtained with Fuzzy Option"}
+@figure{/user_guides/boolean_operations/images/boolean_image132.png,"Result of CUT operation obtained with Fuzzy Option",240}
 
 This example stresses not only the validity, but also the performance issue. The usage of Fuzzy option with the appropriate value allows processing the case much faster than with the pure Basic operation. The performance gain for the case is 45 (Processor: Intel(R) Core(TM) i5-3450 CPU @ 3.10 GHz).
 
@@ -2608,13 +2609,17 @@ The Gluing operation is the option of the Basic Operations such as General Fuse,
 It has been designed to speed up the computation of the interferences among arguments of the operations on special cases, in which the arguments may be overlapping but do not have real intersections between their sub-shapes.
 
 This option cannot be used on the shapes having real intersections, like intersection vertex between edges, or intersection vertex between edge and a face or intersection line between faces:
-@figure{/user_guides/boolean_operations/images/glue_options_image002.png, "Intersecting faces"}
+
+@figure{/user_guides/boolean_operations/images/glue_options_image002.png,"Intersecting faces",240}
 
 There are two possibilities of overlapping shapes:
 * The shapes can be partially coinciding - the faces do not have intersection curves, but overlapping. The faces of such arguments will be split during the operation. The following picture illustrates such shapes:
-@figure{/user_guides/boolean_operations/images/glue_options_image001.png, "Partially coinciding faces"}
-* The shapes can be fully coinciding - there should be no partial overlapping of the faces, thus no intersection of type EDGE/FACE at all. In such cases the faces will not be split during the operation
-@figure{/user_guides/boolean_operations/images/glue_options_image003.png, "Full coinciding faces of the boxes"}
+
+@figure{/user_guides/boolean_operations/images/glue_options_image001.png,"Partially coinciding faces",240}
+
+* The shapes can be fully coinciding - there should be no partial overlapping of the faces, thus no intersection of type EDGE/FACE at all. In such cases the faces will not be split during the operation.
+
+@figure{/user_guides/boolean_operations/images/glue_options_image003.png,"Full coinciding faces of the boxes",240}
 
 Thus, there are two possible options - for full and partial coincidence of the shapes.
 
@@ -2657,12 +2662,14 @@ bglue 1
 
 @subsubsection occt_algorithms_11a_2_2 Examples
 #### Case1 - Fusing the 64 bspline boxes into one solid
-@figure{/user_guides/boolean_operations/images/glue_options_image004.png, "BSpline Boxes with partial coincidence"}
+
+@figure{/user_guides/boolean_operations/images/glue_options_image004.png,"BSpline Boxes with partial coincidence",240}
 
 Performance improvement from using the GlueShift option in this case is about 70 percent.
 
 #### Case2 - Sewing faces of the shape after reading from IGES
-@figure{/user_guides/boolean_operations/images/glue_options_image005.png, "Faces with coinciding but not shared edges"}
+
+@figure{/user_guides/boolean_operations/images/glue_options_image005.png,"Faces with coinciding but not shared edges",240}
 
 Performance improvement in this case is also about 70 percent.
 
@@ -2720,7 +2727,7 @@ The package consists of the following classes:
 * *BRepAlgoAPI_Cut* -- the class provides Boolean cut operation.
 * *BRepAlgoAPI_Section* -- the class provides Boolean section operation.
 
-@figure{/user_guides/boolean_operations/images/operations_image065.png, "Diagram of BRepAlgoAPI package"}
+@figure{/user_guides/boolean_operations/images/operations_image065.png,"Diagram of BRepAlgoAPI package",420}
 
 The detailed description of the classes can be found in the corresponding .hxx files. The examples are below in this chapter.
 
@@ -3369,3 +3376,4 @@ bglue 1
 # 4 means Section operation
 bapibop r 4
 ~~~~
+
index 5181fa5..eea53d2 100644 (file)
@@ -2785,7 +2785,7 @@ ivtkinit
 
 Creates a window for VTK viewer.
 
-@figure{/user_guides/draw_test_harness/images/draw_image001.png}
+@figure{/user_guides/draw_test_harness/images/draw_image001.png,"",225}
 
 @subsubsection occt_draw_4_6_2 ivtkdisplay
 
@@ -2804,7 +2804,8 @@ pcone c 5 0 10
 ivtkdisplay c
 ~~~~~
 
-@figure{/user_guides/draw_test_harness/images/draw_image002.png}
+@figure{/user_guides/draw_test_harness/images/draw_image002.png,"",261}
+
 
 @subsubsection occt_draw_4_6_3 ivtkerase
 
@@ -2862,8 +2863,8 @@ ivtkdisplay c
 ivtksetdispmode c 1
 ~~~~~
 
-@figure{/user_guides/draw_test_harness/images/draw_image003.png}
+@figure{/user_guides/draw_test_harness/images/draw_image003.png,"",262}
+
 @subsubsection occt_draw_4_6_6 ivtksetselmode
 
 Syntax:
@@ -2884,7 +2885,7 @@ ivtkdisplay a
 ivtksetselmode a 4 1
 ~~~~~
 
-@figure{/user_guides/draw_test_harness/images/draw_image004.png}
+@figure{/user_guides/draw_test_harness/images/draw_image004.png,"",291}
  
 @subsubsection occt_draw_4_6_7 ivtkmoveto
 
@@ -2957,18 +2958,16 @@ ivtkinit
 ivtkbgcolor 200 220 250
 ~~~~~
  
-@figure{/user_guides/draw_test_harness/images/draw_image005.png}
+@figure{/user_guides/draw_test_harness/images/draw_image005.png,"",196}
 
 ~~~~~
 ivtkbgcolor 10 30 80 255 255 255
 ~~~~~
 
-@figure{/user_guides/draw_test_harness/images/draw_image006.png}
-
+@figure{/user_guides/draw_test_harness/images/draw_image006.png,"",190}
 
 @section occt_draw_5 OCAF commands
 
-
 This chapter contains a set of commands for Open CASCADE Technology Application Framework (OCAF). 
 
 
index bfa3929..c9e6561 100644 (file)
@@ -111,7 +111,7 @@ Data types described in a package may include one or  more of the following data
   * Pointers to other object classes
 Inside a package, two data types cannot bear the same  name. 
 
-@figure{/user_guides/foundation_classes/images/foundation_classes_image003.png, "Contents of a package"}
+@figure{/user_guides/foundation_classes/images/foundation_classes_image003.png,"Contents of a package",420}
 
 **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. 
@@ -142,7 +142,7 @@ The data types in Open CASCADE Technology fall into two  categories:
   * Data types manipulated by handle (or reference)
   * Data types manipulated by value
   
-@figure{/user_guides/foundation_classes/images/foundation_classes_image004.png, "Manipulation of data types"}
+@figure{/user_guides/foundation_classes/images/foundation_classes_image004.png,"Manipulation of data types",420}
   
 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.
@@ -211,13 +211,13 @@ There are three categories of types which are manipulated by  value:
   * Types defined by classes not inheriting from *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. 
 
-@figure{/user_guides/foundation_classes/images/foundation_classes_image005.png, "Manipulation of a data type by value"}
+@figure{/user_guides/foundation_classes/images/foundation_classes_image005.png,"Manipulation of a data type by value",420}
 
 @subsubsection occt_fcug_2_1_3 Types manipulated by reference (handle)
 
 These are types defined by classes inheriting from the *Transient* class.
   
-@figure{/user_guides/foundation_classes/images/foundation_classes_image006.png, "Manipulation of a data type by reference"}
+@figure{/user_guides/foundation_classes/images/foundation_classes_image006.png,"Manipulation of a data type by reference",420}
   
 @subsubsection occt_fcug_2_1_4 When is it necessary to use a handle?
 
@@ -1910,3 +1910,4 @@ This is reasonable precision to pass to an Intersection process as  a limit of r
 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. 
 
+
index 7493d7c..bb25e14 100644 (file)
@@ -601,7 +601,7 @@ Class *ShapeFix_Wire* can increase the tolerance of a shape.  This class is used
 The following diagram illustrates the structure of calls in  reading IGES. 
 The highlighted classes produce OCCT geometry. 
 
-@figure{/user_guides/iges/images/iges_image003.png, "The structure of calls in reading IGES"}
+@figure{/user_guides/iges/images/iges_image003.png,"The structure of calls in reading IGES",420}
 
 @subsection occt_iges_2_8 Example
 
@@ -819,7 +819,7 @@ If the value of  parameter *write.precision.mode* is -1, 0 or 1, resolution is c
 The following diagram illustrates the class structure in  writing IGES. 
 The highlighted classes are intended to translate geometry. 
 
-@figure{/user_guides/iges/images/iges_image004.png, "The class structure in writing IGES"}
+@figure{/user_guides/iges/images/iges_image004.png,"The class structure in writing IGES",420}
       
 @subsection occt_iges_3_7 Example
 
@@ -1198,3 +1198,4 @@ IFSelect_ReturnStatus statw = writer.WriteFile (S);
 where S is OStream.  
 
 
+
index 999a693..de47550 100644 (file)
@@ -28,11 +28,11 @@ The Intersections component is used to compute intersections between 2D or 3D ge
 
 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. 
 
-@figure{/user_guides/modeling_algos/images/modeling_algos_image003.png, "Intersection and self-intersection of curves"}
+@figure{/user_guides/modeling_algos/images/modeling_algos_image003.png,"Intersection and self-intersection of curves",420}
 
 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.* 
 
-@figure{/user_guides/modeling_algos/images/modeling_algos_image004.png, "Intersection and tangent intersection"}
+@figure{/user_guides/modeling_algos/images/modeling_algos_image004.png,"Intersection and tangent intersection",420}
 
 The algorithm returns a  point in the case of an intersection and a segment in the case of tangent  intersection. 
 
@@ -211,7 +211,7 @@ The implemented algorithms are more complex than those provided by the Direct Co
 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:
 
-@figure{/user_guides/modeling_algos/images/modeling_algos_image058.png,"Example of a Tangency Constraint"}
+@figure{/user_guides/modeling_algos/images/modeling_algos_image058.png,"Example of a Tangency Constraint",360}
 
 This diagram clearly shows that there are 8 possible solutions.
 
@@ -264,18 +264,18 @@ The following analytic algorithms using value-handled entities for creation of 2
 #### 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 &quot;material&quot;). 
 
-@figure{/user_guides/modeling_algos/images/modeling_algos_image006.png, "Exterior/Interior of a Circle"}
+@figure{/user_guides/modeling_algos/images/modeling_algos_image006.png,"Exterior/Interior of a Circle",220}
 
 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: 
 
-@figure{/user_guides/modeling_algos/images/modeling_algos_image007.png, "Exterior/Interior of a Line and a Curve"}
+@figure{/user_guides/modeling_algos/images/modeling_algos_image007.png,"Exterior/Interior of a Line and a Curve",220}
 
 #### 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. 
 
-@figure{/user_guides/modeling_algos/images/modeling_algos_image008.png, "An Oriented Line"}
+@figure{/user_guides/modeling_algos/images/modeling_algos_image008.png,"An Oriented Line",220}
 
 
 #### Line tangent to two circles
@@ -284,7 +284,7 @@ The following four  diagrams illustrate four cases of using qualifiers in the cr
 
 **Example 1 Case 1** 
 
-@figure{/user_guides/modeling_algos/images/modeling_algos_image009.png, "Both circles outside"}
+@figure{/user_guides/modeling_algos/images/modeling_algos_image009.png,"Both circles outside",220}
 
 Constraints: 
 Tangent and Exterior to  C1. 
@@ -301,7 +301,7 @@ GccAna_Lin2d2Tan
 
 **Example 1 Case 2** 
 
-@figure{/user_guides/modeling_algos/images/modeling_algos_image010.png, "Both circles enclosed"}
+@figure{/user_guides/modeling_algos/images/modeling_algos_image010.png,"Both circles enclosed",220}
 
 Constraints: 
 Tangent and Including  C1. 
@@ -318,7 +318,7 @@ GccAna_Lin2d2Tan
 
 **Example  1 Case 3**
  
-@figure{/user_guides/modeling_algos/images/modeling_algos_image011.png, "C1 enclosed, C2 outside"}
+@figure{/user_guides/modeling_algos/images/modeling_algos_image011.png,"C1 enclosed and C2 outside",220}
 
 Constraints: 
 Tangent and Including C1. 
@@ -334,7 +334,7 @@ GccAna_Lin2d2Tan
 
 **Example 1 Case 4** 
 
-@figure{/user_guides/modeling_algos/images/modeling_algos_image012.png, "C1 outside, C2 enclosed"}
+@figure{/user_guides/modeling_algos/images/modeling_algos_image012.png,"C1 outside and C2 enclosed",220}
 Constraints: 
 Tangent and Exterior to  C1. 
 Tangent and Including  C2. 
@@ -349,7 +349,7 @@ GccAna_Lin2d2Tan
 
 **Example 1 Case 5** 
 
-@figure{/user_guides/modeling_algos/images/modeling_algos_image013.png, "With no qualifiers specified"}
+@figure{/user_guides/modeling_algos/images/modeling_algos_image013.png,"Without qualifiers",220}
 
 Constraints: 
 Tangent and Undefined  with respect to C1. 
@@ -367,7 +367,7 @@ GccAna_Lin2d2Tan
 The following four  diagrams show the four cases in using qualifiers in the creation of a circle. 
 
 **Example 2 Case 1** 
-@figure{/user_guides/modeling_algos/images/modeling_algos_image014.png, "Both solutions outside"}
+@figure{/user_guides/modeling_algos/images/modeling_algos_image014.png,"Both solutions outside",220}
 
 Constraints: 
 Tangent and Exterior to  C1. 
@@ -382,7 +382,7 @@ GccAna_Circ2d2TanRad
 
 **Example 2 Case 2** 
 
-@figure{/user_guides/modeling_algos/images/modeling_algos_image015.png, "C2 encompasses C1"}
+@figure{/user_guides/modeling_algos/images/modeling_algos_image015.png,"C2 encompasses C1",220}
 
 Constraints: 
 Tangent and Exterior to  C1. 
@@ -396,7 +396,7 @@ GccAna_Circ2d2TanRad
 ~~~~~
 
 **Example  2 Case 3**
-@figure{/user_guides/modeling_algos/images/modeling_algos_image016.png, "Solutions enclose C2"}
+@figure{/user_guides/modeling_algos/images/modeling_algos_image016.png,"Solutions enclose C2",220}
 
 Constraints: 
 Tangent and Exterior to  C1. 
@@ -410,7 +410,7 @@ GccAna_Circ2d2TanRad
 ~~~~~
                
 **Example 2 Case 4**
-@figure{/user_guides/modeling_algos/images/modeling_algos_image017.png, "Solutions enclose C1"}
+@figure{/user_guides/modeling_algos/images/modeling_algos_image017.png,"Solutions enclose C1",220}
 
 Constraints: 
 Tangent and Enclosing  C1. 
@@ -558,7 +558,7 @@ This is done by the class *GeomFill_ConstrainedFilling*, which allows filling a
 
 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.
 
-@figure{/user_guides/modeling_algos/images/modeling_algos_image059.png,"Intersecting filleted edges with differing radiuses"}
+@figure{/user_guides/modeling_algos/images/modeling_algos_image059.png,"Intersecting filleted edges with differing radiuses",220}
 
 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.
 
@@ -578,7 +578,7 @@ The enumerations *FillingStyle* specify the styles used to build the surface. Th
   * *Coons* -- a rounded style with less depth than *Curved*
   * *Curved* -- the style with the most rounded patches.
 
-@figure{/user_guides/modeling_algos/images/modeling_algos_image018.png, "Intersecting filleted edges with different radii leave a gap, is filled by a surface"}
+@figure{/user_guides/modeling_algos/images/modeling_algos_image018.png,"Intersecting filleted edges with different radii leave a gap filled by a surface",274}
 
 @subsubsection occt_modalg_2_5_5 Plate surfaces
 
@@ -590,7 +590,7 @@ curve constraints and the point constraint respectively. The resulting surface c
 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.
 
-@figure{/user_guides/modeling_algos/images/modeling_algos_image061.png,"Surface generated from two curves and a point"}
+@figure{/user_guides/modeling_algos/images/modeling_algos_image061.png,"Surface generated from two curves and a point",360}
 
 The package *GeomPlate*   provides the following services for creating surfaces respecting curve and  point constraints: 
 
@@ -616,7 +616,7 @@ The class *Surface* allows describing the characteristics of plate surface objec
 
 The class *MakeApprox* allows converting a *GeomPlate* surface into a *Geom_BSplineSurface*. 
 
-@figure{/user_guides/modeling_algos/images/modeling_algos_image060.png,"Surface generated from four curves and a point"}
+@figure{/user_guides/modeling_algos/images/modeling_algos_image060.png,"Surface generated from four curves and a point",360}
 
 Let us create a Plate surface  and approximate it from a polyline as a curve constraint and a point constraint 
 
@@ -685,7 +685,7 @@ Projections provide for computing the following:
 
 *Geom2dAPI_ProjectPointOnCurve*  allows calculation of all normals projected from a point (*gp_Pnt2d*)  onto a geometric curve (*Geom2d_Curve*). The calculation may be restricted  to a given domain. 
 
-@figure{/user_guides/modeling_algos/images/modeling_algos_image020.png, "Normals from a point to a curve"}
+@figure{/user_guides/modeling_algos/images/modeling_algos_image020.png,"Normals from a point to a curve",320}
 
 The  curve does not have to be a *Geom2d_TrimmedCurve*. The algorithm will function with any class inheriting *Geom2d_Curve*. 
 
@@ -919,7 +919,7 @@ Extrema_ExtPC& TheExtrema = Projector.Extrema();
 
 The class *GeomAPI_ProjectPointOnSurf*  allows calculation of all normals  projected from a point from *gp_Pnt* onto a geometric surface from *Geom_Surface*. 
 
-@figure{/user_guides/modeling_algos/images/modeling_algos_image021.png, "Projection of normals from a point to a surface"}
+@figure{/user_guides/modeling_algos/images/modeling_algos_image021.png,"Projection of normals from a point to a surface",360}
 
 Note that the  surface does not have to be of *Geom_RectangularTrimmedSurface* type.  
 The algorithm  will function with any class inheriting *Geom_Surface*.
@@ -1070,8 +1070,8 @@ It is possible to create the planar faces from the arbitrary set of planar edges
 This feature might be useful if you need for instance to restore the shape from the wireframe model:
 <table align="center">
 <tr>
-  <td>@figure{/user_guides/modeling_algos/images/modeling_algos_image062.png, "Wireframe model"}</td>
-  <td>@figure{/user_guides/modeling_algos/images/modeling_algos_image063.png, "Faces of the model"}</td>
+  <td>@figure{/user_guides/modeling_algos/images/modeling_algos_image062.png,"Wireframe model",160}</td>
+  <td>@figure{/user_guides/modeling_algos/images/modeling_algos_image063.png,"Faces of the model",160}</td>
 </tr>
 </table>
 
@@ -1109,8 +1109,8 @@ The wires located in the same plane and completely included into other wires wil
 
 <table align="center">
 <tr>
-  <td>@figure{/user_guides/modeling_algos/images/modeling_algos_image064.png, "Wireframe model"}</td>
-  <td>@figure{/user_guides/modeling_algos/images/modeling_algos_image065.png, "Two faces (red face has a hole)"}</td>
+  <td>@figure{/user_guides/modeling_algos/images/modeling_algos_image064.png,"Wireframe model",160}</td>
+  <td>@figure{/user_guides/modeling_algos/images/modeling_algos_image065.png,"Two faces (red face has a hole)",160}</td>
 </tr>
 </table>
 
@@ -1146,9 +1146,9 @@ The following methods allow building PCurves of edges on faces:
 The following methods allow checking the validity of the shapes:
  * *BOPTools_AlgoTools::IsMicroEdge* detects the small edges;
  * *BOPTools_AlgoTools::ComputeTolerance* computes the correct tolerance of the edge on the face;
- * *BOPTools_AlgoTools::CorrectShapeTolerances* and *BOPTools_AlgoTools::CorrectTolerances* allows correcting the tolerances of the sub-shapes.
+ * *BOPTools_AlgoTools::CorrectShapeTolerances* and *BOPTools_AlgoTools::CorrectTolerances* allow correcting the tolerances of the sub-shapes.
  * *BRepLib::FindValidRange* finds a range of 3d curve of the edge not covered by tolerance spheres of vertices.
-
 @subsection occt_modalg_2_topo_tools_7 Taking a point inside the face
 
 The following methods allow taking a point located inside the face:
@@ -1323,7 +1323,7 @@ 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. 
 
-@figure{/user_guides/modeling_algos/images/modeling_algos_image022.png, "Basic Edge Construction"}
+@figure{/user_guides/modeling_algos/images/modeling_algos_image022.png,"Basic Edge Construction",220}
 
 The following rules  apply to the arguments: 
 
@@ -1349,7 +1349,7 @@ The following rules  apply to the arguments:
 
 The figure below  illustrates two special cases, a semi-infinite edge and an edge on a periodic  curve. 
 
-@figure{/user_guides/modeling_algos/images/modeling_algos_image023.png, "Infinite and Periodic Edges"}
+@figure{/user_guides/modeling_algos/images/modeling_algos_image023.png,"Infinite and Periodic Edges",220}
 
 @subsubsection occt_modalg_3_2_2 Supplementary edge construction methods
 
@@ -1424,7 +1424,7 @@ The *Error* method  returns a term of the *BRepBuilderAPI_EdgeError* enumeration
 
 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. 
 
-@figure{/user_guides/modeling_algos/images/modeling_algos_image024.png, "Creating a Wire"}
+@figure{/user_guides/modeling_algos/images/modeling_algos_image024.png,"Creating a Wire",360}
 
 ~~~~~
 #include <BRepBuilderAPI_MakeEdge.hxx> 
@@ -1553,7 +1553,7 @@ Standard_Real umin,umax,vmin,vmax; // parameters
 TopoDS_Face F =  BRepBuilderAPI_MakeFace(S,umin,umax,vmin,vmax); 
 ~~~~~
 
-@figure{/user_guides/modeling_algos/images/modeling_algos_image025.png, "Basic Face Construction"}
+@figure{/user_guides/modeling_algos/images/modeling_algos_image025.png,"Basic Face Construction",360}
 
 To make a face from the  natural boundary of a surface, the parameters are not required: 
 
@@ -1771,7 +1771,7 @@ TopoDS_Solid theBox = BRepPrimAPI_MakeBox(10.,20.,30.);
 
 The four methods to build a box are shown in the figure: 
 
-@figure{/user_guides/modeling_algos/images/modeling_algos_image026.png, "Making Boxes"}
+@figure{/user_guides/modeling_algos/images/modeling_algos_image026.png,"Making Boxes",420}
 
 @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. 
@@ -1781,7 +1781,7 @@ The following figure  shows two ways to build wedges. One is to add a dimension
 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*. 
 
-@figure{/user_guides/modeling_algos/images/modeling_algos_image027.png, "Making Wedges"}
+@figure{/user_guides/modeling_algos/images/modeling_algos_image027.png,"Making Wedges",420}
 
 @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. 
@@ -1794,7 +1794,7 @@ The particular  constructions of these primitives are described, but they all ha
 
 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. 
 
-@figure{/user_guides/modeling_algos/images/modeling_algos_image028.png, "MakeOneAxis  arguments"}
+@figure{/user_guides/modeling_algos/images/modeling_algos_image028.png,"MakeOneAxis arguments",360}
 
 @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: 
@@ -1813,7 +1813,7 @@ axes.Translate(gp_Vec(X,Y,Z));
 TopoDS_Face F = 
 BRepPrimAPI_MakeCylinder(axes,R,DY,PI/2.); 
 ~~~~~
-@figure{/user_guides/modeling_algos/images/modeling_algos_image029.png, "Cylinder"}
+@figure{/user_guides/modeling_algos/images/modeling_algos_image029.png,"Cylinder",360}
 
 @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: 
@@ -1828,7 +1828,7 @@ Standard_Real R1 = 30, R2 = 10, H = 15;
 TopoDS_Solid S = BRepPrimAPI_MakeCone(R1,R2,H); 
 ~~~~~
 
-@figure{/user_guides/modeling_algos/images/modeling_algos_image030.png, "Cone"}
+@figure{/user_guides/modeling_algos/images/modeling_algos_image030.png,"Cone",360}
 
 @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: 
@@ -1851,7 +1851,7 @@ TopoDS_Solid S4 = BRepPrimAPI_MakeSphere(R,a1,a2,ang);
 
 Note that we could  equally well choose to create Shells instead of Solids. 
 
-@figure{/user_guides/modeling_algos/images/modeling_algos_image031.png, "Examples of  Spheres"}
+@figure{/user_guides/modeling_algos/images/modeling_algos_image031.png,"Examples of  Spheres",420}
 
 
 @subsubsection occt_modalg_4_1_7 Torus
@@ -1862,7 +1862,7 @@ Note that we could  equally well choose to create Shells instead of Solids.
   * 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.
 
-@figure{/user_guides/modeling_algos/images/modeling_algos_image032.png, "Examples of Tori"}
+@figure{/user_guides/modeling_algos/images/modeling_algos_image032.png,"Examples of Tori",420}
 
 The following code  builds four toroidal shells from two radii and three angles. 
 
@@ -1902,7 +1902,7 @@ Sweeps are the objects  you obtain by sweeping a **profile** along a **path**. T
 
 It is forbidden to sweep  Solids and Composite Solids. A Compound generates a Compound with the sweep of  all its elements. 
 
-@figure{/user_guides/modeling_algos/images/modeling_algos_image033.png, "Generating a  sweep"}
+@figure{/user_guides/modeling_algos/images/modeling_algos_image033.png,"Generating a  sweep",360}
 
 *BRepPrimAPI_MakeSweep class* is a deferred class used as a root of the the following sweep classes:
 * *BRepPrimAPI_MakePrism* -- produces a linear sweep
@@ -1932,7 +1932,7 @@ TopoDS_Solid P3 =  BRepPrimAPI_MakePrism(F,direc,Standard_False);
 // semi-infinite 
 ~~~~~
 
-@figure{/user_guides/modeling_algos/images/modeling_algos_image034.png, "Finite, infinite, and semi-infinite prisms"}
+@figure{/user_guides/modeling_algos/images/modeling_algos_image034.png,"Finite, infinite, and semi-infinite prisms",420}
 
 @subsubsection occt_modalg_4_2_3 Rotational Sweep 
 *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. 
@@ -1948,7 +1948,7 @@ TopoDS_Solid R1 = BRepPrimAPI_MakeRevol(F,axis);
 TopoDS_Solid R2 = BRepPrimAPI_MakeRevol(F,axis,ang); 
 ~~~~~
 
-@figure{/user_guides/modeling_algos/images/modeling_algos_image035.png, "Full and partial  rotation"}
+@figure{/user_guides/modeling_algos/images/modeling_algos_image035.png,"Full and partial  rotation",420}
 
 @section occt_modalg_5 Boolean  Operations
 
@@ -1960,7 +1960,7 @@ Boolean operations are  used to create new shapes from the combinations of two s
 | Common |  all points in S1 and S2 |
 | Cut S1 by S2| all points in S1 and not in S2 | 
 
-@figure{/user_guides/modeling_algos/images/modeling_algos_image036.png, "Boolean Operations"}
+@figure{/user_guides/modeling_algos/images/modeling_algos_image036.png,"Boolean Operations",420}
 
 From the viewpoint of Topology these are topological operations followed by blending (putting fillets onto edges created after the topological operation).
 
@@ -2011,7 +2011,7 @@ TopoDS_Shape S = BRepAlgoAPI_Cut(A,B);
 
 *BRepAlgoAPI_Section* performs the section, described as a *TopoDS_Compound* made of *TopoDS_Edge*. 
 
-@figure{/user_guides/modeling_algos/images/modeling_algos_image037.png, "Section  operation"}
+@figure{/user_guides/modeling_algos/images/modeling_algos_image037.png,"Section  operation",220}
 
 ~~~~~
 TopoDS_Shape A = ...,  TopoDS_ShapeB = ...; 
@@ -2039,7 +2039,7 @@ To produce a fillet, it is necessary to define the filleted shape at the constru
 
 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. 
 
-@figure{/user_guides/modeling_algos/images/modeling_algos_image038.png, "Filleting two edges using radii r1 and  r2."}
+@figure{/user_guides/modeling_algos/images/modeling_algos_image038.png,"Filleting two edges using radii r1 and  r2.",360}
 
 In the following example  a filleted box with dimensions a,b,c and radius r is created. 
 
@@ -2073,7 +2073,7 @@ TopoDS_Shape FilletedBox(const Standard_Real a,
        } 
 ~~~~~
 
-@figure{/user_guides/modeling_algos/images/modeling_algos_image039.png, "Fillet with constant radius"}
+@figure{/user_guides/modeling_algos/images/modeling_algos_image039.png,"Fillet with constant radius",360}
 
 #### Changing radius
 
@@ -2101,7 +2101,7 @@ void CSampleTopologicalOperationsDoc::OnEvolvedblend1()
 } 
 ~~~~~
 
-@figure{/user_guides/modeling_algos/images/modeling_algos_image040.png, "Fillet with changing radius"}
+@figure{/user_guides/modeling_algos/images/modeling_algos_image040.png,"Fillet with changing radius",360}
  
 @subsection occt_modalg_6_1_2 Chamfer
 
@@ -2116,7 +2116,7 @@ Add(dist,  E, F)
 Add(d1,  d2, E, F) with d1 on the face F. 
 ~~~~~
 
-@figure{/user_guides/modeling_algos/images/modeling_algos_image041.png, "Chamfer"}
+@figure{/user_guides/modeling_algos/images/modeling_algos_image041.png,"Chamfer",360}
 
 @subsection occt_modalg_6_1_3 Fillet on a planar face
 
@@ -2239,7 +2239,7 @@ if (SolidMaker.IsDone())
   Result = SolidMaker.Shape();
 ~~~~~
 
-@figure{/user_guides/modeling_algos/images/modeling_algos_image042.png, "Shelling"}
+@figure{/user_guides/modeling_algos/images/modeling_algos_image042.png,"Shelling",420}
 
 Also it is possible to create solid between shell, offset shell. This functionality can be called using *BRepOffsetAPI_MakeThickSolid::MakeThickSolidBySimple* method. The code below shows usage example:
 
@@ -2300,7 +2300,7 @@ else {
 } 
 ~~~~~
 
-@figure{/user_guides/modeling_algos/images/modeling_algos_image043.png, "DraftAngle"}
+@figure{/user_guides/modeling_algos/images/modeling_algos_image043.png,"DraftAngle",420}
 
 @subsection occt_modalg_7_4 Pipe  Constructor
 
@@ -2314,7 +2314,7 @@ TopoDS_Shape Profile = ...;
 TopoDS_Shape Pipe =  BRepOffsetAPI_MakePipe(Spine,Profile); 
 ~~~~~
 
-@figure{/user_guides/modeling_algos/images/modeling_algos_image044.png, "Example of a Pipe"}
+@figure{/user_guides/modeling_algos/images/modeling_algos_image044.png,"Example of a Pipe",320}
 
 @subsection occt_modalg_7_5 Evolved Solid
 
@@ -2345,7 +2345,7 @@ BRepOffsetAPI_MakeEvolved(Spine,Profile);
 
 Sewing allows creation of connected topology (shells and wires) from a set of separate topological elements (faces and edges). For example, Sewing can be used to create of shell from a compound of separate faces. 
 
-@figure{/user_guides/modeling_algos/images/modeling_algos_image045.png, "Shapes with partially shared edges"}
+@figure{/user_guides/modeling_algos/images/modeling_algos_image045.png,"Shapes with partially shared edges",320}
 
 It is important to distinguish between sewing and other procedures, which modify the geometry, such as filling holes or gaps, gluing, bending curves and surfaces, etc.
 
@@ -2531,9 +2531,9 @@ if (thePrism.IsDone()) {
 } 
 ~~~~~
 
-@figure{/user_guides/modeling_algos/images/modeling_algos_image047.png, "Fusion with MakePrism"}
+@figure{/user_guides/modeling_algos/images/modeling_algos_image047.png,"Fusion with MakePrism",320}
 
-@figure{/user_guides/modeling_algos/images/modeling_algos_image048.png, "Creating a  prism between two faces with Perform(From, Until)"}
+@figure{/user_guides/modeling_algos/images/modeling_algos_image048.png,"Creating a prism between two faces with Perform()",320}
 
 @subsubsection occt_modalg_9_1_2 Draft Prism
 
@@ -2586,7 +2586,7 @@ MKDP.Perform(200);
 TopoDS_Shape res1 = MKDP.Shape(); 
 ~~~~~
 
-@figure{/user_guides/modeling_algos/images/modeling_algos_image049.png, "A tapered prism"}
+@figure{/user_guides/modeling_algos/images/modeling_algos_image049.png,"A tapered prism",320}
 
 @subsubsection occt_modalg_9_1_3 Revolution
 
@@ -2696,7 +2696,7 @@ MKPipe.Perform();
 TopoDS_Shape res1 = MKPipe.Shape(); 
 ~~~~~
 
-@figure{/user_guides/modeling_algos/images/modeling_algos_image050.png, "Pipe depression"}
+@figure{/user_guides/modeling_algos/images/modeling_algos_image050.png,"Pipe depression",240}
 
 @subsection occt_modalg_9_2 Mechanical Features
 
@@ -2756,7 +2756,7 @@ aform.Perform();
 TopoDS_Shape res = aform.Shape(); 
 ~~~~~
 
-@figure{/user_guides/modeling_algos/images/modeling_algos_image051.png, "Creating a rib"}
+@figure{/user_guides/modeling_algos/images/modeling_algos_image051.png,"Creating a rib",240}
 
 @subsubsection occt_modalg_9_2_3 Gluer
 
@@ -2840,13 +2840,13 @@ However, there some restrictions in HLR use:
   * Infinite faces or lines are not processed.
 
   
-@figure{/user_guides/modeling_algos/images/modeling_algos_image052.png, "Sharp, smooth and sewn edges  in a simple screw shape"}
+@figure{/user_guides/modeling_algos/images/modeling_algos_image052.png,"Sharp, smooth and sewn edges  in a simple screw shape",320}
 
-@figure{/user_guides/modeling_algos/images/modeling_algos_image053.png, "Outline edges  and isoparameters in the same shape"}
+@figure{/user_guides/modeling_algos/images/modeling_algos_image053.png,"Outline edges  and isoparameters in the same shape",320}
 
-@figure{/user_guides/modeling_algos/images/modeling_algos_image054.png, "A simple screw shape seen with shading"}
+@figure{/user_guides/modeling_algos/images/modeling_algos_image054.png,"A simple screw shape seen with shading",320}
 
-@figure{/user_guides/modeling_algos/images/modeling_algos_image055.png, "An extraction  showing hidden sharp edges"}
+@figure{/user_guides/modeling_algos/images/modeling_algos_image055.png,"An extraction  showing hidden sharp edges",320}
 
 
 The following services are related to Hidden Lines Removal : 
@@ -3017,11 +3017,11 @@ At the first step all edges from a face are discretized according to the specifi
 
 At the second step, the faces are tessellated. Linear deflection limits the distance between a curve and its tessellation, whereas angular deflection limits the angle between subsequent segments in a polyline.
 
-@figure{/user_guides/modeling_algos/images/modeling_algos_image056.png, "Deflection parameters of BRepMesh_IncrementalMesh algorithm"}
+@figure{/user_guides/modeling_algos/images/modeling_algos_image056.png,"Deflection parameters of BRepMesh_IncrementalMesh algorithm",420}
 
 Linear deflection limits the distance between triangles and the face interior.
 
-@figure{/user_guides/modeling_algos/images/modeling_algos_image057.png, "Linear deflection"}
+@figure{/user_guides/modeling_algos/images/modeling_algos_image057.png,"Linear deflection",420}
 
 Note that if a given value of linear deflection is less than shape tolerance then the algorithm will skip this value and will take into account the shape tolerance.
 
@@ -3034,3 +3034,4 @@ However, an application that imports models created in other applications may no
 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. 
 
 You can obtain information on the shape by first exploring it. To access triangulation of a face in the shape later, use *BRepTool::Triangulation*. To access a polygon, which is the approximation of an edge of the face, use *BRepTool::PolygonOnTriangulation*.
+
index cee9387..75c7482 100644 (file)
@@ -49,7 +49,7 @@ The class *Interpolate* from *Geom2dAPI* package allows building a constrained 2
 
 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. 
 
-@figure{/user_guides/modeling_data/images/modeling_data_image003.png, "Approximation of a BSpline from scattered points"}
+@figure{/user_guides/modeling_data/images/modeling_data_image003.png,"Approximation of a BSpline from scattered points",420}
 
 This class may be instantiated as follows:
 ~~~~~ 
@@ -109,7 +109,7 @@ The following low level services are provided:
 
   The class *MultiLine* allows defining a given number of multi-point constraints in order to build the multi-line, multiple lines passing through ordered multiple point constraints. 
 
-  @figure{/user_guides/modeling_data/images/modeling_data_image004.png, "Definition of a MultiLine using Multiple Point Constraints"}
+  @figure{/user_guides/modeling_data/images/modeling_data_image004.png,"Definition of a MultiLine using Multiple Point Constraints",240}
 
   In this image:
   * *Pi*, *Qi*, *Ri* ... *Si* can be 2D or 3D points. 
@@ -616,7 +616,7 @@ In respect of curves, the following types of continuity are supported (see the f
 
 *Note:* Geometric continuity (G1, G2) means that the curve can be reparametrized to have parametric (C1, C2) continuity.
 
-@figure{/user_guides/modeling_data/images/modeling_data_continuity_curves.svg, "Continuity of Curves"}
+@figure{/user_guides/modeling_data/images/modeling_data_continuity_curves.svg,"Continuity of Curves",420}
 
 The following types of surface continuity are supported:
   * C0 (*GeomAbs_C0*) - parametric continuity (the surface has no points or curves of discontinuity).
@@ -627,7 +627,7 @@ The following types of surface continuity are supported:
   * C3 (*GeomAbs_C3*) - continuity of all derivatives till the third order.
   * CN (*GeomAbs_CN*) - continuity of all derivatives till the N-th order (infinite order of continuity).
 
-@figure{/user_guides/modeling_data/images/modeling_data_continuity_surfaces.svg, "Continuity of Surfaces"}
+@figure{/user_guides/modeling_data/images/modeling_data_continuity_surfaces.svg,"Continuity of Surfaces",420}
 
 Against single surface, the connection of two surfaces (see the figure above) defines its continuity in each intersection point only. Smoothness of connection is a minimal value of continuities on the intersection curve.
 
@@ -774,7 +774,7 @@ A local coordinate system can be viewed as either of the following:
 - *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. 
 
-@figure{/user_guides/modeling_data/images/modeling_data_image005.png, "Structure of TopLoc_Location"}
+@figure{/user_guides/modeling_data/images/modeling_data_image005.png,"Structure of TopLoc_Location",420}
 
 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. 
 
@@ -818,7 +818,7 @@ TopAbs contains the *TopAbs_ShapeEnum* enumeration,which lists the different top
 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. 
-@figure{/user_guides/modeling_data/images/modeling_data_image006.png, "ShapeEnum"}
+@figure{/user_guides/modeling_data/images/modeling_data_image006.png,"ShapeEnum",420}
 
 @subsubsection occt_modat_5_2_2 Orientation
 
@@ -844,7 +844,7 @@ Based on this default region the orientation allows definition of the region to
 | 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. |
 
-@figure{/user_guides/modeling_data/images/modeling_data_image007.png, "Four Orientations"}
+@figure{/user_guides/modeling_data/images/modeling_data_image007.png,"Four Orientations",420}
 
 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 and the intersection vertex would be the boundary. Thus an orientation can be associated with an intersection vertex as in the following figure: 
 
@@ -855,7 +855,7 @@ The notion of orientation is a very general one, and it can be used in any conte
 | INTERNAL     | Touching from inside |
 | EXTERNAL     | Touching from outside |
 
-@figure{/user_guides/modeling_data/images/modeling_data_image008.png, "Four orientations of intersection vertices"}
+@figure{/user_guides/modeling_data/images/modeling_data_image008.png,"Four orientations of intersection vertices",420}
 
 
 Along with the Orientation enumeration the *TopAbs* package defines four methods: 
@@ -873,11 +873,11 @@ The **TopAbs_State** enumeration described the position of a vertex or a set of
 
 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. 
 
-@figure{/user_guides/modeling_data/images/modeling_data_image009.png, "The four states"}
+@figure{/user_guides/modeling_data/images/modeling_data_image009.png,"The four states",420}
 
 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. 
 
-@figure{/user_guides/modeling_data/images/modeling_data_image010.png, "State specifies the parts of an edge intersecting a face"}
+@figure{/user_guides/modeling_data/images/modeling_data_image010.png,"State specifies the parts of an edge intersecting a face",420}
 
 @subsection occt_modat_5_3 Manipulating shapes and sub-shapes
 
@@ -903,9 +903,9 @@ The class representing the underlying abstract shape is never referenced directl
 
 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. 
 
-@figure{/user_guides/modeling_data/images/modeling_data_image011.png, "Structure of a shell formed from two faces"}
+@figure{/user_guides/modeling_data/images/modeling_data_image011.png,"Structure of a shell formed from two faces",420}
 
-@figure{/user_guides/modeling_data/images/modeling_data_image012.png, "Data structure of the above shell"}
+@figure{/user_guides/modeling_data/images/modeling_data_image012.png,"Data structure of the above shell",420}
 
 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. 
 
@@ -922,7 +922,7 @@ The compact data structure avoids the loss of information associated with copy o
 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. 
-@figure{/user_guides/modeling_data/images/modeling_data_image013.png, "Data structure containing two versions of a solid"}
+@figure{/user_guides/modeling_data/images/modeling_data_image013.png,"Data structure containing two versions of a solid",420}
 
 Classes inheriting TopoDS_Shape
 ------------------------------
@@ -1263,7 +1263,7 @@ Below is the auxiliary function, which copies the element of rank *i* from the m
 
 For example, in the wire in the image we want to recuperate the edges in the order {e1, e2, e3,e4, e5} :
 
-@figure{/user_guides/modeling_data/images/modeling_data_image014.png, "A wire composed of 6 edges."}
+@figure{/user_guides/modeling_data/images/modeling_data_image014.png,"A wire composed of 6 edges.",320}
 
 *TopExp_Explorer*, however, recuperates the lines in any order.
  
@@ -1293,3 +1293,4 @@ The following sample code reads a shape from ASCII file and writes it to a binar
     BinTools::Write (aShape, "result_file.bin");
   }
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
index 68ffd88..549118e 100644 (file)
@@ -55,7 +55,7 @@ OCAF uses other modules of Open CASCADE Technology — the Shape  is implemented
 
 The relationship between OCAF and the Open CASCADE Technology (**OCCT**) Object Libraries can be seen in the image below. 
 
-@figure{/user_guides/ocaf/images/ocaf_image003.svg, "OCCT Architecture"}
+@figure{/user_guides/ocaf/images/ocaf_image003.svg,"OCCT Architecture",360}
 
 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. 
  
@@ -65,7 +65,7 @@ The subsequent chapters of this document explain the concepts and show how to us
 
 OCAF provides you with an object-oriented Application-Document-Attribute model consisting of C++ class libraries. 
 
-@figure{ocaf_wp_image003.png, "The Application-Document-Attribute model"}
+@figure{ocaf_wp_image003.png,"The Application-Document-Attribute model",420}
 
 @subsubsection occt_ocaf_1_2_1 Application
 
@@ -133,7 +133,7 @@ In addition,  application-specific data can be added by defining new attribute c
   For example, to associate a texture to a face in a geometric model, 
   both the face and the texture are attached to the same reference-key.  
  
-@figure{ocaf_image004.png, "Topology driven versus reference-key driven approaches"}
+@figure{ocaf_image004.png,"Topology driven versus reference-key driven approaches",360}
 
  Reference-keys can be created in two ways:   
  
@@ -213,7 +213,7 @@ The sub-labels of a label are called its children. Conversely, each label, which
 
 The most important property is that a label’s entry is its persistent address in the data framework. 
   
-@figure{/user_guides/ocaf/images/ocaf_image005.png, "A simple framework model"}
+@figure{/user_guides/ocaf/images/ocaf_image005.png,"A simple framework model",216}
 
 In this image the circles contain tags of the corresponding labels.  The lists of tags are located under the circles. The root label always has a zero tag. 
 
@@ -225,7 +225,7 @@ List of tags of the right-bottom label is "0:3:4": this label has tag 4, its fat
 
 Let's have a look at the example:
   
-@figure{ocaf_wp_image007.png, "The coffee machine"}
+@figure{ocaf_wp_image007.png,"The coffee machine",200}
   
    In the image the application for designing coffee  machines first allocates 
   a label for the machine unit. It then adds sub-labels  for the main features 
@@ -237,7 +237,7 @@ Let's have a look at the example:
   Later on, you can  modify the handle's geometry without changing its color — 
   both remain attached  to the same label.  
   
-@figure{ocaf_wp_image005.png, "The data structure of the coffee machine"}
+@figure{ocaf_wp_image005.png,"The data structure of the coffee machine",361}
  
   The nesting of labels is key to OCAF. This allows a  label to have its own structure 
   with its local addressing scheme which can be  reused in a more complex structure. 
@@ -251,7 +251,7 @@ Let's have a look at the example:
 
 Another example is the application for designing table lamps. The first label is allocated to the lamp unit. 
 
-@figure{/user_guides/ocaf/images/ocaf_image006.png}
+@figure{/user_guides/ocaf/images/ocaf_image006.png,"",200}
 
 The root label cannot have brother labels. Consequently, various lamps in the framework allocation correspond to the sub-labels of the root label. This allows avoiding any confusion between table lamps in the data framework. Different lamp parts have different material, color and other attributes, so a child label of the lamp with the specified tags is allocated for each sub-unit of the lamp: 
 
@@ -265,7 +265,7 @@ Remember that tags are private addresses without any meaning outside the data fr
 
 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. 
 
-@figure{/user_guides/ocaf/images/ocaf_image007.png}
+@figure{/user_guides/ocaf/images/ocaf_image007.png,"",360}
 
 
 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. 
@@ -516,7 +516,7 @@ Let’s study the implementation of the same data type in both ways by the examp
   * First point as *TDataStd_RealArray* (three values: X1, Y1 and Z1);
   * Second point as *TDataStd_RealArray* (three values: X2, Y2 and Z2).
 
-@figure{/user_guides/ocaf/images/ocaf_image010.png, "Data tree for translation"}
+@figure{/user_guides/ocaf/images/ocaf_image010.png,"Data tree for translation",240}
 
 If the type of transformation is changed to rotation, the data tree looks like this: 
   * Type of transformation <i>(gp_Rotation)</i> as *TDataStd_Integer*;
@@ -524,7 +524,7 @@ If the type of transformation is changed to rotation, the data tree looks like t
   * Axis of rotation as *TDataStd_RealArray* (three values: DX, DY and DZ);
   * Angle of rotation as *TDataStd_Real*.
 
-@figure{/user_guides/ocaf/images/ocaf_image011.png, "Data tree for rotation"}
+@figure{/user_guides/ocaf/images/ocaf_image011.png,"Data tree for rotation",240}
 
 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). 
   
@@ -539,7 +539,7 @@ The attribute *TDataStd_UAttribute* with the chosen unique GUID identifies the d
   which references the coffee pot of the first document 
   (the XLink contains the relative path of the coffee pot document and the entry of the coffee pot data [0:1] ).  
 
-@figure{ocaf_wp_image006.png, "The coffee machine compound document"}
+@figure{ocaf_wp_image006.png,"The coffee machine compound document",360}
  
   In this context, the end-user of the coffee machine application can open the coffee pot document, 
   modify the geometry of, for  example, the reservoir, and overwrite the document without worrying 
@@ -784,7 +784,7 @@ You can also have a look at the class *TDF_Closure*, which can be useful to dete
 
 External links refer from one document to another. They allow you to update the copy of data  framework later on. 
 
-@figure{/user_guides/ocaf/images/ocaf_image012.png, "External links between documents"}
+@figure{/user_guides/ocaf/images/ocaf_image012.png,"External links between documents",360}
 
 Note that documents can be copied with or without a possibility of updating an external link. 
 
@@ -834,7 +834,7 @@ The user can add the *TNaming_NamedShape* attribute to other labels. This attrib
 
 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. 
 
-@figure{/user_guides/ocaf/images/ocaf_image013.png}
+@figure{/user_guides/ocaf/images/ocaf_image013.png,"",455}
 
 @subsection occt_ocaf_5_2 Shape attributes in data framework. 
 
@@ -847,7 +847,7 @@ Different algorithms may dispose sub-shapes of the result shape at the individua
 
 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. 
 
-@figure{/user_guides/ocaf/images/ocaf_image014.png, "Resulting box"}
+@figure{/user_guides/ocaf/images/ocaf_image014.png,"Resulting box",200}
 
 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) and to the new shape resulting from the fuse operation, and has evolution MODIFY (see the following figure). 
 
@@ -855,7 +855,7 @@ Named shapes, which contain information about modified faces, belong to the fuse
 * sub-label with tag 1 -- modified faces from box 1, 
 * sub-label with tag 2 -- modified faces from box 2. 
 
-@figure{/user_guides/ocaf/images/ocaf_image015.png}
+@figure{/user_guides/ocaf/images/ocaf_image015.png,"",360}
 
 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: 
 
@@ -998,7 +998,7 @@ Standard_Boolean CafTest_MyClass::SameEdge (const Handle(CafTest_Line)& L1, cons
 
 Let us consider an example: imagine a wooden plate. The job is to drive several nails in it:
 
-@figure{/user_guides/ocaf/images/ocaf_image020.png, "A nail driven in a wooden plate"}
+@figure{/user_guides/ocaf/images/ocaf_image020.png,"A nail driven in a wooden plate",360}
 
 There may be several nails with different size and position. A **Hammer** should push each **Nail** exactly in the center point of the top surface. For this the user does the following:
 *      Makes several Nails of different height and diameter (according to the need),
@@ -1020,11 +1020,11 @@ The application contains 3 functions:
 Each function gives the topological naming some hints how to “re-solve” the selected sub-shapes:
 * The Nail constructs a solid shape and puts each face of the shape into sub-labels: 
 
-@figure{/user_guides/ocaf/images/ocaf_image021.png, "Distribution of faces through sub-labels of the Nail"}
+@figure{/user_guides/ocaf/images/ocaf_image021.png,"Distribution of faces through sub-labels of the Nail",185}
 
 * The **Translator** moves a shape and registers modification for each face: it puts a pair: “old” shape -- “new” shape at a sub-label of each moving Nail. The “old” shape represents a face of the Nail at the initial position. The “new” shape -- is the same face, but at a new position:
 
-@figure{/user_guides/ocaf/images/ocaf_image022.png, "Registration of relocation of faces of a Nail"}
+@figure{/user_guides/ocaf/images/ocaf_image022.png,"Registration of relocation of faces of a Nail",240}
 
 How does it work?
 * The Hammer selects a face of a Nail calling *TNaming_Selector::Select()*. This call makes a unique name for the selected shape. In our example, it will be a direct reference to the label of the top face of the Nail (Face 1).
@@ -1164,7 +1164,7 @@ It is possible to describe any model by means of standard OCAF attributes.
   
   Certainly, other variants are also  possible.   
  
-@figure{ocaf_tree_wp_image003.png, "Allocation of all data as one  array of double values"}
+@figure{ocaf_tree_wp_image003.png,"Allocation of all data as one  array of double values",350}
  
   The first approach to allocation of all  data represented as one array of double values 
   saves initial memory and is easy to implement. 
@@ -1181,7 +1181,7 @@ It is possible to describe any model by means of standard OCAF attributes.
   In this case we create 100  000 labels -- one label for each measurement point 
   and attach an array of double  values to these labels:  
  
-@figure{ocaf_tree_wp_image004.png, "Allocation of data of each  measurement point as arrays of double values"}
+@figure{ocaf_tree_wp_image004.png,"Allocation of data of each  measurement point as arrays of double values",288}
  
   Now edition of data is safer as far as  memory usage is concerned. 
   Change of value for one measurement point (any  value: point co-ordinates, load, and so on) 
@@ -1193,7 +1193,7 @@ It is possible to describe any model by means of standard OCAF attributes.
    
   The third case of allocation of data  through OCAF tree is represented below:  
 
-@figure{ocaf_tree_wp_image005.png, "Allocation of data into separate arrays of double values"}
+@figure{ocaf_tree_wp_image005.png,"Allocation of data into separate arrays of double values",354}
 
   In this case sub-labels are involved and we  can easily access the values of each measurement point, 
   load or matrix. We don’t need an interface class with methods of access to the data 
@@ -1210,7 +1210,7 @@ It is possible to describe any model by means of standard OCAF attributes.
   In this case we  implement the third variant of using the standard attributes (see picture 3), 
   but we use less memory (because we use only one attribute instead of three):  
  
-@figure{ocaf_tree_wp_image006.png, "Allocation of data into newly  created OCAF attribute"}
+@figure{ocaf_tree_wp_image006.png,"Allocation of data into newly  created OCAF attribute",383}
 
   The second variant of using standard OCAF attributes still has drawbacks: 
   when data is edited, OCAF backs-up all values  of the measurement point.   
@@ -1257,7 +1257,7 @@ The class *TPrsStd_AISPresentation* allows you to define the visual presentation
 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: 
-@figure{/user_guides/ocaf/images/ocaf_image016.png}
+@figure{/user_guides/ocaf/images/ocaf_image016.png,"",420}
 
 As usual, the GUID of a driver and the GUID of a displayed attribute are the same. 
 
@@ -1282,7 +1282,7 @@ Function services aggregate data necessary for regeneration of a model. The func
 
 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. 
 
-@figure{/user_guides/ocaf/images/ocaf_image008.png, "Document structure"}
+@figure{/user_guides/ocaf/images/ocaf_image008.png,"Document structure",360}
 
 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. 
 
@@ -1302,7 +1302,7 @@ For updating algorithm optimization, each function driver has access to the *TFu
 
 An application must implement its functions, function drivers and the common solver for parametric model creation. For example, check the following model: 
 
-@figure{/user_guides/ocaf/images/ocaf_image017.png}
+@figure{/user_guides/ocaf/images/ocaf_image017.png,"",360}
 
 The procedure of its creation is as follows:
   * create a rectangular planar face *F* with height 100 and width 200;
@@ -1328,7 +1328,7 @@ The procedure of its creation is as follows:
   Let us describe the usage of the Function Mechanism of Open CASCADE Application Framework on a simple example.  
   This example represents a "nail" composed by a cone and two cylinders of different radius and height:  
 
-@figure{ocaf_functionmechanism_wp_image003.png, "A nail"}
+@figure{ocaf_functionmechanism_wp_image003.png,"A nail",160}
 
   These three objects (a cone and two cylinders) are  independent, 
   but the Function Mechanism makes them connected to each other and representing one object -- a nail.  
@@ -1437,7 +1437,7 @@ To automatically erase the nail from the viewer and the data  tree it is enough
   The function of the cone is independent. The functions of the cylinders depend on the cone function. 
   The nail function depends on the  results of all functions:  
 
-@figure{ocaf_functionmechanism_wp_image005.png, "A graph of dependencies between functions"}
+@figure{ocaf_functionmechanism_wp_image005.png,"A graph of dependencies between functions",232}
 
   Computation of the model starts with the cone function, then the long cylinder, 
   after that the header cylinder and, finally, the result is generated  by the nail function at the end of function chain.  
@@ -2289,3 +2289,4 @@ The following scenario is used:
 - creating a Cut (Box1, Box2) as a modification of Box1 and push it in DF;
 - recovering the result from DF.
 
+
index 83495c8..1ba6676 100644 (file)
@@ -41,7 +41,7 @@ The solution: Shape Healing closes a gap by inserting lacking edge.
   
 The following diagram shows dependencies of API packages: 
 
-@figure{/user_guides/shape_healing/images/shape_healing_image009.svg, "Shape Healing packages"}
+@figure{/user_guides/shape_healing/images/shape_healing_image009.svg,"Shape Healing packages",420}
 
 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);
@@ -443,7 +443,7 @@ TopoDS_Wire newwire = sfw.Wire();
 
 Let us correct the following wire:
 
-@figure{/user_guides/shape_healing/images/shape_healing_image013.png, "Initial shape"}
+@figure{/user_guides/shape_healing/images/shape_healing_image013.png,"Initial shape",420}
 
 It is necessary to apply the @ref occt_shg_3_1_2 "tools for the analysis of wire validity" to check that:
 * the edges are correctly oriented;
@@ -487,7 +487,7 @@ adjacent edges”<<endl;
 
 As the result all failures have been fixed.
 
-@figure{/user_guides/shape_healing/images/shape_healing_image014.png, "Resulting shape"}
+@figure{/user_guides/shape_healing/images/shape_healing_image014.png,"Resulting shape",420}
 
 @subsubsection occt_shg_2_3_8 Repairing tool for edges 
 
@@ -500,7 +500,7 @@ This tool does not have the method *Perform()*.
 
 To see how this tool works, it is possible to take an edge, where the maximum deviation between the 3D curve and 2D curve P1 is greater than the edge tolerance.
 
-@figure{/user_guides/shape_healing/images/shape_healing_image011.png, "Initial shape"}
+@figure{/user_guides/shape_healing/images/shape_healing_image011.png,"Initial shape",420}
 
 First it is necessary to apply the @ref occt_shg_3_1_3 "tool for checking the edge validity" to find that the 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.
 
@@ -520,7 +520,7 @@ if (sae.CheckSameParameter (edge, maxdev)) {
 }
 ~~~~~
 
-@figure{/user_guides/shape_healing/images/shape_healing_image012.png, "Resulting shape"}
+@figure{/user_guides/shape_healing/images/shape_healing_image012.png,"Resulting shape",420}
 
 As the result, the  edge tolerance has been increased.
 
@@ -1179,9 +1179,9 @@ Such calculations are necessary to avoid creation of strip faces. In the process
 
 An example of using this tool is presented in the figures below: 
 
-@figure{/user_guides/shape_healing/images/shape_healing_image003.png, "Source Face"}
+@figure{/user_guides/shape_healing/images/shape_healing_image003.png,"Source Face",240}
 
-@figure{/user_guides/shape_healing/images/shape_healing_image004.png, "Resulting shape"}
+@figure{/user_guides/shape_healing/images/shape_healing_image004.png,"Resulting shape",240}
 
 
 *ShapeUpgrade_ShapeDivideArea* is inherited from the base class *ShapeUpgrade_ShapeDivide* and should be used in the following way: 
@@ -1365,15 +1365,15 @@ If the sequence of shapes contains faces, only the internal wires from these fac
 
 An example of using this tool is presented in the figures below: 
 
-@figure{/user_guides/shape_healing/images/shape_healing_image005.png, "Source Face"}
-@figure{/user_guides/shape_healing/images/shape_healing_image006.png, "Resulting shape"}
+@figure{/user_guides/shape_healing/images/shape_healing_image005.png,"Source Face",240}
+@figure{/user_guides/shape_healing/images/shape_healing_image006.png,"Resulting shape",240}
 
 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.
 
-@figure{/user_guides/shape_healing/images/shape_healing_image007.png, "Source Face"}
+@figure{/user_guides/shape_healing/images/shape_healing_image007.png,"Source Face",240}
 
-@figure{/user_guides/shape_healing/images/shape_healing_image008.png, "Resulting shape"}
+@figure{/user_guides/shape_healing/images/shape_healing_image008.png,"Resulting shape",240}
 
 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. 
 
@@ -1967,3 +1967,4 @@ A new default log file can be added using  method *SetDefault* with the same arg
 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. 
 
+
index 2f71808..e706981 100644 (file)
@@ -7,7 +7,7 @@ STEP processor  {#occt_user_guides__step}
 
 STEP is more and more widely used to exchange data between various software, involved in CAD, PDM, Analysis, etc... STEP is far more than an "exchange standard" : it provides a technology and a set of methodologies to describe the data to exchange in a modular and upgradeable way. Regarding OCCT, this mostly applies to CAD data but it is not a limitation, other kinds of data for specific applications can be addressed too.
 
-@figure{/user_guides/step/images/step_image002.png, "Image imported from STEP"}
+@figure{/user_guides/step/images/step_image002.png,"Image imported from STEP",240}
 
 Open Cascade allows its users to employ STEP in the following domains:
 * Exchange of data for technical applications, following the state-of-the-art definitions and rules;
@@ -735,7 +735,7 @@ This method is intended to force two adjacent edges in the wire to share the sam
 
 The following diagram illustrates the structure of calls in reading STEP. The highlighted classes are intended to translate geometry
 
-@figure{/user_guides/step/images/step_image003.png, "The structure of calls in reading STEP"}
+@figure{/user_guides/step/images/step_image003.png,"The structure of calls in reading STEP",420}
   
 @subsection occt_step_2_7 Example
 ~~~~~
@@ -1073,7 +1073,7 @@ The following diagram illustrates the structure of calls in writing STEP.
 The highlighted classes are intended to translate geometry. 
 
 
-@figure{/user_guides/step/images/step_image004.png, "The structure of calls in writing STEP"}
+@figure{/user_guides/step/images/step_image004.png,"The structure of calls in writing STEP",420}
 
     
 @subsection occt_step_3_7 Example
@@ -1621,3 +1621,4 @@ Interface_Static::SetIVal("write.step.schema", 5));
 Saved Views are not exported by OCCT.
 
 
+
index 1474c35..155091b 100644 (file)
@@ -48,7 +48,7 @@ It should be emphasized that *TObj* package defines only the interfaces and the
 
 Logically the *TObj* data model is represented as a tree of model objects, with upper-level objects typically being collections of other objects (called *partitions*, represented by the class *TObj_Partition*). The root object of the model is called the *Main partition* and is maintained by the model itself. This partition contains a list of sub-objects called its *children* each sub-object may contain its own children (according to its type), etc. 
 
-@figure{/user_guides/tobj/images/tobj_image003.png, "TObj Data Model"}
+@figure{/user_guides/tobj/images/tobj_image003.png,"TObj Data Model",240}
 
 As the *TObj* Data Model is based on OCAF (Open CASCADE Application Framework) technology, 
 it stores its data in the underlying OCAF document. The OCAF document consists of a tree of 
@@ -61,7 +61,7 @@ of the label, which uniquely identifies its position in the document.
 Generally the structure of the OCAF tree of the *TObj* data 
 model corresponds to the logical structure of the model and can be presented as in the following picture: 
 
-@figure{/user_guides/tobj/images/tobj_image004.png, "TObj Data Model mapped on OCAF document"}
+@figure{/user_guides/tobj/images/tobj_image004.png,"TObj Data Model mapped on OCAF document",360}
 
 All data of the model are stored in the root label (0:1) of the OCAF document. 
 An attribute *TObj_TModel* is located in this root label. It 
@@ -428,7 +428,7 @@ of important features of *TObj* model objects. This implementation defines
 basic approaches that are recommended for all descendants, 
 and provides tools to facilitate their usage. 
 
-@figure{/user_guides/tobj/images/tobj_image005.png, "TObj objects hierarchy"}
+@figure{/user_guides/tobj/images/tobj_image005.png,"TObj objects hierarchy",170}
 
 @subsection occt_tobj_3_1 Separation of data and interface
 
@@ -449,7 +449,7 @@ The special type of attribute *TObj_TObject* is used for storing instances of ob
 in the OCAF tree. *TObj_TObject* is a simple container for the object of type *TObj_Object*. 
 All objects (interfaces) of the data model  inherit this class. 
 
-@figure{/user_guides/tobj/images/tobj_image006.png, "TObj object stored on OCAF label"}
+@figure{/user_guides/tobj/images/tobj_image006.png,"TObj object stored on OCAF label",360}
 
 
 @subsection occt_tobj_3_2 Basic features
@@ -639,7 +639,7 @@ This attribute is located in the sub-label of the referring object (called *mast
 and keeps reference to the main label of the referred object. 
 At the same time the referred object can maintain the back reference to the master object. 
 
-@figure{/user_guides/tobj/images/tobj_image007.png, "Objects relationship"}
+@figure{/user_guides/tobj/images/tobj_image007.png,"Objects relationship",360}
 
 
 
@@ -893,7 +893,7 @@ Apart from the model and the object, package *TObj* provides a set of auxiliary
 
 The structure of *TObj* iterators hierarchy is presented below: 
 
-@figure{/user_guides/tobj/images/tobj_image008.png, "Hierarchy of iterators"}
+@figure{/user_guides/tobj/images/tobj_image008.png,"Hierarchy of iterators",420}
 
 
 @section occt_tobj_5 Packaging
@@ -907,3 +907,4 @@ The *TObj* sources are distributed in the following packages:
   * *TKBinL, TKXmlL* -- toolkits of binary and XML persistence
 
 
+
index 4b73cf0..1bdb483 100644 (file)
@@ -6,7 +6,7 @@
 @section occt_vis_1    Introduction
 VIS component provides adaptation functionality for visualization of OCCT topological shapes by means of VTK library. This User’s Guide describes how to apply VIS classes in application dealing with 3D visualization based on VTK library.
 
-@figure{/user_guides/vis/images/vis_image001.png}
+@figure{/user_guides/vis/images/vis_image001.png,"3D visualization based on VTK library",421}
 
 There are two ways to use VIS in the application:
 * Use a **high-level API**. It is a simple scenario to use VTK viewer with displayed OCCT shapes. It considers usage of tools provided with VIS component such as a specific VTK data source, a picker class and specific VTK filters. Basically, in this scenario you enrich your custom VTK pipeline with extensions coming from VIS.
@@ -21,14 +21,14 @@ VIS component consists of the following packages:
 * **IVtkVTK** -- implementation of interfaces related to VTK visualization toolkit;
 * **IVtkTools** -- high-level tools designed for integration into VTK visualization pipelines.
 
-@figure{/user_guides/vis/images/vis_image002.png "Dependencies of VIS packages"}
+@figure{/user_guides/vis/images/vis_image002.png, "Dependencies of VIS packages",200}
 
 The idea behind the mentioned organization of packages is separation of interfaces from their actual implementations by their dependencies from a particular library (OCCT, VTK). Besides providing of semantic separation, such splitting helps to avoid excessive dependencies on other OCCT toolkits and VTK.
 * **IVtk** package does not depend on VTK libraries at all and needs OCCT libraries only because of collections usage (*TKernel* library);
 * Implementation classes from **IVtkOCC** package depend on OCCT libraries only and do not need VTK;
 * **IVtkVTK** package depends on VTK libraries only and does not need any OCCT functionality except collections.
 
-@figure{/user_guides/vis/images/vis_image003.png "Dependencies of VIS packages"}
+@figure{/user_guides/vis/images/vis_image003.png, "Dependencies of VIS packages", 240}
 
 Basically, it is enough to use the first three packages in the end user’s application  (*IVtk, IVtkOCC* and *IVtkVTK*) to be able to work with OCCT shapes in VTK viewer. However, *IVtkTools* package is also provided as a part of the component to make the work more comfortable.
 
@@ -156,7 +156,7 @@ For example, the scalar-based coloring can be disabled to bind a single color to
 @subsection occt_vis_3_3        Display modes
 The output of the shape data source can be presented in wireframe or shading display mode.  A specific filter from class *IVtkTools_DisplayModeFilter* can be applied to select the display mode. The filter passes only the cells corresponding to the given mode. The set of available modes is defined by *IVtk_DisplayMode* enumeration.
 
-@figure{/user_guides/vis/images/vis_image004.png}
+@figure{/user_guides/vis/images/vis_image004.png,"",360}
 
 For example, the shading representation can be obtained in the following way:
 
@@ -176,7 +176,7 @@ By default, the display mode filter works in a wireframe mode.
 
 TIP: to make the shading representation smooth, use additional *vtkPolyDataNormals* filter. This filter must be applied after the display mode filter.
 
-@figure{/user_guides/vis/images/vis_image005.png}
+@figure{/user_guides/vis/images/vis_image005.png,"",360}
 
 @subsection occt_vis_3_4        Interactive selection
 *IVtkTools* package provides *IVtkTools_ShapePicker* class to perform selection of OCCT shapes and sub-shapes in VTK viewer and access the picking results. The typical usage of *IVtkTools_ShapePicker* tool consists in the following sequence of actions:
@@ -241,7 +241,7 @@ OCCT picking algorithm *IVtkTools_ShapePicker* calculates a new transformation m
 
 WARNING: VIS picker essentially works on the initial topological data structures rather than on the actually visualized actors. This peculiarity allows VIS to take advantage of standard OCCT selection mechanism, but puts strict limitations on the corresponding visualization pipelines. Once constructed, the faceted shape representation should not be morphed or translated anyhow. Otherwise, the picking results will lose their associativity with the source geometry. E.g. you should never use *vtkTransform* filter, but rather apply OCCT isometric transformation on the initial model in order to work on already relocated facet. These limitations are often acceptable for CAD visualization. If not, consider usage of a custom VTK-style picker working on the actually visualized actors.
 
-@figure{/user_guides/vis/images/vis_image006.png}
+@figure{/user_guides/vis/images/vis_image006.png,"",420}
 
 @subsubsection occt_vis_3_5     Selection of sub-shapes
 
@@ -282,7 +282,7 @@ The usage of low-level tools is justified in cases when the utilities from *IVtk
 
 The low-level scenario of VIS usage in VTK pipeline is shown in the figure below. The Mesher component produces shape facet (VTK polygonal data) using implementation of *IShapeData* interface. Then result can be retrieved from this implementation as a *vtkPolyData* instance.
 
-@figure{/user_guides/vis/images/vis_image007.svg "Low-level VIS usage with VTK"}
+@figure{/user_guides/vis/images/vis_image007.svg "Low-level VIS usage with VTK", 420}
 
 The visualization pipeline for OCCT shape presentation can be initialized as follows:
 1. Create an instance of *IShape* class initialized by OCCT topological shape:
@@ -365,3 +365,4 @@ IVtk_ShapeIdList subShapeIds
 *TKIVtkDraw* toolkit contains classes for embedding VIS functionality into DRAW Test Harness with possibility of simple interactions, including detection and highlighting.
 * *IVtkDraw_HighlightAndSelectionPipeline* -- Creates VTK pipeline with OCCT shape data source and properly initialized VIS filters.
 * *IVtkDraw_Interactor* -- Controls simple interactive actions, such as detection and selection of the displayed shapes.
+
index b3d6be3..b085f1d 100644 (file)
@@ -28,7 +28,7 @@ The packages used to display 3D objects are also applicable for visualization of
 
 The figure below presents a schematic overview of the relations between the key concepts and packages in visualization. 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. 
 
-@figure{visualization_image003.png, "Key concepts and packages in visualization"}
+@figure{visualization_image003.png,"Key concepts and packages in visualization",400}
 
 To answer different needs of CASCADE users, this User's Guide offers the following three paths in reading it.
   
@@ -98,7 +98,7 @@ aContext -> Display(anAis);
 
 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 below.  
 
-@figure{visualization_image004.svg, "Processes involved in displaying a presentable shape"}
+@figure{visualization_image004.svg,"Processes involved in displaying a presentable shape",400}
 
 @subsection occt_visu_2_2 Selection 
 
@@ -121,7 +121,7 @@ Sensitive entities in the same way as entity owners are links between objects an
 
 The purpose of entities is to define what parts of the object will be selectable in particular. Thus, any object that is meant to be selectable must be split into sensitive entities (one or several). For instance, to apply face selection to an object it is necessary to explode it into faces and use them for creation of a sensitive entity set.
 
-@figure{visualization_image005.png, "Example of a shape divided into sensitive entities"}
+@figure{visualization_image005.png,"Example of a shape divided into sensitive entities",400}
 
 Depending on the user's needs, sensitive entities may be atomic (point or edge) or complex. Complex entities contain many sub-elements that can be handled by detection mechanism in a similar way (for example, a polyline stored as a set of line segments or a triangulation).
 
@@ -152,9 +152,9 @@ For all standard OCCT shapes, zero mode is supposed to select the whole object (
   - 5 -- selection of the shells;
   - 6 -- selection of the constituent solids.
 
-@figure{visualization_image006.png, "Hierarchy of references from sensitive entity to selectable object"}
+@figure{visualization_image006.png,"Hierarchy of references from sensitive entity to selectable object",400}
 
-@figure{visualization_image007.png, "The principle of entities organization within the selectable object"}
+@figure{visualization_image007.png,"The principle of entities organization within the selectable object",400}
 
 <h4>Viewer selector</h4>
 
@@ -166,7 +166,7 @@ The viewer selector maintains activation and deactivation of selection modes, la
 
 Selection manager is a high-level API to manipulate selection of all displayed objects. It handles all viewer selectors, activates and deactivates selection modes for the objects in all or particular selectors, manages computation and update of selections for each object. Moreover, it keeps selection structures updated taking into account applied changes.
 
-@figure{visualization_image008.png, "The relations chain between viewer selector and selection manager"}
+@figure{visualization_image008.png,"The relations chain between viewer selector and selection manager",400}
 
 @subsubsection occt_visu_2_2_2 Algorithm
 
@@ -180,9 +180,13 @@ For the point or the rectangular selection the base of the frustum is a rectangl
 
 The frustum length is limited by near and far view volume planes and each plane is built parallel to the corresponding view volume plane.
 
-@figure{visualization_image009.png, "Rectangular frustum: a) after mouse move or click, b) after applying the rectangular selection"}
+@figure{visualization_image009.png,"",400}
 
-@figure{visualization_image010.png, "Triangular frustum set: a) user-defined polyline, b) triangulation of the polygon based on the given polyline, c) triangular frustum based on one of the triangles"}
+The image above shows the rectangular frustum: a) after mouse move or click, b) after applying the rectangular selection.
+
+@figure{visualization_image010.png,"",400}
+
+In the image above triangular frustum is set: a) by a user-defined polyline, b) by triangulation of the polygon based on the given polyline, c) by a triangular frustum based on one of the triangles.
 
 <h4>BVH trees</h4>
 
@@ -194,7 +198,7 @@ The second level BVH tree consists of all sensitive entities of one selectable o
 
 The third level BVH tree is used for complex sensitive entities that contain many elements: for example, triangulations, wires with many segments, point sets, etc. It is built on demand for sensitive entities with under 800K sub-elements.
 
-@figure{visualization_image022.png, "Selection BVH tree hierarchy: from the biggest object-level (first) to the smallest complex entity level (third)"}
+@figure{visualization_image022.png,"Selection BVH tree hierarchy: from the biggest object-level (first) to the smallest complex entity level (third)",400}
 
 <h4>Stages of the algorithm</h4>
 
@@ -456,13 +460,13 @@ in which you were before opening it (neutral point or previous local context).
 
 **Interactive Objects** are the entities, which are visualized and selected. 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.  
 
-@figure{visualization_image016.png}
+@figure{visualization_image016.png,"",240}
 
 An Interactive Object is a "virtual" entity, which can be  presented and selected. An Interactive Object can have a certain number of specific graphic attributes, such as visualization mode, color and  material. 
 
 When an Interactive Object is visualized, the required graphic attributes are taken from its own **Drawer** if it has the required custom attributes or otherwise from the context drawer. 
 
-@figure{visualization_image017.png}
+@figure{visualization_image017.png,"",360}
 
 It can be necessary to filter the entities to be selected. Consequently there are **Filter** entities, which allow refining the dynamic detection context.  Some of these filters can be used at the Neutral Point, others only in an open local context. It is possible to program custom filters and load them into the interactive context.  
 
@@ -480,7 +484,7 @@ A presentation is identified by an index and by the reference to  the Presentati
 
 By convention, the default mode of  representation for the Interactive Object has index 0. 
 
-@figure{visualization_image018.png}
+@figure{visualization_image018.png,"",360}
 
 Calculation of different presentations of an interactive  object is done by the *Compute* functions inheriting from *PrsMgr_  PresentableObject::Compute* functions. They are automatically called by *PresentationManager*  at a visualization or an update request.  
 
@@ -634,9 +638,9 @@ Keep in mind the following points concerning graphic attributes:
   * 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, standard attributes including color, line thickness, material, and transparency have been privileged. Consequently, there is a certain number of virtual  functions, which allow acting on these attributes. Each  new class of interactive object can redefine these functions and change the behavior of the class. 
 
-@figure{visualization_image019.png, "Figure 13. Redefinition of virtual functions for changes in AIS_Point"}
+@figure{visualization_image019.png,"Redefinition of virtual functions for changes in AIS_Point",360}
 
-@figure{visualization_image020.png, "Figure 14. Redefinition of virtual functions for changes in AIS_Shape."}
+@figure{visualization_image020.png,"Redefinition of virtual functions for changes in AIS_Shape.",360}
 
 The  following virtual functions provide settings for color, width, material and transparency:  
   * *AIS_InteractiveObject::UnsetColor* 
@@ -783,7 +787,7 @@ vfit
 
 See how proxy *OpenGl_Structure* is used to represent instance:
 
-@figure{/user_guides/visualization/images/visualization_image029.png}
+@figure{/user_guides/visualization/images/visualization_image029.png,"",240}
 
 The original object does not have to be displayed in order to make instance. Also selection handles transformations of instances correctly:
 
@@ -798,7 +802,7 @@ vconnect x 3 0 0 s p   # make assembly
 vfit
 ~~~~~
 
-@figure{/user_guides/visualization/images/visualization_image030.png}
+@figure{/user_guides/visualization/images/visualization_image030.png,"",420}
 
 Here is the example of a more complex hierarchy involving sub-assemblies:
 
@@ -1401,7 +1405,7 @@ The presentation class *AIS_PointCloud* can be used for efficient drawing of lar
 - The type of point marker used to draw points can be specified as a presentation aspect.
 - The presentation provides selection by a bounding box of the visualized set of points. It supports two display / highlighting modes: points or bounding box.
 
-@figure{point_cloud.png, "A random colored cloud of points"}
+@figure{point_cloud.png,"A random colored cloud of points",240}
 
 Example:
 ~~~~~
@@ -2029,7 +2033,7 @@ aView->Camera()->Transform (aTrsf);
 
 @subsubsection occt_visu_4_4_4 Orthographic Projection
 
-@figure{view_frustum.png, "Perspective and orthographic projection"}
+@figure{view_frustum.png,"Perspective and orthographic projection",420}
 
 The following code configures the camera for orthographic rendering:
 
@@ -2045,7 +2049,7 @@ aView->Update();
 
 **Field of view (FOVy)** -- defines the field of camera view by y axis in degrees (45° is default).
 
-@figure{camera_perspective.png, "Perspective frustum"}
+@figure{camera_perspective.png,"Perspective frustum",420}
 
 The following code configures the camera for perspective rendering:
 
@@ -2069,7 +2073,7 @@ There are two types of IOD:
 
 **ZFocus** -- defines the distance to the point of stereographic focus.
 
-@figure{stereo.png, "Stereographic projection"}
+@figure{stereo.png,"Stereographic projection",420}
 
 To enable stereo projection, your workstation should meet the following requirements:
 
@@ -2847,3 +2851,4 @@ From a developer's point of view, it is easy to integrate the *MeshVS* component
 Visual attributes of the <i>MeshVS_Mesh</i> object (such as shading color, shrink coefficient and so on)  are controlled through <i>MeshVS_Drawer</i> object. It maintains a map "Attribute ID --> attribute value" and can be easily extended with any number of custom attributes.
 
 In all other respects, <i>MeshVS_Mesh</i> is very similar to any other class derived from <i>AIS_InteractiveObject</i> and it should be used accordingly (refer to the description of <i>AIS package</i> in the documentation).
+
index b84be77..d87c348 100644 (file)
@@ -13,7 +13,7 @@ Data types such as colors, layers, assembly descriptions and validation properti
 
 Finally, the XDE provides reader and writer tools for reading and writing the data supported by XCAF to and from IGES and STEP files. 
 
-@figure{/user_guides/xde/images/646_xde_11_400.png,"Shape imported using XDE"}
+@figure{/user_guides/xde/images/646_xde_11_400.png,"Shape imported using XDE",240}
 
 The XDE component requires @ref occt_user_guides__shape_healing "Shape Healing" toolkit for operation. 
 
@@ -39,10 +39,10 @@ The Document used by XDE usually starts as a *TDocStd_Document*.
 XDE supports assemblies by separating shape definitions and their locations. Shapes are simple OCAF objects without a location definition. An assembly consists of several components. Each of these components references one and the same specified shape with different locations. All this provides an increased flexibility in working on multi-level assemblies. 
 
 For example, a mechanical assembly can be defined as follows: 
-@figure{/user_guides/xde/images/xde_image003.png, "Assembly Description"}
+@figure{/user_guides/xde/images/xde_image003.png,"Assembly Description",240}
 
 
-@figure{/user_guides/xde/images/xde_image004.png, "Assembly View"}
+@figure{/user_guides/xde/images/xde_image004.png,"Assembly View",240}
 
 
 XDE defines the specific organization of the assembly content. Shapes are stored on sub-labels of label 0:1:1. There can be one or more roots (called free shapes) whether they are true trees or simple shapes. A shape can be considered to be an Assembly (such as AS1 under 0:1:1:1 in Figure1) if it is defined with Components (sub-shapes, located or not). 
@@ -54,7 +54,7 @@ Validation properties are geometric characteristics of Shapes (volume, centroid,
 
 Advanced Data Exchange supports both reading and writing of validation properties, and provides a tool to check them. 
 
-@figure{/user_guides/xde/images/xde_image005.png, "Validation Property Descriptions"}
+@figure{/user_guides/xde/images/xde_image005.png,"Validation Property Descriptions",240}
 
 Check logs contain deviations of computed values from the values stored in a STEP file. A typical example appears as follows: 
 
@@ -81,7 +81,7 @@ In our example, it can be seen that no errors were detected for either area, vol
 
 XDE supports reading and writing the names of shapes to and from IGES and STEP file formats. This functionality can be switched off if you do not need this type of data, thereby reducing the size of the document. 
 
-@figure{/user_guides/xde/images/614_xde_04_400.png, "Instance Names"}
+@figure{/user_guides/xde/images/614_xde_04_400.png,"Instance Names",360}
 
 @subsection occt_xde_1_6 Colors and Layers
 XDE can read and write colors and layers assigned to shapes or their subparts (down to the level of faces and edges) to and from both IGES and STEP formats. Three types of colors are defined in the enumeration *XCAFDoc_ColorType*: 
@@ -89,7 +89,7 @@ XDE can read and write colors and layers assigned to shapes or their subparts (d
   * surface color <i>(XCAFDoc_ColorSurf)</i>
   * curve color <i>(XCAFDoc_ColorCurv)</i>
   
- @figure{/user_guides/xde/images/xde_image006.png, "Colors and Layers"}
+ @figure{/user_guides/xde/images/xde_image006.png,"Colors and Layers",240}
 
 
 @section occt_xde_2 Working with XDE
@@ -482,7 +482,7 @@ XCAFDoc_Volume::Set ( aLabel, volume );
 
 XDE can read and write colors and layers assigned to shapes or their subparts (down to level of faces and edges) to and from both IGES and STEP formats. 
 
-@figure{/user_guides/xde/images/239_xde_12_400.png,"Motor Head"}
+@figure{/user_guides/xde/images/239_xde_12_400.png,"Motor Head",240}
 
 In an XDE document, colors are managed by the class *XCAFDoc_ColorTool*. This is done with the same principles as for ShapeTool with Shapes, and with the same capability of having a tool on the Main Label, or on any sub-label. The Property itself is defined as an *XCAFDoc_Color*, sub-class of *TDF_Attribute*.
  
@@ -684,3 +684,4 @@ As XDE provides an extension of the data structure, for relevant data in standar
 As a result, if an application works on Assemblies, on Colors or Layers, on Validation Properties (as defined in STEP), it can rely on all or a part of the XDE definitions, and include them in its own data structure. 
 
 In addition, if an application has a data structure far from these notions, it can get data (such as Colors and Names on Shapes) according to its needs, but without having to consider the whole. 
+