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