From 18006a0f100e7f60d5667fcd8f11c48eb7a46850 Mon Sep 17 00:00:00 2001 From: isz Date: Fri, 31 Oct 2014 18:37:45 +0300 Subject: [PATCH] 0025343: Visualization - Update user's guide and DRAW commands description Redesign of Visualisation user guide's structure with some changes in the guide. Update Draw_test_harness user guide. Added dimension commands to DRAW test harness. Update of prerequisites and building 3rd party tools sections Move VIS draw tests to Draw Test Harness section. Additionally, fix bugs 24117 and 25353. Correct output of new imaged in PDF in modeling algos guide and errors introduced by bug 24699 in the overview. --- dox/FILES_HTML.txt | 2 +- dox/FILES_PDF.txt | 2 +- .../building/3rdparty/3rdparty_linux.md | 64 +- .../building/3rdparty/3rdparty_osx.md | 11 +- .../building/3rdparty/3rdparty_windows.md | 42 +- dox/dev_guides/building/automake.md | 8 +- dox/overview/images/overview_3rdparty.png | Bin 5984 -> 6710 bytes dox/overview/images/overview_installation.png | Bin 4705 -> 9687 bytes dox/overview/overview.md | 47 +- .../draw_test_harness.md | 623 ++++++-- .../images/draw_image001.png} | Bin .../images/draw_image002.png} | Bin .../images/draw_image003.png} | Bin .../images/draw_image004.png} | Bin .../images/draw_image005.png} | Bin .../images/draw_image006.png} | Bin .../modeling_algos/modeling_algos.md | 25 +- dox/user_guides/vis/vis.md | 196 +-- .../images/camera_perspective.png | Bin 0 -> 27932 bytes .../visualization/images/point_cloud.png | Bin 0 -> 24206 bytes .../visualization/images/stereo.png | Bin 0 -> 52001 bytes .../visualization/images/view_frustum.png | Bin 0 -> 154714 bytes .../images/viewfrustumculling.png | Bin 0 -> 72427 bytes .../visualization/visualization.md | 1374 +++++++++++------ 24 files changed, 1469 insertions(+), 925 deletions(-) rename dox/user_guides/{ => draw_test_harness}/draw_test_harness.md (93%) rename dox/user_guides/{vis/images/vis_image008.png => draw_test_harness/images/draw_image001.png} (100%) rename dox/user_guides/{vis/images/vis_image009.png => draw_test_harness/images/draw_image002.png} (100%) rename dox/user_guides/{vis/images/vis_image010.png => draw_test_harness/images/draw_image003.png} (100%) rename dox/user_guides/{vis/images/vis_image011.png => draw_test_harness/images/draw_image004.png} (100%) rename dox/user_guides/{vis/images/vis_image012.png => draw_test_harness/images/draw_image005.png} (100%) rename dox/user_guides/{vis/images/vis_image013.png => draw_test_harness/images/draw_image006.png} (100%) create mode 100644 dox/user_guides/visualization/images/camera_perspective.png create mode 100644 dox/user_guides/visualization/images/point_cloud.png create mode 100644 dox/user_guides/visualization/images/stereo.png create mode 100644 dox/user_guides/visualization/images/view_frustum.png create mode 100644 dox/user_guides/visualization/images/viewfrustumculling.png diff --git a/dox/FILES_HTML.txt b/dox/FILES_HTML.txt index 06b73266f8..6cc2a4ae41 100644 --- a/dox/FILES_HTML.txt +++ b/dox/FILES_HTML.txt @@ -27,7 +27,7 @@ user_guides/step/step.md user_guides/xde/xde.md user_guides/ocaf/ocaf.md user_guides/tobj/tobj.md -user_guides/draw_test_harness.md +user_guides/draw_test_harness/draw_test_harness.md user_guides/brep_wp/brep_wp.md user_guides/ocaf_functionmechanism_wp/ocaf_functionmechanism_wp.md user_guides/ocaf_tree_wp/ocaf_tree_wp.md diff --git a/dox/FILES_PDF.txt b/dox/FILES_PDF.txt index 2be9c76d3a..fae962c282 100644 --- a/dox/FILES_PDF.txt +++ b/dox/FILES_PDF.txt @@ -16,7 +16,7 @@ user_guides/ocaf_functionmechanism_wp/ocaf_functionmechanism_wp.md user_guides/ocaf_tree_wp/ocaf_tree_wp.md user_guides/ocaf_wp/ocaf_wp.md user_guides/step/step.md -user_guides/draw_test_harness.md +user_guides/draw_test_harness/draw_test_harness.md user_guides/tobj/tobj.md user_guides/visualization/visualization.md user_guides/voxels_wp/voxels_wp.md diff --git a/dox/dev_guides/building/3rdparty/3rdparty_linux.md b/dox/dev_guides/building/3rdparty/3rdparty_linux.md index 6135bfb66e..b7e95b8daa 100644 --- a/dox/dev_guides/building/3rdparty/3rdparty_linux.md +++ b/dox/dev_guides/building/3rdparty/3rdparty_linux.md @@ -16,11 +16,12 @@ There are two types of third-party products, which are necessary to build OCCT: * Mandatory products: * Tcl/Tk 8.5 - 8.6;   - * FreeType 2.4.10 - 2.4.11; + * FreeType 2.4.10 - 2.5.3; * Optional products: * TBB 3.x - 4.x; * gl2ps 1.3.5 - 1.3.8; - * FreeImage 3.14.1 - 3.15.4. + * FreeImage 3.14.1 - 3.16.0; + * VTK 6.1.0. @section dev_guides__building_3rdparty_linux_2 Building Mandatory Third-party Products @@ -104,7 +105,7 @@ Download the necessary archive from http://sourceforge.net/projects/freetype/fil @subsection dev_guides__building_3rdparty_linux_3_1 TBB This third-party product is installed with binaries from the archive that can be downloaded from http://threadingbuildingblocks.org. -Go to the **Download** page, find the release version you need and pick the archive for Linux platform. +Go to the **Download** page, find the release version you need and pick the archive for Linux platform. To install, unpack the downloaded archive of TBB product. @subsection dev_guides__building_3rdparty_linux_3_2 gl2ps @@ -195,56 +196,31 @@ and unpack it. The directory with unpacked sources is further referred to as *F make DESTDIR=FREEIMAGE_INSTALL_DIR install 5. Clean temporary files - - make clean -@subsection dev_guides__building_3rdparty_linux_3_4 OpenCL ICD Loader + make clean -If you have OpenCL SDK (one provided by Apple, AMD, NVIDIA, Intel, or other -vendor) installed on your system, you should find OpenCL headers and -libraries required for building OCCT inside that SDK. +@subsection dev_guides__building_3rdparty_linux_3_4 VTK -Alternatively, you can use OpenCL ICD (Installable Client Driver) Loader -provided by Khronos group. The following describes steps used to build OpenCL -ICD Loader version 1.2.11.0. +You can download VTK sources from http://www.vtk.org/VTK/resources/software.html -1. Download OpenCL ICD Loader sources archive and OpenCL header files from - Khronos OpenCL Registry - http://www.khronos.org/registry/cl/ +### The building procedure: -2. Unpack the archive and put headers in *inc/CL* sub-folder +Download the necessary archive from http://www.vtk.org/VTK/resources/software.html and unpack it. -3. Print *make* in the root of the unpacked archive to compile OpenCL libraries. +1. Install or build *cmake* product from the source file. +2. Start *cmake* in GUI mode with the directory where the source files of *VTK* are located: -4. Create installation folder for OpenCL IDL Loader package and put there: + ccmake VTK_SRC_DIR - 1. OpenCL header files in *include/CL* subfolder + * Press [c] to make the initial configuration + * Define the necessary options in *VTK_INSTALL_PREFIX* + * Press [c] to make the final configuration + * Press [g] to generate Makefile and exit - 2. *libOpenCL.so* (generated in *bin* subfolder of source package) in *lib* subfolder +3. Start the building of VTK: -@section dev_guides__building_3rdparty_linux_4 Installation From Official Repositories + make -@subsection dev_guides__building_3rdparty_linux_4_1 Debian-based distributives +4. Start the installation of gl2ps. Binaries will be installed according to the *VTK_INSTALL_PREFIX* option. -All 3rd-party products required for building of OCCT could be installed -from official repositories. You may install them from console using apt-get utility: - - sudo apt-get install \ - tcllib tklib tcl-dev tk-dev \ - libfreetype-dev \ - libxt-dev libxmu-dev \ - libgl1-mesa-dev \ - libfreeimage-dev \ - libtbb-dev \ - libgl2ps-dev - -To launch binaries built with WOK you need to install C shell and 32-bit libraries on x86_64 distributives: - - sudo apt-get install \ - csh \ - libstdc++5:i386 libxt6:i386 - -Building is possible with any C++ compliant compiler : - - sudo apt-get install \ - g++ + make install diff --git a/dox/dev_guides/building/3rdparty/3rdparty_osx.md b/dox/dev_guides/building/3rdparty/3rdparty_osx.md index 46791570d6..30fb99f3b9 100644 --- a/dox/dev_guides/building/3rdparty/3rdparty_osx.md +++ b/dox/dev_guides/building/3rdparty/3rdparty_osx.md @@ -14,13 +14,12 @@ http://www.opencascade.org/getocc/require/. There are two types of third-party products, which are necessary to build OCCT: * Mandatory products: - * Tcl 8.5, - * Tk 8.5, - * FreeType 2.4.10 + * Tcl/Tk 8.5 - 8.6; + * FreeType 2.4.10 - 2.5.3. * Optional products: - * TBB 3.x or 4.x, - * gl2ps 1.3.5, - * FreeImage 3.14.1 or 3.15.x + * TBB 3.x - 4.x; + * gl2ps 1.3.5 - 1.3.8; + * FreeImage 3.14.1 - 3.16.0 @section dev_guides__building_3rdparty_osx_2 Building Mandatory Third-party Products diff --git a/dox/dev_guides/building/3rdparty/3rdparty_windows.md b/dox/dev_guides/building/3rdparty/3rdparty_windows.md index 007abd5031..48db2701b7 100644 --- a/dox/dev_guides/building/3rdparty/3rdparty_windows.md +++ b/dox/dev_guides/building/3rdparty/3rdparty_windows.md @@ -12,11 +12,12 @@ The links for downloading the third-party products are available on the web site * Mandatory products: * Tcl/Tk 8.5 - 8.6; - * FreeType 2.4.10 - 2.4.11. + * FreeType 2.4.10 - 2.5.3. * Optional products: * TBB 3.x - 4.x; * gl2ps 1.3.5 - 1.3.8; - * FreeImage 3.14.1 -3.15.4. + * FreeImage 3.14.1 -3.16.0; + * VTK 6.1.0. It is recommended to create a separate new folder on your workstation, where you will unpack the downloaded archives of the third-party products, and where you will build these products (for example, *c:\\occ3rdparty*). @@ -299,35 +300,22 @@ http://sourceforge.net/projects/freeimage/files/Source%20Distribution/ As a result, you should have the library files of FreeImage product in *freeimage\\Dist* folder (*FreeImage.dll* and *FreeImage.lib*) and in *freeimage\\Wrapper\\FreeImagePlus\\dist* folder (*FreeImagePlus.dll* and *FreeImagePlus.lib*). -@subsection dev_guides__building_3rdparty_win_opencl OpenCL ICD Loader +@subsection dev_guides__building_3rdparty_win_3_4 VTK -If you have OpenCL SDK (one provided by Apple, AMD, NVIDIA, Intel, or other -vendor) installed on your system, you should find OpenCL headers and -libraries required for building OCCT inside that SDK. +VTK is an open-source, freely available software system for 3D computer graphics, image processing and visualization. VTK Integration Services component provides adaptation functionality for visualization of OCCT topological shapes by means of VTK library. -Alternatively, you can use OpenCL ICD (Installable Client Driver) Loader -provided by Khronos group. The following describes steps used to build OpenCL -ICD Loader version 1.2.11.0. +### The building procedure: -1. Download OpenCL ICD Loader sources archive and OpenCL header files from - Khronos OpenCL Registry - http://www.khronos.org/registry/cl/ +1. Download the necessary archive from http://www.vtk.org/VTK/resources/software.html and unpack it into *3rdparty* folder. -2. Unpack the archive and put headers in *inc/CL* sub-folder + As a result, you will get a folder named, for example, 3rdparty\VTK-6.1.0. -3. Use CMake to generate VS projects for building the library: - - Start CMake-GUI and select OpenCL ICD Loader folder as source path, and the folder of your choice for VS project and intermediate build data; - - Click **Generate**; - - Select the VS version to be used from the ones you have installed (we recommend using VS 2010) and the architecture (32- or 64-bit). + Further in this document, this folder is referred to as *VTK*. -4. Open solution *OPENCL_ICD_LOADER.sln* generated in the build folder. - Though not strictly necessary, we recommend making two changes in the generated projects: - - Add file *OpenCL.rc* to project OpenCL, to have version and Khronos copyright correctly embedded in DLL; - - Change **Runtime library** to **Multi-threaded(/MT)** in the properties of OpenCL project, on **C/C++ / Code Generation** page for Release configuration, to avoid dependency on run-time DLL. - -5. Build project OpenCL in Release mode +2. Use CMake to generate VS projects for building the library: + - Start CMake-GUI and select VTK folder as source path, and the folder of your choice for VS project and intermediate build data. + - Click **Configure**. + - Select the VS version to be used from the ones you have installed (we recommend using VS 2010) and the architecture (32 or 64-bit). + - Generate VS projects with default CMake options. The open solution *VTK.sln* will be generated in the build folder. -6. Create the installation folder for OpenCL IDL Loader package and put there: - - OpenCL header files in *include/CL* subfolder; - - *OpenCL.dll* (generated in *bin/Release* subfolder of the source package) in *bin* subfolder; - - *OpenCL.lib* (generated in *Release* subfolder of the build directory) in *lib* subfolder. +3. Build project VTK in Release mode. diff --git a/dox/dev_guides/building/automake.md b/dox/dev_guides/building/automake.md index 61a64fddbf..3a6166a16d 100644 --- a/dox/dev_guides/building/automake.md +++ b/dox/dev_guides/building/automake.md @@ -46,13 +46,13 @@ To prevent this, it is suggested to make links: * --with-freeimage= defines the location of installed **FreeImage** product; * --with-tbb-include= defines the location of *tbb.h*; * --with-tbb-library= defines the location of *libtbb.so*; - * --with-opencl-include= defines the location of *cl.h*; - * --with-opencl-library= defines the location of *libOpenCL.so*; + * --with-vtk-include= defines the location of VTK includes; + * --with-vtk-library= defines the location of VTK libraries; * --enable-debug= yes: includes debug information, no: does not include debug information; * --enable-production= yes: switches code optimization, no: switches off code optimization; * --disable-draw allows OCCT building without Draw. - If location of **FreeImage, TBB, gl2ps** or **OpenCL** is not specified, OCCT will be built without these optional libraries. + If location of **FreeImage, TBB, gl2ps** or **VTK** is not specified, OCCT will be built without these optional libraries. Attention: 64-bit platforms are detected automatically. @@ -60,7 +60,7 @@ To prevent this, it is suggested to make links: Example: - \> ./configure -prefix=/PRODUCTS/occt-6.5.5 --with-tcl=/PRODUCTS/tcltk-8.5.8/lib --with-tk=/PRODUCTS/tcltk-8.5.8/lib --with-freetype=/PRODUCTS/freetype-2.4.10 --with-gl2ps=/PRODUCTS/gl2ps-1.3.5 --with-freeimage=/PRODUCTS/freeimage-3.14.1 --with-tbb-include=/PRODUCTS/tbb30_018oss/include --with-tbb-library=/PRODUCTS/tbb30_018oss/lib/ia32/cc4.1.0_libc2.4_kernel2.6.16.21 --with-opencl-include=/PRODUCTS/opencl-icd-1.2.11.0/include --with-opencl-library=/PRODUCTS/opencl-icd-1.2.11.0/lib + \> ./configure -prefix=/PRODUCTS/occt-6.5.5 --with-tcl=/PRODUCTS/tcltk-8.5.8/lib --with-tk=/PRODUCTS/tcltk-8.5.8/lib --with-freetype=/PRODUCTS/freetype-2.4.10 --with-gl2ps=/PRODUCTS/gl2ps-1.3.5 --with-freeimage=/PRODUCTS/freeimage-3.14.1 --with-tbb-include=/PRODUCTS/tbb30_018oss/include --with-tbb-library=/PRODUCTS/tbb30_018oss/lib/ia32/cc4.1.0_libc2.4_kernel2.6.16.21 -–with-vtk-include=/PRODUCTS/VTK-6.1.0/include/vtk-6.1 –with-vtk-library=/PRODUCTS/ /VTK-6.1.0//lib 3.If configure exits successfully, you can build OCCT with *make* command. diff --git a/dox/overview/images/overview_3rdparty.png b/dox/overview/images/overview_3rdparty.png index 0ccf41e392bc0e487b1136012aae957877b5deef..4943d782c57bf6b3c416dbcf949dd3aee4c8d9ed 100644 GIT binary patch delta 6667 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 delta 5935 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 RfB*mh002ovPDHLkV1jLPZ!-V@ diff --git a/dox/overview/images/overview_installation.png b/dox/overview/images/overview_installation.png index 7e3b8f907df5dfd6040c7bbaa7f2678d8df64676..77864db057ab9020c1b58918e1c1f9251c9601c2 100644 GIT binary patch literal 9687 zcmajFbx@m6)b|}AxJ!}Z?gfIoQ=m8$in|qecZwE=6o*1_cej=j+^skSio5%h{_gjl zdFT1(naq`B&s^E;p6@xIJ;`pgn#y}jw6|yg002`#UPc4BEykV%|c7~bAZM8nROFKC@SUS4HngD>btEH*Cr3ICjt-B4?dj(}Ri+7gD000$0 zK}J%`d+9hp*O_eB;;MAdBX9MiWH(lj1H`!inKhpUTX*mW!G|O=q4PINy2;G3KV%fc>BC|r#!Vm? zNDbF(KEzk~*2TA7*5f)~q*T3BRd4racEw+Bg92V;x@m^a07Ld9gW!<(Y4QB4o05G0 zad61X8r_3mN|WVv^MFV60{0v@UQOT|@}8?GD7PX?s9Fb4hB!h#Y4kYuau1KCskb+A zQJSvBJF(4|uLdOg&zo2KGl1aH!=RHBiAZcpBtYu7HCHbx#O2%7!?BS1%Tt;DMYO++ zJtt!!Xl~y=kCbVlm1&hXldTk4f=C9RNGjK!iuY?sDQs+PP!=X$(f^jL0|6+Z8(ZIZ za-~5{h^`k1;~Wn5_89g)Z@6pn+}&+o?vh6H;5uA~bL!ws1OpH+byQ^ODB|McBrWn} zJr7t<;@E3-f3&x>^LxI(uui;3y+w}EJ`?x5VY7I_7`{|(6`l;ZU5&iA+pTlI7Vqq6 zoU?ny&bkTeTi&RNPvpXSQB0}AdYQ6Wm?nz%bIUh#9Ekmpl9U+uxdU!epb%Kyb=4I` z;&&5QGw;*vW#8bnJLtNfK{vezHMF*Nf_JR>9*J{JMcJV@p|o4$ZHUvQ3U`1Th$0F zK0aYK(LAy_8s4QIBk&qZKa8OU54DOsX|lhP&Q;#_NI#qT7xUH3%J*nx3c)zg!w z9Uc_F+eYr%pD_JRbuNh_yy&g8j6qf)M*2ZLsjwjyi8r_3%Rezxkg1n-^Eb6bPC7W;$W;`VRL&X;Jwsx~i6 zJ_N4l%CurCWOFHyz>!`C`=e*}S|zR(eLjAEoz+@XBFCpKdX%S_YRyNN$E}^&ncY`n zv->uiY_-5mA@FW-l8=MICHVfj@%JHEmS#u?r;X0|Z|<+Fi3!v7z67CZGGDXr(b1?P zcN<{GK6$XAP-rUSy-)}&B{8>f z%#ecE(BB8*V`eh)@bLV|+J02#=@%bzI%;c1{Ih|Ya{94(k7dY-w7!q~OC!?W8`7xBbDdhGQ6@88 z>NZ#<7S{G5FIFyepi=D1mog%%p@LJN#uHRbZ0riq0I3N&_hRksNJx&-463q<$~?GX zpLGM##PWb6OCC}DvfxgjNl4vqclujWq7l|Y*@D9&TsLRj^j4a)s*SyUWu_q5wUj_7 zaiY^~Z_y|&Y%lO~vCbS2oYrQC7RLk>;bB-Q~-z#3zj)8yoqy$){hS&7qnjCiPHxc@FdaW2f+4 z>BBHjRQDT)_YW5hr35p5ARFHnd-_X(`h}o~D&*IY+u$b*#h!=rbPxs{glWE9HnQ!nZW696Tt8-W8t_!O< z6+u5+nuY%JgIceHZd$}<%;jCfy(+)#uG)0M;cica;jg?>&5wwiv#Hy{fy3nrFC+4v zKsyP9e%`ZaVN!w}XVBC#VMxhJJeAz_T&0yG_ly#pE@0g@z=D zTcNz%!My1O!cf^9r};(GlU(fC)lvA@bbs3U?f`*-S{zCSV-mNfU)ztqQp4#LxG6Ov z4o1ba)#?7?7X`#Dq<7r%JvRyvOIy(%OMsezp`7VW!E(jz-*6a-OcZ@8$BiZf>O09W z_?~Z`=7^}HX;=(e94}2Q?MDv~BwWdFRmh3jR5nmE4ck;k#w}-JM+$0=^kCX@x%iO>vhkwFAeg> zfrR>=CkQ$!(s%_faHmVj{Z-l9cf#7;c@{tuvn?P08&$E0phpPf!J2{92SEa`V}XVN zoPN5b*d-d@$?NBtif4?)BLB&_D9l7LkFi zt4+*Lk=$?LLCH*%-sS8Rbzxp~_|bB1WHt` zRkD4nCc8_HLa)aTE^*;#jST7an-2Dhs<6@#e47&?5J;oqv*t*5D+neM6Orp&Z;n_= z#mhXm5)MK3gy=j=>OSV|Ajb+ob1>9=cmqGy#A0JFP50>$;o;Pur?^cr%1=M}$|jn4 z)>H0ciwYEk1o(%=sfJBM;+02=(N{B?NtdWe6eM=0!dWyr1%UqW_r^>_SVW6mDz3Ih z83oUy&8wsDHDkIzTXehH)U+TqPYRE@Zq?Xm|R>wrgrVcnPMf0991@@D z63k-T1M+K9T>3`Tw_S3mILPBFs+UVpqK=6+EjdZf?m)-5f<2iD>?)L*VwbGp&yzRM zaV6&^@$b#s#%|l1LZ;BH|a9cMQDD4ustMSn|_a39{Cq? z6QATMle)b(4Lkl-)lX!Sw|i%szmyFzMX$TafAtU9G@DPZ=qG$GKMnIej}LY44C6_< zDXvvqf`|&}5C7oxyChWbtNJPw|EI|TyIygr!iVbGbwwmLv~j`x{W8hW2~kv|j;Wbh zLA4BU!{DP+qfyPM41s*$GM5bu*y&P)+&acTi!n*3=GZrI|1Nu9Oj1DD)4_a$@*5=k zN=w+&V&!Av9=xHSf9quowm9Vf{w-?($|$}@OX}gghDU24VjpuQk4&1ENW1aX^(_2e zFw09_B#O8nd`}gJqpax1+evkyza(LVbMH{1ZvT-cFVvk=vb`zVU$y!f347JU0LYloUv5RAF7qw>=^L)1dTF-POEgl-DNeX6~9FkiBcKaRwX z%jYwx07@Cry~zhNqtesoOd7UiL(C4DK!bt3vI<-+R=FJ)w%(WrvG~(UUo)zX9|76! zQn?~#mpaBWd;y5bOrb=d2hu@I$#oX0 zB2mlf5F}fTr3J=did2a0esu)Vj*Fh2?WwE}nW#sAK|~%*MoF*6#-wa#aRBo%T&vE~ zp*pz>p4&rl<3g4yhf0;cMe5D$oXxHFS9!lTPvy2wMQ@$iFt$GqWw*Ku%iF3-E)|7b zyvYP=EJ#$UpzN^*l8S~=LKGk9_|^hBgoHY%oMpFn9+x2k1%1G##j~o2=+a!U zx?ZVr?>bVNFlioBOE@=)j;-ZlnG zfAV|#RV=HjhGe%z+#9FoW-aM~+=tL!Fk$XXo`eOu37RczF_14fym7rBAWpNn z+=1*DqnQMO*7{dF?>J*j5gw45jcaCzl-$8=@T3<*983K@C9{9*V?RPh+3I`_yUR=P-&fjTJgl;^|3vPr66Zik@{t4jHA19rId?eEIG-==K(YYa+Gx+c#?G zioIjWN1yTjeqcmoebTz9cl4c@|`dXt=MJ zIzhlBR>`fAW9w|q5*1S)pSCqlA(_rYD<1fv@3a#cnVA|Ma!t{9UPkx$W9WRDrBi#n zC!Ak*^t7nX*wn_unAb{i&uMf*={!mQiunpA=sLv7lfDOAk_k9Vr12i&pQ}*NcNH|4 z(#1A^z3fF8%ix53q;k`B-gz@fgRFZ{Nzv+;b)3RAQf{6>y$cfmd9~9c`&#|_B>*|7 z#qxseKuj%yOijWu2A^H2z2hcZn_<;~WOt>_?XAP(LxEI#L(!ib?(wTDcl?@_;U68x zkb}LcLhq}o_lF>hiXR<>WfYbLt2ZQZ2?@{-#t+jEg%)A%3l%B2AFJxwp+|ojkWc;A z9}njLP_K@)W5kV^T0xrQW^9OiDfTHM-yv8Irc$T46gZI4EGkO?J916^X%@#aU(?-1 zs&J3wc+;zJj;*#kDdpT$bwAN9#(l=o8_Fgf@?rsGD%}m{Y?yAWPHW%cG1gF zy6tzWfqk_(%qVKlb zzq>ra?6Yb47#Sc7kV@+Sb?7QkrZx=4^FuBavCmPa8Nw%h(@utgdxW$a-fA&WJa8Un zlJLRmNI;q)G)ID@z9M*qKsw4~0eQ}Z-+p<4Xt^87FJ%{}&k@IsY~Cb+wC-fDuHfyF z+`xH0nNoJW#ro%3I}b`dqdaL6P{>zknM;%jKOF86OSXWE*(xU-&XKwzF=iY$2o##a zs9G+RdxPS+)3a8eq+TE~$QXygEhMxw8!(x5r`0lID$&Rf_K(ga+JAZ28TrNwvN!~G zEXO3NZ{#?vzGd7oIT}|ZC}PV*@%%3a9Y?3WGHZnyQfh?-U>cP!L9c|&H+UCGvu>F1 zO+w~PyrxUg+%#q->}vJLq6%p=Q9F@3(u59ug>v)b2)!{qD*}p{Z2Xx1Mc z?7A!b?38g5247O{*`>r^u8}6eD9Af(T)?yzKTB7lF1?qMEvK6+m6EOTPnt6XSItqX z|D+*pK0b^!N{fqD1nsT4iD);yXC`rXAZxKSuXN<6SsE*Lb3KSYv1YyqHd(kJ?0WYl z<;RrmZGY45nLVPCq;f4$`6_ZwJ=bRqLp$9O6YZ1EwUK5=ijNDqP#r_hj{f$fd5A4W z;s5A*^;H_!ff{8J*#h(?r|btO^`!eG_#K?K+NO!s}B}pz513 z5`^h(V;Q;{Ksf)?(wydfZA+?)p3l~dJkC*-9T~F6AE*Wk0|6|A0$7I=nWY(^;dW#! zxaROIxCrHajzexMiTlH^;OwHoDm}xT^?nx>RhaG&A6HFHsCSWef*qXfdlFDu6t!B! zk!?-(=UUQW20=pvW!JaUbR{lBsR%jSJdSc`7Rj1jK+c0zv~@;72dy&JIq;T5{iE1W zSuS1^OFZ&wQ$5KytJwd+bCfhed1l=V4kbLn$HqLrV?T6h;7 z^5jzP2z!c^0J_2<|Hw;?6^5{v^X zGDdOlo4P{*3LA-gpWq?dRA{nM*?{K62)f!tAYrrxyushRsX8e3pn2wz&8u)n3xf+c z>!y|Vv}ii4e8Lm%zuFOuDe{oEJ z>z!)b4^Vyfa!@EYd~Kp1x)J~=)yN(`GMkRMy?Q)xiEtT_Gl<_F{AQWB?n#iCJhRU= zPh{Jrc1}B>)DP)xz!8+#_O6vhs_&Nu1FtIUNRq#lRGzoY=B?*`I}o#D=RYyu5&pc= zBpThaOTP*|aA{4 z?AL3sIX>~?O6w-0`erdI~1|_wo)}4xw680dJoe9aP!*2tF>0(%IwOCe( z7ndUAb15Xi)FYrtAK@SDkyMWNrO*`nCJ0h~#LCxcwmrb!hzdd-9{$q6T5x5sT+~01A1I;bDfDj*R02 z9@6Op+iDtdA0(uwiG?*9Oa5oY-kLyom7jP5uqP_7=Ye*#ix&=7TbQ^e-ho<&MONcH z-EteOC+54%3nKKYXcXWr%7F3A(gedet6oCJ}*1Y@;2X?pChBr}TU|Ir(wYI2NZeb=MvLhp+I~e{cxi zo#MCc00hDXqrDbT2~*Z*2z+UxC|LRK2?!67(2C$f+yA`HJpSEofmZpH%a%fu9^cL# zxP$0b7z2pQ>||0fH2=o4{QNUg{K<68tEI8G0Yh!L3ft8A4GKJV2&`J7KidIWl=&7? zb|*rJIuJi3LF^sHTqB}{63Cqm5Y4FdNq^$_6c3BkbUiXu$U}Sf?lHEjpPOkCKH^ra zPJ~CDiNI&cn(ouMHgK4Gobz&S9WQq877{PL2D&>es(4Wih+rp$10mzm@J>=ZZWJTR z%dmp=-b)GbI(nAD{q|Le590-CRnRq;Mdl>}Q}Ved@^O1@A5|ERV|0}DKMs_mYD6&F*SsRu~aHHg;2|T0T zcbO)7MyqriZ%$9+vg>r|B^%52R6LboW^x52_d!$b=#$m$iP`$BMiZ_qLh^Ki4hrhyJ-rd zOD!2J{8^@1k|v&ghPsqq4Qf&vLVt9L$*7gQ6P&bZ`4hKxX21dG4#71QT)~ae(QCX`#?$90_dGcgK ztl>JfaT!bae-CqAgNv-%$NQo3C1Vu8K3d>UL?$0iX<27q;t5Ylf^kg+a zDTAXW^!bU`%sQU0vu~Jy=t$6-5-hrHHBw%?I)Zj4m$uea{;NXv_+V$?83j&Al_30B zF9~Av0O)wcRSJ#FqoYP$))&yllKQ3e)6D&Mr#rsgJn*_*{}5%tO=m8g(QnWFlR`9*N9MAvG012UYk zf>im@+E4XJSb&lK=VE`SSP7VKsbi8NfoB9hJUINYhFKD047_)jgWM=L^^a`Eufr#C zNySqNZ(D3X29(IZaovtC0IbE#sL!5rR?x$V^qE#GzDAA%0OOdA<9~$fOjEEzr4~}vLOgT4pcIq41I@8>sA=mv_{`{1qo_tsEbH6KuE7r2#ef!f)9?T*F*m z6uFkc8jb-rp%taTGrT)jl8el}=S_4U|GF$kKEa8%0@d(!iB&!yK^Y`<{CCxdYjwwllU~WbKkV>Wp$fVyGmux6S=@@BLFs_U=|Tq)MUp4?#b)a zAMaV1vi7<$tBOBXNV_mO?Rm*XARH$C43jcUr*aYO5Lb$z|DnrF_5Vi~sl~Ld>jMy} z1MU6ia2nN5XWV%n7Dp zn^7jQZhK4DD0EX6hWU%xm#?IXGOqs0|vO6>E7z`OM#AKk@vULj+%@~5NFd6_ z9Q0${4`XQal8+6_%A6ZmujPlgjj(R@s^Iyz` z!V<@yOcIu1JUNWz@ZQr*kY3o#5zn?cxh8ym67=Gm9f_EtZID8eDjjJ*yFOO`DeAr;sjWU44HXf8t&R&(NDg&fm zYqPfDlL4{C6@HHHs1_F5)v7FZ*L!2y%MNVJi@D#HKUyga8a~$DuJsgj;6+*pqC{kb zA8(5QrBW_&ekq}Vck5Oxk^s5c5N4R(h90{p3IM03LkFHF+N4M^;R)DZb8>QWoFXEX z-f_yKVKOW{ddX z0i4gbWC6WNwC{Otuk`>sdr^P7jm6 zjwSWB0$xNmAzd!FHvA$6A*tbx_+QPCtR@zrtewg;N|(yGOWm0C&s|hFp^zYi$2zz= UR;^&vf9I(bWL0FUrA$Kq4?b_9p8x;= literal 4705 zcmbVQ3pmsJ|5r{#k&t%q;{D0?neV+gGf8NiYeLmlPxA*7seZMa6&l3J-V<99cEy%;e zBV>8S3lfC-G zL0lH6EomlXox6d3*J}9rDJW1I@>yAX5N_IaNm98)X-e)r*lYB*_TawDHu>=vwH0Ab zfoBzc;svhLQuS&volu8h;lkU)+j_>m$o^43lg8fC5--dbJF3Iz*BNp?%lW7&gqD2K zX;ZD91y zH@6Bc($ZQA3n%5a=it*O6#usH&DEJ!-T2y4&T2ZWJamlHh-_HRS=?T)i`?4WfJbN7 z%N)2@b+hN1apb0u$&h1L;pU31Ri44kXC-NcyWe`dZ06_kvhxPtET`S>H7dV9Bhfa4 z@OYs&++jn?cG49fohEEYMVG1Fk7}$;e?+|z^*csUaZH1&WYab?Ha6DPWi$6wsAGti z$Q$mx(lK17Cu%H{Lmz~;eG))|C-pYpfZFjcyKfe79ZN zSgUq3h@?Ub3;eJ+vb4LC`xV(KN`zF!&=odHV)@e+3pO1OxTo%3K#U_N9nDX5xm9Le z>U#pQF+Lx;wzC2ZdId7ok>@&spPdfPy<${}zLvDXM zG;J~w%k_^96>h|Ib@rwEp`xSReIot+wRZ!tSly8OV8gd%DvM-27L*s;1&w*rwV#*) zGZmB2CT`;|-KqMF7VhiII=-Q$@tSXy=fdX`l85m$i&_b8wZini~NppErDmlB))0C+mx{-+tXtZUYZdt zQ)k6r534Pw{(fa{>f0`C#lbp*AXsSuS19kVJJ&gPwmx6rYg~7u669Jsp_%He%ZWhR+&qp#S~-|~Q|$PW??U%#lBylfSE z<=o>kUw7G7csxlMx3e{{WUzZquOKR9a$ulwy)`!3WRic_kx*3Cbp7Yk_kdUm=T>`2 zCBc;wPrGH;lqbTKLuFglM0Ju4xr}cSC;LaikKoFWfX_}7E>LwGp!!7QkT=*a)Gb?8 zJ)rD}afNrrfG;`8=nnco*}2WPFR^CGaCEDZCQOJaP1TVcz{WM6fBvx2-p@^_`lguHV18$C9*cG#tb|J2$$O*CPFexM=uaem%n(oj@{>6e z8T34hC5H3mm7(WeDk>^N!3LYH{BGI#4gI}UaZ%`Mla{jlnM4V#e51R|oPJ`T7jQEo z*l(1=onaPcX}Lc;Y*$~ce~cP3Kit;V))IH5z$98$uJCicP6kU8`dRfxnW}U3w?{|2 zUCBumZq%^puDq?aML8Ln$cr_(@Y>(RoM5M{ZwEZPkp4<3!Klp8aTvZGkTa zqZm*Qt%SO4k8yh6aKg7}_qMEIO*j3xXd!A#}3AjFM2yLj=dy&)7*$jHSCi)*kR zkjuAi^$8WrV?GC&j1USmvVOQNT?A>2M^(f?`0RR`!p(mm?8S%crKj$oo8u=kEQypm z=)h^adYw~WOXVt|t0mx0`6r(;@_Ks%o~p2*jBxaX39p}He=D%Lnj|>usx4{B%sL!h zrl-$INEm-k9IpXWs^O0BMMX`L^%F~XaX0LdG*peNg-(bm=A$HeP|Z5bb7KBYn*%cR zJdzE%R|=pi!*Bu>Gjs^dLzz@qRdU{M|5Q(sTB@n;Em zR8P6)_rXLw#en7{wIN$r(Ftw}|EQNzDu*S#V`tcpK57GQehKD$0HuxkLxbOgL`@>V zw4wvp!-NOlv)nrk*K+$$SxW1u>ZpS5D}i*%EgYJeu>^LV?f@@66l6=96{ZRnWd*U30iLTcb2Ezd*-4@IEmKm8@?sD3;;KJzO;FSsc z;(4uyNFmfp8^C@@GoMdB#s`fnIAdU z_S?iPbGWl=W;MM?9RS2n4s`MV#D_5aD)x9gjs zT5YU^9-=eel|Y_pzcq4A4%4Tlw(UoxgZ zE|fZ}oZ#S)QVb6>knI#`gN|cRrkR`$@Nate_q3wiB?V&sfN(_+HfL)t=@&=uqy?aR zo11$p+=C^N&Ei@Xn&2`^G+{Lg(D8*_7UvA*Eo&|Nh%`E3Vv;6!?HLo_SJ z_oz_7Y8dr6L5vGJ@8TBu(h@zF`5e)QP+%x2%5d$7!Q@+Q6%BzhjpS1h&O#RJWhhxR+jsTRV|M48k#Zi2)eh9W?nA=ekyVpUGF8%-o#ZJ-BTj z*DaIDcdiT>V7SA-ZBt(H8qnJ{3|vI=B*iLs0iAt8&FgSyk$q-ycG-Rgq6BV^Tdj5# z^oAX4UwU8d*36wj7%ifuVxPP)fU_Q1Iw^>&nE8BY*BRf3{q$=vfkPQ-*Fk8Xk0MW? zk_<=NVZ~+c2>wK^r>Twd^BRr)qQTTGbW>vHeOR_pVn=9Ivl=!}+NiKCL^18x-0Qe1 z)*pKjQ3^&#d?JsNIeKl1D@zVw+_;4)j`xlS1#{3F%6i9v2(fkI9}tb zn-jORtXJiN^#P-KaFpz=)gF6WHc=9d@Eha^fvKY8TUzZT{baB9iX+{09R|!6NA;T3 ze>=A&SGW*{QyMV+(vD%C@Z419&_FJOF3{f};>U=9*S-WhGeByC{_2f&_&Fi4Pbozy z94D6BFIaohg)`-diBEtiYXH8yaPc}Wp!-i+^aXS8LzI&MY5|=rWUrG2`3NzG!*QlH z6YGnRwpHUUqNXvRf58+Nw8=3gbRu1xlmy~}tTW!)zZFyM__7_j%wFzw=cz68#EF|gcs5URV0 z&#>!ssJnzsqMn&mc?6_i*>n59x60O^iq(Db>V%iq0eket1NLY@(lh&_s{FWgx5D%7 z-Tq=C(8tJ99>pd*6zK}e#T&Xxy;@KeKTr5utE+pmAxAay1FuNbg?PhxRW`QHrhEZm z6eOmw(^lGB;RzXSfz_2OiirddJE*(!@fNjY*g5*Q{L!)-04;kD4CHUNs0oY}w0als(HvA&{+vj%KgtHtevV*7c!e z9esA-amBeJm>G56B3tnXdzHN}_DOPU<mc|9bPdu}NHuq{cN@cnFC;|l0!dN!~6nT*&ZRO>6Be5*$1-11yV zrmA4EJbgLIemeA_+rMd}`MkxDDaBe;=KB%z!C@@Pk2}QoaBVfYvHn)m(34rFRY%qP z3QZd&F6VhnR*_~rMTZ7cssdq2InU1k00&GyJ-*)S`&r2<*OjX7#5b8im;dMEQjLHN zokB9Ox2;*Fs$b*s#b*l2&;k4pr>Jizxj1b)NkN9&bxPWnQ(^%Bmyn?otS;k5-VaIj zowDovvz diff --git a/dox/overview/overview.md b/dox/overview/overview.md index 12c94e6b63..a2f39328d4 100644 --- a/dox/overview/overview.md +++ b/dox/overview/overview.md @@ -117,14 +117,7 @@ implementation of 3D viewer. OpenGL specification is developed by the Khronos group, http://www.khronos.org/opengl/. OCCT code includes header file *glext.h* obtained from Khronos web site. -**OpenCL** (Open Computing Language) is open, royalty-free standard for -cross-platform, parallel programming of modern processors, optionally used by -OCCT for ray tracing. OpenCL specification is developed by the -Khronos group, http://www.khronos.org/opencl/. The implementations of OpenCL -are available from Apple, AMD, NVIDIA, Intel, and other vendors. -**OpenCL Installable Client Driver (ICD) Loader** is a library provided by -Khronos group which allows dispatching OpenCL calls to underlying -implementation. +**VTK** - The **Visualization Toolkit (VTK)** is an open-source, freely available software system for 3D computer graphics, image processing and visualization. OCCT VIS component provides adaptation functionality for visualization of OCCT topological shapes by means of VTK library. If you need further information on VTK, please, refer to VTK Homepage http://www.vtk.org/. **Doxygen** developed by Dimitri van Heesch is open source documentation system for C++, C, Java, Objective-C, Python, IDL, PHP and C#. This product is used in Open CASCADE Technology @@ -235,12 +228,12 @@ for which OCCT is certified to work. | Graphic library | OpenGL 1.1+ (OpenGL 2.1+ is recommended)| | C++ | GNU gcc 4.0. - 4.7.3. | | TCL (for testing tools) | Tcltk 8.5 or 8.6 http://www.tcl.tk/software/tcltk/download.html | -| Qt (for demonstration tools) | Qt 4.6.2 http://qt-project.org/downloads | -| Freetype (for text rendering) | freetype-2.4.11 http://sourceforge.net/projects/freetype/files/ | -| FreeImage (optional, for support of common 2D graphic formats) | FreeImage 3.15.4 http://sourceforge.net/projects/freeimage/files | +| Qt (for demonstration tools) | Qt 4.8.6 http://qt-project.org/downloads | +| Freetype (for text rendering) | freetype-2.5.3 http://sourceforge.net/projects/freetype/files/ | +| FreeImage (optional, for support of common 2D graphic formats) | FreeImage 3.16.0 http://sourceforge.net/projects/freeimage/files | | gl2ps (optional, for export contents of OCCT viewer to vector graphic files) | gl2ps-1.3.8 http://geuz.org/gl2ps/ | | Intel TBB (optional, for multithreaded algorithms) | TBB 3.x or 4.x http://www.threadingbuildingblocks.org/ | -| OpenCL (optional, for ray tracing visualization) | OpenCL SDK (usually one provided by vendor of your graphic card) or OpenCL ICD Loader by Khronos group, http://www.khronos.org/registry/cl | +| VTK (for VTK Integration Services | VTK 6.1.0 http://www.vtk.org/VTK/resources/software.html | * Debian 60 64 bit is a platform used for regular testing of contributions @@ -253,13 +246,13 @@ for which OCCT is certified to work. | Video card | See \ref overview_req_graphics | | Graphic library | OpenGL 1.1+ (OpenGL 2.1+ is recommended)| | C++ | Microsoft Visual Studio: 2005 SP1, 2008 SP1\*, 2010 SP1, 2012 Update 3, 2013
Intel C++ Composer XE 2013 SP1 | -| TCL (for testing tools) | Tcl/Tk 8.5 or 8.6 http://www.tcl/tk/software/tcltk/download.html | -| Qt (for demonstration tools) | Qt 4.6.2 http://qt-project.org/downloads | -| Freetype (OCCT Text rendering) | freetype-2.4.11 http://sourceforge.net/projects/freetype/files/ | -| FreeImage (Support of common graphic formats) | FreeImage 3.15.4 http://sourceforge.net/projects/freeimage/files | +| TCL (for testing tools) | Tcl/Tk 8.5 or 8.6 http://www.tcl.tk/software/tcltk/download.html | +| Qt (for demonstration tools) | Qt 4.8.6 http://qt-project.org/downloads | +| Freetype (OCCT Text rendering) | freetype-2.5.3 http://sourceforge.net/projects/freetype/files/ | +| FreeImage (Support of common graphic formats) | FreeImage 3.16.0 http://sourceforge.net/projects/freeimage/files | | gl2ps (Export contents of OCCT viewer to vector graphic file) | gl2ps-1.3.8 http://geuz.org/gl2ps/ | | Intel TBB (optional, for multithreaded algorithms) | TBB 3.x or 4.x http://www.threadingbuildingblocks.org/ | -| OpenCL (optional, for ray tracing visualization) | OpenCL SDK (usually one provided by vendor of your graphic card) or OpenCL ICD Loader by Khronos group, http://www.khronos.org/registry/cl | +| VTK (for VTK Integration Services | VTK 6.1.0 http://www.vtk.org/VTK/resources/software.html | * VC++ 10 32-bit is used for certification of contributions and for building binary package of official release of OCCT on Windows. @@ -274,19 +267,18 @@ for which OCCT is certified to work. | Graphic library | OpenGL 1.1+ (OpenGL 2.1+ is recommended)| | C++ | XCode 3.2 or newer (4.x is recommended) | | TCL (for testing tools) | Tcltk 8.5 or 8.6 http://www.tcl.tk/software/tcltk/download.html | -| Qt (for demonstration tools) | Qt 4.6.2 http://qt-project.org/downloads | -| Freetype (OCCT Text rendering) | freetype-2.4.11 http://sourceforge.net/projects/freetype/files/ | -| FreeImage (Support of common graphic formats) | FreeImage 3.15.4 http://sourceforge.net/projects/freeimage/files | +| Qt (for demonstration tools) | Qt 4.8.6 http://qt-project.org/downloads | +| Freetype (OCCT Text rendering) | freetype-2.5.3 http://sourceforge.net/projects/freetype/files/ | +| FreeImage (Support of common graphic formats) | FreeImage 3.16.0 http://sourceforge.net/projects/freeimage/files | | gl2ps (Export contents of OCCT viewer to vector graphic file) | gl2ps-1.3.8 http://geuz.org/gl2ps/ | | Intel TBB (optional, for multithreaded algorithms) | TBB 3.x or 4.x http://www.threadingbuildingblocks.org/ | -| OpenCL (optional, for ray tracing visualization) | Native OpenCL 1.2.8 | @subsection OCCT_OVW_SECTION_5_4 Android | Operating System | Android 4.0.4+ | | ----- | ----- | | Minimum memory | 512 MB, 1 GB recommended | -| Freetype (for text rendering) | freetype-2.4.11 http://sourceforge.net/projects/freetype/files/ | +| Freetype (for text rendering) | freetype-2.5.3 http://sourceforge.net/projects/freetype/files/ | @subsection overview_req_graphics Graphic cards @@ -319,7 +311,7 @@ building OCCT from sources on supported platforms. @subsection OCCT_OVW_SECTION_4_1 Using Windows installer On Windows Open CASCADE Technology can be installed with binaries precompiled by -Visual C++ 2008 with installation procedure. +Visual C++ 2010 with installation procedure. **Recommendation:** @@ -345,14 +337,14 @@ When the installation is complete, you will find the directories for 3rd party p @image html /overview/images/overview_3rdparty.png @image latex /overview/images/overview_3rdparty.png -The contents of the OCCT-6.7.0 directory (called further "OCCT root", or $CASROOT) are as follows: +The contents of the OCCT-6.8.0 directory (called further "OCCT root", or $CASROOT) are as follows: @image html /overview/images/overview_installation.png "The directory tree" @image latex /overview/images/overview_installation.png "The directory tree" * **adm** This folder contains administration files, which allow rebuilding OCCT; * **adm/cmake** This folder contains files of CMake building procedure; - * **adm/msvc** This folder contains Visual Studio projects for Visual C++ 2005, 2008 and 2010, which allow rebuilding OCCT under Windows platform in 32 and 64-bit mode; + * **adm/msvc** This folder contains Visual Studio projects for Visual C++ 2005, 2008, 2010, 2012 and 2013 which allow rebuilding OCCT under Windows platform in 32 and 64-bit mode; * **data** This folder contains CAD files in different formats, which can be used to test the OCCT functionality; * **doc** This folder contains OCCT documentation in HTML and PDF format; * **dox** This folder contains sources of OCCT documentation in plain text (MarkDown) format; @@ -361,7 +353,7 @@ The contents of the OCCT-6.7.0 directory (called further "OCCT root", or $CASROO * **samples** This folder contains sample applications. * **src** This folder contains OCCT source files. They are organized in folders, one per development unit; * **tests** This folder contains scripts for OCCT testing. - * **win32/vc9** This folder contains executable and library files built in optimize mode for Windows platform by Visual C++ 2008; + * **win32/vc10** This folder contains executable and library files built in optimize mode for Windows platform by Visual C++ 2010; @section OCCT_OVW_SECTION_4_2 Environment Variables @@ -392,7 +384,6 @@ The scripts are located in the OCCT root folder. ### Description of system variables: - * **CASROOT** is used to define the root directory of Open CASCADE Technology; * **PATH** is required to define the path to OCCT binaries and 3rdparty folder; * **LD_LIBRARY_PATH** is required to define the path to OCCT libraries (on UNIX platforms only); @@ -625,7 +616,7 @@ Export: See \subpage samples_csharp_occt "Readme" for details. -Also there is an other C# example with the same functionality which demonstrates integration of Direct3D Viewer into .NET applications using WPF front end. +There is also another C# example with the same functionality, which demonstrates the integration of Direct3D Viewer into .NET applications using WPF front end. See \subpage samples_csharp_direct3d "Readme" for details. diff --git a/dox/user_guides/draw_test_harness.md b/dox/user_guides/draw_test_harness/draw_test_harness.md similarity index 93% rename from dox/user_guides/draw_test_harness.md rename to dox/user_guides/draw_test_harness/draw_test_harness.md index de77550c32..2e99346874 100644 --- a/dox/user_guides/draw_test_harness.md +++ b/dox/user_guides/draw_test_harness/draw_test_harness.md @@ -1,15 +1,13 @@ -Draw Test Harness {#occt_user_guides__test_harness} +Draw Test Harness {#occt_user_guides__test_harness} =============================== @tableofcontents @section occt_draw_1 Introduction -This manual explains how to use Draw, the test harness for Open CASCADE Technology (**OCCT**). It provides basic documentation on using Draw. For advanced information on Draw and its applications, see our offerings on our web site at
http://www.opencascade.org/support/training - +This manual explains how to use Draw, the test harness for Open CASCADE Technology (**OCCT**). Draw is a command interpreter based on TCL and a graphical system used to test and demonstrate Open CASCADE Technology modeling libraries. - @subsection occt_draw_1_1 Overview Draw is a test harness for Open CASCADE Technology. It provides a flexible and easy to use means of testing and demonstrating the OCCT modeling libraries. @@ -1483,6 +1481,54 @@ If no shape is specified through the command arguments, the given HLR algorithm_ **Note** that this command works with instances of *AIS_Shape* or derived classes only, other interactive object types are ignored. +@subsubsection occt_draw_4_2_21 vcamera + +Syntax: +~~~~~ +vcamera +~~~~~ + +Manages camera parameters. + +**Example:** +~~~~~ +vinit +box b 10 10 10 +vdisplay b +vfit +vcamera -persp +~~~~~ + +@subsubsection occt_draw_4_2_22 vstereo + +Syntax: +~~~~~ +vstereo [0:1] +~~~~~ + +Turns stereo usage On/Off. + +**Example:** +~~~~~ +vinit +box b 10 10 10 +vdisplay b +vstereo 1 +vfit +vcamera -stereo -iod 1 +vcamera -lefteye +vcamera -righteye +~~~~~ + +@subsubsection occt_draw_4_2_23 vfrustumculling + +Syntax: +~~~~~ +vfrustumculling [toEnable] +~~~~~ + +Enables/disables objects clipping. + @subsection occt_draw_4_3 AIS viewer – display commands @@ -1490,10 +1536,11 @@ If no shape is specified through the command arguments, the given HLR algorithm_ Syntax: ~~~~~ -vdisplay name1 [name2] … [name n] +vdisplay [-noupdate|-update] [-local] [-mutable] name1 [name2] … [name n] ~~~~~ -Displays named objects. +Displays named objects. Automatically redraws view by default. +Redraw can be suppressed by -noupdate option. **Example:** ~~~~~ @@ -1637,115 +1684,75 @@ vtypes Makes a list of known types and signatures in AIS. -@subsubsection occt_draw_4_3_10 vsetcolor +@subsubsection occt_draw_4_3_10 vaspects -Syntax: +Syntax: +~~~~~ +vaspects [-noupdate|-update] [name1 [name2 [...]]] + [-setcolor ColorName] [-setcolor R G B] [-unsetcolor] + [-setmaterial MatName] [-unsetmaterial] + [-settransparency Transp] [-unsettransparency] + [-setwidth LineWidth] [-unsetwidth] + [-subshapes subname1 [subname2 [...]]] + +~~~~~ + +Aliases: ~~~~~ vsetcolor [shapename] colorname -~~~~~ -Sets color for all, selected or named shapes. -Possible *colorname* is: *BLACK*, *MATRAGRAY*, *MATRABLUE*, *ALICEBLUE*, *ANTIQUEWHITE*, *ANTIQUEWHITE1*, *ANTIQUEWHITE2*, *ANTIQUEWHITE3*, *ANTIQUEWHITE4*, *AQUAMARINE1*, *AQUAMARINE2*, *AQUAMARINE4*, *AZURE*, *AZURE2*, *AZURE3*, *AZURE4*, *BEIGE*, *BISQUE*, *BISQUE2*, *BISQUE3*, *BISQUE4*, *BLANCHEDALMOND*, *BLUE1*, *BLUE2*, *BLUE3*, *BLUE4*, *BLUEVIOLET*, *BROWN*, *BROWN1*, *BROWN2*, *BROWN3*, *BROWN4*, *BURLYWOOD*, *BURLYWOOD1*, *BURLYWOOD2*, *BURLYWOOD3*, *BURLYWOOD4*, *CADETBLUE*, *CADETBLUE1*, *CADETBLUE2*, *CADETBLUE3*, *CADETBLUE4*, *CHARTREUSE*, *CHARTREUSE1*, *CHARTREUSE2*, *CHARTREUSE3*, *CHARTREUSE4*, *CHOCOLATE*, *CHOCOLATE1*, *CHOCOLATE2*, *CHOCOLATE3*, *CHOCOLATE4*, *CORAL*, *CORAL1*, *CORAL2*, *CORAL3*, *CORAL4*, *CORNFLOWERBLUE*, *CORNSILK1*, *CORNSILK2*, *CORNSILK3*, *CORNSILK4*, *CYAN1*, *CYAN2*, *CYAN3*, *CYAN4*, *DARKGOLDENROD*, *DARKGOLDENROD1*, *DARKGOLDENROD2*, *DARKGOLDENROD3*, *DARKGOLDENROD4*, *DARKGREEN*, *DARKKHAKI*, *DARKOLIVEGREEN*, *DARKOLIVEGREEN1*, *DARKOLIVEGREEN2*, *DARKOLIVEGREEN3*, *DARKOLIVEGREEN4*, *DARKORANGE*, *DARKORANGE1*, *DARKORANGE2*, *DARKORANGE3*, *DARKORANGE4*, *DARKORCHID*, *DARKORCHID1*, *DARKORCHID2*, *DARKORCHID3*, *DARKORCHID4*, *DARKSALMON*, *DARKSEAGREEN*, *DARKSEAGREEN1*, *DARKSEAGREEN2*, *DARKSEAGREEN3*, *DARKSEAGREEN4*, *DARKSLATEBLUE*, *DARKSLATEGRAY1*, *DARKSLATEGRAY2*, *DARKSLATEGRAY3*, *DARKSLATEGRAY4*, *DARKSLATEGRAY*, *DARKTURQUOISE*, *DARKVIOLET*, *DEEPPINK*, *DEEPPINK2*, *DEEPPINK3*, *DEEPPINK4*, *DEEPSKYBLUE1*, *DEEPSKYBLUE2*, *DEEPSKYBLUE3*, *DEEPSKYBLUE4*, *DODGERBLUE1*, *DODGERBLUE2*, *DODGERBLUE3*, *DODGERBLUE4*, *FIREBRICK*, *FIREBRICK1*, *FIREBRICK2*, *FIREBRICK3*, *FIREBRICK4*, *FLORALWHITE*, *FORESTGREEN*, *GAINSBORO*, *GHOSTWHITE*, *GOLD*, *GOLD1*, *GOLD2*, *GOLD3*, *GOLD4*, *GOLDENROD*, *GOLDENROD1*, *GOLDENROD2*, *GOLDENROD3*, *GOLDENROD4*, *GRAY*, *GRAY0*, *GRAY1*, *GRAY10*, *GRAY11*, *GRAY12*, *GRAY13*, *GRAY14*, *GRAY15*, *GRAY16*, *GRAY17*, *GRAY18*, *GRAY19*, *GRAY2*, *GRAY20*, *GRAY21*, *GRAY22*, *GRAY23*, *GRAY24*, *GRAY25*, *GRAY26*, *GRAY27*, *GRAY28*, *GRAY29*, *GRAY3*, *GRAY30*, *GRAY31*, *GRAY32*, *GRAY33*, *GRAY34*, *GRAY35*, *GRAY36*, *GRAY37*, *GRAY38*, *GRAY39*, *GRAY4*, *GRAY40*, *GRAY41*, *GRAY42*, *GRAY43*, *GRAY44*, *GRAY45*, *GRAY46*, *GRAY47*, *GRAY48*, *GRAY49*, *GRAY5*, *GRAY50*, *GRAY51*, *GRAY52*, *GRAY53*, *GRAY54*, *GRAY55*, *GRAY56*, *GRAY57*, *GRAY58*, *GRAY59*, *GRAY6*, *GRAY60*, *GRAY61*, *GRAY62*, *GRAY63*, *GRAY64*, *GRAY65*, *GRAY66*, *GRAY67*, *GRAY68*, *GRAY69*, *GRAY7*, *GRAY70*, *GRAY71*, *GRAY72*, *GRAY73*, *GRAY74*, *GRAY75*, *GRAY76*, *GRAY77*, *GRAY78*, *GRAY79*, *GRAY8*, *GRAY80*, *GRAY81*, *GRAY82*, *GRAY83*, *GRAY85*, *GRAY86*, *GRAY87*, *GRAY88*, *GRAY89*, *GRAY9*, *GRAY90*, *GRAY91*, *GRAY92*, *GRAY93*, *GRAY94*, *GRAY95*, *GREEN*, *GREEN1*, *GREEN2*, *GREEN3*, *GREEN4*, *GREENYELLOW*, *GRAY97*, *GRAY98*, *GRAY99*, *HONEYDEW*, *HONEYDEW2*, *HONEYDEW3*, *HONEYDEW4*, *HOTPINK*, *HOTPINK1*, *HOTPINK2*, *HOTPINK3*, *HOTPINK4*, *INDIANRED*, *INDIANRED1*, *INDIANRED2*, *INDIANRED3*, *INDIANRED4*, *IVORY*, *IVORY2*, *IVORY3*, *IVORY4*, *KHAKI*, *KHAKI1*, *KHAKI2*, *KHAKI3*, *KHAKI4*, *LAVENDER*, *LAVENDERBLUSH1*, *LAVENDERBLUSH2*, *LAVENDERBLUSH3*, *LAVENDERBLUSH4*, *LAWNGREEN*, *LEMONCHIFFON1*, *LEMONCHIFFON2*, *LEMONCHIFFON3*, *LEMONCHIFFON4*, *LIGHTBLUE*, *LIGHTBLUE1*, *LIGHTBLUE2*, *LIGHTBLUE3*, *LIGHTBLUE4*, *LIGHTCORAL*, *LIGHTCYAN1*, *LIGHTCYAN2*, *LIGHTCYAN3*, *LIGHTCYAN4*, *LIGHTGOLDENROD*, *LIGHTGOLDENROD1*, *LIGHTGOLDENROD2*, *LIGHTGOLDENROD3*, *LIGHTGOLDENROD4*, *LIGHTGOLDENRODYELLOW*, *LIGHTGRAY*, *LIGHTPINK*, *LIGHTPINK1*, *LIGHTPINK2*, *LIGHTPINK3*, *LIGHTPINK4*, *LIGHTSALMON1*, *LIGHTSALMON2*, *LIGHTSALMON3*, *LIGHTSALMON4*, *LIGHTSEAGREEN*, *LIGHTSKYBLUE*, *LIGHTSKYBLUE1*, *LIGHTSKYBLUE2*, *LIGHTSKYBLUE3*, *LIGHTSKYBLUE4*, *LIGHTSLATEBLUE*, *LIGHTSLATEGRAY*, *LIGHTSTEELBLUE*, *LIGHTSTEELBLUE1*, *LIGHTSTEELBLUE2*, *LIGHTSTEELBLUE3*, *LIGHTSTEELBLUE4*, *LIGHTYELLOW*, *LIGHTYELLOW2*, *LIGHTYELLOW3*, *LIGHTYELLOW4*, *LIMEGREEN*, *LINEN*, *MAGENTA1*, *MAGENTA2*, *MAGENTA3*, *MAGENTA4*, *MAROON*, *MAROON1*, *MAROON2*, *MAROON3*, *MAROON4*, *MEDIUMAQUAMARINE*, *MEDIUMORCHID*, *MEDIUMORCHID1*, *MEDIUMORCHID2*, *MEDIUMORCHID3*, *MEDIUMORCHID4*, *MEDIUMPURPLE*, *MEDIUMPURPLE1*, *MEDIUMPURPLE2*, *MEDIUMPURPLE3*, *MEDIUMPURPLE4*, *MEDIUMSEAGREEN*, *MEDIUMSLATEBLUE*, *MEDIUMSPRINGGREEN*, *MEDIUMTURQUOISE*, *MEDIUMVIOLETRED*, *MIDNIGHTBLUE*, *MINTCREAM*, *MISTYROSE*, *MISTYROSE2*, *MISTYROSE3*, *MISTYROSE4*, *MOCCASIN*, *NAVAJOWHITE1*, *NAVAJOWHITE2*, *NAVAJOWHITE3*, *NAVAJOWHITE4*, *NAVYBLUE*, *OLDLACE*, *OLIVEDRAB*, *OLIVEDRAB1*, *OLIVEDRAB2*, *OLIVEDRAB3*, *OLIVEDRAB4*, *ORANGE*, *ORANGE1*, *ORANGE2*, *ORANGE3*, *ORANGE4*, *ORANGERED*, *ORANGERED1*, *ORANGERED2*, *ORANGERED3*, *ORANGERED4*, *ORCHID*, *ORCHID1*, *ORCHID2*, *ORCHID3*, *ORCHID4*, *PALEGOLDENROD*, *PALEGREEN*, *PALEGREEN1*, *PALEGREEN2*, *PALEGREEN3*, *PALEGREEN4*, *PALETURQUOISE*, *PALETURQUOISE1*, *PALETURQUOISE2*, *PALETURQUOISE3*, *PALETURQUOISE4*, *PALEVIOLETRED*, *PALEVIOLETRED1*, *PALEVIOLETRED2*, *PALEVIOLETRED3*, *PALEVIOLETRED4*, *PAPAYAWHIP*, *PEACHPUFF*, *PEACHPUFF2*, *PEACHPUFF3*, *PEACHPUFF4*, *PERU*, *PINK*, *PINK1*, *PINK2*, *PINK3*, *PINK4*, *PLUM*, *PLUM1*, *PLUM2*, *PLUM3*, *PLUM4*, *POWDERBLUE*, *PURPLE*, *PURPLE1*, *PURPLE2*, *PURPLE3*, *PURPLE4*, *RED*, *RED1*, *RED2*, *RED3*, *RED4*, *ROSYBROWN*, *ROSYBROWN1*, *ROSYBROWN2*, *ROSYBROWN3*, *ROSYBROWN4*, *ROYALBLUE*, *ROYALBLUE1*, *ROYALBLUE2*, *ROYALBLUE3*, *ROYALBLUE4*, *SADDLEBROWN*, *SALMON*, *SALMON1*, *SALMON2*, *SALMON3*, *SALMON4*, *SANDYBROWN*, *SEAGREEN*, *SEAGREEN1*, *SEAGREEN2*, *SEAGREEN3*, *SEAGREEN4*, *SEASHELL*, *SEASHELL2*, *SEASHELL3*, *SEASHELL4*, *BEET*, *TEAL*, *SIENNA*, *SIENNA1*, *SIENNA2*, *SIENNA3*, *SIENNA4*, *SKYBLUE*, *SKYBLUE1*, *SKYBLUE2*, *SKYBLUE3*, *SKYBLUE4*, *SLATEBLUE*, *SLATEBLUE1*, *SLATEBLUE2*, *SLATEBLUE3*, *SLATEBLUE4*, *SLATEGRAY1*, *SLATEGRAY2*, *SLATEGRAY3*, *SLATEGRAY4*, *SLATEGRAY*, *SNOW*, *SNOW2*, *SNOW3*, *SNOW4*, *SPRINGGREEN*, *SPRINGGREEN2*, *SPRINGGREEN3*, *SPRINGGREEN4*, *STEELBLUE*, *STEELBLUE1*, *STEELBLUE2*, *STEELBLUE3*, *STEELBLUE4*, *TAN*, *TAN1*, *TAN2*, *TAN3*, *TAN4*, *THISTLE*, *THISTLE1*, *THISTLE2*, *THISTLE3*, *THISTLE4*, *TOMATO*, *TOMATO1*, *TOMATO2*, *TOMATO3*, *TOMATO4*, *TURQUOISE*, *TURQUOISE1*, *TURQUOISE2*, *TURQUOISE3*, *TURQUOISE4*, *VIOLET*, *VIOLETRED*, *VIOLETRED1*, *VIOLETRED2*, *VIOLETRED3*, *VIOLETRED4*, *WHEAT*, *WHEAT1*, *WHEAT2*, *WHEAT3*, *WHEAT4*, *WHITE*, *WHITESMOKE*, *YELLOW*, *YELLOW1*, *YELLOW2*, *YELLOW3*, *YELLOW4* and *YELLOWGREEN*. - -@subsubsection occt_draw_4_3_11 vunsetcolor - -Syntax: ~~~~~ -vunsetcolor [shapename] -~~~~~ -Sets default color for all, selected or named shapes. -@subsubsection occt_draw_4_3_12 vsettransparency +Manages presentation properties (color, material, transparency) of all objects, selected or named. -Syntax: +**Color**. The *ColorName* can be: *BLACK*, *MATRAGRAY*, *MATRABLUE*, *ALICEBLUE*, *ANTIQUEWHITE*, *ANTIQUEWHITE1*, *ANTIQUEWHITE2*, *ANTIQUEWHITE3*, *ANTIQUEWHITE4*, *AQUAMARINE1*, *AQUAMARINE2*, *AQUAMARINE4*, *AZURE*, *AZURE2*, *AZURE3*, *AZURE4*, *BEIGE*, *BISQUE*, *BISQUE2*, *BISQUE3*, *BISQUE4*, *BLANCHEDALMOND*, *BLUE1*, *BLUE2*, *BLUE3*, *BLUE4*, *BLUEVIOLET*, *BROWN*, *BROWN1*, *BROWN2*, *BROWN3*, *BROWN4*, *BURLYWOOD*, *BURLYWOOD1*, *BURLYWOOD2*, *BURLYWOOD3*, *BURLYWOOD4*, *CADETBLUE*, *CADETBLUE1*, *CADETBLUE2*, *CADETBLUE3*, *CADETBLUE4*, *CHARTREUSE*, *CHARTREUSE1*, *CHARTREUSE2*, *CHARTREUSE3*, *CHARTREUSE4*, *CHOCOLATE*, *CHOCOLATE1*, *CHOCOLATE2*, *CHOCOLATE3*, *CHOCOLATE4*, *CORAL*, *CORAL1*, *CORAL2*, *CORAL3*, *CORAL4*, *CORNFLOWERBLUE*, *CORNSILK1*, *CORNSILK2*, *CORNSILK3*, *CORNSILK4*, *CYAN1*, *CYAN2*, *CYAN3*, *CYAN4*, *DARKGOLDENROD*, *DARKGOLDENROD1*, *DARKGOLDENROD2*, *DARKGOLDENROD3*, *DARKGOLDENROD4*, *DARKGREEN*, *DARKKHAKI*, *DARKOLIVEGREEN*, *DARKOLIVEGREEN1*, *DARKOLIVEGREEN2*, *DARKOLIVEGREEN3*, *DARKOLIVEGREEN4*, *DARKORANGE*, *DARKORANGE1*, *DARKORANGE2*, *DARKORANGE3*, *DARKORANGE4*, *DARKORCHID*, *DARKORCHID1*, *DARKORCHID2*, *DARKORCHID3*, *DARKORCHID4*, *DARKSALMON*, *DARKSEAGREEN*, *DARKSEAGREEN1*, *DARKSEAGREEN2*, *DARKSEAGREEN3*, *DARKSEAGREEN4*, *DARKSLATEBLUE*, *DARKSLATEGRAY1*, *DARKSLATEGRAY2*, *DARKSLATEGRAY3*, *DARKSLATEGRAY4*, *DARKSLATEGRAY*, *DARKTURQUOISE*, *DARKVIOLET*, *DEEPPINK*, *DEEPPINK2*, *DEEPPINK3*, *DEEPPINK4*, *DEEPSKYBLUE1*, *DEEPSKYBLUE2*, *DEEPSKYBLUE3*, *DEEPSKYBLUE4*, *DODGERBLUE1*, *DODGERBLUE2*, *DODGERBLUE3*, *DODGERBLUE4*, *FIREBRICK*, *FIREBRICK1*, *FIREBRICK2*, *FIREBRICK3*, *FIREBRICK4*, *FLORALWHITE*, *FORESTGREEN*, *GAINSBORO*, *GHOSTWHITE*, *GOLD*, *GOLD1*, *GOLD2*, *GOLD3*, *GOLD4*, *GOLDENROD*, *GOLDENROD1*, *GOLDENROD2*, *GOLDENROD3*, *GOLDENROD4*, *GRAY*, *GRAY0*, *GRAY1*, *GRAY10*, *GRAY11*, *GRAY12*, *GRAY13*, *GRAY14*, *GRAY15*, *GRAY16*, *GRAY17*, *GRAY18*, *GRAY19*, *GRAY2*, *GRAY20*, *GRAY21*, *GRAY22*, *GRAY23*, *GRAY24*, *GRAY25*, *GRAY26*, *GRAY27*, *GRAY28*, *GRAY29*, *GRAY3*, *GRAY30*, *GRAY31*, *GRAY32*, *GRAY33*, *GRAY34*, *GRAY35*, *GRAY36*, *GRAY37*, *GRAY38*, *GRAY39*, *GRAY4*, *GRAY40*, *GRAY41*, *GRAY42*, *GRAY43*, *GRAY44*, *GRAY45*, *GRAY46*, *GRAY47*, *GRAY48*, *GRAY49*, *GRAY5*, *GRAY50*, *GRAY51*, *GRAY52*, *GRAY53*, *GRAY54*, *GRAY55*, *GRAY56*, *GRAY57*, *GRAY58*, *GRAY59*, *GRAY6*, *GRAY60*, *GRAY61*, *GRAY62*, *GRAY63*, *GRAY64*, *GRAY65*, *GRAY66*, *GRAY67*, *GRAY68*, *GRAY69*, *GRAY7*, *GRAY70*, *GRAY71*, *GRAY72*, *GRAY73*, *GRAY74*, *GRAY75*, *GRAY76*, *GRAY77*, *GRAY78*, *GRAY79*, *GRAY8*, *GRAY80*, *GRAY81*, *GRAY82*, *GRAY83*, *GRAY85*, *GRAY86*, *GRAY87*, *GRAY88*, *GRAY89*, *GRAY9*, *GRAY90*, *GRAY91*, *GRAY92*, *GRAY93*, *GRAY94*, *GRAY95*, *GREEN*, *GREEN1*, *GREEN2*, *GREEN3*, *GREEN4*, *GREENYELLOW*, *GRAY97*, *GRAY98*, *GRAY99*, *HONEYDEW*, *HONEYDEW2*, *HONEYDEW3*, *HONEYDEW4*, *HOTPINK*, *HOTPINK1*, *HOTPINK2*, *HOTPINK3*, *HOTPINK4*, *INDIANRED*, *INDIANRED1*, *INDIANRED2*, *INDIANRED3*, *INDIANRED4*, *IVORY*, *IVORY2*, *IVORY3*, *IVORY4*, *KHAKI*, *KHAKI1*, *KHAKI2*, *KHAKI3*, *KHAKI4*, *LAVENDER*, *LAVENDERBLUSH1*, *LAVENDERBLUSH2*, *LAVENDERBLUSH3*, *LAVENDERBLUSH4*, *LAWNGREEN*, *LEMONCHIFFON1*, *LEMONCHIFFON2*, *LEMONCHIFFON3*, *LEMONCHIFFON4*, *LIGHTBLUE*, *LIGHTBLUE1*, *LIGHTBLUE2*, *LIGHTBLUE3*, *LIGHTBLUE4*, *LIGHTCORAL*, *LIGHTCYAN1*, *LIGHTCYAN2*, *LIGHTCYAN3*, *LIGHTCYAN4*, *LIGHTGOLDENROD*, *LIGHTGOLDENROD1*, *LIGHTGOLDENROD2*, *LIGHTGOLDENROD3*, *LIGHTGOLDENROD4*, *LIGHTGOLDENRODYELLOW*, *LIGHTGRAY*, *LIGHTPINK*, *LIGHTPINK1*, *LIGHTPINK2*, *LIGHTPINK3*, *LIGHTPINK4*, *LIGHTSALMON1*, *LIGHTSALMON2*, *LIGHTSALMON3*, *LIGHTSALMON4*, *LIGHTSEAGREEN*, *LIGHTSKYBLUE*, *LIGHTSKYBLUE1*, *LIGHTSKYBLUE2*, *LIGHTSKYBLUE3*, *LIGHTSKYBLUE4*, *LIGHTSLATEBLUE*, *LIGHTSLATEGRAY*, *LIGHTSTEELBLUE*, *LIGHTSTEELBLUE1*, *LIGHTSTEELBLUE2*, *LIGHTSTEELBLUE3*, *LIGHTSTEELBLUE4*, *LIGHTYELLOW*, *LIGHTYELLOW2*, *LIGHTYELLOW3*, *LIGHTYELLOW4*, *LIMEGREEN*, *LINEN*, *MAGENTA1*, *MAGENTA2*, *MAGENTA3*, *MAGENTA4*, *MAROON*, *MAROON1*, *MAROON2*, *MAROON3*, *MAROON4*, *MEDIUMAQUAMARINE*, *MEDIUMORCHID*, *MEDIUMORCHID1*, *MEDIUMORCHID2*, *MEDIUMORCHID3*, *MEDIUMORCHID4*, *MEDIUMPURPLE*, *MEDIUMPURPLE1*, *MEDIUMPURPLE2*, *MEDIUMPURPLE3*, *MEDIUMPURPLE4*, *MEDIUMSEAGREEN*, *MEDIUMSLATEBLUE*, *MEDIUMSPRINGGREEN*, *MEDIUMTURQUOISE*, *MEDIUMVIOLETRED*, *MIDNIGHTBLUE*, *MINTCREAM*, *MISTYROSE*, *MISTYROSE2*, *MISTYROSE3*, *MISTYROSE4*, *MOCCASIN*, *NAVAJOWHITE1*, *NAVAJOWHITE2*, *NAVAJOWHITE3*, *NAVAJOWHITE4*, *NAVYBLUE*, *OLDLACE*, *OLIVEDRAB*, *OLIVEDRAB1*, *OLIVEDRAB2*, *OLIVEDRAB3*, *OLIVEDRAB4*, *ORANGE*, *ORANGE1*, *ORANGE2*, *ORANGE3*, *ORANGE4*, *ORANGERED*, *ORANGERED1*, *ORANGERED2*, *ORANGERED3*, *ORANGERED4*, *ORCHID*, *ORCHID1*, *ORCHID2*, *ORCHID3*, *ORCHID4*, *PALEGOLDENROD*, *PALEGREEN*, *PALEGREEN1*, *PALEGREEN2*, *PALEGREEN3*, *PALEGREEN4*, *PALETURQUOISE*, *PALETURQUOISE1*, *PALETURQUOISE2*, *PALETURQUOISE3*, *PALETURQUOISE4*, *PALEVIOLETRED*, *PALEVIOLETRED1*, *PALEVIOLETRED2*, *PALEVIOLETRED3*, *PALEVIOLETRED4*, *PAPAYAWHIP*, *PEACHPUFF*, *PEACHPUFF2*, *PEACHPUFF3*, *PEACHPUFF4*, *PERU*, *PINK*, *PINK1*, *PINK2*, *PINK3*, *PINK4*, *PLUM*, *PLUM1*, *PLUM2*, *PLUM3*, *PLUM4*, *POWDERBLUE*, *PURPLE*, *PURPLE1*, *PURPLE2*, *PURPLE3*, *PURPLE4*, *RED*, *RED1*, *RED2*, *RED3*, *RED4*, *ROSYBROWN*, *ROSYBROWN1*, *ROSYBROWN2*, *ROSYBROWN3*, *ROSYBROWN4*, *ROYALBLUE*, *ROYALBLUE1*, *ROYALBLUE2*, *ROYALBLUE3*, *ROYALBLUE4*, *SADDLEBROWN*, *SALMON*, *SALMON1*, *SALMON2*, *SALMON3*, *SALMON4*, *SANDYBROWN*, *SEAGREEN*, *SEAGREEN1*, *SEAGREEN2*, *SEAGREEN3*, *SEAGREEN4*, *SEASHELL*, *SEASHELL2*, *SEASHELL3*, *SEASHELL4*, *BEET*, *TEAL*, *SIENNA*, *SIENNA1*, *SIENNA2*, *SIENNA3*, *SIENNA4*, *SKYBLUE*, *SKYBLUE1*, *SKYBLUE2*, *SKYBLUE3*, *SKYBLUE4*, *SLATEBLUE*, *SLATEBLUE1*, *SLATEBLUE2*, *SLATEBLUE3*, *SLATEBLUE4*, *SLATEGRAY1*, *SLATEGRAY2*, *SLATEGRAY3*, *SLATEGRAY4*, *SLATEGRAY*, *SNOW*, *SNOW2*, *SNOW3*, *SNOW4*, *SPRINGGREEN*, *SPRINGGREEN2*, *SPRINGGREEN3*, *SPRINGGREEN4*, *STEELBLUE*, *STEELBLUE1*, *STEELBLUE2*, *STEELBLUE3*, *STEELBLUE4*, *TAN*, *TAN1*, *TAN2*, *TAN3*, *TAN4*, *THISTLE*, *THISTLE1*, *THISTLE2*, *THISTLE3*, *THISTLE4*, *TOMATO*, *TOMATO1*, *TOMATO2*, *TOMATO3*, *TOMATO4*, *TURQUOISE*, *TURQUOISE1*, *TURQUOISE2*, *TURQUOISE3*, *TURQUOISE4*, *VIOLET*, *VIOLETRED*, *VIOLETRED1*, *VIOLETRED2*, *VIOLETRED3*, *VIOLETRED4*, *WHEAT*, *WHEAT1*, *WHEAT2*, *WHEAT3*, *WHEAT4*, *WHITE*, *WHITESMOKE*, *YELLOW*, *YELLOW1*, *YELLOW2*, *YELLOW3*, *YELLOW4* and *YELLOWGREEN*. +~~~~~ +vaspects [name] [-setcolor ColorName] [-setcolor R G B] [-unsetcolor] +vsetcolor [name] ColorName +vunsetcolor [name] ~~~~~ -vsettransparency [shapename] coeficient -~~~~~ - -Sets transparency for all selected or named shapes. The *coefficient* may be between 0.0 (opaque) and 1.0 (fully transparent). +**Transparency. The *Transp* may be between 0.0 (opaque) and 1.0 (fully transparent). **Warning**: at 1.0 the shape becomes invisible. - -**Example:** ~~~~~ -vinit -box b 10 10 10 -psphere s 20 -vdisplay b s -vfit -vsetdispmode 1 -vsettransparency b 0.5 -~~~~~ - -@subsubsection occt_draw_4_3_13 vunsettransparency - -Syntax: -~~~~~ -vunsettransparency [shapename] -~~~~~ - -Sets default transparency (0.0) for all selected or named shapes. - -@subsubsection occt_draw_4_3_14 vsetmaterial - -Syntax: -~~~~~ -vsetmaterial [shapename] materialname -~~~~~ - -Sets material for all selected or named shapes. - -**materialname** can be *BRASS*, *BRONZE*, *COPPER*, *GOLD*, *PEWTER*, *PLASTER*, *PLASTIC*, *SILVER*, *STEEL*, *STONE*, *SHINY_PLASTIC*, *SATIN*, *METALIZED*, *NEON_GNC*, *CHROME*, *ALUMINIUM*, *OBSIDIAN*, *NEON_PHC* or *JADE*. - -**Example:** -~~~~~ -vinit -psphere s 20 -vdisplay s -vfit -vsetdispmode 1 -vsetmaterial s JADE +vaspects [name] [-settransparency Transp] [-unsettransparency] +vsettransparency [name] Transp +vunsettransparency [name] ~~~~~ -@subsubsection occt_draw_4_3_15 vunsetmaterial - -Syntax: +**Material**. The *MatName* can be *BRASS*, *BRONZE*, *COPPER*, *GOLD*, *PEWTER*, *PLASTER*, *PLASTIC*, *SILVER*, *STEEL*, *STONE*, *SHINY_PLASTIC*, *SATIN*, *METALIZED*, *NEON_GNC*, *CHROME*, *ALUMINIUM*, *OBSIDIAN*, *NEON_PHC*, *JADE*, *WATER*, *GLASS*, *DIAMOND* or *CHARCOAL*. ~~~~~ -vunsetmaterial [shapename] -~~~~~ - -Sets default material for all selected or named shapes. - -@subsubsection occt_draw_4_3_16 vsetwidth - -Syntax: +vaspects [name] [-setmaterial MatName] [-unsetmaterial] +vsetmaterial [name] MatName +vunsetmaterial [name] ~~~~~ -vsetwidth [shapename] coeficient -~~~~~ -Sets width of the edges for all selected or named shapes. -The *coefficient* may be between 0.0 and 10.0. - -**Example:** +**Line width**. Specifies width of the edges. The *LineWidth* may be between 0.0 and 10.0. ~~~~~ -vinit -box b 10 10 10 -vdisplay b -vfit -vsetwidth b 5 -~~~~~ - -@subsubsection occt_draw_4_3_17 vunsetwidth - -Syntax: +vaspects [name] [-setwidth LineWidth] [-unsetwidth] +vsetwidth [name] LineWidth +vunsetwidth [name] ~~~~~ -vunsetwidth [shapename] -~~~~~ -Sets default width of edges (0.0) for all selected or named shapes. +**Example:** +~~~~~ +vinit +box b 10 10 10 +vdisplay b +vfit -@subsubsection occt_draw_4_3_18 vsetshading +vsetdispmode b 1 +vaspects -setcolor red -settransparency 0.2 +vrotate 10 10 10 +~~~~~ + + + + + + +@subsubsection occt_draw_4_3_11 vsetshading Syntax: ~~~~~ @@ -1764,7 +1771,7 @@ vsetdispmode 1 vsetshading s 0.005 ~~~~~ -@subsubsection occt_draw_4_3_19 vunsetshading +@subsubsection occt_draw_4_3_12 vunsetshading Syntax: ~~~~~ @@ -1773,7 +1780,7 @@ vunsetshading [shapename] Sets default deflection coefficient (0.0008) that defines the quality of the shape’s representation in the shading mode. Default coefficient is 0.0008. -@subsubsection occt_draw_4_3_20 vsetam +@subsubsection occt_draw_4_3_13 vsetam Syntax: ~~~~~ @@ -1799,7 +1806,7 @@ vfit vsetam b 2 ~~~~~ -@subsubsection occt_draw_4_3_21 vunsetam +@subsubsection occt_draw_4_3_14 vunsetam Syntax: ~~~~~ @@ -1808,16 +1815,16 @@ vunsetam Deactivates all selection modes for all shapes. -@subsubsection occt_draw_4_3_22 vdump +@subsubsection occt_draw_4_3_15 vdump Syntax: ~~~~~ -vdump .{png|xwd|bmp} +vdump .{png|bmp|jpg|gif} ~~~~~ -Extracts the contents of the viewer window to a png, XWD or BMP file. +Extracts the contents of the viewer window to a image file. -@subsubsection occt_draw_4_3_23 vdir +@subsubsection occt_draw_4_3_16 vdir Syntax: ~~~~~ @@ -1826,7 +1833,7 @@ vdir Displays the list of displayed objects. -@subsubsection occt_draw_4_3_24 vsub +@subsubsection occt_draw_4_3_17 vsub Syntax: ~~~~~ @@ -1846,7 +1853,7 @@ vsetdispmode 1 vsub b 1 ~~~~~ -@subsubsection occt_draw_4_3_25 vardis +@subsubsection occt_draw_4_3_18 vardis Syntax: ~~~~~ @@ -1855,7 +1862,7 @@ vardis Displays active areas (for each activated sensitive entity, one or several 2D bounding boxes are displayed, depending on the implementation of a particular entity). -@subsubsection occt_draw_4_3_26 varera +@subsubsection occt_draw_4_3_19 varera Syntax: ~~~~~ @@ -1864,7 +1871,7 @@ varera Erases active areas. -@subsubsection occt_draw_4_3_27 vsensdis +@subsubsection occt_draw_4_3_20 vsensdis Syntax: ~~~~~ @@ -1884,7 +1891,7 @@ Standard entity types are those defined in Select3D package: * sensitive triangle Custom (application-defined) sensitive entity types are not processed by this command. -@subsubsection occt_draw_4_3_28 vsensera +@subsubsection occt_draw_4_3_21 vsensera Syntax: ~~~~~ @@ -1893,7 +1900,7 @@ vsensera Erases active entities. -@subsubsection occt_draw_4_3_29 vperf +@subsubsection occt_draw_4_3_22 vperf Syntax: ~~~~~ @@ -1913,7 +1920,7 @@ vsetdispmode 0 vperf b 1 1 ~~~~~ -@subsubsection occt_draw_4_3_30 vr +@subsubsection occt_draw_4_3_23 vr Syntax: ~~~~~ @@ -1928,7 +1935,7 @@ vinit vr myshape.brep ~~~~~ -@subsubsection occt_draw_4_3_31 vstate +@subsubsection occt_draw_4_3_24 vstate Syntax: ~~~~~ @@ -1937,6 +1944,64 @@ vstate [name1] … [name n] Makes a list of the status (**Displayed** or **Not Displayed**) of some selected or named objects. +@subsubsection occt_draw_4_3_25 vraytrace + +Syntax: +~~~~~ +vraytrace [0/1] +~~~~~ + +Turns on/off ray tracing renderer. + +@subsubsection occt_draw_4_3_26 vrenderparams + +Syntax: +~~~~~ +vrenderparams +~~~~~ + +Manages rendering parameters: +* rayTrace +* raster +* rayDepth +* shadows +* reflections +* fsaa +* gleam +* shadingModel + +**Example:** +~~~~~ +vinit +box b 10 10 10 +vdisplay b +vfit +vraytrace 1 +vrenderparams -shadows 1 -reflections 1 -fsaa 1 +~~~~~ +@subsubsection occt_draw_4_3_27 vshaderprog + +Syntax: +~~~~~ +vshaderprog [name] pathToVertexShader pathToFragmentShader +~~~~~ + +Enables rendering using a shader program. + +@subsubsection occt_draw_4_3_28 vsetcolorbg + +Syntax: +~~~~~ +vsetcolorbg r g b +~~~~~ + +Sets background color. + +**Example:** +~~~~~ +vinit +vsetcolorbg 200 0 200 +~~~~~ @subsection occt_draw_4_4 AIS viewer – object commands @@ -2194,6 +2259,144 @@ vpoint p2 50 0 0 vsegment segment p1 p2 ~~~~~ +@subsubsection occt_draw_4_4_18 vpointcloud + +Syntax: +~~~~~ +vpointcloud name shape +~~~~~ + +Creates an interactive object for an arbitary set of points from the triangulated shape. + +~~~~~ +vpointcloud name x y z r npts {surface|volume} +~~~~~ +Creates an arbitrary set of points (npts) randomly distributed on a spheric surface or within a spheric volume (x y z r). + +**Example:** +~~~~~ +vinit +vpointcloud pc 0 0 0 100 100000 surface -randColor +vfit +~~~~~ + +@subsubsection occt_draw_4_4_19 vclipplane + +Syntax: +~~~~~ +vclipplane maxplanes - gets plane limit for the view. +vclipplane create - creates a new plane. +vclipplane delete - delete a plane. +vclipplane clone - clones the plane definition. +vclipplane set/unset object - sets/unsets the plane for an IO. +vclipplane set/unset view - sets/unsets plane for a view. +vclipplane change on/off - turns clipping on/off. +vclipplane change equation - changes plane equation. +vclipplane change capping on/off - turns capping on/off. +vclipplane change capping color - sets color. +vclipplane change capping texname - sets texture. +vclipplane change capping texscale - sets texture scale. +vclipplane change capping texorigin - sets texture origin. +vclipplane change capping texrotate - sets texture rotation. +vclipplane change capping hatch on/off/ - sets hatching mask. +~~~~~ + +Manages clipping planes + +**Example:** +~~~~~ +vinit +vclipplane create pln1 +vclipplane change pln1 equation 1 0 0 -0.1 +vclipplane set pln1 view Driver1/Viewer1/View1 +box b 100 100 100 +vdisplay b +vsetdispmode 1 +vfit +vrotate 10 10 10 +vselect 100 100 +~~~~~ + +@subsubsection occt_draw_4_4_20 vdimension + +Syntax: +~~~~~ +vdimension name {-angle|-length|-radius|-diameter} -shapes shape1 [shape2 [shape3]] + [-text 3d|2d wf|sh|wireframe|shading IntegerSize] + [-label left|right|hcenter|hfit top|bottom|vcenter|vfit] + [-arrow external|internal|fit] [{-arrowlength|-arlen} RealArrowLength] + [{-arrowangle|-arangle} ArrowAngle(degrees)] [-plane xoy|yoz|zox] + [-flyout FloatValue -extension FloatValue] [-value CustomNumberValue] + [-dispunits DisplayUnitsString] [-modelunits ModelUnitsString] + [-showunits | -hideunits] +~~~~~ + +Builds angle, length, radius or diameter dimension interactive object **name**. + +**Attension:** length dimension can't be built without working plane. + +**Example:** +~~~~~ +vpoint p1 0 0 0 +vpoint p2 50 50 0 +vdimension dim1 -length -plane xoy -shapes p1 p2 + +vpoint p3 100 0 0 +vdimension dim2 -angle -shapes p1 p2 p3 + +vcircle circle p1 p2 p3 0 +vdimension dim3 -radius -shapes circle +vfit +~~~~~ + +@subsubsection occt_draw_4_4_21 vdimparam + +Syntax: +~~~~~ +vdimparam name [-text 3d|2d wf|sh|wireframe|shading IntegerSize] + [-label left|right|hcenter|hfit top|bottom|vcenter|vfit] + [-arrow external|internal|fit] + [{-arrowlength|-arlen} RealArrowLength] + [{-arrowangle|-arangle} ArrowAngle(degrees)] + [-plane xoy|yoz|zox] + [-flyout FloatValue -extension FloatValue] + [-value CustomNumberValue] + [-dispunits DisplayUnitsString] + [-modelunits ModelUnitsString] + [-showunits | -hideunits] +~~~~~ + +Sets parameters for angle, length, radius and diameter dimension **name**. + +**Example:** +~~~~~ +vpoint p1 0 0 0 +vpoint p2 50 50 0 +vdimension dim1 -length -plane xoy -shapes p1 p2 +vdimparam dim1 -flyout -15 -arrowlength 4 -showunits -value 10 +~~~~~ + +@subsubsection occt_draw_4_4_22 vmovedim + +Syntax: +~~~~~ +vmovedim [name] [x y z] +~~~~~ + +Moves picked or named (if **name** parameter is defined) dimension +to picked mouse position or input point with coordinates **x**,**y**,**z**. +Text label of dimension **name** is moved to position, another parts of dimension +are adjusted. + +**Example:** +~~~~~ +vpoint p1 0 0 0 +vpoint p2 50 50 0 +vdimension dim1 -length -plane xoy -shapes p1 p2 +vmovedim dim1 -10 30 0 +~~~~~ + + @subsection occt_draw_4_5 AIS viewer – Mesh Visualization Service **MeshVS** (Mesh Visualization Service) component provides flexible means of displaying meshes with associated pre- and post- processor data. @@ -2293,8 +2496,8 @@ meshmat meshname material Changes the material of object **meshname**. *material* is represented with an integer value as follows (equivalent to enumeration *Graphic3d_NameOfMaterial*): -* *0 – BRASS,* -* *1 – BRONZE,* +* *0 - BRASS,* +* *1 - BRONZE,* * *2 - COPPER,* * *3 - GOLD,* * *4 - PEWTER,* @@ -2413,6 +2616,204 @@ meshfromstl mesh myfile.stl meshdelete mesh ~~~~~ +@subsection occt_draw_4_6 VIS Viewer commands + +A specific plugin with alias *VIS* should be loaded to have access to VIS functionality in DRAW Test Harness: + +~~~~ +\> pload VIS +~~~~ + +@subsubsection occt_draw_4_6_1 ivtkinit + +Syntax: +~~~~~ +ivtkinit +~~~~~ + +Creates a window for VTK viewer. + +@figure{/user_guides/draw_test_harness/images/draw_image001.png} + +@subsection occt_draw_4_6_2 ivtkdisplay + +Syntax: +~~~~~ +ivtkdisplay name1 [name2] …[name n] +~~~~~ + +Displays named objects. + +**Example:** +~~~~~ +ivtkinit +# create cone +pcone c 5 0 10 +ivtkdisplay c +~~~~~ + +@figure{/user_guides/draw_test_harness/images/draw_image002.png} + +@subsection occt_draw_4_6_3 ivtkerase + +Syntax: +~~~~~ +ivtkerase [name1] [name2] … [name n] +~~~~~ + +Erases named objects. If no arguments are passed, erases all displayed objects. + +**Example:** +~~~~~ +ivtkinit +# create a sphere +psphere s 10 +# create a cone +pcone c 5 0 10 +# create a cylinder +pcylinder cy 5 10 +# display objects +ivtkdisplay s c cy +# erase only the cylinder +ivtkerase cy +# erase the sphere and the cone +ivtkerase s c +~~~~~ + +@subsection occt_draw_4_6_4 ivtkfit + +Syntax: +~~~~~ +ivtkfit +~~~~~ + +Automatic zoom/panning. + +@subsection occt_draw_4_6_5 ivtkdispmode + +Syntax: +~~~~~ +ivtksetdispmode [name] {0|1} +~~~~~ + +Sets display mode for a named object. If no arguments are passed, sets the given display mode for all displayed objects +The possible modes are: 0 (WireFrame) and 1 (Shading). + +**Example:** +~~~~~ +ivtkinit +# create a cone +pcone c 5 0 10 +# display the cone +ivtkdisplay c +# set shading mode for the cone +ivtksetdispmode c 1 +~~~~~ + +@figure{/user_guides/draw_test_harness/images/draw_image003.png} + +@subsection occt_draw_4_6_6 ivtksetselmode + +Syntax: +~~~~~ +ivtksetselmode [name] mode {0|1} +~~~~~ + +Sets selection mode for a named object. If no arguments are passed, sets the given selection mode for all the displayed objects. + +**Example:** +~~~~~ +ivtkinit +# load a shape from file +restore CrankArm.brep a +# display the loaded shape +ivtkdisplay a +# set the face selection mode +ivtksetselmode a 4 1 +~~~~~ + +@figure{/user_guides/draw_test_harness/images/draw_image004.png} + +@subsection occt_draw_4_6_7 ivtkmoveto + +Syntax: +~~~~~ +ivtkmoveto x y +~~~~~ + +Imitates mouse cursor moving to point with the given display coordinates **x**,**y**. + +**Example:** +~~~~~ +ivtkinit +pcone c 5 0 10 +ivtkdisplay c +ivtkmoveto 40 50 +~~~~~ + +@subsection occt_draw_4_6_8 ivtkselect + +Syntax: +~~~~~ +ivtkselect x y +~~~~~ + +Imitates mouse cursor moving to point with the given display coordinates and performs selection at this point. + +**Example:** +~~~~~ +ivtkinit +pcone c 5 0 10 +ivtkdisplay c +ivtkselect 40 50 +~~~~~ + +@subsection occt_draw_4_6_9 ivtkdump + +Syntax: +~~~~~ +ivtkdump *filename* [buffer={rgb|rgba|depth}] [width height] [stereoproj={L|R}] +~~~~~ + +Dumps the contents of VTK viewer to image. It supports: +* dumping in different raster graphics formats: PNG, BMP, JPEG, TIFF or PNM. +* dumping of different buffers: RGB, RGBA or depth buffer. +* defining of image sizes (width and height in pixels). +* dumping of stereo projections (left or right). + +**Example:** +~~~~~ +ivtkinit +pcone c 5 0 10 +ivtkdisplay c +ivtkdump D:/ConeSnapshot.png rgb 768 768 +~~~~~ + +@subsection occt_draw_4_6_10 ivtkbgcolor + + +Syntax: +~~~~~ +ivtkbgcolor r g b [r2 g2 b2] +~~~~~ + +Sets uniform background color or gradient background if second triple of parameters is set. Color parameters r,g,b have to be chosen in the interval [0..255]. + +**Example:** +~~~~~ +ivtkinit +ivtkbgcolor 200 220 250 +~~~~~ + +@figure{/user_guides/draw_test_harness/images/draw_image005.png} + +~~~~~ +ivtkbgcolor 10 30 80 255 255 255 +~~~~~ + +@figure{/user_guides/draw_test_harness/images/draw_image006.png} + + @section occt_draw_5 OCAF commands diff --git a/dox/user_guides/vis/images/vis_image008.png b/dox/user_guides/draw_test_harness/images/draw_image001.png similarity index 100% rename from dox/user_guides/vis/images/vis_image008.png rename to dox/user_guides/draw_test_harness/images/draw_image001.png diff --git a/dox/user_guides/vis/images/vis_image009.png b/dox/user_guides/draw_test_harness/images/draw_image002.png similarity index 100% rename from dox/user_guides/vis/images/vis_image009.png rename to dox/user_guides/draw_test_harness/images/draw_image002.png diff --git a/dox/user_guides/vis/images/vis_image010.png b/dox/user_guides/draw_test_harness/images/draw_image003.png similarity index 100% rename from dox/user_guides/vis/images/vis_image010.png rename to dox/user_guides/draw_test_harness/images/draw_image003.png diff --git a/dox/user_guides/vis/images/vis_image011.png b/dox/user_guides/draw_test_harness/images/draw_image004.png similarity index 100% rename from dox/user_guides/vis/images/vis_image011.png rename to dox/user_guides/draw_test_harness/images/draw_image004.png diff --git a/dox/user_guides/vis/images/vis_image012.png b/dox/user_guides/draw_test_harness/images/draw_image005.png similarity index 100% rename from dox/user_guides/vis/images/vis_image012.png rename to dox/user_guides/draw_test_harness/images/draw_image005.png diff --git a/dox/user_guides/vis/images/vis_image013.png b/dox/user_guides/draw_test_harness/images/draw_image006.png similarity index 100% rename from dox/user_guides/vis/images/vis_image013.png rename to dox/user_guides/draw_test_harness/images/draw_image006.png diff --git a/dox/user_guides/modeling_algos/modeling_algos.md b/dox/user_guides/modeling_algos/modeling_algos.md index 30ad15df42..8b703d6855 100644 --- a/dox/user_guides/modeling_algos/modeling_algos.md +++ b/dox/user_guides/modeling_algos/modeling_algos.md @@ -2713,7 +2713,7 @@ aPolyHLRToShape.OutLineHCompound(); @section occt_modalg_10_2 Meshing of Shapes -The algorithm of shape triangulation is provided by the functionality of *BRepMesh_IncrementalMesh* class, which adds a triangulation of the shape to its topological data structure. +The algorithm of shape triangulation is provided by the functionality of *BRepMesh_IncrementalMesh* class, which adds a triangulation of the shape to its topological data structure. This triangulation is used to visualize the shape in shaded mode. ~~~~~ const Standard_Real aRadius = 10.0; @@ -2727,23 +2727,26 @@ const Standard_Real anAngularDeflection = 0.5; BRepMesh_IncrementalMesh aMesh(aShape, aLinearDeflection, Standard_False, anAngularDeflection); ~~~~~ -Default meshing algorithm *BRepMesh_IncrementalMesh* has two major options to define triangulation – linear and angular deflections. At the first step all edges from face are discretized according to specified parameters. Linear deflection limits distance between curve and its tessellation and angular deflection limits the angle between subsequent segments in polyline. +The default meshing algorithm *BRepMesh_IncrementalMesh* has two major options to define triangulation – linear and angular deflections. -@image html /user_guides/modeling_algos/images/modeling_algos_image056.png "Deflection parameters of BRepMesh_IncrementalMesh algorithm" +At the first step all edges from a face are discretized according to the specified parameters. -Linear deflection limits distance between triangles and face interior. +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. -@image html /user_guides/modeling_algos/images/modeling_algos_image057.png "Linear deflection" +@figure{/user_guides/modeling_algos/images/modeling_algos_image056.png, "Deflection parameters of BRepMesh_IncrementalMesh algorithm"} -Note that if 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. +Linear deflection limits the distance between triangles and the face interior. -Application should provide deflection parameters to compute satisfying mesh. Angular deflection is relatively simple and default value can be used (12-20 degrees). Linear deflection has absolute meaning and application should provide correct value for its models. Giving small values may result in too huge mesh (a lot of memory, long computation time and slow rendering) while big values results in ugly mesh. +@figure{/user_guides/modeling_algos/images/modeling_algos_image057.png, "Linear deflection"} -For application working in dimensions known in advance this is reasonable to fix absolute linear deflection for all models. This gives a meshes according to metrics and precision used in application (for example models known to be stored in meters and 0.004 m is enough for most tasks). +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. -However applications worked with alien models can not use the same deflection for all models (notice that this is abnormal situation in fact and this application is probably just a viewer for CAD models with dimensions vary by an order). To solve this problem conception of relative linear deflection was introduced that has some kind of LOD (level of detail) meaning. This value in fact is a scale factor to absolute deflection applied to model dimensions. +The application should provide deflection parameters to compute a satisfactory mesh. Angular deflection is relatively simple and allows using a default value (12-20 degrees). Linear deflection has an absolute meaning and the application should provide the correct value for its models. Giving small values may result in a too huge mesh (consuming a lot of memory, which results in a long computation time and slow rendering) while big values result in an ugly mesh. +For an application working in dimensions known in advance it can be reasonable to use the absolute linear deflection for all models. This provides meshes according to metrics and precision used in the application (for example, it it is known that the model will be stored in meters, 0.004 m is enough for most tasks). -Meshing covers a shape with a triangular mesh. Other than hidden line removal, you can use meshing to transfer the shape to another tool: a manufacturing tool, a shading algorithm, a finite element algorithm, or a collision algorithm, for example. +However, an application that imports models created in other applications may not use the same deflection for all models. Note that actually this is an abnormal situation and this application is probably just a viewer for CAD models with dimensions varying by an order of magnitude. This problem can be solved by introducing the concept of a relative linear deflection with some LOD (level of detail). The level of detail is a scale factor for absolute deflection, which is applied to model dimensions. -You can obtain information on the shape by first exploring it. To then access triangulation of a face in the shape, use *BRepTool::Triangulation*. To access a polygon which is the approximation of an edge of the face, use *BRepTool::PolygonOnTriangulation*. \ No newline at end of file +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*. diff --git a/dox/user_guides/vis/vis.md b/dox/user_guides/vis/vis.md index be40d47241..a3b09f5f2b 100644 --- a/dox/user_guides/vis/vis.md +++ b/dox/user_guides/vis/vis.md @@ -7,7 +7,7 @@ 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} - + 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. * Use a **low-level API**. It is an advanced scenario for the users with specific needs, which are not addressed by the higher-level utilities of VIS. It presumes implementation of custom VTK algorithms (such as filters) with help of low-level API of VIS component. @@ -31,8 +31,8 @@ The idea behind the mentioned organization of packages is separation of interfac @figure{/user_guides/vis/images/vis_image003.png "Dependencies of VIS packages"} 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. - - + + @subsection occt_vis_2_2 IVtk package **IVtk** package contains the following classes: * *IVtk_Interface* - Base class for all interfaces of the component. Provides inheritance for *Handle* (OCCT “smart pointer”) functionality. @@ -47,8 +47,8 @@ Basically, it is enough to use the first three packages in the end user’s appl **IVtkOCC** package contains the implementation of classes depending on OCCT: * *IVtkOCC_Shape* - Implementation of *IVtk_IShape* interface as a wrapper for *TopoDS_Shape*. * *IVtkOCC_ShapeMesher* - Implementation of *IVtk_IShapeMesher* interface for construction of facets from *TopoDS* shapes. -* *IVtkOCC_ShapePickerAlgo* Implementation of interactive picking algorithm. It provides enabling/disabling of selection modes for shapes (*IVtk_IShape* instances) and picking facilities for a given position of cursor. -* *IVtkOCC_ViewerSelector* - Interactive selector, which implements *Pick()* methods for the picking algorithm *IVtkOCC_ShapePickerAlgo* and connects to the visualization layer with help of abstract *IView* interface. +* *IVtkOCC_ShapePickerAlgo* Implementation of interactive picking algorithm. It provides enabling/disabling of selection modes for shapes (*IVtk_IShape* instances) and picking facilities for a given position of cursor. +* *IVtkOCC_ViewerSelector* - Interactive selector, which implements *Pick()* methods for the picking algorithm *IVtkOCC_ShapePickerAlgo* and connects to the visualization layer with help of abstract *IView* interface. *IVtkOCC_ViewerSelector* is a descendant of OCCT native *SelectMgr_ViewerSelector*, so it implements OCCT selection mechanism for *IVtkVTK_View* (similarly to *StdSelect_ViewerSelector3D* which implements *SelectMgr_ViewerSelector* for OCCT native *V3d_View*). *IVtkOCC_ViewerSelector* encapsulates all projection transformations for the picking mechanism. These transformations are extracted from *vtkCamera* instance available via VTK Renderer. *IVtkOCC_ViewerSelector* operates with native OCCT *SelectMgr_Selection* entities. Each entity represents one selection mode of an OCCT selectable object. *ViewerSelector* is an internal class, so it is not a part of the public API. * *IVtkOCC_SelectableObject* - OCCT shape wrapper used in the picking algorithm for computation of selection primitives of a shape for a chosen selection mode. @@ -68,7 +68,7 @@ Basically, it is enough to use the first three packages in the end user’s appl Additionally, *IVtkTools* package contains auxiliary methods in *IVtkTools* namespace. E.g. there is a convenience function populating *vtkLookupTable* instances to set up a color scheme for better visualization of sub-shapes. -@section occt_vis_3 Using high-level API (simple scenario) +@section occt_vis_3 Using high-level API (simple scenario) @subsection occt_vis_3_1 OCCT shape presentation in VTK viewer To visualize an OCCT topological shape in VTK viewer, it is necessary to perform the following steps: @@ -156,7 +156,7 @@ For example, the scalar-based coloring can be disabled to bind a single color to 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} - + 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} - + @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: 1. Create a picker and set its renderer to your active VTK renderer: @@ -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} - + @subsubsection occt_vis_3_5 Selection of sub-shapes *IVtkTools_SubPolyDataFilter* is a handy VTK filter class which allows extraction of polygonal cells corresponding to the sub-shapes of the initial shape. It can be used to produce a *vtkPolyData* object from the input *vtkPolyData* object, using selection results from *IVTkTools_ShapePicker* tool. @@ -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.png "Low-level VIS usage with VTK"} - + The visualization pipeline for OCCT shape presentation can be initialized as follows: 1. Create an instance of *IShape* class initialized by OCCT topological shape: ~~~~ @@ -357,184 +357,10 @@ IVtk_ShapeIdList ids = myOccPickerAlgo->ShapesPicked(); ~~~~ IVtk_ShapeIdList subShapeIds = myOccPickerAlgo->SubShapesPicked(shapeId); -~~~~ +~~~~ @section occt_vis_5 DRAW Test Harness *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. - -@section occt_vis_6 Test Harness Commands -A specific plugin with alias *VIS* should be loaded to have access to VIS functionality in DRAW Test Harness: - -~~~~ -\> pload VIS -~~~~ - -Typical use cases are available in non-regression tests scripts -@subsection occt_vis_6_1 ivtkinit - -Purpose: Creates a window for VTK viewer. - -Syntax: *ivtkinit* - -@figure{/user_guides/vis/images/vis_image008.png} - -@subsection occt_vis_6_2 ivtkdisplay - -Purpose: Displays named objects. - -Syntax: ivtkdisplay name1 [name2] …[name n] - -Example - -~~~~ -ivtkinit -# create cone -pcone c 5 0 10 -ivtkdisplay c -~~~~ - -@figure{/user_guides/vis/images/vis_image009.png} - -@subsection occt_vis_6_3 ivtkerase - -Purpose: Erases named objects. If no arguments are passed, erases all displayed objects. - -Syntax: ivtkerase [name1] [name2] … [name n] - -Example -~~~~ -ivtkinit -# create a sphere -psphere s 10 -# create a cone -pcone c 5 0 10 -# create a cylinder -pcylinder cy 5 10 -# display objects -ivtkdisplay s c cy -# erase only the cylinder -ivtkerase cy -# erase the sphere and the cone -ivtkerase s c -~~~~ - -@subsection occt_vis_6_4 ivtkfit - -Purpose: Automatic zoom/panning. - -Syntax: *ivtkfit* - -@subsection occt_vis_6_5 ivtkdispmode - -Purpose: Sets display mode for a named object. If no arguments are passed, sets the given display mode for all displayed objects -The possible modes are: 0 (WireFrame) and 1 (Shading). - -Syntax: ivtksetdispmode [name] mode(0,1) - -Example - -~~~~ -ivtkinit -# create a cone -pcone c 5 0 10 -# display the cone -ivtkdisplay c -# set shading mode for the cone -ivtksetdispmode c 1 -~~~~ - -@figure{/user_guides/vis/images/vis_image010.png} - -@subsection occt_vis_6_6 ivtksetselmode - -Purpose: Sets selection mode for a named object. If no arguments are passed, sets the given selection mode for all the displayed objects - -Syntax: ivtksetselmode [name] mode on/off(0/1) - -Example -~~~~ -ivtkinit -# load a shape from file -restore CrankArm.brep a -# display the loaded shape -ivtkdisplay a -# set the face selection mode -ivtksetselmode a 4 1 -~~~~ - -@figure{/user_guides/vis/images/vis_image011.png} - -@subsection occt_vis_6_7 ivtkmoveto - -Purpose: Imitates mouse cursor moving to point with the given display coordinates. - -Syntax: ivtkmoveto x y - -Example -~~~~ -ivtkinit -pcone c 5 0 10 -ivtkdisplay c -ivtkmoveto 40 50 -~~~~ - -@subsection occt_vis_6_8 ivtkselect - -Purpose: Imitates mouse cursor moving to point with the given display coordinates and performs selection at this point. - -Syntax: ivtkselect x y - -Example -~~~~ -ivtkinit -pcone c 5 0 10 -ivtkdisplay c -ivtkselect 40 50 -~~~~ - -@subsection occt_vis_6_9 ivtkdump - -Purpose: Dumps the contents of VTK viewer to image. It supports: -* dumping in different raster graphics formats: PNG, BMP, JPEG, TIFF or PNM. -* dumping of different buffers: RGB, RGBA or depth buffer. -* defining of image sizes (width and height in pixels). -* dumping of stereo projections (left or right). - -Syntax: ivtkdump *filename* [buffer={rgb|rgba|depth}] [width height] [stereoproj={L|R}] - -Example -~~~~ -ivtkinit -pcone c 5 0 10 -ivtkdisplay c -ivtkdump D:/ConeSnapshot.png rgb 768 768 -~~~~ - -@subsection occt_vis_6_10 ivtkbgcolor - -Purpose: Sets uniform background color or gradient background if second triple of parameters is set. Color parameters r,g,b have to be chosen in the interval [0..255]. - -Syntax: ivtkbgcolor r g b [r2 g2 b2] - -Example -~~~~ -ivtkinit -ivtkbgcolor 200 220 250 -~~~~ - -@figure{/user_guides/vis/images/vis_image012.png} - -~~~~ -ivtkbgcolor 10 30 80 255 255 255 -~~~~ - -@figure{/user_guides/vis/images/vis_image013.png} - -@section occt_vis_7 Non-regression tests -The test scenarios are available in /test/v3d/ivtk directory to test the functionality of VIS component. This directory contains test cases for all DRAW commands described above. - - - diff --git a/dox/user_guides/visualization/images/camera_perspective.png b/dox/user_guides/visualization/images/camera_perspective.png new file mode 100644 index 0000000000000000000000000000000000000000..bfc33a36265b0a1ef80214a2cac0f532e63e5d2a GIT binary patch literal 27932 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

