0031939: Coding - correction of spelling errors in comments [part 3]
[occt.git] / dox / user_guides / draw_test_harness / draw_test_harness.md
1 Draw Test Harness  {#occt_user_guides__test_harness}
2 ===============================
3
4 @tableofcontents
5  
6 @section occt_draw_1 Introduction
7
8 This manual explains how to use Draw, the test harness for Open CASCADE Technology (**OCCT**).
9 Draw is a command interpreter based on TCL and a graphical system used to test and demonstrate Open CASCADE Technology modeling libraries. 
10
11 @subsection occt_draw_1_1 Overview
12
13 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. 
14
15 Draw can be used interactively to create, display and modify objects such as curves, surfaces and topological shapes. 
16
17 Scripts may be written to customize Draw and perform tests.
18 New types of objects and new commands may be added using the C++ programming language.
19
20 Draw consists of: 
21
22   * A command interpreter based on the TCL command language.
23   * A 3d graphic viewer based on the X system.
24   * A basic set of commands covering scripts, variables and graphics.
25   * A set of geometric commands allowing the user to create and modify curves and surfaces and to use OCCT geometry algorithms. This set of commands is optional.
26   * A set of topological commands allowing the user to create and modify BRep shapes and to use the OCCT topology algorithms.
27
28
29 There is also a set of commands for each delivery unit in the modeling libraries: 
30
31   * GEOMETRY, 
32   * TOPOLOGY, 
33   * ADVALGOS, 
34   * GRAPHIC, 
35   * PRESENTATION. 
36
37
38 @subsection occt_draw_1_2 Contents of this documentation
39
40 This documentation describes: 
41
42   * The command language.
43   * The basic set of commands.
44   * The graphical commands.
45   * The Geometry set of commands.
46   * The Topology set of commands.
47   * OCAF commands.
48   * Data Exchange commands
49   * Shape Healing commands
50
51 This document is a reference manual. It contains a full description of each command. All descriptions have the format illustrated below for the exit command. 
52
53 ~~~~~
54 exit
55 ~~~~~
56
57 Terminates the Draw, TCL session. If the commands are read from a file using the source command, this will terminate the file. 
58
59 **Example:** 
60
61 ~~~~~
62 # this is a very short example 
63 exit 
64 ~~~~~
65
66
67 @subsection occt_draw_1_3 Getting started
68
69 Install Draw and launch Emacs. Get a command line in Emacs using *Esc x* and key in *woksh*. 
70
71 All DRAW Test Harness can be activated in the common executable called **DRAWEXE**. They are grouped in toolkits and can be loaded at run-time thereby implementing dynamically loaded plug-ins. Thus, it is possible to work only with the required commands adding them dynamically without leaving the Test Harness session. 
72
73 Declaration of available plug-ins is done through the special resource file(s). The *pload* command loads the plug-in in accordance with the specified resource file and activates the commands implemented in the plug-in. 
74
75 @subsubsection occt_draw_1_3_1 Launching DRAW Test Harness
76
77 Test Harness executable *DRAWEXE* is located in the <i>$CASROOT/\<platform\>/bin</i> directory (where \<platform\> is Win for Windows and Linux for Linux operating systems). Prior to launching it is important to make sure that the environment is correctly setup (usually this is done automatically after the installation process on Windows or after launching specific scripts on Linux).  
78
79
80 @subsubsection occt_draw_1_3_2 Plug-in resource file
81
82 Open CASCADE Technology is shipped with the DrawPlugin resource file located in the <i>$CASROOT/src/DrawResources</i> directory. 
83
84 The format of the file is compliant with standard Open CASCADE Technology resource files (see the *Resource_Manager.hxx* file for details). 
85
86 Each key defines a sequence of either further (nested) keys or a name of the dynamic library. Keys can be nested down to an arbitrary level. However, cyclic dependencies between the keys are not checked. 
87
88 **Example:** (excerpt from DrawPlugin): 
89 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{.cpp}
90 OCAF               : VISUALIZATION, OCAFKERNEL 
91 VISUALIZATION      : AISV 
92 OCAFKERNEL         : DCAF 
93
94 DCAF               : TKDCAF 
95 AISV               : TKViewerTest 
96 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
97
98 @subsubsection occt_draw_1_3_3 Activation of commands implemented in the plug-in
99
100 To load a plug-in declared in the resource file and to activate the commands the following command must be used in Test Harness: 
101
102 ~~~~~
103 pload [-PluginFileName] [[Key1] [Key2]...]
104 ~~~~~
105
106 where: 
107
108 * <i>-PluginFileName</i> -- defines the name of a plug-in resource file (prefix "-" is mandatory) described above. If this parameter is omitted then the default name *DrawPlugin* is used. 
109 * *Key* -- defines the key(s) enumerating plug-ins to be loaded. If no keys are specified then the key named *DEFAULT* is used (if there is no such key in the file then no plug-ins are loaded). 
110
111 According to the OCCT resource file management rules, to access the resource file the environment variable *CSF_PluginFileNameDefaults* (and optionally *CSF_PluginFileNameUserDefaults*) must be set and point to the directory storing the resource file. If it is omitted then the plug-in resource file will be searched in the <i>$CASROOT/src/DrawResources</i> directory. 
112
113 ~~~~~
114 Draw[]        pload -DrawPlugin OCAF 
115 ~~~~~
116 This command will search the resource file *DrawPlugin* using variable *CSF_DrawPluginDefaults* (and *CSF_DrawPluginUserDefaults*) and will start with the OCAF key. Since the *DrawPlugin* is the file shipped with Open CASCADE Technology it will be found in the <i>$CASROOT/src/DrawResources</i> directory (unless this location is redefined by user's variables). The OCAF key will be recursively extracted into two toolkits/plug-ins: *TKDCAF* and *TKViewerTest* (e.g. on Windows they correspond to *TKDCAF.dll* and *TKViewerTest.dll*). Thus, commands implemented for Visualization and OCAF will be loaded and activated in Test Harness. 
117
118 ~~~~~
119 Draw[]        pload (equivalent to pload -DrawPlugin DEFAULT). 
120 ~~~~~
121 This command will find the default DrawPlugin file and the DEFAULT key. The latter finally maps to the TKTopTest toolkit which implements basic modeling commands. 
122
123
124 @section occt_draw_2 The Command Language
125
126 @subsection occt_draw_2_1 Overview
127
128 The command language used in Draw is Tcl. Tcl documentation such as "TCL and the TK Toolkit" by John K. Ousterhout (Addison-Wesley) will prove useful if you intend to use Draw extensively. 
129
130 This chapter is designed to give you a short outline of both the TCL language and some extensions included in Draw. The following topics are covered: 
131
132   * Syntax of the TCL language.
133   * Accessing variables in TCL and Draw.
134   * Control structures.
135   * Procedures.
136
137 @subsection occt_draw_2_2 Syntax of TCL
138
139 TCL is an interpreted command language, not a structured language like C, Pascal, LISP or Basic. It uses a shell similar to that of csh. TCL is, however, easier to use than csh because control structures and procedures are easier to define. As well, because TCL does not assign a process to each command, it is faster than csh. 
140
141 The basic program for TCL is a script. A script consists of one or more commands. Commands are separated by new lines or semicolons. 
142
143 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{.cpp}
144 set a 24 
145 set b 15 
146 set a 25; set b 15 
147 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
148
149 Each command consists of one or more *words*; the first word is the name of a command and additional words are arguments to that command. 
150
151 Words are separated by spaces or tabs. In the preceding example each of the four commands has three words. A command may contain any number of words and each word is a string of arbitrary length. 
152
153 The evaluation of a command by TCL is done in two steps. In the first step, the command is parsed and broken into words. Some substitutions are also performed. In the second step, the command procedure corresponding to the first word is called and the other words are interpreted as arguments. In the first step, there is only string manipulation, The words only acquire *meaning* in the second step by the command procedure. 
154
155 The following substitutions are performed by TCL: 
156
157 Variable substitution is triggered by the $ character (as with csh), the content of the variable is substituted; { } may be used as in csh to enclose the name of the variable.
158
159 **Example:** 
160 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{.cpp}
161 # set a variable value 
162 set file documentation 
163 puts $file #to display file contents on the screen 
164
165 # a simple substitution, set psfile to documentation.ps 
166 set psfile $file.ps 
167 puts $psfile 
168
169 # another substitution, set pfile to documentationPS 
170 set pfile ${file}PS 
171
172 # a last one, 
173 # delete files NEWdocumentation and OLDdocumentation 
174 foreach prefix {NEW OLD} {rm $prefix$file} 
175 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
176
177 Command substitution is triggered by the [ ] characters. The brackets must enclose a valid script. The script is evaluated and the result is substituted. 
178
179 Compare command construction in csh. 
180
181 **Example:** 
182 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{.cpp}
183 set degree 30 
184 set pi 3.14159265 
185 # expr is a command evaluating a numeric expression 
186 set radian [expr $pi*$degree/180] 
187 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
188
189 Backslash substitution is triggered by the backslash character. It is used to insert special characters like $, [ , ] , etc. It is also useful to insert a new line, a backslash terminated line is continued on the following line. 
190
191 TCL uses two forms of *quoting* to prevent substitution and word breaking. 
192
193 Double quote *quoting* enables the definition of a string with space and tabs as a single word. Substitutions are still performed inside the inverted commas " ". 
194
195 **Example:** 
196 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{.cpp}
197 # set msg to ;the price is 12.00; 
198 set price 12.00 
199 set msg ;the price is $price; 
200 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
201
202 Braces *quoting* prevents all substitutions. Braces are also nested. The main use of braces is to defer evaluation when defining procedures and control structures. Braces are used for a clearer presentation of TCL scripts on several lines. 
203
204 **Example:** 
205 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{.cpp}
206 set x 0 
207 # this will loop for ever 
208 # because while argument is ;0 < 3; 
209 while ;$x < 3; {set x [expr $x+1]} 
210 # this will terminate as expected because 
211 # while argument is {$x < 3} 
212 while {$x < 3} {set x [expr $x+1]} 
213 # this can be written also 
214 while {$x < 3} { 
215 set x [expr $x+1] 
216
217 # the following cannot be written 
218 # because while requires two arguments 
219 while {$x < 3} 
220
221 set x [expr $x+1] 
222
223 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
224
225 Comments start with a \# character as the first non-blank character in a command. To add a comment at the end of the line, the comment must be preceded by a semi-colon to end the preceding command. 
226
227 **Example:** 
228 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{.cpp}
229 # This is a comment 
230 set a 1 # this is not a comment 
231 set b 1; # this is a comment 
232 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
233
234 The number of words is never changed by substitution when parsing in TCL. For example, the result of a substitution is always a single word. This is different from csh but convenient as the behavior of the parser is more predictable. It may sometimes be necessary to force a second round of parsing. **eval** accomplishes this: it accepts several arguments, concatenates them and executes the resulting script. 
235
236
237 **Example:** 
238 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
239 # I want to delete two files 
240
241 set files ;foo bar; 
242
243 # this will fail because rm will receive only one argument 
244 # and complain that ;foo bar; does not exit 
245
246 exec rm $files 
247
248 # a second evaluation will do it 
249 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
250
251 @subsection occt_draw_2_3 Accessing variables in TCL and Draw
252
253 TCL variables have only string values. Note that even numeric values are stored as string literals, and computations using the **expr** command start by parsing the strings. Draw, however, requires variables with other kinds of values such as curves, surfaces or topological shapes. 
254
255 TCL provides a mechanism to link user data to variables. Using this functionality, Draw defines its variables as TCL variables with associated data. 
256
257 The string value of a Draw variable is meaningless. It is usually set to the name of the variable itself. Consequently, preceding a Draw variable with a <i>$</i> does not change the result of a command. The content of a Draw variable is accessed using appropriate commands. 
258
259 There are many kinds of Draw variables, and new ones may be added with C++. Geometric and topological variables are described below. 
260
261 Draw numeric variables can be used within an expression anywhere a Draw command requires a numeric value. The *expr* command is useless in this case as the variables are stored not as strings but as floating point values. 
262
263 **Example:** 
264 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{.cpp}
265 # dset is used for numeric variables 
266 # pi is a predefined Draw variable 
267 dset angle pi/3 radius 10 
268 point p radius*cos(angle) radius*sin(angle) 0 
269 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
270 It is recommended that you use TCL variables only for strings and Draw for numerals. That way, you will avoid the *expr* command. As a rule, Geometry and Topology require numbers but no strings. 
271
272 @subsubsection occt_draw_2_3_1 set, unset
273
274 Syntax:                  
275
276 ~~~~~
277 set varname [value] 
278 unset varname [varname varname ...] 
279 ~~~~~
280
281 *set* assigns a string value to a variable. If the variable does not already exist, it is created. 
282
283 Without a value, *set* returns the content of the variable. 
284
285 *unset* deletes variables. It is is also used to delete Draw variables. 
286
287 **Example:** 
288 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{.cpp}
289 set a "Hello world"
290 set b "Goodbye" 
291 set a 
292 == "Hello world" 
293 unset a b 
294 set a 
295 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
296
297 **Note**, that the *set* command can set only one variable, unlike the *dset* command. 
298
299
300 @subsubsection occt_draw_2_3_2 dset, dval
301
302 Syntax
303
304 ~~~~~
305 dset var1 value1 vr2 value2 ... 
306 dval name 
307 ~~~~~
308
309 *dset* assigns values to Draw numeric variables. The argument can be any numeric expression including Draw numeric variables. Since all Draw commands expect a numeric expression, there is no need to use $ or *expr*. The *dset* command can assign several variables. If there is an odd number of arguments, the last variable will be assigned a value of 0. If the variable does not exist, it will be created. 
310
311 *dval* evaluates an expression containing Draw numeric variables and returns the result as a string, even in the case of a single variable. This is not used in Draw commands as these usually interpret the expression. It is used for basic TCL commands expecting strings. 
312
313
314 **Example:** 
315 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{.cpp}
316 # z is set to 0 
317 dset x 10 y 15 z 
318 == 0 
319
320 # no $ required for Draw commands 
321 point p x y z 
322
323 # "puts" prints a string 
324 puts ;x = [dval x], cos(x/pi) = [dval cos(x/pi)]; 
325 == x = 10, cos(x/pi) = -0.99913874099467914 
326 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
327
328 **Note,** that in TCL, parentheses are not considered to be special characters. Do not forget to quote an expression if it contains spaces in order to avoid parsing different words. <i>(a + b)</i> is parsed as three words: <i>"(a + b)"</i> or <i>(a+b)</i> are correct.
329
330 @subsubsection occt_draw_2_3_3 del, dall
331
332 Syntax:      
333 ~~~~~
334 del varname_pattern [varname_pattern ...] 
335 dall
336 ~~~~~
337
338 *del* command does the same thing as *unset*, but it deletes the variables matched by the pattern.
339
340 *dall* command deletes all variables in the session.
341
342 @subsection occt_draw_2_4 lists
343
344 TCL uses lists. A list is a string containing elements separated by spaces or tabs. If the string contains braces, the braced part accounts as one element. 
345
346 This allows you to insert lists within lists. 
347
348 **Example:** 
349 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{.cpp}
350 # a list of 3 strings 
351 ;a b c; 
352
353 # a list of two strings the first is a list of 2 
354 ;{a b} c; 
355 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
356
357 Many TCL commands return lists and **foreach** is a useful way to create loops on list elements. 
358
359 @subsubsection occt_draw_2_5 Control Structures
360
361 TCL allows looping using control structures. The control structures are implemented by commands and their syntax is very similar to that of their C counterparts (**if**, **while**, **switch**, etc.). In this case, there are two main differences between TCL and C: 
362
363 * You use braces instead of parentheses to enclose conditions. 
364 * You do not start the script on the next line of your command. 
365
366
367 @subsubsection occt_draw_2_5_1 if
368
369 Syntax       
370
371 ~~~~~
372 if condition script [elseif script .... else script] 
373 ~~~~~
374
375 **If** evaluates the condition and the script to see whether the condition is true. 
376
377
378
379 **Example:** 
380 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{.cpp}
381 if {$x > 0} { 
382 puts ;positive; 
383 } elseif {$x == 0} { 
384 puts ;null; 
385 } else { 
386 puts ;negative; 
387
388 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
389
390 @subsubsection occt_draw_2_5_2 while, for, foreach
391
392 Syntax:                  
393
394
395 ~~~~~
396 while condition script 
397 for init condition reinit script 
398 foreach varname list script 
399 ~~~~~
400
401 The three loop structures are similar to their C or csh equivalent. It is important to use braces to delay evaluation. **foreach** will assign the elements of the list to the variable before evaluating the script. \
402
403 **Example:** 
404 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{.cpp}
405 # while example 
406 dset x 1.1 
407 while {[dval x] < 100} { 
408   circle c 0 0 x 
409   dset x x*x 
410
411 # for example 
412 # incr var d, increments a variable of d (default 1) 
413 for {set i 0} {$i < 10} {incr i} { 
414   dset angle $i*pi/10 
415   point p$i cos(angle0 sin(angle) 0 
416
417 # foreach example 
418 foreach object {crapo tomson lucas} {display $object} 
419 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
420
421 @subsubsection occt_draw_2_5_3 break, continue
422
423 Syntax:                  
424
425 ~~~~~
426 break 
427 continue 
428 ~~~~~
429
430 Within loops, the **break** and **continue** commands have the same effect as in C. 
431
432 **break** interrupts the innermost loop and **continue** jumps to the next iteration. 
433
434 **Example:** 
435 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{.cpp}
436 # search the index for which t$i has value ;secret; 
437 for {set i 1} {$i <= 100} {incr i} { 
438   if {[set t$i] == ;secret;} break; 
439
440 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
441
442 @subsection occt_draw_2_6 Procedures
443
444 TCL can be extended by defining procedures using the **proc** command, which sets up a context of local variables, binds arguments and executes a TCL script. 
445
446 The only problematic aspect of procedures is that variables are strictly local, and as they are implicitly created when used, it may be difficult to detect errors. 
447
448 There are two means of accessing a variable outside the scope of the current procedures: **global** declares a global variable (a variable outside all procedures); **upvar** accesses a variable in the scope of the caller. Since arguments in TCL are always string values, the only way to pass Draw variables is by reference, i.e. passing the name of the variable and using the **upvar** command as in the following examples. 
449
450 As TCL is not a strongly typed language it is very difficult to detect programming errors and debugging can be tedious. TCL procedures are, of course, not designed for large scale software development but for testing and simple command or interactive writing. 
451
452
453 @subsubsection occt_draw_2_6_1 proc
454
455 Syntax:
456
457 ~~~~~
458 proc argumentlist script 
459 ~~~~~
460
461 **proc** defines a procedure. An argument may have a default value. It is then a list of the form {argument value}. The script is the body of the procedure. 
462
463 **return** gives a return value to the procedure. 
464
465 **Example:** 
466 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{.cpp}
467 # simple procedure 
468 proc hello {} { 
469   puts ;hello world; 
470
471 # procedure with arguments and default values 
472 proc distance {x1 y1 {x2 0} {y2 0}} { 
473   set d [expr (x2-x1)*(x2-x1) + (y2-y1)*(y2-y1)] 
474   return [expr sqrt(d)] 
475
476 proc fact n { 
477   if {$n == 0} {return 1} else { 
478     return [expr n*[fact [expr n -1]]] 
479   } 
480
481 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
482
483
484 @subsubsection occt_draw_2_6_2 global, upvar
485
486 Syntax:                 
487
488 ~~~~~
489 global varname [varname ...] 
490 upvar varname localname [varname localname ...] 
491 ~~~~~
492
493
494 **global** accesses high level variables. Unlike C, global variables are not visible in procedures. 
495
496 **upvar** gives a local name to a variable in the caller scope. This is useful when an argument is the name of a variable instead of a value. This is a call by reference and is the only way to use Draw variables as arguments. 
497
498 **Note** that in the following examples the \$ character is always necessarily used to access the arguments.
499  
500 **Example:** 
501 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{.cpp}
502 # convert degree to radian 
503 # pi is a global variable 
504 proc deg2rad (degree} { 
505   return [dval pi*$degree/2.] 
506
507 # create line with a point and an angle 
508 proc linang {linename x y angle} { 
509   upvar linename l 
510   line l $x $y cos($angle) sin($angle) 
511 }
512 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
513
514 @section occt_draw_3 Basic Commands
515
516 This chapter describes all the commands defined in the basic Draw package. Some are TCL commands, but most of them have been formulated in Draw. These commands are found in all Draw applications. The commands are grouped into four sections: 
517
518   * General commands, which are used for Draw and TCL management.
519   * Variable commands, which are used to manage Draw variables such as storing and dumping.
520   * Graphic commands, which are used to manage the graphic system, and so pertain to views.
521   * Variable display commands, which are used to manage the display of objects within given views.
522
523 Note that Draw also features a GUI task bar providing an alternative way to give certain general, graphic and display commands 
524
525
526 @subsection occt_draw_3_1 General commands
527
528 This section describes several useful commands:
529
530   * **help** to get information, 
531   * **source** to eval a script from a file, 
532   * **spy** to capture the commands in a file,
533   * **cpulimit** to limit the process cpu time, 
534   * **wait** to waste some time, 
535   * **chrono** to time commands. 
536
537 @subsubsection occt_draw_3_1_1 help
538
539 Syntax:                  
540
541 ~~~~~
542 help [command [helpstring group]] 
543 ~~~~~
544
545 Provides help or modifies the help information. 
546
547 **help** without arguments lists all groups and the commands in each group. 
548
549 Specifying the command returns its syntax and in some cases, information on the command, The joker \* is automatically added at the end so that all completing commands are returned as well. 
550
551 **Example:** 
552 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{.cpp}
553 # Gives help on all commands starting with *a* 
554 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
555
556
557 @subsubsection occt_draw_3_1_2 source
558
559 Syntax:
560
561 ~~~~~
562 source filename 
563 ~~~~~
564 Executes a file. 
565
566 The **exit** command will terminate the file. 
567
568 @subsubsection occt_draw_3_1_3 spy
569
570 Syntax:                  
571
572 ~~~~~
573 spy [filename] 
574 ~~~~~
575
576 Saves interactive commands in the file. If spying has already been performed, the current file is closed. **spy** without an argument closes the current file and stops spying. If a file already exists, the file is overwritten. Commands are not appended. 
577
578 If a command returns an error it is saved with a comment mark. 
579
580 The file created by **spy** can be executed with the **source** command. 
581
582 **Example:** 
583 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{.cpp}
584 # all commands will be saved in the file ;session; 
585 spy session 
586 # the file ;session; is closed and commands are not saved 
587 spy 
588 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
589
590
591
592 @subsubsection occt_draw_3_1_4 cpulimit
593
594 Syntax:                  
595
596 ~~~~~
597 cpulimit [nbseconds] 
598 ~~~~~
599
600 **cpulimit**limits a process after the number of seconds specified in nbseconds. It is used in tests to avoid infinite loops. **cpulimit** without arguments removes all existing limits. 
601
602 **Example:** 
603 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{.cpp}
604 #limit cpu to one hour 
605 cpulimit 3600 
606 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
607
608 @subsubsection occt_draw_3_1_5 wait
609
610 Syntax:
611 ~~~~~
612 wait [nbseconds] 
613 ~~~~~
614 Suspends execution for the number of seconds specified in *nbseconds*. The default value is ten (10) seconds. This is a useful command for a slide show. 
615
616 ~~~~~
617 # You have ten seconds ... 
618 wait 
619 ~~~~~
620
621 @subsubsection occt_draw_3_1_6 chrono
622
623 Syntax:                  
624
625 ~~~~~
626 chrono [ name start/stop/reset/show/restart/[counter text]]
627 ~~~~~
628
629 Without arguments, **chrono** activates Draw chronometers. The elapsed time ,cpu system and cpu user times for each command will be printed. 
630
631 With arguments, **chrono** is used to manage activated chronometers. You can perform the following actions with a chronometer. 
632   * run the chronometer (start).
633   * stop the chronometer (stop).
634   * reset the chronometer to 0 (reset).
635   * restart the chronometer (restart).
636   * display the current time (show).
637   * display the current time with specified text (output example - *COUNTER text: N*), command <i>testdiff</i> will compare such outputs between two test runs (counter).
638
639 **Example:** 
640 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{.cpp}
641 chrono 
642 ==Chronometers activated. 
643 ptorus t 20 5 
644 ==Elapsed time: 0 Hours 0 Minutes 0.0318 Seconds 
645 ==CPU user time: 0.01 seconds 
646 ==CPU system time: 0 seconds 
647 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
648
649 @subsection occt_draw_3_2  Variable management commands
650
651 @subsubsection occt_draw_3_2_1 isdraw, directory
652
653 Syntax:                  
654 ~~~~~
655 isdraw varname 
656 directory [pattern] 
657 ~~~~~
658
659 **isdraw** tests to see if a variable is a Draw variable. **isdraw** will return 1 if there is a Draw value attached to the variable. 
660
661 Use **directory** to return a list of all Draw global variables matching a pattern. 
662
663 **Example:** 
664 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{.cpp}
665 set a 1 
666 isdraw a 
667 === 0 
668
669 dset a 1 
670 isdraw a 
671 === 1 
672
673 circle c 0 0 1 0 5 
674 isdraw c 
675 === 1 
676
677 # to destroy all Draw objects with name containing curve 
678 foreach var [directory *curve*] {unset $var} 
679 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
680
681
682 @subsubsection occt_draw_3_2_2 whatis, dump
683
684 Syntax:
685
686 ~~~~~
687 whatis varname [varname ...] 
688 dump varname [varname ...] 
689 ~~~~~
690
691 **whatis** returns short information about a Draw variable. This is usually the type name. 
692
693 **dump** returns a brief type description, the coordinates, and if need be, the parameters of a Draw variable. 
694
695 **Example:** 
696 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{.cpp}
697 circle c 0 0 1 0 5 
698 whatis c 
699 c is a 2d curve 
700
701 dump c 
702
703 ***** Dump of c ***** 
704 Circle 
705 Center :0, 0 
706 XAxis :1, 0 
707 YAxis :-0, 1 
708 Radius :5 
709 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
710
711 **Note** The behavior of *whatis* on other variables (not Draw) is not excellent. 
712
713
714 @subsubsection occt_draw_3_2_3 renamevar, copy
715
716 Syntax:      
717 ~~~~~
718 renamevar varname tovarname [varname tovarname ...] 
719 copy varname tovarname [varname tovarname ...] 
720 ~~~~~
721
722   * **renamevar** changes the name of a Draw variable. The original variable will no longer exist. Note that the content is not modified. Only the name is changed. 
723   * **copy** creates a new variable with a copy of the content of an existing variable. The exact behavior of **copy** is type dependent; in the case of certain topological variables, the content may still be shared. 
724
725 **Example:** 
726 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{.cpp}
727 circle c1 0 0 1 0 5 
728 renamevar c1 c2 
729
730 # curves are copied, c2 will not be modified 
731 copy c2 c3 
732 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
733
734 @subsubsection occt_draw_3_2_4 datadir, save, restore
735
736 Syntax:
737 ~~~~~
738 datadir [directory] 
739 save variable [filename] 
740 restore filename [variablename] 
741 ~~~~~
742
743   * **datadir** without arguments prints the path of the current data directory. 
744   * **datadir** with an argument sets the data directory path. \
745
746 If the path starts with a dot (.) only the last directory name will be changed in the path. 
747
748   * **save** writes a file in the data directory with the content of a variable. By default the name of the file is the name of the variable. To give a different name use a second argument. 
749   * **restore** reads the content of a file in the data directory in a local variable. By default, the name of the variable is the name of the file. To give a different name, use a second argument. 
750
751 The exact content of the file is type-dependent. They are usually ASCII files and so, architecture independent. 
752
753 **Example:** 
754 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{.cpp}
755 # note how TCL accesses shell environment variables 
756 # using $env() 
757 datadir 
758 ==. 
759
760 datadir $env(WBCONTAINER)/data/default 
761 ==/adv_20/BAG/data/default 
762
763 box b 10 20 30 
764 save b theBox 
765 ==/adv_20/BAG/data/default/theBox 
766
767 # when TCL does not find a command it tries a shell command 
768 ls [datadir] 
769 == theBox 
770
771 restore theBox 
772 == theBox 
773 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
774
775 @subsection occt_draw_3_3 User defined commands
776
777 *DrawTrSurf* provides commands to create and display a Draw **geometric** variable from a *Geom_Geometry* object and also get a *Geom_Geometry* object from a Draw geometric variable name. 
778
779 *DBRep* provides commands to create and display a Draw **topological** variable from a *TopoDS_Shape* object and also get a *TopoDS_Shape* object from a Draw topological variable name. 
780
781 @subsubsection occt_draw_3_3_1 set
782
783 #### In *DrawTrSurf* package:
784
785 ~~~~~
786 void Set(Standard_CString& Name,const gp_Pnt& G) ; 
787 void Set(Standard_CString& Name,const gp_Pnt2d& G) ; 
788 void Set(Standard_CString& Name, 
789 const Handle(Geom_Geometry)& G) ; 
790 void Set(Standard_CString& Name, 
791 const Handle(Geom2d_Curve)& C) ; 
792 void Set(Standard_CString& Name, 
793 const Handle(Poly_Triangulation)& T) ; 
794 void Set(Standard_CString& Name, 
795 const Handle(Poly_Polygon3D)& P) ; 
796 void Set(Standard_CString& Name, 
797 const Handle(Poly_Polygon2D)& P) ; 
798 ~~~~~
799
800 #### In *DBRep* package:
801
802 ~~~~~
803 void Set(const Standard_CString Name, 
804 const TopoDS_Shape& S) ; 
805 ~~~~~
806
807 Example of *DrawTrSurf*
808
809 ~~~~~
810 Handle(Geom2d_Circle) C1 = new Geom2d_Circle 
811 (gce_MakeCirc2d (gp_Pnt2d(50,0,) 25)); 
812 DrawTrSurf::Set(char*, C1); 
813 ~~~~~
814
815 Example of *DBRep* 
816
817 ~~~~~
818 TopoDS_Solid B; 
819 B = BRepPrimAPI_MakeBox (10,10,10); 
820 DBRep::Set(char*,B); 
821 ~~~~~
822
823 @subsubsection occt_draw_3_3_2 get
824
825 #### In *DrawTrSurf* package:
826  
827 ~~~~~
828 Handle_Geom_Geometry Get(Standard_CString& Name) ; 
829 ~~~~~
830
831 #### In *DBRep* package:
832
833 ~~~~~
834 TopoDS_Shape Get(Standard_CString& Name, 
835 const TopAbs_ShapeEnum Typ = TopAbs_SHAPE, 
836 const Standard_Boolean Complain 
837 = Standard_True) ; 
838 ~~~~~
839
840 Example of *DrawTrSurf*
841
842 ~~~~~
843 Standard_Integer MyCommand 
844 (Draw_Interpretor& theCommands, 
845 Standard_Integer argc, char** argv) 
846 {...... 
847 // Creation of a Geom_Geometry from a Draw geometric 
848 // name 
849 Handle (Geom_Geometry) aGeom= DrawTrSurf::Get(argv[1]); 
850
851 ~~~~~
852
853 Example of *DBRep*
854
855 ~~~~~
856 Standard_Integer MyCommand 
857 (Draw_Interpretor& theCommands, 
858 Standard_Integer argc, char** argv) 
859 {...... 
860 // Creation of a TopoDS_Shape from a Draw topological 
861 // name 
862 TopoDS_Solid B = DBRep::Get(argv[1]); 
863
864 ~~~~~
865
866 @section occt_draw_4 Graphic Commands
867
868 Graphic commands are used to manage the Draw graphic system. Draw provides a 2d and a 3d viewer with up to 30 views. Views are numbered and the index of the view is displayed in the window’s title. Objects are displayed in all 2d views or in all 3d views, depending on their type. 2d objects can only be viewed in 2d views while 3d objects -- only in 3d views correspondingly. 
869
870 @subsection occt_draw_4_1 Axonometric viewer
871
872 @subsubsection occt_draw_4_1_1 view, delete
873
874 Syntax:                  
875 ~~~~~
876 view index type [X Y W H] 
877 delete [index] 
878 ~~~~~
879
880 **view** is the basic view creation command: it creates a new view with the given index. If a view with this index already exits, it is deleted. The view is created with default parameters and X Y W H are the position and dimensions of the window on the screen. Default values are 0, 0, 500, 500. 
881
882 As a rule it is far simpler either to use the procedures **axo**, **top**, **left** or to click on the desired view type in the menu under *Views* in the task bar.. 
883
884 **delete** deletes a view. If no index is given, all the views are deleted. 
885
886 Type selects from the following range: 
887
888   * *AXON* : Axonometric view
889   * *PERS* : Perspective view
890   * <i>+X+Y</i> : View on both axes (i.e. a top view), other codes are <i>-X+Y</i>, <i>+Y-Z</i>, etc.
891   * <i>-2D-</i> : 2d view
892
893 The index, the type, the current zoom are displayed in the window title . 
894
895 **Example:** 
896 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{.cpp}
897 # this is the content of the mu4 procedure 
898 proc mu4 {} { 
899 delete 
900 view 1 +X+Z 320 20 400 400 
901 view 2 +X+Y 320 450 400 400 
902 view 3 +Y+Z 728 20 400 400 
903 view 4 AXON 728 450 400 400 
904
905 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
906
907 See also: **axo, pers, top, bottom, left, right, front, back, mu4, v2d, av2d, smallview** 
908
909 @subsubsection occt_draw_4_1_2  axo, pers, top, ...
910
911 Syntax:      
912
913 ~~~~~
914 axo 
915 pers 
916 ... 
917 smallview type 
918 ~~~~~
919
920 All these commands are procedures used to define standard screen layout. They delete all existing views and create new ones. The layout usually complies with the European convention, i.e. a top view is under a front view. 
921
922   * **axo** creates a large window axonometric view;
923   * **pers** creates a large window perspective view;
924   * **top**, **bottom**, **left**, **right**, **front**, **back** create a large window axis view;
925   * **mu4** creates four small window views: front, left, top and axo.
926   * **v2d** creates a large window 2d view.
927   * **av2d** creates two small window views, one 2d and one axo
928   * **smallview** creates a view at the bottom right of the screen of the given type. 
929
930 See also: **view**, **delete** 
931
932 @subsubsection occt_draw_4_1_3 mu, md, 2dmu, 2dmd, zoom, 2dzoom
933
934 Syntax:
935
936 ~~~~~
937     mu [index] value 
938     2dmu [index] value 
939     zoom [index] value 
940     wzoom 
941 ~~~~~
942
943 * **mu** (magnify up) increases the zoom in one or several views by a factor of 10%. 
944 * **md** (magnify down) decreases the zoom by the inverse factor. **2dmu** and **2dmd** 
945 perform the same on one or all 2d views. 
946 * **zoom** and **2dzoom** set the zoom factor to a value specified by you. The current zoom factor is always displayed in the window’s title bar. Zoom 20 represents a full screen view in a large window; zoom 10, a full screen view in a small one. 
947 * **wzoom** (window zoom) allows you to select the area you want to zoom in on with the mouse. You will be prompted to give two of the corners of the area that you want to magnify and the rectangle so defined will occupy the window of the view. 
948
949 **Example:** 
950 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{.cpp}
951     # set a zoom of 2.5 
952     zoom 2.5 
953
954     # magnify by 10% 
955     mu 1 
956
957     # magnify by 20% 
958 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
959 See also: **fit**, **2dfit** 
960
961
962 @subsubsection occt_draw_4_14 pu, pd, pl, pr, 2dpu, 2dpd, 2dpl, 2dpr
963
964 Syntax:                  
965
966 ~~~~~
967 pu [index] 
968 pd [index] 
969 ~~~~~
970
971 The <i>p_</i> commands are used to pan. **pu** and **pd** pan up and down respectively; **pl** and **pr** pan to the left and to the right respectively. Each time the view is displaced by 40 pixels. When no index is given, all views will pan in the direction specified. 
972 ~~~~~
973 # you have selected one anonometric view
974 pu
975 # or
976 pu 1
977
978 # you have selected an mu4 view; the object in the third view will pan up
979 pu 3
980 ~~~~~
981 See also: **fit**, **2dfit** 
982
983
984 @subsubsection occt_draw_4_1_5 fit, 2dfit
985
986 Syntax:      
987
988 ~~~~~
989 fit [index] 
990 2dfit [index] 
991 ~~~~~
992
993 **fit** computes the best zoom and pans on the content of the view. The content of the view will be centered and fit the whole window. 
994
995 When fitting all views a unique zoom is computed for all the views. All views are on the same scale. 
996
997 **Example:** 
998 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{.cpp}
999 # fit only view 1 
1000 fit 1 
1001 # fit all 2d views 
1002 2dfit 
1003 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1004 See also: **zoom**, **mu**, **pu** 
1005
1006
1007 @subsubsection occt_draw_4_1_6 u, d, l, r
1008
1009 Syntax:      
1010
1011 ~~~~~
1012 u [index] 
1013 d [index] 
1014 l [index] 
1015 r [index] 
1016 ~~~~~
1017
1018 **u**, **d**, **l**, **r** Rotate the object in view around its axis by five degrees up, down, left or right respectively. This command is restricted to axonometric and perspective views. 
1019
1020 **Example:** 
1021 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{.cpp}
1022 # rotate the view up 
1023
1024 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1025
1026 @subsubsection occt_draw_4_1_7 focal, fu, fd
1027
1028 Syntax:                  
1029 ~~~~~
1030 focal [f] 
1031 fu [index] 
1032 fd [index] 
1033 ~~~~~
1034
1035 * **focal** changes the vantage point in perspective views. A low f value increases the perspective effect; a high one give a perspective similar to that of an axonometric view. The default value is 500. 
1036 * **fu** and **fd** increase or decrease the focal value by 10%. **fd** makes the eye closer to the object. 
1037
1038 **Example:** 
1039 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{.cpp}
1040 pers 
1041 repeat 10 fd 
1042 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1043
1044 **Note**: Do not use a negative or null focal value. 
1045
1046 See also: **pers** 
1047
1048 @subsubsection occt_draw_4_1_8 color
1049
1050 Syntax: 
1051
1052 ~~~~~
1053 color index name 
1054 ~~~~~
1055
1056 **color** sets the color to a value. The index of the *color* is a value between 0 and 15. The name is an X window color name. The list of these can be found in the file *rgb.txt* in the X library directory. 
1057
1058 The default values are: 0 White, 1 Red, 2 Green, 3 Blue, 4 Cyan, 5 Gold, 6 Magenta, 7 Marron, 8 Orange, 9 Pink, 10 Salmon, 11 Violet, 12 Yellow, 13 Khaki, 14 Coral. 
1059
1060 **Example:** 
1061 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{.cpp}
1062 # change the value of blue 
1063 color 3 "navy blue" 
1064 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1065
1066
1067 **Note** that the color change will be visible on the next redraw of the views, for example, after *fit* or *mu*, etc. 
1068
1069 @subsubsection occt_draw_4_1_9 dtext
1070
1071 Syntax:      
1072 ~~~~~
1073 dtext [x y [z]] string 
1074 ~~~~~
1075
1076 **dtext** displays a string in all 3d or 2d views. If no coordinates are given, a graphic selection is required. If two coordinates are given, the text is created in a 2d view at the position specified. With 3 coordinates, the text is created in a 3d view. 
1077
1078 The coordinates are real space coordinates. 
1079
1080 **Example:** 
1081 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{.cpp}
1082 # mark the origins 
1083 dtext 0 0 bebop 
1084 dtext 0 0 0 bebop 
1085 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1086
1087 @subsubsection occt_draw_4_1_10 hardcopy, hcolor, xwd
1088
1089 Syntax:      
1090 ~~~~~
1091 hardcopy [index] 
1092 hcolor index width gray 
1093 xwd [index] filename 
1094 ~~~~~
1095
1096 * **hardcopy** creates a postcript file called a4.ps in the current directory. This file contains the postscript description of the view index, and will allow you to print the view. 
1097 * **hcolor** lets you change the aspect of lines in the postscript file. It allows to specify a width and a gray level for one of the 16 colors. **width** is measured in points with default value as 1, **gray** is the gray level from 0 = black to 1 = white with default value as 0. All colors are bound to the default values at the beginning. 
1098 * **xwd** creates an X window xwd file from an active view. By default, the index is set to1. To visualize an xwd file, use the unix command **xwud**. 
1099
1100 **Example:** 
1101 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{.cpp}
1102 # all blue lines (color 3) 
1103 # will be half-width and gray 
1104 hcolor 3 0.5 
1105
1106 # make a postscript file and print it 
1107 hardcopy 
1108 lpr a4.ps 
1109
1110 # make an xwd file and display it 
1111 xwd theview 
1112 xwud -in theview 
1113 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1114
1115 **Note:** When more than one view is present, specify the index of the view. 
1116
1117 Only use a postscript printer to print postscript files. 
1118
1119 See also: **color** 
1120
1121
1122 @subsubsection occt_draw_4_1_11 wclick, pick
1123
1124 Syntax:      
1125 ~~~~~
1126 wclick 
1127 pick index X Y Z b [nowait] 
1128 ~~~~~
1129
1130 **wclick** defers an event until the mouse button is clicked. The message <code>just click</code> is displayed. 
1131
1132 Use the **pick** command to get graphic input. The arguments must be names for variables where the results are stored. 
1133   * index: index of the view where the input was made.
1134   * X,Y,Z: 3d coordinates in real world.
1135   * b: b is the mouse button 1,2 or 3.
1136
1137 When there is an extra argument, its value is not used and the command does not wait for a click; the value of b may then be 0 if there has not been a click. 
1138
1139 This option is useful for tracking the pointer. 
1140
1141 **Note** that the results are stored in Draw numeric variables.
1142
1143 **Example:** 
1144 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{.cpp}
1145 # make a circle at mouse location 
1146 pick index x y z b 
1147 circle c x y z 0 0 1 1 0 0 0 30 
1148
1149 # make a dynamic circle at mouse location 
1150 # stop when a button is clicked 
1151 # (see the repaint command) 
1152
1153 dset b 0 
1154 while {[dval b] == 0} { 
1155 pick index x y z b nowait 
1156 circle c x y z 0 0 1 1 0 0 0 30 
1157 repaint 
1158
1159 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1160 See also: **repaint** 
1161
1162
1163 Draw provides commands to manage the display of objects. 
1164 * **display**, **donly** are used to display, 
1165 * **erase**, **clear**, **2dclear** to erase. 
1166 * **autodisplay** command is used to check whether variables are displayed when created. 
1167
1168 The variable name "." (dot) has a special status in Draw. Any Draw command expecting a Draw object as argument can be passed a dot. The meaning of the dot is the following. 
1169   * If the dot is an input argument, a graphic selection will be made. Instead of getting the object from a variable, Draw will ask you to select an object in a view.
1170   * If the dot is an output argument, an unnamed object will be created. Of course this makes sense only for graphic objects: if you create an unnamed number you will not be able to access it. This feature is used when you want to create objects for display only.
1171   * If you do not see what you expected while executing loops or sourcing files, use the **repaint** and **dflush** commands.
1172
1173 **Example:** 
1174 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{.cpp}
1175 # OK use dot to dump an object on the screen 
1176 dump . 
1177
1178 point . x y z 
1179
1180 #Not OK. display points on a curve c 
1181 # with dot no variables are created 
1182 for {set i 0} {$i <= 10} {incr i} { 
1183 cvalue c $i/10 x y z 
1184 point . x y z 
1185
1186
1187 # point p x y z 
1188 # would have displayed only one point 
1189 # because the precedent variable content is erased 
1190
1191 # point p$i x y z 
1192 # is an other solution, creating variables 
1193 # p0, p1, p2, .... 
1194
1195 # give a name to a graphic object 
1196 renamevar . x 
1197 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1198
1199
1200 @subsubsection occt_draw_4_1_12 autodisplay
1201
1202 Syntax:      
1203
1204 ~~~~~
1205 autodisplay [0/1] 
1206 ~~~~~
1207
1208 By default, Draw automatically displays any graphic object as soon as it is created. This behavior known as autodisplay can be removed with the command **autodisplay**. Without arguments, **autodisplay** toggles the autodisplay mode. The command always returns the current mode. 
1209
1210 When **autodisplay** is off, using the dot return argument is ineffective. 
1211
1212 **Example:** 
1213 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{.cpp}
1214 # c is displayed 
1215 circle c 0 0 1 0 5 
1216
1217 # toggle the mode 
1218 autodisplay 
1219 == 0 
1220 circle c 0 0 1 0 5 
1221
1222 # c is erased, but not displayed 
1223 display c 
1224 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1225
1226 @subsubsection occt_draw_4_1_13 display, donly
1227
1228 Syntax:      
1229 ~~~~~
1230 display varname [varname ...] 
1231 donly varname [varname ...] 
1232 ~~~~~
1233
1234 * **display** makes objects visible. 
1235 * **donly** *display only* makes objects visible and erases all other objects. It is very useful to extract one object from a messy screen. 
1236
1237 **Example:** 
1238 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{.cpp}
1239 \# to see all objects 
1240 foreach var [directory] {display $var} 
1241
1242 \# to select two objects and erase the other ones 
1243 donly . . 
1244 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1245
1246
1247 @subsubsection occt_draw_4_1_14 erase, clear, 2dclear
1248
1249 Syntax:      
1250
1251 ~~~~~
1252 erase [varname varname ...] 
1253 clear 
1254 2dclear 
1255 ~~~~~
1256
1257 **erase** removes objects from all views. **erase** without arguments erases everything in 2d and 3d. 
1258
1259 **clear** erases only 3d objects and **2dclear** only 2d objects. **erase** without arguments is similar to  **clear; 2dclear**.
1260
1261
1262 **Example:** 
1263 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{.cpp}
1264 # erase eveerything with a name starting with c_ 
1265 foreach var [directory c_*] {erase $var} 
1266
1267 # clear 2d views 
1268 2dclear 
1269 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1270
1271 @subsubsection occt_draw_4_1_14_1 disp, don, era
1272
1273 These commands have the same meaning as correspondingly display, donly and erase, but with the difference that they evaluate the arguments using glob pattern rules.
1274 For example, to display all objects with names d_1, d_2, d_3, etc. it is enough to run the command:
1275 ~~~~~{.cpp}
1276 disp d_*
1277 ~~~~~
1278
1279 @subsubsection occt_draw_4_1_15 repaint, dflush
1280
1281
1282 Syntax:
1283
1284 ~~~~~
1285 repaint 
1286 dflush 
1287 ~~~~~
1288
1289 * **repaint** forces repainting of views. 
1290 * **dflush** flushes the graphic buffers. 
1291
1292 These commands are useful within loops or in scripts. 
1293
1294 When an object is modified or erased, the whole view must be repainted. To avoid doing this too many times, Draw sets up a flag and delays the repaint to the end of the command in which the new prompt is issued. In a script, you may want to display the result of a change immediately. If the flag is raised, **repaint** will repaint the views and clear the flag. 
1295
1296 Graphic operations are buffered by Draw (and also by the X system). Usually the buffer is flushed at the end of a command and before graphic selection. If you want to flush the buffer from inside a script, use the **dflush** command. 
1297
1298 See also: @ref occt_draw_4_1_11 "pick" command.  
1299
1300 @subsection occt_draw_4_2 AIS viewer -- view commands
1301
1302 @subsubsection occt_draw_4_2_1 vinit
1303
1304 Syntax:                  
1305 ~~~~~
1306 vinit 
1307 ~~~~~
1308 Creates a new View window with the specified *view_name*.
1309 By default the view is created in the viewer and in the graphic driver shared with the active view.
1310
1311 ~~~~
1312 name = {driverName/viewerName/viewName | viewerName/viewName | viewName}
1313 ~~~~
1314
1315 If *driverName* is not specified the driver will be shared with the active view.
1316 If *viewerName* is not specified the viewer will be shared with the active view.
1317
1318 @subsubsection occt_draw_4_2_2 vhelp
1319
1320 Syntax:
1321 ~~~~~
1322 vhelp 
1323 ~~~~~
1324 Displays help in the 3D viewer window. The help consists in a list of hotkeys and their functionalities. 
1325
1326 @subsubsection occt_draw_4_2_3 vtop
1327
1328 Syntax:
1329 ~~~~~
1330 vtop 
1331 ~~~~~
1332
1333 Displays top view in the 3D viewer window. Orientation +X+Y.
1334
1335 **Example:** 
1336 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{.cpp}
1337 vinit 
1338 box b 10 10 10 
1339 vdisplay b 
1340 vfit 
1341 vtop 
1342 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1343
1344 @subsubsection occt_draw_4_2_4 vaxo
1345
1346 Syntax:                  
1347 ~~~~~
1348 vaxo 
1349 ~~~~~
1350
1351 Displays axonometric view in the 3D viewer window. Orientation +X-Y+Z.
1352
1353 **Example:** 
1354 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{.cpp}
1355 vinit 
1356 box b 10 10 10 
1357 vdisplay b 
1358 vfit 
1359 vaxo 
1360 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1361
1362 @subsubsection occt_draw_4_2_5 vsetbg
1363
1364 Syntax:                  
1365 ~~~~~
1366 vsetbg imagefile [filltype] 
1367 ~~~~~
1368
1369 Loads image file as background. *filltype* must be NONE, CENTERED, TILED or STRETCH. 
1370
1371 **Example:** 
1372 ~~~~~
1373 vinit 
1374 vsetbg myimage.brep CENTERED 
1375 ~~~~~
1376
1377 @subsubsection occt_draw_4_2_6 vclear
1378
1379 Syntax:                  
1380 ~~~~~
1381 vclear 
1382 ~~~~~
1383 Removes all objects from the viewer. 
1384
1385 @subsubsection occt_draw_4_2_7 vrepaint
1386
1387 Syntax:                  
1388 ~~~~~
1389 vrepaint 
1390 ~~~~~
1391 Forcibly redisplays the shape in the 3D viewer window. 
1392
1393 @subsubsection occt_draw_4_2_8 vfit
1394
1395 Syntax:                  
1396 ~~~~~
1397 vfit 
1398 ~~~~~
1399 Automatic zoom/panning. Objects in the view are visualized to occupy the maximum surface. 
1400
1401 @subsubsection occt_draw_4_2_9 vzfit
1402
1403 Syntax:                  
1404 ~~~~~
1405 vzfit 
1406 ~~~~~
1407
1408 Automatic depth panning. Objects in the view are visualized to occupy the maximum 3d space. 
1409
1410 @subsubsection occt_draw_4_2_10  vreadpixel
1411
1412 Syntax:     
1413 ~~~~~
1414 vreadpixel xPixel yPixel [{rgb|rgba|depth|hls|rgbf|rgbaf}=rgba] [name] 
1415 ~~~~~
1416 Read pixel value for active view.
1417
1418
1419 @subsubsection occt_draw_4_2_11  vselect
1420
1421 Syntax:     
1422 ~~~~~
1423 vselect x1 y1 [x2 y2 [x3 y3 ... xn yn]] [-allowoverlap 0|1] [shift_selection = 0|1]
1424 ~~~~~
1425
1426 Emulates different types of selection:
1427
1428   * single mouse click selection
1429   * selection with a rectangle having the upper left and bottom right corners in <i>(x1,y1)</i> and <i>(x2,y2)</i> respectively
1430   * selection with a polygon having the corners in pixel positions <i>(x1,y1), (x2,y2),…, (xn,yn)</i>
1431   * <i> -allowoverlap </i> manages overlap and inclusion detection in rectangular selection. If the flag is set to 1, both sensitives that were included completely and overlapped partially by defined rectangle will be detected, otherwise algorithm will chose only fully included sensitives. Default behavior is to detect only full inclusion.
1432   * any of these selections if shift_selection is set to 1.
1433
1434 @subsubsection occt_draw_4_2_12  vmoveto
1435
1436 Syntax:     
1437
1438 ~~~~~
1439 vmoveto x y
1440 ~~~~~
1441 Emulates cursor movement to pixel position (x,y).
1442
1443 @subsubsection occt_draw_4_2_13  vviewparams
1444
1445 Syntax:     
1446 ~~~~~
1447 vviewparams [-scale [s]] [-eye [x y z]] [-at [x y z]] [-up [x y z]] [-proj [x y z]] [-center x y] [-size sx]
1448 ~~~~~
1449 Gets or sets the current view parameters.
1450 * If called without arguments, all view parameters are printed.
1451 * The options are:
1452 *   -scale [s]    : prints or sets the relative scale of viewport.
1453 *   -eye [x y z]  : prints or sets the eye location.
1454 *   -at [x y z]   : prints or sets the view center.
1455 *   -up [x y z]   : prints or sets the up vector direction.
1456 *   -proj [x y z] : prints or sets the view direction.
1457 *   -center x y   : sets the screen center location in pixels.
1458 *   -size [sx]    : prints viewport projection width and height sizes or changes the size of its maximum dimension.
1459
1460 @subsubsection occt_draw_4_2_14  vchangeselected
1461
1462 Syntax:     
1463 ~~~~~
1464 vchangeselected shape
1465 ~~~~~
1466 Adds a shape to selection or removes one from it.
1467
1468 @subsubsection occt_draw_4_2_15  vzclipping
1469
1470 Syntax:     
1471 ~~~~~
1472 vzclipping [mode] [depth width]
1473 ~~~~~
1474 Gets or sets ZClipping mode, width and depth, where
1475  - *mode = OFF|BACK|FRONT|SLICE*
1476  - *depth* is a real value from segment [0,1]
1477  - *width* is a real value from segment [0,1]
1478
1479 @subsubsection occt_draw_4_2_16  vnbselected
1480
1481 Syntax:     
1482 ~~~~~
1483 vnbselected
1484 ~~~~~
1485 Returns the number of selected objects in the interactive context.
1486
1487 @subsubsection occt_draw_4_2_18  vpurgedisplay
1488
1489 Syntax:     
1490 ~~~~~
1491 vpurgedisplay [CollectorToo = 0|1]
1492 ~~~~~
1493 Removes structures which do not belong to objects displayed in neutral point.
1494
1495 @subsubsection occt_draw_4_2_19  vhlr
1496
1497 Syntax:     
1498 ~~~~~
1499 vhlr is_enabled={on|off} [show_hidden={1|0}]
1500 ~~~~~
1501 Hidden line removal algorithm:
1502  * <i>is_enabled</i> applies HLR algorithm.
1503  * <i>show_hidden</i> if equals to 1, hidden lines are drawn as dotted ones.
1504
1505 @subsubsection occt_draw_4_2_20  vhlrtype
1506
1507 Syntax:     
1508 ~~~~~
1509 vhlrtype  algo_type={algo|polyalgo} [shape_1 ... shape_n]
1510 ~~~~~
1511
1512 Changes the type of HLR algorithm used for shapes.
1513 If the algo_type is algo, the exact HLR algorithm is used, otherwise the polygonal algorithm is used for defined shapes. 
1514
1515 If no shape is specified through the command arguments, the given HLR algorithm_type is applied to all *AIS_Shape* instances in the current context, and the command also changes the default HLR algorithm type.
1516
1517 **Note** that this command works with instances of *AIS_Shape* or derived classes only, other interactive object types are ignored.
1518
1519 @subsubsection occt_draw_4_2_21 vcamera
1520
1521 Syntax:
1522 ~~~~~
1523 vcamera [-ortho] [-projtype]
1524         [-persp]
1525         [-fovy   [Angle]] [-distance [Distance]]
1526         [-stereo] [-leftEye] [-rightEye]
1527         [-iod [Distance]] [-iodType    [absolute|relative]]
1528         [-zfocus [Value]] [-zfocusType [absolute|relative]]
1529 ~~~~~
1530
1531 Manages camera parameters.
1532 Prints the current value when the option is called without argument.
1533
1534 Orthographic camera:
1535  * -ortho -- activates orthographic projection.
1536  
1537 Perspective camera:
1538  * -persp -- activated perspective  projection (mono);
1539  * -fovy  -- field of view in y axis, in degrees;
1540  * -distance -- distance of eye from the camera center.
1541  
1542 Stereoscopic camera:
1543  * -stereo -- perspective  projection (stereo);
1544  * -leftEye -- perspective  projection (left  eye);
1545  * -rightEye -- perspective  projection (right eye);
1546  * -iod -- intraocular distance value;
1547  * -iodType -- distance type, absolute or relative;
1548  * -zfocus -- stereographic focus value;
1549  * -zfocusType -- focus type, absolute or relative.
1550
1551 **Example:**
1552 ~~~~~
1553 vinit
1554 box b 10 10 10
1555 vdisplay b
1556 vfit
1557 vcamera -persp
1558 ~~~~~
1559
1560 @subsubsection occt_draw_4_2_22 vstereo
1561
1562 Syntax:
1563 ~~~~~
1564 vstereo [0|1] [-mode Mode] [-reverse {0|1}] [-anaglyph Filter]
1565 ~~~~~
1566
1567 Defines the stereo output mode. The following modes are available:
1568  * quadBuffer -- OpenGL QuadBuffer stereo, requires driver support. Should be called BEFORE *vinit*!
1569  * anaglyph         -- Anaglyph glasses;
1570  * rowInterlaced    -- row-interlaced display;
1571  * columnInterlaced -- column-interlaced display;
1572  * chessBoard       -- chess-board output;
1573  * sideBySide       -- horizontal pair;
1574  * overUnder        -- vertical pair;
1575 Available Anaglyph filters for -anaglyph:
1576  * redCyan, redCyanSimple, yellowBlue, yellowBlueSimple, greenMagentaSimple.
1577
1578 **Example:**
1579 ~~~~~
1580 vinit
1581 box b 10 10 10
1582 vdisplay b
1583 vstereo 1
1584 vfit
1585 vcamera -stereo -iod 1
1586 vcamera -lefteye
1587 vcamera -righteye
1588 ~~~~~
1589
1590 @subsubsection occt_draw_4_2_23 vfrustumculling
1591
1592 Syntax:
1593 ~~~~~
1594 vfrustumculling [toEnable]
1595 ~~~~~
1596
1597 Enables/disables objects clipping.
1598
1599
1600 @subsection occt_draw_4_3 AIS viewer -- display commands
1601
1602 @subsubsection occt_draw_4_3_1 vdisplay
1603
1604 Syntax: 
1605 ~~~~~                 
1606 vdisplay [-noupdate|-update] [-local] [-mutable] [-neutral]
1607          [-trsfPers {pan|zoom|rotate|trihedron|full|none}=none] [-trsfPersPos X Y [Z]] [-3d|-2d|-2dTopDown]
1608          [-dispMode mode] [-highMode mode]
1609          [-layer index] [-top|-topmost|-overlay|-underlay]
1610          [-redisplay]
1611          name1 [name2] ... [name n]
1612 ~~~~~
1613
1614 Displays named objects.
1615 Option <i>-local</i> enables display of objects in the local selection context.
1616 Local selection context will be opened if there is not any.
1617
1618 * *noupdate* suppresses viewer redraw call.
1619 * *mutable* enables optimization for mutable objects.
1620 * *neutral* draws objects in the main viewer.
1621 * *layer* sets z-layer for objects. It can use <i>-overlay|-underlay|-top|-topmost</i> instead of <i>-layer index</i> for the default z-layers.
1622 * *top* draws objects on top of main presentations but below the topmost level.
1623 * *topmost* draws in overlay for 3D presentations with independent Depth.
1624 * *overlay* draws objects in overlay for 2D presentations (On-Screen-Display).
1625 * *underlay* draws objects in underlay for 2D presentations (On-Screen-Display).
1626 * *selectable|-noselect* controls selection of objects.
1627 * *trsfPers* sets transform persistence flags. Flag *full* allows to pan, zoom and rotate.
1628 * *trsfPersPos* sets an anchor point for transform persistence.
1629 * *2d|-2dTopDown* displays object in screen coordinates.
1630 * *dispmode* sets display mode for objects.
1631 * *highmode* sets highlight mode for objects.
1632 * *redisplay* recomputes presentation of objects.
1633
1634 **Example:** 
1635 ~~~~~ 
1636 vinit 
1637 box b 40 40 40 10 10 10 
1638 psphere s 20 
1639 vdisplay s b 
1640 vfit 
1641 ~~~~~ 
1642
1643 @subsubsection occt_draw_4_3_2 vdonly
1644
1645 Syntax:                  
1646 ~~~~~
1647 vdonly [-noupdate|-update] [name1] ...  [name n]
1648 ~~~~~ 
1649
1650 Displays only selected or named objects. If there are no selected or named objects, nothing is done. 
1651
1652 **Example:** 
1653 ~~~~~ 
1654 vinit 
1655 box b 40 40 40 10 10 10 
1656 psphere s 20 
1657 vdonly b 
1658 vfit
1659 ~~~~~ 
1660  
1661 @subsubsection occt_draw_4_3_3 vdisplayall
1662
1663 Syntax:                  
1664 ~~~~~ 
1665 vdisplayall [-local]
1666 ~~~~~ 
1667
1668 Displays all erased interactive objects (see vdir and vstate).
1669 Option <i>-local</i> enables displaying objects in the local selection context.
1670
1671 **Example:** 
1672 ~~~~~ 
1673 vinit 
1674 box b 40 40 40 10 10 10 
1675 psphere s 20 
1676 vdisplayall 
1677 vfit 
1678 ~~~~~ 
1679
1680 @subsubsection occt_draw_4_3_4 verase
1681
1682 Syntax:                  
1683 ~~~~~
1684 verase [name1] [name2] … [name n]
1685 ~~~~~ 
1686
1687 Erases some selected or named objects. If there are no selected or named objects, the whole viewer is erased. 
1688
1689 **Example:** 
1690 ~~~~~
1691 vinit 
1692 box b1 40 40 40 10 10 10 
1693 box b2 -40 -40 -40 10 10 10 
1694 psphere s 20 
1695 vdisplayall 
1696 vfit 
1697 # erase only first box 
1698 verase b1 
1699 # erase second box and sphere 
1700 verase
1701 ~~~~~ 
1702
1703 @subsubsection occt_draw_4_3_5 veraseall
1704
1705 Syntax:                  
1706 ~~~~~
1707 veraseall
1708 ~~~~~ 
1709
1710 Erases all objects displayed in the viewer. 
1711
1712 **Example:**
1713 ~~~~~ 
1714 vinit 
1715 box b1 40 40 40 10 10 10 
1716 box b2 -40 -40 -40 10 10 10 
1717 psphere s 20 
1718 vdisplayall 
1719 vfit 
1720 # erase only first box 
1721 verase b1 
1722 # erase second box and sphere 
1723 verseall
1724 ~~~~~ 
1725
1726 @subsubsection occt_draw_4_3_6 vsetdispmode
1727
1728 Syntax:                  
1729 ~~~~~
1730 vsetdispmode [name] mode(0,1,2,3)
1731 ~~~~~ 
1732
1733 Sets display mode for all, selected or named objects. 
1734 * *0* (*WireFrame*), 
1735 * *1* (*Shading*), 
1736 * *2* (*Quick HideLineremoval*), 
1737 * *3* (*Exact HideLineremoval*). 
1738
1739 **Example:** 
1740 ~~~~~
1741 vinit 
1742 box b 10 10 10 
1743 vdisplay b 
1744 vsetdispmode 1 
1745 vfit
1746 ~~~~~
1747  
1748 @subsubsection occt_draw_4_3_7 vdisplaytype
1749
1750 Syntax:                  
1751 ~~~~~
1752 vdisplaytype type
1753 ~~~~~ 
1754
1755 Displays all objects of a given type. 
1756 The following types are possible: *Point*, *Axis*, *Trihedron*, *PlaneTrihedron*, *Line*, *Circle*, *Plane*, *Shape*, *ConnectedShape*, *MultiConn.Shape*, *ConnectedInter.*, *MultiConn.*, *Constraint* and *Dimension*. 
1757
1758 @subsubsection occt_draw_4_3_8 verasetype
1759
1760 Syntax:                  
1761 ~~~~~
1762 verasetype type
1763 ~~~~~ 
1764
1765 Erases all objects of a given type. 
1766 Possible type is *Point*, *Axis*, *Trihedron*, *PlaneTrihedron*, *Line*, *Circle*, *Plane*, *Shape*, *ConnectedShape*, *MultiConn.Shape*, *ConnectedInter.*, *MultiConn.*, *Constraint* and *Dimension*. 
1767
1768 @subsubsection occt_draw_4_3_9 vtypes
1769
1770 Syntax:                  
1771 ~~~~~
1772 vtypes
1773 ~~~~~ 
1774
1775 Makes a list of known types and signatures in AIS. 
1776
1777 @subsubsection occt_draw_4_3_10 vaspects
1778
1779 Syntax:
1780 ~~~~~
1781 vaspects [-noupdate|-update] [name1 [name2 [...]] | -defaults]
1782          [-setVisibility 0|1]
1783          [-setColor ColorName] [-setcolor R G B] [-unsetColor]
1784          [-setMaterial MatName] [-unsetMaterial]
1785          [-setTransparency Transp] [-unsetTransparency]
1786          [-setWidth LineWidth] [-unsetWidth]
1787          [-setLineType {solid|dash|dot|dotDash}] [-unsetLineType]
1788          [-freeBoundary {off/on | 0/1}]
1789          [-setFreeBoundaryWidth Width] [-unsetFreeBoundaryWidth]
1790          [-setFreeBoundaryColor {ColorName | R G B}] [-unsetFreeBoundaryColor]
1791          [-subshapes subname1 [subname2 [...]]]
1792          [-isoontriangulation 0|1]
1793          [-setMaxParamValue {value}]
1794
1795 ~~~~~
1796
1797 Manages presentation properties of all, selected or named objects.
1798 * *-subshapes* -- assigns presentation properties to the specified sub-shapes.
1799 * *-defaults* -- assigns presentation properties to all objects that do not have their own specified properties and to all objects to be displayed in the future.
1800 If *-defaults* option is used there should not be any names of objects and *-subshapes* specifier.
1801
1802 Aliases:
1803 ~~~~~
1804 vsetcolor [-noupdate|-update] [name] ColorName
1805
1806 ~~~~~
1807
1808
1809 Manages presentation properties (color, material, transparency) of all objects, selected or named.
1810
1811 **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*.
1812 ~~~~~
1813 vaspects    [name] [-setcolor ColorName] [-setcolor R G B] [-unsetcolor]
1814 vsetcolor   [name] ColorName
1815 vunsetcolor [name]
1816 ~~~~~
1817
1818 **Transparency. The *Transp* may be between 0.0 (opaque) and 1.0 (fully transparent).
1819 **Warning**: at 1.0 the shape becomes invisible.
1820 ~~~~~
1821 vaspects           [name] [-settransparency Transp] [-unsettransparency]
1822 vsettransparency   [name] Transp
1823 vunsettransparency [name]
1824 ~~~~~
1825
1826 **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*.
1827 ~~~~~
1828 vaspects       [name] [-setmaterial MatName] [-unsetmaterial]
1829 vsetmaterial   [name] MatName
1830 vunsetmaterial [name]
1831 ~~~~~
1832
1833 **Line width**. Specifies width of the edges. The *LineWidth* may be between 0.0 and 10.0.
1834 ~~~~~
1835 vaspects    [name] [-setwidth LineWidth] [-unsetwidth]
1836 vsetwidth   [name] LineWidth
1837 vunsetwidth [name]
1838 ~~~~~
1839
1840 **Example:**
1841 ~~~~~
1842 vinit
1843 box b 10 10 10
1844 vdisplay b
1845 vfit
1846
1847 vsetdispmode b 1
1848 vaspects -setcolor red -settransparency 0.2
1849 vrotate 10 10 10
1850 ~~~~~
1851
1852
1853
1854
1855
1856
1857 @subsubsection occt_draw_4_3_11 vsetshading
1858
1859 Syntax:                  
1860 ~~~~~
1861 vsetshading shapename [coefficient]
1862 ~~~~~ 
1863
1864 Sets deflection coefficient that defines the quality of the shape’s representation in the shading mode. Default coefficient is 0.0008. 
1865
1866 **Example:** 
1867 ~~~~~
1868 vinit 
1869 psphere s 20 
1870 vdisplay s 
1871 vfit 
1872 vsetdispmode 1 
1873 vsetshading s 0.005
1874 ~~~~~
1875  
1876 @subsubsection occt_draw_4_3_12 vunsetshading
1877
1878 Syntax:                  
1879 ~~~~~
1880 vunsetshading [shapename]
1881 ~~~~~ 
1882
1883 Sets default deflection coefficient (0.0008) that defines the quality of the shape’s representation in the shading mode.
1884
1885 @subsubsection occt_draw_4_3_13 vsetam
1886
1887 Syntax:                  
1888 ~~~~~
1889 vsetam [shapename] mode
1890 ~~~~~ 
1891
1892 Activates selection mode for all selected or named shapes: 
1893 * *0* for *shape* itself, 
1894 * *1* (*vertices*), 
1895 * *2* (*edges*), 
1896 * *3* (*wires*), 
1897 * *4* (*faces*), 
1898 * *5* (*shells*),
1899 * *6* (*solids*),
1900 * *7* (*compounds*).
1901  
1902 **Example:** 
1903 ~~~~~
1904 vinit 
1905 box b 10 10 10 
1906 vdisplay b 
1907 vfit 
1908 vsetam b 2
1909 ~~~~~
1910  
1911 @subsubsection occt_draw_4_3_14 vunsetam
1912
1913 Syntax:                  
1914 ~~~~~
1915 vunsetam
1916 ~~~~~ 
1917
1918 Deactivates all selection modes for all shapes. 
1919
1920 @subsubsection occt_draw_4_3_15 vdump
1921
1922 Syntax:                  
1923 ~~~~~
1924 vdump <filename>.{png|bmp|jpg|gif} [-width Width -height Height]
1925       [-buffer rgb|rgba|depth=rgb]
1926       [-stereo mono|left|right|blend|sideBySide|overUnder=mono]
1927
1928 ~~~~~ 
1929
1930 Extracts the contents of the viewer window to a image file.
1931
1932 @subsubsection occt_draw_4_3_16 vdir
1933
1934 Syntax:                  
1935 ~~~~~
1936 vdir
1937 ~~~~~ 
1938
1939 Displays the list of displayed objects. 
1940
1941 @subsubsection occt_draw_4_3_17 vsub
1942
1943 Syntax:                  
1944 ~~~~~
1945 vsub 0/1(on/off)[shapename]
1946 ~~~~~ 
1947
1948 Hilights/unhilights named or selected objects which are displayed at neutral state with subintensity color.
1949  
1950 **Example:** 
1951 ~~~~~
1952 vinit 
1953 box b 10 10 10 
1954 psphere s 20 
1955 vdisplay b s 
1956 vfit 
1957 vsetdispmode 1 
1958 vsub b 1
1959 ~~~~~ 
1960
1961 @subsubsection occt_draw_4_3_20 vsensdis
1962
1963 Syntax:                  
1964 ~~~~~
1965 vsensdis
1966 ~~~~~ 
1967
1968 Displays active entities (sensitive entities of one of the standard types corresponding to active selection modes). 
1969
1970 Standard entity types are those defined in Select3D package: 
1971   * sensitive box
1972   * sensitive face
1973   * sensitive curve
1974   * sensitive segment
1975   * sensitive circle
1976   * sensitive point
1977   * sensitive triangulation
1978   * sensitive triangle
1979 Custom (application-defined) sensitive entity types are not processed by this command. 
1980
1981 @subsubsection occt_draw_4_3_21 vsensera
1982
1983 Syntax:                  
1984 ~~~~~
1985 vsensera
1986 ~~~~~ 
1987
1988 Erases active entities. 
1989
1990 @subsubsection occt_draw_4_3_23 vr
1991
1992 Syntax:                  
1993 ~~~~~
1994 vr filename
1995 ~~~~~ 
1996
1997 Reads shape from BREP-format file and displays it in the viewer. 
1998
1999 **Example:** 
2000 ~~~~~
2001 vinit 
2002 vr myshape.brep
2003 ~~~~~
2004  
2005 @subsubsection occt_draw_4_3_24 vstate
2006
2007 Syntax:                  
2008 ~~~~~
2009 vstate [-entities] [-hasSelected] [name1] ... [nameN]
2010 ~~~~~ 
2011
2012 Reports show/hidden state for selected or named objects:
2013  * *entities* -- prints low-level information about detected entities;
2014  * *hasSelected* -- prints 1 if the context has a selected shape and 0 otherwise.
2015
2016 @subsubsection occt_draw_4_3_25 vraytrace
2017
2018 Syntax:
2019 ~~~~~
2020 vraytrace [0/1]
2021 ~~~~~
2022
2023 Turns on/off ray tracing renderer.
2024
2025 @subsubsection occt_draw_4_3_26 vrenderparams
2026
2027 Syntax:
2028 ~~~~~
2029 vrenderparams [-rayTrace|-raster] [-rayDepth 0..10] [-shadows {on|off}]
2030               [-reflections {on|off}] [-fsaa {on|off}] [-gleam {on|off}]
2031               [-gi {on|off}] [-brng {on|off}] [-env {on|off}]
2032               [-shadin {color|flat|gouraud|phong}]
2033 ~~~~~
2034
2035 Manages rendering parameters:
2036 * rayTrace     -- Enables  GPU ray-tracing
2037 * raster       -- Disables GPU ray-tracing
2038 * rayDepth     -- Defines maximum ray-tracing depth
2039 * shadows      -- Enables/disables shadows rendering
2040 * reflections  -- Enables/disables specular reflections
2041 * fsaa         -- Enables/disables adaptive anti-aliasing
2042 * gleam        -- Enables/disables transparency shadow effects
2043 * gi           -- Enables/disables global illumination effects
2044 * brng         -- Enables/disables blocked RNG (fast coherent PT)
2045 * env          -- Enables/disables environment map background
2046 * shadingModel -- Controls shading model from enumeration color, flat, gouraud, phong
2047
2048 Unlike *vcaps*, these parameters dramatically change visual properties.
2049 The command is intended to control presentation quality depending on hardware capabilities and performance.
2050
2051 **Example:**
2052 ~~~~~
2053 vinit
2054 box b 10 10 10
2055 vdisplay b
2056 vfit
2057 vraytrace 1
2058 vrenderparams -shadows 1 -reflections 1 -fsaa 1
2059 ~~~~~
2060 @subsubsection occt_draw_4_3_27 vshaderprog
2061
2062 Syntax:
2063 ~~~~~
2064    'vshaderprog [name] pathToVertexShader pathToFragmentShader'
2065 or 'vshaderprog [name] off'   to disable GLSL program
2066 or 'vshaderprog [name] phong' to enable per-pixel lighting calculations
2067 ~~~~~
2068
2069 Enables rendering using a shader program.
2070
2071 @subsubsection occt_draw_4_3_28 vsetcolorbg
2072
2073 Syntax:
2074 ~~~~~
2075 vsetcolorbg r g b
2076 ~~~~~
2077
2078 Sets background color.
2079
2080 **Example:**
2081 ~~~~~
2082 vinit
2083 vsetcolorbg 200 0 200
2084 ~~~~~
2085
2086 @subsection occt_draw_4_4 AIS viewer -- object commands
2087
2088 @subsubsection occt_draw_4_4_1 vtrihedron
2089
2090 Syntax:                  
2091 ~~~~~
2092 vtrihedron name [-dispMode {wf|sh|wireframe|shading}]
2093                 [-origin x y z ]
2094                 [-zaxis u v w -xaxis u v w ]
2095                 [-drawaxes {X|Y|Z|XY|YZ|XZ|XYZ}]
2096                 [-hidelabels {on|off}]"
2097                 [-label {XAxis|YAxis|ZAxis} value]"
2098                 [-attribute {XAxisLength|YAxisLength|ZAxisLength
2099                                         |TubeRadiusPercent|ConeRadiusPercent"
2100                                         |ConeLengthPercent|OriginRadiusPercent"
2101                                         |ShadingNumberOfFacettes} value]"
2102                 [-color {Origin|XAxis|YAxis|ZAxis|XOYAxis|YOZAxis"
2103                                         |XOZAxis|Whole} {r g b | colorName}]"
2104                 [-textcolor {r g b | colorName}]"
2105                 [-arrowscolor {r g b | colorName}]"
2106                 [-priority {Origin|XAxis|YAxis|ZAxis|XArrow"
2107                                         |YArrow|ZArrow|XOYAxis|YOZAxis"
2108                                         |XOZAxis|Whole} value]
2109
2110 ~~~~~ 
2111
2112 Creates a new *AIS_Trihedron* object or changes existing trihedron. If no argument is set, the default trihedron (0XYZ) is created.
2113
2114 **Example:** 
2115 ~~~~~
2116 vinit 
2117 vtrihedron tr1
2118
2119 vtrihedron t2 -dispmode shading -origin -200 -200 -300
2120 vtrihedron t2 -color XAxis Quantity_NOC_RED
2121 vtrihedron t2 -color YAxis Quantity_NOC_GREEN
2122 vtrihedron t2 -color ZAxis|Origin Quantity_NOC_BLUE1
2123 ~~~~~ 
2124
2125 @subsubsection occt_draw_4_4_2 vplanetri
2126
2127 Syntax:                  
2128 ~~~~~
2129 vplanetri name
2130 ~~~~~ 
2131
2132 Creates a plane from a trihedron selection. If no arguments are set, the default plane is created. 
2133
2134
2135 @subsubsection occt_draw_4_4_3 vsize
2136
2137 Syntax:                  
2138 ~~~~~
2139 vsize [name] [size]
2140 ~~~~~ 
2141
2142 Changes the size of a named or selected trihedron. If the name is not defined: it affects the selected trihedrons otherwise nothing is done. If the value is not defined, it is set to 100 by default.
2143  
2144 **Example:** 
2145 ~~~~~
2146 vinit 
2147 vtrihedron tr1 
2148 vtrihedron tr2 0 0 0 1 0 0 1 0 0 
2149 vsize tr2 400
2150 ~~~~~ 
2151
2152 @subsubsection occt_draw_4_4_4 vaxis
2153
2154 Syntax:                  
2155 ~~~~~
2156 vaxis name [Xa Ya Za Xb Yb Zb]
2157 ~~~~~ 
2158
2159 Creates an axis. If  the values are not defined, an axis is created by interactive selection of two vertices or one edge
2160  
2161 **Example:** 
2162 ~~~~~
2163 vinit 
2164 vtrihedron tr 
2165 vaxis axe1 0 0 0 1 0 0 
2166 ~~~~~
2167
2168 @subsubsection occt_draw_4_4_5 vaxispara
2169
2170 Syntax:                  
2171 ~~~~~
2172 vaxispara name
2173 ~~~~~ 
2174
2175 Creates an axis by interactive selection of an edge and a vertex. 
2176
2177 @subsubsection occt_draw_4_4_6 vaxisortho
2178
2179 Syntax:                  
2180 ~~~~~
2181 vaxisotrho name
2182 ~~~~~ 
2183
2184 Creates an axis by interactive selection of an edge and a vertex. The axis will be orthogonal to the selected edge. 
2185
2186 @subsubsection occt_draw_4_4_7 vpoint
2187
2188 Syntax:                  
2189 ~~~~~
2190 vpoint name [Xa Ya Za]
2191 ~~~~~ 
2192
2193 Creates a point from coordinates. If the values are not defined, a point is created by interactive selection of a vertice or an edge (in the center of the edge). 
2194
2195 **Example:** 
2196 ~~~~~
2197 vinit 
2198 vpoint p 0 0 0 
2199 ~~~~~
2200
2201 @subsubsection occt_draw_4_4_8 vplane
2202
2203 Syntax:                  
2204 ~~~~~
2205 vplane name [AxisName] [PointName] 
2206 vplane name [PointName] [PointName] [PointName] 
2207 vplane name [PlaneName] [PointName]
2208 ~~~~~ 
2209
2210 Creates a plane from named or interactively selected entities.
2211 TypeOfSensitivity:
2212  * 0 -- Interior
2213  * 1 -- Boundary
2214
2215 **Example:** 
2216 ~~~~~
2217 vinit 
2218 vpoint p1 0 50 0 
2219 vaxis axe1 0 0 0 0 0 1 
2220 vtrihedron tr 
2221 vplane plane1 axe1 p1 
2222 ~~~~~
2223
2224 @subsubsection occt_draw_4_4_9 vplanepara
2225
2226 Syntax:                  
2227 ~~~~~
2228 vplanepara name
2229 ~~~~~ 
2230
2231 Creates a plane from interactively selected vertex and face. 
2232
2233 @subsubsection occt_draw_4_4_10 vplaneortho
2234
2235 Syntax:                  
2236 ~~~~~
2237 vplaneortho name
2238 ~~~~~ 
2239
2240 Creates a plane from interactive selected face and coplanar edge. 
2241
2242 @subsubsection occt_draw_4_4_11 vline
2243
2244 Syntax:                  
2245 ~~~~~
2246 vline name [PointName] [PointName] 
2247 vline name [Xa Ya Za Xb Yb Zb]
2248 ~~~~~ 
2249
2250 Creates a line from coordinates, named or interactively selected vertices. 
2251
2252 **Example:** 
2253 ~~~~~
2254 vinit 
2255 vtrihedron tr 
2256 vpoint p1 0 50 0 
2257 vpoint p2 50 0 0 
2258 vline line1 p1 p2 
2259 vline line2 0 0 0 50 0 1 
2260 ~~~~~
2261
2262 @subsubsection occt_draw_4_4_12 vcircle
2263
2264 Syntax:      
2265 ~~~~~
2266 vcircle name [PointName PointName PointName IsFilled] 
2267 vcircle name [PlaneName PointName Radius IsFilled] 
2268 ~~~~~
2269
2270 Creates a circle from named or interactively selected entities.  Parameter IsFilled is defined as 0 or 1.
2271  
2272 **Example:** 
2273 ~~~~~
2274 vinit 
2275 vtrihedron tr 
2276 vpoint p1 0 50 0 
2277 vpoint p2 50 0 0 
2278 vpoint p3 0 0 0 
2279 vcircle circle1 p1 p2 p3 1
2280 ~~~~~ 
2281
2282 @subsubsection occt_draw_4_4_13 vtri2d
2283
2284 Syntax:                  
2285 ~~~~~
2286 vtri2d name
2287 ~~~~~ 
2288
2289 Creates a plane with a 2D trihedron from an interactively selected face. 
2290
2291 @subsubsection occt_draw_4_4_14 vselmode
2292
2293 Syntax:                  
2294 ~~~~~
2295 vselmode [object] mode_number is_turned_on=(1|0)
2296 ~~~~~ 
2297
2298 Sets the selection mode for an object. If the object value is not defined, the selection mode is set for all displayed objects. 
2299 *Mode_number* is a non-negative integer encoding different interactive object classes.
2300 For shapes the following *mode_number* values are allowed:
2301  * 0 -- shape
2302  * 1 -- vertex
2303  * 2 -- edge
2304  * 3 -- wire
2305  * 4 -- face
2306  * 5 -- shell
2307  * 6 -- solid
2308  * 7 -- compsolid
2309  * 8 -- compound
2310 *is_turned_on* is:
2311  * 1 if mode is to be switched on
2312  * 0 if mode is to be switched off
2313
2314 **Example:** 
2315 ~~~~~
2316 vinit 
2317 vpoint p1 0 0 0 
2318 vpoint p2 50 0 0 
2319 vpoint p3 25 40 0 
2320 vtriangle triangle1 p1 p2 p3 
2321 ~~~~~
2322
2323 @subsubsection occt_draw_4_4_15 vconnect
2324
2325 Syntax:                  
2326 ~~~~~
2327 vconnect vconnect name Xo Yo Zo object1 object2 ... [color=NAME]
2328 ~~~~~ 
2329
2330 Creates *AIS_ConnectedInteractive* object from the input object and location and displays it.
2331
2332 **Example:** 
2333 ~~~~~
2334 vinit 
2335 vpoint p1 0 0 0 
2336 vpoint p2 50 0 0 
2337 vsegment segment p1 p2 
2338 restore CrankArm.brep obj 
2339 vdisplay obj 
2340 vconnect new obj 100100100 1 0 0 0 0 1
2341 ~~~~~ 
2342
2343 @subsubsection occt_draw_4_4_16 vtriangle
2344
2345 Syntax:                  
2346 ~~~~~
2347 vtriangle name PointName PointName PointName
2348 ~~~~~ 
2349
2350 Creates and displays a filled triangle from named points. 
2351
2352 **Example:** 
2353 ~~~~~
2354 vinit 
2355 vpoint p1 0 0 0 
2356 vpoint p2 50 0 0 
2357 vpoint p3 25 40 0 
2358 vtriangle triangle1 p1 p2 p3
2359 ~~~~~ 
2360
2361 @subsubsection occt_draw_4_4_17 vsegment
2362
2363 Syntax:                  
2364 ~~~~~
2365 vsegment name PointName PointName 
2366 ~~~~~
2367
2368 Creates and displays a segment from named points. 
2369
2370 **Example:** 
2371 ~~~~~
2372 Vinit 
2373 vpoint p1 0 0 0 
2374 vpoint p2 50 0 0 
2375 vsegment segment p1 p2 
2376 ~~~~~
2377
2378 @subsubsection occt_draw_4_4_18 vpointcloud
2379
2380 Syntax:
2381 ~~~~~
2382 vpointcloud name shape [-randColor] [-normals] [-noNormals]
2383 ~~~~~
2384
2385 Creates an interactive object for an arbitrary set of points from the triangulated shape.
2386 Additional options:
2387  * *randColor* -- generates a random color per point;
2388  * *normals*   -- generates a normal per point (default);
2389  * *noNormals* -- does not generate a normal per point.
2390
2391 ~~~~~
2392 vpointcloud name x y z r npts {surface|volume} [-randColor] [-normals] [-noNormals]
2393 ~~~~~
2394 Creates an arbitrary set of points (npts) randomly distributed on a spheric surface or within a spheric volume (x y z r).
2395 Additional options:
2396  * *randColor* -- generates a random color per point;
2397  * *normals*   -- generates a normal per point (default);
2398  * *noNormals* -- does not generate a normal per point.
2399
2400 **Example:**
2401 ~~~~~
2402 vinit
2403 vpointcloud pc 0 0 0 100 100000 surface -randColor
2404 vfit
2405 ~~~~~
2406
2407 @subsubsection occt_draw_4_4_19 vclipplane
2408
2409 Syntax:
2410 ~~~~~
2411 vclipplane maxplanes <view_name> -- gets plane limit for the view.
2412 vclipplane create <plane_name> -- creates a new plane.
2413 vclipplane delete <plane_name> -- deletes a plane.
2414 vclipplane clone <source_plane> <plane_name> -- clones the plane definition.
2415 vclipplane set/unset <plane_name> object <object list> -- sets/unsets the plane for an IO.
2416 vclipplane set/unset <plane_name> view <view list> -- sets/unsets plane for a view.
2417 vclipplane change <plane_name> on/off -- turns clipping on/off.
2418 vclipplane change <plane_name> equation <a> <b> <c> <d> -- changes plane equation.
2419 vclipplane change <plane_name> capping on/off -- turns capping on/off.
2420 vclipplane change <plane_name> capping color <r> <g> <b> -- sets color.
2421 vclipplane change <plane name> capping texname <texture> -- sets texture.
2422 vclipplane change <plane_name> capping texscale <sx> <sy> -- sets texture scale.
2423 vclipplane change <plane_name> capping texorigin <tx> <ty> -- sets texture origin.
2424 vclipplane change <plane_name> capping texrotate <angle> -- sets texture rotation.
2425 vclipplane change <plane_name> capping hatch on/off/<id> -- sets hatching mask.
2426 ~~~~~
2427
2428 Manages clipping planes
2429
2430 **Example:**
2431 ~~~~~
2432 vinit
2433 vclipplane create pln1
2434 vclipplane change pln1 equation 1 0 0 -0.1
2435 vclipplane set pln1 view Driver1/Viewer1/View1
2436 box b 100 100 100
2437 vdisplay b
2438 vsetdispmode 1
2439 vfit
2440 vrotate 10 10 10
2441 vselect 100 100
2442 ~~~~~
2443
2444 @subsubsection occt_draw_4_4_20 vdimension
2445
2446 Syntax:
2447 ~~~~~
2448 vdimension name {-angle|-length|-radius|-diameter} -shapes shape1 [shape2 [shape3]]
2449                 [-text 3d|2d wf|sh|wireframe|shading IntegerSize]
2450                 [-label left|right|hcenter|hfit top|bottom|vcenter|vfit]
2451                 [-arrow external|internal|fit] [{-arrowlength|-arlen} RealArrowLength]
2452                 [{-arrowangle|-arangle} ArrowAngle(degrees)] [-plane xoy|yoz|zox]
2453                 [-flyout FloatValue -extension FloatValue]
2454                                 [-autovalue] [-value CustomRealValue] [-textvalue CustomTextValue]
2455                 [-dispunits DisplayUnitsString]
2456                 [-modelunits ModelUnitsString] [-showunits | -hideunits]
2457 ~~~~~
2458
2459 Builds angle, length, radius or diameter dimension interactive object **name**.
2460
2461 **Attention:** length dimension can't be built without working plane.
2462
2463 **Example:** 
2464 ~~~~~
2465 vinit
2466 vpoint p1 0 0 0
2467 vpoint p2 50 50 0
2468 vdimension dim1 -length -plane xoy -shapes p1 p2
2469
2470 vpoint p3 100 0 0
2471 vdimension dim2 -angle -shapes p1 p2 p3
2472
2473 vcircle circle p1 p2 p3 0
2474 vdimension dim3 -radius -shapes circle
2475 vfit
2476 ~~~~~
2477
2478 @subsubsection occt_draw_4_4_21 vdimparam
2479
2480 Syntax:
2481 ~~~~~
2482 vdimparam name [-text 3d|2d wf|sh|wireframe|shading IntegerSize]
2483                [-label left|right|hcenter|hfit top|bottom|vcenter|vfit]
2484                [-arrow external|internal|fit]
2485                [{-arrowlength|-arlen} RealArrowLength]
2486                [{-arrowangle|-arangle} ArrowAngle(degrees)]
2487                [-plane xoy|yoz|zox]
2488                [-flyout FloatValue -extension FloatValue]
2489                [-autovalue]
2490                [-value CustomRealValue]
2491                [-textvalue CustomTextValue]
2492                [-dispunits DisplayUnitsString]
2493                [-modelunits ModelUnitsString]
2494                [-showunits | -hideunits]
2495 ~~~~~
2496
2497 Sets parameters for angle, length, radius and diameter dimension **name**.
2498
2499 **Example:** 
2500 ~~~~~
2501 vinit
2502 vpoint p1 0 0 0
2503 vpoint p2 50 50 0
2504 vdimension dim1 -length -plane xoy -shapes p1 p2
2505 vdimparam dim1 -flyout -15 -arrowlength 4 -showunits -value 10
2506 vfit
2507 vdimparam dim1 -textvalue "w_1"
2508 vdimparam dim1 -autovalue
2509 ~~~~~
2510
2511 @subsubsection occt_draw_4_4_22 vangleparam
2512
2513 Syntax:
2514 ~~~~~
2515 vangleparam name [-type interior|exterior]
2516                  [-showarrow first|second|both|none]
2517 ~~~~~
2518
2519 Sets parameters for angle dimension **name**.
2520
2521 **Example:** 
2522 ~~~~~
2523 vinit
2524 vpoint p1 0 0 0
2525 vpoint p2 10 0 0
2526 vpoint p3 10 5 0
2527 vdimension dim1 -angle -plane xoy -shapes p1 p2 p3
2528 vfit
2529 vangleparam dim1 -type exterior -showarrow first
2530 ~~~~~
2531
2532 @subsubsection occt_draw_4_4_23 vlengthparam
2533
2534 Syntax:
2535 ~~~~~
2536 vlengthparam name [-type interior|exterior]
2537                   [-showarrow first|second|both|none]
2538 ~~~~~
2539
2540 Sets parameters for length dimension **name**.
2541
2542 **Example:** 
2543 ~~~~~
2544 vinit
2545 vpoint p1 20 20 0
2546 vpoint p2 80 80 0
2547 vdimension dim1 -length -plane xoy -shapes p1 p2
2548 vtop
2549 vfit
2550 vzoom 0.5
2551 vlengthparam dim1 -direction ox
2552 ~~~~~
2553
2554 @subsubsection occt_draw_4_4_24 vmovedim
2555
2556 Syntax:
2557 ~~~~~
2558 vmovedim [name] [x y z]
2559 ~~~~~
2560
2561 Moves picked or named (if **name** parameter is defined) dimension
2562 to picked mouse position or input point with coordinates **x**,**y**,**z**.
2563 Text label of dimension **name** is moved to position, another parts of dimension
2564 are adjusted.
2565
2566 **Example:** 
2567 ~~~~~
2568 vinit
2569 vpoint p1 0 0 0
2570 vpoint p2 50 50 0
2571 vdimension dim1 -length -plane xoy -shapes p1 p2
2572 vmovedim dim1 -10 30 0
2573 ~~~~~
2574
2575
2576 @subsection occt_draw_4_5 AIS viewer -- Mesh Visualization Service
2577
2578 **MeshVS** (Mesh Visualization Service) component provides flexible means of displaying meshes with associated pre- and post- processor data.
2579
2580 @subsubsection occt_draw_4_5_1 meshfromstl
2581
2582 Syntax:                  
2583 ~~~~~
2584 meshfromstl meshname file
2585 ~~~~~ 
2586
2587 Creates a *MeshVS_Mesh* object based on STL file data. The object will be displayed immediately.
2588  
2589 **Example:**
2590 ~~~~~ 
2591 meshfromstl mesh myfile.stl
2592 ~~~~~ 
2593
2594 @subsubsection occt_draw_4_5_2 meshdispmode
2595
2596 Syntax:                  
2597 ~~~~~
2598 meshdispmode meshname displaymode
2599 ~~~~~ 
2600
2601 Changes the display mode of object **meshname**. The **displaymode** is integer, which can be:
2602 * *1* for *wireframe*, 
2603 * *2* for *shading* mode, or
2604 * *3* for *shrink* mode. 
2605
2606 **Example:** 
2607 ~~~~~
2608 vinit 
2609 meshfromstl mesh myfile.stl 
2610 meshdispmode mesh 2
2611 ~~~~~ 
2612
2613 @subsubsection occt_draw_4_5_3 meshselmode
2614
2615 Syntax:                  
2616 ~~~~~
2617 meshselmode meshname selectionmode
2618 ~~~~~ 
2619
2620 Changes the selection mode of object **meshname**. The *selectionmode* is integer OR-combination of mode flags. The basic flags are the following: 
2621 * *1* -- node selection;
2622 * *2* -- 0D elements (not supported in STL); 
2623 * *4* -- links (not supported in STL); 
2624 * *8* -- faces.
2625  
2626 **Example:** 
2627 ~~~~~
2628 vinit 
2629 meshfromstl mesh myfile.stl 
2630 meshselmode mesh 1
2631 ~~~~~ 
2632
2633 @subsubsection occt_draw_4_5_4 meshshadcolor
2634
2635 Syntax:                  
2636 ~~~~~
2637 meshshadcolor meshname red green blue
2638 ~~~~~ 
2639
2640 Changes the face interior color of object **meshname**. The *red*, *green* and *blue* are real values between *0* and *1*.
2641  
2642 **Example:** 
2643 ~~~~~
2644 vinit 
2645 meshfromstl mesh myfile.stl 
2646 meshshadcolormode mesh 0.5 0.5 0.5
2647 ~~~~~ 
2648
2649 @subsubsection occt_draw_4_5_5 meshlinkcolor
2650
2651 Syntax:                  
2652 ~~~~~
2653 meshlinkcolor meshname red green blue
2654 ~~~~~ 
2655
2656 Changes the color of face borders for object **meshname**. The *red*, *green* and *blue* are real values between *0* and *1*.
2657  
2658 **Example:** 
2659 ~~~~~
2660 vinit 
2661 meshfromstl mesh myfile.stl 
2662 meshlinkcolormode mesh 0.5 0.5 0.5
2663 ~~~~~ 
2664
2665 @subsubsection occt_draw_4_5_6 meshmat
2666
2667 Syntax:                  
2668 ~~~~~
2669 meshmat meshname material
2670 ~~~~~ 
2671
2672 Changes the material of object **meshname**.
2673
2674 *material* is represented with an integer value as follows (equivalent to enumeration *Graphic3d_NameOfMaterial*): 
2675 * *0 -- BRASS,* 
2676 * *1 -- BRONZE,* 
2677 * *2 -- COPPER,* 
2678 * *3 -- GOLD,* 
2679 * *4 -- PEWTER,* 
2680 * *5 -- PLASTER,* 
2681 * *6 -- PLASTIC,* 
2682 * *7 -- SILVER,* 
2683 * *8 -- STEEL,* 
2684 * *9 -- STONE,* 
2685 * *10 -- SHINY_PLASTIC,* 
2686 * *11 -- SATIN,*
2687 * *12 -- METALIZED,* 
2688 * *13 -- NEON_GNC,* 
2689 * *14 -- CHROME,*
2690 * *15 -- ALUMINIUM,*
2691 * *16 -- OBSIDIAN,* 
2692 * *17 -- NEON_PHC,* 
2693 * *18 -- JADE,*
2694 * *19 -- DEFAULT,* 
2695 * *20 -- UserDefined*
2696  
2697 **Example:** 
2698 ~~~~~
2699 vinit 
2700 meshfromstl mesh myfile.stl 
2701 meshmat mesh JADE 
2702 ~~~~~
2703
2704 @subsubsection occt_draw_4_5_7 meshshrcoef
2705
2706 Syntax:                  
2707 ~~~~~
2708 meshshrcoef meshname shrinkcoefficient
2709 ~~~~~ 
2710
2711 Changes the value of shrink coefficient used in the shrink mode. In the shrink mode the face is shown as a congruent part of a usual face, so that *shrinkcoefficient* controls the value of this part. The *shrinkcoefficient* is a positive real number.
2712  
2713 **Example:** 
2714 ~~~~~
2715 vinit 
2716 meshfromstl mesh myfile.stl 
2717 meshshrcoef mesh 0.05
2718 ~~~~~ 
2719
2720 @subsubsection occt_draw_4_5_8 meshshow
2721
2722 Syntax:                  
2723 ~~~~~
2724 meshshow meshname
2725 ~~~~~ 
2726
2727 Displays **meshname** in the viewer (if it is erased).
2728  
2729 **Example:** 
2730 ~~~~~
2731 vinit 
2732 meshfromstl mesh myfile.stl 
2733 meshshow mesh
2734 ~~~~~ 
2735
2736 @subsubsection occt_draw_4_5_9 meshhide
2737
2738 Syntax:                  
2739 ~~~~~
2740 meshhide meshname
2741 ~~~~~ 
2742
2743 Hides **meshname** in the viewer. 
2744
2745 **Example:** 
2746 ~~~~~
2747 vinit 
2748 meshfromstl mesh myfile.stl 
2749 meshhide mesh
2750 ~~~~~ 
2751
2752 @subsubsection occt_draw_4_5_10 meshhidesel
2753
2754 Syntax:                  
2755 ~~~~~
2756 meshhidesel meshname
2757 ~~~~~ 
2758
2759 Hides only selected entities. The other part of **meshname** remains visible. 
2760
2761 @subsubsection occt_draw_4_5_11 meshshowsel
2762
2763 Syntax:                  
2764 ~~~~~
2765 meshshowsel meshname
2766 ~~~~~ 
2767
2768 Shows only selected entities. The other part of **meshname** becomes invisible. 
2769
2770 @subsubsection occt_draw_4_5_12 meshshowall
2771
2772 Syntax:                  
2773 ~~~~~
2774 meshshowall meshname
2775 ~~~~~ 
2776
2777 Changes the state of all entities to visible for **meshname**. 
2778
2779 @subsubsection occt_draw_4_5_13 meshdelete
2780
2781 Syntax:                  
2782 ~~~~~
2783 meshdelete meshname
2784 ~~~~~ 
2785
2786 Deletes MeshVS_Mesh object **meshname**. 
2787
2788 **Example:** 
2789 ~~~~~
2790 vinit 
2791 meshfromstl mesh myfile.stl 
2792 meshdelete mesh 
2793 ~~~~~
2794
2795 @subsection occt_draw_4_6       VIS Viewer commands
2796
2797 A specific plugin with alias *VIS* should be loaded to have access to VIS functionality in DRAW Test Harness:
2798
2799 ~~~~
2800 \> pload VIS
2801 ~~~~
2802
2803 @subsubsection occt_draw_4_6_1  ivtkinit
2804
2805 Syntax:
2806 ~~~~~
2807 ivtkinit
2808 ~~~~~
2809
2810 Creates a window for VTK viewer.
2811
2812 @figure{/user_guides/draw_test_harness/images/draw_image001.png,"",225}
2813
2814 @subsubsection occt_draw_4_6_2  ivtkdisplay
2815
2816 Syntax:
2817 ~~~~~
2818 ivtkdisplay name1 [name2] …[name n]
2819 ~~~~~
2820
2821 Displays named objects.
2822
2823 **Example:** 
2824 ~~~~~
2825 ivtkinit
2826 # create cone
2827 pcone c 5 0 10
2828 ivtkdisplay c
2829 ~~~~~
2830
2831 @figure{/user_guides/draw_test_harness/images/draw_image002.png,"",261}
2832
2833
2834 @subsubsection occt_draw_4_6_3  ivtkerase
2835
2836 Syntax:
2837 ~~~~~
2838 ivtkerase [name1] [name2] … [name n]
2839 ~~~~~
2840
2841 Erases named objects. If no arguments are passed, erases all displayed objects.
2842
2843 **Example:**
2844 ~~~~~
2845 ivtkinit
2846 # create a sphere
2847 psphere s 10
2848 # create a cone
2849 pcone c 5 0 10
2850 # create a cylinder
2851 pcylinder cy 5 10
2852 # display objects
2853 ivtkdisplay s c cy
2854 # erase only the cylinder
2855 ivtkerase cy
2856 # erase the sphere and the cone
2857 ivtkerase s c
2858 ~~~~~
2859
2860 @subsubsection occt_draw_4_6_4   ivtkfit
2861
2862 Syntax:
2863 ~~~~~
2864 ivtkfit
2865 ~~~~~
2866
2867 Automatic zoom/panning.
2868
2869 @subsubsection occt_draw_4_6_5  ivtkdispmode
2870
2871 Syntax:
2872 ~~~~~
2873 ivtksetdispmode [name] {0|1}
2874 ~~~~~
2875
2876 Sets display mode for a named object. If no arguments are passed, sets the given display mode for all displayed objects
2877 The possible modes are: 0 (WireFrame) and 1 (Shading).
2878
2879 **Example:**
2880 ~~~~~
2881 ivtkinit
2882 # create a cone
2883 pcone c 5 0 10
2884 # display the cone
2885 ivtkdisplay c
2886 # set shading mode for the cone
2887 ivtksetdispmode c 1
2888 ~~~~~
2889
2890 @figure{/user_guides/draw_test_harness/images/draw_image003.png,"",262}
2891
2892 @subsubsection occt_draw_4_6_6  ivtksetselmode
2893
2894 Syntax:
2895 ~~~~~
2896 ivtksetselmode [name] mode {0|1}
2897 ~~~~~
2898
2899 Sets selection mode for a named object. If no arguments are passed, sets the given selection mode for all the displayed objects.
2900
2901 **Example:**
2902 ~~~~~
2903 ivtkinit
2904 # load a shape from file
2905 restore CrankArm.brep a
2906 # display the loaded shape
2907 ivtkdisplay a
2908 # set the face selection mode
2909 ivtksetselmode a 4 1
2910 ~~~~~
2911
2912 @figure{/user_guides/draw_test_harness/images/draw_image004.png,"",291}
2913  
2914 @subsubsection occt_draw_4_6_7  ivtkmoveto
2915
2916 Syntax:
2917 ~~~~~
2918 ivtkmoveto x y
2919 ~~~~~
2920
2921 Imitates mouse cursor moving to point with the given display coordinates **x**,**y**.
2922
2923 **Example:**
2924 ~~~~~
2925 ivtkinit
2926 pcone c 5 0 10
2927 ivtkdisplay c
2928 ivtkmoveto 40 50
2929 ~~~~~
2930
2931 @subsubsection occt_draw_4_6_8  ivtkselect
2932
2933 Syntax:
2934 ~~~~~
2935 ivtkselect x y
2936 ~~~~~
2937
2938 Imitates mouse cursor moving to point with the given display coordinates and performs selection at this point.
2939
2940 **Example:**
2941 ~~~~~
2942 ivtkinit
2943 pcone c 5 0 10
2944 ivtkdisplay c
2945 ivtkselect 40 50
2946 ~~~~~
2947
2948 @subsubsection occt_draw_4_6_9  ivtkdump
2949
2950 Syntax:
2951 ~~~~~
2952 ivtkdump *filename* [buffer={rgb|rgba|depth}] [width height] [stereoproj={L|R}]
2953 ~~~~~
2954
2955 Dumps the contents of VTK viewer to image. It supports:
2956 * dumping in different raster graphics formats: PNG, BMP, JPEG, TIFF or PNM.
2957 * dumping of different buffers: RGB, RGBA or depth buffer.
2958 * defining of image sizes (width and height in pixels).
2959 * dumping of stereo projections (left or right).
2960
2961 **Example:**
2962 ~~~~~
2963 ivtkinit
2964 pcone c 5 0 10
2965 ivtkdisplay c
2966 ivtkdump D:/ConeSnapshot.png rgb 768 768
2967 ~~~~~
2968
2969 @subsubsection occt_draw_4_6_10 ivtkbgcolor
2970
2971
2972 Syntax:
2973 ~~~~~
2974 ivtkbgcolor r g b [r2 g2 b2]
2975 ~~~~~
2976
2977 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].
2978
2979 **Example:**
2980 ~~~~~
2981 ivtkinit
2982 ivtkbgcolor 200 220 250
2983 ~~~~~
2984  
2985 @figure{/user_guides/draw_test_harness/images/draw_image005.png,"",196}
2986
2987 ~~~~~
2988 ivtkbgcolor 10 30 80 255 255 255
2989 ~~~~~
2990
2991 @figure{/user_guides/draw_test_harness/images/draw_image006.png,"",190}
2992
2993 @section occt_draw_5 OCAF commands
2994
2995 This chapter contains a set of commands for Open CASCADE Technology Application Framework (OCAF). 
2996
2997
2998 @subsection occt_draw_5_1 Application commands
2999
3000
3001 @subsubsection occt_draw_5_1_1 NewDocument
3002
3003 Syntax:       
3004 ~~~~~
3005 NewDocument docname [format]
3006 ~~~~~ 
3007
3008 Creates a new **docname** document with MDTV-Standard or described format. 
3009
3010 **Example:** 
3011 ~~~~~
3012 # Create new document with default (MDTV-Standard) format 
3013 NewDocument D 
3014
3015 # Create new document with BinOcaf format 
3016 NewDocument D2 BinOcaf 
3017 ~~~~~
3018
3019 @subsubsection occt_draw_5_1_2 IsInSession
3020
3021 Syntax:       
3022 ~~~~~
3023 IsInSession path
3024 ~~~~~ 
3025
3026 Returns *0*, if **path** document is managed by the application session, *1* -- otherwise. 
3027
3028 **Example:** 
3029 ~~~~~
3030 IsInSession /myPath/myFile.std 
3031 ~~~~~
3032
3033 @subsubsection occt_draw_5_1_3 ListDocuments
3034
3035 Syntax:       
3036 ~~~~~
3037 ListDocuments
3038 ~~~~~ 
3039
3040 Makes a list of documents handled during the session of the application. 
3041
3042
3043 @subsubsection occt_draw_5_1_4 Open
3044
3045 Syntax:       
3046 ~~~~~
3047 Open path docname [-stream]
3048 ~~~~~ 
3049
3050 Retrieves the document of file **docname** in the path **path**. Overwrites the document, if it is already in session. 
3051
3052 option <i>-stream</i> activates usage of alternative interface of OCAF persistence working with C++ streams instead of file names.
3053
3054 **Example:** 
3055 ~~~~~
3056 Open /myPath/myFile.std D
3057 ~~~~~ 
3058
3059 @subsubsection occt_draw_5_1_5 Close
3060
3061 Syntax:       
3062 ~~~~~
3063 Close docname
3064 ~~~~~ 
3065
3066 Closes **docname** document. The document is no longer handled by the applicative session. 
3067
3068 **Example:** 
3069 ~~~~~
3070 Close D 
3071 ~~~~~
3072
3073 @subsubsection occt_draw_5_1_6 Save
3074
3075 Syntax:       
3076 ~~~~~
3077 Save docname
3078 ~~~~~ 
3079
3080 Saves **docname** active document. 
3081
3082 **Example:** 
3083 ~~~~~
3084 Save D 
3085 ~~~~~
3086
3087 @subsubsection occt_draw_5_1_7 SaveAs
3088
3089 Syntax:       
3090 ~~~~~
3091 SaveAs docname path [-stream]
3092 ~~~~~ 
3093
3094 Saves the active document in the file **docname** in the path **path**. Overwrites the file if it already exists.
3095
3096 option <i>-stream</i> activates usage of alternative interface of OCAF persistence working with C++ streams instead of file names.
3097
3098 **Example:** 
3099 ~~~~~
3100 SaveAs D /myPath/myFile.std
3101 ~~~~~ 
3102
3103 @subsection occt_draw_5_2 Basic commands
3104
3105 @subsubsection occt_draw_5_2_1 Label
3106
3107 Syntax:   
3108
3109 ~~~~~
3110 Label docname entry
3111 ~~~~~
3112
3113 Creates the label expressed by <i>\<entry\></i> if it does not exist.
3114
3115 Example
3116 ~~~~~
3117 Label D 0:2
3118 ~~~~~
3119
3120 @subsubsection occt_draw_5_2_2 NewChild
3121
3122 Syntax:   
3123
3124 ~~~~~
3125 NewChild docname [taggerlabel = Root label]
3126 ~~~~~
3127 Finds (or creates) a *TagSource* attribute located at father label of <i>\<taggerlabel\></i> and makes a new child label.
3128
3129 Example
3130 ~~~~~
3131 # Create new child of root label
3132 NewChild D
3133
3134 # Create new child of existing label
3135 Label D 0:2
3136 NewChild D 0:2
3137 ~~~~~
3138
3139 @subsubsection occt_draw_5_2_3 Children
3140
3141 Syntax:  
3142 ~~~~~
3143 Children docname label
3144 ~~~~~
3145 Returns the list of attributes of label.
3146
3147 Example
3148 ~~~~~
3149 Children D 0:2
3150 ~~~~~
3151
3152 @subsubsection occt_draw_5_2_4 ForgetAll
3153
3154 Syntax:   
3155 ~~~~~
3156 ForgetAll docname label
3157 ~~~~~
3158 Forgets all attributes of the label.
3159
3160 Example
3161 ~~~~~
3162 ForgetAll D 0:2
3163 ~~~~~
3164
3165
3166 @subsubsection occt_draw_5_3 Application commands
3167
3168 @subsubsection occt_draw_5_3_1  Main
3169
3170 Syntax:       
3171 ~~~~~
3172 Main docname
3173 ~~~~~ 
3174
3175 Returns the main label of the framework. 
3176
3177 **Example:** 
3178 ~~~~~
3179 Main D 
3180 ~~~~~
3181
3182 @subsubsection occt_draw_5_3_2  UndoLimit
3183
3184 Syntax:       
3185 ~~~~~
3186 UndoLimit docname [value=0]
3187 ~~~~~ 
3188
3189
3190 Sets the limit on the number of Undo Delta stored. **0** will disable Undo on the document. A negative *value* means that there is no limit. Note that by default Undo is disabled. Enabling it will take effect with the next call to *NewCommand*. Of course, this limit is the same for Redo 
3191
3192 **Example:** 
3193 ~~~~~
3194 UndoLimit D 100 
3195 ~~~~~
3196
3197 @subsubsection occt_draw_5_3_3  Undo
3198
3199 Syntax:       
3200 ~~~~~
3201 Undo docname [value=1]
3202 ~~~~~ 
3203
3204 Undoes **value** steps. 
3205
3206 **Example:** 
3207 ~~~~~
3208 Undo D 
3209 ~~~~~
3210
3211 @subsubsection occt_draw_5_3_4  Redo
3212
3213 Syntax:       
3214 ~~~~~
3215 Redo docname [value=1]
3216 ~~~~~ 
3217
3218 Redoes **value** steps.
3219  
3220 **Example:** 
3221 ~~~~~
3222 Redo D 
3223 ~~~~~
3224
3225 @subsubsection occt_draw_5_3_5  OpenCommand
3226
3227 Syntax:       
3228 ~~~~~
3229 OpenCommand docname
3230 ~~~~~ 
3231
3232 Opens a new command transaction. 
3233
3234 **Example:**
3235 ~~~~~ 
3236 OpenCommand D
3237 ~~~~~ 
3238
3239 @subsubsection occt_draw_5_3_6  CommitCommand
3240
3241 Syntax:       
3242 ~~~~~
3243 CommitCommand docname
3244 ~~~~~ 
3245
3246 Commits the Command transaction. 
3247
3248 **Example:** 
3249 ~~~~~
3250 CommitCommand D
3251 ~~~~~ 
3252
3253 @subsubsection occt_draw_5_3_7  NewCommand
3254
3255 Syntax:       
3256 ~~~~~
3257 NewCommand docname
3258 ~~~~~ 
3259
3260 This is a shortcut for Commit and Open transaction. 
3261
3262 **Example:** 
3263 ~~~~~
3264 NewCommand D 
3265 ~~~~~
3266
3267 @subsubsection occt_draw_5_3_8  AbortCommand
3268
3269 Syntax:       
3270 ~~~~~
3271 AbortCommand docname
3272 ~~~~~ 
3273
3274 Aborts the Command transaction. 
3275
3276 **Example:** 
3277 ~~~~~
3278 AbortCommand D 
3279 ~~~~~
3280
3281 @subsubsection occt_draw_5_3_9  Copy
3282
3283 Syntax:       
3284 ~~~~~
3285 Copy docname entry Xdocname Xentry
3286 ~~~~~ 
3287
3288 Copies the contents of *entry* to *Xentry*. No links are registered. 
3289
3290 **Example:** 
3291 ~~~~~
3292 Copy D1 0:2 D2 0:4 
3293 ~~~~~
3294
3295 @subsubsection occt_draw_5_3_10  UpdateLink
3296
3297 Syntax:       
3298 ~~~~~
3299 UpdateLink docname [entry] 
3300 ~~~~~
3301
3302 Updates external reference set at *entry*. 
3303
3304 **Example:** 
3305 ~~~~~
3306 UpdateLink D 
3307 ~~~~~
3308
3309 @subsubsection occt_draw_5_3_11  CopyWithLink
3310
3311 Syntax:       
3312 ~~~~~
3313 CopyWithLink docname entry Xdocname Xentry
3314 ~~~~~ 
3315
3316 Aborts the Command transaction. 
3317 Copies the content of *entry* to *Xentry*. The link is registered with an *Xlink* attribute at *Xentry*  label. 
3318
3319 **Example:** 
3320 ~~~~~
3321 CopyWithLink D1 0:2 D2 0:4
3322 ~~~~~ 
3323
3324 @subsubsection occt_draw_5_3_12  UpdateXLinks
3325
3326 Syntax:       
3327 ~~~~~
3328 UpdateXLinks docname entry
3329 ~~~~~ 
3330
3331 Sets modifications on labels impacted by external references to the *entry*. The *document* becomes invalid and must be recomputed 
3332
3333 **Example:** 
3334 ~~~~~
3335 UpdateXLinks D 0:2 
3336 ~~~~~
3337
3338 @subsubsection occt_draw_5_3_13  DumpDocument
3339
3340 Syntax:       
3341 ~~~~~
3342 DumpDocument docname
3343 ~~~~~ 
3344
3345 Displays parameters of *docname* document. 
3346
3347 **Example:** 
3348 ~~~~~
3349 DumpDocument D 
3350 ~~~~~
3351
3352
3353 @subsection occt_draw_5_4  Data Framework commands
3354
3355
3356 @subsubsection occt_draw_5_4_1  MakeDF
3357
3358 Syntax:       
3359 ~~~~~
3360 MakeDF dfname
3361 ~~~~~ 
3362
3363 Creates a new data framework. 
3364
3365 **Example:** 
3366 ~~~~~
3367 MakeDF D 
3368 ~~~~~
3369
3370 @subsubsection occt_draw_5_4_2  ClearDF
3371
3372 Syntax:       
3373 ~~~~~
3374 ClearDF dfname
3375 ~~~~~ 
3376
3377 Clears a data framework. 
3378
3379 **Example:** 
3380 ~~~~~
3381 ClearDF D 
3382 ~~~~~
3383
3384 @subsubsection occt_draw_5_4_3  CopyDF
3385
3386 Syntax:       
3387 ~~~~~
3388 CopyDF dfname1 entry1 [dfname2] entry2
3389 ~~~~~ 
3390
3391 Copies a data framework. 
3392
3393 **Example:** 
3394 ~~~~~
3395 CopyDF D 0:2 0:4 
3396 ~~~~~
3397
3398 @subsubsection occt_draw_5_4_4  CopyLabel
3399
3400 Syntax:       
3401 ~~~~~
3402 CopyLabel dfname fromlabel tolablel
3403 ~~~~~ 
3404
3405 Copies a label. 
3406
3407 **Example:** 
3408 ~~~~~
3409 CopyLabel D1 0:2 0:4 
3410 ~~~~~
3411
3412 @subsubsection occt_draw_5_4_5  MiniDumpDF
3413
3414 Syntax:       
3415 ~~~~~
3416 MiniDumpDF dfname
3417 ~~~~~ 
3418
3419 Makes a mini-dump of a data framework. 
3420
3421 **Example:** 
3422 ~~~~~
3423 MiniDumpDF D 
3424 ~~~~~
3425
3426 @subsubsection occt_draw_5_4_6  XDumpDF
3427
3428 Syntax:       
3429 ~~~~~
3430 XDumpDF dfname
3431 ~~~~~ 
3432
3433 Makes an extended dump of a data framework. 
3434
3435 **Example:** 
3436 ~~~~~
3437 XDumpDF D
3438 ~~~~~ 
3439
3440 @subsection occt_draw_5_5  General attributes commands
3441
3442
3443 @subsubsection occt_draw_5_5_1  SetInteger
3444
3445 Syntax:       
3446 ~~~~~
3447 SetInteger dfname entry value
3448 ~~~~~ 
3449
3450 Finds or creates an Integer attribute at *entry* label and sets *value*. 
3451
3452 **Example:** 
3453 ~~~~~
3454 SetInteger D 0:2 100 
3455 ~~~~~
3456
3457 @subsubsection occt_draw_5_5_2  GetInteger
3458
3459 Syntax:       
3460 ~~~~~
3461 GetInteger dfname entry [drawname]
3462 ~~~~~ 
3463
3464 Gets a value of an Integer attribute at *entry* label and sets it to *drawname* variable, if it is defined. 
3465
3466 **Example:** 
3467 ~~~~~
3468 GetInteger D 0:2 Int1 
3469 ~~~~~
3470
3471 @subsubsection occt_draw_5_5_3  SetReal
3472
3473 Syntax:       
3474 ~~~~~
3475 SetReal dfname entry value
3476 ~~~~~ 
3477
3478 Finds or creates a Real attribute at *entry* label and sets *value*. 
3479
3480 **Example:** 
3481 ~~~~~
3482 SetReal D 0:2 100. 
3483 ~~~~~
3484
3485 @subsubsection occt_draw_5_5_4  GetReal
3486
3487 Syntax:       
3488 ~~~~~
3489 GetReal dfname entry [drawname]
3490 ~~~~~ 
3491
3492 Gets a value of a Real attribute at *entry* label and sets it to *drawname* variable, if it is defined. 
3493
3494 **Example:** 
3495 ~~~~~
3496 GetReal D 0:2 Real1 
3497 ~~~~~
3498
3499 @subsubsection occt_draw_5_5_5  SetIntArray
3500
3501 Syntax:       
3502 ~~~~~
3503 SetIntArray dfname entry lower upper value1 value2 … 
3504 ~~~~~
3505
3506 Finds or creates an IntegerArray attribute at *entry* label with lower and upper bounds and sets **value1*, *value2*... 
3507
3508 **Example:** 
3509 ~~~~~
3510 SetIntArray D 0:2 1 4 100 200 300 400
3511 ~~~~~ 
3512
3513 @subsubsection occt_draw_5_5_6  GetIntArray
3514
3515 Syntax:       
3516 ~~~~~
3517 GetIntArray dfname entry
3518 ~~~~~ 
3519
3520 Gets a value of an *IntegerArray* attribute at *entry* label. 
3521
3522 **Example:** 
3523 ~~~~~
3524 GetIntArray D 0:2
3525 ~~~~~ 
3526
3527 @subsubsection occt_draw_5_5_7  SetRealArray
3528
3529 Syntax:       
3530 ~~~~~
3531 SetRealArray dfname entry lower upper value1 value2 …
3532 ~~~~~ 
3533
3534 Finds or creates a RealArray attribute at *entry* label with lower and upper bounds and sets *value1*, *value2*… 
3535
3536 **Example:** 
3537 ~~~~~
3538 GetRealArray D 0:2 1 4 100. 200. 300. 400. 
3539 ~~~~~
3540
3541 @subsubsection occt_draw_5_5_8  GetRealArray