0024722: Move functionality of WOK command wgendoc to OCCT tool gendoc
[occt.git] / dox / user_guides / 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**). It provides basic documentation on using Draw. For advanced information on Draw and its applications, see our offerings on our web site at <a href="http://www.opencascade.org/support/training">http://www.opencascade.org/support/training</a>  
9
10 Draw is a command interpreter based on TCL and a graphical system used to test and demonstrate Open CASCADE Technology modeling libraries. 
11
12
13 @subsection occt_draw_1_1 Overview
14
15 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. 
16
17 Draw can be used interactively to create, display and modify objects such as curves, surfaces and topological shapes. 
18
19 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. 
20
21 Draw consists of: 
22
23   * A command interpreter based on the TCL command language.
24   * A 3d graphic viewer based on the X system.
25   * A basic set of commands covering scripts, variables and graphics.
26   * 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.
27   * A set of topological commands allowing the user to create and modify BRep shapes and to use the OCCT topology algorithms.
28
29
30 There is also a set of commands for each delivery unit in the modeling libraries: 
31
32   * GEOMETRY, 
33   * TOPOLOGY, 
34   * ADVALGOS, 
35   * GRAPHIC, 
36   * PRESENTATION. 
37
38
39 @subsection occt_draw_1_2 Contents of this documentation
40
41 This documentation describes: 
42
43   * The command language.
44   * The basic set of commands.
45   * The graphical commands.
46   * The Geometry set of commands.
47   * The Topology set of commands.
48
49 This document does not describe other sets of commands and does not explain how to extend Draw using C++. 
50
51 This document is a reference manual. It contains a full description of each command. All descriptions have the format illustrated below for the exit command. 
52
53 ~~~~~
54 exit
55 ~~~~~
56
57 Terminates the Draw, TCL session. If the commands are read from a file using the source command, this will terminate the file. 
58
59 **Example:** 
60
61 ~~~~~
62 # this is a very short example 
63 exit 
64 ~~~~~
65
66
67 @subsection occt_draw_1_3 Getting started
68
69 Install Draw and launch Emacs. Get a command line in Emacs using *Esc x *and key in *woksh*. 
70
71 All DRAW Test Harness can be activated in the common executable called **DRAWEXE**. They are grouped in toolkits and can be loaded at run-time thereby implementing dynamically loaded plug-ins. Thus, it is possible to work only with the required commands adding them dynamically without leaving the Test Harness session. 
72
73 Declaration of available plug-ins is done through the special resource file(s). The *pload* command loads the plug-in in accordance with the specified resource file and activates the commands implemented in the plug-in. 
74
75 @subsubsection occt_draw_1_3_1 Launching DRAW Test Harness
76
77 Test Harness executable *DRAWEXE* is located in the <i>$CASROOT/\<platform\>/bin</i> directory (where \<platform\> is Win for Windows and Linux for Linux operating systems). Prior to launching it is important to make sure that the environment is correctly set-up (usually this is done automatically after the installation process on Windows or after launching specific scripts on Linux).  
78
79
80 @subsubsection occt_draw_1_3_2 Plug-in resource file
81
82 Open CASCADE Technology is shipped with the DrawPlugin resource file located in the <i>$CASROOT/src/DrawResources</i> directory. 
83
84 The format of the file is compliant with standard Open CASCADE Technology resource files (see the *Resource_Manager.cdl* file for details). 
85
86 Each key defines a sequence of either further (nested) keys or a name of the dynamic library. Keys can be nested down to an arbitrary level. However, cyclic dependencies between the keys are not checked. 
87
88 **Example:** (excerpt from DrawPlugin): 
89 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{.cpp}
90 OCAF               : VISUALIZATION, OCAFKERNEL 
91 VISUALIZATION      : AISV 
92 OCAFKERNEL         : DCAF 
93
94 DCAF               : TKDCAF 
95 AISV               : TKViewerTest 
96 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
97
98 @subsubsection occt_draw_1_3_3 Activation of commands implemented in the plug-in
99
100 To load a plug-in declared in the resource file and to activate the commands the following command must be used in Test Harness: 
101
102 ~~~~~
103 pload [-PluginFileName] [[Key1] [Key2]...]
104 ~~~~~
105
106 where: 
107
108 * <i>-PluginFileName</i> - defines the name of a plug-in resource file (prefix "-" is mandatory) described above. If this parameter is omitted then the default name *DrawPlugin* is used. 
109 * *Key…* - defines the key(s) enumerating plug-ins to be loaded. If no keys are specified then the key named *DEFAULT* is used (if there is no such key in the file then no plug-ins are loaded). 
110
111 According to the OCCT resource file management rules, to access the resource file the environment variable *CSF_PluginFileNameDefaults* (and optionally *CSF_PluginFileNameUserDefaults*) must be set and point to the directory storing the resource file. If it is omitted then the plug-in resource file will be searched in the <i>$CASROOT/src/DrawResources</i> directory. 
112
113 ~~~~~
114 Draw[]        pload -DrawPlugin OCAF 
115 ~~~~~
116 This command will search the resource file *DrawPlugin* using variable *CSF_DrawPluginDefaults* (and *CSF_DrawPluginUserDefaults*) and will start with the OCAF key. Since the *DrawPlugin* is the file shipped with Open CASCADE Technology it will be found in the <i>$CASROOT/src/DrawResources</i> directory (unless this location is redefined by user's variables). The OCAF key will be recursively extracted into two toolkits/plug-ins: *TKDCAF* and *TKViewerTest* (e.g. on Windows they correspond to *TKDCAF.dll* and *TKViewerTest.dll*). Thus, commands implemented for Visualization and OCAF will be loaded and activated in Test Harness. 
117
118 ~~~~~
119 Draw[]        pload (equivalent to pload -DrawPlugin DEFAULT). 
120 ~~~~~
121 This command will find the default DrawPlugin file and the DEFAULT key. The latter finally maps to the TKTopTest toolkit which implements basic modeling commands. 
122
123
124 @section occt_draw_2 The Command Language
125
126 @subsection occt_draw_2_1 Overview
127
128 The command language used in Draw is Tcl. Tcl documentation such as "TCL and the TK Toolkit" by John K. Ousterhout (Addison-Wesley) will prove useful if you intend to use Draw extensively. 
129
130 This chapter is designed to give you a short outline of both the TCL language and some extensions included in Draw. The following topics are covered: 
131
132   * Syntax of the TCL language.
133   * Accessing variables in TCL and Draw.
134   * Control structures.
135   * Procedures.
136
137 @subsection occt_draw_2_2 Syntax of TCL
138
139 TCL is an interpreted command language, not a structured language like C, Pascal, LISP or Basic. It uses a shell similar to that of csh. TCL is, however, easier to use than csh because control structures and procedures are easier to define. As well, because TCL does not assign a process to each command, it is faster than csh. 
140
141 The basic program for TCL is a script. A script consists of one or more commands. Commands are separated by new lines or semicolons. 
142
143 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{.cpp}
144 set a 24 
145 set b 15 
146 set a 25; set b 15 
147 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
148
149 Each command consists of one or more *words*; the first word is the name of a command and additional words are arguments to that command. 
150
151 Words are separated by spaces or tabs. In the preceding example each of the four commands has three words. A command may contain any number of words and each word is a string of arbitrary length. 
152
153 The evaluation of a command by TCL is done in two steps. In the first step, the command is parsed and broken into words. Some substitutions are also performed. In the second step, the command procedure corresponding to the first word is called and the other words are interpreted as arguments. In the first step, there is only string manipulation, The words only acquire *meaning* in the second step by the command procedure. 
154
155 The following substitutions are performed by TCL: 
156
157 Variable substitution is triggered by the $ character (as with csh), the content of the variable is substitued; { } may be used as in csh to enclose the name of the variable. 
158
159 **Example:** 
160 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{.cpp}
161 # set a variable value 
162 set file documentation 
163 puts $file #to display file contents on the screen 
164
165 # a simple substitution, set psfile to documentation.ps 
166 set psfile $file.ps 
167 puts $psfile 
168
169 # another substitution, set pfile to documentationPS 
170 set pfile ${file}PS 
171
172 # a last one, 
173 # delete files NEWdocumentation and OLDdocumentation 
174 foreach prefix {NEW OLD} {rm $prefix$file} 
175 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
176
177 Command substitution is triggered by the [ ] characters. The brackets must enclose a valid script. The script is evaluated and the result is substituted. 
178
179 Compare command construction in csh. 
180
181 **Example:** 
182 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{.cpp}
183 set degree 30 
184 set pi 3.14159265 
185 # expr is a command evaluating a numeric expression 
186 set radian [expr $pi*$degree/180] 
187 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
188
189 Backslash substitution is triggered by the backslash character. It is used to insert special characters like $, [ , ] , etc. It is also useful to insert a new line, a backslash terminated line is continued on the following line. 
190
191 TCL uses two forms of *quoting* to prevent substitution and word breaking. 
192
193 Double quote *quoting* enables the definition of a string with space and tabs as a single word. Substitutions are still performed inside the inverted commas " ". 
194
195 **Example:** 
196 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{.cpp}
197 # set msg to ;the price is 12.00; 
198 set price 12.00 
199 set msg ;the price is $price; 
200 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
201
202 Braces *quoting* prevents all substitutions. Braces are also nested. The main use of braces is to defer evaluation when defining procedures and control structures. Braces are used for a clearer presentation of TCL scripts on several lines. 
203
204 **Example:** 
205 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{.cpp}
206 set x 0 
207 # this will loop for ever 
208 # because while argument is ;0  3; 
209 while ;$x  3; {set x [expr $x+1]} 
210 # this will terminate as expected because 
211 # while argument is {$x  3} 
212 while {$x  3} {set x [expr $x+1]} 
213 # this can be written also 
214 while {$x  3} { 
215 set x [expr $x+1] 
216
217 # the following cannot be written 
218 # because while requires two arguments 
219 while {$x  3} 
220
221 set x [expr $x+1] 
222
223 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
224
225 Comments start with a \# character as the first non-blank character in a command. To add a comment at the end of the line, the comment must be preceded by a semi-colon to end the preceding command. 
226
227 **Example:** 
228 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{.cpp}
229 # This is a comment 
230 set a 1 # this is not a comment 
231 set b 1; # this is a comment 
232 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
233
234 The number of words is never changed by substitution when parsing in TCL. For example, the result of a substitution is always a single word. This is different from csh but convenient as the behavior of the parser is more predictable. It may sometimes be necessary to force a second round of parsing. **eval** accomplishes this: it accepts several arguments, concatenates them and executes the resulting script. 
235
236
237 **Example:** 
238 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
239 # I want to delete two files 
240
241 set files ;foo bar; 
242
243 # this will fail because rm will receive only one argument 
244 # and complain that ;foo bar; does not exit 
245
246 exec rm $files 
247
248 # a second evaluation will do it 
249 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
250
251 @subsection occt_draw_2_3 Accessing variables in TCL and Draw
252
253 TCL variables have only string values. Note that even numeric values are stored as string literals, and computations using the **expr** command start by parsing the strings. Draw, however, requires variables with other kinds of values such as curves, surfaces or topological shapes. 
254
255 TCL provides a mechanism to link user data to variables. Using this functionality, Draw defines its variables as TCL variables with associated data. 
256
257 The string value of a Draw variable is meaningless. It is usually set to the name of the variable itself. Consequently, preceding a Draw variable with a <i>$</i> does not change the result of a command. The content of a Draw variable is accessed using appropriate commands. 
258
259 There are many kinds of Draw variables, and new ones may be added with C++. Geometric and topological variables are described below. 
260
261 Draw numeric variables can be used within an expression anywhere a Draw command requires a numeric value. The *expr* command is useless in this case as the variables are stored not as strings but as floating point values. 
262
263 **Example:** 
264 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{.cpp}
265 # dset is used for numeric variables 
266 # pi is a predefined Draw variable 
267 dset angle pi/3 radius 10 
268 point p radius*cos(angle) radius*sin(angle) 0 
269 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
270 It is recommended that you use TCL variables only for strings and Draw for numerals. That way, you will avoid the *expr* command. As a rule, Geometry and Topology require numbers but no strings. 
271
272 @subsubsection occt_draw_2_3_1 set, unset
273
274 Syntax:                  
275
276 ~~~~~
277 set varname [value] 
278 unset varname [varname varname ...] 
279 ~~~~~
280
281 *set* assigns a string value to a variable. If the variable does not already exist, it is created. 
282
283 Without a value, *set* returns the content of the variable. 
284
285 *unset* deletes variables. It is is also used to delete Draw variables. 
286
287 **Example:** 
288 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{.cpp}
289 set a "Hello world"
290 set b "Goodbye" 
291 set a 
292 == "Hello world" 
293 unset a b 
294 set a 
295 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
296
297 **Note**, that the *set* command can set only one variable, unlike the *dset* command. 
298
299
300 @subsubsection occt_draw_2_3_2 dset, dval
301
302 Syntax
303
304 ~~~~~
305 dset var1 value1 vr2 value2 ... 
306 dval name 
307 ~~~~~
308
309 *dset* assigns values to Draw numeric variables. The argument can be any numeric expression including Draw numeric variables. Since all Draw commands expect a numeric expression, there is no need to use $ or *expr*. The *dset* command can assign several variables. If there is an odd number of arguments, the last variable will be assigned a value of 0. If the variable does not exist, it will be created. 
310
311 *dval* evaluates an expression containing Draw numeric variables and returns the result as a string, even in the case of a single variable. This is not used in Draw commands as these usually interpret the expression. It is used for basic TCL commands expecting strings. 
312
313
314 **Example:** 
315 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{.cpp}
316 # z is set to 0 
317 dset x 10 y 15 z 
318 == 0 
319
320 # no $ required for Draw commands 
321 point p x y z 
322
323 # *puts* prints a string 
324 puts ;x = [dval x], cos(x/pi) = [dval cos(x/pi)]; 
325 == x = 10, cos(x/pi) = -0.99913874099467914 
326 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
327
328 **Note,** that in TCL, parentheses are not considered to be special characters. Do not forget to quote an expression if it contains spaces in order to avoid parsing different words. <i>(a + b)</i> is parsed as three words: <i>"(a + b)"</i> or <i>(a+b)</i> are correct.* 
329
330
331 @subsection occt_draw_2_4 lists
332
333 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. 
334
335 This allows you to insert lists within lists. 
336
337 **Example:** 
338 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{.cpp}
339 # a list of 3 strings 
340 ;a b c; 
341
342 # a list of two strings the first is a list of 2 
343 ;{a b} c; 
344 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
345
346 Many TCL commands return lists and **foreach** is a useful way to create loops on list elements. 
347
348 @subsubsection occt_draw_2_5 Control Structures
349
350 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: 
351
352 * You use braces instead of parentheses to enclose conditions. 
353 * You do not start the script on the next line of your command. 
354
355
356 @subsubsection occt_draw_2_5_1 if
357
358 Syntax       
359
360 ~~~~~
361 if condition script [elseif script .... else script] 
362 ~~~~~
363
364 **If** evaluates the condition and the script to see whether the condition is true. 
365
366
367
368 **Example:** 
369 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{.cpp}
370 if {$x  0} { 
371 puts ;positive; 
372 } elseif {$x == 0} { 
373 puts ;null; 
374 } else { 
375 puts ;negative; 
376
377 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
378
379 @subsubsection occt_draw_2_5_2 while, for, foreach
380
381 Syntax:                  
382
383
384 ~~~~~~
385 while condition script 
386 for init condition reinit script 
387 foreach varname list script 
388 ~~~~~
389
390 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. \
391
392 **Example:** 
393 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{.cpp}
394 # while example 
395 dset x 1.1 
396 while {[dval x]  100} { 
397   circle c 0 0 x 
398   dset x x*x 
399
400 # for example 
401 # incr var d, increments a variable of d (default 1) 
402 for {set i 0} {$i  10} {incr i} { 
403   dset angle $i*pi/10 
404   point p$i cos(angle0 sin(angle) 0 
405
406 # foreach example 
407 foreach object {crapo tomson lucas} {display $object} 
408 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
409
410 @subsubsection occt_draw_2_5_3 break, continue
411
412 Syntax:                  
413
414 ~~~~~
415 break 
416 continue 
417 ~~~~~
418
419 Within loops, the **break** and **continue** commands have the same effect as in C. 
420
421 **break** interrupts the innermost loop and **continue** jumps to the next iteration. 
422
423 **Example:** 
424 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{.cpp}
425 # search the index for which t$i has value ;secret; 
426 for {set i 1} {$i = 100} {incr i} { 
427   if {[set t$i] == ;secret;} break; 
428
429 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
430
431 @subsection occt_draw_2_6 Procedures
432
433 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. 
434
435 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. 
436
437 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. 
438
439 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. 
440
441
442 @subsubsection occt_draw_2_6_1 proc
443
444 Syntax:
445
446 ~~~~~
447 proc argumentlist script 
448 ~~~~~
449
450 **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. 
451
452 **return** gives a return value to the procedure. 
453
454 **Example:** 
455 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{.cpp}
456 # simple procedure 
457 proc hello {} { 
458   puts ;hello world; 
459
460 # procedure with arguments and default values 
461 proc distance {x1 y1 {x2 0} {y2 0}} { 
462   set d [expr (x2-x1)*(x2-x1) + (y2-y1)*(y2-y1)] 
463   return [expr sqrt(d)] 
464
465 proc fact n { 
466   if {$n == 0} {return 1} else { 
467     return [expr n*[fact [expr n -1]]] 
468   } 
469
470 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
471
472
473 @subsubsection occt_draw_2_6_2 global, upvar
474
475 Syntax:                 
476
477 ~~~~~
478 global varname [varname ...] 
479 upvar varname localname [varname localname ...] 
480 ~~~~~
481
482
483 **global** accesses high level variables. Unlike C, global variables are not visible in procedures. 
484
485 **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. 
486
487 **Note** that in the following examples the \$ character is always necessarily used to access the arguments.
488  
489 **Example:** 
490 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{.cpp}
491 # convert degree to radian 
492 # pi is a global variable 
493 proc deg2rad (degree} { 
494   return [dval pi*$degree/2.] 
495
496 # create line with a point and an angle 
497 proc linang {linename x y angle} { 
498   upvar linename l 
499   line l $x $y cos($angle) sin($angle) 
500 }
501 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
502
503 @section occt_draw_3 Basic Commands
504
505 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: 
506
507   * General commands, which are used for Draw and TCL management.
508   * Variable commands, which are used to manage Draw variables such as storing and dumping.
509   * Graphic commands, which are used to manage the graphic system, and so pertain to views.
510   * Variable display commands, which are used to manage the display of objects within given views.
511
512 Note that Draw also features a GUI task bar providing an alternative way to give certain general, graphic and display commands 
513
514
515 @subsection occt_draw_3_1 General commands
516
517 This section describes several useful commands:
518
519   * **help** to get information, 
520   * **source** to eval a script from a file, 
521   * **spy** to capture the commands in a file,
522   * **cpulimit** to limit the process cpu time, 
523   * **wait** to waste some time, 
524   * **chrono** to time commands. 
525
526 @subsubsection occt_draw_3_1_1 help
527
528 Syntax:                  
529
530 ~~~~~
531 help [command [helpstring group]] 
532 ~~~~~
533
534 Provides help or modifies the help information. 
535
536 **help** without arguments lists all groups and the commands in each group. 
537
538 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. 
539
540 **Example:** 
541 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{.cpp}
542 # Gives help on all commands starting with *a* 
543 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
544
545
546 @subsubsection occt_draw_3_1_2 source
547
548 Syntax:
549
550 ~~~~~
551 source filename 
552 ~~~~~
553 Executes a file. 
554
555 The **exit** command will terminate the file. 
556
557 @subsubsection occt_draw_3_1_3 spy
558
559 Syntax:                  
560
561 ~~~~~
562 spy [filename] 
563 ~~~~~
564
565 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. 
566
567 If a command returns an error it is saved with a comment mark. 
568
569 The file created by **spy** can be executed with the **source** command. 
570
571 **Example:** 
572 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{.cpp}
573 # all commands will be saved in the file ;session; 
574 spy session 
575 # the file ;session; is closed and commands are not saved 
576 spy 
577 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
578
579
580
581 @subsubsection occt_draw_3_1_4 cpulimit
582
583 Syntax:                  
584
585 ~~~~~
586 cpulimit [nbseconds] 
587 ~~~~~
588
589 **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. 
590
591 **Example:** 
592 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{.cpp}
593 #limit cpu to one hour 
594 cpulimit 3600 
595 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
596
597 @subsubsection occt_draw_3_1_5 wait
598
599 Syntax:
600 ~~~~~
601 wait [nbseconds] 
602 ~~~~~
603 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. 
604
605 ~~~~~
606 # You have ten seconds ... 
607 wait 
608 ~~~~~
609
610 @subsubsection occt_draw_3_1_6 chrono
611
612 Syntax:                  
613
614 ~~~~~
615 chrono [ name start/stop/reset/show] 
616 ~~~~~
617
618 Without arguments, **chrono** activates Draw chronometers. The elapsed time ,cpu system and cpu user times for each command will be printed. 
619
620 With arguments, **chrono** is used to manage activated chronometers. You can perform the following actions with a chronometer. 
621   * run the chronometer (start).
622   * stop the chronometer (stop).
623   * reset the chronometer to 0 (reset).
624   * display the current time (show).
625
626 **Example:** 
627 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{.cpp}
628 chrono 
629 ==Chronometers activated. 
630 ptorus t 20 5 
631 ==Elapsed time: 0 Hours 0 Minutes 0.0318 Seconds 
632 ==CPU user time: 0.01 seconds 
633 ==CPU system time: 0 seconds 
634 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
635
636 @subsection occt_draw_3_2  Variable management commands
637
638 @subsubsection occt_draw_3_2_1 isdraw, directory
639
640 Syntax:                  
641 ~~~~~
642 isdraw varname 
643 directory [pattern] 
644 ~~~~~
645
646 **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. 
647
648 Use **directory** to return a list of all Draw global variables matching a pattern. 
649
650 **Example:** 
651 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{.cpp}
652 set a 1 
653 isdraw a 
654 === 0 
655
656 dset a 1 
657 isdraw a 
658 === 1 
659
660 circle c 0 0 1 0 5 
661 isdraw c 
662 === 1 
663
664 # to destroy all Draw objects with name containing curve 
665 foreach var [directory *curve*] {unset $var} 
666 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
667
668
669 @subsubsection occt_draw_3_2_2 whatis, dump
670
671 Syntax:
672
673 ~~~~~
674 whatis varname [varname ...] 
675 dump varname [varname ...] 
676 ~~~~~
677
678 **whatis** returns short information about a Draw variable. This is usually the type name. 
679
680 **dump** returns a brief type description, the coordinates, and if need be, the parameters of a Draw variable. 
681
682 **Example:** 
683 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{.cpp}
684 circle c 0 0 1 0 5 
685 whatis c 
686 c is a 2d curve 
687
688 dump c 
689
690 ***** Dump of c ***** 
691 Circle 
692 Center :0, 0 
693 XAxis :1, 0 
694 YAxis :-0, 1 
695 Radius :5 
696 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
697
698 **Note** The behavior of *whatis* on other variables (not Draw) is not excellent. 
699
700
701 @subsubsection occt_draw_3_2_3 rename, copy
702
703 Syntax:      
704 ~~~~~
705 rename varname tovarname [varname tovarname ...] 
706 copy varname tovarname [varname tovarname ...] 
707 ~~~~~
708
709   * **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. 
710   * **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. 
711
712 **Example:** 
713 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{.cpp}
714 circle c1 0 0 1 0 5 
715 rename c1 c2 
716
717 # curves are copied, c2 will not be modified 
718 copy c2 c3 
719 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
720
721 @subsubsection occt_draw_3_2_4 datadir, save, restore
722
723 Syntax:
724 ~~~~~
725 datadir [directory] 
726 save variable [filename] 
727 restore filename [variablename] 
728 ~~~~~
729
730   * **datadir** without arguments prints the path of the current data directory. 
731   * **datadir** with an argument sets the data directory path. \
732
733 If the path starts with a dot (.) only the last directory name will be changed in the path. 
734
735   * **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. 
736   * **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. 
737
738 The exact content of the file is type-dependent. They are usually ASCII files and so, architecture independent. 
739
740 **Example:** 
741 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{.cpp}
742 # note how TCL accesses shell environment variables 
743 # using $env() 
744 datadir 
745 ==. 
746
747 datadir $env(WBCONTAINER)/data/default 
748 ==/adv_20/BAG/data/default 
749
750 box b 10 20 30 
751 save b theBox 
752 ==/adv_20/BAG/data/default/theBox 
753
754 # when TCL does not find a command it tries a shell command 
755 ls [datadir] 
756 == theBox 
757
758 restore theBox 
759 == theBox 
760 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
761
762 @subsection occt_draw_3_3 User defined commands
763
764 *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. 
765
766 *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. 
767
768 @subsubsection occt_draw_3_3_1 set
769
770 #### In *DrawTrSurf* package:
771
772 ~~~~~
773 void Set(Standard_CString& Name,const gp_Pnt& G) ; 
774 void Set(Standard_CString& Name,const gp_Pnt2d& G) ; 
775 void Set(Standard_CString& Name, 
776 const Handle(Geom_Geometry)& G) ; 
777 void Set(Standard_CString& Name, 
778 const Handle(Geom2d_Curve)& C) ; 
779 void Set(Standard_CString& Name, 
780 const Handle(Poly_Triangulation)& T) ; 
781 void Set(Standard_CString& Name, 
782 const Handle(Poly_Polygon3D)& P) ; 
783 void Set(Standard_CString& Name, 
784 const Handle(Poly_Polygon2D)& P) ; 
785 ~~~~~
786
787 #### In *DBRep* package:
788
789 ~~~~~
790 void Set(const Standard_CString Name, 
791 const TopoDS_Shape& S) ; 
792 ~~~~~
793
794 Example of *DrawTrSurf*
795
796 ~~~~~
797 Handle(Geom2d_Circle) C1 = new Geom2d_Circle 
798 (gce_MakeCirc2d (gp_Pnt2d(50,0,) 25)); 
799 DrawTrSurf::Set(char*, C1); 
800 ~~~~~
801
802 Example of *DBRep* 
803
804 ~~~~~
805 TopoDS_Solid B; 
806 B = BRepPrimAPI_MakeBox (10,10,10); 
807 DBRep::Set(char*,B); 
808 ~~~~~
809
810 @subsubsection occt_draw_3_3_2 get
811
812 #### In *DrawTrSurf* package:
813  
814 ~~~~~
815 Handle_Geom_Geometry Get(Standard_CString& Name) ; 
816 ~~~~~
817
818 #### In *DBRep* package:
819
820 ~~~~~
821 TopoDS_Shape Get(Standard_CString& Name, 
822 const TopAbs_ShapeEnum Typ = TopAbs_SHAPE, 
823 const Standard_Boolean Complain 
824 = Standard_True) ; 
825 ~~~~~
826
827 Example of *DrawTrSurf*
828
829 ~~~~~
830 Standard_Integer MyCommand 
831 (Draw_Interpretor& theCommands, 
832 Standard_Integer argc, char** argv) 
833 {...... 
834 // Creation of a Geom_Geometry from a Draw geometric 
835 // name 
836 Handle (Geom_Geometry) aGeom= DrawTrSurf::Get(argv[1]); 
837
838 ~~~~~
839
840 Example of *DBRep*
841
842 ~~~~~
843 Standard_Integer MyCommand 
844 (Draw_Interpretor& theCommands, 
845 Standard_Integer argc, char** argv) 
846 {...... 
847 // Creation of a TopoDS_Shape from a Draw topological 
848 // name 
849 TopoDS_Solid B = DBRep::Get(argv[1]); 
850
851 ~~~~~
852
853 @section occt_draw_4 Graphic Commands
854
855 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. 
856
857 @subsection occt_draw_4_1 Axonometric viewer
858
859 @subsubsection occt_draw_4_1_1 view, delete
860
861 Syntax:                  
862 ~~~~~
863 view index type [X Y W H] 
864 delete [index] 
865 ~~~~~
866
867 **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. 
868
869 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.. 
870
871 **delete** deletes a view. If no index is given, all the views are deleted. 
872
873 Type selects from the following range: 
874
875   * *AXON* : Axonometric view
876   * *PERS* : Perspective view
877   * <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.
878   * <i>-2D-</i> : 2d view
879
880 The index, the type, the current zoom are displayed in the window title . 
881
882 **Example:** 
883 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{.cpp}
884 # this is the content of the mu4 procedure 
885 proc mu4 {} { 
886 delete 
887 view 1 +X+Z 320 20 400 400 
888 view 2 +X+Y 320 450 400 400 
889 view 3 +Y+Z 728 20 400 400 
890 view 4 AXON 728 450 400 400 
891
892 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
893
894 See also: **axo, pers, top, bottom, left, right, front, back, mu4, v2d, av2d, smallview** 
895
896 @subsubsection occt_draw_4_1_2  axo, pers, top, ...
897
898 Syntax:      
899
900 ~~~~~
901 axo 
902 pers 
903 ... 
904 smallview type 
905 ~~~~~
906
907 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. 
908
909   * **axo** creates a large window axonometric view;
910   * **pers** creates a large window perspective view;
911   * **top**, **bottom**, **left**, **right**, **front**, **back** create a large window axis view;
912   * **mu4** creates four small window views: front, left, top and axo.
913   * **v2d** creates a large window 2d view.
914   * **av2d** creates two small window views, one 2d and one axo
915   * **smallview** creates a view at the bottom right of the screen of the given type. 
916
917 See also: **view**, **delete** 
918
919 @subsubsection occt_draw_4_1_3 mu, md, 2dmu, 2dmd, zoom, 2dzoom
920
921 Syntax:
922
923 ~~~~~
924     mu [index] value 
925     2dmu [index] value 
926     zoom [index] value 
927     wzoom 
928 ~~~~~
929
930 * **mu** (magnify up) increases the zoom in one or several views by a factor of 10%. 
931 * **md** (magnify down) decreases the zoom by the inverse factor. **2dmu** and **2dmd** 
932 perform the same on one or all 2d views. 
933 * **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. 
934 * **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. 
935
936 **Example:** 
937 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{.cpp}
938     # set a zoom of 2.5 
939     zoom 2.5 
940
941     # magnify by 10% 
942     mu 1 
943
944     # magnify by 20% 
945 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
946 See also: **fit**, **2dfit** 
947
948
949 @subsubsection occt_draw_4_14 pu, pd, pl, pr, 2dpu, 2dpd, 2dpl, 2dpr
950
951 Syntax:                  
952
953 ~~~~~
954 pu [index] 
955 pd [index] 
956 ~~~~~
957
958 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. 
959 ~~~~~
960 # you have selected one anonometric view
961 pu
962 # or
963 pu 1
964
965 # you have selected an mu4 view; the object in the third view will pan up
966 pu 3
967 ~~~~~
968 See also: **fit**, **2dfit** 
969
970
971 @subsubsection occt_draw_4_1_5 fit, 2dfit
972
973 Syntax:      
974
975 ~~~~~
976 fit [index] 
977 2dfit [index] 
978 ~~~~~
979
980 **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. 
981
982 When fitting all views a unique zoom is computed for all the views. All views are on the same scale. 
983
984 **Example:** 
985 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{.cpp}
986 # fit only view 1 
987 fit 1 
988 # fit all 2d views 
989 2dfit 
990 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
991 See also: **zoom**, **mu**, **pu** 
992
993
994 @subsubsection occt_draw_4_1_6 u, d, l, r
995
996 Syntax:      
997
998 ~~~~~
999 u [index] 
1000 d [index] 
1001 l [index] 
1002 r [index] 
1003 ~~~~~
1004
1005 **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. 
1006
1007 **Example:** 
1008 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{.cpp}
1009 # rotate the view up 
1010
1011 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1012
1013 @subsubsection occt_draw_4_1_7 focal, fu, fd
1014
1015 Syntax:                  
1016 ~~~~~
1017 focal [f] 
1018 fu [index] 
1019 fd [index] 
1020 ~~~~~
1021
1022 * **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. 
1023 * **fu** and **fd** increase or decrease the focal value by 10%. **fd** makes the eye closer to the object. 
1024
1025 **Example:** 
1026 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{.cpp}
1027 pers 
1028 repeat 10 fd 
1029 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1030
1031 **Note**: Do not use a negative or null focal value. 
1032
1033 See also: **pers** 
1034
1035 @subsubsection occt_draw_4_1_8 color
1036
1037 Syntax: 
1038
1039 ~~~~~
1040 color index name 
1041 ~~~~~
1042
1043 **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. 
1044
1045 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. 
1046
1047 **Example:** 
1048 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{.cpp}
1049 # change the value of blue 
1050 color 3 "navy blue" 
1051 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1052
1053
1054 **Note** that the color change will be visible on the next redraw of the views, for example, after *fit* or *mu*, etc. 
1055
1056 @subsubsection occt_draw_4_1_9 dtext
1057
1058 Syntax:      
1059 ~~~~~
1060 dtext [x y [z]] string 
1061 ~~~~~
1062
1063 **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. 
1064
1065 The coordinates are real space coordinates. 
1066
1067 **Example:** 
1068 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{.cpp}
1069 # mark the origins 
1070 dtext 0 0 bebop 
1071 dtext 0 0 0 bebop 
1072 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1073
1074 @subsubsection occt_draw_4_1_10 hardcopy, hcolor, xwd
1075
1076 Syntax:      
1077 ~~~~~
1078 hardcopy [index] 
1079 hcolor index width gray 
1080 xwd [index] filename 
1081 ~~~~~
1082
1083 * **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. 
1084 * **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. 
1085 * **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**. 
1086
1087 **Example:** 
1088 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{.cpp}
1089 # all blue lines (color 3) 
1090 # will be half-width and gray 
1091 hcolor 3 0.5 
1092
1093 # make a postscript file and print it 
1094 hardcopy 
1095 lpr a4.ps 
1096
1097 # make an xwd file and display it 
1098 xwd theview 
1099 xwud -in theview 
1100 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1101
1102 **Note:** When more than one view is present, specify the index of the view. 
1103
1104 Only use a postscript printer to print postscript files. 
1105
1106 See also: **color** 
1107
1108
1109 @subsubsection occt_draw_4_1_11 wclick, pick
1110
1111 Syntax:      
1112 ~~~~~
1113 wclick 
1114 pick index X Y Z b [nowait] 
1115 ~~~~~
1116
1117 **wclick** defers an event until the mouse button is clicked. The message <code>just click</code> is displayed. 
1118
1119 Use the **pick** command to get graphic input. The arguments must be names for variables where the results are stored. 
1120   * index: index of the view where the input was made.
1121   * X,Y,Z: 3d coordinates in real world.
1122   * b: b is the mouse button 1,2 or 3.
1123
1124 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. 
1125
1126 This option is useful for tracking the pointer. 
1127
1128 **Note** that the results are stored in Draw numeric variables.
1129
1130 **Example:** 
1131 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{.cpp}
1132 # make a circle at mouse location 
1133 pick index x y z b 
1134 circle c x y z 0 0 1 1 0 0 0 30 
1135
1136 # make a dynamic circle at mouse location 
1137 # stop when a button is clicked 
1138 # (see the repaint command) 
1139
1140 dset b 0 
1141 while {[dval b] == 0} { 
1142 pick index x y z b nowait 
1143 circle c x y z 0 0 1 1 0 0 0 30 
1144 repaint 
1145
1146 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1147 See also: **repaint** 
1148
1149
1150 Draw provides commands to manage the display of objects. 
1151 * **display**, **donly** are used to display, 
1152 * **erase**, **clear**, **2dclear** to erase. 
1153 * **autodisplay** command is used to check whether variables are displayed when created. 
1154
1155 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. 
1156   * 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.
1157   * 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.
1158   * If you do not see what you expected while executing loops or sourcing files, use the **repaint** and **dflush** commands.
1159
1160 **Example:** 
1161 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{.cpp}
1162 # OK use dot to dump an object on the screen 
1163 dump . 
1164
1165 point . x y z 
1166
1167 #Not OK. display points on a curve c 
1168 # with dot no variables are created 
1169 for {set i 0} {$i = 10} {incr i} { 
1170 cvalue c $i/10 x y z 
1171 point . x y z 
1172
1173
1174 # point p x y z 
1175 # would have displayed only one point 
1176 # because the precedent variable content is erased 
1177
1178 # point p$i x y z 
1179 # is an other solution, creating variables 
1180 # p0, p1, p2, .... 
1181
1182 # give a name to a graphic object 
1183 rename . x 
1184 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1185
1186
1187 @subsubsection occt_draw_4_1_12 autodisplay
1188
1189 Syntax:      
1190
1191 ~~~~~
1192 autodisplay [0/1] 
1193 ~~~~~
1194
1195 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. 
1196
1197 When **autodisplay** is off, using the dot return argument is ineffective. 
1198
1199 **Example:** 
1200 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{.cpp}
1201 # c is displayed 
1202 circle c 0 0 1 0 5 
1203
1204 # toggle the mode 
1205 autodisplay 
1206 == 0 
1207 circle c 0 0 1 0 5 
1208
1209 # c is erased, but not displayed 
1210 display c 
1211 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1212
1213 @subsubsection occt_draw_4_1_13 display, donly
1214
1215 Syntax:      
1216 ~~~~~
1217 display varname [varname ...] 
1218 donly varname [varname ...] 
1219 ~~~~~
1220
1221 * **display** makes objects visible. 
1222 * **donly** *display only* makes objects visible and erases all other objects. It is very useful to extract one object from a messy screen. 
1223
1224 **Example:** 
1225 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{.cpp}
1226 \# to see all objects 
1227 foreach var [directory] {display $var} 
1228
1229 \# to select two objects and erase the other ones 
1230 donly . . 
1231 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1232
1233
1234 @subsubsection occt_draw_4_1_14 erase, clear, 2dclear
1235
1236 Syntax:      
1237
1238 ~~~~~
1239 erase [varname varname ...] 
1240 clear 
1241 2dclear 
1242 ~~~~~
1243
1244 **erase** removes objects from all views. **erase** without arguments erases everything in 2d and 3d. 
1245
1246 **clear** erases only 3d objects and **2dclear** only 2d objects. **erase** without arguments is similar to  **clear; 2dclear**.
1247
1248
1249 **Example:** 
1250 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{.cpp}
1251 # erase eveerything with a name starting with c_ 
1252 foreach var [directory c_*] {erase $var} 
1253
1254 # clear 2d views 
1255 2dclear 
1256 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1257
1258 @subsubsection occt_draw_4_1_15 repaint, dflush
1259
1260
1261 Syntax:
1262
1263 ~~~~~
1264 repaint 
1265 dflush 
1266 ~~~~~
1267
1268 * **repaint** forces repainting of views. 
1269 * **dflush** flushes the graphic buffers. 
1270
1271 These commands are useful within loops or in scripts. 
1272
1273 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. 
1274
1275 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. 
1276
1277 See also: <a href="#occt_draw_4_1_11">pick</a> command.  
1278
1279 @subsection occt_draw_4_2 AIS viewer – view commands
1280
1281 @subsubsection occt_draw_4_2_1 vinit
1282
1283 Syntax:                  
1284 ~~~~~
1285 vinit 
1286 ~~~~~
1287 Creates the 3D viewer window 
1288
1289 @subsubsection occt_draw_4_2_2 vhelp
1290
1291 Syntax:
1292 ~~~~~
1293 vhelp 
1294 ~~~~~
1295 Displays help in the 3D viewer window. The help consists in a list of hotkeys and their functionalities. 
1296
1297 @subsubsection occt_draw_4_2_3 vtop
1298
1299 Syntax:
1300 ~~~~~
1301 vtop 
1302 ~~~~~
1303
1304 Displays top view in the 3D viewer window. 
1305
1306 **Example:** 
1307 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{.cpp}
1308 vinit 
1309 box b 10 10 10 
1310 vdisplay b 
1311 vfit 
1312 vtop 
1313 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1314
1315 @subsubsection occt_draw_4_2_4 vaxo
1316
1317 Syntax:                  
1318 ~~~~~
1319 vaxo 
1320 ~~~~~
1321
1322 Displays axonometric view in the 3D viewer window. 
1323
1324 **Example:** 
1325 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{.cpp}
1326 vinit 
1327 box b 10 10 10 
1328 vdisplay b 
1329 vfit 
1330 vaxo 
1331 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1332
1333 @subsubsection occt_draw_4_2_5 vsetbg
1334
1335 Syntax:                  
1336 ~~~~~
1337 vsetbg imagefile [filltype] 
1338 ~~~~~
1339
1340 Loads image file as background. *filltype* must be NONE, CENTERED, TILED or STRETCH. 
1341
1342 **Example:** 
1343 ~~~~~
1344 vinit 
1345 vsetbg myimage.brep CENTERED 
1346 ~~~~~
1347
1348 @subsubsection occt_draw_4_2_6 vclear
1349
1350 Syntax:                  
1351 ~~~~~
1352 vclear 
1353 ~~~~~
1354 Removes all objects from the viewer. 
1355
1356 @subsubsection occt_draw_4_2_7 vrepaint
1357
1358 Syntax:                  
1359 ~~~~~
1360 vrepaint 
1361 ~~~~~
1362 Forcedly redisplays the shape in the 3D viewer window. 
1363
1364 @subsubsection occt_draw_4_2_8 vfit
1365
1366 Syntax:                  
1367 ~~~~~
1368 vfit 
1369 ~~~~~
1370 Automatic zoom/panning. Objects in the view are visualized to occupy the maximum surface. 
1371
1372 @subsubsection occt_draw_4_2_9 vzfit
1373
1374 Syntax:                  
1375 ~~~~~
1376 vzfit 
1377 ~~~~~
1378
1379 Automatic depth panning. Objects in the view are visualized to occupy the maximum 3d space. 
1380
1381 @subsubsection occt_draw_4_2_10  vreadpixel
1382
1383 Syntax:     
1384 ~~~~~
1385 vreadpixel xPixel yPixel [{rgb|rgba|depth|hls|rgbf|rgbaf}=rgba] [name] 
1386 ~~~~~
1387 Read pixel value for active view.
1388
1389
1390 @subsubsection occt_draw_4_2_11  vselect
1391
1392 Syntax:     
1393 ~~~~~
1394 vselect x1 y1 [x2 y2 [x3 y3 ... xn yn]] [shift_selection = 0|1]
1395 ~~~~~
1396
1397 Emulates different types of selection:
1398
1399   * single mouse click selection
1400   * selection with a rectangle having the upper left and bottom right corners in <i>(x1,y1)</i> and <i>(x2,y2)</i> respectively
1401   * selection with a polygon having the corners in pixel positions <i>(x1,y1), (x2,y2),…, (xn,yn)</i>
1402   * any of these selections if shift_selection is set to 1.
1403
1404 @subsubsection occt_draw_4_2_12  vmoveto
1405
1406 Syntax:     
1407
1408 ~~~~~
1409 vmoveto x y
1410 ~~~~~
1411 Emulates cursor movement to pixel position (x,y).
1412
1413 @subsubsection occt_draw_4_2_13  vviewparams
1414
1415 Syntax:     
1416 ~~~~~
1417 vviewparams [scale center_X center_Y proj_X proj_Y proj_Z up_X up_Y up_Z at_X at_Y at_Z]
1418 ~~~~~
1419 Gets or sets the current view characteristics.
1420
1421 @subsubsection occt_draw_4_2_14  vchangeselected
1422
1423 Syntax:     
1424 ~~~~~
1425 vchangeselected shape
1426 ~~~~~
1427 Adds a shape to selection or removes one from it.
1428
1429 @subsubsection occt_draw_4_2_15  vzclipping
1430
1431 Syntax:     
1432 ~~~~~
1433 vzclipping [mode] [depth width]
1434 ~~~~~
1435 Gets or sets ZClipping mode, width and depth, where
1436  - *mode = OFF|BACK|FRONT|SLICE*
1437  - *depth* is a real value from segment [0,1]
1438  - *width* is a real value from segment [0,1]
1439
1440 @subsubsection occt_draw_4_2_16  vnbselected
1441
1442 Syntax:     
1443 ~~~~~
1444 vnbselected
1445 ~~~~~
1446 Returns the number of selected objects in the interactive context.
1447
1448 @subsubsection occt_draw_4_2_17  vantialiasing
1449
1450 Syntax:     
1451 ~~~~~
1452 valntialiasing 1|0
1453 ~~~~~
1454 Sets antialiasing if the command is called with 1 or unsets otherwise.
1455
1456 @subsubsection occt_draw_4_2_18  vpurgedisplay
1457
1458 Syntax:     
1459 ~~~~~
1460 vpurgedisplay [CollectorToo = 0|1]
1461 ~~~~~
1462 Removes structures which do not belong to objects displayed in neutral point.
1463
1464 @subsubsection occt_draw_4_2_19  vhlr
1465
1466 Syntax:     
1467 ~~~~~
1468 vhlr is_enabled={on|off}
1469 ~~~~~
1470 Switches hidden line removal (computed) mode on/off.
1471
1472 @subsubsection occt_draw_4_2_20  vhlrtype
1473
1474 Syntax:     
1475 ~~~~~
1476 vhlrtype  algo_type={algo|polyalgo} [shape_1 ... shape_n]
1477 ~~~~~
1478
1479 Changes the type of HLR algorithm used for shapes.
1480 If the algo_type is algo, the exact HLR algorithm is used, otherwise the polygonal algorithm is used for defined shapes. 
1481
1482 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.
1483
1484 **Note** that this command works with instances of *AIS_Shape* or derived classes only, other interactive object types are ignored.
1485
1486
1487 @subsection occt_draw_4_3 AIS viewer – display commands
1488
1489 @subsubsection occt_draw_4_3_1 vdisplay
1490
1491 Syntax: 
1492 ~~~~~                 
1493 vdisplay name1 [name2] … [name n] 
1494 ~~~~~
1495
1496 Displays named objects. 
1497
1498 **Example:** 
1499 ~~~~~ 
1500 vinit 
1501 box b 40 40 40 10 10 10 
1502 psphere s 20 
1503 vdisplay s b 
1504 vfit 
1505 ~~~~~ 
1506
1507 @subsubsection occt_draw_4_3_2 vdonly
1508
1509 Syntax:                  
1510 ~~~~~
1511 vdonly [name1] … [name n]
1512 ~~~~~ 
1513
1514 Displays only selected or named objects. If there are no selected or named objects, nothing is done. 
1515
1516 **Example:** 
1517 ~~~~~ 
1518 vinit 
1519 box b 40 40 40 10 10 10 
1520 psphere s 20 
1521 vdonly b 
1522 vfit
1523 ~~~~~ 
1524  
1525 @subsubsection occt_draw_4_3_3 vdisplayall
1526
1527 Syntax:                  
1528 ~~~~~ 
1529 vdisplayall 
1530 ~~~~~ 
1531
1532 Displays all created objects. 
1533
1534 **Example:** 
1535 ~~~~~ 
1536 vinit 
1537 box b 40 40 40 10 10 10 
1538 psphere s 20 
1539 vdisplayall 
1540 vfit 
1541 ~~~~~ 
1542
1543 @subsubsection occt_draw_4_3_4 verase
1544
1545 Syntax:                  
1546 ~~~~~
1547 verase [name1] [name2] … [name n]
1548 ~~~~~ 
1549
1550 Erases some selected or named objects. If there are no selected or named objects, the whole viewer is erased. 
1551
1552 **Example:** 
1553 ~~~~~
1554 vinit 
1555 box b1 40 40 40 10 10 10 
1556 box b2 -40 -40 -40 10 10 10 
1557 psphere s 20 
1558 vdisplayall 
1559 vfit 
1560 # erase only first box 
1561 verase b1 
1562 # erase second box and sphere 
1563 verase
1564 ~~~~~ 
1565
1566 @subsubsection occt_draw_4_3_5 veraseall
1567
1568 Syntax:                  
1569 ~~~~~
1570 veraseall
1571 ~~~~~ 
1572
1573 Erases all objects displayed in the viewer. 
1574
1575 **Example:**
1576 ~~~~~ 
1577 vinit 
1578 box b1 40 40 40 10 10 10 
1579 box b2 -40 -40 -40 10 10 10 
1580 psphere s 20 
1581 vdisplayall 
1582 vfit 
1583 # erase only first box 
1584 verase b1 
1585 # erase second box and sphere 
1586 verseall
1587 ~~~~~ 
1588
1589 @subsubsection occt_draw_4_3_6 vsetdispmode
1590
1591 Syntax:                  
1592 ~~~~~
1593 vsetdispmode [name] mode(0,1,2,3)
1594 ~~~~~ 
1595
1596 Sets display mode for all, selected or named objects. 
1597 * *0* (*WireFrame*), 
1598 * *1* (*Shading*), 
1599 * *2* (*Quick HideLineremoval*), 
1600 * *3* (*Exact HideLineremoval*). 
1601
1602 **Example:** 
1603 ~~~~~
1604 vinit 
1605 box b 10 10 10 
1606 vdisplay b 
1607 vsetdispmode 1 
1608 vfit
1609 ~~~~~
1610  
1611 @subsubsection occt_draw_4_3_7 vdisplaytype
1612
1613 Syntax:                  
1614 ~~~~~
1615 vdisplaytype type
1616 ~~~~~ 
1617
1618 Displays all objects of a given type. 
1619 The following types are possible: *Point*, *Axis*, *Trihedron*, *PlaneTrihedron*, *Line*, *Circle*, *Plane*, *Shape*, *ConnectedShape*, *MultiConn.Shape*, *ConnectedInter.*, *MultiConn.*, *Constraint* and *Dimension*. 
1620
1621 @subsubsection occt_draw_4_3_8 verasetype
1622
1623 Syntax:                  
1624 ~~~~~
1625 verasetype type
1626 ~~~~~ 
1627
1628 Erases all objects of a given type. 
1629 Possible type is *Point*, *Axis*, *Trihedron*, *PlaneTrihedron*, *Line*, *Circle*, *Plane*, *Shape*, *ConnectedShape*, *MultiConn.Shape*, *ConnectedInter.*, *MultiConn.*, *Constraint* and *Dimension*. 
1630
1631 @subsubsection occt_draw_4_3_9 vtypes
1632
1633 Syntax:                  
1634 ~~~~~
1635 vtypes
1636 ~~~~~ 
1637
1638 Makes a list of known types and signatures in AIS. 
1639
1640 @subsubsection occt_draw_4_3_10 vsetcolor
1641
1642 Syntax:                  
1643 ~~~~~
1644 vsetcolor [shapename] colorname
1645 ~~~~~ 
1646
1647 Sets color for all, selected or named shapes. 
1648 Possible *colorname* is: *BLACK*, *MATRAGRAY*, *MATRABLUE*, *ALICEBLUE*, *ANTIQUEWHITE*, *ANTIQUEWHITE1*, *ANTIQUEWHITE2*, *ANTIQUEWHITE3*, *ANTIQUEWHITE4*, *AQUAMARINE1*, *AQUAMARINE2*, *AQUAMARINE4*, *AZURE*, *AZURE2*, *AZURE3*, *AZURE4*, *BEIGE*, *BISQUE*, *BISQUE2*, *BISQUE3*, *BISQUE4*, *BLANCHEDALMOND*, *BLUE1*, *BLUE2*, *BLUE3*, *BLUE4*, *BLUEVIOLET*, *BROWN*, *BROWN1*, *BROWN2*, *BROWN3*, *BROWN4*, *BURLYWOOD*, *BURLYWOOD1*, *BURLYWOOD2*, *BURLYWOOD3*, *BURLYWOOD4*, *CADETBLUE*, *CADETBLUE1*, *CADETBLUE2*, *CADETBLUE3*, *CADETBLUE4*, *CHARTREUSE*, *CHARTREUSE1*, *CHARTREUSE2*, *CHARTREUSE3*, *CHARTREUSE4*, *CHOCOLATE*, *CHOCOLATE1*, *CHOCOLATE2*, *CHOCOLATE3*, *CHOCOLATE4*, *CORAL*, *CORAL1*, *CORAL2*, *CORAL3*, *CORAL4*, *CORNFLOWERBLUE*, *CORNSILK1*, *CORNSILK2*, *CORNSILK3*, *CORNSILK4*, *CYAN1*, *CYAN2*, *CYAN3*, *CYAN4*, *DARKGOLDENROD*, *DARKGOLDENROD1*, *DARKGOLDENROD2*, *DARKGOLDENROD3*, *DARKGOLDENROD4*, *DARKGREEN*, *DARKKHAKI*, *DARKOLIVEGREEN*, *DARKOLIVEGREEN1*, *DARKOLIVEGREEN2*, *DARKOLIVEGREEN3*, *DARKOLIVEGREEN4*, *DARKORANGE*, *DARKORANGE1*, *DARKORANGE2*, *DARKORANGE3*, *DARKORANGE4*, *DARKORCHID*, *DARKORCHID1*, *DARKORCHID2*, *DARKORCHID3*, *DARKORCHID4*, *DARKSALMON*, *DARKSEAGREEN*, *DARKSEAGREEN1*, *DARKSEAGREEN2*, *DARKSEAGREEN3*, *DARKSEAGREEN4*, *DARKSLATEBLUE*, *DARKSLATEGRAY1*, *DARKSLATEGRAY2*, *DARKSLATEGRAY3*, *DARKSLATEGRAY4*, *DARKSLATEGRAY*, *DARKTURQUOISE*, *DARKVIOLET*, *DEEPPINK*, *DEEPPINK2*, *DEEPPINK3*, *DEEPPINK4*, *DEEPSKYBLUE1*, *DEEPSKYBLUE2*, *DEEPSKYBLUE3*, *DEEPSKYBLUE4*, *DODGERBLUE1*, *DODGERBLUE2*, *DODGERBLUE3*, *DODGERBLUE4*, *FIREBRICK*, *FIREBRICK1*, *FIREBRICK2*, *FIREBRICK3*, *FIREBRICK4*, *FLORALWHITE*, *FORESTGREEN*, *GAINSBORO*, *GHOSTWHITE*, *GOLD*, *GOLD1*, *GOLD2*, *GOLD3*, *GOLD4*, *GOLDENROD*, *GOLDENROD1*, *GOLDENROD2*, *GOLDENROD3*, *GOLDENROD4*, *GRAY*, *GRAY0*, *GRAY1*, *GRAY10*, *GRAY11*, *GRAY12*, *GRAY13*, *GRAY14*, *GRAY15*, *GRAY16*, *GRAY17*, *GRAY18*, *GRAY19*, *GRAY2*, *GRAY20*, *GRAY21*, *GRAY22*, *GRAY23*, *GRAY24*, *GRAY25*, *GRAY26*, *GRAY27*, *GRAY28*, *GRAY29*, *GRAY3*, *GRAY30*, *GRAY31*, *GRAY32*, *GRAY33*, *GRAY34*, *GRAY35*, *GRAY36*, *GRAY37*, *GRAY38*, *GRAY39*, *GRAY4*, *GRAY40*, *GRAY41*, *GRAY42*, *GRAY43*, *GRAY44*, *GRAY45*, *GRAY46*, *GRAY47*, *GRAY48*, *GRAY49*, *GRAY5*, *GRAY50*, *GRAY51*, *GRAY52*, *GRAY53*, *GRAY54*, *GRAY55*, *GRAY56*, *GRAY57*, *GRAY58*, *GRAY59*, *GRAY6*, *GRAY60*, *GRAY61*, *GRAY62*, *GRAY63*, *GRAY64*, *GRAY65*, *GRAY66*, *GRAY67*, *GRAY68*, *GRAY69*, *GRAY7*, *GRAY70*, *GRAY71*, *GRAY72*, *GRAY73*, *GRAY74*, *GRAY75*, *GRAY76*, *GRAY77*, *GRAY78*, *GRAY79*, *GRAY8*, *GRAY80*, *GRAY81*, *GRAY82*, *GRAY83*, *GRAY85*, *GRAY86*, *GRAY87*, *GRAY88*, *GRAY89*, *GRAY9*, *GRAY90*, *GRAY91*, *GRAY92*, *GRAY93*, *GRAY94*, *GRAY95*, *GREEN*, *GREEN1*, *GREEN2*, *GREEN3*, *GREEN4*, *GREENYELLOW*, *GRAY97*, *GRAY98*, *GRAY99*, *HONEYDEW*, *HONEYDEW2*, *HONEYDEW3*, *HONEYDEW4*, *HOTPINK*, *HOTPINK1*, *HOTPINK2*, *HOTPINK3*, *HOTPINK4*, *INDIANRED*, *INDIANRED1*, *INDIANRED2*, *INDIANRED3*, *INDIANRED4*, *IVORY*, *IVORY2*, *IVORY3*, *IVORY4*, *KHAKI*, *KHAKI1*, *KHAKI2*, *KHAKI3*, *KHAKI4*, *LAVENDER*, *LAVENDERBLUSH1*, *LAVENDERBLUSH2*, *LAVENDERBLUSH3*, *LAVENDERBLUSH4*, *LAWNGREEN*, *LEMONCHIFFON1*, *LEMONCHIFFON2*, *LEMONCHIFFON3*, *LEMONCHIFFON4*, *LIGHTBLUE*, *LIGHTBLUE1*, *LIGHTBLUE2*, *LIGHTBLUE3*, *LIGHTBLUE4*, *LIGHTCORAL*, *LIGHTCYAN1*, *LIGHTCYAN2*, *LIGHTCYAN3*, *LIGHTCYAN4*, *LIGHTGOLDENROD*, *LIGHTGOLDENROD1*, *LIGHTGOLDENROD2*, *LIGHTGOLDENROD3*, *LIGHTGOLDENROD4*, *LIGHTGOLDENRODYELLOW*, *LIGHTGRAY*, *LIGHTPINK*, *LIGHTPINK1*, *LIGHTPINK2*, *LIGHTPINK3*, *LIGHTPINK4*, *LIGHTSALMON1*, *LIGHTSALMON2*, *LIGHTSALMON3*, *LIGHTSALMON4*, *LIGHTSEAGREEN*, *LIGHTSKYBLUE*, *LIGHTSKYBLUE1*, *LIGHTSKYBLUE2*, *LIGHTSKYBLUE3*, *LIGHTSKYBLUE4*, *LIGHTSLATEBLUE*, *LIGHTSLATEGRAY*, *LIGHTSTEELBLUE*, *LIGHTSTEELBLUE1*, *LIGHTSTEELBLUE2*, *LIGHTSTEELBLUE3*, *LIGHTSTEELBLUE4*, *LIGHTYELLOW*, *LIGHTYELLOW2*, *LIGHTYELLOW3*, *LIGHTYELLOW4*, *LIMEGREEN*, *LINEN*, *MAGENTA1*, *MAGENTA2*, *MAGENTA3*, *MAGENTA4*, *MAROON*, *MAROON1*, *MAROON2*, *MAROON3*, *MAROON4*, *MEDIUMAQUAMARINE*, *MEDIUMORCHID*, *MEDIUMORCHID1*, *MEDIUMORCHID2*, *MEDIUMORCHID3*, *MEDIUMORCHID4*, *MEDIUMPURPLE*, *MEDIUMPURPLE1*, *MEDIUMPURPLE2*, *MEDIUMPURPLE3*, *MEDIUMPURPLE4*, *MEDIUMSEAGREEN*, *MEDIUMSLATEBLUE*, *MEDIUMSPRINGGREEN*, *MEDIUMTURQUOISE*, *MEDIUMVIOLETRED*, *MIDNIGHTBLUE*, *MINTCREAM*, *MISTYROSE*, *MISTYROSE2*, *MISTYROSE3*, *MISTYROSE4*, *MOCCASIN*, *NAVAJOWHITE1*, *NAVAJOWHITE2*, *NAVAJOWHITE3*, *NAVAJOWHITE4*, *NAVYBLUE*, *OLDLACE*, *OLIVEDRAB*, *OLIVEDRAB1*, *OLIVEDRAB2*, *OLIVEDRAB3*, *OLIVEDRAB4*, *ORANGE*, *ORANGE1*, *ORANGE2*, *ORANGE3*, *ORANGE4*, *ORANGERED*, *ORANGERED1*, *ORANGERED2*, *ORANGERED3*, *ORANGERED4*, *ORCHID*, *ORCHID1*, *ORCHID2*, *ORCHID3*, *ORCHID4*, *PALEGOLDENROD*, *PALEGREEN*, *PALEGREEN1*, *PALEGREEN2*, *PALEGREEN3*, *PALEGREEN4*, *PALETURQUOISE*, *PALETURQUOISE1*, *PALETURQUOISE2*, *PALETURQUOISE3*, *PALETURQUOISE4*, *PALEVIOLETRED*, *PALEVIOLETRED1*, *PALEVIOLETRED2*, *PALEVIOLETRED3*, *PALEVIOLETRED4*, *PAPAYAWHIP*, *PEACHPUFF*, *PEACHPUFF2*, *PEACHPUFF3*, *PEACHPUFF4*, *PERU*, *PINK*, *PINK1*, *PINK2*, *PINK3*, *PINK4*, *PLUM*, *PLUM1*, *PLUM2*, *PLUM3*, *PLUM4*, *POWDERBLUE*, *PURPLE*, *PURPLE1*, *PURPLE2*, *PURPLE3*, *PURPLE4*, *RED*, *RED1*, *RED2*, *RED3*, *RED4*, *ROSYBROWN*, *ROSYBROWN1*, *ROSYBROWN2*, *ROSYBROWN3*, *ROSYBROWN4*, *ROYALBLUE*, *ROYALBLUE1*, *ROYALBLUE2*, *ROYALBLUE3*, *ROYALBLUE4*, *SADDLEBROWN*, *SALMON*, *SALMON1*, *SALMON2*, *SALMON3*, *SALMON4*, *SANDYBROWN*, *SEAGREEN*, *SEAGREEN1*, *SEAGREEN2*, *SEAGREEN3*, *SEAGREEN4*, *SEASHELL*, *SEASHELL2*, *SEASHELL3*, *SEASHELL4*, *BEET*, *TEAL*, *SIENNA*, *SIENNA1*, *SIENNA2*, *SIENNA3*, *SIENNA4*, *SKYBLUE*, *SKYBLUE1*, *SKYBLUE2*, *SKYBLUE3*, *SKYBLUE4*, *SLATEBLUE*, *SLATEBLUE1*, *SLATEBLUE2*, *SLATEBLUE3*, *SLATEBLUE4*, *SLATEGRAY1*, *SLATEGRAY2*, *SLATEGRAY3*, *SLATEGRAY4*, *SLATEGRAY*, *SNOW*, *SNOW2*, *SNOW3*, *SNOW4*, *SPRINGGREEN*, *SPRINGGREEN2*, *SPRINGGREEN3*, *SPRINGGREEN4*, *STEELBLUE*, *STEELBLUE1*, *STEELBLUE2*, *STEELBLUE3*, *STEELBLUE4*, *TAN*, *TAN1*, *TAN2*, *TAN3*, *TAN4*, *THISTLE*, *THISTLE1*, *THISTLE2*, *THISTLE3*, *THISTLE4*, *TOMATO*, *TOMATO1*, *TOMATO2*, *TOMATO3*, *TOMATO4*, *TURQUOISE*, *TURQUOISE1*, *TURQUOISE2*, *TURQUOISE3*, *TURQUOISE4*, *VIOLET*, *VIOLETRED*, *VIOLETRED1*, *VIOLETRED2*, *VIOLETRED3*, *VIOLETRED4*, *WHEAT*, *WHEAT1*, *WHEAT2*, *WHEAT3*, *WHEAT4*, *WHITE*, *WHITESMOKE*, *YELLOW*, *YELLOW1*, *YELLOW2*, *YELLOW3*, *YELLOW4* and *YELLOWGREEN*.
1649
1650 @subsubsection occt_draw_4_3_11 vunsetcolor
1651
1652 Syntax:                  
1653 ~~~~~
1654 vunsetcolor [shapename]
1655 ~~~~~ 
1656
1657 Sets default color for all, selected or named shapes. 
1658
1659 @subsubsection occt_draw_4_3_12 vsettransparency
1660
1661 Syntax:                  
1662 ~~~~~
1663 vsettransparency [shapename] coeficient
1664 ~~~~~ 
1665
1666 Sets transparency for all selected or named shapes. The *coefficient* may be between 0.0 (opaque) and 1.0 (fully transparent). 
1667
1668 **Warning**: at 1.0 the shape becomes invisible.
1669  
1670 **Example:** 
1671 ~~~~~
1672 vinit 
1673 box b 10 10 10 
1674 psphere s 20 
1675 vdisplay b s 
1676 vfit 
1677 vsetdispmode 1 
1678 vsettransparency b 0.5
1679 ~~~~~ 
1680
1681 @subsubsection occt_draw_4_3_13 vunsettransparency
1682
1683 Syntax:                  
1684 ~~~~~
1685 vunsettransparency [shapename]
1686 ~~~~~ 
1687
1688 Sets default transparency (0.0) for all selected or named shapes. 
1689
1690 @subsubsection occt_draw_4_3_14 vsetmaterial
1691
1692 Syntax:                  
1693 ~~~~~
1694 vsetmaterial [shapename] materialname
1695 ~~~~~ 
1696
1697 Sets material for all selected or named shapes. 
1698
1699 **materialname** can be *BRASS*, *BRONZE*, *COPPER*, *GOLD*, *PEWTER*, *PLASTER*, *PLASTIC*, *SILVER*, *STEEL*, *STONE*, *SHINY_PLASTIC*, *SATIN*, *METALIZED*, *NEON_GNC*, *CHROME*, *ALUMINIUM*, *OBSIDIAN*, *NEON_PHC* or *JADE*.
1700  
1701 **Example:** 
1702 ~~~~~
1703 vinit 
1704 psphere s 20 
1705 vdisplay s 
1706 vfit 
1707 vsetdispmode 1 
1708 vsetmaterial s JADE 
1709 ~~~~~
1710
1711 @subsubsection occt_draw_4_3_15 vunsetmaterial
1712
1713 Syntax:                  
1714 ~~~~~
1715 vunsetmaterial [shapename]
1716 ~~~~~ 
1717
1718 Sets default material for all selected or named shapes. 
1719
1720 @subsubsection occt_draw_4_3_16 vsetwidth
1721
1722 Syntax:                  
1723 ~~~~~
1724 vsetwidth [shapename] coeficient
1725 ~~~~~ 
1726
1727 Sets width of the edges for all selected or named shapes. 
1728 The *coefficient* may be between 0.0 and 10.0.
1729  
1730 **Example:** 
1731 ~~~~~
1732 vinit 
1733 box b 10 10 10 
1734 vdisplay b 
1735 vfit 
1736 vsetwidth b 5
1737 ~~~~~ 
1738
1739 @subsubsection occt_draw_4_3_17 vunsetwidth
1740
1741 Syntax:                  
1742 ~~~~~
1743 vunsetwidth [shapename]
1744 ~~~~~ 
1745
1746 Sets default width of edges (0.0) for all selected or named shapes. 
1747
1748 @subsubsection occt_draw_4_3_18 vsetshading
1749
1750 Syntax:                  
1751 ~~~~~
1752 vsetshading shapename [coefficient]
1753 ~~~~~ 
1754
1755 Sets deflection coefficient that defines the quality of the shape’s representation in the shading mode. Default coefficient is 0.0008. 
1756
1757 **Example:** 
1758 ~~~~~
1759 vinit 
1760 psphere s 20 
1761 vdisplay s 
1762 vfit 
1763 vsetdispmode 1 
1764 vsetshading s 0.005
1765 ~~~~~
1766  
1767 @subsubsection occt_draw_4_3_19 vunsetshading
1768
1769 Syntax:                  
1770 ~~~~~
1771 vunsetshading [shapename]
1772 ~~~~~ 
1773
1774 Sets default deflection coefficient (0.0008) that defines the quality of the shape’s representation in the shading mode. Default coefficient is 0.0008. 
1775
1776 @subsubsection occt_draw_4_3_20 vsetam
1777
1778 Syntax:                  
1779 ~~~~~
1780 vsetam [shapename] mode
1781 ~~~~~ 
1782
1783 Activates selection mode for all selected or named shapes: 
1784 * *0* for *shape* itself, 
1785 * *1* (*vertices*), 
1786 * *2* (*edges*), 
1787 * *3* (*wires*), 
1788 * *4* (*faces*), 
1789 * *5* (*shells*),
1790 * *6* (*solids*),
1791 * *7* (*compounds*).
1792  
1793 **Example:** 
1794 ~~~~~
1795 vinit 
1796 box b 10 10 10 
1797 vdisplay b 
1798 vfit 
1799 vsetam b 2
1800 ~~~~~
1801  
1802 @subsubsection occt_draw_4_3_21 vunsetam
1803
1804 Syntax:                  
1805 ~~~~~
1806 vunsetam
1807 ~~~~~ 
1808
1809 Deactivates all selection modes for all shapes. 
1810
1811 @subsubsection occt_draw_4_3_22 vdump
1812
1813 Syntax:                  
1814 ~~~~~
1815 vdump <filename>.{png|xwd|bmp}
1816 ~~~~~ 
1817
1818 Extracts the contents of the viewer window to a png, XWD or BMP file. 
1819
1820 @subsubsection occt_draw_4_3_23 vdir
1821
1822 Syntax:                  
1823 ~~~~~
1824 vdir
1825 ~~~~~ 
1826
1827 Displays the list of displayed objects. 
1828
1829 @subsubsection occt_draw_4_3_24 vsub
1830
1831 Syntax:                  
1832 ~~~~~
1833 vsub 0/1(on/off)[shapename]
1834 ~~~~~ 
1835
1836 Hilights/unhilights named or selected objects which are displayed at neutral state with subintensity color.
1837  
1838 **Example:** 
1839 ~~~~~
1840 vinit 
1841 box b 10 10 10 
1842 psphere s 20 
1843 vdisplay b s 
1844 vfit 
1845 vsetdispmode 1 
1846 vsub b 1
1847 ~~~~~ 
1848
1849 @subsubsection occt_draw_4_3_25 vardis
1850
1851 Syntax:                  
1852 ~~~~~
1853 vardis
1854 ~~~~~ 
1855
1856 Displays active areas (for each activated sensitive entity, one or several 2D bounding boxes are displayed, depending on the implementation of a particular entity). 
1857
1858 @subsubsection occt_draw_4_3_26 varera
1859
1860 Syntax:                  
1861 ~~~~~
1862 varera
1863 ~~~~~ 
1864
1865 Erases active areas. 
1866
1867 @subsubsection occt_draw_4_3_27 vsensdis
1868
1869 Syntax:                  
1870 ~~~~~
1871 vsensdis
1872 ~~~~~ 
1873
1874 Displays active entities (sensitive entities of one of the standard types corresponding to active selection modes). 
1875
1876 Standard entity types are those defined in Select3D package: 
1877   * sensitive box
1878   * sensitive face
1879   * sensitive curve
1880   * sensitive segment
1881   * sensitive circle
1882   * sensitive point
1883   * sensitive triangulation
1884   * sensitive triangle
1885 Custom (application-defined) sensitive entity types are not processed by this command. 
1886
1887 @subsubsection occt_draw_4_3_28 vsensera
1888
1889 Syntax:                  
1890 ~~~~~
1891 vsensera
1892 ~~~~~ 
1893
1894 Erases active entities. 
1895
1896 @subsubsection occt_draw_4_3_29 vperf
1897
1898 Syntax:                  
1899 ~~~~~
1900 vperf shapename 1/0 (Transformation/Loacation) 1/0 (Primitives sensibles ON/OFF)
1901 ~~~~~ 
1902
1903 Tests the animation of an object along a predefined trajectory. 
1904
1905 **Example:** 
1906 ~~~~~
1907 vinit 
1908 box b 10 10 10 
1909 psphere s 20 
1910 vdisplay b s 
1911 vfit 
1912 vsetdispmode 0 
1913 vperf b 1 1
1914 ~~~~~
1915  
1916 @subsubsection occt_draw_4_3_30 vr
1917
1918 Syntax:                  
1919 ~~~~~
1920 vr filename
1921 ~~~~~ 
1922
1923 Reads shape from BREP-format file and displays it in the viewer. 
1924
1925 **Example:** 
1926 ~~~~~
1927 vinit 
1928 vr myshape.brep
1929 ~~~~~
1930  
1931 @subsubsection occt_draw_4_3_31 vstate
1932
1933 Syntax:                  
1934 ~~~~~
1935 vstate [name1] … [name n]
1936 ~~~~~ 
1937
1938 Makes a list of the status (**Displayed** or **Not Displayed**) of some selected or named objects. 
1939
1940
1941 @subsection occt_draw_4_4 AIS viewer – object commands
1942
1943 @subsubsection occt_draw_4_4_1 vtrihedron
1944
1945 Syntax:                  
1946 ~~~~~
1947 vtrihedron name [X0] [Y0] [Z0] [Zu] [Zv] [Zw] [Xu] [Xv] [Xw]
1948 ~~~~~ 
1949
1950 Creates a new *AIS_Trihedron* object. If no argument is set, the default trihedron (0XYZ) is created.
1951  
1952 **Example:** 
1953 ~~~~~
1954 vinit 
1955 vtrihedron tr
1956 ~~~~~ 
1957
1958 @subsubsection occt_draw_4_4_2 vplanetri
1959
1960 Syntax:                  
1961 ~~~~~
1962 vplanetri name
1963 ~~~~~ 
1964
1965 Creates a plane from a trihedron selection. 
1966
1967
1968 @subsubsection occt_draw_4_4_3 vsize
1969
1970 Syntax:                  
1971 ~~~~~
1972 vsize [name] [size]
1973 ~~~~~ 
1974
1975 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.
1976  
1977 **Example:** 
1978 ~~~~~
1979 vinit 
1980 vtrihedron tr1 
1981 vtrihedron tr2 0 0 0 1 0 0 1 0 0 
1982 vsize tr2 400
1983 ~~~~~ 
1984
1985 @subsubsection occt_draw_4_4_4 vaxis
1986
1987 Syntax:                  
1988 ~~~~~
1989 vaxis name [Xa Ya Za Xb Yb Zb]
1990 ~~~~~ 
1991
1992 Creates an axis. If  the values are not defined, an axis is created by interactive selection of two vertices or one edge
1993  
1994 **Example:** 
1995 ~~~~~
1996 vinit 
1997 vtrihedron tr 
1998 vaxis axe1 0 0 0 1 0 0 
1999 ~~~~~
2000
2001 @subsubsection occt_draw_4_4_5 vaxispara
2002
2003 Syntax:                  
2004 ~~~~~
2005 vaxispara nom
2006 ~~~~~ 
2007
2008 Creates an axis by interactive selection of an edge and a vertex. 
2009
2010 @subsubsection occt_draw_4_4_6 vaxisortho
2011
2012 Syntax:                  
2013 ~~~~~
2014 vaxisotrho name
2015 ~~~~~ 
2016
2017 Creates an axis by interactive selection of an edge and a vertex. The axis will be orthogonal to the selected edge. 
2018
2019 @subsubsection occt_draw_4_4_7 vpoint
2020
2021 Syntax:                  
2022 ~~~~~
2023 vpoint name [Xa Ya Za]
2024 ~~~~~ 
2025
2026 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). 
2027
2028 **Example:** 
2029 ~~~~~
2030 vinit 
2031 vpoint p 0 0 0 
2032 ~~~~~
2033
2034 @subsubsection occt_draw_4_4_8 vplane
2035
2036 Syntax:                  
2037 ~~~~~
2038 vplane name [AxisName] [PointName] 
2039 vplane name [PointName] [PointName] [PointName] 
2040 vplane name [PlaneName] [PointName]
2041 ~~~~~ 
2042
2043 Creates a plane from named or interactively selected entities.
2044  
2045 **Example:** 
2046 ~~~~~
2047 vinit 
2048 vpoint p1 0 50 0 
2049 vaxis axe1 0 0 0 0 0 1 
2050 vtrihedron tr 
2051 vplane plane1 axe1 p1 
2052 ~~~~~
2053
2054 @subsubsection occt_draw_4_4_9 vplanepara
2055
2056 Syntax:                  
2057 ~~~~~
2058 vplanepara name
2059 ~~~~~ 
2060
2061 Creates a plane from interactively selected vertex and face. 
2062
2063 @subsubsection occt_draw_4_4_10 vplaneortho
2064
2065 Syntax:                  
2066 ~~~~~
2067 vplaneortho name
2068 ~~~~~ 
2069
2070 Creates a plane from interactive selected face and coplanar edge. 
2071
2072 @subsubsection occt_draw_4_4_11 vline
2073
2074 Syntax:                  
2075 ~~~~~
2076 vline name [PointName] [PointName] 
2077 vline name [Xa Ya Za Xb Yb Zb]
2078 ~~~~~ 
2079
2080 Creates a line from coordinates, named or interactively selected vertices. 
2081
2082 **Example:** 
2083 ~~~~~
2084 vinit 
2085 vtrihedron tr 
2086 vpoint p1 0 50 0 
2087 vpoint p2 50 0 0 
2088 vline line1 p1 p2 
2089 vline line2 0 0 0 50 0 1 
2090 ~~~~~
2091
2092 @subsubsection occt_draw_4_4_12 vcircle
2093
2094 Syntax:      
2095 ~~~~~
2096 vcircle name [PointName PointName PointName IsFilled] 
2097 vcircle name [PlaneName PointName Radius IsFilled] 
2098 ~~~~~
2099
2100 Creates a circle from named or interactively selected entities.  Parameter IsFilled is defined as 0 or 1.
2101  
2102 **Example:** 
2103 ~~~~~
2104 vinit 
2105 vtrihedron tr 
2106 vpoint p1 0 50 0 
2107 vpoint p2 50 0 0 
2108 vpoint p3 0 0 0 
2109 vcircle circle1 p1 p2 p3 1
2110 ~~~~~ 
2111
2112 @subsubsection occt_draw_4_4_13 vtri2d
2113
2114 Syntax:                  
2115 ~~~~~
2116 vtri2d name
2117 ~~~~~ 
2118
2119 Creates a plane with a 2D trihedron from an interactively selected face. 
2120
2121 @subsubsection occt_draw_4_4_14 vselmode
2122
2123 Syntax:                  
2124 ~~~~~
2125 vselmode [object] mode On/Off
2126 ~~~~~ 
2127
2128 Sets the selection mode for an object. If the object value is not defined, the selection mode is set for all displayed objects. 
2129 Value *On* is defined as 1 and *Off* – as 0. 
2130
2131 **Example:** 
2132 ~~~~~
2133 vinit 
2134 vpoint p1 0 0 0 
2135 vpoint p2 50 0 0 
2136 vpoint p3 25 40 0 
2137 vtriangle triangle1 p1 p2 p3 
2138 ~~~~~
2139
2140 @subsubsection occt_draw_4_4_15 vconnect, vconnectsh
2141
2142 Syntax:                  
2143 ~~~~~
2144 vconnect name object Xo Yo Zo Xu Xv Xw Zu Zv Zw 
2145 vconnectsh name shape Xo Yo Zo Xu Xv Xw Zu Zv Zw
2146 ~~~~~ 
2147
2148 Creates and displays an object with input location connected to a named entity. 
2149 The difference between these two commands is that the object created by *vconnect* does not support the selection modes different from 0. 
2150
2151 **Example:** 
2152 ~~~~~
2153 Vinitvinit 
2154 vpoint p1 0 0 0 
2155 vpoint p2 50 0 0 
2156 vsegment segment p1 p2 
2157 restore CrankArm.brep obj 
2158 vdisplay obj 
2159 vconnectsh new obj 100100100 1 0 0 0 0 1
2160 ~~~~~ 
2161
2162 @subsubsection occt_draw_4_4_16 vtriangle
2163
2164 Syntax:                  
2165 ~~~~~
2166 vtriangle name PointName PointName PointName
2167 ~~~~~ 
2168
2169 Creates and displays a filled triangle from named points. 
2170
2171 **Example:** 
2172 ~~~~~
2173 vinit 
2174 vpoint p1 0 0 0 
2175 vpoint p2 50 0 0 
2176 vpoint p3 25 40 0 
2177 vtriangle triangle1 p1 p2 p3
2178 ~~~~~ 
2179
2180 @subsubsection occt_draw_4_4_17 vsegment
2181
2182 Syntax:                  
2183 ~~~~~
2184 vsegment name PointName PointName 
2185 ~~~~~
2186
2187 Creates and displays a segment from named points. 
2188
2189 **Example:** 
2190 ~~~~~
2191 Vinit 
2192 vpoint p1 0 0 0 
2193 vpoint p2 50 0 0 
2194 vsegment segment p1 p2 
2195 ~~~~~
2196
2197 @subsection occt_draw_4_5 AIS viewer – Mesh Visualization Service
2198
2199 **MeshVS** (Mesh Visualization Service) component provides flexible means of displaying meshes with associated pre- and post- processor data.
2200
2201 @subsubsection occt_draw_4_5_1 meshfromstl
2202
2203 Syntax:                  
2204 ~~~~~
2205 meshfromstl meshname file
2206 ~~~~~ 
2207
2208 Creates a *MeshVS_Mesh* object based on STL file data. The object will be displayed immediately.
2209  
2210 **Example:**
2211 ~~~~~ 
2212 meshfromstl mesh myfile.stl
2213 ~~~~~ 
2214
2215 @subsubsection occt_draw_4_5_2 meshdispmode
2216
2217 Syntax:                  
2218 ~~~~~
2219 meshdispmode meshname displaymode
2220 ~~~~~ 
2221
2222 Changes the display mode of object **meshname**. The **displaymode** is integer, which can be:
2223 * *1* for *wireframe*, 
2224 * *2* for *shading* mode, or
2225 * *3* for *shrink* mode. 
2226
2227 **Example:** 
2228 ~~~~~
2229 vinit 
2230 meshfromstl mesh myfile.stl 
2231 meshdispmode mesh 2
2232 ~~~~~ 
2233
2234 @subsubsection occt_draw_4_5_3 meshselmode
2235
2236 Syntax:                  
2237 ~~~~~
2238 meshselmode meshname selectionmode
2239 ~~~~~ 
2240
2241 Changes the selection mode of object **meshname**. The *selectionmode* is integer OR-combination of mode flags. The basic flags are the following: 
2242 * *1* – node selection;
2243 * *2* – 0D elements (not supported in STL); 
2244 * *4* – links (not supported in STL); 
2245 * *8* – faces.
2246  
2247 **Example:** 
2248 ~~~~~
2249 vinit 
2250 meshfromstl mesh myfile.stl 
2251 meshselmode mesh 1
2252 ~~~~~ 
2253
2254 @subsubsection occt_draw_4_5_4 meshshadcolor
2255
2256 Syntax:                  
2257 ~~~~~
2258 meshshadcolor meshname red green blue
2259 ~~~~~ 
2260
2261 Changes the face interior color of object **meshname**. The *red*, *green* and *blue* are real values between *0* and *1*.
2262  
2263 **Example:** 
2264 ~~~~~
2265 vinit 
2266 meshfromstl mesh myfile.stl 
2267 meshshadcolormode mesh 0.5 0.5 0.5
2268 ~~~~~ 
2269
2270 @subsubsection occt_draw_4_5_5 meshlinkcolor
2271
2272 Syntax:                  
2273 ~~~~~
2274 meshlinkcolor meshname red green blue
2275 ~~~~~ 
2276
2277 Changes the color of face borders for object **meshname**. The *red*, *green* and *blue* are real values between *0* and *1*.
2278  
2279 **Example:** 
2280 ~~~~~
2281 vinit 
2282 meshfromstl mesh myfile.stl 
2283 meshlinkcolormode mesh 0.5 0.5 0.5
2284 ~~~~~ 
2285
2286 @subsubsection occt_draw_4_5_6 meshmat
2287
2288 Syntax:                  
2289 ~~~~~
2290 meshmat meshname material
2291 ~~~~~ 
2292
2293 Changes the material of object **meshname**.
2294
2295 *material* is represented with an integer value as follows (equivalent to enumeration *Graphic3d_NameOfMaterial*): 
2296 * *0 – BRASS,* 
2297 * *1 – BRONZE,* 
2298 * *2 - COPPER,* 
2299 * *3 - GOLD,* 
2300 * *4 - PEWTER,* 
2301 * *5 - PLASTER,* 
2302 * *6 - PLASTIC,* 
2303 * *7 - SILVER,* 
2304 * *8 - STEEL,* 
2305 * *9 - STONE,* 
2306 * *10 - SHINY_PLASTIC,* 
2307 * *11 - SATIN,*
2308 * *12 - METALIZED,* 
2309 * *13 - NEON_GNC,* 
2310 * *14 - CHROME,*
2311 * *15 - ALUMINIUM,*
2312 * *16 - OBSIDIAN,* 
2313 * *17 - NEON_PHC,* 
2314 * *18 - JADE,*
2315 * *19 - DEFAULT,* 
2316 * *20 - UserDefined*
2317  
2318 **Example:** 
2319 ~~~~~
2320 vinit 
2321 meshfromstl mesh myfile.stl 
2322 meshmat mesh JADE 
2323 ~~~~~
2324
2325 @subsubsection occt_draw_4_5_7 meshshrcoef
2326
2327 Syntax:                  
2328 ~~~~~
2329 meshshrcoef meshname shrinkcoefficient
2330 ~~~~~ 
2331
2332 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.
2333  
2334 **Example:** 
2335 ~~~~~
2336 vinit 
2337 meshfromstl mesh myfile.stl 
2338 meshshrcoef mesh 0.05
2339 ~~~~~ 
2340
2341 @subsubsection occt_draw_4_5_8 meshshow
2342
2343 Syntax:                  
2344 ~~~~~
2345 meshshow meshname
2346 ~~~~~ 
2347
2348 Displays **meshname** in the viewer (if it is erased).
2349  
2350 **Example:** 
2351 ~~~~~
2352 vinit 
2353 meshfromstl mesh myfile.stl 
2354 meshshow mesh
2355 ~~~~~ 
2356
2357 @subsubsection occt_draw_4_5_9 meshhide
2358
2359 Syntax:                  
2360 ~~~~~
2361 meshhide meshname
2362 ~~~~~ 
2363
2364 Hides **meshname** in the viewer. 
2365
2366 **Example:** 
2367 ~~~~~
2368 vinit 
2369 meshfromstl mesh myfile.stl 
2370 meshhide mesh
2371 ~~~~~ 
2372
2373 @subsubsection occt_draw_4_5_10 meshhidesel
2374
2375 Syntax:                  
2376 ~~~~~
2377 meshhidesel meshname
2378 ~~~~~ 
2379
2380 Hides only selected entities. The other part of **meshname** remains visible. 
2381
2382 @subsubsection occt_draw_4_5_11 meshshowsel
2383
2384 Syntax:                  
2385 ~~~~~
2386 meshshowsel meshname
2387 ~~~~~ 
2388
2389 Shows only selected entities. The other part of **meshname** becomes invisible. 
2390
2391 @subsubsection occt_draw_4_5_12 meshshowall
2392
2393 Syntax:                  
2394 ~~~~~
2395 meshshowall meshname
2396 ~~~~~ 
2397
2398 Changes the state of all entities to visible for **meshname**. 
2399
2400 @subsubsection occt_draw_4_5_13 meshdelete
2401
2402 Syntax:                  
2403 ~~~~~
2404 meshdelete meshname
2405 ~~~~~ 
2406
2407 Deletes MeshVS_Mesh object **meshname**. 
2408
2409 **Example:** 
2410 ~~~~~
2411 vinit 
2412 meshfromstl mesh myfile.stl 
2413 meshdelete mesh 
2414 ~~~~~
2415
2416 @section occt_draw_5 OCAF commands
2417
2418
2419 This chapter contains a set of commands for Open CASCADE Technology Application Framework (OCAF). 
2420
2421
2422 @subsection occt_draw_5_1 Application commands
2423
2424
2425 @subsubsection occt_draw_5_1_1 NewDocument
2426
2427 Syntax:       
2428 ~~~~~
2429 NewDocument docname [format]
2430 ~~~~~ 
2431
2432 Creates a new **docname** document with MDTV-Standard or described format. 
2433
2434 **Example:** 
2435 ~~~~~
2436 # Create new document with default (MDTV-Standard) format 
2437 NewDocument D 
2438
2439 # Create new document with BinOcaf format 
2440 NewDocument D2 BinOcaf 
2441 ~~~~~
2442
2443 @subsubsection occt_draw_5_1_2 IsInSession
2444
2445 Syntax:       
2446 ~~~~~
2447 IsInSession path
2448 ~~~~~ 
2449
2450 Returns *0*, if **path** document is managed by the application session, *1* – otherwise. 
2451
2452 **Example:** 
2453 ~~~~~
2454 IsInSession /myPath/myFile.std 
2455 ~~~~~
2456
2457 @subsubsection occt_draw_5_1_3 ListDocuments
2458
2459 Syntax:       
2460 ~~~~~
2461 ListDocuments
2462 ~~~~~ 
2463
2464 Makes a list of documents handled during the session of the application. 
2465
2466
2467 @subsubsection occt_draw_5_1_4 Open
2468
2469 Syntax:       
2470 ~~~~~
2471 Open path docname
2472 ~~~~~ 
2473
2474 Retrieves the document of file **docname** in the path **path**. Overwrites the document, if it is already in session. 
2475
2476 **Example:** 
2477 ~~~~~
2478 Open /myPath/myFile.std D
2479 ~~~~~ 
2480
2481 @subsubsection occt_draw_5_1_5 Close
2482
2483 Syntax:       
2484 ~~~~~
2485 Close docname
2486 ~~~~~ 
2487
2488 Closes **docname** document. The document is no longer handled by the applicative session. 
2489
2490 **Example:** 
2491 ~~~~~
2492 Close D 
2493 ~~~~~
2494
2495 @subsubsection occt_draw_5_1_6 Save
2496
2497 Syntax:       
2498 ~~~~~
2499 Save docname
2500 ~~~~~ 
2501
2502 Saves **docname** active document. 
2503
2504 **Example:** 
2505 ~~~~~
2506 Save D 
2507 ~~~~~
2508
2509 @subsubsection occt_draw_5_1_7 SaveAs
2510
2511 Syntax:       
2512 ~~~~~
2513 SaveAs docname path
2514 ~~~~~ 
2515
2516 Saves the active document in the file **docname** in the path **path**. Overwrites the file if it already exists. 
2517
2518 **Example:** 
2519 ~~~~~
2520 SaveAs D /myPath/myFile.std
2521 ~~~~~ 
2522
2523 @subsection occt_draw_5_2 Basic commands
2524
2525 @subsubsection occt_draw_5_2_1 Label
2526
2527 Syntax:   
2528
2529 ~~~~~
2530 Label docname entry
2531 ~~~~~
2532
2533 Creates the label expressed by <i>\<entry\></i> if it does not exist.
2534
2535 Example
2536 ~~~~~
2537 Label D 0:2
2538 ~~~~~
2539
2540 @subsubsection occt_draw_5_2_2 NewChild
2541
2542 Syntax:   
2543
2544 ~~~~~
2545 NewChild docname [taggerlabel = Root label]
2546 ~~~~~
2547 Finds (or creates) a *TagSource* attribute located at father label of <i>\<taggerlabel\></i> and makes a new child label.
2548
2549 Example
2550 ~~~~~
2551 # Create new child of root label
2552 NewChild D
2553
2554 # Create new child of existing label
2555 Label D 0:2
2556 NewChild D 0:2
2557 ~~~~~
2558
2559 @subsubsection occt_draw_5_2_3 Children
2560
2561 Syntax:  
2562 ~~~~~
2563 Children docname label
2564 ~~~~~
2565 Returns the list of attributes of label.
2566
2567 Example
2568 ~~~~~
2569 Children D 0:2
2570 ~~~~~
2571
2572 @subsubsection occt_draw_5_2_4 ForgetAll
2573
2574 Syntax:   
2575 ~~~~~
2576 ForgetAll docname label
2577 ~~~~~
2578 Forgets all attributes of the label.
2579
2580 Example
2581 ~~~~~
2582 ForgetAll D 0:2
2583 ~~~~~
2584
2585
2586 @subsubsection occt_draw_5_3 Application commands
2587
2588 @subsubsection occt_draw_5_3_1  Main
2589
2590 Syntax:       
2591 ~~~~~
2592 Main docname
2593 ~~~~~ 
2594
2595 Returns the main label of the framework. 
2596
2597 **Example:** 
2598 ~~~~~
2599 Main D 
2600 ~~~~~
2601
2602 @subsubsection occt_draw_5_3_2  UndoLimit
2603
2604 Syntax:       
2605 ~~~~~
2606 UndoLimit docname [value=0]
2607 ~~~~~ 
2608
2609
2610 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 
2611
2612 **Example:** 
2613 ~~~~~
2614 UndoLimit D 100 
2615 ~~~~~
2616
2617 @subsubsection occt_draw_5_3_3  Undo
2618
2619 Syntax:       
2620 ~~~~~
2621 Undo docname [value=1]
2622 ~~~~~ 
2623
2624 Undoes **value** steps. 
2625
2626 **Example:** 
2627 ~~~~~
2628 Undo D 
2629 ~~~~~
2630
2631 @subsubsection occt_draw_5_3_4  Redo
2632
2633 Syntax:       
2634 ~~~~~
2635 Redo docname [value=1]
2636 ~~~~~ 
2637
2638 Redoes **value** steps.
2639  
2640 **Example:** 
2641 ~~~~~
2642 Redo D 
2643 ~~~~~
2644
2645 @subsubsection occt_draw_5_3_5  OpenCommand
2646
2647 Syntax:       
2648 ~~~~~
2649 OpenCommand docname
2650 ~~~~~ 
2651
2652 Opens a new command transaction. 
2653
2654 **Example:**
2655 ~~~~~ 
2656 OpenCommand D
2657 ~~~~~ 
2658
2659 @subsubsection occt_draw_5_3_6  CommitCommand
2660
2661 Syntax:       
2662 ~~~~~
2663 CommitCommand docname
2664 ~~~~~ 
2665
2666 Commits the Command transaction. 
2667
2668 **Example:** 
2669 ~~~~~
2670 CommitCommand D
2671 ~~~~~ 
2672
2673 @subsubsection occt_draw_5_3_7  NewCommand
2674
2675 Syntax:       
2676 ~~~~~
2677 NewCommand docname
2678 ~~~~~ 
2679
2680 This is a short-cut for Commit and Open transaction. 
2681
2682 **Example:** 
2683 ~~~~~
2684 NewCommand D 
2685 ~~~~~
2686
2687 @subsubsection occt_draw_5_3_8  AbortCommand
2688
2689 Syntax:       
2690 ~~~~~
2691 AbortCommand docname
2692 ~~~~~ 
2693
2694 Aborts the Command transaction. 
2695
2696 **Example:** 
2697 ~~~~~
2698 AbortCommand D 
2699 ~~~~~
2700
2701 @subsubsection occt_draw_5_3_9  Copy
2702
2703 Syntax:       
2704 ~~~~~
2705 Copy docname entry Xdocname Xentry
2706 ~~~~~ 
2707
2708 Copies the contents of *entry* to *Xentry*. No links are registered. 
2709
2710 **Example:** 
2711 ~~~~~
2712 Copy D1 0:2 D2 0:4 
2713 ~~~~~
2714
2715 @subsubsection occt_draw_5_3_10  UpdateLink
2716
2717 Syntax:       
2718 ~~~~~
2719 UpdateLink docname [entry] 
2720 ~~~~~
2721
2722 Updates external reference set at *entry*. 
2723
2724 **Example:** 
2725 ~~~~~
2726 UpdateLink D 
2727 ~~~~~
2728
2729 @subsubsection occt_draw_5_3_11  CopyWithLink
2730
2731 Syntax:       
2732 ~~~~~
2733 CopyWithLink docname entry Xdocname Xentry
2734 ~~~~~ 
2735
2736 Aborts the Command transaction. 
2737 Copies the content of *entry* to *Xentry*. The link is registered with an *Xlink* attribute at *Xentry*  label. 
2738
2739 **Example:** 
2740 ~~~~~
2741 CopyWithLink D1 0:2 D2 0:4
2742 ~~~~~ 
2743
2744 @subsubsection occt_draw_5_3_12  UpdateXLinks
2745
2746 Syntax:       
2747 ~~~~~
2748 UpdateXLinks docname entry
2749 ~~~~~ 
2750
2751 Sets modifications on labels impacted by external references to the *entry*. The *document* becomes invalid and must be recomputed 
2752
2753 **Example:** 
2754 ~~~~~
2755 UpdateXLinks D 0:2 
2756 ~~~~~
2757
2758 @subsubsection occt_draw_5_3_13  DumpDocument
2759
2760 Syntax:       
2761 ~~~~~
2762 DumpDocument docname
2763 ~~~~~ 
2764
2765 Displays parameters of *docname* document. 
2766
2767 **Example:** 
2768 ~~~~~
2769 DumpDocument D 
2770 ~~~~~
2771
2772
2773 @subsection occt_draw_5_4  Data Framework commands
2774
2775
2776 @subsubsection occt_draw_5_4_1  MakeDF
2777
2778 Syntax:       
2779 ~~~~~
2780 MakeDF dfname
2781 ~~~~~ 
2782
2783 Creates a new data framework. 
2784
2785 **Example:** 
2786 ~~~~~
2787 MakeDF D 
2788 ~~~~~
2789
2790 @subsubsection occt_draw_5_4_2  ClearDF
2791
2792 Syntax:       
2793 ~~~~~
2794 ClearDF dfname
2795 ~~~~~ 
2796
2797 Clears a data framework. 
2798
2799 **Example:** 
2800 ~~~~~
2801 ClearDF D 
2802 ~~~~~
2803
2804 @subsubsection occt_draw_5_4_3  CopyDF
2805
2806 Syntax:       
2807 ~~~~~
2808 CopyDF dfname1 entry1 [dfname2] entry2
2809 ~~~~~ 
2810
2811 Copies a data framework. 
2812
2813 **Example:** 
2814 ~~~~~
2815 CopyDF D 0:2 0:4 
2816 ~~~~~
2817
2818 @subsubsection occt_draw_5_4_4  CopyLabel
2819
2820 Syntax:       
2821 ~~~~~
2822 CopyLabel dfname fromlabel tolablel
2823 ~~~~~ 
2824
2825 Copies a label. 
2826
2827 **Example:** 
2828 ~~~~~
2829 CopyLabel D1 0:2 0:4 
2830 ~~~~~
2831
2832 @subsubsection occt_draw_5_4_5  MiniDumpDF
2833
2834 Syntax:       
2835 ~~~~~
2836 MiniDumpDF dfname
2837 ~~~~~ 
2838
2839 Makes a mini-dump of a data framework. 
2840
2841 **Example:** 
2842 ~~~~~
2843 MiniDumpDF D 
2844 ~~~~~
2845
2846 @subsubsection occt_draw_5_4_6  XDumpDF
2847
2848 Syntax:       
2849 ~~~~~
2850 XDumpDF dfname
2851 ~~~~~ 
2852
2853 Makes an extended dump of a data framework. 
2854
2855 **Example:** 
2856 ~~~~~
2857 XDumpDF D
2858 ~~~~~ 
2859
2860 @subsection occt_draw_5_5  General attributes commands
2861
2862
2863 @subsubsection occt_draw_5_5_1  SetInteger
2864
2865 Syntax:       
2866 ~~~~~
2867 SetInteger dfname entry value
2868 ~~~~~ 
2869
2870 Finds or creates an Integer attribute at *entry* label and sets *value*. 
2871
2872 **Example:** 
2873 ~~~~~
2874 SetInteger D 0:2 100 
2875 ~~~~~
2876
2877 @subsubsection occt_draw_5_5_2  GetInteger
2878
2879 Syntax:       
2880 ~~~~~
2881 GetInteger dfname entry [drawname]
2882 ~~~~~ 
2883
2884 Gets a value of an Integer attribute at *entry* label and sets it to *drawname* variable, if it is defined. 
2885
2886 **Example:** 
2887 ~~~~~
2888 GetInteger D 0:2 Int1 
2889 ~~~~~
2890
2891 @subsubsection occt_draw_5_5_3  SetReal
2892
2893 Syntax:       
2894 ~~~~~
2895 SetReal dfname entry value
2896 ~~~~~ 
2897
2898 Finds or creates a Real attribute at *entry* label and sets *value*. 
2899
2900 **Example:** 
2901 ~~~~~
2902 SetReal D 0:2 100. 
2903 ~~~~~
2904
2905 @subsubsection occt_draw_5_5_4  GetReal
2906
2907 Syntax:       
2908 ~~~~~
2909 GetReal dfname entry [drawname]
2910 ~~~~~ 
2911
2912 Gets a value of a Real attribute at *entry* label and sets it to *drawname* variable, if it is defined. 
2913
2914 **Example:** 
2915 ~~~~~
2916 GetReal D 0:2 Real1 
2917 ~~~~~
2918
2919 @subsubsection occt_draw_5_5_5  SetIntArray
2920
2921 Syntax:       
2922 ~~~~~
2923 SetIntArray dfname entry lower upper value1 value2 … 
2924 ~~~~~
2925
2926 Finds or creates an IntegerArray attribute at *entry* label with lower and upper bounds and sets **value1*, *value2*... 
2927
2928 **Example:** 
2929 ~~~~~
2930 SetIntArray D 0:2 1 4 100 200 300 400
2931 ~~~~~ 
2932
2933 @subsubsection occt_draw_5_5_6  GetIntArray
2934
2935 Syntax:       
2936 ~~~~~
2937 GetIntArray dfname entry
2938 ~~~~~ 
2939
2940 Gets a value of an *IntegerArray* attribute at *entry* label. 
2941
2942 **Example:** 
2943 ~~~~~
2944 GetIntArray D 0:2
2945 ~~~~~ 
2946
2947 @subsubsection occt_draw_5_5_7  SetRealArray
2948
2949 Syntax:       
2950 ~~~~~
2951 SetRealArray dfname entry lower upper value1 value2 …
2952 ~~~~~ 
2953
2954 Finds or creates a RealArray attribute at *entry* label with lower and upper bounds and sets *value1*, *value2*… 
2955
2956 **Example:** 
2957 ~~~~~
2958 GetRealArray D 0:2 1 4 100. 200. 300. 400. 
2959 ~~~~~
2960
2961 @subsubsection occt_draw_5_5_8  GetRealArray
2962
2963 Syntax:       
2964 ~~~~~
2965 GetRealArray dfname entry
2966 ~~~~~ 
2967
2968 Gets a value of a RealArray attribute at *entry* label. 
2969
2970 **Example:** 
2971 ~~~~~
2972 GetRealArray D 0:2 
2973 ~~~~~
2974
2975 @subsubsection occt_draw_5_5_9  SetComment
2976
2977 Syntax:       
2978 ~~~~~
2979 SetComment dfname entry value
2980 ~~~~~ 
2981
2982 Finds or creates a Comment attribute at *entry* label and sets *value*. 
2983
2984 **Example:** 
2985 ~~~~~
2986 SetComment D 0:2 "My comment"
2987 ~~~~~ 
2988
2989 @subsubsection occt_draw_5_5_10  GetComment
2990
2991 Syntax:       
2992 ~~~~~
2993 GetComment dfname entry
2994 ~~~~~ 
2995
2996 Gets a value of a Comment attribute at *entry* label. 
2997
2998 **Example:** 
2999 ~~~~~
3000 GetComment D 0:2
3001 ~~~~~ 
3002
3003 @subsubsection occt_draw_5_5_11  SetExtStringArray
3004
3005 Syntax:       
3006 ~~~~~
3007 SetExtStringArray dfname entry lower upper value1 value2 …
3008 ~~~~~ 
3009
3010 Finds or creates an *ExtStringArray* attribute at *entry* label with lower and upper bounds and sets *value1*, *value2*… 
3011
3012 **Example:** 
3013 ~~~~~
3014 SetExtStringArray D 0:2 1 3 *string1* *string2* *string3*
3015 ~~~~~ 
3016
3017 @subsubsection occt_draw_5_5_12  GetExtStringArray
3018
3019 Syntax:       
3020 ~~~~~
3021 GetExtStringArray dfname entry
3022 ~~~~~ 
3023
3024 Gets a value of an ExtStringArray attribute at *entry* label. 
3025
3026 **Example:** 
3027 ~~~~~
3028 GetExtStringArray D 0:2 
3029 ~~~~~
3030
3031 @subsubsection occt_draw_5_5_13  SetName
3032
3033 Syntax:       
3034 ~~~~~
3035 SetName dfname entry value 
3036 ~~~~~
3037
3038 Finds or creates a Name attribute at *entry* label and sets *value*. 
3039
3040 **Example:** 
3041 ~~~~~
3042 SetName D 0:2 *My name* 
3043 ~~~~~
3044
3045 @subsubsection occt_draw_5_5_14  GetName
3046
3047 Syntax:       
3048 ~~~~~
3049 GetName dfname entry 
3050 ~~~~~
3051
3052 Gets a value of a Name attribute at *entry* label. 
3053
3054 **Example:** 
3055 ~~~~~
3056 GetName D 0:2 
3057 ~~~~~
3058
3059 @subsubsection occt_draw_5_5_15  SetReference
3060
3061 Syntax:       
3062 ~~~~~
3063 SetReference dfname entry reference 
3064 ~~~~~
3065
3066 Creates a Reference attribute at *entry* label and sets *reference*. 
3067
3068 **Example:** 
3069 ~~~~~
3070 SetReference D 0:2 0:4 
3071 ~~~~~
3072
3073 @subsubsection occt_draw_5_5_16  GetReference
3074
3075 Syntax:       
3076 ~~~~~
3077 GetReference dfname entry 
3078 ~~~~~
3079
3080 Gets a value of a Reference attribute at *entry* label. 
3081
3082 **Example:** 
3083 ~~~~~
3084 GetReference D 0:2 
3085 ~~~~~
3086
3087 @subsubsection occt_draw_5_5_17  SetUAttribute
3088
3089 Syntax:       
3090 ~~~~~
3091 SetUAttribute dfname entry localGUID 
3092 ~~~~~
3093
3094 Creates a UAttribute attribute at *entry* label with *localGUID*. 
3095
3096 **Example:** 
3097 ~~~~~
3098 set localGUID "c73bd076-22ee-11d2-acde-080009dc4422" 
3099 SetUAttribute D 0:2 ${localGUID} 
3100 ~~~~~
3101
3102 @subsubsection occt_draw_5_5_18  GetUAttribute
3103
3104 Syntax:       
3105 ~~~~~
3106 GetUAttribute dfname entry loacalGUID 
3107 ~~~~~
3108
3109 Finds a *UAttribute* at *entry* label with *localGUID*. 
3110
3111 **Example:** 
3112 ~~~~~
3113 set localGUID "c73bd076-22ee-11d2-acde-080009dc4422" 
3114 GetUAttribute D 0:2 ${localGUID} 
3115 ~~~~~
3116
3117 @subsubsection occt_draw_5_5_19  SetFunction
3118
3119 Syntax:       
3120 ~~~~~
3121 SetFunction dfname entry ID failure 
3122 ~~~~~
3123
3124 Finds or creates a *Function* attribute at *entry* label with driver ID and *failure* index. 
3125
3126 **Example:** 
3127 ~~~~~
3128 set ID "c73bd076-22ee-11d2-acde-080009dc4422" 
3129 SetFunction D 0:2 ${ID} 1 
3130 ~~~~~
3131
3132 @subsubsection occt_draw_5_5_20  GetFunction
3133
3134 Syntax:       
3135 ~~~~~
3136 GetFunction dfname entry ID failure 
3137 ~~~~~
3138
3139 Finds a Function attribute at *entry* label and sets driver ID to *ID* variable and failure index to *failure* variable. 
3140
3141 **Example:** 
3142 ~~~~~
3143 GetFunction D 0:2 ID failure 
3144 ~~~~~
3145
3146 @subsubsection occt_draw_5_5_21  NewShape
3147
3148 Syntax:       
3149 ~~~~~
3150 NewShape dfname entry [shape] 
3151 ~~~~~
3152
3153 Finds or creates a Shape attribute at *entry* label. Creates or updates the associated *NamedShape* attribute by *shape* if *shape* is defined. 
3154
3155 **Example:** 
3156 ~~~~~
3157 box b 10 10 10 
3158 NewShape D 0:2 b 
3159 ~~~~~
3160
3161 @subsubsection occt_draw_5_5_22  SetShape
3162
3163 Syntax:       
3164 ~~~~~
3165 SetShape dfname entry shape 
3166 ~~~~~
3167
3168 Creates or updates a *NamedShape* attribute at *entry* label by *shape*. 
3169
3170 **Example:** 
3171 ~~~~~
3172 box b 10 10 10 
3173 SetShape D 0:2 b 
3174 ~~~~~
3175
3176 @subsubsection occt_draw_5_5_23  GetShape
3177
3178 Syntax:       
3179 ~~~~~
3180 GetShape2 dfname entry shape 
3181 ~~~~~
3182
3183 Sets a shape from NamedShape attribute associated with *entry* label to *shape* draw variable. 
3184
3185 **Example:** 
3186 ~~~~~
3187 GetShape2 D 0:2 b 
3188 ~~~~~
3189
3190 @subsection occt_draw_5_6  Geometric attributes commands
3191
3192
3193 @subsubsection occt_draw_5_6_1  SetPoint
3194
3195 Syntax:       
3196 ~~~~~
3197 SetPoint dfname entry point
3198 ~~~~~ 
3199
3200 Finds or creates a Point attribute at *entry* label and sets *point* as generated in the associated *NamedShape* attribute. 
3201
3202 **Example:** 
3203 ~~~~~
3204 point p 10 10 10 
3205 SetPoint D 0:2 p 
3206 ~~~~~
3207
3208 @subsubsection occt_draw_5_6_2  GetPoint
3209
3210 Syntax:       
3211 ~~~~~
3212 GetPoint dfname entry [drawname] 
3213 ~~~~~
3214
3215 Gets a vertex from *NamedShape* attribute at *entry* label and sets it to *drawname* variable, if it is defined. 
3216
3217 **Example:** 
3218 ~~~~~
3219 GetPoint D 0:2 p 
3220 ~~~~~
3221
3222 @subsubsection occt_draw_5_6_3  SetAxis
3223
3224 Syntax:       
3225 ~~~~~
3226 SetAxis dfname entry axis 
3227 ~~~~~
3228
3229 Finds or creates an Axis attribute at *entry* label and sets *axis* as generated in the associated *NamedShape* attribute. 
3230
3231 **Example:** 
3232 ~~~~~
3233 line l 10 20 30 100 200 300 
3234 SetAxis D 0:2 l 
3235 ~~~~~
3236
3237 @subsubsection occt_draw_5_6_4  GetAxis
3238
3239 Syntax:       
3240 ~~~~~
3241 GetAxis dfname entry [drawname] 
3242 ~~~~~
3243
3244 Gets a line from *NamedShape* attribute at *entry* label and sets it to *drawname* variable, if it is defined. 
3245
3246 **Example:** 
3247 ~~~~~
3248 GetAxis D 0:2 l 
3249 ~~~~~
3250
3251 @subsubsection occt_draw_5_6_5  SetPlane
3252
3253 Syntax:       
3254 ~~~~~
3255 SetPlane dfname entry plane 
3256 ~~~~~
3257
3258 Finds or creates a Plane attribute at *entry* label and sets *plane* as generated in the associated *NamedShape* attribute. 
3259
3260 **Example:** 
3261 ~~~~~
3262 plane pl 10 20 30 –1 0 0 
3263 SetPlane D 0:2 pl 
3264 ~~~~~
3265
3266 @subsubsection occt_draw_5_6_6  GetPlane
3267
3268 Syntax:       
3269 ~~~~~
3270 GetPlane dfname entry [drawname] 
3271 ~~~~~
3272
3273 Gets a plane from *NamedShape* attribute at *entry* label and sets it to *drawname* variable, if it is defined. 
3274
3275 **Example:** 
3276 ~~~~~
3277 GetPlane D 0:2 pl 
3278 ~~~~~
3279
3280 @subsubsection occt_draw_5_6_7  SetGeometry
3281
3282 Syntax:       
3283 ~~~~~
3284 SetGeometry dfname entry [type] [shape] 
3285 ~~~~~
3286
3287 Creates a Geometry attribute at *entry* label and sets *type* and *shape* as generated in the associated *NamedShape* attribute if they are defined. *type* must be one of the following: *any, pnt, lin, cir, ell, spl, pln, cyl*. 
3288
3289 **Example:** 
3290 ~~~~~
3291 point p 10 10 10 
3292 SetGeometry D 0:2 pnt p 
3293 ~~~~~
3294
3295 @subsubsection occt_draw_5_6_8  GetGeometryType
3296
3297 Syntax:       
3298 ~~~~~
3299 GetGeometryType dfname entry
3300 ~~~~~ 
3301
3302 Gets a geometry type from Geometry attribute at *entry* label. 
3303
3304 **Example:** 
3305 ~~~~~
3306 GetGeometryType D 0:2 
3307 ~~~~~
3308
3309 @subsubsection occt_draw_5_6_9  SetConstraint
3310
3311 Syntax:       
3312 ~~~~~
3313 SetConstraint dfname entry keyword geometrie [geometrie …] 
3314 SetConstraint dfname entry "plane" geometrie 
3315 SetConstraint dfname entry "value" value
3316 ~~~~~  
3317
3318 1. Creates a Constraint attribute at *entry* label and sets *keyword* constraint between geometry(ies). 
3319 *keyword* must be one of the following: 
3320 *rad, dia, minr, majr, tan, par, perp, concentric, equal, dist, angle, eqrad, symm, midp, eqdist, fix, rigid,* or *from, axis, mate, alignf, aligna, axesa, facesa, round, offset* 
3321 2. Sets plane for the existing constraint. 
3322 3. Sets value for the existing constraint. 
3323
3324 **Example:** 
3325 ~~~~~
3326 SetConstraint D 0:2 "value" 5 
3327 ~~~~~
3328
3329 @subsubsection occt_draw_5_6_10  GetConstraint
3330
3331 Syntax:       
3332 ~~~~~
3333 GetConstraint dfname entry
3334 ~~~~~ 
3335
3336 Dumps a Constraint attribute at *entry* label 
3337
3338 **Example:** 
3339 ~~~~~
3340 GetConstraint D 0:2 
3341 ~~~~~
3342
3343 @subsubsection occt_draw_5_6_11  SetVariable
3344
3345 Syntax:       
3346 ~~~~~
3347 SetVariable dfname entry isconstant(0/1) units 
3348 ~~~~~
3349
3350 Creates a Variable attribute at *entry* label and sets *isconstant* flag and *units* as a string. 
3351
3352 **Example:** 
3353 ~~~~~
3354 SetVariable D 0:2 1 "mm" 
3355 ~~~~~
3356
3357 @subsubsection occt_draw_5_6_12  GetVariable
3358
3359 Syntax:       
3360 ~~~~~
3361 GetVariable dfname entry isconstant units 
3362 ~~~~~
3363
3364 Gets an *isconstant* flag and units of a Variable attribute at *entry* label. 
3365
3366 **Example:** 
3367 ~~~~~
3368 GetVariable D 0:2 isconstant units 
3369 puts "IsConstant=${isconstant}" 
3370 puts "Units=${units}" 
3371 ~~~~~
3372
3373 @subsection occt_draw_5_7  Tree attributes commands
3374
3375
3376 @subsubsection occt_draw_5_7_1  RootNode
3377
3378 Syntax:       
3379 ~~~~~
3380 RootNode dfname treenodeentry [ID]
3381 ~~~~~ 
3382
3383 Returns the ultimate father of *TreeNode* attribute identified by its *treenodeentry* and its *ID* (or default ID, if *ID* is not defined). 
3384
3385
3386 @subsubsection occt_draw_5_7_2  SetNode
3387
3388 Syntax:       
3389 ~~~~~
3390 SetNode dfname treenodeentry [ID]
3391 ~~~~~ 
3392
3393 Creates a *TreeNode* attribute on the *treenodeentry* label with its tree *ID* (or assigns a default ID, if the *ID* is not defined). 
3394
3395
3396 @subsubsection occt_draw_5_7_3  AppendNode
3397
3398 Syntax:       
3399 ~~~~~
3400 AppendNode dfname fatherentry childentry [fatherID]
3401 ~~~~~ 
3402
3403
3404 Inserts a *TreeNode* attribute with its tree *fatherID* (or default ID, if *fatherID* is not defined) on *childentry* as last child of *fatherentry*. 
3405
3406
3407
3408
3409 @subsubsection occt_draw_5_7_4  PrependNode
3410
3411 Syntax:       
3412 ~~~~~
3413 PrependNode dfname fatherentry childentry [fatherID]
3414 ~~~~~ 
3415
3416
3417 Inserts a *TreeNode* attribute with its tree *fatherID* (or default ID, if *fatherID* is not defined) on *childentry* as first child of *fatherentry*. 
3418
3419
3420 @subsubsection occt_draw_5_7_5  InsertNodeBefore
3421
3422 Syntax:       
3423 ~~~~~
3424 InsertNodeBefore dfname treenodeentry beforetreenode [ID]
3425 ~~~~~ 
3426
3427 Inserts a *TreeNode* attribute with tree *ID* (or default ID, if *ID* is not defined) *beforetreenode* before *treenodeentry*. 
3428
3429
3430 @subsubsection occt_draw_5_7_6  InsertNodeAfter
3431
3432 Syntax:       
3433 ~~~~~
3434 InsertNodeAfter dfname treenodeentry aftertreenode [ID]
3435 ~~~~~ 
3436
3437 Inserts a *TreeNode* attribute with tree *ID* (or default ID, if *ID* is not defined) *aftertreenode* after *treenodeentry*. 
3438
3439
3440 @subsubsection occt_draw_5_7_7  DetachNode
3441
3442 Syntax:       
3443 ~~~~~
3444 DetachNode dfname treenodeentry [ID]
3445 ~~~~~ 
3446
3447 Removes a *TreeNode* attribute with tree *ID* (or default ID, if *ID* is not defined) from *treenodeentry*. 
3448
3449
3450 @subsubsection occt_draw_5_7_8  ChildNodeIterate
3451
3452 Syntax:       
3453 ~~~~~
3454 ChildNodeIterate dfname treenodeentry alllevels(0/1) [ID]
3455 ~~~~~ 
3456
3457
3458 Iterates on the tree of *TreeNode* attributes with tree *ID* (or default ID, if *ID* is not defined). If *alllevels* is set to *1* it explores not only the first, but all the sub Step levels.
3459  
3460 **Example:** 
3461 ~~~~~
3462 Label D 0:2 
3463 Label D 0:3 
3464 Label D 0:4 
3465 Label D 0:5 
3466 Label D 0:6 
3467 Label D 0:7 
3468 Label D 0:8 
3469 Label D 0:9 
3470
3471 # Set root node 
3472 SetNode D 0:2 
3473
3474 AppendNode D 0:2 0:4 
3475 AppendNode D 0:2 0:5 
3476 PrependNode D 0:4 0:3 
3477 PrependNode D 0:4 0:8 
3478 PrependNode D 0:4 0:9 
3479
3480 InsertNodeBefore D 0:5 0:6 
3481 InsertNodeAfter D 0:4 0:7 
3482
3483 DetachNode D 0:8 
3484
3485
3486 # List all levels 
3487 ChildNodeIterate D 0:2 1 
3488
3489 ==0:4 
3490 ==0:9 
3491 ==0:3 
3492 ==0:7 
3493 ==0:6 
3494 ==0:5 
3495
3496
3497 # List only first levels 
3498 ChildNodeIterate D 0:2 1 
3499
3500 ==0:4 
3501 ==0:7 
3502 ==0:6 
3503 ==0:5 
3504 ~~~~~
3505
3506 @subsubsection occt_draw_5_7_9  InitChildNodeIterator
3507
3508 Syntax:       
3509 ~~~~~
3510 InitChildNodeIterator dfname treenodeentry alllevels(0/1) [ID]
3511 ~~~~~ 
3512
3513
3514 Initializes the iteration on the tree of *TreeNode* attributes with tree *ID* (or default ID, if *ID* is not defined). If *alllevels* is set to *1* it explores not only the first, but also all sub Step levels. 
3515
3516 **Example:** 
3517 ~~~~~
3518 InitChildNodeIterate D 0:5 1 
3519 set aChildNumber 0 
3520 for {set i 1} {$i  100} {incr i} { 
3521     if {[ChildNodeMore] == *TRUE*} { 
3522         puts *Tree node = [ChildNodeValue]* 
3523         incr aChildNumber 
3524         ChildNodeNext 
3525     } 
3526
3527 puts "aChildNumber=$aChildNumber"
3528 ~~~~~ 
3529
3530 @subsubsection occt_draw_5_7_10  ChildNodeMore
3531
3532 Syntax:       
3533 ~~~~~
3534 ChildNodeMore
3535 ~~~~~ 
3536
3537 Returns TRUE if there is a current item in the iteration. 
3538
3539
3540 @subsubsection occt_draw_5_7_11  ChildNodeNext
3541
3542 Syntax:       
3543 ~~~~~
3544 ChildNodeNext
3545 ~~~~~ 
3546
3547 Moves to the next Item. 
3548
3549
3550 @subsubsection occt_draw_5_7_12  ChildNodeValue
3551
3552 Syntax:       
3553 ~~~~~
3554 ChildNodeValue
3555 ~~~~~ 
3556
3557 Returns the current treenode of *ChildNodeIterator*. 
3558
3559
3560 @subsubsection occt_draw_5_7_13  ChildNodeNextBrother
3561
3562 Syntax:       
3563 ~~~~~
3564 ChildNodeNextBrother
3565 ~~~~~ 
3566
3567 Moves to the next *Brother*. If there is none, goes up. This method is interesting only with *allLevels* behavior. 
3568
3569
3570 @subsection occt_draw_5_8   Standard presentation commands
3571
3572
3573 @subsubsection occt_draw_5_8_1  AISInitViewer
3574
3575 Syntax:       
3576 ~~~~~
3577 AISInitViewer docname
3578 ~~~~~ 
3579
3580 Creates and sets *AISViewer* attribute at root label, creates AIS viewer window. 
3581
3582 **Example:** 
3583 ~~~~~
3584 AISInitViewer D 
3585 ~~~~~
3586
3587 @subsubsection occt_draw_5_8_2  AISRepaint
3588
3589 Syntax:       
3590 ~~~~~
3591 AISRepaint docname 
3592 ~~~~~
3593
3594 Updates the AIS viewer window. 
3595
3596 **Example:** 
3597 ~~~~~
3598 AISRepaint D 
3599 ~~~~~
3600
3601 @subsubsection occt_draw_5_8_3  AISDisplay
3602
3603 Syntax:       
3604 ~~~~~
3605 AISDisplay docname entry [not_update] 
3606 ~~~~~
3607
3608 Displays a presantation of *AISobject* from *entry* label in AIS viewer. If *not_update* is not defined then *AISobject* is recomputed and all visualization settings are applied. 
3609
3610 **Example:** 
3611 ~~~~~
3612 AISDisplay D 0:5 
3613 ~~~~~
3614
3615 @subsubsection occt_draw_5_8_4  AISUpdate
3616
3617 Syntax:       
3618 ~~~~~
3619 AISUpdate docname entry 
3620 ~~~~~
3621
3622 Recomputes a presentation of *AISobject* from *entry* label and applies the visualization setting in AIS viewer. 
3623
3624 **Example:** 
3625 ~~~~~
3626 AISUpdate D 0:5 
3627 ~~~~~
3628
3629 @subsubsection occt_draw_5_8_5  AISErase
3630
3631 Syntax:       
3632 ~~~~~
3633 AISErase docname entry 
3634 ~~~~~
3635
3636 Erases *AISobject* of *entry* label in AIS viewer. 
3637
3638 **Example:** 
3639 ~~~~~
3640 AISErase D 0:5 
3641 ~~~~~
3642
3643 @subsubsection occt_draw_5_8_6  AISRemove
3644
3645 Syntax:       
3646 ~~~~~
3647 AISRemove docname entry 
3648 ~~~~~
3649
3650 Erases *AISobject* of *entry* label in AIS viewer, then *AISobject* is removed from *AIS_InteractiveContext*. 
3651
3652 **Example:** 
3653 ~~~~~
3654 AISRemove D 0:5 
3655 ~~~~~
3656
3657 @subsubsection occt_draw_5_8_7  AISSet
3658
3659 Syntax:       
3660 ~~~~~
3661 AISSet docname entry ID 
3662 ~~~~~
3663
3664 Creates *AISPresentation* attribute at *entry* label and sets as driver ID. ID must be one of the following: *A* (*axis*), *C* (*constraint*), *NS* (*namedshape*), *G* (*geometry*), *PL* (*plane*), *PT* (*point*). 
3665
3666 **Example:** 
3667 ~~~~~
3668 AISSet D 0:5 NS 
3669 ~~~~~
3670
3671 @subsubsection occt_draw_5_8_8  AISDriver
3672
3673 Syntax:       
3674 ~~~~~
3675 AISDriver docname entry [ID] 
3676 ~~~~~
3677
3678 Returns DriverGUID stored in *AISPresentation* attribute of an *entry* label or sets a new one. ID must be one of the following: *A* (*axis*), *C* (*constraint*), *NS* (*namedshape*), *G* (*geometry*), *PL* (*plane*), *PT* (*point*). 
3679
3680 **Example:** 
3681 ~~~~~
3682 # Get Driver GUID 
3683 AISDriver D 0:5 
3684 ~~~~~
3685
3686 @subsubsection occt_draw_5_8_9  AISUnset
3687
3688 Syntax:       
3689 ~~~~~
3690 AISUnset docname entry 
3691 ~~~~~
3692
3693 Deletes *AISPresentation* attribute (if it exists) of an *entry* label. 
3694
3695 **Example:** 
3696 ~~~~~
3697 AISUnset D 0:5 
3698 ~~~~~
3699
3700 @subsubsection occt_draw_5_8_10  AISTransparency
3701
3702 Syntax:       
3703 ~~~~~
3704 AISTransparency docname entry [transparency] 
3705 ~~~~~
3706
3707 Sets (if *transparency* is defined) or gets the value of transparency for *AISPresentation* attribute of an *entry* label. 
3708
3709 **Example:** 
3710 ~~~~~
3711 AISTransparency D 0:5 0.5 
3712 ~~~~~
3713
3714 @subsubsection occt_draw_5_8_11  AISHasOwnTransparency
3715
3716 Syntax:       
3717 ~~~~~
3718 AISHasOwnTransparency docname entry 
3719 ~~~~~
3720
3721 Tests *AISPresentation* attribute of an *entry* label by own transparency. 
3722
3723 **Example:** 
3724 ~~~~~
3725 AISHasOwnTransparency D 0:5 
3726 ~~~~~
3727
3728 @subsubsection occt_draw_5_8_12  AISMaterial
3729
3730 Syntax:       
3731 ~~~~~
3732 AISMaterial docname entry [material] 
3733 ~~~~~
3734
3735 Sets (if *material* is defined) or gets the value of transparency for *AISPresentation* attribute of an *entry* label. *material* is integer from 0 to 20 (see <a href="#occt_draw_4_5_6">meshmat</a> command). 
3736
3737 **Example:** 
3738 ~~~~~
3739 AISMaterial D 0:5 5 
3740 ~~~~~
3741
3742 @subsubsection occt_draw_5_8_13  AISHasOwnMaterial
3743
3744 Syntax:       
3745 ~~~~~
3746 AISHasOwnMaterial docname entry 
3747 ~~~~~
3748
3749 Tests *AISPresentation* attribute of an *entry* label by own material. 
3750
3751 **Example:** 
3752 ~~~~~
3753 AISHasOwnMaterial D 0:5 
3754 ~~~~~
3755
3756 @subsubsection occt_draw_5_8_14  AISColor
3757
3758 Syntax:       
3759 ~~~~~
3760 AISColor docname entry [color] 
3761 ~~~~~
3762
3763 Sets (if *color* is defined) or gets value of color for *AISPresentation* attribute of an *entry* label. *color* is integer from 0 to 516 (see color names in *vsetcolor*). 
3764
3765 **Example:** 
3766 ~~~~~
3767 AISColor D 0:5 25 
3768 ~~~~~
3769
3770 @subsubsection occt_draw_5_8_15  AISHasOwnColor
3771
3772 Syntax:       
3773 ~~~~~
3774 AISHasOwnColor docname entry 
3775 ~~~~~
3776
3777 Tests *AISPresentation* attribute of an *entry* label by own color. 
3778
3779 **Example:** 
3780 ~~~~~
3781 AISHasOwnColor D 0:5 
3782 ~~~~~
3783
3784 @section occt_draw_6 Geometry commands
3785
3786 @subsection occt_draw_6_1 Overview
3787
3788 Draw provides a set of commands to test geometry libraries. These commands are found in the TGEOMETRY executable, or in any Draw executable which includes *GeometryTest* commands. 
3789
3790 In the context of Geometry, Draw includes the following types of variable: 
3791
3792   * 2d and 3d points
3793   * The 2d curve, which corresponds to *Curve* in *Geom2d*.
3794   * The 3d curve and surface, which correspond to *Curve* and *Surface* in <a href="user_guides__modeling_data.html#occt_modat_1">Geom package</a>.
3795   
3796 Draw geometric variables never share data; the *copy* command will always make a complete copy of the content of the variable. 
3797
3798 The following topics are covered in the nine sections of this chapter: 
3799
3800   * **Curve creation** deals with the various types of curves and how to create them.
3801   * **Surface creation** deals with the different types of surfaces and how to create them.
3802   * **Curve and surface modification** deals with the commands used to modify the definition of curves and surfaces, most of which concern modifications to bezier and bspline curves.
3803   * **Geometric transformations** covers translation, rotation, mirror image and point scaling transformations.
3804   * **Curve and Surface Analysis** deals with the commands used to compute points, derivatives and curvatures.
3805   * **Intersections** presents intersections of surfaces and curves.
3806   * **Approximations** deals with creating curves and surfaces from a set of points.
3807   * **Constraints** concerns construction of 2d circles and lines by constraints such as tangency.
3808   * **Display** describes commands to control the display of curves and surfaces.
3809
3810 Where possible, the commands have been made broad in application, i.e. they apply to 2d curves, 3d curves and surfaces. For instance, the *circle* command may create a 2d or a 3d circle depending on the number of arguments given. 
3811
3812 Likewise, the *translate* command will process points, curves or surfaces, depending on argument type. You may not always find the specific command you are looking for in the section where you expect it to be. In that case, look in another section. The *trim* command, for example, is described in the surface section. It can, nonetheless, be used with curves as well. 
3813
3814 @subsection occt_draw_6_2  Curve creation
3815
3816 This section deals with both points and curves. Types of curves are: 
3817
3818   * Analytical curves such as lines, circles, ellipses, parabolas, and hyperbolas.
3819   * Polar curves such as bezier curves and bspline curves.
3820   * Trimmed curves and offset curves made from other curves with the *trim* and *offset* commands. Because they are used on both curves and surfaces, the *trim* and *offset* commands are described in the *surface creation* section.
3821   * NURBS can be created from other curves using *convert* in the *Surface Creation* section.
3822   * Curves can be created from the isoparametric lines of surfaces by the *uiso* and *viso* commands.
3823   * 3d curves can be created from 2d curves and vice versa using the *to3d* and *to2d* commands. The *project* command computes a 2d curve on a 3d surface.
3824