The presentable object

+

The presentable object

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

The viewer

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

The Interactive Context

The interactive context controls the entire presentation process from a common high-level API. When the application requests the display of an object, the interactive context requests the graphic structure from the presentable object and sends it to the viewer for displaying. @subsubsection occt_visu_2_1_2 Presentation packages -Presentation involves at least the *AIS, PrsMgr, StdPrs* and *V3d* packages. Additional packages such as *Prs3d* and *Graphic3d* may be used if you need to implement your own presentation algorithms. +Presentation involves at least the *AIS, PrsMgr, StdPrs* and *V3d* packages. Additional packages, such as *Prs3d* and *Graphic3d* may be used if you need to implement your own presentation algorithms. + * *AIS* package provides all classes to implement interactive objects (presentable and selectable entities). -* *PrsMgr* package provides all the classes needed to implement the presentation process: the *Presentation* and *PresentableObject* abstract classes and *PresentationManager3d* concrete class. -* *StdPrs* package provides ready-to-use standard presentation algorithms of points, curves and shapes of the geometry and topology toolkits. -* *V3d* package provides the services supported by the 3D viewer. -* *Prs3d* package provides some generic presentation algorithms such as wireframe, shading and hidden line removal associated with a Drawer class which controls the attributes of the presentation to be created in terms of color, line type, thickness, and so on. +* *PrsMgr* package provides low level services and is only to be used when you do not want to use the services provided by AIS. It contains all classes needed to implement the presentation process: abstract classes *Presentation* and *PresentableObject* and concrete class *PresentationManager3d*. +* *StdPrs* package provides ready-to-use standard presentation algorithms for specific geometries: points, curves and shapes of the geometry and topology toolkits. +* *Prs3d* package provides generic presentation algorithms such as wireframe, shading and hidden line removal associated with a *Drawer* class, which controls the attributes of the presentation to be created in terms of color, line type, thickness, etc. +* *V3d* package provides the services supported by the 3D viewer. * *Graphic3d* package provides resources to create 3D graphic structures. +* *Visual3d* package contains classes implementing commands for 3D viewer. +* *DsgPrs* package provides tools for display of dimensions, relations and XYZ trihedrons. @subsubsection occt_visu_2_1_3 A Basic Example: How to display a 3D object @@ -185,21 +186,143 @@ To deactivate selection mode 3 remove all those 2D areas. @subsubsection occt_visu_2_2_3 Selection Packages -The following selection packages exist : *SelectBasics*, *SelectMgr*, *Select3D*, *StdSelect*. +Selection of 3D data structures is provided using various algorithms. The following selection packages exist : *SelectBasics*, *SelectMgr*, *Select3D* and *StdSelect*. + +### Basic Selection *SelectBasics* package contains the basic classes of the selection: - * the main definition of a sensitive primitive: *SensitiveEntity* - * the definition of a sensitive primitive owner: *EntityOwner* + * the main definition of a sensitive primitive: *SensitiveEntity*, which is a selectable entity in a view; + * the definition of a sensitive primitive owner: *EntityOwner* this entity relates the primitive to the application entity which is to be selected in the view. * the algorithm used for sorting sensitive boxes: *SortAlgo* *EntityOwner* is used to establish a link from *SensitiveEntity* to application-level objects. For example, *SelectMgr_EntityOwner* (see below) class holds a pointer to corresponding *SelectableObject*. -*SelectMgr* package is used to manage the whole dynamic selection process. It contains the *SelectableObject*, Entity Owner containing a link to its *SelectableObject*, *Selection*, *SelectionManager*, and *ViewSelector* classes. +### Standard Selections + +*Select3D* package provides definition of all 3D standard sensitive primitives such as point, curve and face. All these classes inherit from 3D *SensitiveEntry* from *SelectBasics* with an additional method, which allows recovery of the bounding boxes in the 2D graphic selection space, if required. This package also includes the 3D-2D projector. + +*StdSelect* package provides standard uses of the classes described above and main tools used to prevent the developer from redefining the selection objects. In particular, *StdSelect* includes standard modes for selection of topological shapes, definition of several filter standard Selection2d.ap classes and 3D viewer selectors. + +Note that each new Interactive Object must have all its selection modes defined. + +### Selection Management + +*SelectMgr* package is used to manage the whole dynamic selection process. + +It provides low level services and classes *SelectMgr_SelectionManager* and *SelectMgr_ViewerSelector*. They can be used when you do not want to use the services provided by *AIS*. + There are also implementations of *ViewerSelector* interface for 3D selection in *StdSelect* package: *ViewerSelector3d*. -*Select3D* package contains all 3D standard sensitive primitives such as point, curve and face. All these classes inherit from 3D *SensitiveEntry* from *SelectBasics* with an additional method, which allows recovery of the bounding boxes in the 2D graphic selection space, if required. This package also includes the 3D-2D projector. +*SelectMgr* manages the process of dynamic selection through the following services: -*StdSelect* package provides standard uses of the classes described above and main tools used to prevent the developer from redefining the selection objects. In particular, *StdSelect* includes standard means for selection of topological objects (shapes). + * Activating and deactivating selection modes for Interactive Objects. + * Adding and removing viewer selectors. + * Definitions of abstract filter classes. + +The principle of graphic selection consists in representing the objects which you want to select by a bounding box in the selection view. +The object is selected when you use the mouse to designate the zone produced by the object. + +To realize this, the application creates a selection structure which is independent of the point of view. +This structure is made up of sensitive primitives which have one owner object associated to each of them. +The role of the sensitive primitive is to reply to the requests of the selection algorithm whereas the owner's purpose is to make the link between the sensitive primitive and the object to be selected. +Each selection structure corresponds to a selection mode which defines the elements that can be selected. + +### Example: Selection of a Geometric Model + +For example, to select a complete geometric model, the application can create a sensitive primitive for each face of the interactive object representing the geometric model. +In this case, all the primitives share the same owner. +On the other hand, to select an edge in a model, the application must create one sensitive primitive per edge. + +~~~~ + +void InteractiveBox::ComputeSelection (const Handle(SelectMgr_Selection)& theSel, + const Standard_Integer theMode) +{ +switch (theMode) +{ + case 0: // locating the whole box by making its faces sensitive + { + Handle(SelectMgr_EntityOwner) anOwner = new SelectMgr_EntityOwner (this, 5); + for (Standard_Integer anIt = 1; anIt <= aFacesNb; anIt++) + { + theSel->Add (new Select3D_SensitiveFace (anOwner,[array of the vertices] face I); + break; + } + case 1: // locating the edges + { + for (Standard_Integer anIt = 1; anIt <= 12; anIt++) + { + // 1 owner per edge + Handle(mypk_EdgeOwner) anOwner = new mypk_EdgeOwner (this, anIt, 6); // 6->priority + theSel->Add (new Select3D_SensitiveSegment (anOwner, firstpt (anIt), lastpt (anIt)); + } + } +} + +~~~~ + +The algorithms for creating selection structures store the sensitive primitives in a SelectMgr_Selection object. +To do this, a set of ready-made sensitive primitives is supplied in the Select3Dpackage. +New sensitive primitives can be defined through inheritance from SensitiveEntity. +For the application to make its own objects selectable, it must define owner classes inheriting SelectMgr_EntityOwner. + +Selection structures for any interactive object are generated in ComputeSelection() method. +In the example below there are different modes of selection on the topological shape contained within the interactive object, +selection of the shape itself, the vertices, the edges, the wires, the faces. + +~~~~ + void MyPack_MyClass::ComputeSelection( + const Handle(SelectMgr_Selection)& theaSelection, + const Standard_Integer theMode) + { + switch (theMode) + { + case 0: + StdSelect_BRepSelectionTool::Load (theSelection, this, myShape, TopAbs_SHAPE); + break; + case 1: + StdSelect_BRepSelectionTool::Load (theSelection, this, myShape, TopAbs_VERTEX); + break; + case 2: + StdSelect_BRepSelectionTool::Load (theSelection, this, myShape, TopAbs_EDGE); + break; + case 3: + StdSelect_BRepSelectionTool::Load (theSelection, this, myShape, TopAbs_WIRE); + break; + case 4: + StdSelect_BRepSelectionTool::Load (theSelection, this, myShape, TopAbs_FACE); + break; + } + } +~~~~ + +The StdSelect_BRepSelectionTool object provides a high level service which will make the topological shape myShape selectable when the AIS_InteractiveContext is asked to display your object. + +Note: + +The traditional way of highlighting selected entity owners adopted by Open CASCADE Technology assumes that each entity owner highlights itself on its own. This approach has two drawbacks: + + * Each entity owner has to maintain its own Prs3d_Presentation object, that results in large memory overhead for thousands of owners. + * Drawing selected owners one by one is not efficient from the OpenGL usage viewpoint. + +That is why a different method has been introduced. +On the basis of SelectMgr_EntityOwner::IsAutoHilight() return value AIS_LocalContext +object either uses the traditional way of highlighting (IsAutoHilight() returned true) +or groups such owners according to their Selectable Objects and finally calls SelectMgr_SelectableObject::HilightSelected() or +ClearSelected(), passing a group of owners as an argument. + +Hence, an application can derive its own interactive object and redefine HilightSelected(), +ClearSelected() and HilightOwnerWithColor() virtual methods +to take advantage of such OpenGL technique as arrays of primitives. +In any case, these methods should at least have empty implementation. + +The AIS_LocalContext::UpdateSelected (const Handle(AIS_InteratciveObject)&, Standard_Boolean) +method can be used for efficient redrawing a selection presentation for a given interactive object from an application code. + +Additionally, the SelectMgr_SelectableObject::ClearSelections() method now accepts an optional Boolean argument. +This parameter defines whether all object selections should be flagged for further update or not. +This improved method can be used to re-compute an object selection (without redisplaying the object completely) +when some selection mode is activated not for the first time. @subsubsection occt_visu_2_2_4 How to use dynamic selection @@ -301,6 +424,8 @@ It can be necessary to filter the entities to be selected. Consequently there ar @subsection occt_visu_3_2 Interactive objects +Entities which are visualized and selected in the AIS viewer are objects. They connect the underlying reference geometry of a model to its graphic representation in *AIS*. You can use the predefined OCCT classes of standard interactive objects, for which all necessary functions have already been programmed, or, if you are an advanced user, you can implement your own classes of interactive objects. + @subsubsection occt_visu_3_2_1 Presentations An interactive object can have as many presentations as its creator wants to give it. @@ -455,13 +580,18 @@ These functions can be useful if you decide that the *0* mode used by default w      @subsubsection occt_visu_3_2_5 Graphic attributes -Keep in mind the following points concerning graphic attributes: +Graphic attributes manager, or *AIS Drawer*, stores graphic attributes for specific interactive objects and for interactive objects controlled by interactive context. + +Initially, all drawer attributes are filled out with the predefined values which will define the default 3D object appearance. + +When an interactive object is visualized, the required graphic attributes are first taken from its own drawer if one exists, or from the context drawer if no specific drawer for that type of object exists. + +Keep in mind the following points concerning graphic attributes: * Each interactive object can have its own visualization attributes. * The set of graphic attributes of an interactive object is stocked in an *AIS_Drawer*, which is only a *Prs3d_Drawer* with the possibility of a link to another drawer * By default, the interactive object takes the graphic attributes of the context in which it is visualized (visualization mode, deflection values for the calculation of presentations, number of isoparameters, color, type of line, material, etc.) * In the *AIS_InteractiveObject* abstract class, 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. - @image html visualization_image019.png "Figure 13. Redefinition of virtual functions for changes in AIS_Point" @image latex visualization_image019.png "Figure 13. Redefinition of virtual functions for changes in AIS_Point" @@ -566,7 +696,7 @@ Standard_Boolean     AIS_InteractiveContext::HasPolygonOffsets @subsubsection occt_visu_3_3_1 Rules -The Interactive Context allows us to manage in a transparent way, the graphic and "selectable" behavior of interactive objects in one or more viewers. Most functions which allow us to modify the attributes of interactive objects, and which were presented in the preceding chapter, will be looked at again here. +The Interactive Context allows managing in a transparent way the graphic and **selectable** behavior of interactive objects in one or more viewers. Most functions which allow modifying the attributes of interactive objects, and which were presented in the preceding chapter, will be looked at again here. There is one essential rule to follow: the modification of an interactive object, which is already known by the Context, must be done using Context functions. You can only directly call the functions available for an interactive object if it has not been loaded into an Interactive Context. @@ -588,11 +718,11 @@ Handle (AIS_Shape) TheAISShape = new AIS_Shape (ashape); @subsubsection occt_visu_3_3_2 Groups of functions -You must distinguish two states in the Interactive Context: -* No Open Local Context; which will be referred to as Neutral Point. -* One or several open local contexts, each representing a temporary state of selection and presentation. +**Neutral Point** and **Local Context** constitute the two operating modes or states of the **Interactive Context**, which is the central entity which pilots visualizations and selections. -Some functions can only be used in open Local Context; others in closed local context; others do not have the same behavior in one state as in the other. +The **Neutral Point**, which is the default mode, allows easily visualizing and selecting interactive objects, which have been loaded into the context. Opening **Local contexts** allows preparing and using a temporary selection environment without disturbing the neutral point. + +A set of functions allows choosing the interactive objects which you want to act on, the selection modes which you want to activate, and the temporary visualizations which you will execute. When the operation is finished, you close the current local context and return to the state in which you were before opening it (neutral point or previous local context). The Interactive Context is composed of many functions, which can be conveniently grouped according to the theme: * management proper to the context; @@ -600,16 +730,23 @@ The Interactive Context is composed of many functions, which can be convenientl * presentations and selection in open/closed context; * selection strictly speaking. +Some functions can only be used in open Local Context; others in closed local context; others do not have the same behavior in one state as in the other. @subsubsection occt_visu_3_3_3 Management of the Interactive Context -The Interactive Context is made up of a Principal Viewer and, optionally, a trash bin or "Collector" Viewer. It also has a group of adjustable settings allowing you to personalize the behavior of presentations and selections: - * Default Drawer, containing all the color and line attributes which can be used by interactive objects, which do not have their own attributes. +The **Interactive Context** is made up of a **Principal Viewer** and, optionally, a trash bin or **Collector Viewer**. + +An interactive object can have a certain number of specific graphic attributes, such as visualization mode, color, and material. Correspondingly, the interactive context has a set of graphic attributes, the *Drawer*, which is valid by default for the objects it controls. + +When an interactive object is visualized, the required graphic attributes are first taken from the object's own Drawer if one exists, or from the context drawer for the others. + +The following adjustable settings allow personalizing the behavior of presentations and selections: + * Default Drawer, containing all the color and line attributes which can be used by interactive objects, which do not have their own attributes. * Default Visualization Mode for interactive objects. By default: *mode 0* ; * Highlight color of entities detected by mouse movement. By default: *Quantity_NOC_CYAN1*; * Pre-selection color. By default: *Quantity_NOC_GREEN*; * Selection color (when you click on a detected object). By default: *Quantity_NOC_GRAY80*; - * Sub-Intensity color. By default: *Quantity_NOC_GRAY40*. + * Sub-Intensity color. By default: *Quantity_NOC_GRAY40*. All of these settings can be modified by functions proper to the Context. @@ -626,9 +763,10 @@ TheCtx->SetDisplayMode(2); // obj1 stays visualised in its mode 3. ~~~~~ -*PresentationManager3D* and a *Selector3D* which manage the presentation and selection of present interactive objects, are associated to the main Viewer. The same is true of the optional Collector. +*PresentationManager3D* and *Selector3D*, which manage the presentation and selection of present interactive objects, are associated to the main Viewer. The same is true of the optional Collector. @subsection occt_visu_3_4 Local Context + @subsubsection occt_visu_3_4_1 Rules and Conventions * Opening a local context allows preparing an environment for temporary presentations and selections, which will disappear once the local context is closed. @@ -649,7 +787,7 @@ The specific modes of selection only concern the interactive objects, which are The local context can be opened using method *AIS_InteractiveContext::OpenLocalContext*. The following options are available: * *UseDisplayedObjects*: allows loading the interactive objects visualized at Neutral Point in the opened local context. If *FALSE*, the local context is empty after being opened. If *TRUE*, the objects at Neutral Point are modified by their default selection mode. * *AllowShapeDecomposition*: *AIS_Shape* allows or prevents decomposition in standard shape location mode of objects at Neutral Point, which are type-privileged (see Selection chapter). This Flag is only taken into account when *UseDisplayedObjects* is *TRUE*. - * *AcceptEraseOfObjects*: authorises other local contexts to erase the interactive objects present in this context. This option is rarely used. The last option has no current use. + * *AcceptEraseOfObjects*: authorizes other local contexts to erase the interactive objects present in this context. This option is rarely used. The last option has no current use. This function returns the index of the created local context. It should be kept and used when the context is closed. @@ -667,14 +805,14 @@ Closing Local Contexts is done by: *Warning* When the index isn’t specified in the first function, the current Context is closed. This option can be dangerous, as other Interactive Functions can open local contexts without necessarily warning the user. For greater security, you have to close the context with the index given on opening. -To get the index of the current context, use function "AIS_InteractiveContext::IndexOfCurrentLocal". It allows closing all open local contexts at one go. In this case, you find yourself directly at Neutral Point. +To get the index of the current context, use function *AIS_InteractiveContext::IndexOfCurrentLocal*. It allows closing all open local contexts at one go. In this case, you find yourself directly at Neutral Point. -When you close a local context, all temporary interactive objects are deleted, all selection modes concerning the context are cancelled, and all content filters are emptied. +When you close a local context, all temporary interactive objects are deleted, all selection modes concerning the context are canceled, and all content filters are emptied. @subsubsection occt_visu_3_4_3 Presentation in a Neutral Point -You must distinguish between the Neutral Point and the Open Local Context states. Although the majority of visualization functions can be used in both situations, their behavior is different. +You must distinguish between the **Neutral Point** and the **Open Local Context** states. Although the majority of visualization functions can be used in both situations, their behavior is different. Neutral Point should be used to visualize the interactive objects, which represent and select an applicative entity. Visualization and Erasing orders are straightforward: @@ -707,11 +845,11 @@ Bear in mind the following points: * The second *Display* function should only be used in Neutral Point to visualize a supplementary mode for the object, which you can erase by *EraseMode (...)*. You activate the selection mode. This is passed as an argument. By convention, if you do not want to activate a selection mode, you must set the *SelectionMode* argument to -1. This function is especially interesting in open local context, as we will see below. * In Neutral Point, it is not advisable to activate other selection modes than the default selection one. It is preferable to open a local context in order to activate particular selection modes. * When you call *Erase(Interactive object)* function, the *PutIncollector* argument, which is *FALSE* by default, allows you to visualize the object directly in the Collector and makes it selectable (by activation of 0 mode). You can nonetheless block its passage through the Collector by changing the value of this option. In this case, the object is present in the Interactive Context, but is not seen anywhere. - * *Erase()* with *putInCollector = Standard_True* might be slow as it computes again the object presentation in the Collector. Set *putInCollector* to *Standard_False* if you simply want to hide the object’s presentation temporarily. + * *Erase()* with *putInCollector = Standard_True* might be slow as it recomputes the object presentation in the Collector. Set *putInCollector* to *Standard_False* if you simply want to hide the object’s presentation temporarily. * Visualization attributes and graphic behavior can be modified through a set of functions similar to those for the interactive object (color, thickness of line, material, transparency, locations, etc.) The context then manages immediate and deferred updates. * Call *Remove()* method of *InteractiveContext* as soon as the interactive object is no longer needed and you want to destroy it.. Otherwise, references to *InteractiveObject* are kept by *InteractiveContext*, and the *Object* is not destroyed, which results in memory leaks. In general, if the presentation of an interactive object can be computed quickly, it is recommended to *Remove()* it instead of using *Erase()* method. -@subsubsection occt_visu_3_4_4 Presentation in Local Context +@subsubsection occt_visu_3_4_4 Presentation in the Local Context In open local context, the *Display* functions presented above can be as well. @@ -744,7 +882,10 @@ Use *AIS_InteractiveContext::Activate* and *AIS_InteractiveContext::Deactivate* @subsubsection occt_visu_3_4_5 Filters -When Interactive objects have been "prepared" in the local context, you can add rejection filters. The root class of objects is *SelectMgr_Filter*. The principle behind it is straightforward: a filter tests to see whether the owners (SelectMgr_EntityOwner) detected in mouse position by the Local context selector answer *OK*. If so, it is kept, otherwise it is rejected. +To define an environment of dynamic detection, you can use standard filter classes or create your own. +A filter questions the owner of the sensitive primitive in local context to determine if it has the desired qualities. If it answers positively, it is kept. If not, it is rejected. + +The root class of objects is *SelectMgr_Filter*. The principle behind it is straightforward: a filter tests to see whether the owners (SelectMgr_EntityOwner) detected in mouse position by the Local context selector answer *OK*. If so, it is kept, otherwise it is rejected. You can create a custom class of filter objects by implementing the deferred function *IsOk()*: @@ -759,12 +900,12 @@ In *SelectMgr*, there are also Composition filters (AND Filters, OR Filters), w There are Standard filters, which have already been implemented in several packages: * *StdSelect_EdgeFilter* - for edges, such as lines and circles; * *StdSelect_FaceFilter* - for faces, such as planes, cylinders and spheres; - * *StdSelect_ShapeTypeFilter* - for shape types, such as compounds, solids, shells and wires; + * *StdSelect_ShapeTypeFilter* - for shape types, such as compounds, solids, shells and wires; * *AIS_TypeFilter* - for types of interactive objects; * *AIS_SignatureFilter* - for types and signatures of interactive objects; * *AIS_AttributeFilter* - for attributes of Interactive Objects, such as color and width. -As there are specific behaviors on shapes, each new Filter class must, if necessary, redefine *AIS_LocalContext::ActsOn* function, which informs the Local Context if it acts on specific types of sub-shapes. By default, this function answers *FALSE*. +As there are specific behaviors on shapes, each new *Filter* class must, if necessary, redefine *AIS_LocalContext::ActsOn* function, which informs the Local Context if it acts on specific types of sub-shapes. By default, this function answers *FALSE*. **WARNING** @@ -1048,7 +1189,20 @@ myCtx->CloseLocalContext(myIndex); @subsection occt_visu_3_5 Standard Interactive Object Classes -@subsubsection occt_visu_3_5_1 Datums +Interactive Objects are selectable and viewable objects connecting graphic representation and the underlying reference geometry. + +They are divided into four types: + * the **Datum** - a construction geometric element; + * the **Relation** - a constraint on the interactive shape and the corresponding reference geometry; + * the **Object** - a topological shape or connection between shapes; + * **None** a token, that instead of eliminating the object, tells the application to look further until it finds an acceptable object definition in its generation. + +Inside these categories, there is a possibility of additional characterization by means of a signature. The signature provides an index to the further characterization. By default, the **Interactive Object** has a *None* type and a signature of 0 (equivalent to *None*). +If you want to give a particular type and signature to your interactive object, you must redefine the two virtual methods: Type and Signature. + +@subsubsection occt_visu_3_5_1 Datum + +The **Datum** groups together the construction elements such as lines, circles, points, trihedrons, plane trihedrons, planes and axes. *AIS_Point, AIS_Axis, AIS_Line, AIS_Circle, AIS_Plane* and *AIS_Trihedron* have four selection modes: * mode 0 : selection of a trihedron; @@ -1064,11 +1218,13 @@ when you activate one of modes: 1 2 3 4, you pick AIS objects of type: *AIS_PlaneTrihedron* offers three selection modes: * mode 0 : selection of the whole trihedron; * mode 1 : selection of the origin of the trihedron; - * mode 2 : selection of the axes - same remarks as for the Trihedron. + * mode 2 : selection of the axes - same remarks as for the Trihedron. For the presentation of planes and trihedra, the default unit of length is millimeter, and the default value for the representation of axes is 100. If you modify these dimensions, you must temporarily recover the object **Drawer**. From it, take the *Aspects* in which the values for length are stored (*PlaneAspect* for the plane, *FirstAxisAspect* for trihedra), and change these values inside these Aspects. Finally, recalculate the presentation. -@subsubsection occt_visu_3_5_2 Objects +@subsubsection occt_visu_3_5_2 Object + +The **Object** type includes topological shapes, and connections between shapes. *AIS_Shape* has three visualization modes : * mode 0 : Line (default mode) @@ -1092,7 +1248,53 @@ And at maximum seven selection modes, depending on the shape complexity: * *AIS_TexturedShape* is an Interactive Object that supports texture mapping. It is constructed as a usual AIS_Shape, but has additional methods that allow to map a texture on it. * *MeshVS_Mesh* is an Interactive Object that represents meshes, it has a data source that provides geometrical information (nodes, elements) and can be built up from the source data with a custom presentation builder. + +The class *AIS_ColoredShape* allows using custom colors and line widths for *TopoDS_Shape* objects and their sub-shapes. + +~~~~~ + AIS_ColoredShape aColoredShape = new AIS_ColoredShape (theShape); + + // setup color of entire shape + aColoredShape->SetColor (Quantity_Color (Quantity_NOC_RED)); + + // setup line width of entire shape + aColoredShape->SetWidth (1.0); + + // set transparency value + aColoredShape->SetTransparency (0.5); + + // customize color of specified sub-shape + aColoredShape->SetCustomColor (theSubShape, Quantity_Color (Quantity_NOC_BLUE1)); + + // customize line width of specified sub-shape + aColoredShape->SetCustomWidth (theSubShape, 0.25); +~~~~~ + +The presentation class *AIS_PointCloud* can be used for efficient drawing of large arbitrary sets of colored points. It uses *Graphic3d_ArrayOfPoints* to pass point data into OpenGl graphic driver to draw a set points as an array of "point sprites". The point data is packed into vertex buffer object for performance. +- 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. + +@image html point_cloud.png "A random colored cloud of points" + +Example: +~~~~~ +Handle(Graphic3d_ArrayOfPoints) aPoints = new Graphic3d_ArrayOfPoints (2000, Standard_True); +aPoints->AddVertex (gp_Pnt(-40.0, -40.0, -40.0), Quantity_Color (Quantity_NOC_BLUE1)); +aPoints->AddVertex (gp_Pnt (40.0, 40.0, 40.0), Quantity_Color (Quantity_NOC_BLUE2)); + +Handle(AIS_PointCloud) aPntCloud = new AIS_PointCloud(); +aPntCloud->SetPoints (aPoints); +~~~~~ + +The draw command *vpointcloud* builds a cloud of points from shape triangulation. +This command can also draw a sphere surface or a volume with a large amount of points (more than one million). + + @subsubsection occt_visu_3_5_3 Relations + +The **Relation** is made up of constraints on one or more interactive shapes and the corresponding reference geometry. For example, you might want to constrain two edges in a parallel relation. This constraint is considered as an object in its own right, and is shown as a sensitive primitive. This takes the graphic form of a perpendicular arrow marked with the || symbol and lying between the two edges. + +The following relations are provided by *AIS*: * *AIS_ConcentricRelation* * *AIS_FixRelation* * *AIS_IdenticRelation* @@ -1346,249 +1548,27 @@ for(VS->Init();VS->More();VS->Next()) * **View mapping** - defines the transformation from View Reference Coordinates to the Normalized Projection Coordinates. This follows the Phigs scheme. * **Z-Buffering** -= a form of hidden surface removal in shading mode only. This is always active for a view in the shading mode. It cannot be suppressed. -@subsection occt_visu_4_2 Creating a 3D scene +@subsection occt_visu_4_2 Graphic primitives -To create 3D graphic objects and display them on the screen, follow the procedure below: -1. Create attributes. -2. Create a 3D viewer.. -3. Create a view. -4. Create an interactive context. -5. Create interactive objects. -6. Create primitives in the interactive object -7. Display the interactive object. - -@subsubsection occt_visu_4_2_1 Create attributes - -Create colors. - -~~~~~ -Quantity_Color Black (Quantity_NOC_BLACK); -Quantity_Color Blue (Quantity_NOC_MATRABLUE); -Quantity_Color Brown (Quantity_NOC_BROWN4); -Quantity_Color Firebrick (Quantity_NOC_FIREBRICK); -Quantity_Color Forest (Quantity_NOC_FORESTGREEN); -Quantity_Color Gray (Quantity_NOC_GRAY70); -Quantity_Color MyColor (0.99, 0.65, 0.31, Quantity_TOC_RGB); -Quantity_Color Beet (Quantity_NOC_BEET); -Quantity_Color White (Quantity_NOC_WHITE); -~~~~~ - - -Create line attributes. - -~~~~~ -Handle(Graphic3d_AspectLine3d) CTXLBROWN = new Graphic3d_AspectLine3d (); -Handle(Graphic3d_AspectLine3d) CTXLBLUE = new Graphic3d_AspectLine3d (); -Handle(Graphic3d_AspectLine3d) CTXLWHITE = new Graphic3d_AspectLine3d(); - CTXLBROWN->SetColor (Brown); - CTXLBLUE->SetColor (Blue); - CTXLWHITE->SetColor (White); -~~~~~ - -Create marker attributes. -~~~~~ -Handle(Graphic3d_AspectMarker3d) CTXMFIREBRICK = new Graphic3d_AspectMarker3d(); - CTXMFIREBRICK->SetColor (Firebrick); - CTXMFIREBRICK->SetScale (1.0); - CTXMFIREBRICK->SetType (Aspect_TOM_BALL); -~~~~~ - -Create facet attributes. -~~~~~ -Handle(Graphic3d_AspectFillArea3d) CTXF = new Graphic3d_AspectFillArea3d (); -Graphic3d_MaterialAspect BrassMaterial (Graphic3d_NOM_BRASS); -Graphic3d_MaterialAspect GoldMaterial (Graphic3d_NOM_GOLD); - CTXF->SetInteriorStyle (Aspect_IS_SOLID); - CTXF->SetInteriorColor (MyColor); - CTXF->SetDistinguishOn (); - CTXF->SetFrontMaterial (GoldMaterial); - CTXF->SetBackMaterial (BrassMaterial); - CTXF->SetEdgeOn (); -~~~~~ - -Create text attributes. -~~~~~ -Handle(Graphic3d_AspectText3d) CTXT = new Graphic3d_AspectText3d (Forest, Graphic3d_NOF_ASCII_MONO, 1., 0.); -~~~~~ - -@subsubsection occt_visu_4_2_2 Create a 3D Viewer (a Windows example) - -~~~~~ -Handle(Aspect_DisplayConnection) aDisplayConnection; -Handle(Graphic3d_GraphicDriver) aGraphicDriver = Graphic3d::InitGraphicDriver (aDisplayConnection); -TCollection_ExtendedString aName("3DV"); -myViewer = new V3d_Viewer (aGraphicDriver,aName.ToExtString (), ""); -myViewer -> SetDefaultLights (); -myViewer -> SetLightOn (); -~~~~~ - -@subsubsection occt_visu_4_2_3 Create a 3D view (a Windows example) - -It is assumed that a valid Windows window may already be accessed via the method *GetSafeHwnd()*. -~~~~~ -Handle (WNT_Window) aWNTWindow; -aWNTWindow = new WNT_Window (GetSafeHwnd()); -myView = myViewer -> CreateView(); -myView -> SetWindow (a WNTWindow); -~~~~~ - -@subsubsection occt_visu_4_2_4 Create an interactive context - -~~~~~ -myAISContext = new AIS_InteractiveContext (myViewer); -~~~~~ - -You are now able to display interactive objects such as an *AIS_Shape*. - -~~~~~ -TopoDS_Shape aShape = BRepAPI_MakeBox(10,20,30)_Solid(); -Handle (AIS_Shape) aAISShape = new AIS_Shape(aShape); -myAISContext -> Display (aAISShape); -~~~~~ - -@subsubsection occt_visu_4_2_5 Create your own interactive object - -Follow the procedure below to compute the presentable object: - -1. Build a presentable object inheriting from *AIS_InteractiveObject* (refer to the Chapter on Presentable Objects). -2. Reuse the *Prs3d_Presentation* provided as an argument of the compute methods. - -**Note** that there are two compute methods: one for a standard representation, and the other for a degenerated representation, i.e. in hidden line removal and wireframe modes. - - -Let us look at the example of compute methods - -~~~~~ -Void -myPresentableObject::Compute - (const Handle(PrsMgr_PresentationManager3d)& - aPresentationManager, - const Handle(Prs3d_Presentation)& aPrs, - const Standard_Integer aMode) -( -//... -) - -void -myPresentableObject::Compute - (const Handle(Prs3d_Projector)&, - const Handle(Prs3d_Presentation)& aPrs) -( -//... -) -~~~~~ - -@subsubsection occt_visu_4_2_6 Create primitives in the interactive object - -Get the group used in *Prs3d_Presentation*. - -~~~~~ -Handle(Graphic3d_Group) TheGroup = Prs3d_Root::CurrentGroup(aPrs); -~~~~~ - -Update the group attributes. - -~~~~~ -TheGroup -> SetPrimitivesAspect(CTXLBLUE); -~~~~~ - -Create two triangles in *TheGroup*. - -~~~~~ -Standard_Integer aNbTria = 2; -Handle(Graphic3d_ArrayOfTriangles) aTriangles = new Graphic3d_ArrayOfTriangles(3 * aNbTria, 0, Standard_True); -Standard_Integer anIndex; -for (anIndex = 1; anIndex <= aNbTria; nt++) -{ -  aTriangles->AddVertex(anIndex * 5., 0., 0., 1., 1., 1.); -  aTriangles->AddVertex(anIndex * 5 + 5, 0., 0., 1., 1., 1.); -  aTriangles->AddVertex(anIndex * 5 + 2.5, 5., 0., 1., 1., 1.); -} -TheGroup->BeginPrimitives (); -mygroup->AddPrimitiveArray(aTriangles); -TheGroup->EndPrimitives (); -~~~~~ - -The *BeginPrimitives()* and *EndPrimitives()* methods are used when creating a set of various primitives in the same group. -Use the polyline function to create a boundary box for the *Struct* structure in group *TheGroup*. - -~~~~~ -Standard_Real Xm, Ym, Zm, XM, YM, ZM; -Struct->MinMaxValues (Xm, Ym, Zm, XM, YM, ZM); - -Handle(Graphic3d_ArrayOfPolylines) aPolylines = new Graphic3d_ArrayOfPolylines(16, 4); -aPolylines->AddBound (4); -aPolylines->AddVertex (Xm, Ym, Zm); -aPolylines->AddVertex (Xm, Ym, ZM); -aPolylines->AddVertex (Xm, YM, ZM); -aPolylines->AddVertex (Xm, YM, Zm); -aPolylines->AddBound (4); -aPolylines->AddVertex (Xm, Ym, Zm); -aPolylines->AddVertex (XM, Ym, Zm); -aPolylines->AddVertex (XM, Ym, ZM); -aPolylines->AddVertex (XM, YM, ZM); -aPolylines->AddBound (4); -aPolylines->AddVertex (XM, YM, Zm); -aPolylines->AddVertex (XM, Ym, Zm); -aPolylines->AddVertex (XM, YM, Zm); -aPolylines->AddVertex (Xm, YM, Zm); -aPolylines->AddBound (4); -aPolylines->AddVertex (Xm, YM, ZM); -aPolylines->AddVertex (XM, YM, ZM); -aPolylines->AddVertex (XM, Ym, ZM); -aPolylines->AddVertex (Xm, Ym, ZM); - -TheGroup->BeginPrimitives (); -TheGroup->AddPrimitiveArray(aPolylines); -TheGroup->EndPrimitives (); -~~~~~ - -Create text and markers in group *TheGroup*. - -~~~~~ -static char *texte[3] = {  "Application title", - "My company", - "My company address." }; -Graphic3d_Array1OfVertex Tpts8 (0, 1); -Tpts8(0).SetCoord (-40.0, -40.0, -40.0); -Tpts8(1).SetCoord (40.0, 40.0, 40.0); -TheGroup->MarkerSet (Tpts8); -Graphic3d_Vertex Marker (0.0, 0.0, 0.0); - -for (i=0; i<=2; i++) { -  Marker.SetCoord (-(Standard_Real)i*4 + 30, -                    (Standard_Real)i*4, -                   -(Standard_Real)i*4); -  TheGroup->Text (texte[i], Marker, 20.); -} -~~~~~ - -@section occt_visu_5 3D Resources - -The 3D resources include the *Graphic3d* and *V3d* packages. - -@subsection occt_visu_5_1 Graphic3D Package - -@subsubsection occt_visu_5_1_1 Overview - -The *Graphic3d* package is used to create 3D graphic objects in a 3D viewer. These objects called **structures** are made up of groups of primitives and attributes. A group is the smallest editable element of a structure. A transformation can be applied to a structure. Structures can be connected to form a tree of structures, composed by transformations. Structures are globally manipulated by the viewer. - -@subsubsection occt_visu_5_1_2 Provided services +The *Graphic3d* package is used to create 3D graphic objects in a 3D viewer. These objects called **structures** are made up of groups of primitives and attributes, such as polylines, planar polygons with or without holes, text and markers, and attributes, such as color, transparency, reflection, line type, line width, and text font. A group is the smallest editable element of a structure. A transformation can be applied to a structure. Structures can be connected to form a tree of structures, composed by transformations. Structures are globally manipulated by the viewer. Graphic structures can be: * Displayed, * Highlighted, * Erased, * Transformed, - * Connected to form a tree. + * Connected to form a tree hierarchy of structures, created by transformations. There are classes for: * Visual attributes for lines, faces, markers, text, materials, * Vectors and vertices, * Graphic objects, groups, and structures. -@subsubsection occt_visu_5_1_3 About the primitives +@subsubsection occt_visu_4_2_2 Structure hierarchies +The root is the top of a structure hierarchy or structure network. The attributes of a parent structure are passed to its descendants. The attributes of the descendant structures do not affect the parent. Recursive structure networks are not supported. + +@subsubsection occt_visu_4_2_3 Graphic primitives * **Markers** * Have one or more vertices, * Have a type, a scale factor, and a color, @@ -1615,7 +1595,7 @@ There are classes for: * Geometric attributes - character height, character up vector, text path, horizontal and vertical alignment, orientation, three-dimensional position, zoomable flag * Non-geometric attributes - text font, character spacing, character expansion factor, color. -@subsubsection occt_visu_5_1_4 Primitive arrays +@subsubsection occt_visu_4_2_4 Primitive arrays Primitive arrays are a more efficient approach to describe and display the primitives from the aspects of memory usage and graphical performance. The key feature of the primitive arrays is that the primitive data is not duplicated. For example, two polygons could share the same vertices, so it is more efficient to keep the vertices in a single array and specify the polygon vertices with indices of this array. In addition to such kind of memory savings, the OpenGl graphics driver provides the Vertex Buffer Objects (VBO). VBO is a sort of video memory storage that can be allocated to hold the primitive arrays, thus making the display operations more efficient and releasing the RAM memory. @@ -1791,29 +1771,7 @@ or get the number of vertices, edges and bounds: Standard_Integer Graphic3d_ArrayOfPrimitives::BoundNumber ~~~~~ -@subsubsection occt_visu_5_1_5 Materials - -A *material* is defined by : - * Transparency, - * Diffuse reflection - a component of the object color; - * Ambient reflection; - * Specular reflection - a component of the color of the light source. - -The following items are required to determine the three colors of reflection: - * Color, - * Coefficient of diffuse reflection, - * Coefficient of ambient reflection, - * Coefficient of specular reflection. - -@subsubsection occt_visu_5_1_6 Textures - -A *texture* is defined by a name. -Three types of texture are available: - * 1D, - * 2D, - * Environment mapping. - -@subsubsection occt_visu_5_1_7 Graphic3d text +@subsubsection occt_visu_4_2_5 Text primitive The OpenGl graphics driver uses advanced text rendering powered by FTGL library. This library provides vector text rendering, as a result the text can be rotated and zoomed without quality loss. *Graphic3d* text primitives have the following features: @@ -1879,24 +1837,71 @@ Graphic3d_Vertex aPoint (1, 1, 1); aGroup->Text (Standard_CString ("Text"), aPoint, 16.0); ~~~~~ -@subsubsection occt_visu_5_1_8 Display priorities +@subsubsection occt_visu_4_2_6 Materials -Structure display priorities control the order in which structures are drawn. When you display a structure you specify its priority. The lower the value, the lower the display priority. When the display is regenerated the structures with the lowest priority are drawn first. For structures with the same display priority the order in which they were displayed determines the drawing order. OCCT supports eleven structure display priorities. +A *Graphic3d_MaterialAspect* is defined by: + * Transparency; + * Diffuse reflection - a component of the object color; + * Ambient reflection; + * Specular reflection - a component of the color of the light source; + * Refraction index. -@subsubsection occt_visu_5_1_9 About structure hierarchies +The following items are required to determine the three colors of reflection: + * Color; + * Coefficient of diffuse reflection; + * Coefficient of ambient reflection; + * Coefficient of specular reflection. -The root is the top of a structure hierarchy or structure network. The attributes of a parent structure are passed to its descendants. The attributes of the descendant structures do not affect the parent. Recursive structure networks are not supported. +@subsubsection occt_visu_4_2_7 Textures -@subsection occt_visu_5_2 V3d Package +A *texture* is defined by a name. +Three types of texture are available: + * 1D; + * 2D; + * Environment mapping. -@subsubsection occt_visu_5_2_1 Overview +@subsubsection occt_visu_4_2_8 Shaders + +OCCT visualization core supports GLSL shaders. Currently OCCT supports only vertex and fragment GLSL shader. Shaders can be assigned to a generic presentation by its drawer attributes (Graphic3d aspects). To enable custom shader for a specific AISShape in your application, the following API functions are used: + +~~~~~ +// Create shader program +Handle(Graphic3d_ShaderProgram) aProgram = new Graphic3d_ShaderProgram(); + +// Attach vertex shader +aProgram->AttachShader (Graphic3d_ShaderObject::CreateFromFile( + Graphic3d_TOS_VERTEX, "")); + +// Attach fragment shader +aProgram->AttachShader (Graphic3d_ShaderObject::CreateFromFile( + Graphic3d_TOS_FRAGMENT, "")); + +// Set values for custom uniform variables (if they are) +aProgram->PushVariable ("MyColor", Graphic3d_Vec3(0.0f, 1.0f, 0.0f)); + +// Set aspect property for specific AISShape +theAISShape->Attributes()->ShadingAspect()->Aspect()->SetShaderProgram (aProgram); +~~~~~ + +@subsection occt_visu_4_3 Graphic attributes + +@subsubsection occt_visu_4_3_1 Aspect package overview + +The *Aspect* package provides classes for the graphic elements in the viewer: + * Groups of graphic attributes; + * Edges, lines, background; + * Window; + * Driver; + * Enumerations for many of the above. + +@subsection occt_visu_4_4 3D view facilities + +@subsubsection occt_visu_4_4_1 Overview The *V3d* package provides the resources to define a 3D viewer and the views attached to this viewer (orthographic, perspective). This package provides the commands to manipulate the graphic scene of any 3D object visualized in a view on screen. A set of high-level commands allows the separate manipulation of parameters and the result of a projection (Rotations, Zoom, Panning, etc.) as well as the visualization attributes (Mode, Lighting, Clipping, Depth-cueing, etc.) in any particular view. -@subsubsection occt_visu_5_2_2 Provided services - The *V3d* package is basically a set of tools directed by commands from the viewer front-end. This tool set contains methods for creating and editing classes of the viewer such as: * Default parameters of the viewer, * Views (orthographic, perspective), @@ -1905,7 +1910,7 @@ The *V3d* package is basically a set of tools directed by commands from the vie * Instantiated sequences of views, planes, light sources, graphic structures, and picks, * Various package methods. -@subsubsection occt_visu_5_2_3 A programming example +@subsubsection occt_visu_4_4_2 A programming example This sample TEST program for the *V3d* Package uses primary packages *Xw* and *Graphic3d* and secondary packages *Visual3d, Aspect, Quantity, Phigs* and *math*. @@ -1914,7 +1919,7 @@ This sample TEST program for the *V3d* Package uses primary packages *Xw* and * Handle(Aspect_DisplayConnection) aDisplayConnection = new Aspect_DisplayConnection(); //Create a Graphic Driver from the default Aspect_DisplayConnection -Handle(Graphic3d_GraphicDriver) GD = Graphic3d::InitGraphicDriver (aDisplayConnection); +Handle(OpenGl_GraphicDriver) GD = new OpenGl_GraphicDriver (aDisplayConnection); //Create a Viewer to this Driver Handle(V3d_Viewer) VM = new V3d_Viewer(GD, 400., @@ -1960,120 +1965,151 @@ Handle(Xw_Window) W = new Xw_Window(aDisplayConnection,"Test V3d",0.5,0.5,0.5, W->Map() ; // Create a Perspective View in this Viewer -Handle(V3d_PerspectiveView) V = new V3d_PerspectiveView(VM); - -// Set the Eye position -V->SetEye(100.,100.,100.) ; - -// Associate this View with the Window -V->SetWindow(W) ; - -// Activate ALL defined Lights in this View -V->SetLightOn() ; - -// Display ALL structures in this View -(VM-Viewer())->Display() ; - -// Finally update the Visualization in this View -V->Update() ; +Handle(V3d_View) aView = new V3d_View(VM); +aView->Camera()->SetProjectionType (Graphic3d_Camera::Projection_Perspective); +// Associate this View with the Window +aView ->SetWindow(W); +// Display ALL structures in this View +VM->Viewer()->Display(); +// Finally update the Visualization in this View +aView->Update(); ~~~~~ -@subsubsection occt_visu_5_2_4 Glossary of view transformations - -The following terms are used to define view orientation, i.e. transformation from World Coordinates (WC) to the View Reference Coordinates system (VRC): -* **View Reference Point (VRP)** - defines the origin of View Reference Coordinates. -* **View Reference Plane Normal (VPN)** - defines the normal of projection plane of the view. -* **View Reference Up Vector (VUP)** - defines the vertical of observer of the view. - -The following terms are used to define view mapping, i.e. transformation from View Reference Coordinates (VRC) to the Normalized Projection Coordinates (NPC): -* **Projection type** - Orthographic or perspective. -* **Projection Reference Point (PRP)** - Defines the observer position. -* **Front Plane Distance (FPD)** - Defines the position of the front clipping plane in View Reference Coordinates system. -* **Back Plane Distance (BPD)** Defines the position of the back clipping plane in View Reference Coordinates system. -* **View Plane Distance (VPD)** Defines the position of the view projection plane in View Reference Coordinates system. View plane must be located between front and back clipping planes. -* **Window Limits** Defines the visible part of the view projection plane (left, right, top and bottom boundaries: *Umin, Umax, Vmax* and *Vmin* respectively) in View Reference Coordinates. - -The *V3d_View* API uses the following terms to define view orientation and mapping: -* **At** - Position of View Reference Point (VRP) in World Coordinates -* **Eye** - Position of the observer (projection reference point) in World Coordinates. Influences to the view projection vector and depth value. -* **Proj** - View projection vector (VPN) -* **Up** - Position of the high point / view up vector (VUP) -* **Depth** - Distance between Eye and At point -* **ZSize** - Distance between front and back clipping planes -* **Size** - Window size in View Reference Coordinates -* **Focal Reference point** - Position of Projection Reference Point (PRP) in World Coordinates -* **Focale** - Distance between Projection Reference Point (PRP) and View projection plane - - -@subsubsection occt_visu_5_2_5 Management of perspective projection - -The perspective projection allows definition of viewing volume as a truncated pyramid (frustum) with apex at the Projection Reference Point. In the View Reference Coordinate system it can be presented by the following picture: - -@image html visualization_image023.png "View Reference Coordinate System, perspective viewing volume and view mapping parameter" -@image latex visualization_image023.png "View Reference Coordinate System, perspective viewing volume and view mapping parameter" -  -During panning, window limits are changed, as if a sort of "frame" through which the user sees a portion of the view plane was moved over the view. The perspective frustum itself remains unchanged. - -The perspective projection is defined by two parameters: - * *Depth* value defines distance between Projection Reference Point and the nearest (front) clipping plane. - * *ZSize* defines distance between Front and Back clipping planes. The influence of this parameter is caused by the OCCT specific to center viewing volume around View Reference Point so the front and back plane distances were the same: *FPD = BPD = ZSize / 2*. - -**Note** that the closer the displayed object to the Projection Reference Point the more visible its perspective distortion. Thus, in order to get a good perspective it is recommended to set **ZSize** value comparable with the expected model size and small Depth value. - -However, very small Depth values might lead to inaccuracy of "fit all" operation and to non-realistic perspective distortion. - -Let us see the example: -~~~~~ -// Create a Perspective View in Viewer VM -Handle(V3d_PerspectiveView) V = new V3d_PerspectiveView(VM); - -// Set the ZSize -V->SetZSize(2000.) ; - -// Set the Depth value -V->SetDepth(20.) ; - -// Set the current mapping as default to be used by Reset() operation -V->SetViewMappingDefault() ; -~~~~~ - -As an alternative to manual setting of perspective parameters the *V3d_View::DepthFitAll* function can be used. +As an alternative to manual setting of perspective parameters the V3d_View::ZfitAll() and V3d_View::FitAll() functions can be used: ~~~~~ -// Display  shape in Viewer VM -Handle(AIS_InteractiveContext) aContext = new AIS_InteractiveContext(VM); -aContext->Display(shape); - -// Create a Perspective View in Viewer VM -Handle(V3d_PerspectiveView) V = new V3d_PerspectiveView(VM); - -// Set automatically the perspective parameters -V->DepthFitAll() ; - -// Fit view to object size -V->FitAll(); - -// Set the current mapping as default to be used by Reset() operation -V->SetViewMappingDefault() ; +// Display shape in Viewer VM +Handle(AIS_InteractiveContext) aContext = new AIS_InteractiveContext (VM); +aContext->Display(shape); +// Create a Perspective View in Viewer VM +Handle(V3d_View) V = new V3d_View (VM); +aview->Camera()->SetProjectionType (Graphic3d_Camera::Projection_Perspective); +// Change Z-min and Z-max planes of projection volume to match the displayed objects +V->ZFitAll(); +// Fit view to object size +V->FitAll(); ~~~~~ -It is necessary to take into account that during rotation Z size of the view might be modified automatically to fit the model into the viewing volume. +@subsubsection occt_visu_4_4_3 Define viewing parameters -Make sure the Eye point never gets between the Front and Back clipping planes. +View projection and orientation in OCCT *v3d* view are driven by camera. The camera calculates and supplies projection and view orientation matrices for rendering by OpenGL. The allows to the user to control all projection parameters. The camera is defined by the following properties: -In perspective view, changing Z size results in changed perspective effect. To avoid this, an application should specify the maximum expected Z size using *V3d_View::SetZSize()* method in advance. +* **Eye** - Defines the observer (camera) position. Make sure the Eye point never gets between the Front and Back clipping planes. -*V3d_View::FitAll()* with *FitZ = Standard_True* and *V3d_View::ZFitAll()* also change the perspective effect and should therefore be used with precautions similar to those for rotation. +* **Center** - defines the origin of View Reference Coordinates (where camera is aimed at). -@subsubsection occt_visu_5_2_6 Underlay and overlay layers management +* **Direction** - defines the direction of camera view (from the Eye to the Center). -In addition to interactive 3d graphics displayed in the view you can display an underlying and overlying graphics: text, color scales, drawings. +* **Distance** - defines the distance between the Eye and the Center. + +* **Front** Plane - Defines the position of the front clipping plane in View Reference Coordinates system. + +* **Back** Plane - Defines the position of the back clipping plane in View Reference Coordinates system. + +* **ZNear** - defines the distance between the Eye and the Front plane. + +* **ZFar** - defines the distance between the Eye and the Back plane. + +Most common view manipulations (panning, zooming, rotation) are implemented as convenience methods of *V3d_View* class, however *Graphic3d_Camera* class can also be used directly by application developers: + +Example: +~~~~~ +// rotate camera by X axis on 30.0 degrees +gp_Trsf aTrsf; +aTrsf.SetRotation (gp_Ax1 (gp_Pnt (0.0, 0.0, 0.0), gp_Dir (1.0, 0.0, 0.0)), 30.0); +aView->Camera()->Transform (aTrsf); +~~~~~ + +@subsubsection occt_visu_4_4_4 Orthographic Projection + +@image html view_frustum.png "Perspective and orthographic projection" + +The following code configures the camera for orthographic rendering: + +~~~~~ +// Create an orthographic View in this Viewer +Handle(V3d_View) aView = new V3d_View (VM); +aView->Camera()->SetProjectionType (Graphic3d_Camera::Projection_Orthographic); +// update the Visualization in this View +aView->Update(); +~~~~~ + +@subsubsection occt_visu_4_4_5 Perspective Projection + +**Field of view (FOVy)** - defines the field of camera view by y axis in degrees (45° is default). + +@image html camera_perspective.png "Perspective frustum" + +The following code configures the camera for perspective rendering: + +~~~~~ +// Create a perspective View in this Viewer +Handle(V3d_View) aView = new V3d_View(VM); +aView->Camera()->SetProjectionType (Graphic3d_Camera::Projection_Perspective); +aView->Update(); +~~~~~ + + +@subsubsection occt_visu_4_4_6 Stereographic Projection + +**IOD** - defines the intraocular distance (in world space units). + +There are two types of IOD: +* _IODType_Absolute_ : Intraocular distance is defined as an absolute value. +* _IODType_Relative_ : Intraocular distance is defined relative to the camera focal length (as its coefficient). + +**Field of view (FOV)** - defines the field of camera view by y axis in degrees (45° is default). + +**ZFocus** - defines the distance to the point of stereographic focus. + +@image html stereo.png "Stereographic projection" + +To enable stereo projection, your workstation should meet the following requirements: + +* The graphic card should support quad buffering. +* You need active 3D glasses (LCD shutter glasses). +* The graphic driver needs to be configured to impose quad buffering for newly created OpenGl contexts; the viewer and the view should be created after that. + +In stereographic projection mode the camera prepares two projection matrices to display different stereo-pictures for the left and for the right eye. In a non-stereo camera this effect is not visible because only the same projection is used for both eyes. + +To enable quad buffering support you should provide the following settings to the graphic driver *opengl_caps*: + +~~~~~ +Handle(OpenGl_GraphicDriver) aDriver = new OpenGl_GraphicDriver(); +OpenGl_Caps& aCaps = aDriver->ChangeOptions(); +aCaps.contextStereo = Standard_True; +~~~~~ + +The following code configures the camera for stereographic rendering: + +~~~~~ +// Create a Stereographic View in this Viewer +Handle(V3d_View) aView = new V3d_View(VM); +aView->Camera()->SetProjectionType (Graphic3d_Camera::Projection_Stereo); +// Change stereo parameters +aView->Camera()->SetIOD (IODType_Absolute, 5.0); +// Finally update the Visualization in this View +aView->Update(); +~~~~~ + +@subsubsection occt_visu_4_4_7 View frustum culling + +The algorithm of frustum culling on CPU-side is activated by default for 3D viewer. This algorithm allows skipping the presentation outside camera at the rendering stage, providing better performance. The following features support this method: +* *Graphic3d_Structure::CalculateBoundBox()* is used to calculate axis-aligned bounding box of a presentation considering its transformation. +* *V3d_View::SetFrustumCulling* enables or disables frustum culling for the specified view. +* Classes *OpenGl_BVHClipPrimitiveSet* and *OpenGl_BVHTreeSelector* handle the detection of outer objects and usage of acceleration structure for frustum culling. +* *BVH_BinnedBuilder* class splits several objects with null bounding box. + +@subsubsection occt_visu_4_4_8 Underlay and overlay layers management + +In addition to interactive 3d graphics displayed in the view you can display underlying and overlying graphics: text, color scales and drawings. All *V3d* view graphical objects in the overlay are managed by the default layer manager (*V3d_LayerMgr*). The *V3d* view has a basic layer manager capable of displaying the color scale, but you can redefine this class to provide your own overlay and underlay graphics. The method *V3d_View::SetLayerMgr(const Handle (V3d_LayerMgr)& aMgr)* allows assigning a custom layer manager to the *V3d* view. -There are three virtual methods to prepare graphics in the manager for further drawing (set up layer dimensions, draw static graphics). These methods can be redefined: +There are three virtual methods to prepare graphics in the manager for further drawing: setting up layer dimensions and drawing static graphics. These methods can be redefined: + ~~~~~ void V3d_LayerMgr::Begin () void V3d_LayerMgr::Redraw () @@ -2082,14 +2118,15 @@ There are three virtual methods to prepare graphics in the manager for further The layer manager controls layers (*Visual3d_Layer*) and layer items (*Visual3d_LayerItem*). Both the overlay and underlay layers can be created by the layer manager. -The layer entity is presented by the *Visual3d_Layer* class. This entity provides drawing services in the layer, for example: +The layer entity is presented by the *Visual3d_Layer* class. This entity provides drawing services in the layer, for example: ~~~~~ void Visual3d_Layer::DrawText void Visual3d_Layer::DrawRectangle void Visual3d_Layer::SetColor void Visual3d_Layer::SetViewport ~~~~~ -The following example demonstrates how to draw overlay graphics by the *V3d_LayerMgr*: + +The following example demonstrates how to draw overlay graphics by the *V3d_LayerMgr*: ~~~~~ // redefined method of V3d_LayerMgr @@ -2101,7 +2138,7 @@ void MyLayerMgr::Redraw () } ~~~~~ -The layer contains layer items that will be displayed on view redraw. Such items are *Visual3d_LayerItem* entities. To manipulate *Visual3d_LayerItem* entities assigned to the layer’s internal list you can use the following methods: +The layer contains layer items that will be displayed on view redraw. Such items are *Visual3d_LayerItem* entities. To manipulate *Visual3d_LayerItem* entities assigned to the layer’s internal list you can use the following methods: ~~~~~ void Visual3d_Layer::AddLayerItem (const Handle (Visual3d_LayerItem)& Item) @@ -2158,7 +2195,7 @@ void V3d_ColorScale::PaintRect } ~~~~~ -@subsubsection occt_visu_5_2_7 View background styles +@subsubsection occt_visu_4_4_9 View background styles There are three types of background styles available for *V3d_view*: solid color, gradient color and image. To set solid color for the background you can use the following methods: @@ -2227,77 +2264,10 @@ The *FileName* parameter defines the image file name and the path to it, the *F * *Aspect_FM_TILED* tiles the view with the image; * *Aspect_FM_STRETCH* stretches the image over the view. -@subsubsection occt_visu_5_2_8 User-defined clipping planes -The ability to define custom clipping planes could be very useful for some tasks. The *V3d* view provides such an opportunity. -The *V3d_Plane* class provides the services of clipping planes: it holds the plane equation coefficients and provides its graphical representation. To set and get plane equation coefficients you can use the following methods: -~~~~~ - void V3d_Plane::SetPlane - (const Quantity_Parameter A, -  const Quantity_Parameter B, -  const Quantity_Parameter C, -  const Quantity_Parameter D) - void V3d_Plane::Plane - (Quantity_Parameter& A, -  Quantity_Parameter& B, -  Quantity_Parameter& C, -  Quantity_Parameter& D) -~~~~~ +@subsubsection occt_visu_4_4_10 Dumping a 3D scene into an image file -*V3d_Plane* also provides display services: - -~~~~~ - void V3d_Plane::Display - (const Handle(V3d_View)& aView, -  const Quantity_Color& aColor) - void V3d_Plane::Erase () - Standard_Boolean V3d_Plane::IsDisplayed () -~~~~~ -The *Display* method could be redefined to provide custom representation of the clipping plane. - -The clipping planes could be activated with the methods *void V3d_View::SetPlaneOn (const Handle(V3d_Plane)& MyPlane)* and *void V3d_View::SetPlaneOn()* - -The first method appends the given *V3d_Plane* to the internal list of user-defined clipping planes of a view and activates it. If the plane is already in the list, it becomes activated. The second method activates all of the planes defined for the view. - -The clipping planes could be deactivated with the similar methods *void V3d_View::SetPlaneOff(const Handle(V3d_Plane)& MyPlane)* and *void V3d_View::SetPlaneOff()* - -The only difference is that these methods remove the user-defined clipping planes from the internal list. Thus, the view retains only active clipping planes. - -You can iterate through the active planes using the following methods: - * *void V3d_View::InitActivePlanes()* - sets the iterator to the beginning of the internal list of clipping planes; - * *Standard_Boolean V3d_View::MoreActivePlanes()* returns *Standard_True* if there are more active planes to return; - * *void V3d_View::NextActivePlanes()* sets the iterator to the next active plane in the list; - * *Handle(V3d_Plane) V3d_View::ActivePlane()* returns the active plane - -or check if a certain clipping plane has been activated with method *Standard_Boolean V3d_View::IsActivePlane (const Handle (V3d_Plane)& aPlane)* - -The number of clipping planes is limited. The method *Standard_Boolean V3d_View::IfMorePlanes()* allows checking if it is possible to activate at least one more plane in the view or the limit has been reached. - -

