0024341: Document building OpenCL ICD Loader package
[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* isntances 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 vdisplay name1 [name2] … [name n] 
1498
1499 Displays named objects. 
1500 **Example:** 
1501
1502 vinit 
1503 box b 40 40 40 10 10 10 
1504 psphere s 20 
1505 vdisplay s b 
1506 vfit 
1507
1508
1509 @subsubsection occt_draw_4_32 vdonly
1510
1511 Syntax:                  vdonly [name1] … [name n] 
1512
1513 Displays only selected or named objects. If there are no selected or named objects, nothing is done. 
1514 **Example:** 
1515
1516 vinit 
1517 box b 40 40 40 10 10 10 
1518 psphere s 20 
1519 vdonly b 
1520 vfit 
1521 @subsubsection occt_draw_4_33 vdisplayall
1522
1523 Syntax:                  vdisplayall 
1524
1525 Displays all created objects. 
1526 **Example:** 
1527
1528 vinit 
1529 box b 40 40 40 10 10 10 
1530 psphere s 20 
1531 vdisplayall 
1532 vfit 
1533 @subsubsection occt_draw_4_34 verase
1534
1535 Syntax:                  verase [name1] [name2] … [name n] 
1536
1537 Erases some selected or named objects. If there are no selected or named objects, the whole viewer is erased. 
1538 **Example:** 
1539
1540 vinit 
1541 box b1 40 40 40 10 10 10 
1542 box b2 -40 -40 -40 10 10 10 
1543 psphere s 20 
1544 vdisplayall 
1545 vfit 
1546 # erase only first box 
1547 verase b1 
1548 # erase second box and sphere 
1549 verase 
1550 @subsubsection occt_draw_4_35 veraseall
1551
1552 Syntax:                  veraseall 
1553
1554 Erases all objects displayed in the viewer. 
1555 **Example:** 
1556 vinit 
1557 box b1 40 40 40 10 10 10 
1558 box b2 -40 -40 -40 10 10 10 
1559 psphere s 20 
1560 vdisplayall 
1561 vfit 
1562 # erase only first box 
1563 verase b1 
1564 # erase second box and sphere 
1565 verseall 
1566
1567 @subsubsection occt_draw_4_36 vsetdispmode
1568
1569 Syntax:                  vsetdispmode [name] mode(0,1,2,3) 
1570
1571 Sets display mode for all, selected or named objects. 
1572 **mode** is **0** (**WireFrame**), **1** (**Shading**), **2** (**Quick HideLineremoval**), **3** (**Exact HideLineremoval**). 
1573 **Example:** 
1574
1575 vinit 
1576 box b 10 10 10 
1577 vdisplay b 
1578 vsetdispmode 1 
1579 vfit 
1580 @subsubsection occt_draw_4_37 vdisplaytype
1581
1582 Syntax:                  vdisplaytype type 
1583
1584 Displays all objects of a given type. 
1585 Possible **type**s are **;Point;, ;Axis;, ;Trihedron;, ;PlaneTrihedron;, ;Line;, ;Circle;, ;Plane;, ;Shape;, ;ConnectedShape;, ;MultiConn.Shape;, ;ConnectedInter.;, ;MultiConn.;, ;Constraint; **and** ;Dimension; **(see **vtypes**). 
1586
1587 @subsubsection occt_draw_4_38 verasetype
1588
1589 Syntax:                  verasetype type 
1590
1591 Erases all objects of a given type. 
1592 Possible** type**s are **;Point;, ;Axis;, ;Trihedron;, ;PlaneTrihedron;, ;Line;, ;Circle;, ;Plane;, ;Shape;, ;ConnectedShape;, ;MultiConn.Shape;, ;ConnectedInter.;, ;MultiConn.;, ;Constraint; **and **;Dimension; **(see **vtypes**). 
1593
1594 @subsubsection occt_draw_4_39 vtypes
1595
1596 Syntax:                  vtypes 
1597
1598 Makes a list of known types and signatures in AIS. 
1599
1600 @subsubsection occt_draw_4_310 vsetcolor
1601
1602 Syntax:                  vsetcolor [shapename] colorname 
1603
1604 Sets color for all, selected or named shapes. 
1605 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;**. 
1606
1607
1608
1609 @subsubsection occt_draw_4_311 vunsetcolor
1610
1611 Syntax:                  vunsetcolor [shapename] 
1612
1613 Sets default color for all, selected or named shapes. 
1614
1615 @subsubsection occt_draw_4_312 vsettransparency
1616
1617 Syntax:                  vsettransparency [shapename] coeficient 
1618
1619 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. 
1620 **Example:** 
1621
1622 vinit 
1623 box b 10 10 10 
1624 psphere s 20 
1625 vdisplay b s 
1626 vfit 
1627 vsetdispmode 1 
1628 vsettransparency b 0.5 
1629
1630 @subsubsection occt_draw_4_313 vunsettransparency
1631
1632 Syntax:                  vunsettransparency [shapename] 
1633
1634 Sets default transparency (0.0) for all selected or named shapes. 
1635
1636 @subsubsection occt_draw_4_314 vsetmaterial
1637
1638 Syntax:                  vsetmaterial [shapename] materialname 
1639
1640 Sets material for all selected or named shapes. 
1641 **materialname** is ***BRASS*, *BRONZE*, *COPPER*, *GOLD*, *PEWTER*, *PLASTER*, *PLASTIC*, *SILVER*, *STEEL*, *STONE*, *SHINY_PLASTIC*, *SATIN*, *METALIZED*, *NEON_GNC*, *CHROME*, *ALUMINIUM*, *OBSIDIAN*, *NEON_PHC*, *JADE*.** 
1642 **Example:** 
1643
1644 vinit 
1645 psphere s 20 
1646 vdisplay s 
1647 vfit 
1648 vsetdispmode 1 
1649 vsetmaterial s JADE 
1650
1651 @subsubsection occt_draw_4_315 vunsetmaterial
1652
1653 Syntax:                  vunsetmaterial [shapename] 
1654
1655 Sets default material for all selected or named shapes. 
1656
1657 @subsubsection occt_draw_4_316 vsetwidth
1658
1659 Syntax:                  vsetwidth [shapename] coeficient 
1660
1661 Sets width of the edges for all selected or named shapes. 
1662 The **Coefficient** may be between 0.0 and 10.0. 
1663 **Example:** 
1664
1665 vinit 
1666 box b 10 10 10 
1667 vdisplay b 
1668 vfit 
1669 vsetwidth b 5 
1670
1671 @subsubsection occt_draw_4_317 vunsetwidth
1672
1673 Syntax:                  vunsetwidth [shapename] 
1674
1675 Sets default width of edges (0.0) for all selected or named shapes. 
1676
1677 @subsubsection occt_draw_4_318 vsetshading
1678
1679 Syntax:                  vsetshading shapename [coefficient] 
1680
1681 Sets deflection coefficient that defines the quality of the shape’s representation in the shading mode. Default coefficient is 0.0008. 
1682 **Example:** 
1683
1684 vinit 
1685 psphere s 20 
1686 vdisplay s 
1687 vfit 
1688 vsetdispmode 1 
1689 vsetshading s 0.005 
1690 @subsubsection occt_draw_4_319 vunsetshading
1691
1692 Syntax:                  vunsetshading [shapename] 
1693
1694 Sets default deflection coefficient (0.0008) that defines the quality of the shape’s representation in the shading mode. Default coefficient is 0.0008. 
1695
1696 @subsubsection occt_draw_4_320 vsetam
1697
1698 Syntax:                  vsetam [shapename] mode 
1699
1700 Activates selection mode for all selected or named shapes. 
1701 **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**. 
1702 **Example:** 
1703
1704 vinit 
1705 box b 10 10 10 
1706 vdisplay b 
1707 vfit 
1708 vsetam b 2 
1709 @subsubsection occt_draw_4_321 vunsetam
1710
1711 Syntax:                  vunsetam 
1712
1713 Deactivates all selection modes for all shapes. 
1714
1715 @subsubsection occt_draw_4_322 vdump
1716
1717 Syntax:                  vdump filename.{png|xwd|bmp} 
1718
1719 Extracts the contents of the viewer window to a png, XWD or BMP file. 
1720
1721 @subsubsection occt_draw_4_323 vdir
1722
1723 Syntax:                  vdir 
1724
1725 Displays the list of displayed objects. 
1726
1727 @subsubsection occt_draw_4_324 vsub
1728
1729 Syntax:                  vsub 0/1(on/off)[shapename] 
1730
1731 Hilights/unhilights named or selected objects which are displayed at neutral state with subintensity color. 
1732 **Example:** 
1733
1734 vinit 
1735 box b 10 10 10 
1736 psphere s 20 
1737 vdisplay b s 
1738 vfit 
1739 vsetdispmode 1 
1740 vsub b 1 
1741
1742 @subsubsection occt_draw_4_325 vardis
1743
1744 Syntax:                  vardis 
1745
1746 Displays active areas (for each activated sensitive entity, one or several 2D bounding boxes are displayed, depending on the implementation of a particular entity). 
1747
1748 @subsubsection occt_draw_4_326 varera
1749
1750 Syntax:                  varera 
1751
1752 Erases active areas. 
1753
1754 @subsubsection occt_draw_4_327 vsensdis
1755
1756 Syntax:                  vsensdis 
1757
1758 Displays active entities (sensitive entities of one of the standard types corresponding to active selection modes). 
1759
1760 Standard entity types are those defined in Select3D package: 
1761   * sensitive box
1762   * sensitive face
1763   * sensitive curve
1764   * sensitive segment
1765   * sensitive circle
1766   * sensitive point
1767   * sensitive triangulation
1768   * sensitive triangle
1769 Custom (application-defined) sensitive entity types are not processed by this command. 
1770
1771 @subsubsection occt_draw_4_328 vsensera
1772
1773 Syntax:                  vsensera 
1774
1775 Erases active entities. 
1776
1777 @subsubsection occt_draw_4_329 vperf
1778
1779 Syntax:                  vperf shapename 1/0 (Transformation/Loacation) 1/0 (Primitives sensibles ON/OFF) 
1780
1781 Tests the animation of an object along a predefined trajectory. 
1782 **Example:** 
1783
1784 vinit 
1785 box b 10 10 10 
1786 psphere s 20 
1787 vdisplay b s 
1788 vfit 
1789 vsetdispmode 0 
1790 vperf b 1 1 
1791 @subsubsection occt_draw_4_330 vr
1792
1793 Syntax:                  vr filename 
1794
1795 Reads shape from BREP-format file and displays it in the viewer. 
1796 **Example:** 
1797
1798 vinit 
1799 vr myshape.brep 
1800 @subsubsection occt_draw_4_330331 vstate
1801
1802 Syntax:                  vstate [name1] … [name n] 
1803
1804 Makes a list of the status (**Displayed** or **Not Displayed**) of some selected or named objects. 
1805
1806
1807
1808 @subsection occt_draw_4_3304 AIS viewer – object commands
1809
1810 @subsubsection occt_draw_4_33041 vtrihedron
1811
1812 Syntax:                  vtrihedron name [X0] [Y0] [Z0] [Zu] [Zv] [Zw] [Xu] [Xv] [Xw] 
1813
1814 Creates a new AIS_Trihedron object. If no argument is set, the default trihedron (0XYZ) is created. 
1815 **Example:** 
1816
1817 vinit 
1818 vtrihedron tr 
1819
1820 @subsubsection occt_draw_4_33042 vplanetri
1821
1822 Syntax:                  vplanetri name 
1823
1824 Creates a plane from a trihedron selection. 
1825
1826
1827 @subsubsection occt_draw_4_33043 vsize
1828
1829 Syntax:                  vsize [name] [size] 
1830
1831 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. 
1832 **Example:** 
1833
1834 vinit 
1835 vtrihedron tr1 
1836 vtrihedron tr2 0 0 0 1 0 0 1 0 0 
1837 vsize tr2 400 
1838
1839 @subsubsection occt_draw_4_33044 vaxis
1840
1841 Syntax:                  vaxis name [Xa Ya Za Xb Yb Zb] 
1842
1843 Creates an axis. If  the values are not defined, an axis is created by interactive selection of two vertices or one edge 
1844 **Example:** 
1845
1846 vinit 
1847 vtrihedron tr 
1848 vaxis axe1 0 0 0 1 0 0 
1849
1850 @subsubsection occt_draw_4_33045 vaxispara
1851
1852 Syntax:                  vaxispara nom 
1853
1854 Creates an axis by interactive selection of an edge and a vertex. 
1855
1856 @subsubsection occt_draw_4_33046 vaxisortho
1857
1858 Syntax:                  vaxisotrho name 
1859
1860 Creates an axis by interactive selection of an edge and a vertex. The axis will be orthogonal to the selected edge. 
1861
1862 @subsubsection occt_draw_4_33047 vpoint
1863
1864 Syntax:                  vpoint name [Xa Ya Za] 
1865
1866 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). 
1867 **Example:** 
1868
1869 vinit 
1870 vpoint p 0 0 0 
1871
1872 @subsubsection occt_draw_4_33048 vplane
1873
1874 Syntax:                  vplane name [AxisName] [PointName] 
1875                         vplane name [PointName] [PointName] [PointName] 
1876                         vplane name [PlaneName] [PointName] 
1877
1878 Creates a plane from named or interactively selected entities. 
1879 **Example:** 
1880
1881 vinit 
1882 vpoint p1 0 50 0 
1883 vaxis axe1 0 0 0 0 0 1 
1884 vtrihedron tr 
1885 vplane plane1 axe1 p1 
1886
1887 @subsubsection occt_draw_4_33049 vplanepara
1888
1889 Syntax:                  vplanepara name 
1890
1891 Creates a plane from interactively selected vertex and face. 
1892
1893 @subsubsection occt_draw_4_330410 vplaneortho
1894
1895 Syntax:                  vplaneortho name 
1896
1897 Creates a plane from interactive selected face and coplanar edge. 
1898
1899 @subsubsection occt_draw_4_330411 vline
1900
1901 Syntax:                  vline name [PointName] [PointName] 
1902                         vline name [Xa Ya Za Xb Yb Zb] 
1903
1904 Creates a line from coordinates, named or interactively selected vertices. 
1905 **Example:** 
1906
1907 vinit 
1908 vtrihedron tr 
1909 vpoint p1 0 50 0 
1910 vpoint p2 50 0 0 
1911 vline line1 p1 p2 
1912 vline line2 0 0 0 50 0 1 
1913
1914 @subsubsection occt_draw_4_330412 vcircle
1915
1916 Syntax:      vcircle name [PointName PointName PointName IsFilled] 
1917 vcircle name [PlaneName PointName Radius IsFilled] 
1918
1919 Creates a circle from named or interactively selected entities.  Parameter IsFilled is defined as 0 or 1. 
1920 **Example:** 
1921
1922 vinit 
1923 vtrihedron tr 
1924 vpoint p1 0 50 0 
1925 vpoint p2 50 0 0 
1926 vpoint p3 0 0 0 
1927 vcircle circle1 p1 p2 p3 1 
1928
1929
1930 @subsubsection occt_draw_4_330413 vtri2d
1931
1932 Syntax:                  vtri2d name 
1933
1934 Creates a plane with a 2D trihedron from an interactively selected face. 
1935
1936 @subsubsection occt_draw_4_330414 vselmode
1937
1938 Syntax:                  vselmode [object] mode On/Off 
1939
1940 Sets the selection mode for an object. If the object value is not defined, the selection mode is set for all displayed objects. 
1941 Value On is defined as 1 and Off – as 0. 
1942 **Example:** 
1943
1944 vinit 
1945 vpoint p1 0 0 0 
1946 vpoint p2 50 0 0 
1947 vpoint p3 25 40 0 
1948 vtriangle triangle1 p1 p2 p3 
1949 @subsubsection occt_draw_4_330415 vconnect, vconnectsh
1950
1951 Syntax:                  vconnect name object Xo Yo Zo Xu Xv Xw Zu Zv Zw 
1952                              vconnectsh name shape Xo Yo Zo Xu Xv Xw Zu Zv Zw 
1953
1954 Creates and displays an object with input location connected to a named entity. 
1955 The difference between these two commands is that the object created by vconnect does not support the selection modes differrent from 0. 
1956 **Example:** 
1957
1958 Vinitvinit 
1959 vpoint p1 0 0 0 
1960 vpoint p2 50 0 0 
1961 vsegment segment p1 p2 
1962 restore CrankArm.brep obj 
1963 vdisplay obj 
1964 vconnectsh new obj 100100100 1 0 0 0 0 1 
1965
1966
1967
1968 @subsubsection occt_draw_4_330416 vtriangle
1969
1970 Syntax:                  vtriangle name PointName PointName PointName 
1971
1972 Creates and displays a filled triangle from named points. 
1973 **Example:** 
1974
1975 vinit 
1976 vpoint p1 0 0 0 
1977 vpoint p2 50 0 0 
1978 vpoint p3 25 40 0 
1979 vtriangle triangle1 p1 p2 p3 
1980
1981 @subsubsection occt_draw_4_330417 vsegment
1982
1983 Syntax:                  vsegment name PointName PointName 
1984
1985 Creates and displays a segment from named points. 
1986 **Example:** 
1987
1988 Vinit 
1989 vpoint p1 0 0 0 
1990 vpoint p2 50 0 0 
1991 vsegment segment p1 p2 
1992
1993
1994 **MeshVS **(Mesh Visualization Service) component provides flexible means of displaying meshes with associated pre- and post- processor data. 
1995
1996
1997
1998 @subsection occt_draw_4_3305 AIS viewer – Mesh Visualization Service
1999
2000 @subsubsection occt_draw_4_33051 meshfromstl
2001
2002 Syntax:                  meshfromstl meshname file 
2003
2004 Creates a MeshVS_Mesh object based on STL file data. The object will be displayed immediately. 
2005 **Example:** 
2006
2007 meshfromstl mesh myfile.stl 
2008
2009 @subsubsection occt_draw_4_33052 meshdispmode
2010
2011 Syntax:                  meshdispmode meshname displaymode 
2012
2013 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). 
2014 **Example:** 
2015
2016 vinit 
2017 meshfromstl mesh myfile.stl 
2018 meshdispmode mesh 2 
2019
2020 @subsubsection occt_draw_4_33053 meshselmode
2021
2022 Syntax:                  meshselmode meshname selectionmode 
2023
2024 Changes the selection mode of object **meshname**. The **selectionmode** is integer OR-combination of mode flags. The basic flags are the following: 
2025 **1** – node selection, 
2026 **2** – 0D elements (not suppored in STL) 
2027 **4** – links (not supported in STL) 
2028 **8** – faces 
2029 **Example:** 
2030
2031 vinit 
2032 meshfromstl mesh myfile.stl 
2033 meshselmode mesh 1 
2034
2035 @subsubsection occt_draw_4_33054 meshshadcolor
2036
2037 Syntax:                  meshshadcolor meshname red green blue 
2038
2039 Changes the face interior color of object **meshname**. The **red**, **green** and **blue** are real values between **0** and **1**. 
2040 **Example:** 
2041
2042 vinit 
2043 meshfromstl mesh myfile.stl 
2044 meshshadcolormode mesh 0.5 0.5 0.5 
2045
2046 @subsubsection occt_draw_4_33055 meshlinkcolor
2047
2048 Syntax:                  meshlinkcolor meshname red green blue 
2049
2050 Changes the color of face borders for object **meshname**. The **red**, **green** and **blue** are real values between **0** and **1**. 
2051 **Example:** 
2052
2053 vinit 
2054 meshfromstl mesh myfile.stl 
2055 meshlinkcolormode mesh 0.5 0.5 0.5 
2056
2057 @subsubsection occt_draw_4_33056 meshmat
2058
2059 Syntax:                  meshmat meshname material 
2060
2061 Changes the material of object **meshname**. **material** is represented with an integer value as follows (equivalent to enumeration Graphic3d_NameOfMaterial): 
2062 **0 – BRASS,** 
2063 **1 – BRONZE,** 
2064 **2 - COPPER,** 
2065 **3 - GOLD,** 
2066 **4 - PEWTER,** 
2067 **5 - PLASTER,** 
2068 **6 - PLASTIC,** 
2069 **7 - SILVER,** 
2070 **8 - STEEL,** 
2071 **9 - STONE,** 
2072 **10 - SHINY_PLASTIC,** 
2073 **11 - SATIN,** 
2074 **12 - METALIZED,** 
2075 **13 - NEON_GNC,** 
2076 **14 - CHROME,** 
2077 **15 - ALUMINIUM,** 
2078 **16 - OBSIDIAN,** 
2079 **17 - NEON_PHC,** 
2080 **18 - JADE,** 
2081 **19 - DEFAULT,** 
2082 **20 - UserDefined** 
2083 **Example:** 
2084
2085 vinit 
2086 meshfromstl mesh myfile.stl 
2087 meshmat mesh JADE 
2088
2089 @subsubsection occt_draw_4_33057 meshshrcoef
2090
2091 Syntax:                  meshshrcoef meshname shrinkcoefficient 
2092
2093 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. 
2094 **Example:** 
2095
2096 vinit 
2097 meshfromstl mesh myfile.stl 
2098 meshshrcoef mesh 0.05 
2099
2100 @subsubsection occt_draw_4_33058 meshshow
2101
2102 Syntax:                  meshshow meshname 
2103
2104 Displays **meshname** in the viewer (if it is erased). 
2105 **Example:** 
2106
2107 vinit 
2108 meshfromstl mesh myfile.stl 
2109 meshshow mesh 
2110
2111 @subsubsection occt_draw_4_33059 meshhide
2112
2113 Syntax:                  meshhide meshname 
2114
2115 Hides **meshname** in the viewer. 
2116 **Example:** 
2117
2118 vinit 
2119 meshfromstl mesh myfile.stl 
2120 meshhide mesh 
2121
2122 @subsubsection occt_draw_4_330510 meshhidesel
2123
2124 Syntax:                  meshhidesel meshname 
2125
2126 Hides only selected entities. The other part of **meshname** remains visible. 
2127
2128 @subsubsection occt_draw_4_330511 meshshowsel
2129
2130 Syntax:                  meshshowsel meshname 
2131
2132 Shows only selected entities. The other part of **meshname** becomes invisible. 
2133
2134 @subsubsection occt_draw_4_330512 meshshowall
2135
2136 Syntax:                  meshshowall meshname 
2137
2138 Changes the state of all entities to visible for **meshname**. 
2139
2140 @subsubsection occt_draw_4_330513 meshdelete
2141
2142 Syntax:                  meshdelete meshname 
2143
2144 Deletes MeshVS_Mesh object **meshname**. 
2145 **Example:** 
2146
2147 vinit 
2148 meshfromstl mesh myfile.stl 
2149 meshdelete mesh 
2150
2151
2152
2153
2154 @subsection occt_draw_4_3306 AIS viewer – 2D viewer – view commands
2155
2156 @subsubsection occt_draw_4_33061 v2dinit
2157
2158 Syntax:                  v2dinit 
2159
2160 **v2dinit **creates the 2D viewer window. 
2161
2162 @subsubsection occt_draw_4_33062 v2dsetbg
2163
2164 Syntax:                  v2dsetbg imagefile [filletype] 
2165
2166 **v2dsetbg** loads **imagefile** as background. **filletype** is **NONE**, **CENTERED**, **TILED**, **STRETCH**. 
2167 **Example:** 
2168
2169 v2dinit 
2170 v2dsetbg myimage.brep CENTERED 
2171
2172 @subsubsection occt_draw_4_33063 v2dfit
2173
2174 Syntax:                  v2dfit 
2175
2176 Fits all shapes to the size of the window. 
2177
2178 @subsubsection occt_draw_4_33064 v2drepaint
2179
2180 Syntax:                  v2drepaint 
2181
2182 Forcedly repaints all shapes. 
2183
2184 @subsubsection occt_draw_4_33065 v2dclear
2185
2186 Syntax:                  v2dclear 
2187
2188 Clears the 2D viewer window 
2189
2190 @subsubsection occt_draw_4_33066 v2dtext
2191
2192 Syntax:                  v2dtext text x y [angle scale fontindex] 
2193
2194 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**. 
2195 Default values are: **angle=0.0, scale=1.0, fontindex=0**. 
2196 **Example:** 
2197
2198 v2dinit 
2199 v2dtext *My text* 10 10 
2200 @subsubsection occt_draw_4_33067 v2dsettextcolor
2201
2202 Syntax:                  v2dsettextcolor text_name colorindex 
2203
2204 Changes the color of **text_name** object (**name** must be an integer value). 
2205 **Example:** 
2206
2207 v2dinit 
2208 v2dtext *My text* 10 10 
2209 # Change color to red 
2210 v2dsettextcolor text_0 3 
2211 @subsubsection occt_draw_4_33068 v2dpick
2212
2213 Syntax:                  v2dpick 
2214
2215 Displays mouse coordinates and color after clicking the mouse button in the 2D viewer window. 
2216
2217
2218 @subsubsection occt_draw_4_33069 v2dgrid
2219
2220 Syntax:                  v2dgrid [type x y xstep ystep angle [drawmode]] 
2221      v2dgrid [type x y radiusstep division angle [drawmode]] 
2222
2223 Loads a grid in the 2D viewer window. 
2224 **type** is **Rect** or **Circ**. 
2225 **drawmode** is **Lines**, **Points** or **None**. 
2226 **Example:** 
2227
2228 v2dinit 
2229 v2dgrid Circ 0 0 250 12 0 Lines 
2230 v2drmgrid 
2231 v2dgrid Rect 0 0 200 200 0 Lines 
2232 @subsubsection occt_draw_4_330610 v2rmgrid
2233
2234 Syntax:                  v2rmgrid 
2235
2236 Unloads a grid from the window. 
2237
2238 @subsubsection occt_draw_4_330611 v2dpickgrid
2239
2240 Syntax:                  v2dpickgrid [mouse_x mouse_y [grid_x grid_y]] 
2241
2242 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. 
2243
2244 @subsubsection occt_draw_4_330612 v2dpsout
2245
2246 Syntax:                  v2dpsout imagefile [scale colorspace] 
2247                                                      [width height [xcenter ycenter]] 
2248
2249 Exports **imagefile**. You can set its the scale, width, height and colorspace. 
2250 **colorspace** can be **RGB, BlackAndWhite, GreyScale**. 
2251
2252 @subsubsection occt_draw_4_330612613 v2ddir
2253
2254 Syntax:                  v2ddir 
2255
2256 Makes aLlist of the displayed objects. 
2257
2258
2259 @subsection occt_draw_4_3306127 Ais viewer – 2D viewer – display commands
2260
2261 @subsubsection occt_draw_4_33061271 v2ddisplay
2262
2263 Syntax:                  v2ddisplay name [projection] 
2264
2265 Projection: origin_x origin_y origin_z normal_x normal_y normal_z dx_x dx_y dx_z. 
2266
2267 Displays named objects. 
2268 **Example:** 
2269
2270 v2dinit 
2271 box b 10 10 10 
2272 psphere s 20 
2273 v2ddisplay s 
2274 v2ddisplay b 
2275 v2dfit 
2276 @subsubsection occt_draw_4_33061272 v2ddonly
2277
2278 Syntax:                  v2ddonly [name1] … [name n] 
2279
2280 Displays only selected or named objects. If there are no selected or named objects, nothing is done. 
2281 **Example:** 
2282
2283 v2dinit 
2284 box b 10 10 10 
2285 psphere s 20 
2286 v2ddisplay b 
2287 v2ddisplay s 
2288 v2ddonly s 
2289 v2dfit 
2290 @subsubsection occt_draw_4_33061273 v2ddisplayall
2291
2292 Syntax:                  v2ddisplayall 
2293
2294 Displays all created objects. 
2295 **Example:** 
2296
2297 v2dinit 
2298 box b 10 10 10 
2299 psphere s 20 
2300 v2ddisplay b 
2301 v2ddisplay s 
2302 v2ddonly 
2303 v2ddisplayall 
2304 v2dfit 
2305 @subsubsection occt_draw_4_33061274 v2derase
2306
2307 Syntax:                  v2derase name1 [name2] … [name n] 
2308
2309 Erases some selected or named objects. If there are no selected or named objects, the whole viewer is erased. 
2310 **Example:** 
2311
2312 v2dinit 
2313 box b 10 10 10 
2314 psphere s 20 
2315 v2ddisplay b 
2316 v2ddisplay s 
2317 v2derase b 
2318 v2dfit 
2319 @subsubsection occt_draw_4_33061275 v2deraseall
2320
2321 Syntax:                  v2deraseall 
2322
2323 Erases all objects displayed in the viewer. 
2324 **Example:** 
2325
2326 v2dinit 
2327 box b 10 10 10 
2328 psphere s 20 
2329 v2ddisplay b 
2330 v2ddisplay s 
2331 v2deraseall 
2332 v2dfit 
2333 @subsubsection occt_draw_4_33061276 v2dsetcolor
2334
2335 Syntax:                  v2dsetcolor [shapename] colorname 
2336
2337 Sets color for all, selected or named shapes. 
2338 Values of **colorname** see **vsetcolor**. 
2339 **Example:** 
2340
2341 v2dinit 
2342 box b 10 10 10 
2343 v2ddisplay b 
2344 v2ddisplay s 
2345 v2dsetcolor b RED 
2346 v2dfit 
2347 @subsubsection occt_draw_4_33061277 v2dunsetcolor
2348
2349 Syntax:                  v2dunsetcolor [shapename] 
2350
2351 Sets default color for all, selected or named shapes. 
2352 **Example:** 
2353
2354 v2dinit 
2355 box b 10 10 10 
2356 v2ddisplay b 
2357 v2ddisplay s 
2358 v2dsetcolor RED 
2359 v2dunsetcolor b 
2360 v2dfit 
2361 @subsubsection occt_draw_4_33061278 v2dsetbgcolor
2362
2363 Syntax:                  v2dsetbgcolor colorname 
2364
2365 Sets background color. 
2366 See **vsetcolor** for the values of **colorname.**. 
2367 **Example:** 
2368
2369 v2dinit 
2370 box b 10 10 10 
2371 v2ddisplay b 
2372 v2ddisplay s 
2373 v2dsetbgcolor RED 
2374 v2dfit 
2375 @subsubsection occt_draw_4_33061279 v2dsetwidth
2376
2377 Syntax:                  v2dsetwidth [shapename] widthenum 
2378
2379 Set width of the edges for all, selected or named shapes. 
2380 **widthenum** may be one of: **THIN, MEDIUM, THICK, VERYTHICK**. 
2381 **Example:** 
2382
2383 v2dinit 
2384 box b 10 10 10 
2385 v2ddisplay b 
2386 v2ddisplay s 
2387 v2dsetwidth b THICK 
2388 v2dfit 
2389 @subsubsection occt_draw_4_330612710 v2dunsetwidth
2390
2391 Syntax:                  vunsetwidth [shapename] 
2392
2393 Sets default width of the edges for all, selected or named shapes. 
2394 **Example:** 
2395
2396 v2dinit 
2397 box b 10 10 10 
2398 v2ddisplay b 
2399 v2ddisplay s 
2400 v2dsetwidth THICK 
2401 v2dunsetwidth b 
2402 v2dfit 
2403
2404 @section occt_2142243456_930384826 OCAF commands
2405
2406
2407 This chapter contains a set of commands for Open CASCADE Technology Application Framework (OCAF). 
2408
2409
2410 @subsection occt_2142243456_9303848261 Application commands
2411
2412
2413 @subsubsection occt_2142243456_93038482611 NewDocument
2414
2415 Syntax:       NewDocument docname [format] 
2416
2417 Creates a new **docname** document with MDTV-Standard or described format. 
2418 **Example:** 
2419
2420 # Create new document with default (MDTV-Standard) format 
2421 NewDocument D 
2422
2423 # Create new document with BinOcaf format 
2424 NewDocument D2 BinOcaf 
2425
2426 @subsubsection occt_2142243456_93038482612 IsInSession
2427
2428 Syntax:       IsInSession path 
2429
2430 **I**Returns **0**, if **path** document is managed by the application session, **1** – otherwise. 
2431 **Example:** 
2432
2433 IsInSession /myPath/myFile.std 
2434
2435 @subsubsection occt_2142243456_93038482613 ListDocuments
2436
2437 Syntax:       ListDocuments 
2438
2439 Makes a list of documents handled during the session of the application. 
2440
2441
2442 @subsubsection occt_2142243456_93038482614 Open
2443
2444 Syntax:       Open path docname 
2445
2446 Retrieves the document of file **docname** in the path **path**. Overwrites the document, if it is already in session. 
2447 **Example:** 
2448
2449 Open /myPath/myFile.std D 
2450
2451 @subsubsection occt_2142243456_93038482615 Close
2452
2453 Syntax:       Close docname 
2454
2455 Closes **docname** document. The document is no longer handled by the applicative session. 
2456 **Example:** 
2457
2458 Close D 
2459
2460 @subsubsection occt_2142243456_93038482616 Save
2461
2462 Syntax:       Save docname 
2463
2464 Saves **docname** active document. 
2465 **Example:** 
2466
2467 Save D 
2468
2469 @subsubsection occt_2142243456_93038482617 SaveAs
2470
2471 Syntax:       SaveAs docname path 
2472
2473 Saves the active document in the file **docname** in the path **path**. Overwrites the file if it already exists. 
2474 **Example:** 
2475
2476 SaveAs D /myPath/myFile.std 
2477
2478 @subsection occt_2142243456_9303848262 Basic commands
2479
2480
2481 @subsubsection occt_2142243456_930384826521  Label
2482
2483 Syntax:       Label docname entry 
2484
2485 Creates the label expressed by **entry** if it does not exist. 
2486 **Example:** 
2487
2488 Label D 0:2 
2489
2490 @subsubsection occt_2142243456_930384826522  NewChild
2491
2492 Syntax:       NewChild docname [taggerlabel = Root label] 
2493
2494 Finds (or creates) a TagSource attribute located at father label of **taggerlabel** and makes a new child label. 
2495 **Example:** 
2496
2497 # Create new child of root label 
2498 NewChild D 
2499
2500 # Create new child of existing label 
2501 Label D 0:2 
2502 NewChild D 0:2 
2503
2504 @subsubsection occt_2142243456_930384826523  Children
2505
2506 Syntax:       Children docname label 
2507
2508 Returns the list of attributes of **label**. 
2509 **Example:** 
2510
2511 Children D 0:2 
2512
2513 @subsubsection occt_2142243456_930384826524  ForgetAll
2514
2515 Syntax:       ForgetAll docname label 
2516
2517 Forgets all attributes of the label. 
2518 **Example:** 
2519
2520 ForgetAll D 0:2 
2521
2522 @subsection occt_2142243456_93038482653  Application commands
2523
2524
2525 @subsubsection occt_2142243456_930384826531  Main
2526
2527 Syntax:       Main docname 
2528
2529 Returns the main label of the framework. 
2530 **Example:** 
2531
2532 Main D 
2533
2534 @subsubsection occt_2142243456_930384826532  UndoLimit
2535
2536 Syntax:       UndoLimit docname [value=0] 
2537
2538
2539 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 
2540 **Example:** 
2541
2542 UndoLimit D 100 
2543
2544 @subsubsection occt_2142243456_930384826533  Undo
2545
2546 Syntax:       Undo docname [value=1] 
2547
2548 Undoes **value** steps. 
2549 **Example:** 
2550
2551 Undo D 
2552
2553 @subsubsection occt_2142243456_930384826534  Redo
2554
2555 Syntax:       Redo docname [value=1] 
2556
2557 Redoes **value** steps. 
2558 **Example:** 
2559
2560 Redo D 
2561
2562 @subsubsection occt_2142243456_930384826535  OpenCommand
2563
2564 Syntax:       OpenCommand docname 
2565
2566 Opens a new command transaction. 
2567 **Example:** 
2568
2569 OpenCommand D 
2570
2571 @subsubsection occt_2142243456_930384826536  CommitCommand
2572
2573 Syntax:       CommitCommand docname 
2574
2575 Commits the Command transaction. 
2576 **Example:** 
2577
2578 CommitCommand D 
2579
2580 @subsubsection occt_2142243456_930384826537  NewCommand
2581
2582 Syntax:       NewCommand docname 
2583
2584 This is a short-cut for Commit and Open transaction. 
2585 **Example:** 
2586
2587 NewCommand D 
2588
2589 @subsubsection occt_2142243456_930384826538  AbortCommand
2590
2591 Syntax:       AbortCommand docname 
2592
2593 Aborts the Command transaction. 
2594 **Example:** 
2595
2596 AbortCommand D 
2597
2598 @subsubsection occt_2142243456_930384826539  Copy
2599
2600 Syntax:       Copy docname entry Xdocname Xentry 
2601
2602 Copies the contents of **entry** to **Xentry**. No links are registred. 
2603 **Example:** 
2604
2605 Copy D1 0:2 D2 0:4 
2606
2607 @subsubsection occt_2142243456_9303848265310  UpdateLink
2608
2609 Syntax:       UpdateLink docname [entry] 
2610
2611 Updates external reference set at **entry**. 
2612 **Example:** 
2613
2614 UpdateLink D 
2615
2616 @subsubsection occt_2142243456_9303848265311  CopyWithLink
2617
2618 Syntax:       CopyWithLink docname entry Xdocname Xentry 
2619
2620 Aborts the Command transaction. 
2621 Copies the content of **entry** to **Xentry**. The link is registred with an Xlink attribute at ** Xentry**  label. 
2622 **Example:** 
2623
2624 CopyWithLink D1 0:2 D2 0:4 
2625
2626 @subsubsection occt_2142243456_9303848265312  UpdateXLinks
2627
2628 Syntax:       UpdateXLinks docname entry 
2629
2630 Sets modifications on labels impacted by external references to the **entry**. The **document** becomes invalid and must be recomputed 
2631 **Example:** 
2632
2633 UpdateXLinks D 0:2 
2634
2635 @subsubsection occt_2142243456_9303848265313  DumpDocument
2636
2637 Syntax:       DumpDocument docname 
2638
2639 Displays parameters of **docname** document. 
2640 **Example:** 
2641
2642 DumpDocument D 
2643
2644 @subsection occt_2142243456_93038482654  Data Framework commands
2645
2646
2647 @subsubsection occt_2142243456_930384826541  MakeDF
2648
2649 Syntax:       MakeDF dfname 
2650
2651 Creates a new data framework. 
2652 **Example:** 
2653
2654 MakeDF D 
2655
2656 @subsubsection occt_2142243456_930384826542  ClearDF
2657
2658 Syntax:       ClearDF dfname 
2659
2660 Clears a data framework. 
2661 **Example:** 
2662
2663 ClearDF D 
2664
2665 @subsubsection occt_2142243456_930384826543  CopyDF
2666
2667 Syntax:       CopyDF dfname1 entry1 [dfname2] entry2 
2668
2669 Copies a data framework. 
2670 **Example:** 
2671
2672 CopyDF D 0:2 0:4 
2673
2674 @subsubsection occt_2142243456_930384826544  CopyLabel
2675
2676 Syntax:       CopyLabel dfname fromlabel tolablel 
2677
2678 Copies a label. 
2679 **Example:** 
2680
2681 CopyLabel D1 0:2 0:4 
2682
2683 @subsubsection occt_2142243456_930384826545  MiniDumpDF
2684
2685 Syntax:       MiniDumpDF dfname 
2686
2687 Makes a mini-dump of a data framework. 
2688 **Example:** 
2689
2690 MiniDumpDF D 
2691
2692 @subsubsection occt_2142243456_930384826546  XDumpDF
2693
2694 Syntax:       XDumpDF dfname 
2695
2696 Makes an extended dump of a data framework. 
2697 **Example:** 
2698
2699 XDumpDF D 
2700
2701 @subsection occt_2142243456_93038482655  General attributes commands
2702
2703
2704 @subsubsection occt_2142243456_930384826551  SetInteger
2705
2706 Syntax:       SetInteger dfname entry value 
2707
2708 Finds or creates an Integer attribute at **entry** label and sets **value**. 
2709 **Example:** 
2710
2711 SetInteger D 0:2 100 
2712
2713 @subsubsection occt_2142243456_930384826552  GetInteger
2714
2715 Syntax:       GetInteger dfname entry [drawname] 
2716
2717 Gets a value of an Integer attribute at **entry** label and sets it to **drawname** variable, if it is defined. 
2718 **Example:** 
2719
2720 GetInteger D 0:2 Int1 
2721
2722 @subsubsection occt_2142243456_930384826553  SetReal
2723
2724 Syntax:       SetReal dfname entry value 
2725
2726 Finds or creates a Real attribute at **entry** label and sets **value**. 
2727 **Example:** 
2728
2729 SetReal D 0:2 100. 
2730
2731 @subsubsection occt_2142243456_930384826554  GetReal
2732
2733 Syntax:       GetReal dfname entry [drawname] 
2734
2735 Gets a value of a Real attribute at **entry** label and sets it to **drawname** variable, if it is defined. 
2736 **Example:** 
2737
2738 GetReal D 0:2 Real1 
2739
2740 @subsubsection occt_2142243456_930384826555  SetIntArray
2741
2742 Syntax:       SetIntArray dfname entry lower upper value1 value2 … 
2743
2744 Finds or creates an IntegerArray attribute at **entry** label with lower and upper bounds and sets **value1, **.** value2…** 
2745 **Example:** 
2746
2747 SetIntArray D 0:2 1 4 100 200 300 400 
2748
2749 @subsubsection occt_2142243456_930384826556  GetIntArray
2750
2751 Syntax:       GetIntArray dfname entry 
2752
2753 Gets a value of an IntegerArray attribute at **entry** label. 
2754 **Example:** 
2755
2756 GetIntArray D 0:2 
2757
2758 @subsubsection occt_2142243456_930384826557  SetRealArray
2759
2760 Syntax:       SetRealArray dfname entry lower upper value1 value2 … 
2761
2762 Finds or creates a RealArray attribute at **entry** label with lower and upper bounds and sets **value1, **.** value2…** 
2763 **Example:** 
2764
2765 GetRealArray D 0:2 1 4 100. 200. 300. 400. 
2766
2767 @subsubsection occt_2142243456_930384826558  GetRealArray
2768
2769 Syntax:       GetRealArray dfname entry 
2770
2771 Gets a value of a RealArray attribute at **entry** label. 
2772 **Example:** 
2773
2774 GetRealArray D 0:2 
2775
2776 @subsubsection occt_2142243456_930384826559  SetComment
2777
2778 Syntax:       SetComment dfname entry value 
2779
2780 Finds or creates a Comment attribute at **entry** label and sets **value**. 
2781 **Example:** 
2782
2783 SetComment D 0:2 *My comment* 
2784
2785 @subsubsection occt_2142243456_9303848265510  GetComment
2786
2787 Syntax:       GetComment dfname entry 
2788
2789 Gets a value of a Comment attribute at **entry** label. 
2790 **Example:** 
2791
2792 GetComment D 0:2 
2793
2794 @subsubsection occt_2142243456_9303848265511  SetExtStringArray
2795
2796 Syntax:       SetExtStringArray dfname entry lower upper value1 value2 … 
2797
2798 Finds or creates an ExtStringArray attribute at **entry** label with lower and upper bounds and sets **value1, **.** value2…** 
2799 **Example:** 
2800
2801 SetExtStringArray D 0:2 1 3 *string1* *string2* *string3* 
2802
2803 @subsubsection occt_2142243456_9303848265512  GetExtStringArray
2804
2805 Syntax:       GetExtStringArray dfname entry 
2806
2807 Gets a value of an ExtStringArray attribute at **entry** label. 
2808 **Example:** 
2809
2810 GetExtStringArray D 0:2 
2811
2812 @subsubsection occt_2142243456_9303848265513  SetName
2813
2814 Syntax:       SetName dfname entry value 
2815
2816 Finds or creates a Name attribute at **entry** label and set **value**. 
2817 **Example:** 
2818
2819 SetName D 0:2 *My name* 
2820
2821 @subsubsection occt_2142243456_9303848265514  GetName
2822
2823 Syntax:       GetName dfname entry 
2824
2825 Gets a value of a Name attribute at **entry** label. 
2826 **Example:** 
2827
2828 GetName D 0:2 
2829
2830 @subsubsection occt_2142243456_9303848265515  SetReference
2831
2832 Syntax:       SetReference dfname entry reference 
2833
2834 Creates a Reference attribute at **entry** label and sets **reference**. 
2835 **Example:** 
2836
2837 SetReference D 0:2 0:4 
2838
2839 @subsubsection occt_2142243456_9303848265516  GetReference
2840
2841 Syntax:       GetReference dfname entry 
2842
2843 Gets a value of a Reference attribute at **entry** label. 
2844 **Example:** 
2845
2846 GetReference D 0:2 
2847
2848 @subsubsection occt_2142243456_9303848265517  SetUAttribute
2849
2850 Syntax:       SetUAttribute dfname entry localGUID 
2851
2852 Creates a UAttribute attribute at **entry** label with **localGUID**. 
2853 **Example:** 
2854
2855 set localGUID *c73bd076-22ee-11d2-acde-080009dc4422* 
2856 SetUAttribute D 0:2 ${localGUID} 
2857
2858 @subsubsection occt_2142243456_9303848265518  GetUAttribute
2859
2860 Syntax:       GetUAttribute dfname entry loacalGUID 
2861
2862 Finds a UAttribute at **entry** label with **localGUID**. 
2863 **Example:** 
2864
2865 set localGUID *c73bd076-22ee-11d2-acde-080009dc4422* 
2866 GetUAttribute D 0:2 ${localGUID} 
2867
2868 @subsubsection occt_2142243456_9303848265519  SetFunction
2869
2870 Syntax:       SetFunction dfname entry ID failure 
2871
2872 Finds or creates a Function attribute at **entry** label with driver ID and **failure** index. 
2873 **Example:** 
2874
2875 set ID *c73bd076-22ee-11d2-acde-080009dc4422* 
2876 SetFunction D 0:2 ${ID} 1 
2877
2878 @subsubsection occt_2142243456_9303848265520  GetFunction
2879
2880 Syntax:       GetFunction dfname entry ID failure 
2881
2882 Finds a Function attribute at **entry** label and sets driver ID to **ID** variable and failure index to **failure** variable. 
2883 **Example:** 
2884
2885 GetFunction D 0:2 ID failure 
2886
2887 @subsubsection occt_2142243456_9303848265521  NewShape
2888
2889 Syntax:       NewShape dfname entry [shape] 
2890
2891
2892 Finds or creates a Shape attribute at **entry** label. Creates or updates the associated NamedShape attribute by **shape** if **shape** is defined. 
2893 **Example:** 
2894
2895 box b 10 10 10 
2896 NewShape D 0:2 b 
2897
2898 @subsubsection occt_2142243456_9303848265522  SetShape
2899
2900 Syntax:       SetShape dfname entry shape 
2901
2902 Creates or updates a NamedShape attribute at **entry** label by **shape**. 
2903 **Example:** 
2904
2905 box b 10 10 10 
2906 SetShape D 0:2 b 
2907
2908 @subsubsection occt_2142243456_9303848265523  GetShape
2909
2910 Syntax:       GetShape2 dfname entry shape 
2911
2912 Sets a shape from NamedShape attribute associated with **entry** label to **shape** draw variable. 
2913 **Example:** 
2914
2915 GetShape2 D 0:2 b 
2916
2917 @subsection occt_2142243456_93038482656  Geometric attributes commands
2918
2919
2920 @subsubsection occt_2142243456_930384826561  SetPoint
2921
2922 Syntax:       SetPoint dfname entry point 
2923
2924 Finds or creates a Point attribute at **entry** label and sets **point** as generated in the associated NamedShape attribute. 
2925 **Example:** 
2926
2927 point p 10 10 10 
2928 SetPoint D 0:2 p 
2929
2930 @subsubsection occt_2142243456_930384826562  GetPoint
2931
2932 Syntax:       GetPoint dfname entry [drawname] 
2933
2934 Gets a vertex from NamedShape attribute at **entry** label and sets it to **drawname** variable, if it is defined. 
2935 **Example:** 
2936
2937 GetPoint D 0:2 p 
2938
2939 @subsubsection occt_2142243456_930384826563  SetAxis
2940
2941 Syntax:       SetAxis dfname entry axis 
2942
2943 Finds or creates an Axis attribute at **entry** label and sets **axis** as generated in the associated NamedShape attribute. 
2944 **Example:** 
2945
2946 line l 10 20 30 100 200 300 
2947 SetAxis D 0:2 l 
2948
2949 @subsubsection occt_2142243456_930384826564  GetAxis
2950
2951 Syntax:       GetAxis dfname entry [drawname] 
2952
2953 Gets a line from NamedShape attribute at **entry** label and sets it to **drawname** variable, if it is defined. 
2954 **Example:** 
2955
2956 GetAxis D 0:2 l 
2957
2958 @subsubsection occt_2142243456_930384826565  SetPlane
2959
2960 Syntax:       SetPlane dfname entry plane 
2961
2962 Finds or creates a Plane attribute at **entry** label and sets **plane** as generated in the associated NamedShape attribute. 
2963 **Example:** 
2964
2965 plane pl 10 20 30 –1 0 0 
2966 SetPlane D 0:2 pl 
2967
2968 @subsubsection occt_2142243456_930384826566  GetPlane
2969
2970 Syntax:       GetPlane dfname entry [drawname] 
2971
2972 Gets a plane from NamedShape attribute at **entry** label and sets it to **drawname** variable, if it is defined. 
2973 **Example:** 
2974
2975 GetPlane D 0:2 pl 
2976
2977 @subsubsection occt_2142243456_930384826567  SetGeometry
2978
2979 Syntax:       SetGeometry dfname entry [type] [shape] 
2980
2981
2982 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**. 
2983 **Example:** 
2984
2985 point p 10 10 10 
2986 SetGeometry D 0:2 pnt p 
2987
2988 @subsubsection occt_2142243456_930384826568  GetGeometryType
2989
2990 Syntax:       GetGeometryType dfname entry 
2991
2992 Gets a geometry type from Geometry attribute at **entry** label. 
2993 **Example:** 
2994
2995 GetGeometryType D 0:2 
2996
2997 @subsubsection occt_2142243456_930384826569  SetConstraint
2998
2999 Syntax:       SetConstraint dfname entry keyword geometrie [geometrie …] 
3000             SetConstraint dfname entry *plane* geometrie 
3001             SetConstraint dfname entry *value* value  
3002
3003 1. Creates a Constraint attribute at **entry** label and sets **keyword** constraint between geometry(ies). 
3004 **keyword** must be one of the following: 
3005 **rad/dia/minr/majr/tan/par/perp/concentric/equal/dist/angle/eqrad/symm/midp/ eqdist/fix/rigid** 
3006 or 
3007 **from/axis/mate/alignf/aligna/axesa/facesa/round/offset** 
3008
3009 2. Sets plane for the existing constraint. 
3010
3011 3. Sets value for the existing constraint. 
3012 **Example:** 
3013
3014 SetConstraint D 0:2 *value* 5 
3015
3016 @subsubsection occt_2142243456_9303848265610  GetConstraint
3017
3018 Syntax:       GetConstraint dfname entry 
3019
3020 Dumps a Constraint attribute at **entry** label 
3021 **Example:** 
3022
3023 GetConstraint D 0:2 
3024
3025 @subsubsection occt_2142243456_9303848265611  SetVariable
3026
3027 Syntax:       SetVariable dfname entry isconstant(0/1) units 
3028
3029 Creates a Variable attribute at **entry** label and sets **isconstant** flag and **units** as a string. 
3030 **Example:** 
3031
3032 SetVariable D 0:2 1 *mm* 
3033
3034 @subsubsection occt_2142243456_9303848265612  GetVariable
3035
3036 Syntax:       GetVariable dfname entry isconstant units 
3037
3038 Gets an **isconstant** flag and **units** of a Variable attribute at **entry** label. 
3039 **Example:** 
3040
3041 GetVariable D 0:2 isconstant units 
3042 puts *IsConstant=${isconstant}* 
3043 puts *Units=${units}* 
3044
3045
3046 @subsection occt_2142243456_93038482657  Tree attributes commands
3047
3048
3049 @subsubsection occt_2142243456_930384826571  RootNode
3050
3051 Syntax:       RootNode dfname treenodeentry [ID] 
3052
3053 Returns ultimate father of TreeNode attribute identified by its **treenodeentry** and its **ID** (or default ID, if **ID** is not defined). 
3054
3055
3056 @subsubsection occt_2142243456_930384826572  SetNode
3057
3058 Syntax:       SetNode dfname treenodeentry [ID] 
3059
3060 Creates a TreeNode attribute on the **treenodeentry** label with its tree **ID** (or assigns a default ID, if the **ID** is not defined). 
3061
3062
3063 @subsubsection occt_2142243456_930384826573  AppendNode
3064
3065 Syntax:       AppendNode dfname fatherentry childentry [fatherID] 
3066
3067
3068 Inserts a TreeNode attribute with its tree **fatherID** (or default ID, if **fatherID** is not defined) on **childentry** as last child of **fatherentry**. 
3069
3070
3071
3072
3073 @subsubsection occt_2142243456_930384826574  PrependNode
3074
3075 Syntax:       PrependNode dfname fatherentry childentry [fatherID] 
3076
3077
3078 Inserts a TreeNode attribute with its tree **fatherID** (or default ID, if **fatherID** is not defined) on **childentry** as first child of **fatherentry**. 
3079
3080
3081 @subsubsection occt_2142243456_930384826575  InsertNodeBefore
3082
3083 Syntax:       InsertNodeBefore dfname treenodeentry beforetreenode [ID] 
3084
3085 Inserts a TreeNode attribute with tree **ID** (or default ID, if **ID** is not defined) **beforetreenode** before **treenodeentry**. 
3086
3087
3088 @subsubsection occt_2142243456_930384826576  InsertNodeAfter
3089
3090 Syntax:       InsertNodeAfter dfname treenodeentry aftertreenode [ID] 
3091
3092 Inserts a TreeNode attribute with tree **ID** (or default ID, if **ID** is not defined) **aftertreenode** after **treenodeentry**. 
3093
3094
3095 @subsubsection occt_2142243456_930384826577  DetachNode
3096
3097 Syntax:       DetachNode dfname treenodeentry [ID] 
3098
3099 Removes a TreeNode attribute with tree **ID** (or default ID, if **ID** is not defined) from **treenodeentry**. 
3100
3101
3102 @subsubsection occt_2142243456_930384826578  ChildNodeIterate
3103
3104 Syntax:       ChildNodeIterate dfname treenodeentry alllevels(0/1) [ID] 
3105
3106
3107 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. 
3108 **Example:** 
3109
3110 Label D 0:2 
3111 Label D 0:3 
3112 Label D 0:4 
3113 Label D 0:5 
3114 Label D 0:6 
3115 Label D 0:7 
3116 Label D 0:8 
3117 Label D 0:9 
3118
3119 # Set root node 
3120 SetNode D 0:2 
3121
3122 AppendNode D 0:2 0:4 
3123 AppendNode D 0:2 0:5 
3124 PrependNode D 0:4 0:3 
3125 PrependNode D 0:4 0:8 
3126 PrependNode D 0:4 0:9 
3127
3128 InsertNodeBefore D 0:5 0:6 
3129 InsertNodeAfter D 0:4 0:7 
3130
3131 DetachNode D 0:8 
3132
3133
3134 # List all levels 
3135 ChildNodeIterate D 0:2 1 
3136
3137 ==0:4 
3138 ==0:9 
3139 ==0:3 
3140 ==0:7 
3141 ==0:6 
3142 ==0:5 
3143
3144
3145 # List only first levels 
3146 ChildNodeIterate D 0:2 1 
3147
3148 ==0:4 
3149 ==0:7 
3150 ==0:6 
3151 ==0:5 
3152
3153 @subsubsection occt_2142243456_930384826579  InitChildNodeIterator
3154
3155 Syntax:       InitChildNodeIterator dfname treenodeentry alllevels(0/1) [ID] 
3156
3157
3158 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. 
3159 **Example:** 
3160
3161 InitChildNodeIterate D 0:5 1 
3162 set aChildNumber 0 
3163 for {set i 1} {$i  100} {incr i} { 
3164     if {[ChildNodeMore] == *TRUE*} { 
3165         puts *Tree node = [ChildNodeValue]* 
3166         incr aChildNumber 
3167         ChildNodeNext 
3168     } 
3169
3170 puts *aChildNumber=$aChildNumber* 
3171
3172 @subsubsection occt_2142243456_9303848265710  ChildNodeMore
3173
3174 Syntax:       ChildNodeMore 
3175
3176 Returns TRUE if there is a current item in the iteration. 
3177
3178
3179 @subsubsection occt_2142243456_9303848265711  ChildNodeNext
3180
3181 Syntax:       ChildNodeNext 
3182
3183 Moves to the next Item. 
3184
3185
3186 @subsubsection occt_2142243456_9303848265712  ChildNodeValue
3187
3188 Syntax:       ChildNodeValue 
3189
3190 Returns the current treenode of ChildNodeIterator. 
3191
3192
3193 @subsubsection occt_2142243456_9303848265713  ChildNodeNextBrother
3194
3195 Syntax:       ChildNodeNextBrother 
3196
3197 Moves to the next Brother. If there is none, goes up. This method is interesting only with ;allLevels; behavior. 
3198
3199
3200 @subsection occt_2142243456_93038482658  Standard presentation commands
3201
3202
3203 @subsubsection occt_2142243456_930384826581  AISInitViewer
3204
3205 Syntax:       AISInitViewer docname 
3206
3207 Creates and sets AISViewer attribute at root label, creates AIS viewer window. 
3208 **Example:** 
3209
3210 AISInitViewer D 
3211
3212 @subsubsection occt_2142243456_930384826582  AISRepaint
3213
3214 Syntax:       AISRepaint docname 
3215
3216 Updates the AIS viewer window. 
3217 **Example:** 
3218
3219 AISRepaint D 
3220
3221 @subsubsection occt_2142243456_930384826583  AISDisplay
3222
3223 Syntax:       AISDisplay docname entry [not_update] 
3224
3225
3226 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. 
3227 **Example:** 
3228
3229 AISDisplay D 0:5 
3230
3231 @subsubsection occt_2142243456_930384826584  AISUpdate
3232
3233 Syntax:       AISUpdate docname entry 
3234
3235 Recomputes a presantation of AISobject from **entry** label and applies the visualization setting in AIS viewer. 
3236 **Example:** 
3237
3238 AISUpdate D 0:5 
3239
3240 @subsubsection occt_2142243456_930384826585  AISErase
3241
3242 Syntax:       AISErase docname entry 
3243
3244 Erases AISobject of **entry** label in AIS viewer. 
3245 **Example:** 
3246
3247 AISErase D 0:5 
3248
3249 @subsubsection occt_2142243456_930384826586  AISRemove
3250
3251 Syntax:       AISRemove docname entry 
3252
3253 Erases AISobject of **entry** label in AIS viewer, then AISobject is removed from AIS_InteractiveContext. 
3254 **Example:** 
3255
3256 AISRemove D 0:5 
3257
3258 @subsubsection occt_2142243456_930384826587  AISSet
3259
3260 Syntax:       AISSet docname entry ID 
3261
3262
3263 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). 
3264 **Example:** 
3265
3266 AISSet D 0:5 NS 
3267
3268 @subsubsection occt_2142243456_930384826588  AISDriver
3269
3270 Syntax:       AISDriver docname entry [ID] 
3271
3272
3273 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). 
3274 **Example:** 
3275
3276 # Get Driver GUID 
3277 AISDriver D 0:5 
3278
3279 @subsubsection occt_2142243456_930384826589  AISUnset
3280
3281 Syntax:       AISUnset docname entry 
3282
3283 Deletes AISPresentation attribute (if it exists) of an **entry** label. 
3284 **Example:** 
3285
3286 AISUnset D 0:5 
3287
3288 @subsubsection occt_2142243456_9303848265810  AISTransparency
3289
3290 Syntax:       AISTransparency docname entry [transparency] 
3291
3292 Sets (if **transparency** is defined) or gets the value of transparency for AISPresentation attribute of an **entry** label. 
3293 **Example:** 
3294
3295 AISTransparency D 0:5 0.5 
3296
3297 @subsubsection occt_2142243456_9303848265811  AISHasOwnTransparency
3298
3299 Syntax:       AISHasOwnTransparency docname entry 
3300
3301 Tests AISPresentation attribute of an **entry** label by own transparency. 
3302 **Example:** 
3303
3304 AISHasOwnTransparency D 0:5 
3305
3306 @subsubsection occt_2142243456_9303848265812  AISMaterial
3307
3308 Syntax:       AISMaterial docname entry [material] 
3309
3310
3311 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**). 
3312 **Example:** 
3313
3314 AISMaterial D 0:5 5 
3315
3316 @subsubsection occt_2142243456_9303848265813  AISHasOwnMaterial
3317
3318 Syntax:       AISHasOwnMaterial docname entry 
3319
3320 Tests AISPresentation attribute of an **entry** label by own material. 
3321 **Example:** 
3322
3323 AISHasOwnMaterial D 0:5 
3324
3325 @subsubsection occt_2142243456_9303848265814  AISColor
3326
3327 Syntax:       AISColor docname entry [color] 
3328
3329 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**). 
3330 **Example:** 
3331
3332 AISColor D 0:5 25 
3333
3334 @subsubsection occt_2142243456_9303848265815  AISHasOwnColor
3335
3336 Syntax:       AISHasOwnColor docname entry 
3337
3338 Tests AISPresentation attribute of an **entry** label by own color. 
3339 **Example:** 
3340
3341 AISHasOwnColor D 0:5 
3342
3343
3344 @section occt_2142243456_1101404852 Geometry commands
3345
3346 @subsection occt_2142243456_110140485261 Overview
3347
3348 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. 
3349
3350 In the context of Geometry, Draw includes the following types of variable: 
3351
3352   * 2d and 3d points
3353   * The 2d curve, which corresponds to *Curve *in *Geom2d*.
3354   * The 3d curve and surface, which correspond to *Curve *and *Surface *in *Geom *<a href="#_ftn2">[2]</a>.
3355   
3356 Draw geometric variables never share data; the **copy **command will always make a complete copy of the content of the variable. 
3357
3358 The following topics are covered in the nine sections of this chapter: 
3359
3360   * **Curve creation** deals with the various types of curves and how to create them.
3361   * **Surface creation** deals with the different types of surfaces and how to create them.
3362   * **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.
3363   * **Geometric transformations** covers translation, rotation, mirror image and point scaling transformations.
3364   * **Curve and Surface Analysis** deals with the commands used to compute points, derivatives and curvatures.
3365   * **Intersections** presents intersections of surfaces and curves.
3366   * **Approximations** deals with creating curves and surfaces from a set of points.
3367   * **Constraints** concerns construction of 2d circles and lines by constraints such as tangency.
3368   * **Display** describes commands to control the display of curves and surfaces.
3369
3370 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. 
3371
3372 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. 
3373
3374 @subsection occt_2142243456_110140485262  Curve creation
3375
3376 This section deals with both points and curves. Types of curves are: 
3377
3378   * Analytical curves such as lines, circles, ellipses, parabolas, and hyperbolas.
3379   * Polar curves such as bezier curves and bspline curves.
3380   * 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.
3381   * NURBS can be created from other curves using **convert **in the *Surface Creation *section.
3382   * Curves can be created from the isoparametric lines of surfaces by the **uiso **and **viso **commands.
3383   * 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.
3384
3385 Curves are displayed with an arrow showing the last parameter. 
3386
3387
3388 @subsubsection occt_2142243456_1101404852621 point
3389
3390   @verbatim
3391     Syntax:      point name x y [z] 
3392   @endverbatim
3393   
3394 **point** creates a 2d or 3d point, depending on the number of arguments. **Example:**
3395
3396   @verbatim
3397     # 2d point 
3398     point p1 1 2 
3399
3400     # 3d point 
3401     point p2 10 20 -5 
3402   @endverbatim
3403   
3404 @subsubsection occt_2142243456_1101404852622  line
3405
3406   @verbatim
3407     Syntax:      line name x y [z] dx dy [dz] 
3408   @endverbatim
3409   
3410 **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. 
3411
3412 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:** 
3413
3414   @verbatim
3415     # a 2d line at 45 degrees of the X axis 
3416     line l 2 0 1 1 
3417
3418     # a 3d line through the point 10 0 0 and parallel to Z 
3419     line l 10 0 0 0 0 1 
3420   @endverbatim
3421
3422 @subsubsection occt_2142243456_1101404852623  circle
3423
3424 Syntax:      circle name x y [z [dx dy dz]] [ux uy [uz]] radius 
3425
3426 **circle **creates a 2d or a 3d circle. 
3427
3428 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. 
3429
3430 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. 
3431
3432 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. 
3433
3434 **Example:** 
3435
3436 # A 2d circle of radius 5 centered at 10,-2 
3437 circle c1 10 -2 5 
3438
3439 # another 2d circle with a user defined origin 
3440 # the point of parameter 0 on this circle will be 
3441 # 1+sqrt(2),1+sqrt(2) 
3442 circle c2 1 1 1 1 2 
3443
3444 # a 3d circle, center 10 20 -5, axis Z, radius 17 
3445 circle c3 10 20 -5 17 
3446
3447 # same 3d circle with axis Y 
3448 circle c4 10 20 -5 0 1 0 17 
3449
3450 # full 3d circle, axis X, origin on Z 
3451 circle c5 10 20 -5 1 0 0 0 0 1 17 
3452
3453
3454 @subsubsection occt_2142243456_1101404852624  ellipse
3455
3456 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: 
3457
3458 P(u) = O + firstradius*cos(u)*Xdir + secondradius*sin(u)*Ydir 
3459
3460 where: 
3461
3462   * P is the point of parameter u,
3463   * O, Xdir and Ydir are respectively the origin, *X Direction* and *Y Direction* of its local coordinate system.
3464 **Example:**
3465
3466 # default 2d ellipse 
3467 ellipse e1 10 5 20 10 
3468
3469 # 2d ellipse at angle 60 degree 
3470 ellipse e2 0 0 1 2 30 5 
3471
3472 # 3d ellipse, in the XY plane 
3473 ellipse e3 0 0 0 25 5 
3474
3475 # 3d ellipse in the X,Z plane with axis 1, 0 ,1 
3476 ellipse e4 0 0 0 0 1 0 1 0 1 25 5 
3477
3478 See also: **circle** 
3479 @subsubsection occt_2142243456_1101404852625  hyperbola
3480
3481 Syntax:      hyperbola name x y [z [dx dy dz]] [ux uy [uz]] firstradius secondradius 
3482
3483 **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. 
3484
3485 The Draw hyperbola is parameterized as follows: 
3486
3487 P(U) = O + firstradius*Cosh(U)*XDir + secondradius*Sinh(U)*YDir 
3488
3489 where: 
3490
3491   * P is the point of parameter U,
3492   * O, XDir and YDir are respectively the origin, *X Direction* and *Y
3493
3494 Direction* of its local coordinate system. 
3495 **Example:** 
3496
3497 # default 2d hyperbola, with asymptotes 1,1 -1,1 
3498 hyperbola h1 0 0 30 30 
3499
3500 # 2d hyperbola at angle 60 degrees 
3501 hyperbola h2 0 0 1 2 20 20 
3502
3503 # 3d hyperbola, in the XY plane 
3504 hyperbola h3 0 0 0 50 50 
3505
3506 See also: **circle** 
3507
3508
3509 @subsubsection occt_2142243456_1101404852626  parabola
3510
3511 Syntax:      parabola name x y [z [dx dy dz]] [ux uy [uz]] FocalLength 
3512
3513 **parabola **creates a 2d or 3d parabola. in the axis system defined by the first arguments.The origin is the apex of the parabola. 
3514
3515 The Geom_Parabola parabola is parameterized as follows: 
3516
3517 P(u) = O + u*u/(4.*F)*XDir + u*YDir 
3518
3519 where: 
3520   * P is the point of parameter u,
3521   * O, XDir and YDir are respectively the origin, *X Direction* and *Y Direction* of its local coordinate system,
3522   * F is the focal length of the parabola.
3523 **Example:** 
3524
3525 # 2d parabola 
3526 parabola p1 0 0 50 
3527
3528 # 2d parabola with convexity +Y 
3529 parabola p2 0 0 0 1 50 
3530
3531 # 3d parabola in the Y-Z plane, convexity +Z 
3532 parabola p3 0 0 0 1 0 0 0 0 1 50 
3533
3534 See also: **circle** 
3535
3536
3537 @subsubsection occt_2142243456_1101404852627  beziercurve, dbeziercurve
3538
3539 Syntax:      beziercurve name nbpole pole, [weight] 
3540 2dbeziercurve name nbpole pole, [weight] 
3541
3542 **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. 
3543 **Example:** 
3544
3545 # a rational 2d bezier curve (arc of circle) 
3546 2dbeziercurve ci 3 0 0 1 10 0 sqrt(2.)/2. 10 10 1 
3547
3548 # a 3d bezier curve, not rational 
3549 beziercurve cc 4 0 0 0 10 0 0 10 0 10 10 10 10 
3550
3551
3552 @subsubsection occt_2142243456_1101404852628  bsplinecurve, dbsplinecurve, pbsplinecurve, dpbsplinecurve
3553
3554 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) 
3555 2dpbsplinecurve name degree nbknots knot, umult pole, weight (periodic) 
3556
3557 **bsplinecurve **creates 2d or 3d bspline curves; the **pbsplinecurve **and **2dpbsplinecurve **commands create periodic bspline curves. 
3558
3559 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. 
3560
3561 The table of knots is an increasing sequence of reals without repetition. 
3562 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. 
3563
3564 The poles must be given with their weights, use weights of 1 for a non rational curve, the number of poles must be: 
3565
3566   * For a non periodic curve: Sum of multiplicities - degree + 1
3567   * For a periodic curve: Sum of multiplicities - last multiplicity
3568 **Example:** 
3569
3570 # a bspline curve with 4 poles and 3 knots 
3571 bsplinecurve bc 2 3 0 3 1 1 2 3 \ 
3572 10 0 7 1 7 0 7 1 3 0 8 1 0 0 7 1 
3573 # a 2d periodic circle (parameter from 0 to 2*pi !!) 
3574 dset h sqrt(3)/2 
3575 2dpbsplinecurve c 2 \ 
3576 4 0 2 pi/1.5 2 pi/0.75 2 2*pi 2 \ 
3577 0 -h/3 1 \ 
3578 0.5 -h/3 0.5 \ 
3579 0.25 h/6 1 \ 
3580 0 2*h/3 0.5 \ 
3581 -0.25 h/6 1 \ 
3582 -0.5 -h/3 0.5 \ 
3583 0 -h/3 1 
3584
3585 <h4>NOTE</h4>
3586 *You can create the **NURBS **subset of bspline curves and* 
3587 *surfaces by trimming analytical curves and surfaces and* 
3588 *executing the command *convert*; see below.* 
3589
3590
3591 @subsubsection occt_2142243456_1101404852629  uiso, viso
3592
3593 Syntax:      uiso name surface u 
3594 viso name surface u 
3595
3596 Use these commands to create a U or V isoparametric curve from a surface. 
3597 **Example:** 
3598
3599 # create a cylinder and extract iso curves 
3600
3601 cylinder c 10 
3602 uiso c1 c pi/6 
3603 viso c2 c 
3604
3605 *NOTE* 
3606 *Cannot be done from offset surfaces.* 
3607
3608
3609 @subsubsection occt_2142243456_11014048526210  tod, tod
3610
3611 Syntax:      to3d name curve2d [plane] 
3612 to2d name curve3d [plane] 
3613
3614 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. 
3615 **Example:** 
3616
3617 # the following commands 
3618 circle c 0 0 5 
3619 plane p -2 1 0 1 2 3 
3620 to3d c c p 
3621
3622 # will create the same circle as 
3623 circle c -2 1 0 1 2 3 5 
3624
3625 See also: **project** 
3626
3627
3628 @subsubsection occt_2142243456_11014048526211  project
3629
3630 Syntax:      project name curve3d surface 
3631
3632 **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. 
3633 **Example:** 
3634
3635 # intersect a cylinder and a plane 
3636 # and project the resulting ellipse on the cylinder 
3637 # this will create a 2d sinusoid-like bspline 
3638 cylinder c 5 
3639 plane p 0 0 0 0 1 1 
3640 intersect i c p 
3641 project i2d i c 
3642
3643 @subsection occt_2142243456_110140485263  Surface creation
3644
3645 Types of surfaces are: 
3646
3647   * Analytical surfaces: plane, cylinder, cone, sphere, torus.
3648   * Polar surfaces: bezier surfaces, bspline surfaces
3649   * Trimmed and Offset surfaces; see **trim**, **trimu**, **trimv**, **offset**.
3650   * Surfaces produced by Revolution and Extrusion, created from curves with the **revsurf **and **extsurf**.
3651   * NURBS surfaces.
3652
3653 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. 
3654
3655
3656 @subsubsection occt_2142243456_1101404852631  plane
3657
3658 Syntax:      plane name [x y z [dx dy dz [ux uy uz]]] 
3659
3660 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. 
3661 **Example:** 
3662
3663 # a plane through the point 10,0,0 perpendicular to X 
3664 # with U direction on Y 
3665 plane p1 10 0 0 1 0 0 0 1 0 
3666
3667 # an horixontal plane with origin 10, -20, -5 
3668 plane p2 10 -20 -5 
3669
3670
3671 @subsubsection occt_2142243456_1101404852632  cylinder
3672
3673 Syntax:      cylinder name [x y z [dx dy dz [ux uy uz]]] radius 
3674
3675 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. 
3676 See also: **plane** 
3677 **Example:** 
3678
3679 # a cylinder on the default Z axis, radius 10 
3680 cylinder c1 10 
3681
3682 # a cylinder, also along the Z axis but with origin 5, 
3683 10, -3 
3684 cylinder c2 5 10 -3 10 
3685
3686 # a cylinder through the origin and on a diagonal 
3687 # with longitude pi/3 and latitude pi/4 (euler angles) 
3688 dset lo pi/3. la pi/4. 
3689 cylinder c3 0 0 0 cos(la)*cos(lo) cos(la)*sin(lo) 
3690 sin(la) 10 
3691
3692
3693 @subsubsection occt_2142243456_1101404852633  cone
3694
3695 Syntax:      cone name [x y z [dx dy dz [ux uy uz]]] semi-angle radius 
3696
3697 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. 
3698 See also: **plane** 
3699 **Example:** 
3700
3701 # a cone at 45 degrees at the origin on Z 
3702 cone c1 45 0 
3703
3704 # a cone on axis Z with radius r1 at z1 and r2 at z2 
3705 cone c2 0 0 z1 180.*atan2(r2-r1,z2-z1)/pi r1 
3706
3707 @subsubsection occt_2142243456_1101404852634  sphere
3708
3709 Syntax:      sphere name [x y z [dx dy dz [ux uy uz]]] radius 
3710
3711 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. 
3712 **Example:** 
3713 # a sphere at the origin 
3714 sphere s1 10 
3715 # a sphere at 10 10 10, with poles on the axis 1,1,1 
3716 sphere s2 10 10 10 1 1 1 10 
3717
3718 See also: **plane** 
3719
3720
3721 @subsubsection occt_2142243456_1101404852635  torus
3722
3723 Syntax:      torus name [x y z [dx dy dz [ux uy uz]]] major minor 
3724
3725 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. 
3726
3727 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. 
3728 **Example:** 
3729
3730 # a torus at the origin 
3731 torus t1 20 5 
3732
3733 # a torus in another coordinate system 
3734 torus t2 10 5 -2 2 1 0 20 5 
3735
3736 See also: **plane** 
3737
3738
3739 @subsubsection occt_2142243456_1101404852636  beziersurf
3740
3741 Syntax:      beziersurf name nbupoles nbvolpes pole, [weight] 
3742
3743 Use this command to create a bezier surface, rational or non-rational. First give the numbers of poles in the u and v directions. 
3744
3745 Then give the poles in the following order: pole(1, 1), pole(nbupoles, 1), pole(1, nbvpoles) and pole(nbupoles, nbvpoles). 
3746
3747 Weights may be omitted, but if you give one weight you must give all of them. 
3748 **Example:** 
3749
3750 # a non-rational degree 2,3 surface 
3751 beziersurf s 3 4 \ 
3752 0 0 0 10 0 5 20 0 0 \ 
3753 0 10 2 10 10 3 20 10 2 \ 
3754 0 20 10 10 20 20 20 20 10 \ 
3755 0 30 0 10 30 0 20 30 0 
3756
3757 See also: **beziercurve** 
3758
3759 @subsubsection occt_2142243456_1101404852637   bsplinesurf, upbsplinesurf, vpbsplinesurf, uvpbsplinesurf
3760
3761 Syntax:      bsplinesurf name udegree nbuknots uknot umult ... nbvknot vknot 
3762 vmult ... x y z w ... 
3763 upbsplinesurf ... 
3764 vpbsplinesurf ... 
3765 uvpbsplinesurf ... 
3766
3767 **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. 
3768
3769 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. 
3770 **Example:** 
3771
3772 # create a bspline surface of degree 1 2 
3773 # with two knots in U and three in V 
3774 bsplinesurf s \ 
3775 1 2 0 2 1 2 \ 
3776 2 3 0 3 1 1 2 3 \ 
3777 0 0 0 1 10 0 5 1 \ 
3778 0 10 2 1 10 10 3 1 \ 
3779 0 20 10 1 10 20 20 1 \ 
3780 0 30 0 1 10 30 0 1 
3781
3782 See also: **bsplinecurve**, **beziersurf**, **convert** 
3783
3784
3785 @subsubsection occt_2142243456_1101404852638  trim, trimu, trimv
3786
3787 Syntax:      trim newname name [u1 u2 [v1 v2]] 
3788 trimu newname name 
3789 trimv newname name 
3790
3791 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. 
3792 <h4>NOTE</h4>
3793 *Note that a trimmed curve or surface contains a copy of the* 
3794 *basis geometry: modifying that will not modify the trimmed* 
3795 *geometry. Trimming trimmed geometry will not create* 
3796 *multiple levels of trimming. The basis geometry will be used.* 
3797 **Example:** 
3798
3799 # create a 3d circle 
3800 circle c 0 0 0 10 
3801
3802 # trim it, use the same variable, the original is 
3803 deleted 
3804 trim c c 0 pi/2 
3805
3806 # the original can be recovered! 
3807 trim orc c 
3808
3809 # trim again 
3810 trim c c pi/4 pi/2 
3811
3812 # the original is not the trimmed curve but the basis 
3813 trim orc c 
3814
3815 # as the circle is periodic, the two following commands 
3816 are identical 
3817 trim cc c pi/2 0 
3818 trim cc c pi/2 2*pi 
3819
3820 # trim an infinite cylinder 
3821 cylinder cy 10 
3822 trimv cy cy 0 50 
3823
3824 See also: **reverse** 
3825
3826
3827 @subsubsection occt_2142243456_1101404852639  offset
3828
3829 Syntax:      offset name basename distance [dx dy dz] 
3830
3831 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. 
3832
3833 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. 
3834
3835 The offset curve or surface copies the basic geometry, which can be modified later. 
3836 **Example:** 
3837
3838 # graphic demonstration that the outline of a torus 
3839 # is the offset of an ellipse 
3840 smallview +X+Y 
3841 dset angle pi/6 
3842 torus t 0 0 0 0 cos(angle) sin(angle) 50 20 
3843 fit 
3844 ellipse e 0 0 0 50 50*sin(angle) 
3845 # note that the distance can be negative 
3846 offset l1 e 20 0 0 1 
3847 @subsubsection occt_2142243456_11014048526310  revsurf
3848
3849 Syntax:      revsurf name curvename x y z dx dy dz 
3850
3851 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. 
3852 **Example:** 
3853
3854 # another way of creating a torus like surface 
3855 circle c 50 0 0 20 
3856 revsurf s c 0 0 0 0 1 0 
3857
3858
3859 @subsubsection occt_2142243456_11014048526311  extsurf
3860
3861 Syntax:      extsurf newname curvename dx dy dz 
3862
3863 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. 
3864 **Example:** 
3865
3866 # an elliptic cylinder 
3867 ellipse e 0 0 0 10 5 
3868 extsurf s e 0 0 1 
3869 # to make it finite 
3870 trimv s s 0 10 
3871
3872
3873 @subsubsection occt_2142243456_11014048526312  convert
3874
3875 Syntax:      convert newname name 
3876
3877 **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. 
3878 **Example:** 
3879
3880 # turn a 2d arc of a circle into a 2d NURBS 
3881 circle c 0 0 5 
3882 trim c c 0 pi/3 
3883 convert c1 c 
3884
3885 # an easy way to make a planar bspline surface 
3886 plane p 
3887 trim p p -1 1 -1 1 
3888 convert p1 p 
3889
3890 <h4>NOTE</h4>
3891 *Offset curves and surfaces are not treated by this command.* 
3892
3893
3894
3895 @subsection occt_2142243456_110140485264  Curve and surface modifications
3896
3897 Draw provides commands to modify curves and surfaces, some of them are general, others restricted to bezier curves or bsplines. 
3898
3899 General modifications: 
3900
3901   * Reversing the parametrization: **reverse**, **ureverse**, **vreverse**
3902
3903 Modifications for both bezier curves and bsplines: 
3904
3905   * Exchanging U and V on a surface: **exchuv**
3906   * Segmentation: **segment**, **segsur**
3907   * Increasing the degree: **incdeg**, **incudeg**, **incvdeg**
3908   * Moving poles: **cmovep**, **movep**, **movecolp**, **moverowp**
3909
3910 Modifications for bezier curves: 
3911
3912   * Adding and removing poles: **insertpole**, **rempole**, **remcolpole**, **remrowpole**
3913
3914 Modifications for bspline: 
3915
3916   * Inserting and removing knots: **insertknot**, **remknot**, **insertuknot**, **remuknot**, **insetvknot**, **remvknot**
3917   * Modifying periodic curves and surfaces: **setperiodic**, **setnotperiodic**, **setorigin**, **setuperiodic**, **setunotperiodic**, **setuorigin**, **setvperiodic**, **setvnotperiodic**, **setvorigin**
3918
3919
3920
3921
3922
3923 @subsubsection occt_2142243456_1101404852641  reverse, ureverse, vreverse
3924
3925
3926 Syntax:            reverse curvename 
3927 ureverse surfacename 
3928 vreverse surfacename 
3929
3930 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. 
3931
3932 **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. 
3933
3934 Reversing a parameter on an analytical surface may create an indirect coordinate system. 
3935 **Example:** 
3936
3937 # reverse a trimmed 2d circle 
3938 circle c 0 0 5 
3939 trim c c pi/4 pi/2 
3940 reverse c 
3941
3942 # dumping c will show that it is now trimmed between 
3943 # 3*pi/2 and 7*pi/4 i.e. 2*pi-pi/2 and 2*pi-pi/4 
3944
3945
3946 @subsubsection occt_2142243456_1101404852642  exchuv
3947
3948 Syntax:                  exchuv surfacename 
3949
3950 For a bezier or bspline surface this command exchanges the u and v parameters. 
3951 **Example:** 
3952
3953 # exchanging u and v on a spline (made from a cylinder) 
3954 cylinder c 5 
3955 trimv c c 0 10 
3956 convert c1 c 
3957 exchuv c1 
3958
3959
3960 @subsubsection occt_2142243456_1101404852643  segment, segsur
3961
3962 Syntax:                  segment curve Ufirst Ulast 
3963 segsur surface Ufirst Ulast Vfirst Vlast 
3964
3965 **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. 
3966
3967 This command must not be confused with **trim **which creates new geometry. 
3968
3969 **Example:** 
3970
3971 # segment a bezier curve in half 
3972 beziercurve c 3 0 0 0 10 0 0 10 10 0 
3973 segment c ufirst ulast 
3974
3975
3976 @subsubsection occt_2142243456_1101404852644  iincudeg, incvdeg
3977
3978 Syntax:      incudeg surfacename newdegree 
3979 incvdeg surfacename newdegree 
3980
3981 **incudeg **and **incvdeg **increase the degree in the U or V parameter of a bezier or bspline surface. 
3982 **Example:** 
3983
3984 # make a planar bspline and increase the degree to 2 3 
3985 plane p 
3986 trim p p -1 1 -1 1 
3987 convert p1 p 
3988 incudeg p1 2 
3989 incvdeg p1 3 
3990
3991 <h4>NOTE</h4>
3992 *The geometry is modified.* 
3993
3994
3995 @subsubsection occt_2142243456_1101404852645  cmovep, movep, movecolp, moverowp
3996
3997 Syntax:      cmovep curve index dx dy [dz] 
3998 movep surface uindex vindex dx dy dz 
3999 movecolp surface uindex dx dy dz 
4000 moverowp surface vindex dx dy dz 
4001
4002 **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. 
4003
4004 **movecolp **and **moverowp **translate a whole column (expressed by the uindex) or row (expressed by the vindex) of poles. 
4005 **Example:** 
4006
4007 # start with a plane 
4008 # transform to bspline, raise degree and add relief 
4009 plane p 
4010 trim p p -10 10 -10 10 
4011 convert p1 p 
4012 incud p1 2 
4013 incvd p1 2 
4014 movecolp p1 2 0 0 5 
4015 moverowp p1 2 0 0 5 
4016 movep p1 2 2 0 0 5 
4017
4018
4019 @subsubsection occt_2142243456_1101404852646  insertpole, rempole, remcolpole, remrowpole
4020
4021 Syntax:                  insertpole curvename index x y [z] [weight] 
4022 rempole curvename index 
4023 remcolpole surfacename index 
4024 remrowpole surfacename index 
4025
4026 **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. 
4027
4028 **rempole **removes a pole from a 2d or 3d bezier curve. Leave at least two poles in the curves. 
4029
4030 **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. 
4031 **Example:** 
4032
4033 # start with a segment, insert a pole at end 
4034 # then remove the central pole 
4035 beziercurve c 2 0 0 0 10 0 0 
4036 insertpole c 2 10 10 0 
4037 rempole c 2 
4038
4039
4040 @subsubsection occt_2142243456_1101404852647  insertknot, insertuknot, insertvknot
4041
4042 Syntax:                  insertknot name knot [mult = 1] [knot mult ...] 
4043 insertuknot surfacename knot mult 
4044 insertvknot surfacename knot mult 
4045
4046 **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. 
4047
4048
4049
4050
4051 **Example:** 
4052
4053 # create a cylindrical surface and insert a knot 
4054 cylinder c 10 
4055 trim c c 0 pi/2 0 10 
4056 convert c1 c 
4057 insertuknot c1 pi/4 1 
4058
4059 @subsubsection occt_2142243456_1101404852648  remknot, remuknot, remvknot
4060
4061 Syntax:      remknot index [mult] [tol] 
4062 remuknot index [mult] [tol] 
4063 remvknot index [mult] [tol] 
4064
4065 **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. 
4066
4067 By default, if no tolerance is given, the knot will always be removed. 
4068 **Example:** 
4069
4070 # bspline circle, remove a knot 
4071 circle c 0 0 5 
4072 convert c1 c 
4073 incd c1 5 
4074 remknot c1 2 
4075
4076 *NOTE* 
4077 *Curves or Surfaces may be modified.* 
4078
4079
4080 @subsubsection occt_2142243456_1101404852649  setperiodic, setnotperiodic, setuperiodic, setunotperiodic, setvperiodic, setvnotperiodic
4081
4082 Syntax:      setperiodic curve 
4083 setnotperiodic curve 
4084 setuperiodic surface 
4085 setunotperiodic surface 
4086 setvperiodic surface 
4087 setvnotperiodic surface 
4088
4089 **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. 
4090
4091 **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. 
4092 **Example:** 
4093
4094 # a circle deperiodicized 
4095 circle c 0 0 5 
4096 convert c1 c 
4097 setnotperiodic c1 
4098 @subsubsection occt_2142243456_11014048526410  setorigin, setuorigin, setvorigin
4099
4100 Syntax:      setorigin curvename index 
4101 setuorigin surfacename index 
4102 setuorigin surfacename index 
4103
4104 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. 
4105 **Example:** 
4106
4107 # a torus with new U and V origins 
4108 torus t 20 5 
4109 convert t1 t 
4110 setuorigin t1 2 
4111 setvorigin t1 2 
4112
4113
4114 @subsection occt_2142243456_110140485265  Transformations
4115
4116 Draw provides commands to apply linear transformations to geometric objects: they include translation, rotation, mirroring and scaling. 
4117
4118 @subsubsection occt_2142243456_1101404852651  translate, dtranslate
4119
4120 Syntax:                  translate name [names ...] dx dy dz 
4121 2dtranslate name [names ...] dx dy 
4122
4123 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. 
4124
4125 For 2d points or curves, use the **2dtranslate **command. 
4126 **Example:** 
4127
4128 # 3d tranlation 
4129 point p 10 20 30 
4130 circle c 10 20 30 5 
4131 torus t 10 20 30 5 2 
4132 translate p c t 0 0 15 
4133 *NOTE* 
4134 *Objects are modified by this command.* 
4135
4136 @subsubsection occt_2142243456_1101404852652  rotate, drotate
4137
4138 Syntax:      rotate name [name ...] x y z dx dy dz angle 
4139 2drotate name [name ...] x y angle 
4140 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. 
4141
4142 For a 2d rotation, you need only give the center point and the angle. In 2d or 3d, the angle can be negative. 
4143 **Example:** 
4144
4145 # make a helix of circles. create a scripte file with 
4146 this code and execute it using **source**. 
4147 circle c0 10 0 0 3 
4148 for {set i 1} {$i = 10} {incr i} { 
4149 copy c[expr $i-1] c$i 
4150 translate c$i 0 0 3 
4151 rotate c$i 0 0 0 0 0 1 36 
4152
4153
4154 @subsubsection occt_2142243456_1101404852653  pmirror, lmirror, smirror, dpmirror, dlmirror
4155
4156 Syntax:      pmirror name [names ...] x y z 
4157 lmirror name [names ...] x y z dx dy dz 
4158 smirror name [names ...] x y z dx dy dz 
4159 2dpmirror name [names ...] x y 
4160 2dlmirror name [names ...] x y dx dy 
4161
4162 The mirror commands perform a mirror transformation of 2d or 3d geometry. 
4163
4164 **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. 
4165
4166 In 2d, only **2dpmirror**, point symmetry mirroring, and **2dlmirror**, axis symmetry mirroring, are available. 
4167 **Example:** 
4168
4169 # build 3 images of a torus 
4170 torus t 10 10 10 1 2 3 5 1 
4171 copy t t1 
4172 pmirror t1 0 0 0 
4173 copy t t2 
4174 lmirror t2 0 0 0 1 0 0 
4175 copy t t3 
4176 smirror t3 0 0 0 1 0 0 
4177
4178 @subsubsection occt_2142243456_1101404852654  pscale, dpscale
4179
4180 Syntax:                  pscale name [name ...] x y z s 
4181 2dpscale name [name ...] x y s 
4182 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**. 
4183 **Example:** 
4184
4185 # double the size of a sphere 
4186 sphere s 0 0 0 10 
4187 pscale s 0 0 0 2 
4188
4189 @subsection occt_2142243456_110140485266  Curve and surface analysis
4190
4191 **Draw **provides methods to compute information about curves and surfaces: 
4192
4193   * **coord **to find the coordinates of a point.
4194   * **cvalue **and **2dcvalue **to compute points and derivatives on curves.
4195   * **svalue **to compute points and derivatives on a surface.
4196   * **localprop **and **minmaxcurandif **to compute the curvature on a curve.
4197   * **parameters **to compute (u,v) values for a point on a surface.
4198   * **proj **and **2dproj **to project a point on a curve or a surface.
4199   * **surface_radius **to compute the curvature on a surface.
4200
4201 @subsubsection occt_2142243456_1101404852661  coord
4202
4203 Syntax:            coord P x y [z] 
4204
4205 The **coord **command will set the coordinates of the point P. x, y (and optionally z) 
4206 **Example:** 
4207
4208 # translate a point 
4209 point p 10 5 5 
4210 translate p 5 0 0 
4211 coord p x y z 
4212 # x value is 15 
4213 See also: **point** 
4214 @subsubsection occt_2142243456_1101404852662   cvalue, dcvalue
4215
4216 Syntax:      cvalue curve U x y z [d1x d1y d1z [d2x d2y d2z]] 
4217 2dcvalue curve U x y [d1x d1y [d2x d2y]] 
4218
4219 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. 
4220 **Example:**
4221
4222 # on a bezier curve at parameter 0 
4223 # the point is the first pole 
4224 # the derivative is the vector first to second pole 
4225 # multiplied by the degree 
4226 # the second derivative is the difference 
4227 # first to second pole, second to third pole 
4228 # multipied by degree  * degree-1 
4229 2dbeziercurve c 4 0 0 1 1 2 1 3 0 
4230 2dcvalue c 0 x y d1x d1y d2x d2y 
4231
4232 # values of x y d1x d1y d2x d2y 
4233 # are 0 0 3 3 0 -6 
4234
4235
4236 @subsubsection occt_2142243456_1101404852663  svalue
4237
4238 Syntax: svalue surfname U v x y z [dux duy duz dvx dvy dvz [d2ux d2uy d2uz d2vx d2vy d2vz d2uvx d2uvy d2uvz]] 
4239
4240 **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. 
4241 **Example:** 
4242
4243 # display points on a sphere 
4244 sphere s 10 
4245 for {dset t 0} {[dval t] = 1} {dset t t+0.01} { 
4246 svalue s t*2*pi t*pi-pi/2 x y z 
4247 point . x y z 
4248
4249
4250
4251 @subsubsection occt_2142243456_1101404852664  localprop, minmaxcurandinf
4252
4253 Syntax:      localprop curvename U 
4254 minmaxcurandinf curve 
4255
4256 The **localprop **command computes the curvature of a curve. 
4257 **minmaxcurandinf **computes and prints the parameters of the points where the curvature is minimum and maximum on a 2d curve. 
4258 **Example:** 
4259
4260 # show curvature at the center of a bezier curve 
4261 beziercurve c 3 0 0 0 10 2 0 20 0 0 
4262 localprop c 0.5 
4263 == Curvature : 0.02 
4264
4265 See also: **surface_radius** 
4266
4267
4268 @subsubsection occt_2142243456_1101404852665  parameters
4269
4270 Syntax:      parameters surf/curve x y z U [V] 
4271
4272 The **parameters **command returns the parameters on the surface of the 3d point x,y,z in variables u and v . This command may only be used on analytical surfaces: plane, cylinder, cone, sphere and torus. 
4273 **Example:** 
4274
4275 # Compute parameters on a plane 
4276 plane p 0 0 10 1 1 0 
4277 parameters p 5 5 5 u v 
4278 # the values of u and v are : 0 5 
4279
4280
4281 @subsubsection occt_2142243456_1101404852666  proj, dproj
4282
4283 Syntax:      proj name x y z 
4284 2dproj name xy 
4285
4286 Use **proj **to project a point on a 3d curve or a surface and **2dproj **for a 2d curve. 
4287
4288 The command will compute and display all points in the projection. The lines joining the point to the projections are created with the names ext_1, ext_2, ... 
4289 **Example:** 
4290
4291 # project point on a torus 
4292 torus t 20 5 
4293 proj t 30 10 7 
4294 == ext_1 ext_2 ext_3 ext_4 
4295
4296
4297 @subsubsection occt_2142243456_1101404852667  surface_radius
4298
4299 Syntax:      surface_radius surface u v [c1 c2] 
4300
4301 The **surface_radius **command computes the main curvatures of a surface at parameters (u,v). If there are extra arguments, their curvatures are stored in variabl