0024336: Content of OCCT documentation should be updated. Iter 2
[occt.git] / dox / user_guides / draw_test_harness.md
1 Draw Test Harness  {#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 * *-PluginFileName* - defines the name of a plug-in resource file (prefix "-" is mandatory) described above. 
109 If this parameter is omitted then the default name DrawPlugin is used. 
110 * *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). 
111
112 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. 
113
114 ~~~~~
115 Draw[]        pload -DrawPlugin OCAF 
116 ~~~~~
117 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. 
118
119 ~~~~~
120 Draw[]        pload (equivalent to pload -DrawPlugin DEFAULT). 
121 ~~~~~
122 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. 
123
124
125 @section occt_draw_2 The Command Language
126
127 @subsection occt_draw_2_1 Overview
128
129 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. 
130
131 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: 
132
133   * Syntax of the TCL language.
134   * Accessing variables in TCL and Draw.
135   * Control structures.
136   * Procedures.
137
138 @subsection occt_draw_2_2 Syntax of TCL
139
140 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. 
141
142 The basic program for TCL is a script. A script consists of one or more commands. Commands are separated by new lines or semicolons. 
143
144 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{.cpp}
145 set a 24 
146 set b 15 
147 set a 25; set b 15 
148 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
149
150 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. 
151
152 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. 
153
154 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. 
155
156 The following substitutions are performed by TCL: 
157
158 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. 
159
160 **Example:** 
161 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{.cpp}
162 # set a variable value 
163 set file documentation 
164 puts $file #to display file contents on the screen 
165
166 # a simple substitution, set psfile to documentation.ps 
167 set psfile $file.ps 
168 puts $psfile 
169
170 # another substitution, set pfile to documentationPS 
171 set pfile ${file}PS 
172
173 # a last one, 
174 # delete files NEWdocumentation and OLDdocumentation 
175 foreach prefix {NEW OLD} {rm $prefix$file} 
176 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
177
178 Command substitution is triggered by the [ ] characters. The brackets must enclose a valid script. The script is evaluated and the result is substituted. 
179
180 Compare command construction in csh. 
181
182 **Example:** 
183 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{.cpp}
184 set degree 30 
185 set pi 3.14159265 
186 # expr is a command evaluating a numeric expression 
187 set radian [expr $pi*$degree/180] 
188 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
189
190 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. 
191
192 TCL uses two forms of *quoting* to prevent substitution and word breaking. 
193
194 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 " ". 
195
196 **Example:** 
197 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{.cpp}
198 # set msg to ;the price is 12.00; 
199 set price 12.00 
200 set msg ;the price is $price; 
201 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
202
203 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. 
204
205 **Example:** 
206 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{.cpp}
207 set x 0 
208 # this will loop for ever 
209 # because while argument is ;0  3; 
210 while ;$x  3; {set x [expr $x+1]} 
211 # this will terminate as expected because 
212 # while argument is {$x  3} 
213 while {$x  3} {set x [expr $x+1]} 
214 # this can be written also 
215 while {$x  3} { 
216 set x [expr $x+1] 
217
218 # the following cannot be written 
219 # because while requires two arguments 
220 while {$x  3} 
221
222 set x [expr $x+1] 
223
224 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
225
226 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. 
227
228 **Example:** 
229 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{.cpp}
230 # This is a comment 
231 set a 1 # this is not a comment 
232 set b 1; # this is a comment 
233 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
234
235 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. 
236
237
238 **Example:** 
239 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
240 # I want to delete two files 
241
242 set files ;foo bar; 
243
244 # this will fail because rm will receive only one argument 
245 # and complain that ;foo bar; does not exit 
246
247 exec rm $files 
248
249 # a second evaluation will do it 
250 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
251
252 @subsection occt_draw_2_3 Accessing variables in TCL and Draw
253
254 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. 
255
256 TCL provides a mechanism to link user data to variables. Using this functionality, Draw defines its variables as TCL variables with associated data. 
257
258 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 *$* does not change the result of a command. The content of a Draw variable is accessed using appropriate commands. 
259
260 There are many kinds of Draw variables, and new ones may be added with C++. Geometric and topological variables are described below. 
261
262 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. 
263
264 **Example:** 
265 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{.cpp}
266 # dset is used for numeric variables 
267 # pi is a predefined Draw variable 
268 dset angle pi/3 radius 10 
269 point p radius*cos(angle) radius*sin(angle) 0 
270 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
271 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. 
272
273 @subsubsection occt_draw_2_3_1 set, unset
274
275 Syntax:                  
276
277 ~~~~~
278 set varname [value] 
279 unset varname [varname varname ...] 
280 ~~~~~
281
282 **set** assigns a string value to a variable. If the variable does not already exist, it is created. 
283
284 Without a value, **set** returns the content of the variable. 
285
286 **unset** deletes variables. It is is also used to delete Draw variables. 
287
288 **Example:** 
289 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{.cpp}
290 set a "Hello world"
291 set b "Goodbye" 
292 set a 
293 == "Hello world" 
294 unset a b 
295 set a 
296 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
297
298 **Note**, that the *set* command can set only one variable, unlike the *dset* command. 
299
300
301 @subsubsection occt_draw_2_3_2 dset, dval
302
303 Syntax
304
305 ~~~~~
306 dset var1 value1 vr2 value2 ... 
307 dval name 
308 ~~~~~
309
310 *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. 
311
312 *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. 
313
314
315 **Example:** 
316 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{.cpp}
317 # z is set to 0 
318 dset x 10 y 15 z 
319 == 0 
320
321 # no $ required for Draw commands 
322 point p x y z 
323
324 # *puts* prints a string 
325 puts ;x = [dval x], cos(x/pi) = [dval cos(x/pi)]; 
326 == x = 10, cos(x/pi) = -0.99913874099467914 
327 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
328
329 **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.* 
330
331
332 @subsection occt_draw_2_4 lists
333
334 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. 
335
336 This allows you to insert lists within lists. 
337
338 **Example:** 
339 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{.cpp}
340 # a list of 3 strings 
341 ;a b c; 
342
343 # a list of two strings the first is a list of 2 
344 ;{a b} c; 
345 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
346
347 Many TCL commands return lists and **foreach** is a useful way to create loops on list elements. 
348
349 @subsubsection occt_draw_2_5 Control Structures
350
351 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: 
352
353 * You use braces instead of parentheses to enclose conditions. 
354 * You do not start the script on the next line of your command. 
355
356
357 @subsubsection occt_draw_2_5_1 if
358
359 Syntax       
360
361 ~~~~~
362 if condition script [elseif script .... else script] 
363 ~~~~~
364
365 **If** evaluates the condition and the script to see whether the condition is true. 
366
367
368
369 **Example:** 
370 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{.cpp}
371 if {$x  0} { 
372 puts ;positive; 
373 } elseif {$x == 0} { 
374 puts ;null; 
375 } else { 
376 puts ;negative; 
377
378 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
379
380 @subsubsection occt_draw_2_5_2 while, for, foreach
381
382 Syntax:                  
383
384
385 ~~~~~~
386 while condition script 
387 for init condition reinit script 
388 foreach varname list script 
389 ~~~~~
390
391 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. \
392
393 **Example:** 
394 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{.cpp}
395 # while example 
396 dset x 1.1 
397 while {[dval x]  100} { 
398   circle c 0 0 x 
399   dset x x*x 
400
401 # for example 
402 # incr var d, increments a variable of d (default 1) 
403 for {set i 0} {$i  10} {incr i} { 
404   dset angle $i*pi/10 
405   point p$i cos(angle0 sin(angle) 0 
406
407 # foreach example 
408 foreach object {crapo tomson lucas} {display $object} 
409 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
410
411 @subsubsection occt_draw_2_5_3 break, continue
412
413 Syntax:                  
414
415 ~~~~~
416 break 
417 continue 
418 ~~~~~
419
420 Within loops, the **break** and **continue** commands have the same effect as in C. 
421
422 **break** interrupts the innermost loop and **continue** jumps to the next iteration. 
423
424 **Example:** 
425 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{.cpp}
426 # search the index for which t$i has value ;secret; 
427 for {set i 1} {$i = 100} {incr i} { 
428   if {[set t$i] == ;secret;} break; 
429
430 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
431
432 @subsection occt_draw_2_6 Procedures
433
434 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. 
435
436 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. 
437
438 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. 
439
440 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. 
441
442
443 @subsubsection occt_draw_2_6_1 proc
444
445 Syntax:
446
447 ~~~~~
448 proc argumentlist script 
449 ~~~~~
450
451 **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. 
452
453 **return** gives a return value to the procedure. 
454
455 **Example:** 
456 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{.cpp}
457 # simple procedure 
458 proc hello {} { 
459   puts ;hello world; 
460
461 # procedure with arguments and default values 
462 proc distance {x1 y1 {x2 0} {y2 0}} { 
463   set d [expr (x2-x1)*(x2-x1) + (y2-y1)*(y2-y1)] 
464   return [expr sqrt(d)] 
465
466 proc fact n { 
467   if {$n == 0} {return 1} else { 
468     return [expr n*[fact [expr n -1]]] 
469   } 
470
471 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
472
473
474 @subsubsection occt_draw_2_6_2 global, upvar
475
476 Syntax:                 
477
478 ~~~~~
479 global varname [varname ...] 
480 upvar varname localname [varname localname ...] 
481 ~~~~~
482
483
484 **global** accesses high level variables. Unlike C, global variables are not visible in procedures. 
485
486 **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. 
487
488 **Note** that in the following examples the \$ character is always necessarily used to access the arguments.
489  
490 **Example:** 
491 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{.cpp}
492 # convert degree to radian 
493 # pi is a global variable 
494 proc deg2rad (degree} { 
495   return [dval pi*$degree/2.] 
496
497 # create line with a point and an angle 
498 proc linang {linename x y angle} { 
499   upvar linename l 
500   line l $x $y cos($angle) sin($angle) 
501 }
502 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
503
504 @section occt_draw_3 Basic Commands
505
506 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: 
507
508   * General commands, which are used for Draw and TCL management.
509   * Variable commands, which are used to manage Draw variables such as storing and dumping.
510   * Graphic commands, which are used to manage the graphic system, and so pertain to views.
511   * Variable display commands, which are used to manage the display of objects within given views.
512
513 Note that Draw also features a GUI task bar providing an alternative way to give certain general, graphic and display commands 
514
515
516 @subsection occt_draw_3_1 General commands
517
518 This section describes several useful commands:
519
520   * **help** to get information, 
521   * **source** to eval a script from a file, 
522   * **spy** to capture the commands in a file,
523   * **cpulimit** to limit the process cpu time, 
524   * **wait** to waste some time, 
525   * **chrono** to time commands. 
526
527 @subsubsection occt_draw_3_1_1 help
528
529 Syntax:                  
530
531 ~~~~~
532 help [command [helpstring group]] 
533 ~~~~~
534
535 Provides help or modifies the help information. 
536
537 **help** without arguments lists all groups and the commands in each group. 
538
539 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. 
540
541 **Example:** 
542 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{.cpp}
543 # Gives help on all commands starting with *a* 
544 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
545
546
547 @subsubsection occt_draw_3_1_2 source
548
549 Syntax:
550
551 ~~~~~
552 source filename 
553 ~~~~~
554 Executes a file. 
555
556 The **exit** command will terminate the file. 
557
558 @subsubsection occt_draw_3_1_3 spy
559
560 Syntax:                  
561
562 ~~~~~
563 spy [filename] 
564 ~~~~~
565
566 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. 
567
568 If a command returns an error it is saved with a comment mark. 
569
570 The file created by **spy** can be executed with the **source** command. 
571
572 **Example:** 
573 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{.cpp}
574 # all commands will be saved in the file ;session; 
575 spy session 
576 # the file ;session; is closed and commands are not saved 
577 spy 
578 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
579
580
581
582 @subsubsection occt_draw_3_1_4 cpulimit
583
584 Syntax:                  
585
586 ~~~~~
587 cpulimit [nbseconds] 
588 ~~~~~
589
590 **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. 
591
592 **Example:** 
593 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{.cpp}
594 #limit cpu to one hour 
595 cpulimit 3600 
596 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
597
598 @subsubsection occt_draw_3_1_5 wait
599
600 Syntax:
601 ~~~~~
602 wait [nbseconds] 
603 ~~~~~
604 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. 
605
606 ~~~~~
607 # You have ten seconds ... 
608 wait 
609 ~~~~~
610
611 @subsubsection occt_draw_3_1_6 chrono
612
613 Syntax:                  
614
615 ~~~~~
616 chrono [ name start/stop/reset/show] 
617 ~~~~~
618
619 Without arguments, **chrono** activates Draw chronometers. The elapsed time ,cpu system and cpu user times for each command will be printed. 
620
621 With arguments, **chrono** is used to manage activated chronometers. You can perform the following actions with a chronometer. 
622   * run the chronometer (start).
623   * stop the chronometer (stop).
624   * reset the chronometer to 0 (reset).
625   * display the current time (show).
626
627 **Example:** 
628 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{.cpp}
629 chrono 
630 ==Chronometers activated. 
631 ptorus t 20 5 
632 ==Elapsed time: 0 Hours 0 Minutes 0.0318 Seconds 
633 ==CPU user time: 0.01 seconds 
634 ==CPU system time: 0 seconds 
635 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
636
637 @subsection occt_draw_3_2  Variable management commands
638
639 @subsubsection occt_draw_3_2_1 isdraw, directory
640
641 Syntax:                  
642 ~~~~~
643 isdraw varname 
644 directory [pattern] 
645 ~~~~~
646
647 **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. 
648
649 Use **directory** to return a list of all Draw global variables matching a pattern. 
650
651 **Example:** 
652 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{.cpp}
653 set a 1 
654 isdraw a 
655 === 0 
656
657 dset a 1 
658 isdraw a 
659 === 1 
660
661 circle c 0 0 1 0 5 
662 isdraw c 
663 === 1 
664
665 # to destroy all Draw objects with name containing curve 
666 foreach var [directory *curve*] {unset $var} 
667 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
668
669
670 @subsubsection occt_draw_3_2_2 whatis, dump
671
672 Syntax:
673
674 ~~~~~
675 whatis varname [varname ...] 
676 dump varname [varname ...] 
677 ~~~~~
678
679 **whatis** returns short information about a Draw variable. This is usually the type name. 
680
681 **dump** returns a brief type description, the coordinates, and if need be, the parameters of a Draw variable. 
682
683 **Example:** 
684 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{.cpp}
685 circle c 0 0 1 0 5 
686 whatis c 
687 c is a 2d curve 
688
689 dump c 
690
691 ***** Dump of c ***** 
692 Circle 
693 Center :0, 0 
694 XAxis :1, 0 
695 YAxis :-0, 1 
696 Radius :5 
697 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
698
699 **Note** The behavior of *whatis* on other variables (not Draw) is not excellent. 
700
701
702 @subsubsection occt_draw_3_2_3 rename, copy
703
704 Syntax:      
705 ~~~~~
706 rename varname tovarname [varname tovarname ...] 
707 copy varname tovarname [varname tovarname ...] 
708 ~~~~~
709
710   * **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. 
711   * **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. 
712
713 **Example:** 
714 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{.cpp}
715 circle c1 0 0 1 0 5 
716 rename c1 c2 
717
718 # curves are copied, c2 will not be modified 
719 copy c2 c3 
720 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
721
722 @subsubsection occt_draw_3_2_4 datadir, save, restore
723
724 Syntax:
725 ~~~~~
726 datadir [directory] 
727 save variable [filename] 
728 restore filename [variablename] 
729 ~~~~~
730
731   * **datadir** without arguments prints the path of the current data directory. 
732   * **datadir** with an argument sets the data directory path. \
733
734 If the path starts with a dot (.) only the last directory name will be changed in the path. 
735
736   * **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. 
737   * **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. 
738
739 The exact content of the file is type-dependent. They are usually ASCII files and so, architecture independent. 
740
741 **Example:** 
742 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{.cpp}
743 # note how TCL accesses shell environment variables 
744 # using $env() 
745 datadir 
746 ==. 
747
748 datadir $env(WBCONTAINER)/data/default 
749 ==/adv_20/BAG/data/default 
750
751 box b 10 20 30 
752 save b theBox 
753 ==/adv_20/BAG/data/default/theBox 
754
755 # when TCL does not find a command it tries a shell command 
756 ls [datadir] 
757 == theBox 
758
759 restore theBox 
760 == theBox 
761 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
762
763 @subsection occt_draw_3_3 User defined commands
764
765 *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. 
766
767 *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. 
768
769 @subsubsection occt_draw_3_3_1 set
770
771 #### In *DrawTrSurf* package:
772
773 ~~~~~
774 void Set(Standard_CString&amp; Name,const gp_Pnt&amp; G) ; 
775 void Set(Standard_CString&amp; Name,const gp_Pnt2d&amp; G) ; 
776 void Set(Standard_CString&amp; Name, 
777 const Handle(Geom_Geometry)&amp; G) ; 
778 void Set(Standard_CString&amp; Name, 
779 const Handle(Geom2d_Curve)&amp; C) ; 
780 void Set(Standard_CString&amp; Name, 
781 const Handle(Poly_Triangulation)&amp; T) ; 
782 void Set(Standard_CString&amp; Name, 
783 const Handle(Poly_Polygon3D)&amp; P) ; 
784 void Set(Standard_CString&amp; Name, 
785 const Handle(Poly_Polygon2D)&amp; P) ; 
786 ~~~~~
787
788 #### In *DBRep* package:
789
790 ~~~~~
791 void Set(const Standard_CString Name, 
792 const TopoDS_Shape&amp; S) ; 
793 ~~~~~
794
795 Example of *DrawTrSurf*
796
797 ~~~~~
798 Handle(Geom2d_Circle) C1 = new Geom2d_Circle 
799 (gce_MakeCirc2d (gp_Pnt2d(50,0,) 25)); 
800 DrawTrSurf::Set(char*, C1); 
801 ~~~~~
802
803 Example of *DBRep* 
804
805 ~~~~~
806 TopoDS_Solid B; 
807 B = BRepPrimAPI_MakeBox (10,10,10); 
808 DBRep::Set(char*,B); 
809 ~~~~~
810
811 @subsubsection occt_draw_3_3_2 get
812
813 #### In *DrawTrSurf* package:
814  
815 ~~~~~
816 Handle_Geom_Geometry Get(Standard_CString&amp; Name) ; 
817 ~~~~~
818
819 #### In *DBRep* package:
820
821 ~~~~~
822 TopoDS_Shape Get(Standard_CString&amp; Name, 
823 const TopAbs_ShapeEnum Typ = TopAbs_SHAPE, 
824 const Standard_Boolean Complain 
825 = Standard_True) ; 
826 ~~~~~
827
828 Example of *DrawTrSurf*
829
830 ~~~~~
831 Standard_Integer MyCommand 
832 (Draw_Interpretor&amp; theCommands, 
833 Standard_Integer argc, char** argv) 
834 {...... 
835 // Creation of a Geom_Geometry from a Draw geometric 
836 // name 
837 Handle (Geom_Geometry) aGeom= DrawTrSurf::Get(argv[1]); 
838
839 ~~~~~
840
841 Example of *DBRep*
842
843 ~~~~~
844 Standard_Integer MyCommand 
845 (Draw_Interpretor&amp; theCommands, 
846 Standard_Integer argc, char** argv) 
847 {...... 
848 // Creation of a TopoDS_Shape from a Draw topological 
849 // name 
850 TopoDS_Solid B = DBRep::Get(argv[1]); 
851
852 ~~~~~
853
854 @section occt_draw_4 Graphic Commands
855
856 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. 
857
858 @subsection occt_draw_4_1 Axonometric viewer
859
860 @subsubsection occt_draw_4_1_1 view, delete
861
862 Syntax:                  
863 ~~~~~
864 view index type [X Y W H] 
865 delete [index] 
866 ~~~~~
867
868 **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. 
869
870 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.. 
871
872 **delete** deletes a view. If no index is given, all the views are deleted. 
873
874 Type selects from the following range: 
875
876   * *AXON* : Axonometric view
877   * *PERS* : Perspective view
878   * *+X+Y* : View on both axes (i.e. a top view), other codes are *-X+Y, +Y-Z*, etc.
879   * *-2D-* : 2d view
880
881 The index, the type, the current zoom are displayed in the window title . 
882
883 **Example:** 
884 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{.cpp}
885 # this is the content of the mu4 procedure 
886 proc mu4 {} { 
887 delete 
888 view 1 +X+Z 320 20 400 400 
889 view 2 +X+Y 320 450 400 400 
890 view 3 +Y+Z 728 20 400 400 
891 view 4 AXON 728 450 400 400 
892
893 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
894
895 See also: **axo, pers, top, bottom, left, right, front, back, mu4, v2d, av2d, smallview** 
896
897 @subsubsection occt_draw_4_1_2  axo, pers, top, ...
898
899 Syntax:      
900
901 ~~~~~
902 axo 
903 pers 
904 ... 
905 smallview type 
906 ~~~~~
907
908 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. 
909
910   * **axo** creates a large window axonometric view;
911   * **pers** creates a large window perspective view;
912   * **top**, **bottom**, **left**, **right**, **front**, **back** create a large window axis view;
913   * **mu4** creates four small window views: front, left, top and axo.
914   * **v2d** creates a large window 2d view.
915   * **av2d** creates two small window views, one 2d and one axo
916   * **smallview** creates a view at the bottom right of the screen of the given type. 
917
918 See also: **view**, **delete** 
919
920 @subsubsection occt_draw_4_1_3 mu, md, 2dmu, 2dmd, zoom, 2dzoom
921
922 Syntax:
923
924 ~~~~~
925     mu [index] value 
926     2dmu [index] value 
927     zoom [index] value 
928     wzoom 
929 ~~~~~
930
931 * **mu** (magnify up) increases the zoom in one or several views by a factor of 10%. 
932 * **md** (magnify down) decreases the zoom by the inverse factor. **2dmu** and **2dmd** 
933 perform the same on one or all 2d views. 
934 * **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. 
935 * **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. 
936
937 **Example:** 
938 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{.cpp}
939     # set a zoom of 2.5 
940     zoom 2.5 
941
942     # magnify by 10% 
943     mu 1 
944
945     # magnify by 20% 
946 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
947 See also: **fit**, **2dfit** 
948
949
950 @subsubsection occt_draw_4_14 pu, pd, pl, pr, 2dpu, 2dpd, 2dpl, 2dpr
951
952 Syntax:                  pu [index] 
953 pd [index] 
954
955 The **p_ **commands are used to pan. **pu **and **pd **pan up and down respectively;**pl **and **pr **pan left and right respectively. Each time the view is displaced by 40 pixels.When no index is given, all views will pan in the direction specified. 
956
957 **Example:** 
958 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{.cpp}
959 # you have selected one anonometric view 
960 pu 
961 # or 
962 pu 1 
963
964 # you have selected an mu4 view; the object in the third 
965 # 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 2d clear 
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 **Example:** 
1278 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{.cpp}
1279 # See the example with the pick command 
1280 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{.cpp}
1281 See also: **pick** 
1282
1283 @subsection occt_draw_4_2 AIS viewer – view commands
1284
1285
1286 @subsubsection occt_draw_4_2_1 vinit
1287
1288 Syntax:                  
1289 ~~~~~
1290 vinit 
1291 ~~~~~
1292 Creates the 3D viewer window 
1293
1294 @subsubsection occt_draw_4_2_2 vhelp
1295
1296 Syntax:
1297 ~~~~~
1298 vhelp 
1299 ~~~~~
1300 Displays help in the 3D viewer window. The help consists in a list of hotkeys and their functionalities. 
1301
1302 @subsubsection occt_draw_4_2_3 vtop
1303
1304 Syntax:
1305 ~~~~~
1306 vtop 
1307 ~~~~~
1308
1309 Displays top view in the 3D viewer window. 
1310
1311 **Example:** 
1312 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{.cpp}
1313 vinit 
1314 box b 10 10 10 
1315 vdisplay b 
1316 vfit 
1317 vtop 
1318 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1319
1320 @subsubsection occt_draw_4_2_4 vaxo
1321
1322 Syntax:                  
1323 ~~~~~
1324 vaxo 
1325 ~~~~~
1326
1327 Displays axonometric view in the 3D viewer window. 
1328
1329 **Example:** 
1330 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{.cpp}
1331 vinit 
1332 box b 10 10 10 
1333 vdisplay b 
1334 vfit 
1335 vaxo 
1336 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1337
1338 @subsubsection occt_draw_4_2_5 vsetbg
1339
1340 Syntax:                  
1341 ~~~~~
1342 vsetbg imagefile [filltype] 
1343 ~~~~~
1344
1345 Loads image file as background. *filltype* must be NONE, CENTERED, TILED or STRETCH. 
1346
1347 **Example:** 
1348 ~~~~~
1349 vinit 
1350 vsetbg myimage.brep CENTERED 
1351 ~~~~~
1352
1353 @subsubsection occt_draw_4_2_6 vclear
1354
1355 Syntax:                  
1356 ~~~~~
1357 vclear 
1358 ~~~~~
1359 Removes all objects from the viewer. 
1360
1361 @subsubsection occt_draw_4_2_7 vrepaint
1362
1363 Syntax:                  
1364 ~~~~~
1365 vrepaint 
1366 ~~~~~
1367 Forcedly redisplays the shape in the 3D viewer window. 
1368
1369 @subsubsection occt_draw_4_2_8 vfit
1370
1371 Syntax:                  
1372 ~~~~~
1373 vfit 
1374 ~~~~~
1375 Automatic zoom/panning. Objects in the view are visualized to occupy the maximum surface. 
1376
1377 @subsubsection occt_draw_4_2_9 vzfit
1378
1379 Syntax:                  
1380 ~~~~~
1381 vzfit 
1382 ~~~~~
1383
1384 Automatic depth panning. Objects in the view are visualized to occupy the maximum 3d space. 
1385
1386 @subsubsection occt_draw_4_2_10  vreadpixel
1387
1388 Syntax:     
1389 ~~~~~
1390 vreadpixel xPixel yPixel [{rgb|rgba|depth|hls|rgbf|rgbaf}=rgba] [name] 
1391 ~~~~~
1392 Read pixel value for active view.
1393
1394
1395 @subsubsection occt_draw_4_2_11  vselect
1396
1397 Syntax:     
1398 ~~~~~
1399 vselect x1 y1 [x2 y2 [x3 y3 ... xn yn]] [shift_selection = 0|1]
1400 ~~~~~
1401
1402 Emulates different types of selection:
1403
1404   * single mouse click selection
1405   * selection with a rectangle having the upper left and bottom right corners in *(x1,y1)* and *(x2,y2)* respectively
1406   * selection with a polygon having the corners in pixel positions *(x1,y1), (x2,y2),…, (xn,yn)*
1407   * any of these selections if shift_selection is set to 1.
1408
1409 @subsubsection occt_draw_4_2_12  vmoveto
1410
1411 Syntax:     
1412
1413 ~~~~~
1414 vmoveto x y
1415 ~~~~~
1416 Emulates cursor movement to pixel position (x,y).
1417
1418 @subsubsection occt_draw_4_2_13  vviewparams
1419
1420 Syntax:     
1421 ~~~~~
1422 vviewparams [scale center_X center_Y proj_X proj_Y proj_Z up_X up_Y up_Z at_X at_Y at_Z]
1423 ~~~~~
1424 Gets or sets the current view characteristics.
1425
1426 @subsubsection occt_draw_4_2_14  vchangeselected
1427
1428 Syntax:     
1429 ~~~~~
1430 vchangeselected shape
1431 ~~~~~
1432 Adds a shape to selection or removes one from it.
1433
1434 @subsubsection occt_draw_4_2_15  vzclipping
1435
1436 Syntax:     
1437 ~~~~~
1438 vzclipping [mode] [depth width]
1439 ~~~~~
1440 Gets or sets ZClipping mode, width and depth, where
1441  - *mode = OFF|BACK|FRONT|SLICE*
1442  - *depth* is a real value from segment [0,1]
1443  - *width* is a real value from segment [0,1]
1444
1445 @subsubsection occt_draw_4_2_16  vnbselected
1446
1447 Syntax:     
1448 ~~~~~
1449 vnbselected
1450 ~~~~~
1451 Returns the number of selected objects in the interactive context.
1452
1453 @subsubsection occt_draw_4_2_17  vantialiasing
1454
1455 Syntax:     
1456 ~~~~~
1457 valntialiasing 1|0
1458 ~~~~~
1459 Sets antialiasing if the command is called with 1 or unsets otherwise.
1460
1461 @subsubsection occt_draw_4_2_18  vpurgedisplay
1462
1463 Syntax:     
1464 ~~~~~
1465 vpurgedisplay [CollectorToo = 0|1]
1466 ~~~~~
1467 Removes structures which do not belong to objects displayed in neutral point.
1468
1469 @subsubsection occt_draw_4_2_19  vhlr
1470
1471 Syntax:     
1472 ~~~~~
1473 vhlr is_enabled={on|off}
1474 ~~~~~
1475 Switches hidden line removal (computed) mode on/off.
1476
1477 @subsubsection occt_draw_4_2_20  vhlrtype
1478
1479 Syntax:     
1480 ~~~~~
1481 vhlrtype  algo_type={algo|polyalgo} [shape_1 ... shape_n]
1482 ~~~~~
1483
1484 Changes the type of HLR algorithm used for shapes.
1485 If the algo_type is algo, the exact HLR algorithm is used, otherwise the polygonal algorithm is used for defined shapes. 
1486
1487 If no shape is specified through the command arguments, the given HLR algorithm_type is applied to all *AIS_Shape* instances in the current context, and the command also changes the default HLR algorithm type.
1488
1489 **Note** that this command works with instances of *AIS_Shape* or derived classes only, other interactive object types are ignored.
1490
1491
1492 @subsection occt_draw_4_3 AIS viewer – display commands
1493
1494 @subsubsection occt_draw_4_3_1 vdisplay
1495
1496 Syntax:                  
1497 ~~~~~
1498 vdisplay name1 [name2] … [name n] 
1499 ~~~~~
1500 Displays named objects. 
1501
1502 **Example:** 
1503 ~~~~~
1504 vinit 
1505 box b 40 40 40 10 10 10 
1506 psphere s 20 
1507 vdisplay s b 
1508 vfit 
1509 ~~~~~
1510
1511 @subsubsection occt_draw_4_3_2 vdonly
1512
1513 Syntax:                  
1514 ~~~~~
1515 vdonly [name1] … [name n] 
1516 ~~~~~
1517 Displays only selected or named objects. If there are no selected or named objects, nothing is done. 
1518
1519 **Example:** 
1520 ~~~~~
1521 vinit 
1522 box b 40 40 40 10 10 10 
1523 psphere s 20 
1524 vdonly b 
1525 vfit 
1526 ~~~~~
1527
1528 @subsubsection occt_draw_4_3_3 vdisplayall
1529
1530 Syntax:                  
1531 ~~~~~
1532 vdisplayall 
1533 ~~~~~
1534 Displays all created objects. 
1535
1536
1537 **Example:** 
1538 ~~~~~
1539 vinit 
1540 box b 40 40 40 10 10 10 
1541 psphere s 20 
1542 vdisplayall 
1543 vfit 
1544 ~~~~~
1545
1546 @subsubsection occt_draw_4_3_4 verase
1547
1548 Syntax: 
1549 ~~~~~
1550 verase [name1] [name2] … [name n] 
1551 ~~~~~
1552
1553 Erases some selected or named objects. If there are no selected or named objects, the whole viewer is erased. 
1554
1555 **Example:** 
1556 ~~~~~
1557 vinit 
1558 box b1 40 40 40 10 10 10 
1559 box b2 -40 -40 -40 10 10 10 
1560 psphere s 20 
1561 vdisplayall 
1562 vfit 
1563 # erase only the first box 
1564 verase b1 
1565 # erase the second box and sphere 
1566 verase 
1567 ~~~~~
1568
1569 @subsubsection occt_draw_4_3_5 veraseall
1570
1571 Syntax:                  
1572 ~~~~~
1573 veraseall 
1574 ~~~~~
1575 Erases all objects displayed in the viewer. 
1576
1577 **Example:** 
1578
1579 ~~~~~
1580 vinit 
1581 box b1 40 40 40 10 10 10 
1582 box b2 -40 -40 -40 10 10 10 
1583 psphere s 20 
1584 vdisplayall 
1585 vfit 
1586 # erase only the first box 
1587 verase b1 
1588 # erase the second box and sphere 
1589 verseall 
1590 ~~~~~
1591
1592 @subsubsection occt_draw_4_3_6 vsetdispmode
1593
1594 Syntax:                  
1595
1596 ~~~~~
1597 vsetdispmode [name] mode(0,1,2,3) 
1598 ~~~~~
1599
1600 Sets display mode for all, selected or named objects to the following values:
1601 * **0** - WireFrame,
1602 * **1** - Shading, 
1603 * **2** - Quick HideLineremoval,
1604 * **3** - Exact HideLineremoval. 
1605
1606 **Example:** 
1607
1608 ~~~~~
1609 vinit 
1610 box b 10 10 10 
1611 vdisplay b 
1612 vsetdispmode 1 
1613 vfit 
1614 ~~~~~
1615 @subsubsection occt_draw_4_39 vtypes
1616
1617 Syntax:                  vtypes 
1618
1619 Makes a list of known types and signatures in AIS. 
1620
1621 @subsubsection occt_draw_4_3_7 vdisplaytype
1622
1623 Syntax:                  
1624 ~~~~~
1625 vdisplaytype type 
1626 ~~~~~
1627
1628 Displays all objects of a given type. The following types are possible: **Point, Axis, Trihedron, PlaneTrihedron, Line, Circle, Plane, Shape, ConnectedShape, MultiConn.Shape, ConnectedInter., MultiConn., Constraint** and **Dimension**. 
1629
1630 @subsubsection occt_draw_4_3_8 verasetype
1631
1632 Syntax:                  verasetype type 
1633
1634 Erases all objects of a given type. 
1635 Possible** type**s are **;Point;, ;Axis;, ;Trihedron;, ;PlaneTrihedron;, ;Line;, ;Circle;, ;Plane;, ;Shape;, ;ConnectedShape;, ;MultiConn.Shape;, ;ConnectedInter.;, ;MultiConn.;, ;Constraint; **and **;Dimension; **(see **vtypes**). 
1636
1637
1638
1639 @subsubsection occt_draw_4_310 vsetcolor
1640
1641 Syntax:                  vsetcolor [shapename] colorname 
1642
1643 Sets color for all, selected or named shapes. 
1644 Possible **colorname**s are: ;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;**. 
1645
1646
1647
1648 @subsubsection occt_draw_4_311 vunsetcolor
1649
1650 Syntax:                  vunsetcolor [shapename] 
1651
1652 Sets default color for all, selected or named shapes. 
1653
1654 @subsubsection occt_draw_4_312 vsettransparency
1655
1656 Syntax:                  vsettransparency [shapename] coeficient 
1657
1658 Sets transparency for all selected or named shapes. The **Coefficient** may be between 0.0 (opaque) and 1.0 (fully transparent). Warning: at 1.0 the shape becomes invisible. 
1659 **Example:** 
1660
1661 vinit 
1662 box b 10 10 10 
1663 psphere s 20 
1664 vdisplay b s 
1665 vfit 
1666 vsetdispmode 1 
1667 vsettransparency b 0.5 
1668
1669 @subsubsection occt_draw_4_313 vunsettransparency
1670
1671 Syntax:                  vunsettransparency [shapename] 
1672
1673 Sets default transparency (0.0) for all selected or named shapes. 
1674
1675 @subsubsection occt_draw_4_314 vsetmaterial
1676
1677 Syntax:                  vsetmaterial [shapename] materialname 
1678
1679 Sets material for all selected or named shapes. 
1680 **materialname** is ***BRASS*, *BRONZE*, *COPPER*, *GOLD*, *PEWTER*, *PLASTER*, *PLASTIC*, *SILVER*, *STEEL*, *STONE*, *SHINY_PLASTIC*, *SATIN*, *METALIZED*, *NEON_GNC*, *CHROME*, *ALUMINIUM*, *OBSIDIAN*, *NEON_PHC*, *JADE*.** 
1681 **Example:** 
1682
1683 vinit 
1684 psphere s 20 
1685 vdisplay s 
1686 vfit 
1687 vsetdispmode 1 
1688 vsetmaterial s JADE 
1689
1690 @subsubsection occt_draw_4_315 vunsetmaterial
1691
1692 Syntax:                  vunsetmaterial [shapename] 
1693
1694 Sets default material for all selected or named shapes. 
1695
1696 @subsubsection occt_draw_4_316 vsetwidth
1697
1698 Syntax:                  vsetwidth [shapename] coeficient 
1699
1700 Sets width of the edges for all selected or named shapes. 
1701 The **Coefficient** may be between 0.0 and 10.0. 
1702 **Example:** 
1703
1704 vinit 
1705 box b 10 10 10 
1706 vdisplay b 
1707 vfit 
1708 vsetwidth b 5 
1709
1710 @subsubsection occt_draw_4_317 vunsetwidth
1711
1712 Syntax:                  vunsetwidth [shapename] 
1713
1714 Sets default width of edges (0.0) for all selected or named shapes. 
1715
1716 @subsubsection occt_draw_4_318 vsetshading
1717
1718 Syntax:                  vsetshading shapename [coefficient] 
1719
1720 Sets deflection coefficient that defines the quality of the shape’s representation in the shading mode. Default coefficient is 0.0008. 
1721 **Example:** 
1722
1723 vinit 
1724 psphere s 20 
1725 vdisplay s 
1726 vfit 
1727 vsetdispmode 1 
1728 vsetshading s 0.005 
1729 @subsubsection occt_draw_4_319 vunsetshading
1730
1731 Syntax:                  vunsetshading [shapename] 
1732
1733 Sets default deflection coefficient (0.0008) that defines the quality of the shape’s representation in the shading mode. Default coefficient is 0.0008. 
1734
1735 @subsubsection occt_draw_4_320 vsetam
1736
1737 Syntax:                  vsetam [shapename] mode 
1738
1739 Activates selection mode for all selected or named shapes. 
1740 **mode** is **0** for **shape** itself, **1** for **vertices**, **2** for **edges**, **3** for **wires**, **4** for **faces**, **5** for **shells**, **6** for **solids**, **7** for **compounds**. 
1741 **Example:** 
1742
1743 vinit 
1744 box b 10 10 10 
1745 vdisplay b 
1746 vfit 
1747 vsetam b 2 
1748 @subsubsection occt_draw_4_321 vunsetam
1749
1750 Syntax:                  vunsetam 
1751
1752 Deactivates all selection modes for all shapes. 
1753
1754 @subsubsection occt_draw_4_322 vdump
1755
1756 Syntax:                  vdump filename.{png|xwd|bmp} 
1757
1758 Extracts the contents of the viewer window to a png, XWD or BMP file. 
1759
1760 @subsubsection occt_draw_4_323 vdir
1761
1762 Syntax:                  vdir 
1763
1764 Displays the list of displayed objects. 
1765
1766 @subsubsection occt_draw_4_324 vsub
1767
1768 Syntax:                  vsub 0/1(on/off)[shapename] 
1769
1770 Hilights/unhilights named or selected objects which are displayed at neutral state with subintensity color. 
1771 **Example:** 
1772
1773 vinit 
1774 box b 10 10 10 
1775 psphere s 20 
1776 vdisplay b s 
1777 vfit 
1778 vsetdispmode 1 
1779 vsub b 1 
1780
1781 @subsubsection occt_draw_4_325 vardis
1782
1783 Syntax:                  vardis 
1784
1785 Displays active areas (for each activated sensitive entity, one or several 2D bounding boxes are displayed, depending on the implementation of a particular entity). 
1786
1787 @subsubsection occt_draw_4_326 varera
1788
1789 Syntax:                  varera 
1790
1791 Erases active areas. 
1792
1793 @subsubsection occt_draw_4_327 vsensdis
1794
1795 Syntax:                  vsensdis 
1796
1797 Displays active entities (sensitive entities of one of the standard types corresponding to active selection modes). 
1798
1799 Standard entity types are those defined in Select3D package: 
1800   * sensitive box
1801   * sensitive face
1802   * sensitive curve
1803   * sensitive segment
1804   * sensitive circle
1805   * sensitive point
1806   * sensitive triangulation
1807   * sensitive triangle
1808 Custom (application-defined) sensitive entity types are not processed by this command. 
1809
1810 @subsubsection occt_draw_4_328 vsensera
1811
1812 Syntax:                  vsensera 
1813
1814 Erases active entities. 
1815
1816 @subsubsection occt_draw_4_329 vperf
1817
1818 Syntax:                  vperf shapename 1/0 (Transformation/Loacation) 1/0 (Primitives sensibles ON/OFF) 
1819
1820 Tests the animation of an object along a predefined trajectory. 
1821 **Example:** 
1822
1823 vinit 
1824 box b 10 10 10 
1825 psphere s 20 
1826 vdisplay b s 
1827 vfit 
1828 vsetdispmode 0 
1829 vperf b 1 1 
1830 @subsubsection occt_draw_4_330 vr
1831
1832 Syntax:                  vr filename 
1833
1834 Reads shape from BREP-format file and displays it in the viewer. 
1835 **Example:** 
1836
1837 vinit 
1838 vr myshape.brep 
1839 @subsubsection occt_draw_4_330331 vstate
1840
1841 Syntax:                  vstate [name1] … [name n] 
1842
1843 Makes a list of the status (**Displayed** or **Not Displayed**) of some selected or named objects. 
1844
1845
1846
1847 @subsection occt_draw_4_3304 AIS viewer – object commands
1848
1849 @subsubsection occt_draw_4_33041 vtrihedron
1850
1851 Syntax:                  vtrihedron name [X0] [Y0] [Z0] [Zu] [Zv] [Zw] [Xu] [Xv] [Xw] 
1852
1853 Creates a new AIS_Trihedron object. If no argument is set, the default trihedron (0XYZ) is created. 
1854 **Example:** 
1855
1856 vinit 
1857 vtrihedron tr 
1858
1859 @subsubsection occt_draw_4_33042 vplanetri
1860
1861 Syntax:                  vplanetri name 
1862
1863 Creates a plane from a trihedron selection. 
1864
1865
1866 @subsubsection occt_draw_4_33043 vsize
1867
1868 Syntax:                  vsize [name] [size] 
1869
1870 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. 
1871 **Example:** 
1872
1873 vinit 
1874 vtrihedron tr1 
1875 vtrihedron tr2 0 0 0 1 0 0 1 0 0 
1876 vsize tr2 400 
1877
1878 @subsubsection occt_draw_4_33044 vaxis
1879
1880 Syntax:                  vaxis name [Xa Ya Za Xb Yb Zb] 
1881
1882 Creates an axis. If  the values are not defined, an axis is created by interactive selection of two vertices or one edge 
1883 **Example:** 
1884
1885 vinit 
1886 vtrihedron tr 
1887 vaxis axe1 0 0 0 1 0 0 
1888
1889 @subsubsection occt_draw_4_33045 vaxispara
1890
1891 Syntax:                  vaxispara nom 
1892
1893 Creates an axis by interactive selection of an edge and a vertex. 
1894
1895 @subsubsection occt_draw_4_33046 vaxisortho
1896
1897 Syntax:                  vaxisotrho name 
1898
1899 Creates an axis by interactive selection of an edge and a vertex. The axis will be orthogonal to the selected edge. 
1900
1901 @subsubsection occt_draw_4_33047 vpoint
1902
1903 Syntax:                  vpoint name [Xa Ya Za] 
1904
1905 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). 
1906 **Example:** 
1907
1908 vinit 
1909 vpoint p 0 0 0 
1910
1911 @subsubsection occt_draw_4_33048 vplane
1912
1913 Syntax:                  vplane name [AxisName] [PointName] 
1914                         vplane name [PointName] [PointName] [PointName] 
1915                         vplane name [PlaneName] [PointName] 
1916
1917 Creates a plane from named or interactively selected entities. 
1918 **Example:** 
1919
1920 vinit 
1921 vpoint p1 0 50 0 
1922 vaxis axe1 0 0 0 0 0 1 
1923 vtrihedron tr 
1924 vplane plane1 axe1 p1 
1925
1926 @subsubsection occt_draw_4_33049 vplanepara
1927
1928 Syntax:                  vplanepara name 
1929
1930 Creates a plane from interactively selected vertex and face. 
1931
1932 @subsubsection occt_draw_4_330410 vplaneortho
1933
1934 Syntax:                  vplaneortho name 
1935
1936 Creates a plane from interactive selected face and coplanar edge. 
1937
1938 @subsubsection occt_draw_4_330411 vline
1939
1940 Syntax:                  vline name [PointName] [PointName] 
1941                         vline name [Xa Ya Za Xb Yb Zb] 
1942
1943 Creates a line from coordinates, named or interactively selected vertices. 
1944 **Example:** 
1945
1946 vinit 
1947 vtrihedron tr 
1948 vpoint p1 0 50 0 
1949 vpoint p2 50 0 0 
1950 vline line1 p1 p2 
1951 vline line2 0 0 0 50 0 1 
1952
1953 @subsubsection occt_draw_4_330412 vcircle
1954
1955 Syntax:      vcircle name [PointName PointName PointName IsFilled] 
1956 vcircle name [PlaneName PointName Radius IsFilled] 
1957
1958 Creates a circle from named or interactively selected entities.  Parameter IsFilled is defined as 0 or 1. 
1959 **Example:** 
1960
1961 vinit 
1962 vtrihedron tr 
1963 vpoint p1 0 50 0 
1964 vpoint p2 50 0 0 
1965 vpoint p3 0 0 0 
1966 vcircle circle1 p1 p2 p3 1 
1967
1968
1969 @subsubsection occt_draw_4_330413 vtri2d
1970
1971 Syntax:                  vtri2d name 
1972
1973 Creates a plane with a 2D trihedron from an interactively selected face. 
1974
1975 @subsubsection occt_draw_4_330414 vselmode
1976
1977 Syntax:                  vselmode [object] mode On/Off 
1978
1979 Sets the selection mode for an object. If the object value is not defined, the selection mode is set for all displayed objects. 
1980 Value On is defined as 1 and Off – as 0. 
1981 **Example:** 
1982
1983 vinit 
1984 vpoint p1 0 0 0 
1985 vpoint p2 50 0 0 
1986 vpoint p3 25 40 0 
1987 vtriangle triangle1 p1 p2 p3 
1988 @subsubsection occt_draw_4_330415 vconnect, vconnectsh
1989
1990 Syntax:                  vconnect name object Xo Yo Zo Xu Xv Xw Zu Zv Zw 
1991                              vconnectsh name shape Xo Yo Zo Xu Xv Xw Zu Zv Zw 
1992
1993 Creates and displays an object with input location connected to a named entity. 
1994 The difference between these two commands is that the object created by vconnect does not support the selection modes differrent from 0. 
1995 **Example:** 
1996
1997 Vinitvinit 
1998 vpoint p1 0 0 0 
1999 vpoint p2 50 0 0 
2000 vsegment segment p1 p2 
2001 restore CrankArm.brep obj 
2002 vdisplay obj 
2003 vconnectsh new obj 100100100 1 0 0 0 0 1 
2004
2005
2006
2007 @subsubsection occt_draw_4_330416 vtriangle
2008
2009 Syntax:                  vtriangle name PointName PointName PointName 
2010
2011 Creates and displays a filled triangle from named points. 
2012 **Example:** 
2013
2014 vinit 
2015 vpoint p1 0 0 0 
2016 vpoint p2 50 0 0 
2017 vpoint p3 25 40 0 
2018 vtriangle triangle1 p1 p2 p3 
2019
2020 @subsubsection occt_draw_4_330417 vsegment
2021
2022 Syntax:                  vsegment name PointName PointName 
2023
2024 Creates and displays a segment from named points. 
2025 **Example:** 
2026
2027 Vinit 
2028 vpoint p1 0 0 0 
2029 vpoint p2 50 0 0 
2030 vsegment segment p1 p2 
2031
2032
2033 **MeshVS **(Mesh Visualization Service) component provides flexible means of displaying meshes with associated pre- and post- processor data. 
2034
2035
2036
2037 @subsection occt_draw_4_3305 AIS viewer – Mesh Visualization Service
2038
2039 @subsubsection occt_draw_4_33051 meshfromstl
2040
2041 Syntax:                  meshfromstl meshname file 
2042
2043 Creates a MeshVS_Mesh object based on STL file data. The object will be displayed immediately. 
2044 **Example:** 
2045
2046 meshfromstl mesh myfile.stl 
2047
2048 @subsubsection occt_draw_4_33052 meshdispmode
2049
2050 Syntax:                  meshdispmode meshname displaymode 
2051
2052 Changes the display mode of object **meshname**. The **displaymode** is integer, which can be **1** (for wireframe), **2** (for shading mode) or **3** (for shrink mode). 
2053 **Example:** 
2054
2055 vinit 
2056 meshfromstl mesh myfile.stl 
2057 meshdispmode mesh 2 
2058
2059 @subsubsection occt_draw_4_33053 meshselmode
2060
2061 Syntax:                  meshselmode meshname selectionmode 
2062
2063 Changes the selection mode of object **meshname**. The **selectionmode** is integer OR-combination of mode flags. The basic flags are the following: 
2064 **1** – node selection, 
2065 **2** – 0D elements (not suppored in STL) 
2066 **4** – links (not supported in STL) 
2067 **8** – faces 
2068 **Example:** 
2069
2070 vinit 
2071 meshfromstl mesh myfile.stl 
2072 meshselmode mesh 1 
2073
2074 @subsubsection occt_draw_4_33054 meshshadcolor
2075
2076 Syntax:                  meshshadcolor meshname red green blue 
2077
2078 Changes the face interior color of object **meshname**. The **red**, **green** and **blue** are real values between **0** and **1**. 
2079 **Example:** 
2080
2081 vinit 
2082 meshfromstl mesh myfile.stl 
2083 meshshadcolormode mesh 0.5 0.5 0.5 
2084
2085 @subsubsection occt_draw_4_33055 meshlinkcolor
2086
2087 Syntax:                  meshlinkcolor meshname red green blue 
2088
2089 Changes the color of face borders for object **meshname**. The **red**, **green** and **blue** are real values between **0** and **1**. 
2090 **Example:** 
2091
2092 vinit 
2093 meshfromstl mesh myfile.stl 
2094 meshlinkcolormode mesh 0.5 0.5 0.5 
2095
2096 @subsubsection occt_draw_4_33056 meshmat
2097
2098 Syntax:                  meshmat meshname material 
2099
2100 Changes the material of object **meshname**. **material** is represented with an integer value as follows (equivalent to enumeration Graphic3d_NameOfMaterial): 
2101 **0 – BRASS,** 
2102 **1 – BRONZE,** 
2103 **2 - COPPER,** 
2104 **3 - GOLD,** 
2105 **4 - PEWTER,** 
2106 **5 - PLASTER,** 
2107 **6 - PLASTIC,** 
2108 **7 - SILVER,** 
2109 **8 - STEEL,** 
2110 **9 - STONE,** 
2111 **10 - SHINY_PLASTIC,** 
2112 **11 - SATIN,** 
2113 **12 - METALIZED,** 
2114 **13 - NEON_GNC,** 
2115 **14 - CHROME,** 
2116 **15 - ALUMINIUM,** 
2117 **16 - OBSIDIAN,** 
2118 **17 - NEON_PHC,** 
2119 **18 - JADE,** 
2120 **19 - DEFAULT,** 
2121 **20 - UserDefined** 
2122 **Example:** 
2123
2124 vinit 
2125 meshfromstl mesh myfile.stl 
2126 meshmat mesh JADE 
2127
2128 @subsubsection occt_draw_4_33057 meshshrcoef
2129
2130 Syntax:                  meshshrcoef meshname shrinkcoefficient 
2131
2132 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. 
2133 **Example:** 
2134
2135 vinit 
2136 meshfromstl mesh myfile.stl 
2137 meshshrcoef mesh 0.05 
2138
2139 @subsubsection occt_draw_4_33058 meshshow
2140
2141 Syntax:                  meshshow meshname 
2142
2143 Displays **meshname** in the viewer (if it is erased). 
2144 **Example:** 
2145
2146 vinit 
2147 meshfromstl mesh myfile.stl 
2148 meshshow mesh 
2149
2150 @subsubsection occt_draw_4_33059 meshhide
2151
2152 Syntax:                  meshhide meshname 
2153
2154 Hides **meshname** in the viewer. 
2155 **Example:** 
2156
2157 vinit 
2158 meshfromstl mesh myfile.stl 
2159 meshhide mesh 
2160
2161 @subsubsection occt_draw_4_330510 meshhidesel
2162
2163 Syntax:                  meshhidesel meshname 
2164
2165 Hides only selected entities. The other part of **meshname** remains visible. 
2166
2167 @subsubsection occt_draw_4_330511 meshshowsel
2168
2169 Syntax:                  meshshowsel meshname 
2170
2171 Shows only selected entities. The other part of **meshname** becomes invisible. 
2172
2173 @subsubsection occt_draw_4_330512 meshshowall
2174
2175 Syntax:                  meshshowall meshname 
2176
2177 Changes the state of all entities to visible for **meshname**. 
2178
2179 @subsubsection occt_draw_4_330513 meshdelete
2180
2181 Syntax:                  meshdelete meshname 
2182
2183 Deletes MeshVS_Mesh object **meshname**. 
2184 **Example:** 
2185
2186 vinit 
2187 meshfromstl mesh myfile.stl 
2188 meshdelete mesh 
2189
2190
2191
2192
2193 @subsection occt_draw_4_3306 AIS viewer – 2D viewer – view commands
2194
2195 @subsubsection occt_draw_4_33061 v2dinit
2196
2197 Syntax:                  v2dinit 
2198
2199 **v2dinit **creates the 2D viewer window. 
2200
2201 @subsubsection occt_draw_4_33062 v2dsetbg
2202
2203 Syntax:                  v2dsetbg imagefile [filletype] 
2204
2205 **v2dsetbg** loads **imagefile** as background. **filletype** is **NONE**, **CENTERED**, **TILED**, **STRETCH**. 
2206 **Example:** 
2207
2208 v2dinit 
2209 v2dsetbg myimage.brep CENTERED 
2210
2211 @subsubsection occt_draw_4_33063 v2dfit
2212
2213 Syntax:                  v2dfit 
2214
2215 Fits all shapes to the size of the window. 
2216
2217 @subsubsection occt_draw_4_33064 v2drepaint
2218
2219 Syntax:                  v2drepaint 
2220
2221 Forcedly repaints all shapes. 
2222
2223 @subsubsection occt_draw_4_33065 v2dclear
2224
2225 Syntax:                  v2dclear 
2226
2227 Clears the 2D viewer window 
2228
2229 @subsubsection occt_draw_4_33066 v2dtext
2230
2231 Syntax:                  v2dtext text x y [angle scale fontindex] 
2232
2233 Creates a new object with the name **text_i** (i – integer value) and displays **text** at the position** x**, **y.** The text can be displayed at a certain **angle**, on a certain **scale** and with a certain **fontindex**. 
2234 Default values are: **angle=0.0, scale=1.0, fontindex=0**. 
2235 **Example:** 
2236
2237 v2dinit 
2238 v2dtext *My text* 10 10 
2239 @subsubsection occt_draw_4_33067 v2dsettextcolor
2240
2241 Syntax:                  v2dsettextcolor text_name colorindex 
2242
2243 Changes the color of **text_name** object (**name** must be an integer value). 
2244 **Example:** 
2245
2246 v2dinit 
2247 v2dtext *My text* 10 10 
2248 # Change color to red 
2249 v2dsettextcolor text_0 3 
2250 @subsubsection occt_draw_4_33068 v2dpick
2251
2252 Syntax:                  v2dpick 
2253
2254 Displays mouse coordinates and color after clicking the mouse button in the 2D viewer window. 
2255
2256
2257 @subsubsection occt_draw_4_33069 v2dgrid
2258
2259 Syntax:                  v2dgrid [type x y xstep ystep angle [drawmode]] 
2260      v2dgrid [type x y radiusstep division angle [drawmode]] 
2261
2262 Loads a grid in the 2D viewer window. 
2263 **type** is **Rect** or **Circ**. 
2264 **drawmode** is **Lines**, **Points** or **None**. 
2265 **Example:** 
2266
2267 v2dinit 
2268 v2dgrid Circ 0 0 250 12 0 Lines 
2269 v2drmgrid 
2270 v2dgrid Rect 0 0 200 200 0 Lines 
2271 @subsubsection occt_draw_4_330610 v2rmgrid
2272
2273 Syntax:                  v2rmgrid 
2274
2275 Unloads a grid from the window. 
2276
2277 @subsubsection occt_draw_4_330611 v2dpickgrid
2278
2279 Syntax:                  v2dpickgrid [mouse_x mouse_y [grid_x grid_y]] 
2280
2281 Gets coordinates of a grid point near the mouse button click in the 2D viewer window and sets it to **grid_x**, **grid_y** variables. 
2282
2283 @subsubsection occt_draw_4_330612 v2dpsout
2284
2285 Syntax:                  v2dpsout imagefile [scale colorspace] 
2286                                                      [width height [xcenter ycenter]] 
2287
2288 Exports **imagefile**. You can set its the scale, width, height and colorspace. 
2289 **colorspace** can be **RGB, BlackAndWhite, GreyScale**. 
2290
2291 @subsubsection occt_draw_4_330612613 v2ddir
2292
2293 Syntax:                  v2ddir 
2294
2295 Makes aLlist of the displayed objects. 
2296
2297
2298 @subsection occt_draw_4_3306127 Ais viewer – 2D viewer – display commands
2299
2300 @subsubsection occt_draw_4_33061271 v2ddisplay
2301
2302 Syntax:                  v2ddisplay name [projection] 
2303
2304 Projection: origin_x origin_y origin_z normal_x normal_y normal_z dx_x dx_y dx_z. 
2305
2306 Displays named objects. 
2307 **Example:** 
2308
2309 v2dinit 
2310 box b 10 10 10 
2311 psphere s 20 
2312 v2ddisplay s 
2313 v2ddisplay b 
2314 v2dfit 
2315 @subsubsection occt_draw_4_33061272 v2ddonly
2316
2317 Syntax:                  v2ddonly [name1] … [name n] 
2318
2319 Displays only selected or named objects. If there are no selected or named objects, nothing is done. 
2320 **Example:** 
2321
2322 v2dinit 
2323 box b 10 10 10 
2324 psphere s 20 
2325 v2ddisplay b 
2326 v2ddisplay s 
2327 v2ddonly s 
2328 v2dfit 
2329 @subsubsection occt_draw_4_33061273 v2ddisplayall
2330
2331 Syntax:                  v2ddisplayall 
2332
2333 Displays all created objects. 
2334 **Example:** 
2335
2336 v2dinit 
2337 box b 10 10 10 
2338 psphere s 20 
2339 v2ddisplay b 
2340 v2ddisplay s 
2341 v2ddonly 
2342 v2ddisplayall 
2343 v2dfit 
2344 @subsubsection occt_draw_4_33061274 v2derase
2345
2346 Syntax:                  v2derase name1 [name2] … [name n] 
2347
2348 Erases some selected or named objects. If there are no selected or named objects, the whole viewer is erased. 
2349 **Example:** 
2350
2351 v2dinit 
2352 box b 10 10 10 
2353 psphere s 20 
2354 v2ddisplay b 
2355 v2ddisplay s 
2356 v2derase b 
2357 v2dfit 
2358 @subsubsection occt_draw_4_33061275 v2deraseall
2359
2360 Syntax:                  v2deraseall 
2361
2362 Erases all objects displayed in the viewer. 
2363 **Example:** 
2364
2365 v2dinit 
2366 box b 10 10 10 
2367 psphere s 20 
2368 v2ddisplay b 
2369 v2ddisplay s 
2370 v2deraseall 
2371 v2dfit 
2372 @subsubsection occt_draw_4_33061276 v2dsetcolor
2373
2374 Syntax:                  v2dsetcolor [shapename] colorname 
2375
2376 Sets color for all, selected or named shapes. 
2377 Values of **colorname** see **vsetcolor**. 
2378 **Example:** 
2379
2380 v2dinit 
2381 box b 10 10 10 
2382 v2ddisplay b 
2383 v2ddisplay s 
2384 v2dsetcolor b RED 
2385 v2dfit 
2386 @subsubsection occt_draw_4_33061277 v2dunsetcolor
2387
2388 Syntax:                  v2dunsetcolor [shapename] 
2389
2390 Sets default color for all, selected or named shapes. 
2391 **Example:** 
2392
2393 v2dinit 
2394 box b 10 10 10 
2395 v2ddisplay b 
2396 v2ddisplay s 
2397 v2dsetcolor RED 
2398 v2dunsetcolor b 
2399 v2dfit 
2400 @subsubsection occt_draw_4_33061278 v2dsetbgcolor
2401
2402 Syntax:                  v2dsetbgcolor colorname 
2403
2404 Sets background color. 
2405 See **vsetcolor** for the values of **colorname.**. 
2406 **Example:** 
2407
2408 v2dinit 
2409 box b 10 10 10 
2410 v2ddisplay b 
2411 v2ddisplay s 
2412 v2dsetbgcolor RED 
2413 v2dfit 
2414 @subsubsection occt_draw_4_33061279 v2dsetwidth
2415
2416 Syntax:                  v2dsetwidth [shapename] widthenum 
2417
2418 Set width of the edges for all, selected or named shapes. 
2419 **widthenum** may be one of: **THIN, MEDIUM, THICK, VERYTHICK**. 
2420 **Example:** 
2421
2422 v2dinit 
2423 box b 10 10 10 
2424 v2ddisplay b 
2425 v2ddisplay s 
2426 v2dsetwidth b THICK 
2427 v2dfit 
2428 @subsubsection occt_draw_4_330612710 v2dunsetwidth
2429
2430 Syntax:                  vunsetwidth [shapename] 
2431
2432 Sets default width of the edges for all, selected or named shapes. 
2433 **Example:** 
2434
2435 v2dinit 
2436 box b 10 10 10 
2437 v2ddisplay b 
2438 v2ddisplay s 
2439 v2dsetwidth THICK 
2440 v2dunsetwidth b 
2441 v2dfit 
2442
2443 @section occt_2142243456_930384826 OCAF commands
2444
2445
2446 This chapter contains a set of commands for Open CASCADE Technology Application Framework (OCAF). 
2447
2448
2449 @subsection occt_2142243456_9303848261 Application commands
2450
2451
2452 @subsubsection occt_2142243456_93038482611 NewDocument
2453
2454 Syntax:       NewDocument docname [format] 
2455
2456 Creates a new **docname** document with MDTV-Standard or described format. 
2457 **Example:** 
2458
2459 # Create new document with default (MDTV-Standard) format 
2460 NewDocument D 
2461
2462 # Create new document with BinOcaf format 
2463 NewDocument D2 BinOcaf 
2464
2465 @subsubsection occt_2142243456_93038482612 IsInSession
2466
2467 Syntax:       IsInSession path 
2468
2469 **I**Returns **0**, if **path** document is managed by the application session, **1** – otherwise. 
2470 **Example:** 
2471
2472 IsInSession /myPath/myFile.std 
2473
2474 @subsubsection occt_2142243456_93038482613 ListDocuments
2475
2476 Syntax:       ListDocuments 
2477
2478 Makes a list of documents handled during the session of the application. 
2479
2480
2481 @subsubsection occt_2142243456_93038482614 Open
2482
2483 Syntax:       Open path docname 
2484
2485 Retrieves the document of file **docname** in the path **path**. Overwrites the document, if it is already in session. 
2486 **Example:** 
2487
2488 Open /myPath/myFile.std D 
2489
2490 @subsubsection occt_2142243456_93038482615 Close
2491
2492 Syntax:       Close docname 
2493
2494 Closes **docname** document. The document is no longer handled by the applicative session. 
2495 **Example:** 
2496
2497 Close D 
2498
2499 @subsubsection occt_2142243456_93038482616 Save
2500
2501 Syntax:       Save docname 
2502
2503 Saves **docname** active document. 
2504 **Example:** 
2505
2506 Save D 
2507
2508 @subsubsection occt_2142243456_93038482617 SaveAs
2509
2510 Syntax:       SaveAs docname path 
2511
2512 Saves the active document in the file **docname** in the path **path**. Overwrites the file if it already exists. 
2513 **Example:** 
2514
2515 SaveAs D /myPath/myFile.std 
2516
2517 @subsection occt_2142243456_9303848262 Basic commands
2518
2519
2520 @subsubsection occt_2142243456_930384826521  Label
2521
2522 Syntax:       Label docname entry 
2523
2524 Creates the label expressed by **entry** if it does not exist. 
2525 **Example:** 
2526
2527 Label D 0:2 
2528
2529 @subsubsection occt_2142243456_930384826522  NewChild
2530
2531 Syntax:       NewChild docname [taggerlabel = Root label] 
2532
2533 Finds (or creates) a TagSource attribute located at father label of **taggerlabel** and makes a new child label. 
2534 **Example:** 
2535
2536 # Create new child of root label 
2537 NewChild D 
2538
2539 # Create new child of existing label 
2540 Label D 0:2 
2541 NewChild D 0:2 
2542
2543 @subsubsection occt_2142243456_930384826523  Children
2544
2545 Syntax:       Children docname label 
2546
2547 Returns the list of attributes of **label**. 
2548 **Example:** 
2549
2550 Children D 0:2 
2551
2552 @subsubsection occt_2142243456_930384826524  ForgetAll
2553
2554 Syntax:       ForgetAll docname label 
2555
2556 Forgets all attributes of the label. 
2557 **Example:** 
2558
2559 ForgetAll D 0:2 
2560
2561 @subsection occt_2142243456_93038482653  Application commands
2562
2563
2564 @subsubsection occt_2142243456_930384826531  Main
2565
2566 Syntax:       Main docname 
2567
2568 Returns the main label of the framework. 
2569 **Example:** 
2570
2571 Main D 
2572
2573 @subsubsection occt_2142243456_930384826532  UndoLimit
2574
2575 Syntax:       UndoLimit docname [value=0] 
2576
2577
2578 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 
2579 **Example:** 
2580
2581 UndoLimit D 100 
2582
2583 @subsubsection occt_2142243456_930384826533  Undo
2584
2585 Syntax:       Undo docname [value=1] 
2586
2587 Undoes **value** steps. 
2588 **Example:** 
2589
2590 Undo D 
2591
2592 @subsubsection occt_2142243456_930384826534  Redo
2593
2594 Syntax:       Redo docname [value=1] 
2595
2596 Redoes **value** steps. 
2597 **Example:** 
2598
2599 Redo D 
2600
2601 @subsubsection occt_2142243456_930384826535  OpenCommand
2602
2603 Syntax:       OpenCommand docname 
2604
2605 Opens a new command transaction. 
2606 **Example:** 
2607
2608 OpenCommand D 
2609
2610 @subsubsection occt_2142243456_930384826536  CommitCommand
2611
2612 Syntax:       CommitCommand docname 
2613
2614 Commits the Command transaction. 
2615 **Example:** 
2616
2617 CommitCommand D 
2618
2619 @subsubsection occt_2142243456_930384826537  NewCommand
2620
2621 Syntax:       NewCommand docname 
2622
2623 This is a short-cut for Commit and Open transaction. 
2624 **Example:** 
2625
2626 NewCommand D 
2627
2628 @subsubsection occt_2142243456_930384826538  AbortCommand
2629
2630 Syntax:       AbortCommand docname 
2631
2632 Aborts the Command transaction. 
2633 **Example:** 
2634
2635 AbortCommand D 
2636
2637 @subsubsection occt_2142243456_930384826539  Copy
2638
2639 Syntax:       Copy docname entry Xdocname Xentry 
2640
2641 Copies the contents of **entry** to **Xentry**. No links are registred. 
2642 **Example:** 
2643
2644 Copy D1 0:2 D2 0:4 
2645
2646 @subsubsection occt_2142243456_9303848265310  UpdateLink
2647
2648 Syntax:       UpdateLink docname [entry] 
2649
2650 Updates external reference set at **entry**. 
2651 **Example:** 
2652
2653 UpdateLink D 
2654
2655 @subsubsection occt_2142243456_9303848265311  CopyWithLink
2656
2657 Syntax:       CopyWithLink docname entry Xdocname Xentry 
2658
2659 Aborts the Command transaction. 
2660 Copies the content of **entry** to **Xentry**. The link is registred with an Xlink attribute at ** Xentry**  label. 
2661 **Example:** 
2662
2663 CopyWithLink D1 0:2 D2 0:4 
2664
2665 @subsubsection occt_2142243456_9303848265312  UpdateXLinks
2666
2667 Syntax:       UpdateXLinks docname entry 
2668
2669 Sets modifications on labels impacted by external references to the **entry**. The **document** becomes invalid and must be recomputed 
2670 **Example:** 
2671
2672 UpdateXLinks D 0:2 
2673
2674 @subsubsection occt_2142243456_9303848265313  DumpDocument
2675
2676 Syntax:       DumpDocument docname 
2677
2678 Displays parameters of **docname** document. 
2679 **Example:** 
2680
2681 DumpDocument D 
2682
2683 @subsection occt_2142243456_93038482654  Data Framework commands
2684
2685
2686 @subsubsection occt_2142243456_930384826541  MakeDF
2687
2688 Syntax:       MakeDF dfname 
2689
2690 Creates a new data framework. 
2691 **Example:** 
2692
2693 MakeDF D 
2694
2695 @subsubsection occt_2142243456_930384826542  ClearDF
2696
2697 Syntax:       ClearDF dfname 
2698
2699 Clears a data framework. 
2700 **Example:** 
2701
2702 ClearDF D 
2703
2704 @subsubsection occt_2142243456_930384826543  CopyDF
2705
2706 Syntax:       CopyDF dfname1 entry1 [dfname2] entry2 
2707
2708 Copies a data framework. 
2709 **Example:** 
2710
2711 CopyDF D 0:2 0:4 
2712
2713 @subsubsection occt_2142243456_930384826544  CopyLabel
2714
2715 Syntax:       CopyLabel dfname fromlabel tolablel 
2716
2717 Copies a label. 
2718 **Example:** 
2719
2720 CopyLabel D1 0:2 0:4 
2721
2722 @subsubsection occt_2142243456_930384826545  MiniDumpDF
2723
2724 Syntax:       MiniDumpDF dfname 
2725
2726 Makes a mini-dump of a data framework. 
2727 **Example:** 
2728
2729 MiniDumpDF D 
2730
2731 @subsubsection occt_2142243456_930384826546  XDumpDF
2732
2733 Syntax:       XDumpDF dfname 
2734
2735 Makes an extended dump of a data framework. 
2736 **Example:** 
2737
2738 XDumpDF D 
2739
2740 @subsection occt_2142243456_93038482655  General attributes commands
2741
2742
2743 @subsubsection occt_2142243456_930384826551  SetInteger
2744
2745 Syntax:       SetInteger dfname entry value 
2746
2747 Finds or creates an Integer attribute at **entry** label and sets **value**. 
2748 **Example:** 
2749
2750 SetInteger D 0:2 100 
2751
2752 @subsubsection occt_2142243456_930384826552  GetInteger
2753
2754 Syntax:       GetInteger dfname entry [drawname] 
2755
2756 Gets a value of an Integer attribute at **entry** label and sets it to **drawname** variable, if it is defined. 
2757 **Example:** 
2758
2759 GetInteger D 0:2 Int1 
2760
2761 @subsubsection occt_2142243456_930384826553  SetReal
2762
2763 Syntax:       SetReal dfname entry value 
2764
2765 Finds or creates a Real attribute at **entry** label and sets **value**. 
2766 **Example:** 
2767
2768 SetReal D 0:2 100. 
2769
2770 @subsubsection occt_2142243456_930384826554  GetReal
2771
2772 Syntax:       GetReal dfname entry [drawname] 
2773
2774 Gets a value of a Real attribute at **entry** label and sets it to **drawname** variable, if it is defined. 
2775 **Example:** 
2776
2777 GetReal D 0:2 Real1 
2778
2779 @subsubsection occt_2142243456_930384826555  SetIntArray
2780
2781 Syntax:       SetIntArray dfname entry lower upper value1 value2 … 
2782
2783 Finds or creates an IntegerArray attribute at **entry** label with lower and upper bounds and sets **value1, **.** value2…** 
2784 **Example:** 
2785
2786 SetIntArray D 0:2 1 4 100 200 300 400 
2787
2788 @subsubsection occt_2142243456_930384826556  GetIntArray
2789
2790 Syntax:       GetIntArray dfname entry 
2791
2792 Gets a value of an IntegerArray attribute at **entry** label. 
2793 **Example:** 
2794
2795 GetIntArray D 0:2 
2796
2797 @subsubsection occt_2142243456_930384826557  SetRealArray
2798
2799 Syntax:       SetRealArray dfname entry lower upper value1 value2 … 
2800
2801 Finds or creates a RealArray attribute at **entry** label with lower and upper bounds and sets **value1, **.** value2…** 
2802 **Example:** 
2803
2804 GetRealArray D 0:2 1 4 100. 200. 300. 400. 
2805
2806 @subsubsection occt_2142243456_930384826558  GetRealArray
2807
2808 Syntax:       GetRealArray dfname entry 
2809
2810 Gets a value of a RealArray attribute at **entry** label. 
2811 **Example:** 
2812
2813 GetRealArray D 0:2 
2814
2815 @subsubsection occt_2142243456_930384826559  SetComment
2816
2817 Syntax:       SetComment dfname entry value 
2818
2819 Finds or creates a Comment attribute at **entry** label and sets **value**. 
2820 **Example:** 
2821
2822 SetComment D 0:2 *My comment* 
2823
2824 @subsubsection occt_2142243456_9303848265510  GetComment
2825
2826 Syntax:       GetComment dfname entry 
2827
2828 Gets a value of a Comment attribute at **entry** label. 
2829 **Example:** 
2830
2831 GetComment D 0:2 
2832
2833 @subsubsection occt_2142243456_9303848265511  SetExtStringArray
2834
2835 Syntax:       SetExtStringArray dfname entry lower upper value1 value2 … 
2836
2837 Finds or creates an ExtStringArray attribute at **entry** label with lower and upper bounds and sets **value1, **.** value2…** 
2838 **Example:** 
2839
2840 SetExtStringArray D 0:2 1 3 *string1* *string2* *string3* 
2841
2842 @subsubsection occt_2142243456_9303848265512  GetExtStringArray
2843
2844 Syntax:       GetExtStringArray dfname entry 
2845
2846 Gets a value of an ExtStringArray attribute at **entry** label. 
2847 **Example:** 
2848
2849 GetExtStringArray D 0:2 
2850
2851 @subsubsection occt_2142243456_9303848265513  SetName
2852
2853 Syntax:       SetName dfname entry value 
2854
2855 Finds or creates a Name attribute at **entry** label and set **value**. 
2856 **Example:** 
2857
2858 SetName D 0:2 *My name* 
2859
2860 @subsubsection occt_2142243456_9303848265514  GetName
2861
2862 Syntax:       GetName dfname entry 
2863
2864 Gets a value of a Name attribute at **entry** label. 
2865 **Example:** 
2866
2867 GetName D 0:2 
2868
2869 @subsubsection occt_2142243456_9303848265515  SetReference
2870
2871 Syntax:       SetReference dfname entry reference 
2872
2873 Creates a Reference attribute at **entry** label and sets **reference**. 
2874 **Example:** 
2875
2876 SetReference D 0:2 0:4 
2877
2878 @subsubsection occt_2142243456_9303848265516  GetReference
2879
2880 Syntax:       GetReference dfname entry 
2881
2882 Gets a value of a Reference attribute at **entry** label. 
2883 **Example:** 
2884
2885 GetReference D 0:2 
2886
2887 @subsubsection occt_2142243456_9303848265517  SetUAttribute
2888
2889 Syntax:       SetUAttribute dfname entry localGUID 
2890
2891 Creates a UAttribute attribute at **entry** label with **localGUID**. 
2892 **Example:** 
2893
2894 set localGUID *c73bd076-22ee-11d2-acde-080009dc4422* 
2895 SetUAttribute D 0:2 ${localGUID} 
2896
2897 @subsubsection occt_2142243456_9303848265518  GetUAttribute
2898
2899 Syntax:       GetUAttribute dfname entry loacalGUID 
2900
2901 Finds a UAttribute at **entry** label with **localGUID**. 
2902 **Example:** 
2903
2904 set localGUID *c73bd076-22ee-11d2-acde-080009dc4422* 
2905 GetUAttribute D 0:2 ${localGUID} 
2906
2907 @subsubsection occt_2142243456_9303848265519  SetFunction
2908
2909 Syntax:       SetFunction dfname entry ID failure 
2910
2911 Finds or creates a Function attribute at **entry** label with driver ID and **failure** index. 
2912 **Example:** 
2913
2914 set ID *c73bd076-22ee-11d2-acde-080009dc4422* 
2915 SetFunction D 0:2 ${ID} 1 
2916
2917 @subsubsection occt_2142243456_9303848265520  GetFunction
2918
2919 Syntax:       GetFunction dfname entry ID failure 
2920
2921 Finds a Function attribute at **entry** label and sets driver ID to **ID** variable and failure index to **failure** variable. 
2922 **Example:** 
2923
2924 GetFunction D 0:2 ID failure 
2925
2926 @subsubsection occt_2142243456_9303848265521  NewShape
2927
2928 Syntax:       NewShape dfname entry [shape] 
2929
2930
2931 Finds or creates a Shape attribute at **entry** label. Creates or updates the associated NamedShape attribute by **shape** if **shape** is defined. 
2932 **Example:** 
2933
2934 box b 10 10 10 
2935 NewShape D 0:2 b 
2936
2937 @subsubsection occt_2142243456_9303848265522  SetShape
2938
2939 Syntax:       SetShape dfname entry shape 
2940
2941 Creates or updates a NamedShape attribute at **entry** label by **shape**. 
2942 **Example:** 
2943
2944 box b 10 10 10 
2945 SetShape D 0:2 b 
2946
2947 @subsubsection occt_2142243456_9303848265523  GetShape
2948
2949 Syntax:       GetShape2 dfname entry shape 
2950
2951 Sets a shape from NamedShape attribute associated with **entry** label to **shape** draw variable. 
2952 **Example:** 
2953
2954 GetShape2 D 0:2 b 
2955
2956 @subsection occt_2142243456_93038482656  Geometric attributes commands
2957
2958
2959 @subsubsection occt_2142243456_930384826561  SetPoint
2960
2961 Syntax:       SetPoint dfname entry point 
2962
2963 Finds or creates a Point attribute at **entry** label and sets **point** as generated in the associated NamedShape attribute. 
2964 **Example:** 
2965
2966 point p 10 10 10 
2967 SetPoint D 0:2 p 
2968
2969 @subsubsection occt_2142243456_930384826562  GetPoint
2970
2971 Syntax:       GetPoint dfname entry [drawname] 
2972
2973 Gets a vertex from NamedShape attribute at **entry** label and sets it to **drawname** variable, if it is defined. 
2974 **Example:** 
2975
2976 GetPoint D 0:2 p 
2977
2978 @subsubsection occt_2142243456_930384826563  SetAxis
2979
2980 Syntax:       SetAxis dfname entry axis 
2981
2982 Finds or creates an Axis attribute at **entry** label and sets **axis** as generated in the associated NamedShape attribute. 
2983 **Example:** 
2984
2985 line l 10 20 30 100 200 300 
2986 SetAxis D 0:2 l 
2987
2988 @subsubsection occt_2142243456_930384826564  GetAxis
2989
2990 Syntax:       GetAxis dfname entry [drawname] 
2991
2992 Gets a line from NamedShape attribute at **entry** label and sets it to **drawname** variable, if it is defined. 
2993 **Example:** 
2994
2995 GetAxis D 0:2 l 
2996
2997 @subsubsection occt_2142243456_930384826565  SetPlane
2998
2999 Syntax:       SetPlane dfname entry plane 
3000
3001 Finds or creates a Plane attribute at **entry** label and sets **plane** as generated in the associated NamedShape attribute. 
3002 **Example:** 
3003
3004 plane pl 10 20 30 –1 0 0 
3005 SetPlane D 0:2 pl 
3006
3007 @subsubsection occt_2142243456_930384826566  GetPlane
3008
3009 Syntax:       GetPlane dfname entry [drawname] 
3010
3011 Gets a plane from NamedShape attribute at **entry** label and sets it to **drawname** variable, if it is defined. 
3012 **Example:** 
3013
3014 GetPlane D 0:2 pl 
3015
3016 @subsubsection occt_2142243456_930384826567  SetGeometry
3017
3018 Syntax:       SetGeometry dfname entry [type] [shape] 
3019
3020
3021 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**. 
3022 **Example:** 
3023
3024 point p 10 10 10 
3025 SetGeometry D 0:2 pnt p 
3026
3027 @subsubsection occt_2142243456_930384826568  GetGeometryType
3028
3029 Syntax:       GetGeometryType dfname entry 
3030
3031 Gets a geometry type from Geometry attribute at **entry** label. 
3032 **Example:** 
3033
3034 GetGeometryType D 0:2 
3035
3036 @subsubsection occt_2142243456_930384826569  SetConstraint
3037
3038 Syntax:       SetConstraint dfname entry keyword geometrie [geometrie …] 
3039             SetConstraint dfname entry *plane* geometrie 
3040             SetConstraint dfname entry *value* value  
3041
3042 1. Creates a Constraint attribute at **entry** label and sets **keyword** constraint between geometry(ies). 
3043 **keyword** must be one of the following: 
3044 **rad/dia/minr/majr/tan/par/perp/concentric/equal/dist/angle/eqrad/symm/midp/ eqdist/fix/rigid** 
3045 or 
3046 **from/axis/mate/alignf/aligna/axesa/facesa/round/offset** 
3047
3048 2. Sets plane for the existing constraint. 
3049
3050 3. Sets value for the existing constraint. 
3051 **Example:** 
3052
3053 SetConstraint D 0:2 *value* 5 
3054
3055 @subsubsection occt_2142243456_9303848265610  GetConstraint
3056
3057 Syntax:       GetConstraint dfname entry 
3058
3059 Dumps a Constraint attribute at **entry** label 
3060 **Example:** 
3061
3062 GetConstraint D 0:2 
3063
3064 @subsubsection occt_2142243456_9303848265611  SetVariable
3065
3066 Syntax:       SetVariable dfname entry isconstant(0/1) units 
3067
3068 Creates a Variable attribute at **entry** label and sets **isconstant** flag and **units** as a string. 
3069 **Example:** 
3070
3071 SetVariable D 0:2 1 *mm* 
3072
3073 @subsubsection occt_2142243456_9303848265612  GetVariable
3074
3075 Syntax:       GetVariable dfname entry isconstant units 
3076
3077 Gets an **isconstant** flag and **units** of a Variable attribute at **entry** label. 
3078 **Example:** 
3079
3080 GetVariable D 0:2 isconstant units 
3081 puts *IsConstant=${isconstant}* 
3082 puts *Units=${units}* 
3083
3084
3085 @subsection occt_2142243456_93038482657  Tree attributes commands
3086
3087
3088 @subsubsection occt_2142243456_930384826571  RootNode
3089
3090 Syntax:       RootNode dfname treenodeentry [ID] 
3091
3092 Returns ultimate father of TreeNode attribute identified by its **treenodeentry** and its **ID** (or default ID, if **ID** is not defined). 
3093
3094
3095 @subsubsection occt_2142243456_930384826572  SetNode
3096
3097 Syntax:       SetNode dfname treenodeentry [ID] 
3098
3099 Creates a TreeNode attribute on the **treenodeentry** label with its tree **ID** (or assigns a default ID, if the **ID** is not defined). 
3100
3101
3102 @subsubsection occt_2142243456_930384826573  AppendNode
3103
3104 Syntax:       AppendNode dfname fatherentry childentry [fatherID] 
3105
3106
3107 Inserts a TreeNode attribute with its tree **fatherID** (or default ID, if **fatherID** is not defined) on **childentry** as last child of **fatherentry**. 
3108
3109
3110
3111
3112 @subsubsection occt_2142243456_930384826574  PrependNode
3113
3114 Syntax:       PrependNode dfname fatherentry childentry [fatherID] 
3115
3116
3117 Inserts a TreeNode attribute with its tree **fatherID** (or default ID, if **fatherID** is not defined) on **childentry** as first child of **fatherentry**. 
3118
3119
3120 @subsubsection occt_2142243456_930384826575  InsertNodeBefore
3121
3122 Syntax:       InsertNodeBefore dfname treenodeentry beforetreenode [ID] 
3123
3124 Inserts a TreeNode attribute with tree **ID** (or default ID, if **ID** is not defined) **beforetreenode** before **treenodeentry**. 
3125
3126
3127 @subsubsection occt_2142243456_930384826576  InsertNodeAfter
3128
3129 Syntax:       InsertNodeAfter dfname treenodeentry aftertreenode [ID] 
3130
3131 Inserts a TreeNode attribute with tree **ID** (or default ID, if **ID** is not defined) **aftertreenode** after **treenodeentry**. 
3132
3133
3134 @subsubsection occt_2142243456_930384826577  DetachNode
3135
3136 Syntax:       DetachNode dfname treenodeentry [ID] 
3137
3138 Removes a TreeNode attribute with tree **ID** (or default ID, if **ID** is not defined) from **treenodeentry**. 
3139
3140
3141 @subsubsection occt_2142243456_930384826578  ChildNodeIterate
3142
3143 Syntax:       ChildNodeIterate dfname treenodeentry alllevels(0/1) [ID] 
3144
3145
3146 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. 
3147 **Example:** 
3148
3149 Label D 0:2 
3150 Label D 0:3 
3151 Label D 0:4 
3152 Label D 0:5 
3153 Label D 0:6 
3154 Label D 0:7 
3155 Label D 0:8 
3156 Label D 0:9 
3157
3158 # Set root node 
3159 SetNode D 0:2 
3160
3161 AppendNode D 0:2 0:4 
3162 AppendNode D 0:2 0:5 
3163 PrependNode D 0:4 0:3 
3164 PrependNode D 0:4 0:8 
3165 PrependNode D 0:4 0:9 
3166
3167 InsertNodeBefore D 0:5 0:6 
3168 InsertNodeAfter D 0:4 0:7 
3169
3170 DetachNode D 0:8 
3171
3172
3173 # List all levels 
3174 ChildNodeIterate D 0:2 1 
3175
3176 ==0:4 
3177 ==0:9 
3178 ==0:3 
3179 ==0:7 
3180 ==0:6 
3181 ==0:5 
3182
3183
3184 # List only first levels 
3185 ChildNodeIterate D 0:2 1 
3186
3187 ==0:4 
3188 ==0:7 
3189 ==0:6 
3190 ==0:5 
3191
3192 @subsubsection occt_2142243456_930384826579  InitChildNodeIterator
3193
3194 Syntax:       InitChildNodeIterator dfname treenodeentry alllevels(0/1) [ID] 
3195
3196
3197 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. 
3198 **Example:** 
3199
3200 InitChildNodeIterate D 0:5 1 
3201 set aChildNumber 0 
3202 for {set i 1} {$i  100} {incr i} { 
3203     if {[ChildNodeMore] == *TRUE*} { 
3204         puts *Tree node = [ChildNodeValue]* 
3205         incr aChildNumber 
3206         ChildNodeNext 
3207     } 
3208
3209 puts *aChildNumber=$aChildNumber* 
3210
3211 @subsubsection occt_2142243456_9303848265710  ChildNodeMore
3212
3213 Syntax:       ChildNodeMore 
3214
3215 Returns TRUE if there is a current item in the iteration. 
3216
3217
3218 @subsubsection occt_2142243456_9303848265711  ChildNodeNext
3219
3220 Syntax:       ChildNodeNext 
3221
3222 Moves to the next Item. 
3223
3224
3225 @subsubsection occt_2142243456_9303848265712  ChildNodeValue
3226
3227 Syntax:       ChildNodeValue 
3228
3229 Returns the current treenode of ChildNodeIterator. 
3230
3231
3232 @subsubsection occt_2142243456_9303848265713  ChildNodeNextBrother
3233
3234 Syntax:       ChildNodeNextBrother 
3235
3236 Moves to the next Brother. If there is none, goes up. This method is interesting only with ;allLevels; behavior. 
3237
3238
3239 @subsection occt_2142243456_93038482658  Standard presentation commands
3240
3241
3242 @subsubsection occt_2142243456_930384826581  AISInitViewer
3243
3244 Syntax:       AISInitViewer docname 
3245
3246 Creates and sets AISViewer attribute at root label, creates AIS viewer window. 
3247 **Example:** 
3248
3249 AISInitViewer D 
3250
3251 @subsubsection occt_2142243456_930384826582  AISRepaint
3252
3253 Syntax:       AISRepaint docname 
3254
3255 Updates the AIS viewer window. 
3256 **Example:** 
3257
3258 AISRepaint D 
3259
3260 @subsubsection occt_2142243456_930384826583  AISDisplay
3261
3262 Syntax:       AISDisplay docname entry [not_update] 
3263
3264
3265 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. 
3266 **Example:** 
3267
3268 AISDisplay D 0:5 
3269
3270 @subsubsection occt_2142243456_930384826584  AISUpdate
3271
3272 Syntax:       AISUpdate docname entry 
3273
3274 Recomputes a presantation of AISobject from **entry** label and applies the visualization setting in AIS viewer. 
3275 **Example:** 
3276
3277 AISUpdate D 0:5 
3278
3279 @subsubsection occt_2142243456_930384826585  AISErase
3280
3281 Syntax:       AISErase docname entry 
3282
3283 Erases AISobject of **entry** label in AIS viewer. 
3284 **Example:** 
3285
3286 AISErase D 0:5 
3287
3288 @subsubsection occt_2142243456_930384826586  AISRemove
3289
3290 Syntax:       AISRemove docname entry 
3291
3292 Erases AISobject of **entry** label in AIS viewer, then AISobject is removed from AIS_InteractiveContext. 
3293 **Example:** 
3294
3295 AISRemove D 0:5 
3296
3297 @subsubsection occt_2142243456_930384826587  AISSet
3298
3299 Syntax:       AISSet docname entry ID 
3300
3301
3302 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). 
3303 **Example:** 
3304
3305 AISSet D 0:5 NS 
3306
3307 @subsubsection occt_2142243456_930384826588  AISDriver
3308
3309 Syntax:       AISDriver docname entry [ID] 
3310
3311
3312 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). 
3313 **Example:** 
3314
3315 # Get Driver GUID 
3316 AISDriver D 0:5 
3317
3318 @subsubsection occt_2142243456_930384826589  AISUnset
3319
3320 Syntax:       AISUnset docname entry 
3321
3322 Deletes AISPresentation attribute (if it exists) of an **entry** label. 
3323 **Example:** 
3324
3325 AISUnset D 0:5 
3326
3327 @subsubsection occt_2142243456_9303848265810  AISTransparency
3328
3329 Syntax:       AISTransparency docname entry [transparency] 
3330
3331 Sets (if **transparency** is defined) or gets the value of transparency for AISPresentation attribute of an **entry** label. 
3332 **Example:** 
3333
3334 AISTransparency D 0:5 0.5 
3335
3336 @subsubsection occt_2142243456_9303848265811  AISHasOwnTransparency
3337
3338 Syntax:       AISHasOwnTransparency docname entry 
3339
3340 Tests AISPresentation attribute of an **entry** label by own transparency. 
3341 **Example:** 
3342
3343 AISHasOwnTransparency D 0:5 
3344
3345 @subsubsection occt_2142243456_9303848265812  AISMaterial
3346
3347 Syntax:       AISMaterial docname entry [material] 
3348
3349
3350 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 **meshmat**). 
3351 **Example:** 
3352
3353 AISMaterial D 0:5 5 
3354
3355 @subsubsection occt_2142243456_9303848265813  AISHasOwnMaterial
3356
3357 Syntax:       AISHasOwnMaterial docname entry 
3358
3359 Tests AISPresentation attribute of an **entry** label by own material. 
3360 **Example:** 
3361
3362 AISHasOwnMaterial D 0:5 
3363
3364 @subsubsection occt_2142243456_9303848265814  AISColor
3365
3366 Syntax:       AISColor docname entry [color] 
3367
3368 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**). 
3369 **Example:** 
3370
3371 AISColor D 0:5 25 
3372
3373 @subsubsection occt_2142243456_9303848265815  AISHasOwnColor
3374
3375 Syntax:       AISHasOwnColor docname entry 
3376
3377 Tests AISPresentation attribute of an **entry** label by own color. 
3378 **Example:** 
3379
3380 AISHasOwnColor D 0:5 
3381
3382
3383 @section occt_2142243456_1101404852 Geometry commands
3384
3385 @subsection occt_2142243456_110140485261 Overview
3386
3387 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. 
3388
3389 In the context of Geometry, Draw includes the following types of variable: 
3390
3391   * 2d and 3d points
3392   * The 2d curve, which corresponds to *Curve *in *Geom2d*.
3393   * The 3d curve and surface, which correspond to *Curve *and *Surface *in *Geom *<a href="#_ftn2">[2]</a>.
3394   
3395 Draw geometric variables never share data; the **copy **command will always make a complete copy of the content of the variable. 
3396
3397 The following topics are covered in the nine sections of this chapter: 
3398
3399   * **Curve creation** deals with the various types of curves and how to create them.
3400   * **Surface creation** deals with the different types of surfaces and how to create them.
3401   * **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.
3402   * **Geometric transformations** covers translation, rotation, mirror image and point scaling transformations.
3403   * **Curve and Surface Analysis** deals with the commands used to compute points, derivatives and curvatures.
3404   * **Intersections** presents intersections of surfaces and curves.
3405   * **Approximations** deals with creating curves and surfaces from a set of points.
3406   * **Constraints** concerns construction of 2d circles and lines by constraints such as tangency.
3407   * **Display** describes commands to control the display of curves and surfaces.
3408
3409 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. 
3410
3411 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. 
3412
3413 @subsection occt_2142243456_110140485262  Curve creation
3414
3415 This section deals with both points and curves. Types of curves are: 
3416
3417   * Analytical curves such as lines, circles, ellipses, parabolas, and hyperbolas.
3418   * Polar curves such as bezier curves and bspline curves.
3419   * 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.
3420   * NURBS can be created from other curves using **convert **in the *Surface Creation *section.
3421   * Curves can be created from the isoparametric lines of surfaces by the **uiso **and **viso **commands.
3422   * 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.
3423
3424 Curves are displayed with an arrow showing the last parameter. 
3425
3426
3427 @subsubsection occt_2142243456_1101404852621 point
3428
3429   @verbatim
3430     Syntax:      point name x y [z] 
3431   @endverbatim
3432   
3433 **point** creates a 2d or 3d point, depending on the number of arguments. **Example:**
3434
3435   @verbatim
3436     # 2d point 
3437     point p1 1 2 
3438
3439     # 3d point 
3440     point p2 10 20 -5 
3441   @endverbatim
3442   
3443 @subsubsection occt_2142243456_1101404852622  line
3444
3445   @verbatim
3446     Syntax:      line name x y [z] dx dy [dz] 
3447   @endverbatim
3448   
3449 **line** creates a 2d or 3d line. x y z are the coordinates of the line’s point of origin; dx, dy, dz give the direction vector. 
3450
3451 A 2d line will be represented asl x y dx dy, and a 3d line asl x y z dx dy dz. A line is parameterized along its length starting from the point of origin along the direction vector. The direction vector is normalized and must not be null. Lines are infinite, even though their representation is not. **Example:** 
3452
3453   @verbatim
3454     # a 2d line at 45 degrees of the X axis 
3455     line l 2 0 1 1 
3456
3457     # a 3d line through the point 10 0 0 and parallel to Z 
3458     line l 10 0 0 0 0 1 
3459   @endverbatim
3460
3461 @subsubsection occt_2142243456_1101404852623  circle
3462
3463 Syntax:      circle name x y [z [dx dy dz]] [ux uy [uz]] radius 
3464
3465 **circle **creates a 2d or a 3d circle. 
3466
3467 In 2d, x, y are the coordinates of the center and ux, uy define the vector towards the point of origin of the parameters. By default, this direction is (1,0). The X Axis of the local coordinate system defines the origin of the parameters of the circle. Use another vector than the x axis to change the origin of parameters. 
3468
3469 In 3d, x, y, z are the coordinates of the center; dx, dy, dz give the vector normal to the plane of the circle. By default, this vector is (0,0,1) i.e. the Z axis (it must not be null). ux, uy, uz is the direction of the origin; if not given, a default direction will be computed. This vector must neither be null nor parallel to dx, dy, dz. 
3470
3471 The circle is parameterized by the angle in [0,2*pi] starting from the origin and. Note that the specification of origin direction and plane is the same for all analytical curves and surfaces. 
3472
3473 **Example:** 
3474
3475 # A 2d circle of radius 5 centered at 10,-2 
3476 circle c1 10 -2 5 
3477
3478 # another 2d circle with a user defined origin 
3479 # the point of parameter 0 on this circle will be 
3480 # 1+sqrt(2),1+sqrt(2) 
3481 circle c2 1 1 1 1 2 
3482
3483 # a 3d circle, center 10 20 -5, axis Z, radius 17 
3484 circle c3 10 20 -5 17 
3485
3486 # same 3d circle with axis Y 
3487 circle c4 10 20 -5 0 1 0 17 
3488
3489 # full 3d circle, axis X, origin on Z 
3490 circle c5 10 20 -5 1 0 0 0 0 1 17 
3491
3492
3493 @subsubsection occt_2142243456_1101404852624  ellipse
3494
3495 Syntax: ellipse name x y [z [dx dy dz]] [ux uy [uz]] firstradius secondradius **ellipse **creates a 2d or 3d ellipse. In a 2d ellipse, the first two arguments define the center; in a 3d ellipse, the first three. The axis system is given by *firstradius*, the major radius, and *secondradius*, the minor radius. The parameter range of the ellipse is [0,2.*pi] starting from the X axis and going towards the Y axis. The Draw ellipse is parameterized by an angle: 
3496
3497 P(u) = O + firstradius*cos(u)*Xdir + secondradius*sin(u)*Ydir 
3498
3499 where: 
3500
3501   * P is the point of parameter u,
3502   * O, Xdir and Ydir are respectively the origin, *X Direction* and *Y Direction* of its local coordinate system.
3503 **Example:**
3504
3505 # default 2d ellipse 
3506 ellipse e1 10 5 20 10 
3507
3508 # 2d ellipse at angle 60 degree 
3509 ellipse e2 0 0 1 2 30 5 
3510
3511 # 3d ellipse, in the XY plane 
3512 ellipse e3 0 0 0 25 5 
3513
3514 # 3d ellipse in the X,Z plane with axis 1, 0 ,1 
3515 ellipse e4 0 0 0 0 1 0 1 0 1 25 5 
3516
3517 See also: **circle** 
3518 @subsubsection occt_2142243456_1101404852625  hyperbola
3519
3520 Syntax:      hyperbola name x y [z [dx dy dz]] [ux uy [uz]] firstradius secondradius 
3521
3522 **hyperbola **creates a 2d or 3d conic. The first arguments define the center. The axis system is given by *firstradius*, the major radius, and *secondradius*, the minor radius. Note that the hyperbola has only one branch, that in the X direction. 
3523
3524 The Draw hyperbola is parameterized as follows: 
3525
3526 P(U) = O + firstradius*Cosh(U)*XDir + secondradius*Sinh(U)*YDir 
3527
3528 where: 
3529
3530   * P is the point of parameter U,
3531   * O, XDir and YDir are respectively the origin, *X Direction* and *Y
3532
3533 Direction* of its local coordinate system. 
3534 **Example:** 
3535
3536 # default 2d hyperbola, with asymptotes 1,1 -1,1 
3537 hyperbola h1 0 0 30 30 
3538
3539 # 2d hyperbola at angle 60 degrees 
3540 hyperbola h2 0 0 1 2 20 20 
3541
3542 # 3d hyperbola, in the XY plane 
3543 hyperbola h3 0 0 0 50 50 
3544
3545 See also: **circle** 
3546
3547
3548 @subsubsection occt_2142243456_1101404852626  parabola
3549
3550 Syntax:      parabola name x y [z [dx dy dz]] [ux uy [uz]] FocalLength 
3551
3552 **parabola **creates a 2d or 3d parabola. in the axis system defined by the first arguments.The origin is the apex of the parabola. 
3553
3554 The Geom_Parabola parabola is parameterized as follows: 
3555
3556 P(u) = O + u*u/(4.*F)*XDir + u*YDir 
3557
3558 where: 
3559   * P is the point of parameter u,
3560   * O, XDir and YDir are respectively the origin, *X Direction* and *Y Direction* of its local coordinate system,
3561   * F is the focal length of the parabola.
3562 **Example:** 
3563
3564 # 2d parabola 
3565 parabola p1 0 0 50 
3566
3567 # 2d parabola with convexity +Y 
3568 parabola p2 0 0 0 1 50 
3569
3570 # 3d parabola in the Y-Z plane, convexity +Z 
3571 parabola p3 0 0 0 1 0 0 0 0 1 50 
3572
3573 See also: **circle** 
3574
3575
3576 @subsubsection occt_2142243456_1101404852627  beziercurve, dbeziercurve
3577
3578 Syntax:      beziercurve name nbpole pole, [weight] 
3579 2dbeziercurve name nbpole pole, [weight] 
3580
3581 **beziercurve **creates a 3d rational or non-rational Bezier curve. Give the number of poles (control points,) and the coordinates of the poles (x1 y1 z1 [w1] x2 y2 z2 [w2]). The degree will be nbpoles-1. To create a rational curve, give weights with the poles. You must give weights for all poles or for none. If the weights of all the poles are equal, the curve is polynomial, and therefore non-rational. 
3582 **Example:** 
3583
3584 # a rational 2d bezier curve (arc of circle) 
3585 2dbeziercurve ci 3 0 0 1 10 0 sqrt(2.)/2. 10 10 1 
3586
3587 # a 3d bezier curve, not rational 
3588 beziercurve cc 4 0 0 0 10 0 0 10 0 10 10 10 10 
3589
3590
3591 @subsubsection occt_2142243456_1101404852628  bsplinecurve, dbsplinecurve, pbsplinecurve, dpbsplinecurve
3592
3593 Syntax:      bsplinecurve name degree nbknots knot, umult pole, weight 2dbsplinecurve name degree nbknots knot, umult pole, weight pbsplinecurve name degree nbknots knot, umult pole, weight(periodic) 
3594 2dpbsplinecurve name degree nbknots knot, umult pole, weight (periodic) 
3595
3596 **bsplinecurve **creates 2d or 3d bspline curves; the **pbsplinecurve **and **2dpbsplinecurve **commands create periodic bspline curves. 
3597
3598 A bspline curve is defined by its degree, its periodic or non-periodic nature, a table of knots and a table of poles (i.e. control points). Consequently, specify the degree, the number of knots, and for each knot, the multiplicity, for each pole, the weight. In the syntax above, the commas link the adjacent arguments which they fall between: knot and multiplicities, pole and weight. 
3599
3600 The table of knots is an increasing sequence of reals without repetition. 
3601 Multiplicities must be lower or equal to the degree of the curve. For non-periodic curves, the first and last multiplicities can be equal to degree+1. For a periodic curve, the first and last multiplicities must be equal. 
3602
3603 The poles must be given with their weights, use weights of 1 for a non rational curve, the number of poles must be: 
3604
3605   * For a non periodic curve: Sum of multiplicities - degree + 1
3606   * For a periodic curve: Sum of multiplicities - last multiplicity
3607 **Example:** 
3608
3609 # a bspline curve with 4 poles and 3 knots 
3610 bsplinecurve bc 2 3 0 3 1 1 2 3 \ 
3611 10 0 7 1 7 0 7 1 3 0 8 1 0 0 7 1 
3612 # a 2d periodic circle (parameter from 0 to 2*pi !!) 
3613 dset h sqrt(3)/2 
3614 2dpbsplinecurve c 2 \ 
3615 4 0 2 pi/1.5 2 pi/0.75 2 2*pi 2 \ 
3616 0 -h/3 1 \ 
3617 0.5 -h/3 0.5 \ 
3618 0.25 h/6 1 \ 
3619 0 2*h/3 0.5 \ 
3620 -0.25 h/6 1 \ 
3621 -0.5 -h/3 0.5 \ 
3622 0 -h/3 1 
3623
3624 <h4>NOTE</h4>
3625 *You can create the **NURBS **subset of bspline curves and* 
3626 *surfaces by trimming analytical curves and surfaces and* 
3627 *executing the command *convert*; see below.* 
3628
3629
3630 @subsubsection occt_2142243456_1101404852629  uiso, viso
3631
3632 Syntax:      uiso name surface u 
3633 viso name surface u 
3634
3635 Use these commands to create a U or V isoparametric curve from a surface. 
3636 **Example:** 
3637
3638 # create a cylinder and extract iso curves 
3639
3640 cylinder c 10 
3641 uiso c1 c pi/6 
3642 viso c2 c 
3643
3644 *NOTE* 
3645 *Cannot be done from offset surfaces.* 
3646
3647
3648 @subsubsection occt_2142243456_11014048526210  tod, tod
3649
3650 Syntax:      to3d name curve2d [plane] 
3651 to2d name curve3d [plane] 
3652
3653 The **to3d **and **to2d **commands are used to create respectively a 3d curve from a 2d curve and a 2d curve from a 3d curve. The transformation uses a planar surface to define the XY plane in 3d (by default this plane is the default OXYplane). **to3d **always gives a correct result, but as **to2d **is not a projection, it may surprise you. It is always correct if the curve is planar and parallel to the plane of projection. The points defining the curve are projected on the plane. A circle, however, will remain a circle and will not be changed to an ellipse. 
3654 **Example:** 
3655
3656 # the following commands 
3657 circle c 0 0 5 
3658 plane p -2 1 0 1 2 3 
3659 to3d c c p 
3660
3661 # will create the same circle as 
3662 circle c -2 1 0 1 2 3 5 
3663
3664 See also: **project** 
3665
3666
3667 @subsubsection occt_2142243456_11014048526211  project
3668
3669 Syntax:      project name curve3d surface 
3670
3671 **project **computes a 2d curve in the parametric space of a surface corresponding to a 3d curve. This can only be used on analytical surfaces. 
3672 **Example:** 
3673
3674 # intersect a cylinder and a plane 
3675 # and project the resulting ellipse on the cylinder 
3676 # this will create a 2d sinusoid-like bspline 
3677 cylinder c 5 
3678 plane p 0 0 0 0 1 1 
3679 intersect i c p 
3680 project i2d i c 
3681
3682 @subsection occt_2142243456_110140485263  Surface creation
3683
3684 Types of surfaces are: 
3685
3686   * Analytical surfaces: plane, cylinder, cone, sphere, torus.
3687   * Polar surfaces: bezier surfaces, bspline surfaces
3688   * Trimmed and Offset surfaces; see **trim**, **trimu**, **trimv**, **offset**.
3689   * Surfaces produced by Revolution and Extrusion, created from curves with the **revsurf **and **extsurf**.
3690   * NURBS surfaces.
3691
3692 Surfaces are displayed with isoparametric lines. To show the parameterization, a small parametric line with a length 1/10 of V is displayed at 1/10 of U. 
3693
3694
3695 @subsubsection occt_2142243456_1101404852631  plane
3696
3697 Syntax:      plane name [x y z [dx dy dz [ux uy uz]]] 
3698
3699 Uses this command to create an infinite plane. A plane is the same as a 3d coordinate system, x,y,z is the origin, dx, dy, dz is the Z direction and ux, uy, uz is the X direction. The plane is perpendicular to Z and X is the U parameter. dx,dy,dz and ux,uy,uz must not be null and not colinear. ux,uy,uz will be modified to be orthogonal to dx,dy,dz. There are default values for the coordinate system. If no arguments are given, the global system (0,0,0), (0,0,1), (1,0,0). If only the origin is given, the axes are those given by default(0,0,1), (1,0,0). If the origin and the Z axis are given, the X axis is generated perpendicular to the Z axis. Note that this definition will be used for all analytical surfaces. 
3700 **Example:** 
3701
3702 # a plane through the point 10,0,0 perpendicular to X 
3703 # with U direction on Y 
3704 plane p1 10 0 0 1 0 0 0 1 0 
3705
3706 # an horixontal plane with origin 10, -20, -5 
3707 plane p2 10 -20 -5 
3708
3709
3710 @subsubsection occt_2142243456_1101404852632  cylinder
3711
3712 Syntax:      cylinder name [x y z [dx dy dz [ux uy uz]]] radius 
3713
3714 A cylinder is defined by a coordinate system, and a radius. The surface generated is an infinite cylinder with the Z axis as the axis. The U parameter is the angle starting from X going in the Y direction. 
3715 See also: **plane** 
3716 **Example:** 
3717
3718 # a cylinder on the default Z axis, radius 10 
3719 cylinder c1 10 
3720
3721 # a cylinder, also along the Z axis but with origin 5, 
3722 10, -3 
3723 cylinder c2 5 10 -3 10 
3724
3725 # a cylinder through the origin and on a diagonal 
3726 # with longitude pi/3 and latitude pi/4 (euler angles) 
3727 dset lo pi/3. la pi/4. 
3728 cylinder c3 0 0 0 cos(la)*cos(lo) cos(la)*sin(lo) 
3729 sin(la) 10 
3730
3731
3732 @subsubsection occt_2142243456_1101404852633  cone
3733
3734 Syntax:      cone name [x y z [dx dy dz [ux uy uz]]] semi-angle radius 
3735
3736 Creates a cone in the infinite coordinate system along the Z-axis. The radius is that of the circle at the intersection of the cone and the XY plane. The semi-angle is the angle formed by the cone relative to the axis; it should be between –90 and 90. If the radius is 0, the vertex is the origin. 
3737 See also: **plane** 
3738 **Example:** 
3739
3740 # a cone at 45 degrees at the origin on Z 
3741 cone c1 45 0 
3742
3743 # a cone on axis Z with radius r1 at z1 and r2 at z2 
3744 cone c2 0 0 z1 180.*atan2(r2-r1,z2-z1)/pi r1 
3745
3746 @subsubsection occt_2142243456_1101404852634  sphere
3747
3748 Syntax:      sphere name [x y z [dx dy dz [ux uy uz]]] radius 
3749
3750 Creates a sphere in the local coordinate system defined in the **plane **command. The sphere is centered at the origin. To parameterize the sphere, u is the angle from X to Y, between o and 2*pi. v is the angle in the half-circle at angle u in the plane containing the Z axis. v is between -pi/2 and pi/2. The poles are the points Z = +/- radius; their parameters are u,+/-pi/2 for any u in 0,2*pi. 
3751 **Example:** 
3752 # a sphere at the origin 
3753 sphere s1 10 
3754 # a sphere at 10 10 10, with poles on the axis 1,1,1 
3755 sphere s2 10 10 10 1 1 1 10 
3756
3757 See also: **plane** 
3758
3759
3760 @subsubsection occt_2142243456_1101404852635  torus
3761
3762 Syntax:      torus name [x y z [dx dy dz [ux uy uz]]] major minor 
3763
3764 Creates a torus in the local coordinate system with the given major and minor radii. Z is the axis for the major radius. The major radius may be lower in value than the minor radius. 
3765
3766 To parameterize a torus, u is the angle from X to Y; v is the angle in the plane at angle u from the XY plane to Z. u and v are in 0,2*pi. 
3767 **Example:** 
3768
3769 # a torus at the origin 
3770 torus t1 20 5 
3771
3772 # a torus in another coordinate system 
3773 torus t2 10 5 -2 2 1 0 20 5 
3774
3775 See also: **plane** 
3776
3777
3778 @subsubsection occt_2142243456_1101404852636  beziersurf
3779
3780 Syntax:      beziersurf name nbupoles nbvolpes pole, [weight] 
3781
3782 Use this command to create a bezier surface, rational or non-rational. First give the numbers of poles in the u and v directions. 
3783
3784 Then give the poles in the following order: pole(1, 1), pole(nbupoles, 1), pole(1, nbvpoles) and pole(nbupoles, nbvpoles). 
3785
3786 Weights may be omitted, but if you give one weight you must give all of them. 
3787 **Example:** 
3788
3789 # a non-rational degree 2,3 surface 
3790 beziersurf s 3 4 \ 
3791 0 0 0 10 0 5 20 0 0 \ 
3792 0 10 2 10 10 3 20 10 2 \ 
3793 0 20 10 10 20 20 20 20 10 \ 
3794 0 30 0 10 30 0 20 30 0 
3795
3796 See also: **beziercurve** 
3797
3798 @subsubsection occt_2142243456_1101404852637   bsplinesurf, upbsplinesurf, vpbsplinesurf, uvpbsplinesurf
3799
3800 Syntax:      bsplinesurf name udegree nbuknots uknot umult ... nbvknot vknot 
3801 vmult ... x y z w ... 
3802 upbsplinesurf ... 
3803 vpbsplinesurf ... 
3804 uvpbsplinesurf ... 
3805
3806 **bsplinesurf **generates bspline surfaces. **upbsplinesurf **creates a bspline surface periodic in u; **vpbsplinesurf **creates one periodic in v; and **uvpbsplinesurf **creates one periodic in uv. 
3807
3808 The syntax is similar to the **bsplinecurve **command. First give the degree in u and the knots in u with their multiplicities, then do the same in v. The poles follow. The number of poles is the product of the number in u and the number in v. See **bsplinecurve **to compute the number of poles, the poles are first given in U as in the beziersurf command. You must give weights if the surface is rational. 
3809 **Example:** 
3810
3811 # create a bspline surface of degree 1 2 
3812 # with two knots in U and three in V 
3813 bsplinesurf s \ 
3814 1 2 0 2 1 2 \ 
3815 2 3 0 3 1 1 2 3 \ 
3816 0 0 0 1 10 0 5 1 \ 
3817 0 10 2 1 10 10 3 1 \ 
3818 0 20 10 1 10 20 20 1 \ 
3819 0 30 0 1 10 30 0 1 
3820
3821 See also: **bsplinecurve**, **beziersurf**, **convert** 
3822
3823
3824 @subsubsection occt_2142243456_1101404852638  trim, trimu, trimv
3825
3826 Syntax:      trim newname name [u1 u2 [v1 v2]] 
3827 trimu newname name 
3828 trimv newname name 
3829
3830 The **trim **commands create trimmed curves or trimmed surfaces. Note that trimmed curves and surfaces are classes of the *Geom *package. The **trim **command creates either a new trimmed curve from a curve or a new trimmed surface in u and v from a surface. **trimu **creates a u-trimmed surface, and **trimv **a v-trimmed surface. After an initial trim, a second execution with no parameters given recreates the basis curve. The curves can be either 2d or 3d. If the trimming parameters decrease and if the curve or surface is not periodic, the direction is reversed. 
3831 <h4>NOTE</h4>
3832 *Note that a trimmed curve or surface contains a copy of the* 
3833 *basis geometry: modifying that will not modify the trimmed* 
3834 *geometry. Trimming trimmed geometry will not create* 
3835 *multiple levels of trimming. The basis geometry will be used.* 
3836 **Example:** 
3837
3838 # create a 3d circle 
3839 circle c 0 0 0 10 
3840
3841 # trim it, use the same variable, the original is 
3842 deleted 
3843 trim c c 0 pi/2 
3844
3845 # the original can be recovered! 
3846 trim orc c 
3847
3848 # trim again 
3849 trim c c pi/4 pi/2 
3850
3851 # the original is not the trimmed curve but the basis 
3852 trim orc c 
3853
3854 # as the circle is periodic, the two following commands 
3855 are identical 
3856 trim cc c pi/2 0 
3857 trim cc c pi/2 2*pi 
3858
3859 # trim an infinite cylinder 
3860 cylinder cy 10 
3861 trimv cy cy 0 50 
3862
3863 See also: **reverse** 
3864
3865
3866 @subsubsection occt_2142243456_1101404852639  offset
3867
3868 Syntax:      offset name basename distance [dx dy dz] 
3869
3870 Creates offset curves or surfaces at a given distance from a basis curve or surface. Offset curves and surfaces are classes from the *Geom *package. 
3871
3872 The curve can be a 2d or a 3d curve. To compute the offsets for a 3d curve, you must also give a vector dx,dy,dz. For a planar curve, this vector is usually the normal to the plane containing the curve. 
3873
3874 The offset curve or surface copies the basic geometry, which can be modified later. 
3875 **Example:** 
3876
3877 # graphic demonstration that the outline of a torus 
3878 # is the offset of an ellipse 
3879 smallview +X+Y 
3880 dset angle pi/6 
3881 torus t 0 0 0 0 cos(angle) sin(angle) 50 20 
3882 fit 
3883 ellipse e 0 0 0 50 50*sin(angle) 
3884 # note that the distance can be negative 
3885 offset l1 e 20 0 0 1 
3886 @subsubsection occt_2142243456_11014048526310  revsurf
3887
3888 Syntax:      revsurf name curvename x y z dx dy dz 
3889
3890 Creates a surface of revolution from a 3d curve. A surface of revolution or revolved surface is obtained by rotating a curve (called the *meridian*) through a complete revolution about an axis (referred to as the *axis of revolution*). The curve and the axis must be in the same plane (the *reference plane* of the surface). Give the point of origin x,y,z and the vector dx,dy,dz to define the axis of revolution. To parameterize a surface of revolution: u is the angle of rotation around the axis. Its origin is given by the position of the meridian on the surface. v is the parameter of the meridian. 
3891 **Example:** 
3892
3893 # another way of creating a torus like surface 
3894 circle c 50 0 0 20 
3895 revsurf s c 0 0 0 0 1 0 
3896
3897
3898 @subsubsection occt_2142243456_11014048526311  extsurf
3899
3900 Syntax:      extsurf newname curvename dx dy dz 
3901
3902 Use the **extsurf **command to create a surface of linear extrusion from a 3d curve. The basis curve is swept in a given direction,the *direction of extrusion* defined by a vector. In the syntax, dx,dy,dz gives the direction of extrusion. To parameterize a surface of extrusion: u is the parameter along the extruded curve; the v parameter is along the direction of extrusion. 
3903 **Example:** 
3904
3905 # an elliptic cylinder 
3906 ellipse e 0 0 0 10 5 
3907 extsurf s e 0 0 1 
3908 # to make it finite 
3909 trimv s s 0 10 
3910
3911
3912 @subsubsection occt_2142243456_11014048526312  convert
3913
3914 Syntax:      convert newname name 
3915
3916 **convert **creates a 2d or 3d NURBS curve or a NURBS surface from any 2d curve, 3d curve or surface. In other words, conics, beziers and bsplines are turned into NURBS. Offsets are not processed. 
3917 **Example:** 
3918
3919 # turn a 2d arc of a circle into a 2d NURBS 
3920 circle c 0 0 5 
3921 trim c c 0 pi/3 
3922 convert c1 c 
3923
3924 # an easy way to make a planar bspline surface 
3925 plane p 
3926 trim p p -1 1 -1 1 
3927 convert p1 p 
3928
3929 <h4>NOTE</h4>
3930 *Offset curves and surfaces are not treated by this command.* 
3931
3932
3933
3934 @subsection occt_2142243456_110140485264  Curve and surface modifications
3935
3936 Draw provides commands to modify curves and surfaces, some of them are general, others restricted to bezier curves or bsplines. 
3937
3938 General modifications: 
3939
3940   * Reversing the parametrization: **reverse**, **ureverse**, **vreverse**
3941
3942 Modifications for both bezier curves and bsplines: 
3943
3944   * Exchanging U and V on a surface: **exchuv**
3945   * Segmentation: **segment**, **segsur**
3946   * Increasing the degree: **incdeg**, **incudeg**, **incvdeg**
3947   * Moving poles: **cmovep**, **movep**, **movecolp**, **moverowp**
3948
3949 Modifications for bezier curves: 
3950
3951   * Adding and removing poles: **insertpole**, **rempole**, **remcolpole**, **remrowpole**
3952
3953 Modifications for bspline: 
3954
3955   * Inserting and removing knots: **insertknot**, **remknot**, **insertuknot**, **remuknot**, **insetvknot**, **remvknot**
3956   * Modifying periodic curves and surfaces: **setperiodic**, **setnotperiodic**, **setorigin**, **setuperiodic**, **setunotperiodic**, **setuorigin**, **setvperiodic**, **setvnotperiodic**, **setvorigin**
3957
3958
3959
3960
3961
3962 @subsubsection occt_2142243456_1101404852641  reverse, ureverse, vreverse
3963
3964
3965 Syntax:            reverse curvename 
3966 ureverse surfacename 
3967 vreverse surfacename 
3968
3969 The **reverse **command reverses the parameterization and inverses the orientation of a 2d or 3d curve. Note that the geometry is modified. To keep the curve or the surface, you must copy it before modification. 
3970
3971 **ureverse **or **vreverse **reverse the u or v parameter of a surface. Note that the new parameters of the curve may change according to the type of curve. For instance, they will change sign on a line or stay 0,1 on a bezier. 
3972
3973 Reversing a parameter on an analytical surface may create an indirect coordinate system. 
3974 **Example:** 
3975
3976 # reverse a trimmed 2d circle 
3977 circle c 0 0 5 
3978 trim c c pi/4 pi/2 
3979 reverse c 
3980
3981 # dumping c will show that it is now trimmed between 
3982 # 3*pi/2 and 7*pi/4 i.e. 2*pi-pi/2 and 2*pi-pi/4 
3983
3984
3985 @subsubsection occt_2142243456_1101404852642  exchuv
3986
3987 Syntax:                  exchuv surfacename 
3988
3989 For a bezier or bspline surface this command exchanges the u and v parameters. 
3990 **Example:** 
3991
3992 # exchanging u and v on a spline (made from a cylinder) 
3993 cylinder c 5 
3994 trimv c c 0 10 
3995 convert c1 c 
3996 exchuv c1 
3997
3998
3999 @subsubsection occt_2142243456_1101404852643  segment, segsur
4000
4001 Syntax:                  segment curve Ufirst Ulast 
4002 segsur surface Ufirst Ulast Vfirst Vlast 
4003
4004 **segment **and **segsur **segment a bezier curve and a bspline curve or surface respectively. These commands modify the curve to restrict it between the new parameters: the starting point of the modified curve, Ufirst, and the end point, Ulast. Ufirst is less than Ulast. 
4005
4006 This command must not be confused with **trim **which creates new geometry. 
4007
4008 **Example:** 
4009
4010 # segment a bezier curve in half 
4011 beziercurve c 3 0 0 0 10 0 0 10 10 0 
4012 segment c ufirst ulast 
4013
4014
4015 @subsubsection occt_2142243456_1101404852644  iincudeg, incvdeg
4016
4017 Syntax:      incudeg surfacename newdegree 
4018 incvdeg surfacename newdegree 
4019
4020 **incudeg **and **incvdeg **increase the degree in the U or V parameter of a bezier or bspline surface. 
4021 **Example:** 
4022
4023 # make a planar bspline and increase the degree to 2 3 
4024 plane p 
4025 trim p p -1 1 -1 1 
4026 convert p1 p 
4027 incudeg p1 2 
4028 incvdeg p1 3 
4029
4030 <h4>NOTE</h4>
4031 *The geometry is modified.* 
4032
4033
4034 @subsubsection occt_2142243456_1101404852645  cmovep, movep, movecolp, moverowp
4035
4036 Syntax:      cmovep curve index dx dy [dz] 
4037 movep surface uindex vindex dx dy dz 
4038 movecolp surface uindex dx dy dz 
4039 moverowp surface vindex dx dy dz 
4040
4041 **move **methods translate poles of a bezier curve, a bspline curve or a bspline surface. **cmovep **and **movep **translate one pole with a given index. 
4042
4043 **movecolp **and **moverowp **translate a whole column (expressed by the uindex) or row (expressed by the vindex) of poles. 
4044 **Example:** 
4045
4046 # start with a plane 
4047 # transform to bspline, raise degree and add relief 
4048 plane p 
4049 trim p p -10 10 -10 10 
4050 convert p1 p 
4051 incud p1 2 
4052 incvd p1 2 
4053 movecolp p1 2 0 0 5 
4054 moverowp p1 2 0 0 5 
4055 movep p1 2 2 0 0 5 
4056
4057
4058 @subsubsection occt_2142243456_1101404852646  insertpole, rempole, remcolpole, remrowpole
4059
4060 Syntax:                  insertpole curvename index x y [z] [weight] 
4061 rempole curvename index 
4062 remcolpole surfacename index 
4063 remrowpole surfacename index 
4064
4065 **insertpole **inserts a new pole into a 2d or 3d bezier curve. You may add a weight for the pole. The default value for the weight is 1. The pole is added at the position after that of the index pole. Use an index 0 to insert the new pole before the first one already existing in your drawing. 
4066
4067 **rempole **removes a pole from a 2d or 3d bezier curve. Leave at least two poles in the curves. 
4068
4069 **remcolpole **and **remrowpole **remove a column or a row of poles from a bezier surface. A column is in the v direction and a row in the u direction The resulting degree must be at least 1; i.e there will be two rows and two columns left. 
4070 **Example:** 
4071
4072 # start with a segment, insert a pole at end 
4073 # then remove the central pole 
4074 beziercurve c 2 0 0 0 10 0 0 
4075 insertpole c 2 10 10 0 
4076 rempole c 2 
4077
4078
4079 @subsubsection occt_2142243456_1101404852647  insertknot, insertuknot, insertvknot
4080
4081 Syntax:                  insertknot name knot [mult = 1] [knot mult ...] 
4082 insertuknot surfacename knot mult 
4083 insertvknot surfacename knot mult 
4084
4085 **insertknot **inserts knots in the knot sequence of a bspline curve. You must give a knot value and a target multiplicity. The default multiplicity is 1. If there is already a knot with the given value and a multiplicity lower than the target one, its multiplicity will be raised. **insertuknot **and **insertvknot **insert knots in a surface. 
4086
4087
4088
4089
4090 **Example:** 
4091
4092 # create a cylindrical surface and insert a knot 
4093 cylinder c 10 
4094 trim c c 0 pi/2 0 10 
4095 convert c1 c 
4096 insertuknot c1 pi/4 1 
4097
4098 @subsubsection occt_2142243456_1101404852648  remknot, remuknot, remvknot
4099
4100 Syntax:      remknot index [mult] [tol] 
4101 remuknot index [mult] [tol] 
4102 remvknot index [mult] [tol] 
4103
4104 **remknot **removes a knot from the knot sequence of a curve or a surface. Give the index of the knot and optionally, the target multiplicity. If the target multiplicity is not 0, the multiplicity of the knot will be lowered. As the curve may be modified, you are allowed to set a tolerance to control the process. If the tolerance is low, the knot will only be removed if the curve will not be modified. 
4105
4106 By default, if no tolerance is given, the knot will always be removed. 
4107 **Example:** 
4108
4109 # bspline circle, remove a knot 
4110 circle c 0 0 5 
4111 convert c1 c 
4112 incd c1 5 
4113 remknot c1 2 
4114
4115 *NOTE* 
4116 *Curves or Surfaces may be modified.* 
4117
4118
4119 @subsubsection occt_2142243456_1101404852649  setperiodic, setnotperiodic, setuperiodic, setunotperiodic, setvperiodic, setvnotperiodic
4120
4121 Syntax:      setperiodic curve 
4122 setnotperiodic curve 
4123 setuperiodic surface 
4124 setunotperiodic surface 
4125 setvperiodic surface 
4126 setvnotperiodic surface 
4127
4128 **setperiodic **turns a bspline curve into a periodic bspline curve; the knot vector stays the same and excess poles are truncated. The curve may be modified if it has not been closed. **setnotperiodic **removes the periodicity of a periodic curve. The pole table mau be modified. Note that knots are added at the beginning and the end of the knot vector and the multiplicities are knots set to degree+1 at the start and the end. 
4129
4130 **setuperiodic **and **setvperiodic **make the u or the v parameter of bspline surfaces periodic; **setunotperiodic**, and **setvnotperiodic **remove periodicity from the u or the v parameter of bspline surfaces. 
4131 **Example:** 
4132
4133 # a circle deperiodicized 
4134 circle c 0 0 5 
4135 convert c1 c 
4136 setnotperiodic c1 
4137 @subsubsection occt_2142243456_11014048526410  setorigin, setuorigin, setvorigin
4138
4139 Syntax:      setorigin curvename index 
4140 setuorigin surfacename index 
4141 setuorigin surfacename index 
4142
4143 These commands change the origin of the parameters on periodic curves or surfaces. The new origin must be an existing knot. To set an origin other than an existing knot, you must first insert one with the **insertknot **command. 
4144 **Example:** 
4145
4146 # a torus with new U and V origins 
4147 torus t 20 5 
4148 convert t1 t 
4149 setuorigin t1 2 
4150 setvorigin t1 2 
4151
4152
4153 @subsection occt_2142243456_110140485265  Transformations
4154
4155 Draw provides commands to apply linear transformations to geometric objects: they include translation, rotation, mirroring and scaling. 
4156
4157 @subsubsection occt_2142243456_1101404852651  translate, dtranslate
4158
4159 Syntax:                  translate name [names ...] dx dy dz 
4160 2dtranslate name [names ...] dx dy 
4161
4162 The **Translate **command translates 3d points, curves and surfaces along a vector dx,dy,dz. You can translate more than one object with the same command. 
4163
4164 For 2d points or curves, use the **2dtranslate **command. 
4165 **Example:** 
4166
4167 # 3d tranlation 
4168 point p 10 20 30 
4169 circle c 10 20 30 5 
4170 torus t 10 20 30 5 2 
4171 translate p c t 0 0 15 
4172 *NOTE* 
4173 *Objects are modified by this command.* 
4174
4175 @subsubsection occt_2142243456_1101404852652  rotate, drotate
4176
4177 Syntax:      rotate name [name ...] x y z dx dy dz angle 
4178 2drotate name [name ...] x y angle 
4179 The **rotate **command rotates a 3d point curve or surface. You must give an axis of rotation with a point x,y,z, a vector dx,dy,dz, and an angle in degrees. 
4180
4181 For a 2d rotation, you need only give the center point and the angle. In 2d or 3d, the angle can be negative. 
4182 **Example:** 
4183
4184 # make a helix of circles. create a scripte file with 
4185 this code and execute it using **source**. 
4186 circle c0 10 0 0 3 
4187 for {set i 1} {$i = 10} {incr i} { 
4188 copy c[expr $i-1] c$i 
4189 translate c$i 0 0 3 
4190 rotate c$i 0 0 0 0 0 1 36 
4191
4192
4193 @subsubsection occt_2142243456_1101404852653  pmirror, lmirror, smirror, dpmirror, dlmirror
4194
4195 Syntax:      pmirror name [names ...] x y z 
4196 lmirror name [names ...] x y z dx dy dz 
4197 smirror name [names ...] x y z dx dy dz 
4198 2dpmirror name [names ...] x y 
4199 2dlmirror name [names ...] x y dx dy 
4200
4201 The mirror commands perform a mirror transformation of 2d or 3d geometry. 
4202
4203 **pmirror **is the point mirror, mirroring 3d curves and surfaces about a point of symmetry. **lmirror **is the line mirror commamd, mirroring 3d curves and surfaces about an axis of symmetry. **smirror **is the surface mirror, mirroring 3d curves and surfaces about a plane of symmetry. In the last case, the plane of symmetry is perpendicular to dx,dy,dz. 
4204
4205 In 2d, only **2dpmirror**, point symmetry mirroring, and **2dlmirror**, axis symmetry mirroring, are available. 
4206 **Example:** 
4207
4208 # build 3 images of a torus 
4209 torus t 10 10 10 1 2 3 5 1 
4210 copy t t1 
4211 pmirror t1 0 0 0 
4212 copy t t2 
4213 lmirror t2 0 0 0 1 0 0 
4214 copy t t3 
4215 smirror t3 0 0 0 1 0 0 
4216
4217 @subsubsection occt_2142243456_1101404852654  pscale, dpscale
4218
4219 Syntax:                  pscale name [name ...] x y z s 
4220 2dpscale name [name ...] x y s 
4221 The **pscale **and **2dpscale **commands transform an object by point scaling. You must give the center and the scaling factor. Because other scalings modify the type of the object, they are not provided. For example, a sphere may be transformed into an ellipsoid. Using a scaling factor of -1 is similar to using **pmirror**. 
4222 **Example:** 
4223
4224 # double the size of a sphere 
4225 sphere s 0 0 0 10 
4226 pscale s 0 0 0 2 
4227
4228 @subsection occt_2142243456_110140485266  Curve and surface analysis
4229
4230 **Draw **provides methods to compute information about curves and surfaces: 
4231
4232   * **coord **to find the coordinates of a point.
4233   * **cvalue **and **2dcvalue **to compute points and derivatives on curves.
4234   * **svalue **to compute points and derivatives on a surface.
4235   * **localprop **and **minmaxcurandif **to compute the curvature on a curve.
4236   * **parameters **to compute (u,v) values for a point on a surface.
4237   * **proj **and **2dproj **to project a point on a curve or a surface.
4238   * **surface_radius **to compute the curvature on a surface.
4239
4240 @subsubsection occt_2142243456_1101404852661  coord
4241
4242 Syntax:            coord P x y [z] 
4243
4244 The **coord **command will set the coordinates of the point P. x, y (and optionally z) 
4245 **Example:** 
4246
4247 # translate a point 
4248 point p 10 5 5 
4249 translate p 5 0 0 
4250 coord p x y z 
4251 # x value is 15 
4252 See also: **point** 
4253 @subsubsection occt_2142243456_1101404852662   cvalue, dcvalue
4254
4255 Syntax:      cvalue curve U x y z [d1x d1y d1z [d2x d2y d2z]] 
4256 2dcvalue curve U x y [d1x d1y [d2x d2y]] 
4257
4258 For a curve at a given parameter, and depending on the number of arguments, **cvalue **computes: the coordinates in x,y,z, the first derivative in d1x,d1y,d1z and the second derivative in d2x,d2y,d2z. 
4259 **Example:**
4260
4261 # on a bezier curve at parameter 0 
4262 # the point is the first pole 
4263 # the derivative is the vector first to second pole 
4264 # multiplied by the degree 
4265 # the second derivative is the difference 
4266 # first to second pole, second to third pole 
4267 # multipied by degree  * degree-1 
4268 2dbeziercurve c 4 0 0 1 1 2 1 3 0 
4269 2dcvalue c 0 x y d1x d1y d2x d2y 
4270
4271 # values of x y d1x d1y d2x d2y 
4272 # are 0 0 3 3 0 -6 
4273
4274
4275 @subsubsection occt_2142243456_1101404852663  svalue
4276
4277 Syntax: svalue surfname U v x y z [dux duy duz dvx dvy dvz [d2ux d2uy d2uz d2vx d2vy d2vz d2uvx d2uvy d2uvz]] 
4278
4279 **svalue **computes points and derivatives on a surface for a pair of parameter values. The result depends on the number of arguments. You can compute first and second derivatives. 
4280 **Example:** 
4281
4282 # display points on a sphere 
4283 sphere s 10 
4284 for {dset t 0} {[dval t] = 1} {dset t t+0.01} { 
4285 svalue s t*2*pi t*pi-pi/2 x y z 
4286 point . x y z 
4287
4288
4289
4290 @subsubsection occt_2142243456_1101404852664  localprop, minmaxcurandinf
4291
4292 Syntax:      localprop curvename U 
4293 minmaxcurandinf curve 
4294
4295 The **localprop **command computes the curvature of a curve. 
4296 **minmaxcurandinf **computes and prints the parameters of the points where the curvature is minimum and maximum on a 2d curve. 
4297 **Example:** 
4298
4299 # show curvature at the center of a bezier curve 
4300 beziercurve c 3 0 0 0 10 2 0 20 0 0 
4301 localprop c 0.5 
4302 == Curvature : 0.02 
4303
4304 See also: **surface_radius** 
4305
4306
4307 @subsubsection occt_2142243456_1101404852665  parameters
4308
4309 Syntax:      parameters surf/curve x y z U [V] 
4310
4311 The **parameters **command returns the