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