Example

- -~~~~~ -// try to use an existing clipping plane or create a new one -Handle(V3d_Plane) aCustomPlane; -myView->InitActivePlanes (); -if (myView->MoreActivePlanes ()) -  aCustomPlane = myView->ActivePlane (); -else -  aCustomPlane = new V3d_Plane (); - -// calculate new coefficients -Standard_Real a, b, c, d; -Standard_Real x = 0.0, y = 0.0, z = 10.0; -Standard_Real dx = 0.0, dy = 0.0, dz = 1.0; -gp_Pln aPln (gp_Pnt (x, y, z), gp_Dir (dx, dy, dz)); -aPln.Coefficients (a, b, c, d); - -// update plane -aCustomPlane->SetPlane (a, b, c, d); -myView->SetPlaneOn (aCustomPlane); -~~~~~ - -@subsubsection occt_visu_5_2_9 Dumping a 3D scene into an image file -The 3D scene displayed in the view could be dumped in high resolution into an image file. The high resolution (8192x8192 on some implementations) is achieved using the Frame Buffer Objects (FBO) provided by the graphic driver. Frame Buffer Objects enable off-screen rendering into a virtual view to produce images in the background mode (without displaying any graphics on the screen). +The 3D scene displayed in the view can be dumped in high resolution into an image file. The high resolution (8192x8192 on some implementations) is achieved using the Frame Buffer Objects (FBO) provided by the graphic driver. Frame Buffer Objects enable off-screen rendering into a virtual view to produce images in the background mode (without displaying any graphics on the screen). The *V3d_View* has the following methods for dumping the 3D scene: ~~~~ @@ -2317,10 +2287,12 @@ Makes the dimensions of the output image compatible to a certain format of print These methods dump the 3D scene into an image file passed by its name and path as theFile. -The raster image data handling algorithm is based on the Image_PixMap class. The supported extensions are ".png", ".bmp", ".png", ".png". +The raster image data handling algorithm is based on the *Image_PixMap* class. The supported extensions are ".png", ".bmp", ".png", ".png". The value passed as *theBufferType* argument defines the type of the buffer for an output image (RGB, RGBA, floating-point, RGBF, RGBAF). Both methods return *Standard_True* if the scene has been successfully dumped. +There is also class *Image_AlienPixMap* providing import / export from / to external image files in formats supported by **FreeImage** library. + **Note** that dumping the image for a paper format with large dimensions is a memory consuming operation, it might be necessary to take care of preparing enough free memory to perform this operation. ~~~~ @@ -2384,13 +2356,13 @@ aView->FitAll(); aView->Dump ("3dscene.png"); ~~~~~ -@subsubsection occt_visu_5_2_10 Printing a 3D scene +@subsubsection occt_visu_4_4_11 Printing a 3D scene The contents of a view can be printed out. Moreover, the OpenGl graphic driver used by the v3d view supports printing in high resolution. The print method uses the OpenGl frame buffer (Frame Buffer Object) for rendering the view contents and advanced print algorithms that allow printing in, theoretically, any resolution. The method *void V3d_View::Print(const Aspect_Handle hPrnDC, const Standard_Boolean showDialog, const Standard_Boolean showBackground, const Standard_CString  filename, const Aspect_PrintAlgo printAlgorithm)* prints the view contents: -*hPrnDC* is the printer device handle. You can pass your own printer handle or "NULL" to select the printer by the default dialog. In that case you can use the default dialog or pass "Standard_False" as the showDialog argument to select the default printer automatically. +*hPrnDC* is the printer device handle. You can pass your own printer handle or *NULL* to select the printer by the default dialog. In that case you can use the default dialog or pass *Standard_False* as the *showDialog* argument to select the default printer automatically. You can define the filename for the printer driver if you want to print out the result into a file. If you do not want to print the background, you can pass *Standard_False* as the *showBackground* argument. @@ -2398,46 +2370,434 @@ The *printAlgorithm* argument allows choosing between two print algorithms that The first value defines the stretch algorithm: the scene is drawn with the maximum possible frame buffer dimensions and then is stretched to the whole printing area. The second value defines *TileSplit* algorithm: covering the whole printing area by rendering multiple parts of the viewer. -**Note** that at the moment printing is implemented only for Windows. +**Note** that at the moment the printing is implemented only for Windows. -@subsubsection occt_visu_5_2_11 Vector image export +@subsubsection occt_visu_4_4_12 Vector image export -The 3D content of a view can be exported to the vector image file format. The vector image export is powered by the GL2PS library. You can export your 3D scenes into a file format supported by the GL2PS library: PostScript (PS), Encapsulated PostScript (EPS), Portable Document Format (PDF), Scalable Vector Graphics (SVG), LaTeX file format and Portable LaTeX Graphics (PGF). +The 3D content of a view can be exported to the vector image file format. The vector image export is powered by the *GL2PS* library. You can export 3D scenes into a file format supported by the GL2PS library: PostScript (PS), Encapsulated PostScript (EPS), Portable Document Format (PDF), Scalable Vector Graphics (SVG), LaTeX file format and Portable LaTeX Graphics (PGF). The method *void Visual3d_View::Export (const Standard_CString FileName, const Graphic3d_ExportFormat Format, const Graphic3d_SortType aSortType, const Standard_Real Precision, const Standard_Address ProgressBarFunc, const Standard_Address ProgressObject)* of *Visual3d_View* class allows exporting a 3D scene: The *FileName* defines the output image file name and the *Format* argument defines the output file format: - * Graphic3d_EF_PostScript (PS), - * Graphic3d_EF_EhnPostScript (EPS), - * Graphic3d_EF_TEX (TEX), - * Graphic3d_EF_PDF (PDF), - * Graphic3d_EF_SVG (SVG), - * Graphic3d_EF_PGF (PGF) + * *Graphic3d_EF_PostScript (PS)*, + * *Graphic3d_EF_EhnPostScript (EPS)*, + * *Graphic3d_EF_TEX (TEX)*, + * *Graphic3d_EF_PDF (PDF)*, + * *Graphic3d_EF_SVG (SVG)*, + * *Graphic3d_EF_PGF (PGF)*. The *aSortType* parameter defines *GL2PS* sorting algorithm for the primitives. The *Precision, ProgressBarFunc* and *ProgressObject* parameters are implemented for future uses and at the moment have no effect. The *Export* method supports only basic 3d graphics and has several limitations: * Rendering large scenes could be slow and can lead to large output files; * Transparency is only supported for PDF and SVG output; - * Textures and some effects are not supported by the GL2PS library. + * Textures and some effects are not supported by the *GL2PS* library. -@section occt_visu_6 Graphic Attributes +@subsubsection occt_visu_4_4_13 Ray tracing support -@subsection occt_visu_6_1 Aspect Package +OCCT visualization provides rendering by real-time ray tracing technique. It is allowed to switch easily between usual rasterization and ray tracing rendering modes. The core of OCCT ray tracing is written using GLSL shaders. The ray tracing has a wide list of features: +* Hard shadows +* Refractions +* Reflection +* Transparency +* Texturing +* Support of non-polygon objects, such as lines, text, highlighting, selection. +* Performance optimization using 2-level bounding volume hierarchy (BVH). -The *Aspect* package provides classes for the graphic elements in the viewer: - * Color maps, - * Pixels, - * Groups of graphic attributes, - * Edges, lines, background, - * Font classes, - * Width map classes, - * Marker map classes, - * Type of Line map classes, - * Window, - * Driver, PlotterDriver (inherited by PS_Driver), WindowDriver, - * Enumerations for many of the above, - * Array instantiations for edges, - * Array instantiations for map entries for color, type, font, width, and marker. +The ray tracing algorithm is recursive (Whitted's algorithm). It uses BVH effective optimization structure. The structure prepares optimized data for a scene geometry for further displaying it in real-time. The time-consuming re-computation of the BVH is not necessary for view operations, selections, animation and even editing of the scene by transforming location of the objects. It is only necessary when the list of displayed objects or their geometry changes. +To make the BVH reusable it has been added into an individual reusable OCCT package *TKMath/BVH*. + +There are several ray-tracing options that user can switch on/off: +* Maximum ray tracing depth +* Shadows rendering +* Specular reflections +* Adaptive anti aliasing +* Transparency shadow effects + +Example: +~~~~~ +Graphic3d_RenderingParams& aParams = aView->ChangeRenderingParams(); +// specifies rendering mode +aParams.Method = Graphic3d_RM_RAYTRACING; +// maximum ray-tracing depth +aParams.RaytracingDepth = 3; +// enable shadows rendering +aParams.IsShadowEnabled = Standard_True; +// enable specular reflections. +aParams.IsReflectionEnabled = Standard_True; +// enable adaptive anti-aliasing +aParams.IsAntialiasingEnabled = Standard_True; +// enable light propagation through transparent media. +aParams.IsTransparentShadowEnabled = Standard_True; +// update the view +aView->Update(); +~~~~~ + +@subsubsection occt_visu_4_4_14 Display priorities + +Structure display priorities control the order, in which structures are drawn. When you display a structure you specify its priority. The lower is the value, the lower is the display priority. When the display is regenerated, the structures with the lowest priority are drawn first. The structures with the same display priority are drawn in the same order as they have been displayed. OCCT supports eleven structure display priorities. + +@subsubsection occt_visu_4_4_15 Z-layer support + +OCCT features depth-arranging functionality called z-layer. A graphical presentation can be put into a z-layer. In general, this function can be used for implementing "bring to front" functionality in a graphical application. + +Example: + +~~~~~ +// set z-layer to an interactive object +Handle(AIS_InteractiveContext) aContext = … +Handle(AIS_InteractiveObject) anInterObj = … +Standard_Integer anId = 3; +aViewer->AddZLayer (anId); +aContext->SetZLayer (anInterObj, anId); +~~~~~ + +For each z-layer, it is allowed to: +* Enable / disable depth test for layer. +* Enable / disable depth write for layer. +* Enable / disable depth buffer clearing. +* Enable / disable polygon offset. + +The corresponding method *SetZLayerOption (…)* is available in *Graphic3d_GraphicDriver* interface. You can get the options using getter from *Visual3d_ViewManager* and *V3d_Viewer*. It returns *Graphic3d_ZLayerSettings* cached in *Visual3d_ViewManager* for a given *LayerId*. + +Example: +~~~~~ +// change z-layer settings +Graphic3d_ZLayerSettings aSettings = aViewer->ZLayerSettings (anId); +aSettings.EnableSetting (Graphic3d_ZLayerDepthTest); +aSettings.EnableSetting (Graphic3d_ZLayerDepthWrite); +aSettings.EnableSetting (Graphic3d_ZLayerDepthClear); +aSettings.EnableSetting (Graphic3d_ZLayerDepthOffset); +aViewer->SetZLayerSettings (anId, aSettings); +~~~~~ +@subsubsection occt_visu_4_4_16 Clipping planes + +The ability to define custom clipping planes could be very useful for some tasks. OCCT provides such an opportunity. + +The *Graphic3d_ClipPlane* class provides the services for clipping planes: it holds the plane equation coefficients and provides its graphical representation. To set and get plane equation coefficients you can use the following methods: + +~~~~~ +Graphic3d_ClipPlane::Graphic3d_ClipPlane(const gp_Pln& thePlane) +void Graphic3d_ClipPlane::SetEquation (const gp_Pln& thePlane) +Graphic3d_ClipPlane::Graphic3d_ClipPlane(const Equation& theEquation) +void Graphic3d_ClipPlane::SetEquation (const Equation& theEquation) +gp_Pln Graphic3d_ClipPlane::ToPlane() const +~~~~~ + +The clipping planes can be activated with the following method: +~~~~~ +void Graphic3d_ClipPlane::SetOn (const Standard_Boolean theIsOn) +~~~~~ + +The number of clipping planes is limited. You can check the limit value via method *Graphic3d_GraphicDriver::InquirePlaneLimit()*; + +~~~~~ +// get the limit of clipping planes for the current view +Standard_Integer aMaxClipPlanes = aView->Viewer()->Driver()->InquirePlaneLimit(); +~~~~~ + +Let us see for example how to create a new clipping plane with custom parameters and add it to a view or to an object: +~~~~~ +// create a new clipping plane +const Handle(Graphic3d_ClipPlane)& aClipPlane = new Graphic3d_ClipPlane(); +// change equation of the clipping plane +Standard_Real aCoeffA = … +Standard_Real aCoeffB = … +Standard_Real aCoeffC = … +Standard_Real aCoeffD = … +aClipPlane->SetEquation (gp_Pln (aCoeffA, aCoeffB, aCoeffC, aCoeffD)); +// set capping +aClipPlane->SetCapping (aCappingArg == "on"); +// set the material with red color of clipping plane +Graphic3d_MaterialAspect aMat = aClipPlane->CappingMaterial(); +Quantity_Color aColor (1.0, 0.0, 0.0, Quantity_TOC_RGB); +aMat.SetAmbientColor (aColor); +aMat.SetDiffuseColor (aColor); +aClipPlane->SetCappingMaterial (aMat); +// set the texture of clipping plane +Handle(Graphic3d_Texture2Dmanual) aTexture = … +aTexture->EnableModulate(); +aTexture->EnableRepeat(); +aClipPlane->SetCappingTexture (aTexture); +// add the clipping plane to an interactive object +Handle(AIS_InteractiveObject) aIObj = … +aIObj->AddClipPlane (aClipPlane); +// or to the whole view +aView->AddClipPlane (aClipPlane); +// activate the clipping plane +aClipPlane->SetOn(Standard_True); +// update the view +aView->Update(); +~~~~~ + + +@subsubsection occt_visu_4_4_17 Automatic back face culling + +Back face culling reduces the rendered number of triangles (which improves the performance) and eliminates artifacts at shape boundaries. However, this option can be used only for solid objects, where the interior is actually invisible from any point of view. Automatic back-face culling mechanism is turned on by default, which is controlled by *V3d_View::SetBackFacingModel()*. + +The following features are applied in *StdPrs_ToolShadedShape::IsClosed()*, which is used for definition of back face culling in *ShadingAspect*: +* disable culling for free closed Shells (not inside the Solid) since reversed orientation of a free Shell is a valid case; +* enable culling for Solids packed into a compound; +* ignore Solids with incomplete triangulation. + +Back face culling is turned off at TKOpenGl level in the following cases: +* clipping/capping planes are in effect; +* for translucent objects; +* with hatching presentation style. + +@subsection occt_visu_4_5 Examples: creating a 3D scene + +To create 3D graphic objects and display them in the screen, follow the procedure below: +1. Create attributes. +2. Create a 3D viewer. +3. Create a view. +4. Create an interactive context. +5. Create interactive objects. +6. Create primitives in the interactive object. +7. Display the interactive object. + +@subsubsection occt_visu_4_5_1 Create attributes + +Create colors. + +~~~~~ +Quantity_Color aBlack (Quantity_NOC_BLACK); +Quantity_Color aBlue (Quantity_NOC_MATRABLUE); +Quantity_Color aBrown (Quantity_NOC_BROWN4); +Quantity_Color aFirebrick (Quantity_NOC_FIREBRICK); +Quantity_Color aForest (Quantity_NOC_FORESTGREEN); +Quantity_Color aGray (Quantity_NOC_GRAY70); +Quantity_Color aMyColor (0.99, 0.65, 0.31, Quantity_TOC_RGB); +Quantity_Color aBeet (Quantity_NOC_BEET); +Quantity_Color aWhite (Quantity_NOC_WHITE); +~~~~~ + +Create line attributes. + +~~~~~ +Handle(Graphic3d_AspectLine3d) anAspectBrown = new Graphic3d_AspectLine3d(); +Handle(Graphic3d_AspectLine3d) anAspectBlue = new Graphic3d_AspectLine3d(); +Handle(Graphic3d_AspectLine3d) anAspectWhite = new Graphic3d_AspectLine3d(); +anAspectBrown->SetColor (aBrown); +anAspectBlue ->SetColor (aBlue); +anAspectWhite->SetColor (aWhite); +~~~~~ + +Create marker attributes. +~~~~~ +Handle(Graphic3d_AspectMarker3d aFirebrickMarker = new Graphic3d_AspectMarker3d(); +// marker attributes +aFirebrickMarker->SetColor (Firebrick); +aFirebrickMarker->SetScale (1.0); +aFirebrickMarker->SetType (Aspect_TOM_BALL); +// or this +// it is a preferred way (supports full-color images on modern hardware). +aFirebrickMarker->SetMarkerImage (theImage) +~~~~~ + +Create facet attributes. +~~~~~ +Handle(Graphic3d_AspectFillArea3d) aFaceAspect = new Graphic3d_AspectFillArea3d(); +Graphic3d_MaterialAspect aBrassMaterial (Graphic3d_NOM_BRASS); +Graphic3d_MaterialAspect aGoldMaterial (Graphic3d_NOM_GOLD); +aFaceAspect->SetInteriorStyle (Aspect_IS_SOLID); +aFaceAspect->SetInteriorColor (aMyColor); +aFaceAspect->SetDistinguishOn (); +aFaceAspect->SetFrontMaterial (aGoldMaterial); +aFaceAspect->SetBackMaterial (aBrassMaterial); +aFaceAspect->SetEdgeOn(); +~~~~~ + +Create text attributes. +~~~~~ +Handle(Graphic3d_AspectText3d) aTextAspect = new Graphic3d_AspectText3d (aForest, Graphic3d_NOF_ASCII_MONO, 1.0, 0.0); +~~~~~ + +@subsubsection occt_visu_4_5_2 Create a 3D Viewer (a Windows example) + +~~~~~ +// create a default connection +Handle(Aspect_DisplayConnection) aDisplayConnection; +// create a graphic driver from default connection +Handle(OpenGl_GraphicDriver) aGraphicDriver = new OpenGl_GraphicDriver (GetDisplayConnection()); +// create a viewer +TCollection_ExtendedString aName ("3DV"); +myViewer = new V3d_Viewer (aGraphicDriver,aName.ToExtString(), ""); +// set parameters for V3d_Viewer +// defines default lights - +// positional-light 0.3 0.0 0.0 +// directional-light V3d_XnegYposZpos +// directional-light V3d_XnegYneg +// ambient-light +a3DViewer->SetDefaultLights(); +// activates all the lights defined in this viewer +a3DViewer->SetLightOn(); +// set background color to black +a3DViewer->SetDefaultBackgroundColor (Quantity_NOC_BLACK); +~~~~~ + + +@subsubsection occt_visu_4_5_3 Create a 3D view (a Windows example) + +It is assumed that a valid Windows window may already be accessed via the method *GetSafeHwnd()*. +~~~~~ +Handle (WNT_Window) aWNTWindow = new WNT_Window (GetSafeHwnd()); +myView = myViewer->CreateView(); +myView->SetWindow (aWNTWindow); +~~~~~ + +@subsubsection occt_visu_4_5_4 Create an interactive context + +~~~~~ +myAISContext = new AIS_InteractiveContext (myViewer); +~~~~~ + +You are now able to display interactive objects such as an *AIS_Shape*. + +~~~~~ +TopoDS_Shape aShape = BRepAPI_MakeBox (10, 20, 30).Solid(); +Handle(AIS_Shape) anAISShape = new AIS_Shape(aShape); +myAISContext->Display (anAISShape); +~~~~~ + +@subsubsection occt_visu_4_5_4 Create your own interactive object + +Follow the procedure below to compute the presentable object: + +1. Build a presentable object inheriting from *AIS_InteractiveObject* (refer to the Chapter on Presentable Objects). +2. Reuse the *Prs3d_Presentation* provided as an argument of the compute methods. + +**Note** that there are two compute methods: one for a standard representation, and the other for a degenerated representation, i.e. in hidden line removal and wireframe modes. + + +Let us look at the example of compute methods + +~~~~~ +Void +myPresentableObject::Compute + (const Handle(PrsMgr_PresentationManager3d)& thePrsManager, + const Handle(Prs3d_Presentation)& thePrs, + const Standard_Integer theMode) +( + //... +) + +void +myPresentableObject::Compute (const Handle(Prs3d_Projector)& , + const Handle(Prs3d_Presentation)& thePrs) +( + //... +) +~~~~~ + +@subsubsection occt_visu_4_5_6 Create primitives in the interactive object + +Get the group used in *Prs3d_Presentation*. + +~~~~~ +Handle(Graphic3d_Group) aGroup = Prs3d_Root::CurrentGroup (thePrs); +~~~~~ + +Update the group attributes. + +~~~~~ +aGroup->SetPrimitivesAspect (anAspectBlue); +~~~~~ + +Create two triangles in *aGroup*. + +~~~~~ +Standard_Integer aNbTria = 2; +Handle(Graphic3d_ArrayOfTriangles) aTriangles = new Graphic3d_ArrayOfTriangles (3 * aNbTria, 0, Standard_True); +Standard_Integer anIndex; +for (anIndex = 1; anIndex <= aNbTria; nt++) +{ + aTriangles->AddVertex (anIndex * 5., 0., 0., 1., 1., 1.); + aTriangles->AddVertex (anIndex * 5 + 5, 0., 0., 1., 1., 1.); + aTriangles->AddVertex (anIndex * 5 + 2.5, 5., 0., 1., 1., 1.); +} +aGroup->BeginPrimitives(); +aGroup->AddPrimitiveArray (aTriangles); +aGroup->EndPrimitives(); +~~~~~ + +The methods *BeginPrimitives()* and *EndPrimitives()* are used when creating a set of various primitives in the same group. +Use the polyline function to create a boundary box for the *thePrs* structure in group *aGroup*. + +~~~~~ +Standard_Real Xm, Ym, Zm, XM, YM, ZM; +thePrs->MinMaxValues (Xm, Ym, Zm, XM, YM, ZM); + +Handle(Graphic3d_ArrayOfPolylines) aPolylines = new Graphic3d_ArrayOfPolylines (16, 4); +aPolylines->AddBound (4); +aPolylines->AddVertex (Xm, Ym, Zm); +aPolylines->AddVertex (Xm, Ym, ZM); +aPolylines->AddVertex (Xm, YM, ZM); +aPolylines->AddVertex (Xm, YM, Zm); +aPolylines->AddBound (4); +aPolylines->AddVertex (Xm, Ym, Zm); +aPolylines->AddVertex (XM, Ym, Zm); +aPolylines->AddVertex (XM, Ym, ZM); +aPolylines->AddVertex (XM, YM, ZM); +aPolylines->AddBound (4); +aPolylines->AddVertex (XM, YM, Zm); +aPolylines->AddVertex (XM, Ym, Zm); +aPolylines->AddVertex (XM, YM, Zm); +aPolylines->AddVertex (Xm, YM, Zm); +aPolylines->AddBound (4); +aPolylines->AddVertex (Xm, YM, ZM); +aPolylines->AddVertex (XM, YM, ZM); +aPolylines->AddVertex (XM, Ym, ZM); +aPolylines->AddVertex (Xm, Ym, ZM); + +aGroup->BeginPrimitives(); +aGroup->AddPrimitiveArray(aPolylines); +aGroup->EndPrimitives(); +~~~~~ + +Create text and markers in group *aGroup*. + +~~~~~ +static char* texte[3] = +{ + "Application title", + "My company", + "My company address." +}; +Handle(Graphic3d_ArrayOfPoints) aPtsArr = new Graphic3d_ArrayOfPoints (2, 1); +aPtsArr->AddVertex (-40.0, -40.0, -40.0); +aPtsArr->AddVertex (40.0, 40.0, 40.0); +aGroup->BeginPrimitives(); +aGroup->AddPrimitiveArray (aPtsArr); +aGroup->EndPrimitives(); + +Graphic3d_Vertex aMarker (0.0, 0.0, 0.0); +for (i=0; i <= 2; i++) +{ + aMarker.SetCoord (-(Standard_Real )i * 4 + 30, + (Standard_Real )i * 4, + -(Standard_Real )i * 4); + aGroup->Text (texte[i], Marker, 20.); +} + +~~~~~ + +@section occt_visu_5 Mesh Visualization Services + +MeshVS (Mesh Visualization Service) component extends 3D visualization capabilities of Open CASCADE Technology. It provides flexible means of displaying meshes along with associated pre- and post-processor data. + +From a developer's point of view, it is easy to integrate the *MeshVS* component into any mesh-related application with the following guidelines: + +* Derive a data source class from the *MeshVS_DataSource* class. +* Re-implement its virtual methods, so as to give the MeshVS component access to the application data model. This is the most important part of the job, since visualization performance is affected by performance of data retrieval methods of your data source class. +* Create an instance of MeshVS_Mesh class. +* Create an instance of your data source class and pass it to a MeshVS_Mesh object through the SetDataSource() method. +* Create one or several objects of MeshVS_PrsBuilder-derived classes (standard, included in the MeshVS package, or your custom ones). +* Each PrsBuilder is responsible for drawing a MeshVS_Mesh presentation in a certain display mode(s) specified as a PrsBuilder constructor's argument. Display mode is treated by MeshVS classes as a combination of bit flags (two least significant bits are used to encode standard display modes: wireframe, shading and shrink). +* Pass these objects to the MeshVS_Mesh::AddBuilder() method. MeshVS_Mesh takes advantage of improved selection highlighting mechanism: it highlights its selected entities itself, with the help of so called "highlighter" object. You can set one of PrsBuilder objects to act as a highlighter with the help of a corresponding argument of the AddBuilder() method. + +Visual attributes of the MeshVS_Mesh object (such as shading color, shrink coefficient and so on) are controlled through MeshVS_Drawer object. It maintains a map "Attribute ID --> attribute value" and can be easily extended with any number of custom attributes. + +In all other respects, MeshVS_Mesh is very similar to any other class derived from AIS_InteractiveObject and it should be used accordingly (refer to the description of AIS package in the documentation).

d4BZ;Gv6?_nWAePDNWgB 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%0Dal9<8k^}-#> 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 literal 0 HcmV?d00001 diff --git a/dox/user_guides/visualization/images/viewfrustumculling.png b/dox/user_guides/visualization/images/viewfrustumculling.png new file mode 100644 index 0000000000000000000000000000000000000000..6dc6db86b461df44d657338c56d6f579604738b6 GIT binary patch literal 72427 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: Application Interactive Services. - * If you need more detail, for example, a selection filter on another type of entity - you should read chapter 2 Fundamental Concepts, chapter 3 AIS: Application Interactive Services, and possibly chapters 4 3D Presentations and 5 3D Resources. You may want to begin with the chapter presenting AIS. + * If you need more detail, for example, a selection filter on another type of entity - you should read chapter 2 Fundamental Concepts, chapter 3 AIS: Application Interactive Services, and 4 3D Presentations. You may want to begin with the chapter presenting AIS. @section occt_visu_2  Fundamental Concepts @@ -51,7 +49,7 @@ Displaying an object on the screen involves three kinds of entities: * a viewer * an interactive context, the *AIS_InteractiveContext*. -