0028346: Function ProjectOnSegments of ShapeAnalysis_Curve returns only single soluti...
[occt.git] / dox / user_guides / draw_test_harness / draw_test_harness.md
1 Draw Test Harness  {#occt_user_guides__test_harness}
2 ===============================
3
4 @tableofcontents
5  
6 @section occt_draw_1 Introduction
7
8 This manual explains how to use Draw, the test harness for Open CASCADE Technology (**OCCT**).
9 Draw is a command interpreter based on TCL and a graphical system used to test and demonstrate Open CASCADE Technology modeling libraries. 
10
11 @subsection occt_draw_1_1 Overview
12
13 Draw is a test harness for Open CASCADE Technology. It provides a flexible and easy to use means of testing and demonstrating the OCCT modeling libraries. 
14
15 Draw can be used interactively to create, display and modify objects such as curves, surfaces and topological shapes. 
16
17 Scripts may be written to customize Draw and perform tests. New types of objects and new commands may be added using the C++ programing language. 
18
19 Draw consists of: 
20
21   * A command interpreter based on the TCL command language.
22   * A 3d graphic viewer based on the X system.
23   * A basic set of commands covering scripts, variables and graphics.
24   * A set of geometric commands allowing the user to create and modify curves and surfaces and to use OCCT geometry algorithms. This set of commands is optional.
25   * A set of topological commands allowing the user to create and modify BRep shapes and to use the OCCT topology algorithms.
26
27
28 There is also a set of commands for each delivery unit in the modeling libraries: 
29
30   * GEOMETRY, 
31   * TOPOLOGY, 
32   * ADVALGOS, 
33   * GRAPHIC, 
34   * PRESENTATION. 
35
36
37 @subsection occt_draw_1_2 Contents of this documentation
38
39 This documentation describes: 
40
41   * The command language.
42   * The basic set of commands.
43   * The graphical commands.
44   * The Geometry set of commands.
45   * The Topology set of commands.
46   * OCAF commands.
47   * Data Exchange commands
48   * Shape Healing commands
49
50 This document is a reference manual. It contains a full description of each command. All descriptions have the format illustrated below for the exit command. 
51
52 ~~~~~
53 exit
54 ~~~~~
55
56 Terminates the Draw, TCL session. If the commands are read from a file using the source command, this will terminate the file. 
57
58 **Example:** 
59
60 ~~~~~
61 # this is a very short example 
62 exit 
63 ~~~~~
64
65
66 @subsection occt_draw_1_3 Getting started
67
68 Install Draw and launch Emacs. Get a command line in Emacs using *Esc x* and key in *woksh*. 
69
70 All DRAW Test Harness can be activated in the common executable called **DRAWEXE**. They are grouped in toolkits and can be loaded at run-time thereby implementing dynamically loaded plug-ins. Thus, it is possible to work only with the required commands adding them dynamically without leaving the Test Harness session. 
71
72 Declaration of available plug-ins is done through the special resource file(s). The *pload* command loads the plug-in in accordance with the specified resource file and activates the commands implemented in the plug-in. 
73
74 @subsubsection occt_draw_1_3_1 Launching DRAW Test Harness
75
76 Test Harness executable *DRAWEXE* is located in the <i>$CASROOT/\<platform\>/bin</i> directory (where \<platform\> is Win for Windows and Linux for Linux operating systems). Prior to launching it is important to make sure that the environment is correctly setup (usually this is done automatically after the installation process on Windows or after launching specific scripts on Linux).  
77
78
79 @subsubsection occt_draw_1_3_2 Plug-in resource file
80
81 Open CASCADE Technology is shipped with the DrawPlugin resource file located in the <i>$CASROOT/src/DrawResources</i> directory. 
82
83 The format of the file is compliant with standard Open CASCADE Technology resource files (see the *Resource_Manager.hxx* file for details). 
84
85 Each key defines a sequence of either further (nested) keys or a name of the dynamic library. Keys can be nested down to an arbitrary level. However, cyclic dependencies between the keys are not checked. 
86
87 **Example:** (excerpt from DrawPlugin): 
88 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{.cpp}
89 OCAF               : VISUALIZATION, OCAFKERNEL 
90 VISUALIZATION      : AISV 
91 OCAFKERNEL         : DCAF 
92
93 DCAF               : TKDCAF 
94 AISV               : TKViewerTest 
95 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
96
97 @subsubsection occt_draw_1_3_3 Activation of commands implemented in the plug-in
98
99 To load a plug-in declared in the resource file and to activate the commands the following command must be used in Test Harness: 
100
101 ~~~~~
102 pload [-PluginFileName] [[Key1] [Key2]...]
103 ~~~~~
104
105 where: 
106
107 * <i>-PluginFileName</i> -- defines the name of a plug-in resource file (prefix "-" is mandatory) described above. If this parameter is omitted then the default name *DrawPlugin* is used. 
108 * *Key* -- defines the key(s) enumerating plug-ins to be loaded. If no keys are specified then the key named *DEFAULT* is used (if there is no such key in the file then no plug-ins are loaded). 
109
110 According to the OCCT resource file management rules, to access the resource file the environment variable *CSF_PluginFileNameDefaults* (and optionally *CSF_PluginFileNameUserDefaults*) must be set and point to the directory storing the resource file. If it is omitted then the plug-in resource file will be searched in the <i>$CASROOT/src/DrawResources</i> directory. 
111
112 ~~~~~
113 Draw[]        pload -DrawPlugin OCAF 
114 ~~~~~
115 This command will search the resource file *DrawPlugin* using variable *CSF_DrawPluginDefaults* (and *CSF_DrawPluginUserDefaults*) and will start with the OCAF key. Since the *DrawPlugin* is the file shipped with Open CASCADE Technology it will be found in the <i>$CASROOT/src/DrawResources</i> directory (unless this location is redefined by user's variables). The OCAF key will be recursively extracted into two toolkits/plug-ins: *TKDCAF* and *TKViewerTest* (e.g. on Windows they correspond to *TKDCAF.dll* and *TKViewerTest.dll*). Thus, commands implemented for Visualization and OCAF will be loaded and activated in Test Harness. 
116
117 ~~~~~
118 Draw[]        pload (equivalent to pload -DrawPlugin DEFAULT). 
119 ~~~~~
120 This command will find the default DrawPlugin file and the DEFAULT key. The latter finally maps to the TKTopTest toolkit which implements basic modeling commands. 
121
122
123 @section occt_draw_2 The Command Language
124
125 @subsection occt_draw_2_1 Overview
126
127 The command language used in Draw is Tcl. Tcl documentation such as "TCL and the TK Toolkit" by John K. Ousterhout (Addison-Wesley) will prove useful if you intend to use Draw extensively. 
128
129 This chapter is designed to give you a short outline of both the TCL language and some extensions included in Draw. The following topics are covered: 
130
131   * Syntax of the TCL language.
132   * Accessing variables in TCL and Draw.
133   * Control structures.
134   * Procedures.
135
136 @subsection occt_draw_2_2 Syntax of TCL
137
138 TCL is an interpreted command language, not a structured language like C, Pascal, LISP or Basic. It uses a shell similar to that of csh. TCL is, however, easier to use than csh because control structures and procedures are easier to define. As well, because TCL does not assign a process to each command, it is faster than csh. 
139
140 The basic program for TCL is a script. A script consists of one or more commands. Commands are separated by new lines or semicolons. 
141
142 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{.cpp}
143 set a 24 
144 set b 15 
145 set a 25; set b 15 
146 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
147
148 Each command consists of one or more *words*; the first word is the name of a command and additional words are arguments to that command. 
149
150 Words are separated by spaces or tabs. In the preceding example each of the four commands has three words. A command may contain any number of words and each word is a string of arbitrary length. 
151
152 The evaluation of a command by TCL is done in two steps. In the first step, the command is parsed and broken into words. Some substitutions are also performed. In the second step, the command procedure corresponding to the first word is called and the other words are interpreted as arguments. In the first step, there is only string manipulation, The words only acquire *meaning* in the second step by the command procedure. 
153
154 The following substitutions are performed by TCL: 
155
156 Variable substitution is triggered by the $ character (as with csh), the content of the variable is substitued; { } may be used as in csh to enclose the name of the variable. 
157
158 **Example:** 
159 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{.cpp}
160 # set a variable value 
161 set file documentation 
162 puts $file #to display file contents on the screen 
163
164 # a simple substitution, set psfile to documentation.ps 
165 set psfile $file.ps 
166 puts $psfile 
167
168 # another substitution, set pfile to documentationPS 
169 set pfile ${file}PS 
170
171 # a last one, 
172 # delete files NEWdocumentation and OLDdocumentation 
173 foreach prefix {NEW OLD} {rm $prefix$file} 
174 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
175
176 Command substitution is triggered by the [ ] characters. The brackets must enclose a valid script. The script is evaluated and the result is substituted. 
177
178 Compare command construction in csh. 
179
180 **Example:** 
181 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{.cpp}
182 set degree 30 
183 set pi 3.14159265 
184 # expr is a command evaluating a numeric expression 
185 set radian [expr $pi*$degree/180] 
186 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
187
188 Backslash substitution is triggered by the backslash character. It is used to insert special characters like $, [ , ] , etc. It is also useful to insert a new line, a backslash terminated line is continued on the following line. 
189
190 TCL uses two forms of *quoting* to prevent substitution and word breaking. 
191
192 Double quote *quoting* enables the definition of a string with space and tabs as a single word. Substitutions are still performed inside the inverted commas " ". 
193
194 **Example:** 
195 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{.cpp}
196 # set msg to ;the price is 12.00; 
197 set price 12.00 
198 set msg ;the price is $price; 
199 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
200
201 Braces *quoting* prevents all substitutions. Braces are also nested. The main use of braces is to defer evaluation when defining procedures and control structures. Braces are used for a clearer presentation of TCL scripts on several lines. 
202
203 **Example:** 
204 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{.cpp}
205 set x 0 
206 # this will loop for ever 
207 # because while argument is ;0 < 3; 
208 while ;$x < 3; {set x [expr $x+1]} 
209 # this will terminate as expected because 
210 # while argument is {$x < 3} 
211 while {$x < 3} {set x [expr $x+1]} 
212 # this can be written also 
213 while {$x < 3} { 
214 set x [expr $x+1] 
215
216 # the following cannot be written 
217 # because while requires two arguments 
218 while {$x < 3} 
219
220 set x [expr $x+1] 
221
222 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
223
224 Comments start with a \# character as the first non-blank character in a command. To add a comment at the end of the line, the comment must be preceded by a semi-colon to end the preceding command. 
225
226 **Example:** 
227 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{.cpp}
228 # This is a comment 
229 set a 1 # this is not a comment 
230 set b 1; # this is a comment 
231 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
232
233 The number of words is never changed by substitution when parsing in TCL. For example, the result of a substitution is always a single word. This is different from csh but convenient as the behavior of the parser is more predictable. It may sometimes be necessary to force a second round of parsing. **eval** accomplishes this: it accepts several arguments, concatenates them and executes the resulting script. 
234
235
236 **Example:** 
237 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
238 # I want to delete two files 
239
240 set files ;foo bar; 
241
242 # this will fail because rm will receive only one argument 
243 # and complain that ;foo bar; does not exit 
244
245 exec rm $files 
246
247 # a second evaluation will do it 
248 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
249
250 @subsection occt_draw_2_3 Accessing variables in TCL and Draw
251
252 TCL variables have only string values. Note that even numeric values are stored as string literals, and computations using the **expr** command start by parsing the strings. Draw, however, requires variables with other kinds of values such as curves, surfaces or topological shapes. 
253
254 TCL provides a mechanism to link user data to variables. Using this functionality, Draw defines its variables as TCL variables with associated data. 
255
256 The string value of a Draw variable is meaningless. It is usually set to the name of the variable itself. Consequently, preceding a Draw variable with a <i>$</i> does not change the result of a command. The content of a Draw variable is accessed using appropriate commands. 
257
258 There are many kinds of Draw variables, and new ones may be added with C++. Geometric and topological variables are described below. 
259
260 Draw numeric variables can be used within an expression anywhere a Draw command requires a numeric value. The *expr* command is useless in this case as the variables are stored not as strings but as floating point values. 
261
262 **Example:** 
263 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{.cpp}
264 # dset is used for numeric variables 
265 # pi is a predefined Draw variable 
266 dset angle pi/3 radius 10 
267 point p radius*cos(angle) radius*sin(angle) 0 
268 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
269 It is recommended that you use TCL variables only for strings and Draw for numerals. That way, you will avoid the *expr* command. As a rule, Geometry and Topology require numbers but no strings. 
270
271 @subsubsection occt_draw_2_3_1 set, unset
272
273 Syntax:                  
274
275 ~~~~~
276 set varname [value] 
277 unset varname [varname varname ...] 
278 ~~~~~
279
280 *set* assigns a string value to a variable. If the variable does not already exist, it is created. 
281
282 Without a value, *set* returns the content of the variable. 
283
284 *unset* deletes variables. It is is also used to delete Draw variables. 
285
286 **Example:** 
287 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{.cpp}
288 set a "Hello world"
289 set b "Goodbye" 
290 set a 
291 == "Hello world" 
292 unset a b 
293 set a 
294 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
295
296 **Note**, that the *set* command can set only one variable, unlike the *dset* command. 
297
298
299 @subsubsection occt_draw_2_3_2 dset, dval
300
301 Syntax
302
303 ~~~~~
304 dset var1 value1 vr2 value2 ... 
305 dval name 
306 ~~~~~
307
308 *dset* assigns values to Draw numeric variables. The argument can be any numeric expression including Draw numeric variables. Since all Draw commands expect a numeric expression, there is no need to use $ or *expr*. The *dset* command can assign several variables. If there is an odd number of arguments, the last variable will be assigned a value of 0. If the variable does not exist, it will be created. 
309
310 *dval* evaluates an expression containing Draw numeric variables and returns the result as a string, even in the case of a single variable. This is not used in Draw commands as these usually interpret the expression. It is used for basic TCL commands expecting strings. 
311
312
313 **Example:** 
314 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{.cpp}
315 # z is set to 0 
316 dset x 10 y 15 z 
317 == 0 
318
319 # no $ required for Draw commands 
320 point p x y z 
321
322 # "puts" prints a string 
323 puts ;x = [dval x], cos(x/pi) = [dval cos(x/pi)]; 
324 == x = 10, cos(x/pi) = -0.99913874099467914 
325 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
326
327 **Note,** that in TCL, parentheses are not considered to be special characters. Do not forget to quote an expression if it contains spaces in order to avoid parsing different words. <i>(a + b)</i> is parsed as three words: <i>"(a + b)"</i> or <i>(a+b)</i> are correct.
328
329 @subsubsection occt_draw_2_3_3 del, dall
330
331 Syntax:      
332 ~~~~~
333 del varname_pattern [varname_pattern ...] 
334 dall
335 ~~~~~
336
337 *del* command does the same thing as *unset*, but it deletes the variables matched by the pattern.
338
339 *dall* command deletes all variables in the session.
340
341 @subsection occt_draw_2_4 lists
342
343 TCL uses lists. A list is a string containing elements separated by spaces or tabs. If the string contains braces, the braced part accounts as one element. 
344
345 This allows you to insert lists within lists. 
346
347 **Example:** 
348 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{.cpp}
349 # a list of 3 strings 
350 ;a b c; 
351
352 # a list of two strings the first is a list of 2 
353 ;{a b} c; 
354 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
355
356 Many TCL commands return lists and **foreach** is a useful way to create loops on list elements. 
357
358 @subsubsection occt_draw_2_5 Control Structures
359
360 TCL allows looping using control structures. The control structures are implemented by commands and their syntax is very similar to that of their C counterparts (**if**, **while**, **switch**, etc.). In this case, there are two main differences between TCL and C: 
361
362 * You use braces instead of parentheses to enclose conditions. 
363 * You do not start the script on the next line of your command. 
364
365
366 @subsubsection occt_draw_2_5_1 if
367
368 Syntax       
369
370 ~~~~~
371 if condition script [elseif script .... else script] 
372 ~~~~~
373
374 **If** evaluates the condition and the script to see whether the condition is true. 
375
376
377
378 **Example:** 
379 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{.cpp}
380 if {$x > 0} { 
381 puts ;positive; 
382 } elseif {$x == 0} { 
383 puts ;null; 
384 } else { 
385 puts ;negative; 
386
387 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
388
389 @subsubsection occt_draw_2_5_2 while, for, foreach
390
391 Syntax:                  
392
393
394 ~~~~~~
395 while condition script 
396 for init condition reinit script 
397 foreach varname list script 
398 ~~~~~
399
400 The three loop structures are similar to their C or csh equivalent. It is important to use braces to delay evaluation. **foreach** will assign the elements of the list to the variable before evaluating the script. \
401
402 **Example:** 
403 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{.cpp}
404 # while example 
405 dset x 1.1 
406 while {[dval x] < 100} { 
407   circle c 0 0 x 
408   dset x x*x 
409
410 # for example 
411 # incr var d, increments a variable of d (default 1) 
412 for {set i 0} {$i < 10} {incr i} { 
413   dset angle $i*pi/10 
414   point p$i cos(angle0 sin(angle) 0 
415
416 # foreach example 
417 foreach object {crapo tomson lucas} {display $object} 
418 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
419
420 @subsubsection occt_draw_2_5_3 break, continue
421
422 Syntax:                  
423
424 ~~~~~
425 break 
426 continue 
427 ~~~~~
428
429 Within loops, the **break** and **continue** commands have the same effect as in C. 
430
431 **break** interrupts the innermost loop and **continue** jumps to the next iteration. 
432
433 **Example:** 
434 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{.cpp}
435 # search the index for which t$i has value ;secret; 
436 for {set i 1} {$i <= 100} {incr i} { 
437   if {[set t$i] == ;secret;} break; 
438
439 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
440
441 @subsection occt_draw_2_6 Procedures
442
443 TCL can be extended by defining procedures using the **proc** command, which sets up a context of local variables, binds arguments and executes a TCL script. 
444
445 The only problematic aspect of procedures is that variables are strictly local, and as they are implicitly created when used, it may be difficult to detect errors. 
446
447 There are two means of accessing a variable outside the scope of the current procedures: **global** declares a global variable (a variable outside all procedures); **upvar** accesses a variable in the scope of the caller. Since arguments in TCL are always string values, the only way to pass Draw variables is by reference, i.e. passing the name of the variable and using the **upvar** command as in the following examples. 
448
449 As TCL is not a strongly typed language it is very difficult to detect programming errors and debugging can be tedious. TCL procedures are, of course, not designed for large scale software development but for testing and simple command or interactive writing. 
450
451
452 @subsubsection occt_draw_2_6_1 proc
453
454 Syntax:
455
456 ~~~~~
457 proc argumentlist script 
458 ~~~~~
459
460 **proc** defines a procedure. An argument may have a default value. It is then a list of the form {argument value}. The script is the body of the procedure. 
461
462 **return** gives a return value to the procedure. 
463
464 **Example:** 
465 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{.cpp}
466 # simple procedure 
467 proc hello {} { 
468   puts ;hello world; 
469
470 # procedure with arguments and default values 
471 proc distance {x1 y1 {x2 0} {y2 0}} { 
472   set d [expr (x2-x1)*(x2-x1) + (y2-y1)*(y2-y1)] 
473   return [expr sqrt(d)] 
474
475 proc fact n { 
476   if {$n == 0} {return 1} else { 
477     return [expr n*[fact [expr n -1]]] 
478   } 
479
480 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
481
482
483 @subsubsection occt_draw_2_6_2 global, upvar
484
485 Syntax:                 
486
487 ~~~~~
488 global varname [varname ...] 
489 upvar varname localname [varname localname ...] 
490 ~~~~~
491
492
493 **global** accesses high level variables. Unlike C, global variables are not visible in procedures. 
494
495 **upvar** gives a local name to a variable in the caller scope. This is useful when an argument is the name of a variable instead of a value. This is a call by reference and is the only way to use Draw variables as arguments. 
496
497 **Note** that in the following examples the \$ character is always necessarily used to access the arguments.
498  
499 **Example:** 
500 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{.cpp}
501 # convert degree to radian 
502 # pi is a global variable 
503 proc deg2rad (degree} { 
504   return [dval pi*$degree/2.] 
505
506 # create line with a point and an angle 
507 proc linang {linename x y angle} { 
508   upvar linename l 
509   line l $x $y cos($angle) sin($angle) 
510 }
511 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
512
513 @section occt_draw_3 Basic Commands
514
515 This chapter describes all the commands defined in the basic Draw package. Some are TCL commands, but most of them have been formulated in Draw. These commands are found in all Draw applications. The commands are grouped into four sections: 
516
517   * General commands, which are used for Draw and TCL management.
518   * Variable commands, which are used to manage Draw variables such as storing and dumping.
519   * Graphic commands, which are used to manage the graphic system, and so pertain to views.
520   * Variable display commands, which are used to manage the display of objects within given views.
521
522 Note that Draw also features a GUI task bar providing an alternative way to give certain general, graphic and display commands 
523
524
525 @subsection occt_draw_3_1 General commands
526
527 This section describes several useful commands:
528
529   * **help** to get information, 
530   * **source** to eval a script from a file, 
531   * **spy** to capture the commands in a file,
532   * **cpulimit** to limit the process cpu time, 
533   * **wait** to waste some time, 
534   * **chrono** to time commands. 
535
536 @subsubsection occt_draw_3_1_1 help
537
538 Syntax:                  
539
540 ~~~~~
541 help [command [helpstring group]] 
542 ~~~~~
543
544 Provides help or modifies the help information. 
545
546 **help** without arguments lists all groups and the commands in each group. 
547
548 Specifying the command returns its syntax and in some cases, information on the command, The joker \* is automatically added at the end so that all completing commands are returned as well. 
549
550 **Example:** 
551 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{.cpp}
552 # Gives help on all commands starting with *a* 
553 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
554
555
556 @subsubsection occt_draw_3_1_2 source
557
558 Syntax:
559
560 ~~~~~
561 source filename 
562 ~~~~~
563 Executes a file. 
564
565 The **exit** command will terminate the file. 
566
567 @subsubsection occt_draw_3_1_3 spy
568
569 Syntax:                  
570
571 ~~~~~
572 spy [filename] 
573 ~~~~~
574
575 Saves interactive commands in the file. If spying has already been performed, the current file is closed. **spy** without an argument closes the current file and stops spying. If a file already exists, the file is overwritten. Commands are not appended. 
576
577 If a command returns an error it is saved with a comment mark. 
578
579 The file created by **spy** can be executed with the **source** command. 
580
581 **Example:** 
582 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{.cpp}
583 # all commands will be saved in the file ;session; 
584 spy session 
585 # the file ;session; is closed and commands are not saved 
586 spy 
587 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
588
589
590
591 @subsubsection occt_draw_3_1_4 cpulimit
592
593 Syntax:                  
594
595 ~~~~~
596 cpulimit [nbseconds] 
597 ~~~~~
598
599 **cpulimit**limits a process after the number of seconds specified in nbseconds. It is used in tests to avoid infinite loops. **cpulimit** without arguments removes all existing limits. 
600
601 **Example:** 
602 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{.cpp}
603 #limit cpu to one hour 
604 cpulimit 3600 
605 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
606
607 @subsubsection occt_draw_3_1_5 wait
608
609 Syntax:
610 ~~~~~
611 wait [nbseconds] 
612 ~~~~~
613 Suspends execution for the number of seconds specified in *nbseconds*. The default value is ten (10) seconds. This is a useful command for a slide show. 
614
615 ~~~~~
616 # You have ten seconds ... 
617 wait 
618 ~~~~~
619
620 @subsubsection occt_draw_3_1_6 chrono
621
622 Syntax:                  
623
624 ~~~~~
625 chrono [ name start/stop/reset/show/restart/[counter text]]
626 ~~~~~
627
628 Without arguments, **chrono** activates Draw chronometers. The elapsed time ,cpu system and cpu user times for each command will be printed. 
629
630 With arguments, **chrono** is used to manage activated chronometers. You can perform the following actions with a chronometer. 
631   * run the chronometer (start).
632   * stop the chronometer (stop).
633   * reset the chronometer to 0 (reset).
634   * restart the chronometer (restart).
635   * display the current time (show).
636   * display the current time with specified text (output example - *COUNTER text: N*), command <i>testdiff</i> will compare such outputs between two test runs (counter).
637
638 **Example:** 
639 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{.cpp}
640 chrono 
641 ==Chronometers activated. 
642 ptorus t 20 5 
643 ==Elapsed time: 0 Hours 0 Minutes 0.0318 Seconds 
644 ==CPU user time: 0.01 seconds 
645 ==CPU system time: 0 seconds 
646 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
647
648 @subsection occt_draw_3_2  Variable management commands
649
650 @subsubsection occt_draw_3_2_1 isdraw, directory
651
652 Syntax:                  
653 ~~~~~
654 isdraw varname 
655 directory [pattern] 
656 ~~~~~
657
658 **isdraw** tests to see if a variable is a Draw variable. **isdraw** will return 1 if there is a Draw value attached to the variable. 
659
660 Use **directory** to return a list of all Draw global variables matching a pattern. 
661
662 **Example:** 
663 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{.cpp}
664 set a 1 
665 isdraw a 
666 === 0 
667
668 dset a 1 
669 isdraw a 
670 === 1 
671
672 circle c 0 0 1 0 5 
673 isdraw c 
674 === 1 
675
676 # to destroy all Draw objects with name containing curve 
677 foreach var [directory *curve*] {unset $var} 
678 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
679
680
681 @subsubsection occt_draw_3_2_2 whatis, dump
682
683 Syntax:
684
685 ~~~~~
686 whatis varname [varname ...] 
687 dump varname [varname ...] 
688 ~~~~~
689
690 **whatis** returns short information about a Draw variable. This is usually the type name. 
691
692 **dump** returns a brief type description, the coordinates, and if need be, the parameters of a Draw variable. 
693
694 **Example:** 
695 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{.cpp}
696 circle c 0 0 1 0 5 
697 whatis c 
698 c is a 2d curve 
699
700 dump c 
701
702 ***** Dump of c ***** 
703 Circle 
704 Center :0, 0 
705 XAxis :1, 0 
706 YAxis :-0, 1 
707 Radius :5 
708 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
709
710 **Note** The behavior of *whatis* on other variables (not Draw) is not excellent. 
711
712
713 @subsubsection occt_draw_3_2_3 renamevar, copy
714
715 Syntax:      
716 ~~~~~
717 renamevar varname tovarname [varname tovarname ...] 
718 copy varname tovarname [varname tovarname ...] 
719 ~~~~~
720
721   * **renamevar** changes the name of a Draw variable. The original variable will no longer exist. Note that the content is not modified. Only the name is changed. 
722   * **copy** creates a new variable with a copy of the content of an existing variable. The exact behavior of **copy** is type dependent; in the case of certain topological variables, the content may still be shared. 
723
724 **Example:** 
725 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{.cpp}
726 circle c1 0 0 1 0 5 
727 renamevar c1 c2 
728
729 # curves are copied, c2 will not be modified 
730 copy c2 c3 
731 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
732
733 @subsubsection occt_draw_3_2_4 datadir, save, restore
734
735 Syntax:
736 ~~~~~
737 datadir [directory] 
738 save variable [filename] 
739 restore filename [variablename] 
740 ~~~~~
741
742   * **datadir** without arguments prints the path of the current data directory. 
743   * **datadir** with an argument sets the data directory path. \
744
745 If the path starts with a dot (.) only the last directory name will be changed in the path. 
746
747   * **save** writes a file in the data directory with the content of a variable. By default the name of the file is the name of the variable. To give a different name use a second argument. 
748   * **restore** reads the content of a file in the data directory in a local variable. By default, the name of the variable is the name of the file. To give a different name, use a second argument. 
749
750 The exact content of the file is type-dependent. They are usually ASCII files and so, architecture independent. 
751
752 **Example:** 
753 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{.cpp}
754 # note how TCL accesses shell environment variables 
755 # using $env() 
756 datadir 
757 ==. 
758
759 datadir $env(WBCONTAINER)/data/default 
760 ==/adv_20/BAG/data/default 
761
762 box b 10 20 30 
763 save b theBox 
764 ==/adv_20/BAG/data/default/theBox 
765
766 # when TCL does not find a command it tries a shell command 
767 ls [datadir] 
768 == theBox 
769
770 restore theBox 
771 == theBox 
772 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
773
774 @subsection occt_draw_3_3 User defined commands
775
776 *DrawTrSurf* provides commands to create and display a Draw **geometric** variable from a *Geom_Geometry* object and also get a *Geom_Geometry* object from a Draw geometric variable name. 
777
778 *DBRep* provides commands to create and display a Draw **topological** variable from a *TopoDS_Shape* object and also get a *TopoDS_Shape* object from a Draw topological variable name. 
779
780 @subsubsection occt_draw_3_3_1 set
781
782 #### In *DrawTrSurf* package:
783
784 ~~~~~
785 void Set(Standard_CString& Name,const gp_Pnt& G) ; 
786 void Set(Standard_CString& Name,const gp_Pnt2d& G) ; 
787 void Set(Standard_CString& Name, 
788 const Handle(Geom_Geometry)& G) ; 
789 void Set(Standard_CString& Name, 
790 const Handle(Geom2d_Curve)& C) ; 
791 void Set(Standard_CString& Name, 
792 const Handle(Poly_Triangulation)& T) ; 
793 void Set(Standard_CString& Name, 
794 const Handle(Poly_Polygon3D)& P) ; 
795 void Set(Standard_CString& Name, 
796 const Handle(Poly_Polygon2D)& P) ; 
797 ~~~~~
798
799 #### In *DBRep* package:
800
801 ~~~~~
802 void Set(const Standard_CString Name, 
803 const TopoDS_Shape& S) ; 
804 ~~~~~
805
806 Example of *DrawTrSurf*
807
808 ~~~~~
809 Handle(Geom2d_Circle) C1 = new Geom2d_Circle 
810 (gce_MakeCirc2d (gp_Pnt2d(50,0,) 25)); 
811 DrawTrSurf::Set(char*, C1); 
812 ~~~~~
813
814 Example of *DBRep* 
815
816 ~~~~~
817 TopoDS_Solid B; 
818 B = BRepPrimAPI_MakeBox (10,10,10); 
819 DBRep::Set(char*,B); 
820 ~~~~~
821
822 @subsubsection occt_draw_3_3_2 get
823
824 #### In *DrawTrSurf* package:
825  
826 ~~~~~
827 Handle_Geom_Geometry Get(Standard_CString& Name) ; 
828 ~~~~~
829
830 #### In *DBRep* package:
831
832 ~~~~~
833 TopoDS_Shape Get(Standard_CString& Name, 
834 const TopAbs_ShapeEnum Typ = TopAbs_SHAPE, 
835 const Standard_Boolean Complain 
836 = Standard_True) ; 
837 ~~~~~
838
839 Example of *DrawTrSurf*
840
841 ~~~~~
842 Standard_Integer MyCommand 
843 (Draw_Interpretor& theCommands, 
844 Standard_Integer argc, char** argv) 
845 {...... 
846 // Creation of a Geom_Geometry from a Draw geometric 
847 // name 
848 Handle (Geom_Geometry) aGeom= DrawTrSurf::Get(argv[1]); 
849
850 ~~~~~
851
852 Example of *DBRep*
853
854 ~~~~~
855 Standard_Integer MyCommand 
856 (Draw_Interpretor& theCommands, 
857 Standard_Integer argc, char** argv) 
858 {...... 
859 // Creation of a TopoDS_Shape from a Draw topological 
860 // name 
861 TopoDS_Solid B = DBRep::Get(argv[1]); 
862
863 ~~~~~
864
865 @section occt_draw_4 Graphic Commands
866
867 Graphic commands are used to manage the Draw graphic system. Draw provides a 2d and a 3d viewer with up to 30 views. Views are numbered and the index of the view is displayed in the window’s title. Objects are displayed in all 2d views or in all 3d views, depending on their type. 2d objects can only be viewed in 2d views while 3d objects -- only in 3d views correspondingly. 
868
869 @subsection occt_draw_4_1 Axonometric viewer
870
871 @subsubsection occt_draw_4_1_1 view, delete
872
873 Syntax:                  
874 ~~~~~
875 view index type [X Y W H] 
876 delete [index] 
877 ~~~~~
878
879 **view** is the basic view creation command: it creates a new view with the given index. If a view with this index already exits, it is deleted. The view is created with default parameters and X Y W H are the position and dimensions of the window on the screen. Default values are 0, 0, 500, 500. 
880
881 As a rule it is far simpler either to use the procedures **axo**, **top**, **left** or to click on the desired view type in the menu under *Views* in the task bar.. 
882
883 **delete** deletes a view. If no index is given, all the views are deleted. 
884
885 Type selects from the following range: 
886
887   * *AXON* : Axonometric view
888   * *PERS* : Perspective view
889   * <i>+X+Y</i> : View on both axes (i.e. a top view), other codes are <i>-X+Y</i>, <i>+Y-Z</i>, etc.
890   * <i>-2D-</i> : 2d view
891
892 The index, the type, the current zoom are displayed in the window title . 
893
894 **Example:** 
895 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{.cpp}
896 # this is the content of the mu4 procedure 
897 proc mu4 {} { 
898 delete 
899 view 1 +X+Z 320 20 400 400 
900 view 2 +X+Y 320 450 400 400 
901 view 3 +Y+Z 728 20 400 400 
902 view 4 AXON 728 450 400 400 
903
904 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
905
906 See also: **axo, pers, top, bottom, left, right, front, back, mu4, v2d, av2d, smallview** 
907
908 @subsubsection occt_draw_4_1_2  axo, pers, top, ...
909
910 Syntax:      
911
912 ~~~~~
913 axo 
914 pers 
915 ... 
916 smallview type 
917 ~~~~~
918
919 All these commands are procedures used to define standard screen layout. They delete all existing views and create new ones. The layout usually complies with the European convention, i.e. a top view is under a front view. 
920
921   * **axo** creates a large window axonometric view;
922   * **pers** creates a large window perspective view;
923   * **top**, **bottom**, **left**, **right**, **front**, **back** create a large window axis view;
924   * **mu4** creates four small window views: front, left, top and axo.
925   * **v2d** creates a large window 2d view.
926   * **av2d** creates two small window views, one 2d and one axo
927   * **smallview** creates a view at the bottom right of the screen of the given type. 
928
929 See also: **view**, **delete** 
930
931 @subsubsection occt_draw_4_1_3 mu, md, 2dmu, 2dmd, zoom, 2dzoom
932
933 Syntax:
934
935 ~~~~~
936     mu [index] value 
937     2dmu [index] value 
938     zoom [index] value 
939     wzoom 
940 ~~~~~
941
942 * **mu** (magnify up) increases the zoom in one or several views by a factor of 10%. 
943 * **md** (magnify down) decreases the zoom by the inverse factor. **2dmu** and **2dmd** 
944 perform the same on one or all 2d views. 
945 * **zoom** and **2dzoom** set the zoom factor to a value specified by you. The current zoom factor is always displayed in the window’s title bar. Zoom 20 represents a full screen view in a large window; zoom 10, a full screen view in a small one. 
946 * **wzoom** (window zoom) allows you to select the area you want to zoom in on with the mouse. You will be prompted to give two of the corners of the area that you want to magnify and the rectangle so defined will occupy the window of the view. 
947
948 **Example:** 
949 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{.cpp}
950     # set a zoom of 2.5 
951     zoom 2.5 
952
953     # magnify by 10% 
954     mu 1 
955
956     # magnify by 20% 
957 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
958 See also: **fit**, **2dfit** 
959
960
961 @subsubsection occt_draw_4_14 pu, pd, pl, pr, 2dpu, 2dpd, 2dpl, 2dpr
962
963 Syntax:                  
964
965 ~~~~~
966 pu [index] 
967 pd [index] 
968 ~~~~~
969
970 The <i>p_</i> commands are used to pan. **pu** and **pd** pan up and down respectively; **pl** and **pr** pan to the left and to the right respectively. Each time the view is displaced by 40 pixels. When no index is given, all views will pan in the direction specified. 
971 ~~~~~
972 # you have selected one anonometric view
973 pu
974 # or
975 pu 1
976
977 # you have selected an mu4 view; the object in the third view will pan up
978 pu 3
979 ~~~~~
980 See also: **fit**, **2dfit** 
981
982
983 @subsubsection occt_draw_4_1_5 fit, 2dfit
984
985 Syntax:      
986
987 ~~~~~
988 fit [index] 
989 2dfit [index] 
990 ~~~~~
991
992 **fit** computes the best zoom and pans on the content of the view. The content of the view will be centered and fit the whole window. 
993
994 When fitting all views a unique zoom is computed for all the views. All views are on the same scale. 
995
996 **Example:** 
997 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{.cpp}
998 # fit only view 1 
999 fit 1 
1000 # fit all 2d views 
1001 2dfit 
1002 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1003 See also: **zoom**, **mu**, **pu** 
1004
1005
1006 @subsubsection occt_draw_4_1_6 u, d, l, r
1007
1008 Syntax:      
1009
1010 ~~~~~
1011 u [index] 
1012 d [index] 
1013 l [index] 
1014 r [index] 
1015 ~~~~~
1016
1017 **u**, **d**, **l**, **r** Rotate the object in view around its axis by five degrees up, down, left or right respectively. This command is restricted to axonometric and perspective views. 
1018
1019 **Example:** 
1020 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{.cpp}
1021 # rotate the view up 
1022
1023 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1024
1025 @subsubsection occt_draw_4_1_7 focal, fu, fd
1026
1027 Syntax:                  
1028 ~~~~~
1029 focal [f] 
1030 fu [index] 
1031 fd [index] 
1032 ~~~~~
1033
1034 * **focal** changes the vantage point in perspective views. A low f value increases the perspective effect; a high one give a perspective similar to that of an axonometric view. The default value is 500. 
1035 * **fu** and **fd** increase or decrease the focal value by 10%. **fd** makes the eye closer to the object. 
1036
1037 **Example:** 
1038 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{.cpp}
1039 pers 
1040 repeat 10 fd 
1041 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1042
1043 **Note**: Do not use a negative or null focal value. 
1044
1045 See also: **pers** 
1046
1047 @subsubsection occt_draw_4_1_8 color
1048
1049 Syntax: 
1050
1051 ~~~~~
1052 color index name 
1053 ~~~~~
1054
1055 **color** sets the color to a value. The index of the *color* is a value between 0 and 15. The name is an X window color name. The list of these can be found in the file *rgb.txt* in the X library directory. 
1056
1057 The default values are: 0 White, 1 Red, 2 Green, 3 Blue, 4 Cyan, 5 Gold, 6 Magenta, 7 Marron, 8 Orange, 9 Pink, 10 Salmon, 11 Violet, 12 Yellow, 13 Khaki, 14 Coral. 
1058
1059 **Example:** 
1060 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{.cpp}
1061 # change the value of blue 
1062 color 3 "navy blue" 
1063 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1064
1065
1066 **Note** that the color change will be visible on the next redraw of the views, for example, after *fit* or *mu*, etc. 
1067
1068 @subsubsection occt_draw_4_1_9 dtext
1069
1070 Syntax:      
1071 ~~~~~
1072 dtext [x y [z]] string 
1073 ~~~~~
1074
1075 **dtext** displays a string in all 3d or 2d views. If no coordinates are given, a graphic selection is required. If two coordinates are given, the text is created in a 2d view at the position specified. With 3 coordinates, the text is created in a 3d view. 
1076
1077 The coordinates are real space coordinates. 
1078
1079 **Example:** 
1080 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{.cpp}
1081 # mark the origins 
1082 dtext 0 0 bebop 
1083 dtext 0 0 0 bebop 
1084 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1085
1086 @subsubsection occt_draw_4_1_10 hardcopy, hcolor, xwd
1087
1088 Syntax:      
1089 ~~~~~
1090 hardcopy [index] 
1091 hcolor index width gray 
1092 xwd [index] filename 
1093 ~~~~~
1094
1095 * **hardcopy** creates a postcript file called a4.ps in the current directory. This file contains the postscript description of the view index, and will allow you to print the view. 
1096 * **hcolor** lets you change the aspect of lines in the postscript file. It allows to specify a width and a gray level for one of the 16 colors. **width** is measured in points with default value as 1, **gray** is the gray level from 0 = black to 1 = white with default value as 0. All colors are bound to the default values at the beginning. 
1097 * **xwd** creates an X window xwd file from an active view. By default, the index is set to1. To visualize an xwd file, use the unix command **xwud**. 
1098
1099 **Example:** 
1100 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{.cpp}
1101 # all blue lines (color 3) 
1102 # will be half-width and gray 
1103 hcolor 3 0.5 
1104
1105 # make a postscript file and print it 
1106 hardcopy 
1107 lpr a4.ps 
1108
1109 # make an xwd file and display it 
1110 xwd theview 
1111 xwud -in theview 
1112 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1113
1114 **Note:** When more than one view is present, specify the index of the view. 
1115
1116 Only use a postscript printer to print postscript files. 
1117
1118 See also: **color** 
1119
1120
1121 @subsubsection occt_draw_4_1_11 wclick, pick
1122
1123 Syntax:      
1124 ~~~~~
1125 wclick 
1126 pick index X Y Z b [nowait] 
1127 ~~~~~
1128
1129 **wclick** defers an event until the mouse button is clicked. The message <code>just click</code> is displayed. 
1130
1131 Use the **pick** command to get graphic input. The arguments must be names for variables where the results are stored. 
1132   * index: index of the view where the input was made.
1133   * X,Y,Z: 3d coordinates in real world.
1134   * b: b is the mouse button 1,2 or 3.
1135
1136 When there is an extra argument, its value is not used and the command does not wait for a click; the value of b may then be 0 if there has not been a click. 
1137
1138 This option is useful for tracking the pointer. 
1139
1140 **Note** that the results are stored in Draw numeric variables.
1141
1142 **Example:** 
1143 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{.cpp}
1144 # make a circle at mouse location 
1145 pick index x y z b 
1146 circle c x y z 0 0 1 1 0 0 0 30 
1147
1148 # make a dynamic circle at mouse location 
1149 # stop when a button is clicked 
1150 # (see the repaint command) 
1151
1152 dset b 0 
1153 while {[dval b] == 0} { 
1154 pick index x y z b nowait 
1155 circle c x y z 0 0 1 1 0 0 0 30 
1156 repaint 
1157
1158 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1159 See also: **repaint** 
1160
1161
1162 Draw provides commands to manage the display of objects. 
1163 * **display**, **donly** are used to display, 
1164 * **erase**, **clear**, **2dclear** to erase. 
1165 * **autodisplay** command is used to check whether variables are displayed when created. 
1166
1167 The variable name "." (dot) has a special status in Draw. Any Draw command expecting a Draw object as argument can be passed a dot. The meaning of the dot is the following. 
1168   * If the dot is an input argument, a graphic selection will be made. Instead of getting the object from a variable, Draw will ask you to select an object in a view.
1169   * If the dot is an output argument, an unnamed object will be created. Of course this makes sense only for graphic objects: if you create an unnamed number you will not be able to access it. This feature is used when you want to create objects for display only.
1170   * If you do not see what you expected while executing loops or sourcing files, use the **repaint** and **dflush** commands.
1171
1172 **Example:** 
1173 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{.cpp}
1174 # OK use dot to dump an object on the screen 
1175 dump . 
1176
1177 point . x y z 
1178
1179 #Not OK. display points on a curve c 
1180 # with dot no variables are created 
1181 for {set i 0} {$i <= 10} {incr i} { 
1182 cvalue c $i/10 x y z 
1183 point . x y z 
1184
1185
1186 # point p x y z 
1187 # would have displayed only one point 
1188 # because the precedent variable content is erased 
1189
1190 # point p$i x y z 
1191 # is an other solution, creating variables 
1192 # p0, p1, p2, .... 
1193
1194 # give a name to a graphic object 
1195 renamevar . x 
1196 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1197
1198
1199 @subsubsection occt_draw_4_1_12 autodisplay
1200
1201 Syntax:      
1202
1203 ~~~~~
1204 autodisplay [0/1] 
1205 ~~~~~
1206
1207 By default, Draw automatically displays any graphic object as soon as it is created. This behavior known as autodisplay can be removed with the command **autodisplay**. Without arguments, **autodisplay** toggles the autodisplay mode. The command always returns the current mode. 
1208
1209 When **autodisplay** is off, using the dot return argument is ineffective. 
1210
1211 **Example:** 
1212 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{.cpp}
1213 # c is displayed 
1214 circle c 0 0 1 0 5 
1215
1216 # toggle the mode 
1217 autodisplay 
1218 == 0 
1219 circle c 0 0 1 0 5 
1220
1221 # c is erased, but not displayed 
1222 display c 
1223 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1224
1225 @subsubsection occt_draw_4_1_13 display, donly
1226
1227 Syntax:      
1228 ~~~~~
1229 display varname [varname ...] 
1230 donly varname [varname ...] 
1231 ~~~~~
1232
1233 * **display** makes objects visible. 
1234 * **donly** *display only* makes objects visible and erases all other objects. It is very useful to extract one object from a messy screen. 
1235
1236 **Example:** 
1237 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{.cpp}
1238 \# to see all objects 
1239 foreach var [directory] {display $var} 
1240
1241 \# to select two objects and erase the other ones 
1242 donly . . 
1243 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1244
1245
1246 @subsubsection occt_draw_4_1_14 erase, clear, 2dclear
1247
1248 Syntax:      
1249
1250 ~~~~~
1251 erase [varname varname ...] 
1252 clear 
1253 2dclear 
1254 ~~~~~
1255
1256 **erase** removes objects from all views. **erase** without arguments erases everything in 2d and 3d. 
1257
1258 **clear** erases only 3d objects and **2dclear** only 2d objects. **erase** without arguments is similar to  **clear; 2dclear**.
1259
1260
1261 **Example:** 
1262 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{.cpp}
1263 # erase eveerything with a name starting with c_ 
1264 foreach var [directory c_*] {erase $var} 
1265
1266 # clear 2d views 
1267 2dclear 
1268 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1269
1270 @subsubsection occt_draw_4_1_14_1 disp, don, era
1271
1272 These commands have the same meaning as correspondingly display, donly and erase, but with the difference that they evaluate the arguments using glob pattern rules. For example, to display all objects with names d_1, d_2, d_3, etc. it is enouth to run the command:
1273 ~~~~~{.cpp}
1274 disp d_*
1275 ~~~~~
1276
1277 @subsubsection occt_draw_4_1_15 repaint, dflush
1278
1279
1280 Syntax:
1281
1282 ~~~~~
1283 repaint 
1284 dflush 
1285 ~~~~~
1286
1287 * **repaint** forces repainting of views. 
1288 * **dflush** flushes the graphic buffers. 
1289
1290 These commands are useful within loops or in scripts. 
1291
1292 When an object is modified or erased, the whole view must be repainted. To avoid doing this too many times, Draw sets up a flag and delays the repaint to the end of the command in which the new prompt is issued. In a script, you may want to display the result of a change immediately. If the flag is raised, **repaint** will repaint the views and clear the flag. 
1293
1294 Graphic operations are buffered by Draw (and also by the X system). Usually the buffer is flushed at the end of a command and before graphic selection. If you want to flush the buffer from inside a script, use the **dflush** command. 
1295
1296 See also: @ref occt_draw_4_1_11 "pick" command.  
1297
1298 @subsection occt_draw_4_2 AIS viewer -- view commands
1299
1300 @subsubsection occt_draw_4_2_1 vinit
1301
1302 Syntax:                  
1303 ~~~~~
1304 vinit 
1305 ~~~~~
1306 Creates a new View window with the specified *view_name*.
1307 By default the view is created in the viewer and in the graphic driver shared with the active view.
1308
1309 ~~~~
1310 name = {driverName/viewerName/viewName | viewerName/viewName | viewName}
1311 ~~~~
1312
1313 If *driverName* is not specified the driver will be shared with the active view.
1314 If *viewerName* is not specified the viewer will be shared with the active view.
1315
1316 @subsubsection occt_draw_4_2_2 vhelp
1317
1318 Syntax:
1319 ~~~~~
1320 vhelp 
1321 ~~~~~
1322 Displays help in the 3D viewer window. The help consists in a list of hotkeys and their functionalities. 
1323
1324 @subsubsection occt_draw_4_2_3 vtop
1325
1326 Syntax:
1327 ~~~~~
1328 vtop 
1329 ~~~~~
1330
1331 Displays top view in the 3D viewer window. Orientation +X+Y.
1332
1333 **Example:** 
1334 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{.cpp}
1335 vinit 
1336 box b 10 10 10 
1337 vdisplay b 
1338 vfit 
1339 vtop 
1340 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1341
1342 @subsubsection occt_draw_4_2_4 vaxo
1343
1344 Syntax:                  
1345 ~~~~~
1346 vaxo 
1347 ~~~~~
1348
1349 Displays axonometric view in the 3D viewer window. Orientation +X-Y+Z.
1350
1351 **Example:** 
1352 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~{.cpp}
1353 vinit 
1354 box b 10 10 10 
1355 vdisplay b 
1356 vfit 
1357 vaxo 
1358 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1359
1360 @subsubsection occt_draw_4_2_5 vsetbg
1361
1362 Syntax:                  
1363 ~~~~~
1364 vsetbg imagefile [filltype] 
1365 ~~~~~
1366
1367 Loads image file as background. *filltype* must be NONE, CENTERED, TILED or STRETCH. 
1368
1369 **Example:** 
1370 ~~~~~
1371 vinit 
1372 vsetbg myimage.brep CENTERED 
1373 ~~~~~
1374
1375 @subsubsection occt_draw_4_2_6 vclear
1376
1377 Syntax:                  
1378 ~~~~~
1379 vclear 
1380 ~~~~~
1381 Removes all objects from the viewer. 
1382
1383 @subsubsection occt_draw_4_2_7 vrepaint
1384
1385 Syntax:                  
1386 ~~~~~
1387 vrepaint 
1388 ~~~~~
1389 Forcibly redisplays the shape in the 3D viewer window. 
1390
1391 @subsubsection occt_draw_4_2_8 vfit
1392
1393 Syntax:                  
1394 ~~~~~
1395 vfit 
1396 ~~~~~
1397 Automatic zoom/panning. Objects in the view are visualized to occupy the maximum surface. 
1398
1399 @subsubsection occt_draw_4_2_9 vzfit
1400
1401 Syntax:                  
1402 ~~~~~
1403 vzfit 
1404 ~~~~~
1405
1406 Automatic depth panning. Objects in the view are visualized to occupy the maximum 3d space. 
1407
1408 @subsubsection occt_draw_4_2_10  vreadpixel
1409
1410 Syntax:     
1411 ~~~~~
1412 vreadpixel xPixel yPixel [{rgb|rgba|depth|hls|rgbf|rgbaf}=rgba] [name] 
1413 ~~~~~
1414 Read pixel value for active view.
1415
1416
1417 @subsubsection occt_draw_4_2_11  vselect
1418
1419 Syntax:     
1420 ~~~~~
1421 vselect x1 y1 [x2 y2 [x3 y3 ... xn yn]] [-allowoverlap 0|1] [shift_selection = 0|1]
1422 ~~~~~
1423
1424 Emulates different types of selection:
1425
1426   * single mouse click selection
1427   * selection with a rectangle having the upper left and bottom right corners in <i>(x1,y1)</i> and <i>(x2,y2)</i> respectively
1428   * selection with a polygon having the corners in pixel positions <i>(x1,y1), (x2,y2),…, (xn,yn)</i>
1429   * <i> -allowoverlap </i> manages overlap and inclusion detection in rectangular selection. If the flag is set to 1, both sensitives that were included completely and overlapped partially by defined rectangle will be detected, otherwise algorithm will chose only fully included sensitives. Default behavior is to detect only full inclusion.
1430   * any of these selections if shift_selection is set to 1.
1431
1432 @subsubsection occt_draw_4_2_12  vmoveto
1433
1434 Syntax:     
1435
1436 ~~~~~
1437 vmoveto x y
1438 ~~~~~
1439 Emulates cursor movement to pixel position (x,y).
1440
1441 @subsubsection occt_draw_4_2_13  vviewparams
1442
1443 Syntax:     
1444 ~~~~~
1445 vviewparams [-scale [s]] [-eye [x y z]] [-at [x y z]] [-up [x y z]] [-proj [x y z]] [-center x y] [-size sx]
1446 ~~~~~
1447 Gets or sets the current view parameters.
1448 * If called without arguments, all view parameters are printed.
1449 * The options are:
1450 *   -scale [s]    : prints or sets the relative scale of viewport.
1451 *   -eye [x y z]  : prints or sets the eye location.
1452 *   -at [x y z]   : prints or sets the view center.
1453 *   -up [x y z]   : prints or sets the up vector direction.
1454 *   -proj [x y z] : prints or sets the view direction.
1455 *   -center x y   : sets the screen center location in pixels.
1456 *   -size [sx]    : prints viewport projection width and height sizes or changes the size of its maximum dimension.
1457
1458 @subsubsection occt_draw_4_2_14  vchangeselected
1459
1460 Syntax:     
1461 ~~~~~
1462 vchangeselected shape
1463 ~~~~~
1464 Adds a shape to selection or removes one from it.
1465
1466 @subsubsection occt_draw_4_2_15  vzclipping
1467
1468 Syntax:     
1469 ~~~~~
1470 vzclipping [mode] [depth width]
1471 ~~~~~
1472 Gets or sets ZClipping mode, width and depth, where
1473  - *mode = OFF|BACK|FRONT|SLICE*
1474  - *depth* is a real value from segment [0,1]
1475  - *width* is a real value from segment [0,1]
1476
1477 @subsubsection occt_draw_4_2_16  vnbselected
1478
1479 Syntax:     
1480 ~~~~~
1481 vnbselected
1482 ~~~~~
1483 Returns the number of selected objects in the interactive context.
1484
1485 @subsubsection occt_draw_4_2_18  vpurgedisplay
1486
1487 Syntax:     
1488 ~~~~~
1489 vpurgedisplay [CollectorToo = 0|1]
1490 ~~~~~
1491 Removes structures which do not belong to objects displayed in neutral point.
1492
1493 @subsubsection occt_draw_4_2_19  vhlr
1494
1495 Syntax:     
1496 ~~~~~
1497 vhlr is_enabled={on|off} [show_hidden={1|0}]
1498 ~~~~~
1499 Hidden line removal algorithm:
1500  * <i>is_enabled</i> applies HLR algorithm.
1501  * <i>show_hidden</i> if equals to 1, hidden lines are drawn as dotted ones.
1502
1503 @subsubsection occt_draw_4_2_20  vhlrtype
1504
1505 Syntax:     
1506 ~~~~~
1507 vhlrtype  algo_type={algo|polyalgo} [shape_1 ... shape_n]
1508 ~~~~~
1509
1510 Changes the type of HLR algorithm used for shapes.
1511 If the algo_type is algo, the exact HLR algorithm is used, otherwise the polygonal algorithm is used for defined shapes. 
1512
1513 If no shape is specified through the command arguments, the given HLR algorithm_type is applied to all *AIS_Shape* isntances in the current context, and the command also changes the default HLR algorithm type.
1514
1515 **Note** that this command works with instances of *AIS_Shape* or derived classes only, other interactive object types are ignored.
1516
1517 @subsubsection occt_draw_4_2_21 vcamera
1518
1519 Syntax:
1520 ~~~~~
1521 vcamera [-ortho] [-projtype]
1522         [-persp]
1523         [-fovy   [Angle]] [-distance [Distance]]
1524         [-stereo] [-leftEye] [-rightEye]
1525         [-iod [Distance]] [-iodType    [absolute|relative]]
1526         [-zfocus [Value]] [-zfocusType [absolute|relative]]
1527 ~~~~~
1528
1529 Manages camera parameters.
1530 Prints the current value when the option is called without argument.
1531
1532 Orthographic camera:
1533  * -ortho -- activates orthographic projection.
1534  
1535 Perspective camera:
1536  * -persp -- activated perspective  projection (mono);
1537  * -fovy  -- field of view in y axis, in degrees;
1538  * -distance -- distance of eye from the camera center.
1539  
1540 Stereoscopic camera:
1541  * -stereo -- perspective  projection (stereo);
1542  * -leftEye -- perspective  projection (left  eye);
1543  * -rightEye -- perspective  projection (right eye);
1544  * -iod -- intraocular distance value;
1545  * -iodType -- distance type, absolute or relative;
1546  * -zfocus -- stereographic focus value;
1547  * -zfocusType -- focus type, absolute or relative.
1548
1549 **Example:**
1550 ~~~~~
1551 vinit
1552 box b 10 10 10
1553 vdisplay b
1554 vfit
1555 vcamera -persp
1556 ~~~~~
1557
1558 @subsubsection occt_draw_4_2_22 vstereo
1559
1560 Syntax:
1561 ~~~~~
1562 vstereo [0|1] [-mode Mode] [-reverse {0|1}] [-anaglyph Filter]
1563 ~~~~~
1564
1565 Defines the stereo output mode. The following modes are available:
1566  * quadBuffer -- OpenGL QuadBuffer stereo, requires driver support. Should be called BEFORE *vinit*!
1567  * anaglyph         -- Anaglyph glasses;
1568  * rowInterlaced    -- row-interlaced display;
1569  * columnInterlaced -- column-interlaced display;
1570  * chessBoard       -- chess-board output;
1571  * sideBySide       -- horizontal pair;
1572  * overUnder        -- vertical pair;
1573 Available Anaglyph filters for -anaglyph:
1574  * redCyan, redCyanSimple, yellowBlue, yellowBlueSimple, greenMagentaSimple.
1575
1576 **Example:**
1577 ~~~~~
1578 vinit
1579 box b 10 10 10
1580 vdisplay b
1581 vstereo 1
1582 vfit
1583 vcamera -stereo -iod 1
1584 vcamera -lefteye
1585 vcamera -righteye
1586 ~~~~~
1587
1588 @subsubsection occt_draw_4_2_23 vfrustumculling
1589
1590 Syntax:
1591 ~~~~~
1592 vfrustumculling [toEnable]
1593 ~~~~~
1594
1595 Enables/disables objects clipping.
1596
1597
1598 @subsection occt_draw_4_3 AIS viewer -- display commands
1599
1600 @subsubsection occt_draw_4_3_1 vdisplay
1601
1602 Syntax: 
1603 ~~~~~                 
1604 vdisplay [-noupdate|-update] [-local] [-mutable] [-neutral]
1605          [-trsfPers {pan|zoom|rotate|trihedron|full|none}=none] [-trsfPersPos X Y [Z]] [-3d|-2d|-2dTopDown]
1606          [-dispMode mode] [-highMode mode]
1607          [-layer index] [-top|-topmost|-overlay|-underlay]
1608          [-redisplay]
1609          name1 [name2] ... [name n]
1610 ~~~~~
1611
1612 Displays named objects.
1613 Option <i>-local</i> enables display of objects in the local selection context.
1614 Local selection context will be opened if there is not any.
1615
1616 * *noupdate* suppresses viewer redraw call.
1617 * *mutable* enables optimization for mutable objects.
1618 * *neutral* draws objects in the main viewer.
1619 * *layer* sets z-layer for objects. It can use <i>-overlay|-underlay|-top|-topmost</i> instead of <i>-layer index</i> for the default z-layers.
1620 * *top* draws objects on top of main presentations but below the topmost level.
1621 * *topmost* draws in overlay for 3D presentations with independent Depth.
1622 * *overlay* draws objects in overlay for 2D presentations (On-Screen-Display).
1623 * *underlay* draws objects in underlay for 2D presentations (On-Screen-Display).
1624 * *selectable|-noselect* controls selection of objects.
1625 * *trsfPers* sets transform persistence flags. Flag *full* allows to pan, zoom and rotate.
1626 * *trsfPersPos* sets an anchor point for transform persistence.
1627 * *2d|-2dTopDown* displays object in screen coordinates.
1628 * *dispmode* sets display mode for objects.
1629 * *highmode* sets highlight mode for objects.
1630 * *redisplay* recomputes presentation of objects.
1631
1632 **Example:** 
1633 ~~~~~ 
1634 vinit 
1635 box b 40 40 40 10 10 10 
1636 psphere s 20 
1637 vdisplay s b 
1638 vfit 
1639 ~~~~~ 
1640
1641 @subsubsection occt_draw_4_3_2 vdonly
1642
1643 Syntax:                  
1644 ~~~~~
1645 vdonly [-noupdate|-update] [name1] ...  [name n]
1646 ~~~~~ 
1647
1648 Displays only selected or named objects. If there are no selected or named objects, nothing is done. 
1649
1650 **Example:** 
1651 ~~~~~ 
1652 vinit 
1653 box b 40 40 40 10 10 10 
1654 psphere s 20 
1655 vdonly b 
1656 vfit
1657 ~~~~~ 
1658  
1659 @subsubsection occt_draw_4_3_3 vdisplayall
1660
1661 Syntax:                  
1662 ~~~~~ 
1663 vdisplayall [-local]
1664 ~~~~~ 
1665
1666 Displays all erased interactive objects (see vdir and vstate).
1667 Option <i>-local</i> enables displaying objects in the local selection context.
1668
1669 **Example:** 
1670 ~~~~~ 
1671 vinit 
1672 box b 40 40 40 10 10 10 
1673 psphere s 20 
1674 vdisplayall 
1675 vfit 
1676 ~~~~~ 
1677
1678 @subsubsection occt_draw_4_3_4 verase
1679
1680 Syntax:                  
1681 ~~~~~
1682 verase [name1] [name2] … [name n]
1683 ~~~~~ 
1684
1685 Erases some selected or named objects. If there are no selected or named objects, the whole viewer is erased. 
1686
1687 **Example:** 
1688 ~~~~~
1689 vinit 
1690 box b1 40 40 40 10 10 10 
1691 box b2 -40 -40 -40 10 10 10 
1692 psphere s 20 
1693 vdisplayall 
1694 vfit 
1695 # erase only first box 
1696 verase b1 
1697 # erase second box and sphere 
1698 verase
1699 ~~~~~ 
1700
1701 @subsubsection occt_draw_4_3_5 veraseall
1702
1703 Syntax:                  
1704 ~~~~~
1705 veraseall
1706 ~~~~~ 
1707
1708 Erases all objects displayed in the viewer. 
1709
1710 **Example:**
1711 ~~~~~ 
1712 vinit 
1713 box b1 40 40 40 10 10 10 
1714 box b2 -40 -40 -40 10 10 10 
1715 psphere s 20 
1716 vdisplayall 
1717 vfit 
1718 # erase only first box 
1719 verase b1 
1720 # erase second box and sphere 
1721 verseall
1722 ~~~~~ 
1723
1724 @subsubsection occt_draw_4_3_6 vsetdispmode
1725
1726 Syntax:                  
1727 ~~~~~
1728 vsetdispmode [name] mode(0,1,2,3)
1729 ~~~~~ 
1730
1731 Sets display mode for all, selected or named objects. 
1732 * *0* (*WireFrame*), 
1733 * *1* (*Shading*), 
1734 * *2* (*Quick HideLineremoval*), 
1735 * *3* (*Exact HideLineremoval*). 
1736
1737 **Example:** 
1738 ~~~~~
1739 vinit 
1740 box b 10 10 10 
1741 vdisplay b 
1742 vsetdispmode 1 
1743 vfit
1744 ~~~~~
1745  
1746 @subsubsection occt_draw_4_3_7 vdisplaytype
1747
1748 Syntax:                  
1749 ~~~~~
1750 vdisplaytype type
1751 ~~~~~ 
1752
1753 Displays all objects of a given type. 
1754 The following types are possible: *Point*, *Axis*, *Trihedron*, *PlaneTrihedron*, *Line*, *Circle*, *Plane*, *Shape*, *ConnectedShape*, *MultiConn.Shape*, *ConnectedInter.*, *MultiConn.*, *Constraint* and *Dimension*. 
1755
1756 @subsubsection occt_draw_4_3_8 verasetype
1757
1758 Syntax:                  
1759 ~~~~~
1760 verasetype type
1761 ~~~~~ 
1762
1763 Erases all objects of a given type. 
1764 Possible type is *Point*, *Axis*, *Trihedron*, *PlaneTrihedron*, *Line*, *Circle*, *Plane*, *Shape*, *ConnectedShape*, *MultiConn.Shape*, *ConnectedInter.*, *MultiConn.*, *Constraint* and *Dimension*. 
1765
1766 @subsubsection occt_draw_4_3_9 vtypes
1767
1768 Syntax:                  
1769 ~~~~~
1770 vtypes
1771 ~~~~~ 
1772
1773 Makes a list of known types and signatures in AIS. 
1774
1775 @subsubsection occt_draw_4_3_10 vaspects
1776
1777 Syntax:
1778 ~~~~~
1779 vaspects [-noupdate|-update] [name1 [name2 [...]] | -defaults]
1780          [-setVisibility 0|1]
1781          [-setColor ColorName] [-setcolor R G B] [-unsetColor]
1782          [-setMaterial MatName] [-unsetMaterial]
1783          [-setTransparency Transp] [-unsetTransparency]
1784          [-setWidth LineWidth] [-unsetWidth]
1785          [-setLineType {solid|dash|dot|dotDash}] [-unsetLineType]
1786          [-freeBoundary {off/on | 0/1}]
1787          [-setFreeBoundaryWidth Width] [-unsetFreeBoundaryWidth]
1788          [-setFreeBoundaryColor {ColorName | R G B}] [-unsetFreeBoundaryColor]
1789          [-subshapes subname1 [subname2 [...]]]
1790          [-isoontriangulation 0|1]
1791          [-setMaxParamValue {value}]
1792
1793 ~~~~~
1794
1795 Manages presentation properties of all, selected or named objects.
1796 * *-subshapes* -- assigns presentation properties to the specified sub-shapes.
1797 * *-defaults* -- assigns presentation properties to all objects that do not have their own specified properties and to all objects to be displayed in the future.
1798 If *-defaults* option is used there should not be any names of objects and *-subshapes* specifier.
1799
1800 Aliases:
1801 ~~~~~
1802 vsetcolor [-noupdate|-update] [name] ColorName
1803
1804 ~~~~~
1805
1806
1807 Manages presentation properties (color, material, transparency) of all objects, selected or named.
1808
1809 **Color**. The *ColorName* can be: *BLACK*, *MATRAGRAY*, *MATRABLUE*, *ALICEBLUE*, *ANTIQUEWHITE*, *ANTIQUEWHITE1*, *ANTIQUEWHITE2*, *ANTIQUEWHITE3*, *ANTIQUEWHITE4*, *AQUAMARINE1*, *AQUAMARINE2*, *AQUAMARINE4*, *AZURE*, *AZURE2*, *AZURE3*, *AZURE4*, *BEIGE*, *BISQUE*, *BISQUE2*, *BISQUE3*, *BISQUE4*, *BLANCHEDALMOND*, *BLUE1*, *BLUE2*, *BLUE3*, *BLUE4*, *BLUEVIOLET*, *BROWN*, *BROWN1*, *BROWN2*, *BROWN3*, *BROWN4*, *BURLYWOOD*, *BURLYWOOD1*, *BURLYWOOD2*, *BURLYWOOD3*, *BURLYWOOD4*, *CADETBLUE*, *CADETBLUE1*, *CADETBLUE2*, *CADETBLUE3*, *CADETBLUE4*, *CHARTREUSE*, *CHARTREUSE1*, *CHARTREUSE2*, *CHARTREUSE3*, *CHARTREUSE4*, *CHOCOLATE*, *CHOCOLATE1*, *CHOCOLATE2*, *CHOCOLATE3*, *CHOCOLATE4*, *CORAL*, *CORAL1*, *CORAL2*, *CORAL3*, *CORAL4*, *CORNFLOWERBLUE*, *CORNSILK1*, *CORNSILK2*, *CORNSILK3*, *CORNSILK4*, *CYAN1*, *CYAN2*, *CYAN3*, *CYAN4*, *DARKGOLDENROD*, *DARKGOLDENROD1*, *DARKGOLDENROD2*, *DARKGOLDENROD3*, *DARKGOLDENROD4*, *DARKGREEN*, *DARKKHAKI*, *DARKOLIVEGREEN*, *DARKOLIVEGREEN1*, *DARKOLIVEGREEN2*, *DARKOLIVEGREEN3*, *DARKOLIVEGREEN4*, *DARKORANGE*, *DARKORANGE1*, *DARKORANGE2*, *DARKORANGE3*, *DARKORANGE4*, *DARKORCHID*, *DARKORCHID1*, *DARKORCHID2*, *DARKORCHID3*, *DARKORCHID4*, *DARKSALMON*, *DARKSEAGREEN*, *DARKSEAGREEN1*, *DARKSEAGREEN2*, *DARKSEAGREEN3*, *DARKSEAGREEN4*, *DARKSLATEBLUE*, *DARKSLATEGRAY1*, *DARKSLATEGRAY2*, *DARKSLATEGRAY3*, *DARKSLATEGRAY4*, *DARKSLATEGRAY*, *DARKTURQUOISE*, *DARKVIOLET*, *DEEPPINK*, *DEEPPINK2*, *DEEPPINK3*, *DEEPPINK4*, *DEEPSKYBLUE1*, *DEEPSKYBLUE2*, *DEEPSKYBLUE3*, *DEEPSKYBLUE4*, *DODGERBLUE1*, *DODGERBLUE2*, *DODGERBLUE3*, *DODGERBLUE4*, *FIREBRICK*, *FIREBRICK1*, *FIREBRICK2*, *FIREBRICK3*, *FIREBRICK4*, *FLORALWHITE*, *FORESTGREEN*, *GAINSBORO*, *GHOSTWHITE*, *GOLD*, *GOLD1*, *GOLD2*, *GOLD3*, *GOLD4*, *GOLDENROD*, *GOLDENROD1*, *GOLDENROD2*, *GOLDENROD3*, *GOLDENROD4*, *GRAY*, *GRAY0*, *GRAY1*, *GRAY10*, *GRAY11*, *GRAY12*, *GRAY13*, *GRAY14*, *GRAY15*, *GRAY16*, *GRAY17*, *GRAY18*, *GRAY19*, *GRAY2*, *GRAY20*, *GRAY21*, *GRAY22*, *GRAY23*, *GRAY24*, *GRAY25*, *GRAY26*, *GRAY27*, *GRAY28*, *GRAY29*, *GRAY3*, *GRAY30*, *GRAY31*, *GRAY32*, *GRAY33*, *GRAY34*, *GRAY35*, *GRAY36*, *GRAY37*, *GRAY38*, *GRAY39*, *GRAY4*, *GRAY40*, *GRAY41*, *GRAY42*, *GRAY43*, *GRAY44*, *GRAY45*, *GRAY46*, *GRAY47*, *GRAY48*, *GRAY49*, *GRAY5*, *GRAY50*, *GRAY51*, *GRAY52*, *GRAY53*, *GRAY54*, *GRAY55*, *GRAY56*, *GRAY57*, *GRAY58*, *GRAY59*, *GRAY6*, *GRAY60*, *GRAY61*, *GRAY62*, *GRAY63*, *GRAY64*, *GRAY65*, *GRAY66*, *GRAY67*, *GRAY68*, *GRAY69*, *GRAY7*, *GRAY70*, *GRAY71*, *GRAY72*, *GRAY73*, *GRAY74*, *GRAY75*, *GRAY76*, *GRAY77*, *GRAY78*, *GRAY79*, *GRAY8*, *GRAY80*, *GRAY81*, *GRAY82*, *GRAY83*, *GRAY85*, *GRAY86*, *GRAY87*, *GRAY88*, *GRAY89*, *GRAY9*, *GRAY90*, *GRAY91*, *GRAY92*, *GRAY93*, *GRAY94*, *GRAY95*, *GREEN*, *GREEN1*, *GREEN2*, *GREEN3*, *GREEN4*, *GREENYELLOW*, *GRAY97*, *GRAY98*, *GRAY99*, *HONEYDEW*, *HONEYDEW2*, *HONEYDEW3*, *HONEYDEW4*, *HOTPINK*, *HOTPINK1*, *HOTPINK2*, *HOTPINK3*, *HOTPINK4*, *INDIANRED*, *INDIANRED1*, *INDIANRED2*, *INDIANRED3*, *INDIANRED4*, *IVORY*, *IVORY2*, *IVORY3*, *IVORY4*, *KHAKI*, *KHAKI1*, *KHAKI2*, *KHAKI3*, *KHAKI4*, *LAVENDER*, *LAVENDERBLUSH1*, *LAVENDERBLUSH2*, *LAVENDERBLUSH3*, *LAVENDERBLUSH4*, *LAWNGREEN*, *LEMONCHIFFON1*, *LEMONCHIFFON2*, *LEMONCHIFFON3*, *LEMONCHIFFON4*, *LIGHTBLUE*, *LIGHTBLUE1*, *LIGHTBLUE2*, *LIGHTBLUE3*, *LIGHTBLUE4*, *LIGHTCORAL*, *LIGHTCYAN1*, *LIGHTCYAN2*, *LIGHTCYAN3*, *LIGHTCYAN4*, *LIGHTGOLDENROD*, *LIGHTGOLDENROD1*, *LIGHTGOLDENROD2*, *LIGHTGOLDENROD3*, *LIGHTGOLDENROD4*, *LIGHTGOLDENRODYELLOW*, *LIGHTGRAY*, *LIGHTPINK*, *LIGHTPINK1*, *LIGHTPINK2*, *LIGHTPINK3*, *LIGHTPINK4*, *LIGHTSALMON1*, *LIGHTSALMON2*, *LIGHTSALMON3*, *LIGHTSALMON4*, *LIGHTSEAGREEN*, *LIGHTSKYBLUE*, *LIGHTSKYBLUE1*, *LIGHTSKYBLUE2*, *LIGHTSKYBLUE3*, *LIGHTSKYBLUE4*, *LIGHTSLATEBLUE*, *LIGHTSLATEGRAY*, *LIGHTSTEELBLUE*, *LIGHTSTEELBLUE1*, *LIGHTSTEELBLUE2*, *LIGHTSTEELBLUE3*, *LIGHTSTEELBLUE4*, *LIGHTYELLOW*, *LIGHTYELLOW2*, *LIGHTYELLOW3*, *LIGHTYELLOW4*, *LIMEGREEN*, *LINEN*, *MAGENTA1*, *MAGENTA2*, *MAGENTA3*, *MAGENTA4*, *MAROON*, *MAROON1*, *MAROON2*, *MAROON3*, *MAROON4*, *MEDIUMAQUAMARINE*, *MEDIUMORCHID*, *MEDIUMORCHID1*, *MEDIUMORCHID2*, *MEDIUMORCHID3*, *MEDIUMORCHID4*, *MEDIUMPURPLE*, *MEDIUMPURPLE1*, *MEDIUMPURPLE2*, *MEDIUMPURPLE3*, *MEDIUMPURPLE4*, *MEDIUMSEAGREEN*, *MEDIUMSLATEBLUE*, *MEDIUMSPRINGGREEN*, *MEDIUMTURQUOISE*, *MEDIUMVIOLETRED*, *MIDNIGHTBLUE*, *MINTCREAM*, *MISTYROSE*, *MISTYROSE2*, *MISTYROSE3*, *MISTYROSE4*, *MOCCASIN*, *NAVAJOWHITE1*, *NAVAJOWHITE2*, *NAVAJOWHITE3*, *NAVAJOWHITE4*, *NAVYBLUE*, *OLDLACE*, *OLIVEDRAB*, *OLIVEDRAB1*, *OLIVEDRAB2*, *OLIVEDRAB3*, *OLIVEDRAB4*, *ORANGE*, *ORANGE1*, *ORANGE2*, *ORANGE3*, *ORANGE4*, *ORANGERED*, *ORANGERED1*, *ORANGERED2*, *ORANGERED3*, *ORANGERED4*, *ORCHID*, *ORCHID1*, *ORCHID2*, *ORCHID3*, *ORCHID4*, *PALEGOLDENROD*, *PALEGREEN*, *PALEGREEN1*, *PALEGREEN2*, *PALEGREEN3*, *PALEGREEN4*, *PALETURQUOISE*, *PALETURQUOISE1*, *PALETURQUOISE2*, *PALETURQUOISE3*, *PALETURQUOISE4*, *PALEVIOLETRED*, *PALEVIOLETRED1*, *PALEVIOLETRED2*, *PALEVIOLETRED3*, *PALEVIOLETRED4*, *PAPAYAWHIP*, *PEACHPUFF*, *PEACHPUFF2*, *PEACHPUFF3*, *PEACHPUFF4*, *PERU*, *PINK*, *PINK1*, *PINK2*, *PINK3*, *PINK4*, *PLUM*, *PLUM1*, *PLUM2*, *PLUM3*, *PLUM4*, *POWDERBLUE*, *PURPLE*, *PURPLE1*, *PURPLE2*, *PURPLE3*, *PURPLE4*, *RED*, *RED1*, *RED2*, *RED3*, *RED4*, *ROSYBROWN*, *ROSYBROWN1*, *ROSYBROWN2*, *ROSYBROWN3*, *ROSYBROWN4*, *ROYALBLUE*, *ROYALBLUE1*, *ROYALBLUE2*, *ROYALBLUE3*, *ROYALBLUE4*, *SADDLEBROWN*, *SALMON*, *SALMON1*, *SALMON2*, *SALMON3*, *SALMON4*, *SANDYBROWN*, *SEAGREEN*, *SEAGREEN1*, *SEAGREEN2*, *SEAGREEN3*, *SEAGREEN4*, *SEASHELL*, *SEASHELL2*, *SEASHELL3*, *SEASHELL4*, *BEET*, *TEAL*, *SIENNA*, *SIENNA1*, *SIENNA2*, *SIENNA3*, *SIENNA4*, *SKYBLUE*, *SKYBLUE1*, *SKYBLUE2*, *SKYBLUE3*, *SKYBLUE4*, *SLATEBLUE*, *SLATEBLUE1*, *SLATEBLUE2*, *SLATEBLUE3*, *SLATEBLUE4*, *SLATEGRAY1*, *SLATEGRAY2*, *SLATEGRAY3*, *SLATEGRAY4*, *SLATEGRAY*, *SNOW*, *SNOW2*, *SNOW3*, *SNOW4*, *SPRINGGREEN*, *SPRINGGREEN2*, *SPRINGGREEN3*, *SPRINGGREEN4*, *STEELBLUE*, *STEELBLUE1*, *STEELBLUE2*, *STEELBLUE3*, *STEELBLUE4*, *TAN*, *TAN1*, *TAN2*, *TAN3*, *TAN4*, *THISTLE*, *THISTLE1*, *THISTLE2*, *THISTLE3*, *THISTLE4*, *TOMATO*, *TOMATO1*, *TOMATO2*, *TOMATO3*, *TOMATO4*, *TURQUOISE*, *TURQUOISE1*, *TURQUOISE2*, *TURQUOISE3*, *TURQUOISE4*, *VIOLET*, *VIOLETRED*, *VIOLETRED1*, *VIOLETRED2*, *VIOLETRED3*, *VIOLETRED4*, *WHEAT*, *WHEAT1*, *WHEAT2*, *WHEAT3*, *WHEAT4*, *WHITE*, *WHITESMOKE*, *YELLOW*, *YELLOW1*, *YELLOW2*, *YELLOW3*, *YELLOW4* and *YELLOWGREEN*.
1810 ~~~~~
1811 vaspects    [name] [-setcolor ColorName] [-setcolor R G B] [-unsetcolor]
1812 vsetcolor   [name] ColorName
1813 vunsetcolor [name]
1814 ~~~~~
1815
1816 **Transparency. The *Transp* may be between 0.0 (opaque) and 1.0 (fully transparent).
1817 **Warning**: at 1.0 the shape becomes invisible.
1818 ~~~~~
1819 vaspects           [name] [-settransparency Transp] [-unsettransparency]
1820 vsettransparency   [name] Transp
1821 vunsettransparency [name]
1822 ~~~~~
1823
1824 **Material**. The *MatName* can be *BRASS*, *BRONZE*, *COPPER*, *GOLD*, *PEWTER*, *PLASTER*, *PLASTIC*, *SILVER*, *STEEL*, *STONE*, *SHINY_PLASTIC*, *SATIN*, *METALIZED*, *NEON_GNC*, *CHROME*, *ALUMINIUM*, *OBSIDIAN*, *NEON_PHC*, *JADE*, *WATER*, *GLASS*, *DIAMOND* or *CHARCOAL*.
1825 ~~~~~
1826 vaspects       [name] [-setmaterial MatName] [-unsetmaterial]
1827 vsetmaterial   [name] MatName
1828 vunsetmaterial [name]
1829 ~~~~~
1830
1831 **Line width**. Specifies width of the edges. The *LineWidth* may be between 0.0 and 10.0.
1832 ~~~~~
1833 vaspects    [name] [-setwidth LineWidth] [-unsetwidth]
1834 vsetwidth   [name] LineWidth
1835 vunsetwidth [name]
1836 ~~~~~
1837
1838 **Example:**
1839 ~~~~~
1840 vinit
1841 box b 10 10 10
1842 vdisplay b
1843 vfit
1844
1845 vsetdispmode b 1
1846 vaspects -setcolor red -settransparency 0.2
1847 vrotate 10 10 10
1848 ~~~~~
1849
1850
1851
1852
1853
1854
1855 @subsubsection occt_draw_4_3_11 vsetshading
1856
1857 Syntax:                  
1858 ~~~~~
1859 vsetshading shapename [coefficient]
1860 ~~~~~ 
1861
1862 Sets deflection coefficient that defines the quality of the shape’s representation in the shading mode. Default coefficient is 0.0008. 
1863
1864 **Example:** 
1865 ~~~~~
1866 vinit 
1867 psphere s 20 
1868 vdisplay s 
1869 vfit 
1870 vsetdispmode 1 
1871 vsetshading s 0.005
1872 ~~~~~
1873  
1874 @subsubsection occt_draw_4_3_12 vunsetshading
1875
1876 Syntax:                  
1877 ~~~~~
1878 vunsetshading [shapename]
1879 ~~~~~ 
1880
1881 Sets default deflection coefficient (0.0008) that defines the quality of the shape’s representation in the shading mode.
1882
1883 @subsubsection occt_draw_4_3_13 vsetam
1884
1885 Syntax:                  
1886 ~~~~~
1887 vsetam [shapename] mode
1888 ~~~~~ 
1889
1890 Activates selection mode for all selected or named shapes: 
1891 * *0* for *shape* itself, 
1892 * *1* (*vertices*), 
1893 * *2* (*edges*), 
1894 * *3* (*wires*), 
1895 * *4* (*faces*), 
1896 * *5* (*shells*),
1897 * *6* (*solids*),
1898 * *7* (*compounds*).
1899  
1900 **Example:** 
1901 ~~~~~
1902 vinit 
1903 box b 10 10 10 
1904 vdisplay b 
1905 vfit 
1906 vsetam b 2
1907 ~~~~~
1908  
1909 @subsubsection occt_draw_4_3_14 vunsetam
1910
1911 Syntax:                  
1912 ~~~~~
1913 vunsetam
1914 ~~~~~ 
1915
1916 Deactivates all selection modes for all shapes. 
1917
1918 @subsubsection occt_draw_4_3_15 vdump
1919
1920 Syntax:                  
1921 ~~~~~
1922 vdump <filename>.{png|bmp|jpg|gif} [-width Width -height Height]
1923       [-buffer rgb|rgba|depth=rgb]
1924       [-stereo mono|left|right|blend|sideBySide|overUnder=mono]
1925
1926 ~~~~~ 
1927
1928 Extracts the contents of the viewer window to a image file.
1929
1930 @subsubsection occt_draw_4_3_16 vdir
1931
1932 Syntax:                  
1933 ~~~~~
1934 vdir
1935 ~~~~~ 
1936
1937 Displays the list of displayed objects. 
1938
1939 @subsubsection occt_draw_4_3_17 vsub
1940
1941 Syntax:                  
1942 ~~~~~
1943 vsub 0/1(on/off)[shapename]
1944 ~~~~~ 
1945
1946 Hilights/unhilights named or selected objects which are displayed at neutral state with subintensity color.
1947  
1948 **Example:** 
1949 ~~~~~
1950 vinit 
1951 box b 10 10 10 
1952 psphere s 20 
1953 vdisplay b s 
1954 vfit 
1955 vsetdispmode 1 
1956 vsub b 1
1957 ~~~~~ 
1958
1959 @subsubsection occt_draw_4_3_20 vsensdis
1960
1961 Syntax:                  
1962 ~~~~~
1963 vsensdis
1964 ~~~~~ 
1965
1966 Displays active entities (sensitive entities of one of the standard types corresponding to active selection modes). 
1967
1968 Standard entity types are those defined in Select3D package: 
1969   * sensitive box
1970   * sensitive face
1971   * sensitive curve
1972   * sensitive segment
1973   * sensitive circle
1974   * sensitive point
1975   * sensitive triangulation
1976   * sensitive triangle
1977 Custom (application-defined) sensitive entity types are not processed by this command. 
1978
1979 @subsubsection occt_draw_4_3_21 vsensera
1980
1981 Syntax:                  
1982 ~~~~~
1983 vsensera
1984 ~~~~~ 
1985
1986 Erases active entities. 
1987
1988 @subsubsection occt_draw_4_3_23 vr
1989
1990 Syntax:                  
1991 ~~~~~
1992 vr filename
1993 ~~~~~ 
1994
1995 Reads shape from BREP-format file and displays it in the viewer. 
1996
1997 **Example:** 
1998 ~~~~~
1999 vinit 
2000 vr myshape.brep
2001 ~~~~~
2002  
2003 @subsubsection occt_draw_4_3_24 vstate
2004
2005 Syntax:                  
2006 ~~~~~
2007 vstate [-entities] [-hasSelected] [name1] ... [nameN]
2008 ~~~~~ 
2009
2010 Reports show/hidden state for selected or named objects:
2011  * *entities* -- prints low-level information about detected entities;
2012  * *hasSelected* -- prints 1 if the context has a selected shape and 0 otherwise.
2013
2014 @subsubsection occt_draw_4_3_25 vraytrace
2015
2016 Syntax:
2017 ~~~~~
2018 vraytrace [0/1]
2019 ~~~~~
2020
2021 Turns on/off ray tracing renderer.
2022
2023 @subsubsection occt_draw_4_3_26 vrenderparams
2024
2025 Syntax:
2026 ~~~~~
2027 vrenderparams [-rayTrace|-raster] [-rayDepth 0..10] [-shadows {on|off}]
2028               [-reflections {on|off}] [-fsaa {on|off}] [-gleam {on|off}]
2029               [-gi {on|off}] [-brng {on|off}] [-env {on|off}]
2030               [-shadin {color|flat|gouraud|phong}]
2031 ~~~~~
2032
2033 Manages rendering parameters:
2034 * rayTrace     -- Enables  GPU ray-tracing
2035 * raster       -- Disables GPU ray-tracing
2036 * rayDepth     -- Defines maximum ray-tracing depth
2037 * shadows      -- Enables/disables shadows rendering
2038 * reflections  -- Enables/disables specular reflections
2039 * fsaa         -- Enables/disables adaptive anti-aliasing
2040 * gleam        -- Enables/disables transparency shadow effects
2041 * gi           -- Enables/disables global illumination effects
2042 * brng         -- Enables/disables blocked RNG (fast coherent PT)
2043 * env          -- Enables/disables environment map background
2044 * shadingModel -- Controls shading model from enumeration color, flat, gouraud, phong
2045
2046 Unlike *vcaps*, these parameters dramatically change visual properties.
2047 The command is intended to control presentation quality depending on hardware capabilities and performance.
2048
2049 **Example:**
2050 ~~~~~
2051 vinit
2052 box b 10 10 10
2053 vdisplay b
2054 vfit
2055 vraytrace 1
2056 vrenderparams -shadows 1 -reflections 1 -fsaa 1
2057 ~~~~~
2058 @subsubsection occt_draw_4_3_27 vshaderprog
2059
2060 Syntax:
2061 ~~~~~
2062    'vshaderprog [name] pathToVertexShader pathToFragmentShader'
2063 or 'vshaderprog [name] off'   to disable GLSL program
2064 or 'vshaderprog [name] phong' to enable per-pixel lighting calculations
2065 ~~~~~
2066
2067 Enables rendering using a shader program.
2068
2069 @subsubsection occt_draw_4_3_28 vsetcolorbg
2070
2071 Syntax:
2072 ~~~~~
2073 vsetcolorbg r g b
2074 ~~~~~
2075
2076 Sets background color.
2077
2078 **Example:**
2079 ~~~~~
2080 vinit
2081 vsetcolorbg 200 0 200
2082 ~~~~~
2083
2084 @subsection occt_draw_4_4 AIS viewer -- object commands
2085
2086 @subsubsection occt_draw_4_4_1 vtrihedron
2087
2088 Syntax:                  
2089 ~~~~~
2090 vtrihedron name [-dispMode {wf|sh|wireframe|shading}]
2091                 [-origin x y z ]
2092                 [-zaxis u v w -xaxis u v w ]
2093                 [-drawaxes {X|Y|Z|XY|YZ|XZ|XYZ}]
2094                 [-hidelabels {on|off}]"
2095                 [-label {XAxis|YAxis|ZAxis} value]"
2096                 [-attribute {XAxisLength|YAxisLength|ZAxisLength
2097                                         |TubeRadiusPercent|ConeRadiusPercent"
2098                                         |ConeLengthPercent|OriginRadiusPercent"
2099                                         |ShadingNumberOfFacettes} value]"
2100                 [-color {Origin|XAxis|YAxis|ZAxis|XOYAxis|YOZAxis"
2101                                         |XOZAxis|Whole} {r g b | colorName}]"
2102                 [-textcolor {r g b | colorName}]"
2103                 [-arrowscolor {r g b | colorName}]"
2104                 [-priority {Origin|XAxis|YAxis|ZAxis|XArrow"
2105                                         |YArrow|ZArrow|XOYAxis|YOZAxis"
2106                                         |XOZAxis|Whole} value]
2107
2108 ~~~~~ 
2109
2110 Creates a new *AIS_Trihedron* object or changes existing trihedron. If no argument is set, the default trihedron (0XYZ) is created.
2111
2112 **Example:** 
2113 ~~~~~
2114 vinit 
2115 vtrihedron tr1
2116
2117 vtrihedron t2 -dispmode shading -origin -200 -200 -300
2118 vtrihedron t2 -color XAxis Quantity_NOC_RED
2119 vtrihedron t2 -color YAxis Quantity_NOC_GREEN
2120 vtrihedron t2 -color ZAxis|Origin Quantity_NOC_BLUE1
2121 ~~~~~ 
2122
2123 @subsubsection occt_draw_4_4_2 vplanetri
2124
2125 Syntax:                  
2126 ~~~~~
2127 vplanetri name
2128 ~~~~~ 
2129
2130 Creates a plane from a trihedron selection. If no arguments are set, the default plane is created. 
2131
2132
2133 @subsubsection occt_draw_4_4_3 vsize
2134
2135 Syntax:                  
2136 ~~~~~
2137 vsize [name] [size]
2138 ~~~~~ 
2139
2140 Changes the size of a named or selected trihedron. If the name is not defined: it affects the selected trihedrons otherwise nothing is done. If the value is not defined, it is set to 100 by default.
2141  
2142 **Example:** 
2143 ~~~~~
2144 vinit 
2145 vtrihedron tr1 
2146 vtrihedron tr2 0 0 0 1 0 0 1 0 0 
2147 vsize tr2 400
2148 ~~~~~ 
2149
2150 @subsubsection occt_draw_4_4_4 vaxis
2151
2152 Syntax:                  
2153 ~~~~~
2154 vaxis name [Xa Ya Za Xb Yb Zb]
2155 ~~~~~ 
2156
2157 Creates an axis. If  the values are not defined, an axis is created by interactive selection of two vertices or one edge
2158  
2159 **Example:** 
2160 ~~~~~
2161 vinit 
2162 vtrihedron tr 
2163 vaxis axe1 0 0 0 1 0 0 
2164 ~~~~~
2165
2166 @subsubsection occt_draw_4_4_5 vaxispara
2167
2168 Syntax:                  
2169 ~~~~~
2170 vaxispara name
2171 ~~~~~ 
2172
2173 Creates an axis by interactive selection of an edge and a vertex. 
2174
2175 @subsubsection occt_draw_4_4_6 vaxisortho
2176
2177 Syntax:                  
2178 ~~~~~
2179 vaxisotrho name
2180 ~~~~~ 
2181
2182 Creates an axis by interactive selection of an edge and a vertex. The axis will be orthogonal to the selected edge. 
2183
2184 @subsubsection occt_draw_4_4_7 vpoint
2185
2186 Syntax:                  
2187 ~~~~~
2188 vpoint name [Xa Ya Za]
2189 ~~~~~ 
2190
2191 Creates a point from coordinates. If the values are not defined, a point is created by interactive selection of a vertice or an edge (in the center of the edge). 
2192
2193 **Example:** 
2194 ~~~~~
2195 vinit 
2196 vpoint p 0 0 0 
2197 ~~~~~
2198
2199 @subsubsection occt_draw_4_4_8 vplane
2200
2201 Syntax:                  
2202 ~~~~~
2203 vplane name [AxisName] [PointName] 
2204 vplane name [PointName] [PointName] [PointName] 
2205 vplane name [PlaneName] [PointName]
2206 ~~~~~ 
2207
2208 Creates a plane from named or interactively selected entities.
2209 TypeOfSensitivity:
2210  * 0 -- Interior
2211  * 1 -- Boundary
2212
2213 **Example:** 
2214 ~~~~~
2215 vinit 
2216 vpoint p1 0 50 0 
2217 vaxis axe1 0 0 0 0 0 1 
2218 vtrihedron tr 
2219 vplane plane1 axe1 p1 
2220 ~~~~~
2221
2222 @subsubsection occt_draw_4_4_9 vplanepara
2223
2224 Syntax:                  
2225 ~~~~~
2226 vplanepara name
2227 ~~~~~ 
2228
2229 Creates a plane from interactively selected vertex and face. 
2230
2231 @subsubsection occt_draw_4_4_10 vplaneortho
2232
2233 Syntax:                  
2234 ~~~~~
2235 vplaneortho name
2236 ~~~~~ 
2237
2238 Creates a plane from interactive selected face and coplanar edge. 
2239
2240 @subsubsection occt_draw_4_4_11 vline
2241
2242 Syntax:                  
2243 ~~~~~
2244 vline name [PointName] [PointName] 
2245 vline name [Xa Ya Za Xb Yb Zb]
2246 ~~~~~ 
2247
2248 Creates a line from coordinates, named or interactively selected vertices. 
2249
2250 **Example:** 
2251 ~~~~~
2252 vinit 
2253 vtrihedron tr 
2254 vpoint p1 0 50 0 
2255 vpoint p2 50 0 0 
2256 vline line1 p1 p2 
2257 vline line2 0 0 0 50 0 1 
2258 ~~~~~
2259
2260 @subsubsection occt_draw_4_4_12 vcircle
2261
2262 Syntax:      
2263 ~~~~~
2264 vcircle name [PointName PointName PointName IsFilled] 
2265 vcircle name [PlaneName PointName Radius IsFilled] 
2266 ~~~~~
2267
2268 Creates a circle from named or interactively selected entities.  Parameter IsFilled is defined as 0 or 1.
2269  
2270 **Example:** 
2271 ~~~~~
2272 vinit 
2273 vtrihedron tr 
2274 vpoint p1 0 50 0 
2275 vpoint p2 50 0 0 
2276 vpoint p3 0 0 0 
2277 vcircle circle1 p1 p2 p3 1
2278 ~~~~~ 
2279
2280 @subsubsection occt_draw_4_4_13 vtri2d
2281
2282 Syntax:                  
2283 ~~~~~
2284 vtri2d name
2285 ~~~~~ 
2286
2287 Creates a plane with a 2D trihedron from an interactively selected face. 
2288
2289 @subsubsection occt_draw_4_4_14 vselmode
2290
2291 Syntax:                  
2292 ~~~~~
2293 vselmode [object] mode_number is_turned_on=(1|0)
2294 ~~~~~ 
2295
2296 Sets the selection mode for an object. If the object value is not defined, the selection mode is set for all displayed objects. 
2297 *Mode_number* is a non-negative integer encoding different interactive object classes.
2298 For shapes the following *mode_number* values are allowed:
2299  * 0 -- shape
2300  * 1 -- vertex
2301  * 2 -- edge
2302  * 3 -- wire
2303  * 4 -- face
2304  * 5 -- shell
2305  * 6 -- solid
2306  * 7 -- compsolid
2307  * 8 -- compound
2308 *is_turned_on* is:
2309  * 1 if mode is to be switched on
2310  * 0 if mode is to be switched off
2311
2312 **Example:** 
2313 ~~~~~
2314 vinit 
2315 vpoint p1 0 0 0 
2316 vpoint p2 50 0 0 
2317 vpoint p3 25 40 0 
2318 vtriangle triangle1 p1 p2 p3 
2319 ~~~~~
2320
2321 @subsubsection occt_draw_4_4_15 vconnect
2322
2323 Syntax:                  
2324 ~~~~~
2325 vconnect vconnect name Xo Yo Zo object1 object2 ... [color=NAME]
2326 ~~~~~ 
2327
2328 Creates *AIS_ConnectedInteractive* object from the input object and location and displays it.
2329
2330 **Example:** 
2331 ~~~~~
2332 vinit 
2333 vpoint p1 0 0 0 
2334 vpoint p2 50 0 0 
2335 vsegment segment p1 p2 
2336 restore CrankArm.brep obj 
2337 vdisplay obj 
2338 vconnect new obj 100100100 1 0 0 0 0 1
2339 ~~~~~ 
2340
2341 @subsubsection occt_draw_4_4_16 vtriangle
2342
2343 Syntax:                  
2344 ~~~~~
2345 vtriangle name PointName PointName PointName
2346 ~~~~~ 
2347
2348 Creates and displays a filled triangle from named points. 
2349
2350 **Example:** 
2351 ~~~~~
2352 vinit 
2353 vpoint p1 0 0 0 
2354 vpoint p2 50 0 0 
2355 vpoint p3 25 40 0 
2356 vtriangle triangle1 p1 p2 p3
2357 ~~~~~ 
2358
2359 @subsubsection occt_draw_4_4_17 vsegment
2360
2361 Syntax:                  
2362 ~~~~~
2363 vsegment name PointName PointName 
2364 ~~~~~
2365
2366 Creates and displays a segment from named points. 
2367
2368 **Example:** 
2369 ~~~~~
2370 Vinit 
2371 vpoint p1 0 0 0 
2372 vpoint p2 50 0 0 
2373 vsegment segment p1 p2 
2374 ~~~~~
2375
2376 @subsubsection occt_draw_4_4_18 vpointcloud
2377
2378 Syntax:
2379 ~~~~~
2380 vpointcloud name shape [-randColor] [-normals] [-noNormals]
2381 ~~~~~
2382
2383 Creates an interactive object for an arbitrary set of points from the triangulated shape.
2384 Additional options:
2385  * *randColor* -- generates a random color per point;
2386  * *normals*   -- generates a normal per point (default);
2387  * *noNormals* -- does not generate a normal per point.
2388
2389 ~~~~~
2390 vpointcloud name x y z r npts {surface|volume} [-randColor] [-normals] [-noNormals]
2391 ~~~~~
2392 Creates an arbitrary set of points (npts) randomly distributed on a spheric surface or within a spheric volume (x y z r).
2393 Additional options:
2394  * *randColor* -- generates a random color per point;
2395  * *normals*   -- generates a normal per point (default);
2396  * *noNormals* -- does not generate a normal per point.
2397
2398 **Example:**
2399 ~~~~~
2400 vinit
2401 vpointcloud pc 0 0 0 100 100000 surface -randColor
2402 vfit
2403 ~~~~~
2404
2405 @subsubsection occt_draw_4_4_19 vclipplane
2406
2407 Syntax:
2408 ~~~~~
2409 vclipplane maxplanes <view_name> -- gets plane limit for the view.
2410 vclipplane create <plane_name> -- creates a new plane.
2411 vclipplane delete <plane_name> -- deletes a plane.
2412 vclipplane clone <source_plane> <plane_name> -- clones the plane definition.
2413 vclipplane set/unset <plane_name> object <object list> -- sets/unsets the plane for an IO.
2414 vclipplane set/unset <plane_name> view <view list> -- sets/unsets plane for a view.
2415 vclipplane change <plane_name> on/off -- turns clipping on/off.
2416 vclipplane change <plane_name> equation <a> <b> <c> <d> -- changes plane equation.
2417 vclipplane change <plane_name> capping on/off -- turns capping on/off.
2418 vclipplane change <plane_name> capping color <r> <g> <b> -- sets color.
2419 vclipplane change <plane name> capping texname <texture> -- sets texture.
2420 vclipplane change <plane_name> capping texscale <sx> <sy> -- sets texture scale.
2421 vclipplane change <plane_name> capping texorigin <tx> <ty> -- sets texture origin.
2422 vclipplane change <plane_name> capping texrotate <angle> -- sets texture rotation.
2423 vclipplane change <plane_name> capping hatch on/off/<id> -- sets hatching mask.
2424 ~~~~~
2425
2426 Manages clipping planes
2427
2428 **Example:**
2429 ~~~~~
2430 vinit
2431 vclipplane create pln1
2432 vclipplane change pln1 equation 1 0 0 -0.1
2433 vclipplane set pln1 view Driver1/Viewer1/View1
2434 box b 100 100 100
2435 vdisplay b
2436 vsetdispmode 1
2437 vfit
2438 vrotate 10 10 10
2439 vselect 100 100
2440 ~~~~~
2441
2442 @subsubsection occt_draw_4_4_20 vdimension
2443
2444 Syntax:
2445 ~~~~~
2446 vdimension name {-angle|-length|-radius|-diameter} -shapes shape1 [shape2 [shape3]]
2447                 [-text 3d|2d wf|sh|wireframe|shading IntegerSize]
2448                 [-label left|right|hcenter|hfit top|bottom|vcenter|vfit]
2449                 [-arrow external|internal|fit] [{-arrowlength|-arlen} RealArrowLength]
2450                 [{-arrowangle|-arangle} ArrowAngle(degrees)] [-plane xoy|yoz|zox]
2451                 [-flyout FloatValue -extension FloatValue]
2452                                 [-autovalue] [-value CustomRealValue] [-textvalue CustomTextValue]
2453                 [-dispunits DisplayUnitsString]
2454                 [-modelunits ModelUnitsString] [-showunits | -hideunits]
2455 ~~~~~
2456
2457 Builds angle, length, radius or diameter dimension interactive object **name**.
2458
2459 **Attension:** length dimension can't be built without working plane.
2460
2461 **Example:** 
2462 ~~~~~
2463 vinit
2464 vpoint p1 0 0 0
2465 vpoint p2 50 50 0
2466 vdimension dim1 -length -plane xoy -shapes p1 p2
2467
2468 vpoint p3 100 0 0
2469 vdimension dim2 -angle -shapes p1 p2 p3
2470
2471 vcircle circle p1 p2 p3 0
2472 vdimension dim3 -radius -shapes circle
2473 vfit
2474 ~~~~~
2475
2476 @subsubsection occt_draw_4_4_21 vdimparam
2477
2478 Syntax:
2479 ~~~~~
2480 vdimparam name [-text 3d|2d wf|sh|wireframe|shading IntegerSize]
2481                [-label left|right|hcenter|hfit top|bottom|vcenter|vfit]
2482                [-arrow external|internal|fit]
2483                [{-arrowlength|-arlen} RealArrowLength]
2484                [{-arrowangle|-arangle} ArrowAngle(degrees)]
2485                [-plane xoy|yoz|zox]
2486                [-flyout FloatValue -extension FloatValue]
2487                [-autovalue]
2488                [-value CustomRealValue]
2489                [-textvalue CustomTextValue]
2490                [-dispunits DisplayUnitsString]
2491                [-modelunits ModelUnitsString]
2492                [-showunits | -hideunits]
2493 ~~~~~
2494
2495 Sets parameters for angle, length, radius and diameter dimension **name**.
2496
2497 **Example:** 
2498 ~~~~~
2499 vinit
2500 vpoint p1 0 0 0
2501 vpoint p2 50 50 0
2502 vdimension dim1 -length -plane xoy -shapes p1 p2
2503 vdimparam dim1 -flyout -15 -arrowlength 4 -showunits -value 10
2504 vfit
2505 vdimparam dim1 -textvalue "w_1"
2506 vdimparam dim1 -autovalue
2507 ~~~~~
2508
2509 @subsubsection occt_draw_4_4_22 vdimangleparam
2510
2511 Syntax:
2512 ~~~~~
2513 vangleparam name [-type interior|exterior]
2514                  [-showarrow first|second|both|none]
2515 ~~~~~
2516
2517 Sets parameters for angle dimension **name**.
2518
2519 **Example:** 
2520 ~~~~~
2521 vinit
2522 vpoint p1 0 0 0
2523 vpoint p2 10 0 0
2524 vpoint p3 10 5 0
2525 vdimension dim1 -angle -plane xoy -shapes p1 p2 p3
2526 vfit
2527 vangleparam dim1 -type exterior -showarrow first
2528 ~~~~~
2529
2530 @subsubsection occt_draw_4_4_23 vmovedim
2531
2532 Syntax:
2533 ~~~~~
2534 vmovedim [name] [x y z]
2535 ~~~~~
2536
2537 Moves picked or named (if **name** parameter is defined) dimension
2538 to picked mouse position or input point with coordinates **x**,**y**,**z**.
2539 Text label of dimension **name** is moved to position, another parts of dimension
2540 are adjusted.
2541
2542 **Example:** 
2543 ~~~~~
2544 vinit
2545 vpoint p1 0 0 0
2546 vpoint p2 50 50 0
2547 vdimension dim1 -length -plane xoy -shapes p1 p2
2548 vmovedim dim1 -10 30 0
2549 ~~~~~
2550
2551
2552 @subsection occt_draw_4_5 AIS viewer -- Mesh Visualization Service
2553
2554 **MeshVS** (Mesh Visualization Service) component provides flexible means of displaying meshes with associated pre- and post- processor data.
2555
2556 @subsubsection occt_draw_4_5_1 meshfromstl
2557
2558 Syntax:                  
2559 ~~~~~
2560 meshfromstl meshname file
2561 ~~~~~ 
2562
2563 Creates a *MeshVS_Mesh* object based on STL file data. The object will be displayed immediately.
2564  
2565 **Example:**
2566 ~~~~~ 
2567 meshfromstl mesh myfile.stl
2568 ~~~~~ 
2569
2570 @subsubsection occt_draw_4_5_2 meshdispmode
2571
2572 Syntax:                  
2573 ~~~~~
2574 meshdispmode meshname displaymode
2575 ~~~~~ 
2576
2577 Changes the display mode of object **meshname**. The **displaymode** is integer, which can be:
2578 * *1* for *wireframe*, 
2579 * *2* for *shading* mode, or
2580 * *3* for *shrink* mode. 
2581
2582 **Example:** 
2583 ~~~~~
2584 vinit 
2585 meshfromstl mesh myfile.stl 
2586 meshdispmode mesh 2
2587 ~~~~~ 
2588
2589 @subsubsection occt_draw_4_5_3 meshselmode
2590
2591 Syntax:                  
2592 ~~~~~
2593 meshselmode meshname selectionmode
2594 ~~~~~ 
2595
2596 Changes the selection mode of object **meshname**. The *selectionmode* is integer OR-combination of mode flags. The basic flags are the following: 
2597 * *1* -- node selection;
2598 * *2* -- 0D elements (not supported in STL); 
2599 * *4* -- links (not supported in STL); 
2600 * *8* -- faces.
2601  
2602 **Example:** 
2603 ~~~~~
2604 vinit 
2605 meshfromstl mesh myfile.stl 
2606 meshselmode mesh 1
2607 ~~~~~ 
2608
2609 @subsubsection occt_draw_4_5_4 meshshadcolor
2610
2611 Syntax:                  
2612 ~~~~~
2613 meshshadcolor meshname red green blue
2614 ~~~~~ 
2615
2616 Changes the face interior color of object **meshname**. The *red*, *green* and *blue* are real values between *0* and *1*.
2617  
2618 **Example:** 
2619 ~~~~~
2620 vinit 
2621 meshfromstl mesh myfile.stl 
2622 meshshadcolormode mesh 0.5 0.5 0.5
2623 ~~~~~ 
2624
2625 @subsubsection occt_draw_4_5_5 meshlinkcolor
2626
2627 Syntax:                  
2628 ~~~~~
2629 meshlinkcolor meshname red green blue
2630 ~~~~~ 
2631
2632 Changes the color of face borders for object **meshname**. The *red*, *green* and *blue* are real values between *0* and *1*.
2633  
2634 **Example:** 
2635 ~~~~~
2636 vinit 
2637 meshfromstl mesh myfile.stl 
2638 meshlinkcolormode mesh 0.5 0.5 0.5
2639 ~~~~~ 
2640
2641 @subsubsection occt_draw_4_5_6 meshmat
2642
2643 Syntax:                  
2644 ~~~~~
2645 meshmat meshname material
2646 ~~~~~ 
2647
2648 Changes the material of object **meshname**.
2649
2650 *material* is represented with an integer value as follows (equivalent to enumeration *Graphic3d_NameOfMaterial*): 
2651 * *0 -- BRASS,* 
2652 * *1 -- BRONZE,* 
2653 * *2 -- COPPER,* 
2654 * *3 -- GOLD,* 
2655 * *4 -- PEWTER,* 
2656 * *5 -- PLASTER,* 
2657 * *6 -- PLASTIC,* 
2658 * *7 -- SILVER,* 
2659 * *8 -- STEEL,* 
2660 * *9 -- STONE,* 
2661 * *10 -- SHINY_PLASTIC,* 
2662 * *11 -- SATIN,*
2663 * *12 -- METALIZED,* 
2664 * *13 -- NEON_GNC,* 
2665 * *14 -- CHROME,*
2666 * *15 -- ALUMINIUM,*
2667 * *16 -- OBSIDIAN,* 
2668 * *17 -- NEON_PHC,* 
2669 * *18 -- JADE,*
2670 * *19 -- DEFAULT,* 
2671 * *20 -- UserDefined*
2672  
2673 **Example:** 
2674 ~~~~~
2675 vinit 
2676 meshfromstl mesh myfile.stl 
2677 meshmat mesh JADE 
2678 ~~~~~
2679
2680 @subsubsection occt_draw_4_5_7 meshshrcoef
2681
2682 Syntax:                  
2683 ~~~~~
2684 meshshrcoef meshname shrinkcoefficient
2685 ~~~~~ 
2686
2687 Changes the value of shrink coefficient used in the shrink mode. In the shrink mode the face is shown as a congruent part of a usual face, so that *shrinkcoefficient* controls the value of this part. The *shrinkcoefficient* is a positive real number.
2688  
2689 **Example:** 
2690 ~~~~~
2691 vinit 
2692 meshfromstl mesh myfile.stl 
2693 meshshrcoef mesh 0.05
2694 ~~~~~ 
2695
2696 @subsubsection occt_draw_4_5_8 meshshow
2697
2698 Syntax:                  
2699 ~~~~~
2700 meshshow meshname
2701 ~~~~~ 
2702
2703 Displays **meshname** in the viewer (if it is erased).
2704  
2705 **Example:** 
2706 ~~~~~
2707 vinit 
2708 meshfromstl mesh myfile.stl 
2709 meshshow mesh
2710 ~~~~~ 
2711
2712 @subsubsection occt_draw_4_5_9 meshhide
2713
2714 Syntax:                  
2715 ~~~~~
2716 meshhide meshname
2717 ~~~~~ 
2718
2719 Hides **meshname** in the viewer. 
2720
2721 **Example:** 
2722 ~~~~~
2723 vinit 
2724 meshfromstl mesh myfile.stl 
2725 meshhide mesh
2726 ~~~~~ 
2727
2728 @subsubsection occt_draw_4_5_10 meshhidesel
2729
2730 Syntax:                  
2731 ~~~~~
2732 meshhidesel meshname
2733 ~~~~~ 
2734
2735 Hides only selected entities. The other part of **meshname** remains visible. 
2736
2737 @subsubsection occt_draw_4_5_11 meshshowsel
2738
2739 Syntax:                  
2740 ~~~~~
2741 meshshowsel meshname
2742 ~~~~~ 
2743
2744 Shows only selected entities. The other part of **meshname** becomes invisible. 
2745
2746 @subsubsection occt_draw_4_5_12 meshshowall
2747
2748 Syntax:                  
2749 ~~~~~
2750 meshshowall meshname
2751 ~~~~~ 
2752
2753 Changes the state of all entities to visible for **meshname**. 
2754
2755 @subsubsection occt_draw_4_5_13 meshdelete
2756
2757 Syntax:                  
2758 ~~~~~
2759 meshdelete meshname
2760 ~~~~~ 
2761
2762 Deletes MeshVS_Mesh object **meshname**. 
2763
2764 **Example:** 
2765 ~~~~~
2766 vinit 
2767 meshfromstl mesh myfile.stl 
2768 meshdelete mesh 
2769 ~~~~~
2770
2771 @subsection occt_draw_4_6       VIS Viewer commands
2772
2773 A specific plugin with alias *VIS* should be loaded to have access to VIS functionality in DRAW Test Harness:
2774
2775 ~~~~
2776 \> pload VIS
2777 ~~~~
2778
2779 @subsubsection occt_draw_4_6_1  ivtkinit
2780
2781 Syntax:
2782 ~~~~~
2783 ivtkinit
2784 ~~~~~
2785
2786 Creates a window for VTK viewer.
2787
2788 @figure{/user_guides/draw_test_harness/images/draw_image001.png}
2789
2790 @subsubsection occt_draw_4_6_2  ivtkdisplay
2791
2792 Syntax:
2793 ~~~~~
2794 ivtkdisplay name1 [name2] …[name n]
2795 ~~~~~
2796
2797 Displays named objects.
2798
2799 **Example:** 
2800 ~~~~~
2801 ivtkinit
2802 # create cone
2803 pcone c 5 0 10
2804 ivtkdisplay c
2805 ~~~~~
2806
2807 @figure{/user_guides/draw_test_harness/images/draw_image002.png}
2808
2809 @subsubsection occt_draw_4_6_3  ivtkerase
2810
2811 Syntax:
2812 ~~~~~
2813 ivtkerase [name1] [name2] … [name n]
2814 ~~~~~
2815
2816 Erases named objects. If no arguments are passed, erases all displayed objects.
2817
2818 **Example:**
2819 ~~~~~
2820 ivtkinit
2821 # create a sphere
2822 psphere s 10
2823 # create a cone
2824 pcone c 5 0 10
2825 # create a cylinder
2826 pcylinder cy 5 10
2827 # display objects
2828 ivtkdisplay s c cy
2829 # erase only the cylinder
2830 ivtkerase cy
2831 # erase the sphere and the cone
2832 ivtkerase s c
2833 ~~~~~
2834
2835 @subsubsection occt_draw_4_6_4   ivtkfit
2836
2837 Syntax:
2838 ~~~~~
2839 ivtkfit
2840 ~~~~~
2841
2842 Automatic zoom/panning.
2843
2844 @subsubsection occt_draw_4_6_5  ivtkdispmode
2845
2846 Syntax:
2847 ~~~~~
2848 ivtksetdispmode [name] {0|1}
2849 ~~~~~
2850
2851 Sets display mode for a named object. If no arguments are passed, sets the given display mode for all displayed objects
2852 The possible modes are: 0 (WireFrame) and 1 (Shading).
2853
2854 **Example:**
2855 ~~~~~
2856 ivtkinit
2857 # create a cone
2858 pcone c 5 0 10
2859 # display the cone
2860 ivtkdisplay c
2861 # set shading mode for the cone
2862 ivtksetdispmode c 1
2863 ~~~~~
2864
2865 @figure{/user_guides/draw_test_harness/images/draw_image003.png}
2866  
2867 @subsubsection occt_draw_4_6_6  ivtksetselmode
2868
2869 Syntax:
2870 ~~~~~
2871 ivtksetselmode [name] mode {0|1}
2872 ~~~~~
2873
2874 Sets selection mode for a named object. If no arguments are passed, sets the given selection mode for all the displayed objects.
2875
2876 **Example:**
2877 ~~~~~
2878 ivtkinit
2879 # load a shape from file
2880 restore CrankArm.brep a
2881 # display the loaded shape
2882 ivtkdisplay a
2883 # set the face selection mode
2884 ivtksetselmode a 4 1
2885 ~~~~~
2886
2887 @figure{/user_guides/draw_test_harness/images/draw_image004.png}
2888  
2889 @subsubsection occt_draw_4_6_7  ivtkmoveto
2890
2891 Syntax:
2892 ~~~~~
2893 ivtkmoveto x y
2894 ~~~~~
2895
2896 Imitates mouse cursor moving to point with the given display coordinates **x**,**y**.
2897
2898 **Example:**
2899 ~~~~~
2900 ivtkinit
2901 pcone c 5 0 10
2902 ivtkdisplay c
2903 ivtkmoveto 40 50
2904 ~~~~~
2905
2906 @subsubsection occt_draw_4_6_8  ivtkselect
2907
2908 Syntax:
2909 ~~~~~
2910 ivtkselect x y
2911 ~~~~~
2912
2913 Imitates mouse cursor moving to point with the given display coordinates and performs selection at this point.
2914
2915 **Example:**
2916 ~~~~~
2917 ivtkinit
2918 pcone c 5 0 10
2919 ivtkdisplay c
2920 ivtkselect 40 50
2921 ~~~~~
2922
2923 @subsubsection occt_draw_4_6_9  ivtkdump
2924
2925 Syntax:
2926 ~~~~~
2927 ivtkdump *filename* [buffer={rgb|rgba|depth}] [width height] [stereoproj={L|R}]
2928 ~~~~~
2929
2930 Dumps the contents of VTK viewer to image. It supports:
2931 * dumping in different raster graphics formats: PNG, BMP, JPEG, TIFF or PNM.
2932 * dumping of different buffers: RGB, RGBA or depth buffer.
2933 * defining of image sizes (width and height in pixels).
2934 * dumping of stereo projections (left or right).
2935
2936 **Example:**
2937 ~~~~~
2938 ivtkinit
2939 pcone c 5 0 10
2940 ivtkdisplay c
2941 ivtkdump D:/ConeSnapshot.png rgb 768 768
2942 ~~~~~
2943
2944 @subsubsection occt_draw_4_6_10 ivtkbgcolor
2945
2946
2947 Syntax:
2948 ~~~~~
2949 ivtkbgcolor r g b [r2 g2 b2]
2950 ~~~~~
2951
2952 Sets uniform background color or gradient background if second triple of parameters is set. Color parameters r,g,b have to be chosen in the interval  [0..255].
2953
2954 **Example:**
2955 ~~~~~
2956 ivtkinit
2957 ivtkbgcolor 200 220 250
2958 ~~~~~
2959  
2960 @figure{/user_guides/draw_test_harness/images/draw_image005.png}
2961
2962 ~~~~~
2963 ivtkbgcolor 10 30 80 255 255 255
2964 ~~~~~
2965
2966 @figure{/user_guides/draw_test_harness/images/draw_image006.png}
2967
2968
2969 @section occt_draw_5 OCAF commands
2970
2971
2972 This chapter contains a set of commands for Open CASCADE Technology Application Framework (OCAF). 
2973
2974
2975 @subsection occt_draw_5_1 Application commands
2976
2977
2978 @subsubsection occt_draw_5_1_1 NewDocument
2979
2980 Syntax:       
2981 ~~~~~
2982 NewDocument docname [format]
2983 ~~~~~ 
2984
2985 Creates a new **docname** document with MDTV-Standard or described format. 
2986
2987 **Example:** 
2988 ~~~~~
2989 # Create new document with default (MDTV-Standard) format 
2990 NewDocument D 
2991
2992 # Create new document with BinOcaf format 
2993 NewDocument D2 BinOcaf 
2994 ~~~~~
2995
2996 @subsubsection occt_draw_5_1_2 IsInSession
2997
2998 Syntax:       
2999 ~~~~~
3000 IsInSession path
3001 ~~~~~ 
3002
3003 Returns *0*, if **path** document is managed by the application session, *1* -- otherwise. 
3004
3005 **Example:** 
3006 ~~~~~
3007 IsInSession /myPath/myFile.std 
3008 ~~~~~
3009
3010 @subsubsection occt_draw_5_1_3 ListDocuments
3011
3012 Syntax:       
3013 ~~~~~
3014 ListDocuments
3015 ~~~~~ 
3016
3017 Makes a list of documents handled during the session of the application. 
3018
3019
3020 @subsubsection occt_draw_5_1_4 Open
3021
3022 Syntax:       
3023 ~~~~~
3024 Open path docname [-stream]
3025 ~~~~~ 
3026
3027 Retrieves the document of file **docname** in the path **path**. Overwrites the document, if it is already in session. 
3028
3029 option <i>-stream</i> activates usage of alternative interface of OCAF persistence working with C++ streams instead of file names.
3030
3031 **Example:** 
3032 ~~~~~
3033 Open /myPath/myFile.std D
3034 ~~~~~ 
3035
3036 @subsubsection occt_draw_5_1_5 Close
3037
3038 Syntax:       
3039 ~~~~~
3040 Close docname
3041 ~~~~~ 
3042
3043 Closes **docname** document. The document is no longer handled by the applicative session. 
3044
3045 **Example:** 
3046 ~~~~~
3047 Close D 
3048 ~~~~~
3049
3050 @subsubsection occt_draw_5_1_6 Save
3051
3052 Syntax:       
3053 ~~~~~
3054 Save docname
3055 ~~~~~ 
3056
3057 Saves **docname** active document. 
3058
3059 **Example:** 
3060 ~~~~~
3061 Save D 
3062 ~~~~~
3063
3064 @subsubsection occt_draw_5_1_7 SaveAs
3065
3066 Syntax:       
3067 ~~~~~
3068 SaveAs docname path [-stream]
3069 ~~~~~ 
3070
3071 Saves the active document in the file **docname** in the path **path**. Overwrites the file if it already exists.
3072
3073 option <i>-stream</i> activates usage of alternative interface of OCAF persistence working with C++ streams instead of file names.
3074
3075 **Example:** 
3076 ~~~~~
3077 SaveAs D /myPath/myFile.std
3078 ~~~~~ 
3079
3080 @subsection occt_draw_5_2 Basic commands
3081
3082 @subsubsection occt_draw_5_2_1 Label
3083
3084 Syntax:   
3085
3086 ~~~~~
3087 Label docname entry
3088 ~~~~~
3089
3090 Creates the label expressed by <i>\<entry\></i> if it does not exist.
3091
3092 Example
3093 ~~~~~
3094 Label D 0:2
3095 ~~~~~
3096
3097 @subsubsection occt_draw_5_2_2 NewChild
3098
3099 Syntax:   
3100
3101 ~~~~~
3102 NewChild docname [taggerlabel = Root label]
3103 ~~~~~
3104 Finds (or creates) a *TagSource* attribute located at father label of <i>\<taggerlabel\></i> and makes a new child label.
3105
3106 Example
3107 ~~~~~
3108 # Create new child of root label
3109 NewChild D
3110
3111 # Create new child of existing label
3112 Label D 0:2
3113 NewChild D 0:2
3114 ~~~~~
3115
3116 @subsubsection occt_draw_5_2_3 Children
3117
3118 Syntax:  
3119 ~~~~~
3120 Children docname label
3121 ~~~~~
3122 Returns the list of attributes of label.
3123
3124 Example
3125 ~~~~~
3126 Children D 0:2
3127 ~~~~~
3128
3129 @subsubsection occt_draw_5_2_4 ForgetAll
3130
3131 Syntax:   
3132 ~~~~~
3133 ForgetAll docname label
3134 ~~~~~
3135 Forgets all attributes of the label.
3136
3137 Example
3138 ~~~~~
3139 ForgetAll D 0:2
3140 ~~~~~
3141
3142
3143 @subsubsection occt_draw_5_3 Application commands
3144
3145 @subsubsection occt_draw_5_3_1  Main
3146
3147 Syntax:       
3148 ~~~~~
3149 Main docname
3150 ~~~~~ 
3151
3152 Returns the main label of the framework. 
3153
3154 **Example:** 
3155 ~~~~~
3156 Main D 
3157 ~~~~~
3158
3159 @subsubsection occt_draw_5_3_2  UndoLimit
3160
3161 Syntax:       
3162 ~~~~~
3163 UndoLimit docname [value=0]
3164 ~~~~~ 
3165
3166
3167 Sets the limit on the number of Undo Delta stored. **0** will disable Undo on the document. A negative *value* means that there is no limit. Note that by default Undo is disabled. Enabling it will take effect with the next call to *NewCommand*. Of course, this limit is the same for Redo 
3168
3169 **Example:** 
3170 ~~~~~
3171 UndoLimit D 100 
3172 ~~~~~
3173
3174 @subsubsection occt_draw_5_3_3  Undo
3175
3176 Syntax:       
3177 ~~~~~
3178 Undo docname [value=1]
3179 ~~~~~ 
3180
3181 Undoes **value** steps. 
3182
3183 **Example:** 
3184 ~~~~~
3185 Undo D 
3186 ~~~~~
3187
3188 @subsubsection occt_draw_5_3_4  Redo
3189
3190 Syntax:       
3191 ~~~~~
3192 Redo docname [value=1]
3193 ~~~~~ 
3194
3195 Redoes **value** steps.
3196  
3197 **Example:** 
3198 ~~~~~
3199 Redo D 
3200 ~~~~~
3201
3202 @subsubsection occt_draw_5_3_5  OpenCommand
3203
3204 Syntax:       
3205 ~~~~~
3206 OpenCommand docname
3207 ~~~~~ 
3208
3209 Opens a new command transaction. 
3210
3211 **Example:**
3212 ~~~~~ 
3213 OpenCommand D
3214 ~~~~~ 
3215
3216 @subsubsection occt_draw_5_3_6  CommitCommand
3217
3218 Syntax:       
3219 ~~~~~
3220 CommitCommand docname
3221 ~~~~~ 
3222
3223 Commits the Command transaction. 
3224
3225 **Example:** 
3226 ~~~~~
3227 CommitCommand D
3228 ~~~~~ 
3229
3230 @subsubsection occt_draw_5_3_7  NewCommand
3231
3232 Syntax:       
3233 ~~~~~
3234 NewCommand docname
3235 ~~~~~ 
3236
3237 This is a shortcut for Commit and Open transaction. 
3238
3239 **Example:** 
3240 ~~~~~
3241 NewCommand D 
3242 ~~~~~
3243
3244 @subsubsection occt_draw_5_3_8  AbortCommand
3245
3246 Syntax:       
3247 ~~~~~
3248 AbortCommand docname
3249 ~~~~~ 
3250
3251 Aborts the Command transaction. 
3252
3253 **Example:** 
3254 ~~~~~
3255 AbortCommand D 
3256 ~~~~~
3257
3258 @subsubsection occt_draw_5_3_9  Copy
3259
3260 Syntax:       
3261 ~~~~~
3262 Copy docname entry Xdocname Xentry
3263 ~~~~~ 
3264
3265 Copies the contents of *entry* to *Xentry*. No links are registered. 
3266
3267 **Example:** 
3268 ~~~~~
3269 Copy D1 0:2 D2 0:4 
3270 ~~~~~
3271
3272 @subsubsection occt_draw_5_3_10  UpdateLink
3273
3274 Syntax:       
3275 ~~~~~
3276 UpdateLink docname [entry] 
3277 ~~~~~
3278
3279 Updates external reference set at *entry*. 
3280
3281 **Example:** 
3282 ~~~~~
3283 UpdateLink D 
3284 ~~~~~
3285
3286 @subsubsection occt_draw_5_3_11  CopyWithLink
3287
3288 Syntax:       
3289 ~~~~~
3290 CopyWithLink docname entry Xdocname Xentry
3291 ~~~~~ 
3292
3293 Aborts the Command transaction. 
3294 Copies the content of *entry* to *Xentry*. The link is registered with an *Xlink* attribute at *Xentry*  label. 
3295
3296 **Example:** 
3297 ~~~~~
3298 CopyWithLink D1 0:2 D2 0:4
3299 ~~~~~ 
3300
3301 @subsubsection occt_draw_5_3_12  UpdateXLinks
3302
3303 Syntax:       
3304 ~~~~~
3305 UpdateXLinks docname entry
3306 ~~~~~ 
3307
3308 Sets modifications on labels impacted by external references to the *entry*. The *document* becomes invalid and must be recomputed 
3309
3310 **Example:** 
3311 ~~~~~
3312 UpdateXLinks D 0:2 
3313 ~~~~~
3314
3315 @subsubsection occt_draw_5_3_13  DumpDocument
3316
3317 Syntax:       
3318 ~~~~~
3319 DumpDocument docname
3320 ~~~~~ 
3321
3322 Displays parameters of *docname* document. 
3323
3324 **Example:** 
3325 ~~~~~
3326 DumpDocument D 
3327 ~~~~~
3328
3329
3330 @subsection occt_draw_5_4  Data Framework commands
3331
3332
3333 @subsubsection occt_draw_5_4_1  MakeDF
3334
3335 Syntax:       
3336 ~~~~~
3337 MakeDF dfname
3338 ~~~~~ 
3339
3340 Creates a new data framework. 
3341
3342 **Example:** 
3343 ~~~~~
3344 MakeDF D 
3345 ~~~~~
3346
3347 @subsubsection occt_draw_5_4_2  ClearDF
3348
3349 Syntax:       
3350 ~~~~~
3351 ClearDF dfname
3352 ~~~~~ 
3353
3354 Clears a data framework. 
3355
3356 **Example:** 
3357 ~~~~~
3358 ClearDF D 
3359 ~~~~~
3360
3361 @subsubsection occt_draw_5_4_3  CopyDF
3362
3363 Syntax:       
3364 ~~~~~
3365 CopyDF dfname1 entry1 [dfname2] entry2
3366 ~~~~~ 
3367
3368 Copies a data framework. 
3369
3370 **Example:** 
3371 ~~~~~
3372 CopyDF D 0:2 0:4 
3373 ~~~~~
3374
3375 @subsubsection occt_draw_5_4_4  CopyLabel
3376
3377 Syntax:       
3378 ~~~~~
3379 CopyLabel dfname fromlabel tolablel
3380 ~~~~~ 
3381
3382 Copies a label. 
3383
3384 **Example:** 
3385 ~~~~~
3386 CopyLabel D1 0:2 0:4 
3387 ~~~~~
3388
3389 @subsubsection occt_draw_5_4_5  MiniDumpDF
3390
3391 Syntax:       
3392 ~~~~~
3393 MiniDumpDF dfname
3394 ~~~~~ 
3395
3396 Makes a mini-dump of a data framework. 
3397
3398 **Example:** 
3399 ~~~~~
3400 MiniDumpDF D 
3401 ~~~~~
3402
3403 @subsubsection occt_draw_5_4_6  XDumpDF
3404
3405 Syntax:       
3406 ~~~~~
3407 XDumpDF dfname
3408 ~~~~~ 
3409
3410 Makes an extended dump of a data framework. 
3411
3412 **Example:** 
3413 ~~~~~
3414 XDumpDF D
3415 ~~~~~ 
3416
3417 @subsection occt_draw_5_5  General attributes commands
3418
3419
3420 @subsubsection occt_draw_5_5_1  SetInteger
3421
3422 Syntax:       
3423 ~~~~~
3424 SetInteger dfname entry value
3425 ~~~~~ 
3426
3427 Finds or creates an Integer attribute at *entry* label and sets *value*. 
3428
3429 **Example:** 
3430 ~~~~~
3431 SetInteger D 0:2 100 
3432 ~~~~~
3433
3434 @subsubsection occt_draw_5_5_2  GetInteger
3435
3436 Syntax:       
3437 ~~~~~
3438 GetInteger dfname entry [drawname]
3439 ~~~~~ 
3440
3441 Gets a value of an Integer attribute at *entry* label and sets it to *drawname* variable, if it is defined. 
3442
3443 **Example:** 
3444 ~~~~~
3445 GetInteger D 0:2 Int1 
3446 ~~~~~
3447
3448 @subsubsection occt_draw_5_5_3  SetReal
3449
3450 Syntax:       
3451 ~~~~~
3452 SetReal dfname entry value
3453 ~~~~~ 
3454
3455 Finds or creates a Real attribute at *entry* label and sets *value*. 
3456
3457 **Example:** 
3458 ~~~~~
3459 SetReal D 0:2 100. 
3460 ~~~~~
3461
3462 @subsubsection occt_draw_5_5_4  GetReal
3463
3464 Syntax:       
3465 ~~~~~
3466 GetReal dfname entry [drawname]
3467 ~~~~~ 
3468
3469 Gets a value of a Real attribute at *entry* label and sets it to *drawname* variable, if it is defined. 
3470
3471 **Example:** 
3472 ~~~~~
3473 GetReal D 0:2 Real1 
3474 ~~~~~
3475
3476 @subsubsection occt_draw_5_5_5  SetIntArray
3477
3478 Syntax:       
3479 ~~~~~
3480 SetIntArray dfname entry lower upper value1 value2 … 
3481 ~~~~~
3482
3483 Finds or creates an IntegerArray attribute at *entry* label with lower and upper bounds and sets **value1*, *value2*... 
3484
3485 **Example:** 
3486 ~~~~~
3487 SetIntArray D 0:2 1 4 100 200 300 400
3488 ~~~~~ 
3489
3490 @subsubsection occt_draw_5_5_6  GetIntArray
3491
3492 Syntax:       
3493 ~~~~~
3494 GetIntArray dfname entry
3495 ~~~~~ 
3496
3497 Gets a value of an *IntegerArray* attribute at *entry* label. 
3498
3499 **Example:** 
3500 ~~~~~
3501 GetIntArray D 0:2
3502 ~~~~~ 
3503
3504 @subsubsection occt_draw_5_5_7  SetRealArray
3505
3506 Syntax:       
3507 ~~~~~
3508 SetRealArray dfname entry lower upper value1 value2 …
3509 ~~~~~ 
3510
3511 Finds or creates a RealArray attribute at *entry* label with lower and upper bounds and sets *value1*, *value2*… 
3512
3513 **Example:** 
3514 ~~~~~
3515 GetRealArray D 0:2 1 4 100. 200. 300. 400. 
3516 ~~~~~
3517
3518 @subsubsection occt_draw_5_5_8  GetRealArray
3519
3520 Syntax:       
3521 ~~~~~
3522 GetRealArray dfname entry
3523 ~~~~~ 
3524
3525 Gets a value of a RealArray attribute at *entry* label. 
3526
3527 **Example:** 
3528 ~~~~~
3529 GetRealArray D 0:2 
3530 ~~~~~
3531
3532 @subsubsection occt_draw_5_5_9  SetComment
3533
3534 Syntax:       
3535 ~~~~~
3536 SetComment dfname entry value
3537 ~~~~~ 
3538
3539 Finds or creates a Comment attribute at *entry* label and sets *value*. 
3540
3541 **Example:** 
3542 ~~~~~
3543 SetComment D 0:2 "My comment"
3544 ~~~~~ 
3545
3546 @subsubsection occt_draw_5_5_10  GetComment
3547
3548 Syntax:       
3549 ~~~~~
3550 GetComment dfname entry
3551 ~~~~~ 
3552
3553 Gets a value of a Comment attribute at *entry* label. 
3554
3555 **Example:** 
3556 ~~~~~
3557 GetComment D 0:2
3558 ~~~~~ 
3559
3560 @subsubsection occt_draw_5_5_11  SetExtStringArray
3561
3562 Syntax:       
3563 ~~~~~
3564 SetExtStringArray dfname entry lower upper value1 value2 …
3565 ~~~~~ 
3566
3567 Finds or creates an *ExtStringArray* attribute at *entry* label with lower and upper bounds and sets *value1*, *value2*… 
3568
3569 **Example:** 
3570 ~~~~~
3571 SetExtStringArray D 0:2 1 3 *string1* *string2* *string3*
3572 ~~~~~ 
3573
3574 @subsubsection occt_draw_5_5_12  GetExtStringArray
3575
3576 Syntax:       
3577 ~~~~~
3578 GetExtStringArray dfname entry
3579 ~~~~~ 
3580
3581 Gets a value of an ExtStringArray attribute at *entry* label. 
3582
3583 **Example:** 
3584 ~~~~~
3585 GetExtStringArray D 0:2 
3586 ~~~~~
3587
3588 @subsubsection occt_draw_5_5_13  SetName
3589
3590 Syntax:       
3591 ~~~~~
3592 SetName dfname entry value 
3593 ~~~~~
3594
3595 Finds or creates a Name attribute at *entry* label and sets *value*. 
3596
3597 **Example:** 
3598 ~~~~~
3599 SetName D 0:2 *My name* 
3600 ~~~~~
3601
3602 @subsubsection occt_draw_5_5_14  GetName
3603
3604 Syntax:       
3605 ~~~~~
3606 GetName dfname entry 
3607 ~~~~~
3608
3609 Gets a value of a Name attribute at *entry* label. 
3610
3611 **Example:** 
3612 ~~~~~
3613 GetName D 0:2 
3614 ~~~~~
3615
3616 @subsubsection occt_draw_5_5_15  SetReference
3617
3618 Syntax:       
3619 ~~~~~
3620 SetReference dfname entry reference 
3621 ~~~~~
3622
3623 Creates a Reference attribute at *entry* label and sets *reference*. 
3624
3625 **Example:** 
3626 ~~~~~
3627 SetReference D 0:2 0:4 
3628 ~~~~~
3629
3630 @subsubsection occt_draw_5_5_16  GetReference
3631
3632 Syntax:       
3633 ~~~~~
3634 GetReference dfname entry 
3635 ~~~~~
3636
3637 Gets a value of a Reference attribute at *entry* label. 
3638
3639 **Example:** 
3640 ~~~~~
3641 GetReference D 0:2 
3642 ~~~~~
3643
3644 @subsubsection occt_draw_5_5_17  SetUAttribute
3645
3646 Syntax:       
3647 ~~~~~
3648 SetUAttribute dfname entry localGUID 
3649 ~~~~~
3650
3651 Creates a UAttribute attribute at *entry* label with *localGUID*. 
3652
3653 **Example:** 
3654 ~~~~~
3655 set localGUID "c73bd076-22ee-11d2-acde-080009dc4422" 
3656 SetUAttribute D 0:2 ${localGUID} 
3657 ~~~~~
3658
3659 @subsubsection occt_draw_5_5_18  GetUAttribute
3660
3661 Syntax:       
3662 ~~~~~
3663 GetUAttribute dfname entry loacalGUID 
3664 ~~~~~
3665
3666 Finds a *UAttribute* at *entry* label with *localGUID*. 
3667
3668 **Example:** 
3669 ~~~~~
3670 set localGUID "c73bd076-22ee-11d2-acde-080009dc4422" 
3671 GetUAttribute D 0:2 ${localGUID} 
3672 ~~~~~
3673
3674 @subsubsection occt_draw_5_5_19  SetFunction
3675
3676 Syntax:       
3677 ~~~~~
3678 SetFunction dfname entry ID failure 
3679 ~~~~~
3680
3681 Finds or creates a *Function* attribute at *entry* label with driver ID and *failure* index. 
3682
3683 **Example:** 
3684 ~~~~~
3685 set ID "c73bd076-22ee-11d2-acde-080009dc4422" 
3686 SetFunction D 0:2 ${ID} 1 
3687 ~~~~~
3688
3689 @subsubsection occt_draw_5_5_20  GetFunction
3690
3691 Syntax:       
3692 ~~~~~
3693 GetFunction dfname entry ID failure 
3694 ~~~~~
3695
3696 Finds a Function attribute at *entry* label and sets driver ID to *ID* variable and failure index to *failure* variable. 
3697
3698 **Example:** 
3699 ~~~~~
3700 GetFunction D 0:2 ID failure 
3701 ~~~~~
3702
3703 @subsubsection occt_draw_5_5_21  NewShape
3704
3705 Syntax:       
3706 ~~~~~
3707 NewShape dfname entry [shape] 
3708 ~~~~~
3709
3710 Finds or creates a Shape attribute at *entry* label. Creates or updates the associated *NamedShape* attribute by *shape* if *shape* is defined. 
3711
3712 **Example:** 
3713 ~~~~~
3714 box b 10 10 10 
3715 NewShape D 0:2 b 
3716 ~~~~~
3717
3718 @subsubsection occt_draw_5_5_22  SetShape
3719
3720 Syntax:       
3721 ~~~~~
3722 SetShape dfname entry shape 
3723 ~~~~~
3724
3725 Creates or updates a *NamedShape* attribute at *entry* label by *shape*. 
3726
3727 **Example:** 
3728 ~~~~~
3729 box b 10 10 10 
3730 SetShape D 0:2 b 
3731 ~~~~~
3732
3733 @subsubsection occt_draw_5_5_23  GetShape
3734
3735 Syntax:       
3736 ~~~~~
3737 GetShape2 dfname entry shape 
3738 ~~~~~
3739
3740 Sets a shape from NamedShape attribute associated with *entry* label to *shape* draw variable. 
3741
3742 **Example:** 
3743 ~~~~~
3744 GetShape2 D 0:2 b 
3745 ~~~~~
3746
3747 @subsection occt_draw_5_6  Geometric attributes commands
3748
3749
3750 @subsubsection occt_draw_5_6_1  SetPoint
3751
3752 Syntax:       
3753 ~~~~~
3754 SetPoint dfname entry point
3755 ~~~~~ 
3756
3757 Finds or creates a Point attribute at *entry* label and sets *point* as generated in the associated *NamedShape* attribute. 
3758
3759 **Example:** 
3760 ~~~~~
3761 point p 10 10 10 
3762 SetPoint D 0:2 p 
3763 ~~~~~
3764
3765 @subsubsection occt_draw_5_6_2  GetPoint
3766
3767 Syntax:       
3768 ~~~~~
3769 GetPoint dfname entry [drawname] 
3770 ~~~~~
3771
3772 Gets a vertex from *NamedShape* attribute at *entry* label and sets it to *drawname* variable, if it is defined. 
3773
3774 **Example:** 
3775 ~~~~~
3776 GetPoint D 0:2 p 
3777 ~~~~~
3778
3779 @subsubsection occt_draw_5_6_3  SetAxis
3780
3781 Syntax:       
3782 ~~~~~
3783 SetAxis dfname entry axis 
3784 ~~~~~
3785
3786 Finds or creates an Axis attribute at *entry* label and sets *axis* as generated in the associated *NamedShape* attribute. 
3787
3788 **Example:** 
3789 ~~~~~
3790 line l 10 20 30 100 200 300 
3791 SetAxis D 0:2 l 
3792 ~~~~~
3793
3794 @subsubsection occt_draw_5_6_4  GetAxis
3795
3796 Syntax:       
3797 ~~~~~
3798 GetAxis dfname entry [drawname] 
3799 ~~~~~
3800
3801 Gets a line from *NamedShape* attribute at *entry* label and sets it to *drawname* variable, if it is defined. 
3802
3803 **Example:** 
3804 ~~~~~
3805 GetAxis D 0:2 l 
3806 ~~~~~
3807
3808 @subsubsection occt_draw_5_6_5  SetPlane
3809
3810 Syntax:       
3811 ~~~~~
3812 SetPlane dfname entry plane 
3813 ~~~~~
3814
3815 Finds or creates a Plane attribute at *entry* label and sets *plane* as generated in the associated *NamedShape* attribute. 
3816
3817 **Example:** 
3818 ~~~~~
3819 plane pl 10 20 30 -1 0 0 
3820 SetPlane D 0:2 pl 
3821 ~~~~~
3822
3823 @subsubsection occt_draw_5_6_6  GetPlane
3824
3825 Syntax:       
3826 ~~~~~
3827 GetPlane dfname entry [drawname] 
3828 ~~~~~
3829
3830 Gets a plane from *NamedShape* attribute at *entry* label and sets it to *drawname* variable, if it is defined. 
3831
3832 **Example:** 
3833 ~~~~~
3834 GetPlane D 0:2 pl 
3835 ~~~~~
3836
3837 @subsubsection occt_draw_5_6_7  SetGeometry
3838
3839 Syntax:       
3840 ~~~~~
3841 SetGeometry dfname entry [type] [shape] 
3842 ~~~~~
3843
3844 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*. 
3845
3846 **Example:** 
3847 ~~~~~
3848 point p 10 10 10 
3849 SetGeometry D 0:2 pnt p 
3850 ~~~~~
3851
3852 @subsubsection occt_draw_5_6_8  GetGeometryType
3853
3854 Syntax:       
3855 ~~~~~
3856 GetGeometryType dfname entry
3857 ~~~~~ 
3858
3859 Gets a geometry type from Geometry attribute at *entry* label. 
3860
3861 **Example:** 
3862 ~~~~~
3863 GetGeometryType D 0:2 
3864 ~~~~~
3865
3866 @subsubsection occt_draw_5_6_9  SetConstraint
3867
3868 Syntax:       
3869 ~~~~~
3870 SetConstraint dfname entry keyword geometrie [geometrie …] 
3871 SetConstraint dfname entry "plane" geometrie 
3872 SetConstraint dfname entry "value" value
3873 ~~~~~  
3874
3875 1. Creates a Constraint attribute at *entry* label and sets *keyword* constraint between geometry(ies). 
3876 *keyword* must be one of the following: 
3877 *rad, dia, minr, majr, tan, par, perp, concentric, equal, dist, angle, eqrad, symm, midp, eqdist, fix, rigid,* or *from, axis, mate, alignf, aligna, axesa, facesa, round, offset* 
3878 2. Sets plane for the existing constraint. 
3879 3. Sets value for the existing constraint. 
3880
3881 **Example:** 
3882 ~~~~~
3883 SetConstraint D 0:2 "value" 5 
3884 ~~~~~
3885
3886 @subsubsection occt_draw_5_6_10  GetConstraint
3887
3888 Syntax:       
3889 ~~~~~
3890 GetConstraint dfname entry
3891 ~~~~~ 
3892
3893 Dumps a Constraint attribute at *entry* label 
3894
3895 **Example:** 
3896 ~~~~~
3897 GetConstraint D 0:2 
3898 ~~~~~
3899
3900 @subsubsection occt_draw_5_6_11  SetVariable
3901
3902 Syntax:       
3903 ~~~~~
3904 SetVariable dfname entry isconstant(0/1) units 
3905 ~~~~~
3906
3907 Creates a Variable attribute at *entry* label and sets *isconstant* flag and *units* as a string. 
3908
3909 **Example:** 
3910 ~~~~~
3911 SetVariable D 0:2 1 "mm" 
3912 ~~~~~
3913
3914 @subsubsection occt_draw_5_6_12  GetVariable
3915
3916 Syntax:       
3917 ~~~~~
3918 GetVariable dfname entry isconstant units 
3919 ~~~~~
3920
3921 Gets an *isconstant* flag and units of a Variable attribute at *entry* label. 
3922
3923 **Example:** 
3924 ~~~~~
3925 GetVariable D 0:2 isconstant units 
3926 puts "IsConstant=${isconstant}" 
3927 puts "Units=${units}" 
3928 ~~~~~
3929
3930 @subsection occt_draw_5_7  Tree attributes commands
3931
3932
3933 @subsubsection occt_draw_5_7_1  RootNode
3934
3935 Syntax:       
3936 ~~~~~
3937 RootNode dfname treenodeentry [ID]
3938 ~~~~~ 
3939
3940 Returns the ultimate father of *TreeNode* attribute identified by its *treenodeentry* and its *ID* (or default ID, if *ID* is not defined). 
3941
3942
3943 @subsubsection occt_draw_5_7_2  SetNode
3944
3945 Syntax:       
3946 ~~~~~
3947 SetNode dfname treenodeentry [ID]
3948 ~~~~~ 
3949
3950 Creates a *TreeNode* attribute on the *treenodeentry* label with its tree *ID* (or assigns a default ID, if the *ID* is not defined). 
3951
3952
3953 @subsubsection occt_draw_5_7_3  AppendNode
3954
3955 Syntax:       
3956 ~~~~~
3957 AppendNode dfname fatherentry childentry [fatherID]
3958 ~~~~~ 
3959
3960
3961 Inserts a *TreeNode* attribute with its tree *fatherID* (or default ID, if *fatherID* is not defined) on *childentry* as last child of *fatherentry*. 
3962
3963
3964
3965
3966 @subsubsection occt_draw_5_7_4  PrependNode
3967
3968 Syntax:       
3969 ~~~~~
3970 PrependNode dfname fatherentry childentry [fatherID]
3971 ~~~~~ 
3972
3973
3974 Inserts a *TreeNode* attribute with its tree *fatherID* (or default ID, if *fatherID* is not defined) on *childentry* as first child of *fatherentry*. 
3975
3976
3977 @subsubsection occt_draw_5_7_5  InsertNodeBefore
3978
3979 Syntax:       
3980 ~~~~~
3981 InsertNodeBefore dfname treenodeentry beforetreenode [ID]
3982 ~~~~~ 
3983
3984 Inserts a *TreeNode* attribute with tree *ID* (or default ID, if *ID* is not defined) *beforetreenode* before *treenodeentry*. 
3985
3986
3987 @subsubsection occt_draw_5_7_6  InsertNodeAfter
3988
3989 Syntax:       
3990 ~~~~~
3991 InsertNodeAfter dfname treenodeentry aftertreenode [ID]
3992 ~~~~~ 
3993
3994 Inserts a *TreeNode* attribute with tree *ID* (or default ID, if *ID* is not defined) *aftertreenode* after *treenodeentry*. 
3995
3996
3997 @subsubsection occt_draw_5_7_7  DetachNode
3998
3999 Syntax:       
4000 ~~~~~
4001 DetachNode dfname treenodeentry [ID]
4002 ~~~~~ 
4003
4004 Removes a *TreeNode* attribute with tree *ID* (or default ID, if *ID* is not defined) from *treenodeentry*. 
4005
4006
4007 @subsubsection occt_draw_5_7_8  ChildNodeIterate
4008
4009 Syntax:       
4010 ~~~~~
4011 ChildNodeIterate dfname treenodeentry alllevels(0/1) [ID]
4012 ~~~~~ 
4013
4014
4015 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.
4016  
4017 **Example:** 
4018 ~~~~~
4019 Label D 0:2 
4020 Label D 0:3 
4021 Label D 0:4 
4022 Label D 0:5 
4023 Label D 0:6 
4024 Label D 0:7 
4025 Label D 0:8 
4026 Label D 0:9 
4027
4028 # Set root node 
4029 SetNode D 0:2 
4030
4031 AppendNode D 0:2 0:4 
4032 AppendNode D 0:2 0:5 
4033 PrependNode D 0:4 0:3 
4034 PrependNode D 0:4 0:8 
4035 PrependNode D 0:4 0:9 
4036
4037 InsertNodeBefore D 0:5 0:6 
4038 InsertNodeAfter D 0:4 0:7 
4039
4040 DetachNode D 0:8 
4041
4042
4043 # List all levels 
4044 ChildNodeIterate D 0:2 1 
4045
4046 ==0:4 
4047 ==0:9 
4048 ==0:3 
4049 ==0:7 
4050 ==0:6 
4051 ==0:5 
4052
4053
4054 # List only first levels 
4055 ChildNodeIterate D 0:2 1 
4056
4057 ==0:4 
4058 ==0:7 
4059 ==0:6 
4060 ==0:5 
4061 ~~~~~
4062
4063 @subsubsection occt_draw_5_7_9  InitChildNodeIterator
4064
4065 Syntax:       
4066 ~~~~~
4067 InitChildNodeIterator dfname treenodeentry alllevels(0/1) [ID]
4068 ~~~~~ 
4069
4070
4071 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. 
4072
4073 **Example:** 
4074 ~~~~~
4075 InitChildNodeIterate D 0:5 1 
4076 set aChildNumber 0 
4077 for {set i 1} {$i < 100} {incr i} { 
4078     if {[ChildNodeMore] == *TRUE*} { 
4079         puts *Tree node = [ChildNodeValue]* 
4080         incr aChildNumber 
4081         ChildNodeNext 
4082     } 
4083
4084 puts "aChildNumber=$aChildNumber"
4085 ~~~~~ 
4086
4087 @subsubsection occt_draw_5_7_10  ChildNodeMore
4088
4089 Syntax:       
4090 ~~~~~
4091 ChildNodeMore
4092 ~~~~~ 
4093
4094 Returns TRUE if there is a current item in the iteration. 
4095
4096
4097 @subsubsection occt_draw_5_7_11  ChildNodeNext
4098
4099 Syntax:       
4100 ~~~~~
4101 ChildNodeNext
4102 ~~~~~ 
4103
4104 Moves to the next Item. 
4105
4106
4107 @subsubsection occt_draw_5_7_12  ChildNodeValue
4108
4109 Syntax:       
4110 ~~~~~
4111 ChildNodeValue
4112 ~~~~~ 
4113
4114 Returns the current treenode of *ChildNodeIterator*. 
4115
4116
4117 @subsubsection occt_draw_5_7_13  ChildNodeNextBrother
4118
4119 Syntax:       
4120 ~~~~~
4121 ChildNodeNextBrother
4122 ~~~~~ 
4123
4124 Moves to the next *Brother*. If there is none, goes up. This method is interesting only with *allLevels* behavior. 
4125
4126
4127 @subsection occt_draw_5_8   Standard presentation commands
4128
4129
4130 @subsubsection occt_draw_5_8_1  AISInitViewer
4131
4132 Syntax:       
4133 ~~~~~
4134 AISInitViewer docname
4135 ~~~~~ 
4136
4137 Creates and sets *AISViewer* attribute at root label, creates AIS viewer window. 
4138
4139 **Example:** 
4140 ~~~~~
4141 AISInitViewer D 
4142 ~~~~~
4143
4144 @subsubsection occt_draw_5_8_2  AISRepaint
4145
4146 Syntax:       
4147 ~~~~~
4148 AISRepaint docname 
4149 ~~~~~
4150
4151 Updates the AIS viewer window. 
4152
4153 **Example:** 
4154 ~~~~~
4155 AISRepaint D 
4156 ~~~~~
4157
4158 @subsubsection occt_draw_5_8_3  AISDisplay
4159
4160 Syntax:       
4161 ~~~~~
4162 AISDisplay docname entry [not_update] 
4163 ~~~~~
4164
4165 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. 
4166
4167 **Example:** 
4168 ~~~~~
4169 AISDisplay D 0:5 
4170 ~~~~~
4171
4172 @subsubsection occt_draw_5_8_4  AISUpdate
4173
4174 Syntax:       
4175 ~~~~~
4176 AISUpdate docname entry 
4177 ~~~~~
4178
4179 Recomputes a presentation of *AISobject* from *entry* label and applies the visualization setting in AIS viewer. 
4180
4181 **Example:** 
4182 ~~~~~
4183 AISUpdate D 0:5 
4184 ~~~~~
4185
4186 @subsubsection occt_draw_5_8_5  AISErase
4187
4188 Syntax:       
4189 ~~~~~
4190 AISErase docname entry 
4191 ~~~~~
4192
4193 Erases *AISobject* of *entry* label in AIS viewer. 
4194
4195 **Example:** 
4196 ~~~~~
4197 AISErase D 0:5 
4198 ~~~~~
4199
4200 @subsubsection occt_draw_5_8_6  AISRemove
4201
4202 Syntax:       
4203 ~~~~~
4204 AISRemove docname entry 
4205 ~~~~~
4206
4207 Erases *AISobject* of *entry* label in AIS viewer, then *AISobject* is removed from *AIS_InteractiveContext*. 
4208
4209 **Example:** 
4210 ~~~~~
4211 AISRemove D 0:5 
4212 ~~~~~
4213
4214 @subsubsection occt_draw_5_8_7  AISSet
4215
4216 Syntax:       
4217 ~~~~~
4218 AISSet docname entry ID 
4219 ~~~~~
4220
4221 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*). 
4222
4223 **Example:** 
4224 ~~~~~
4225 AISSet D 0:5 NS 
4226 ~~~~~
4227
4228 @subsubsection occt_draw_5_8_8  AISDriver
4229
4230 Syntax:       
4231 ~~~~~
4232 AISDriver docname entry [ID] 
4233 ~~~~~
4234
4235 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*). 
4236
4237 **Example:** 
4238 ~~~~~
4239 # Get Driver GUID 
4240 AISDriver D 0:5 
4241 ~~~~~
4242
4243 @subsubsection occt_draw_5_8_9  AISUnset
4244
4245 Syntax:       
4246 ~~~~~
4247 AISUnset docname entry 
4248 ~~~~~
4249
4250 Deletes *AISPresentation* attribute (if it exists) of an *entry* label. 
4251
4252 **Example:** 
4253 ~~~~~
4254 AISUnset D 0:5 
4255 ~~~~~
4256
4257 @subsubsection occt_draw_5_8_10  AISTransparency
4258
4259 Syntax:       
4260 ~~~~~
4261 AISTransparency docname entry [transparency] 
4262 ~~~~~
4263
4264 Sets (if *transparency* is defined) or gets the value of transparency for *AISPresentation* attribute of an *entry* label. 
4265
4266 **Example:** 
4267 ~~~~~
4268 AISTransparency D 0:5 0.5 
4269 ~~~~~
4270
4271 @subsubsection occt_draw_5_8_11  AISHasOwnTransparency
4272
4273 Syntax:       
4274 ~~~~~
4275 AISHasOwnTransparency docname entry 
4276 ~~~~~
4277
4278 Tests *AISPresentation* attribute of an *entry* label by own transparency. 
4279
4280 **Example:** 
4281 ~~~~~
4282 AISHasOwnTransparency D 0:5 
4283 ~~~~~
4284
4285 @subsubsection occt_draw_5_8_12  AISMaterial
4286
4287 Syntax:       
4288 ~~~~~
4289 AISMaterial docname entry [material] 
4290 ~~~~~
4291
4292 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 @ref occt_draw_4_5_6 "meshmat" command). 
4293
4294 **Example:** 
4295 ~~~~~
4296 AISMaterial D 0:5 5 
4297 ~~~~~
4298
4299 @subsubsection occt_draw_5_8_13  AISHasOwnMaterial
4300
4301 Syntax:       
4302 ~~~~~
4303 AISHasOwnMaterial docname entry 
4304 ~~~~~
4305
4306 Tests *AISPresentation* attribute of an *entry* label by own material. 
4307
4308 **Example:** 
4309 ~~~~~
4310 AISHasOwnMaterial D 0:5 
4311 ~~~~~
4312
4313 @subsubsection occt_draw_5_8_14  AISColor
4314
4315 Syntax:       
4316 ~~~~~
4317 AISColor docname entry [color] 
4318 ~~~~~
4319
4320 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*). 
4321
4322 **Example:** 
4323 ~~~~~
4324 AISColor D 0:5 25 
4325 ~~~~~
4326
4327 @subsubsection occt_draw_5_8_15  AISHasOwnColor
4328
4329 Syntax:       
4330 ~~~~~
4331 AISHasOwnColor docname entry 
4332 ~~~~~
4333
4334 Tests *AISPresentation* attribute of an *entry* label by own color. 
4335
4336 **Example:** 
4337 ~~~~~
4338 AISHasOwnColor D 0:5 
4339 ~~~~~
4340
4341 @section occt_draw_6 Geometry commands
4342
4343 @subsection occt_draw_6_1 Overview
4344
4345 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. 
4346
4347 In the context of Geometry, Draw includes the following types of variable: 
4348
4349   * 2d and 3d points
4350   * The 2d curve, which corresponds to *Curve* in *Geom2d*.
4351   * The 3d curve and surface, which correspond to *Curve* and *Surface* in <a href="user_guides__modeling_data.html#occt_modat_1">Geom package</a>.
4352   
4353 Draw geometric variables never share data; the *copy* command will always make a complete copy of the content of the variable. 
4354
4355 The following topics are covered in the nine sections of this chapter: 
4356
4357   * **Curve creation** deals with the various types of curves and how to create them.
4358   * **Surface creation** deals with the different types of surfaces and how to create them.
4359   * **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.
4360   * **Geometric transformations** covers translation, rotation, mirror image and point scaling transformations.
4361   * **Curve and Surface Analysis** deals with the commands used to compute points, derivatives and curvatures.
4362   * **Intersections** presents intersections of surfaces and curves.
4363   * **Approximations** deals with creating curves and surfaces from a set of points.
4364   * **Constraints** concerns construction of 2d circles and lines by constraints such as tangency.
4365   * **Display** describes commands to control the display of curves and surfaces.
4366
4367 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. 
4368
4369 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. 
4370
4371 @subsection occt_draw_6_2  Curve creation
4372
4373 This section deals with both points and curves. Types of curves are: 
4374
4375   * Analytical curves such as lines, circles, ellipses, parabolas, and hyperbolas.
4376   * Polar curves such as bezier curves and bspline curves.
4377   * 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.
4378   * NURBS can be created from other curves using *convert* in the *Surface Creation* section.
4379   * Curves can be created from the isoparametric lines of surfaces by the *uiso* and *viso* commands.
4380   * 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.
4381
4382 Curves are displayed with an arrow showing the last parameter. 
4383
4384
4385 @subsubsection occt_draw_6_2_1 point
4386
4387 Syntax:      
4388 ~~~~~
4389 point name x y [z] 
4390 ~~~~~
4391   
4392 Creates a 2d or 3d point, depending on the number of arguments. 
4393
4394 **Example:**
4395 ~~~~~
4396 # 2d point 
4397 point p1 1 2 
4398
4399 # 3d point 
4400 point p2 10 20 -5 
4401 ~~~~~
4402   
4403 @subsubsection occt_draw_6_2_2  line
4404
4405 Syntax:      
4406 ~~~~~
4407 line name x y [z] dx dy [dz]
4408 ~~~~~ 
4409
4410   
4411 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. 
4412
4413 A 2d line will be represented as *x y dx dy*, and a 3d line as *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. 
4414
4415 **Example:** 
4416 ~~~~~
4417 # a 2d line at 45 degrees of the X axis 
4418 line l 2 0 1 1 
4419
4420 # a 3d line through the point 10 0 0 and parallel to Z 
4421 line l 10 0 0 0 0 1 
4422 ~~~~~
4423
4424 @subsubsection occt_draw_6_2_3  circle
4425
4426 Syntax:      
4427 ~~~~~
4428 circle name x y [z [dx dy dz]] [ux uy [uz]] radius
4429 ~~~~~ 
4430
4431 Creates a 2d or a 3d circle. 
4432
4433 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. 
4434
4435 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*. 
4436
4437 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. 
4438
4439 **Example:** 
4440 ~~~~~
4441 # A 2d circle of radius 5 centered at 10,-2 
4442 circle c1 10 -2 5 
4443
4444 # another 2d circle with a user defined origin 
4445 # the point of parameter 0 on this circle will be 
4446 # 1+sqrt(2),1+sqrt(2) 
4447 circle c2 1 1 1 1 2 
4448
4449 # a 3d circle, center 10 20 -5, axis Z, radius 17 
4450 circle c3 10 20 -5 17 
4451
4452 # same 3d circle with axis Y 
4453 circle c4 10 20 -5 0 1 0 17 
4454
4455 # full 3d circle, axis X, origin on Z 
4456 circle c5 10 20 -5 1 0 0 0 0 1 17 
4457 ~~~~~
4458
4459 @subsubsection occt_draw_6_2_4  ellipse
4460
4461 Syntax: 
4462 ~~~~~
4463 ellipse name x y [z [dx dy dz]] [ux uy [uz]] firstradius secondradius 
4464 ~~~~~
4465
4466 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: 
4467
4468 ~~~~~
4469 P(u) = O + firstradius*cos(u)*Xdir + secondradius*sin(u)*Ydir 
4470 ~~~~~
4471 where: 
4472
4473   * P is the point of parameter *u*,
4474   * *O, Xdir* and *Ydir* are respectively the origin, *X Direction* and *Y Direction* of its local coordinate system.
4475  
4476 **Example:**
4477 ~~~~~
4478 # default 2d ellipse 
4479 ellipse e1 10 5 20 10 
4480
4481 # 2d ellipse at angle 60 degree 
4482 ellipse e2 0 0 1 2 30 5 
4483
4484 # 3d ellipse, in the XY plane 
4485 ellipse e3 0 0 0 25 5 
4486
4487 # 3d ellipse in the X,Z plane with axis 1, 0 ,1 
4488 ellipse e4 0 0 0 0 1 0 1 0 1 25 5 
4489 ~~~~~
4490
4491 @subsubsection occt_draw_6_2_5  hyperbola
4492
4493 Syntax:      
4494 ~~~~~
4495 hyperbola name x y [z [dx dy dz]] [ux uy [uz]] firstradius secondradius
4496 ~~~~~ 
4497
4498 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. 
4499
4500 The Draw hyperbola is parameterized as follows: 
4501 ~~~~~
4502 P(U) = O + firstradius*Cosh(U)*XDir + secondradius*Sinh(U)*YDir 
4503 ~~~~~
4504 where: 
4505
4506   * *P* is the point of parameter *U*,
4507   * *O, XDir* and *YDir* are respectively the origin, *X Direction* and *YDirection* of its local coordinate system. 
4508
4509 **Example:** 
4510 ~~~~~
4511 # default 2d hyperbola, with asymptotes 1,1 -1,1 
4512 hyperbola h1 0 0 30 30 
4513
4514 # 2d hyperbola at angle 60 degrees 
4515 hyperbola h2 0 0 1 2 20 20 
4516
4517 # 3d hyperbola, in the XY plane 
4518 hyperbola h3 0 0 0 50 50 
4519 ~~~~~
4520
4521 @subsubsection occt_draw_6_2_6  parabola
4522
4523 Syntax:      
4524 ~~~~~
4525 parabola name x y [z [dx dy dz]] [ux uy [uz]] FocalLength 
4526 ~~~~~
4527
4528 Creates a 2d or 3d parabola. in the axis system defined by the first arguments. The origin is the apex of the parabola. 
4529
4530 The *Geom_Parabola* is parameterized as follows: 
4531
4532 ~~~~~
4533 P(u) = O + u*u/(4.*F)*XDir + u*YDir 
4534 ~~~~~
4535
4536 where: 
4537   * *P* is the point of parameter *u*,
4538   * *O, XDir* and *YDir* are respectively the origin, *X Direction* and *Y Direction* of its local coordinate system,
4539   * *F* is the focal length of the parabola.
4540
4541 **Example:** 
4542 ~~~~~
4543 # 2d parabola 
4544 parabola p1 0 0 50 
4545
4546 # 2d parabola with convexity +Y 
4547 parabola p2 0 0 0 1 50 
4548
4549 # 3d parabola in the Y-Z plane, convexity +Z 
4550 parabola p3 0 0 0 1 0 0 0 0 1 50 
4551 ~~~~~
4552
4553 @subsubsection occt_draw_6_2_7  beziercurve, 2dbeziercurve
4554
4555 Syntax:      
4556 ~~~~~
4557 beziercurve name nbpole pole, [weight] 
4558 2dbeziercurve name nbpole pole, [weight]
4559 ~~~~~ 
4560
4561 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. 
4562
4563 **Example:** 
4564 ~~~~~
4565 # a rational 2d bezier curve (arc of circle) 
4566 2dbeziercurve ci 3 0 0 1 10 0 sqrt(2.)/2. 10 10 1 
4567
4568 # a 3d bezier curve, not rational 
4569 beziercurve cc 4 0 0 0 10 0 0 10 0 10 10 10 10 
4570 ~~~~~
4571
4572 @subsubsection occt_draw_6_2_8  bsplinecurve, 2dbsplinecurve, pbsplinecurve, 2dpbsplinecurve
4573
4574 Syntax:      
4575 ~~~~~
4576 bsplinecurve   name degree nbknots knot, umult pole, weight
4577 2dbsplinecurve name degree nbknots knot, umult pole, weight
4578
4579 pbsplinecurve   name degree nbknots knot, umult pole, weight (periodic)
4580 2dpbsplinecurve name degree nbknots knot, umult pole, weight (periodic)
4581 ~~~~~
4582
4583 Creates 2d or 3d bspline curves; the **pbsplinecurve** and **2dpbsplinecurve** commands create periodic bspline curves. 
4584
4585 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. 
4586
4587 The table of knots is an increasing sequence of reals without repetition. 
4588 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. 
4589
4590 The poles must be given with their weights, use weights of 1 for a non rational curve, the number of poles must be: 
4591
4592   * For a non periodic curve: Sum of multiplicities - degree + 1
4593   * For a periodic curve: Sum of multiplicities - last multiplicity
4594
4595 **Example:** 
4596 ~~~~~
4597 # a bspline curve with 4 poles and 3 knots 
4598 bsplinecurve bc 2 3 0 3 1 1 2 3 \ 
4599 10 0 7 1 7 0 7 1 3 0 8 1 0 0 7 1 
4600 # a 2d periodic circle (parameter from 0 to 2*pi !!) 
4601 dset h sqrt(3)/2 
4602 2dpbsplinecurve c 2 \ 
4603 4 0 2 pi/1.5 2 pi/0.75 2 2*pi 2 \ 
4604 0 -h/3 1 \ 
4605 0.5 -h/3 0.5 \ 
4606 0.25 h/6 1 \ 
4607 0 2*h/3 0.5 \ 
4608 -0.25 h/6 1 \ 
4609 -0.5 -h/3 0.5 \ 
4610 0 -h/3 1 
4611 ~~~~~
4612
4613 **Note** that you can create the **NURBS** subset of bspline curves and surfaces by trimming analytical curves and surfaces and executing the command *convert*. 
4614
4615
4616 @subsubsection occt_draw_6_2_9  uiso, viso
4617
4618 Syntax:      
4619 ~~~~~
4620 uiso name surface u 
4621 viso name surface u 
4622 ~~~~~
4623
4624 Creates a U or V isoparametric curve from a surface. 
4625
4626 **Example:** 
4627 ~~~~~
4628 # create a cylinder and extract iso curves 
4629
4630 cylinder c 10 
4631 uiso c1 c pi/6 
4632 viso c2 c 
4633 ~~~~~
4634
4635 **Note** that this cannot be done from offset surfaces.
4636
4637
4638 @subsubsection occt_draw_6_2_10  to3d, to2d
4639
4640 Syntax:      
4641 ~~~~~
4642 to3d name curve2d [plane] 
4643 to2d name curve3d [plane] 
4644 ~~~~~
4645
4646 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. 
4647
4648 **Example:** 
4649 ~~~~~
4650 # the following commands 
4651 circle c 0 0 5 
4652 plane p -2 1 0 1 2 3 
4653 to3d c c p 
4654
4655 # will create the same circle as 
4656 circle c -2 1 0 1 2 3 5 
4657 ~~~~~
4658
4659 See also: **project** 
4660
4661
4662 @subsubsection occt_draw_6_2_11  project
4663
4664 Syntax:      
4665 ~~~~~
4666 project name curve3d surface 
4667 ~~~~~
4668
4669 Computes a 2d curve in the parametric space of a surface corresponding to a 3d curve. This can only be used on analytical surfaces. 
4670
4671 If we, for example, intersect a cylinder and a plane and project the resulting ellipse on the cylinder, this will create a 2d sinusoid-like bspline. 
4672
4673 ~~~~~
4674 cylinder c 5 
4675 plane p 0 0 0 0 1 1 
4676 intersect i c p 
4677 project i2d i c 
4678 ~~~~~
4679
4680 @subsection occt_draw_6_3  Surface creation
4681
4682 The following types of surfaces exist: 
4683   * Analytical surfaces: plane, cylinder, cone, sphere, torus;
4684   * Polar surfaces: bezier surfaces, bspline surfaces;
4685   * Trimmed and Offset surfaces;
4686   * Surfaces produced by Revolution and Extrusion, created from curves with the *revsurf* and *extsurf*;
4687   * NURBS surfaces.
4688
4689 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. 
4690
4691 @subsubsection occt_draw_6_3_1  plane
4692
4693 Syntax:      
4694 ~~~~~
4695 plane name [x y z [dx dy dz [ux uy uz]]]
4696 ~~~~~ 
4697
4698 Creates an infinite plane. 
4699
4700 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. 
4701
4702 The plane is perpendicular to Z and X is the U parameter. *dx,dy,dz* and *ux,uy,uz* must not be null or collinear. *ux,uy,uz* will be modified to be orthogonal to *dx,dy,dz*. 
4703
4704 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. 
4705
4706 Note that this definition will be used for all analytical surfaces. 
4707
4708 **Example:** 
4709 ~~~~~
4710 # a plane through the point 10,0,0 perpendicular to X 
4711 # with U direction on Y 
4712 plane p1 10 0 0 1 0 0 0 1 0 
4713
4714 # an horixontal plane with origin 10, -20, -5 
4715 plane p2 10 -20 -5 
4716 ~~~~~
4717
4718 @subsubsection occt_draw_6_3_2  cylinder
4719
4720 Syntax:      
4721 ~~~~~
4722 cylinder name [x y z [dx dy dz [ux uy uz]]] radius 
4723 ~~~~~
4724
4725 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. 
4726
4727 **Example:** 
4728 ~~~~~
4729 # a cylinder on the default Z axis, radius 10 
4730 cylinder c1 10 
4731
4732 # a cylinder, also along the Z axis but with origin 5, 
4733 10, -3 
4734 cylinder c2 5 10 -3 10 
4735
4736 # a cylinder through the origin and on a diagonal 
4737 # with longitude pi/3 and latitude pi/4 (euler angles) 
4738 dset lo pi/3. la pi/4. 
4739 cylinder c3 0 0 0 cos(la)*cos(lo) cos(la)*sin(lo) 
4740 sin(la) 10 
4741 ~~~~~
4742
4743 @subsubsection occt_draw_6_3_3  cone
4744
4745 Syntax:      
4746 ~~~~~
4747 cone name [x y z [dx dy dz [ux uy uz]]] semi-angle radius 
4748 ~~~~~
4749 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. 
4750
4751 **Example:** 
4752 ~~~~~
4753 # a cone at 45 degrees at the origin on Z 
4754 cone c1 45 0 
4755
4756 # a cone on axis Z with radius r1 at z1 and r2 at z2 
4757 cone c2 0 0 z1 180.*atan2(r2-r1,z2-z1)/pi r1 
4758 ~~~~~
4759
4760 @subsubsection occt_draw_6_3_4  sphere
4761
4762 Syntax:      
4763 ~~~~~
4764 sphere name [x y z [dx dy dz [ux uy uz]]] radius 
4765 ~~~~~
4766
4767 Creates a sphere in the local coordinate system defined in the **plane** command. The sphere is centered at the origin. 
4768
4769 To parameterize the sphere, *u* is the angle from X to Y, between 0 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. 
4770
4771 **Example:**
4772 ~~~~~ 
4773 # a sphere at the origin 
4774 sphere s1 10 
4775 # a sphere at 10 10 10, with poles on the axis 1,1,1 
4776 sphere s2 10 10 10 1 1 1 10 
4777 ~~~~~
4778
4779 @subsubsection occt_draw_6_3_5  torus
4780
4781 Syntax:      
4782 ~~~~~
4783 torus name [x y z [dx dy dz [ux uy uz]]] major minor
4784 ~~~~~ 
4785
4786 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. 
4787
4788 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. 
4789
4790 **Example:** 
4791 ~~~~~
4792 # a torus at the origin 
4793 torus t1 20 5 
4794
4795 # a torus in another coordinate system 
4796 torus t2 10 5 -2 2 1 0 20 5 
4797 ~~~~~
4798
4799
4800 @subsubsection occt_draw_6_3_6  beziersurf
4801
4802 Syntax:      
4803 ~~~~~
4804 beziersurf name nbupoles nbvolpes pole, [weight] 
4805 ~~~~~
4806
4807 Use this command to create a bezier surface, rational or non-rational. First give the numbers of poles in the u and v directions. 
4808
4809 Then give the poles in the following order: *pole(1, 1), pole(nbupoles, 1), pole(1, nbvpoles)* and *pole(nbupoles, nbvpoles)*. 
4810
4811 Weights may be omitted, but if you give one weight you must give all of them. 
4812
4813 **Example:** 
4814 ~~~~~
4815 # a non-rational degree 2,3 surface 
4816 beziersurf s 3 4 \ 
4817 0 0 0 10 0 5 20 0 0 \ 
4818 0 10 2 10 10 3 20 10 2 \ 
4819 0 20 10 10 20 20 20 20 10 \ 
4820 0 30 0 10 30 0 20 30 0 
4821 ~~~~~
4822
4823 @subsubsection occt_draw_6_3_7   bsplinesurf, upbsplinesurf, vpbsplinesurf, uvpbsplinesurf
4824
4825 Syntax:     
4826 ~~~~~
4827 bsplinesurf name udegree nbuknots uknot umult ... nbvknot vknot 
4828 vmult ... x y z w ... 
4829 upbsplinesurf ... 
4830 vpbsplinesurf ... 
4831 uvpbsplinesurf ... 
4832 ~~~~~
4833
4834 * **bsplinesurf** generates bspline surfaces;
4835 * **upbsplinesurf** creates a bspline surface periodic in u; 
4836 * **vpbsplinesurf** creates one periodic in v; 
4837 * **uvpbsplinesurf** creates one periodic in uv. 
4838
4839 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. 
4840
4841 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. 
4842
4843 **Example:** 
4844 ~~~~~
4845 # create a bspline surface of degree 1 2 
4846 # with two knots in U and three in V 
4847 bsplinesurf s \ 
4848 1 2 0 2 1 2 \ 
4849 2 3 0 3 1 1 2 3 \ 
4850 0 0 0 1 10 0 5 1 \ 
4851 0 10 2 1 10 10 3 1 \ 
4852 0 20 10 1 10 20 20 1 \ 
4853 0 30 0 1 10 30 0 1 
4854 ~~~~~
4855
4856
4857 @subsubsection occt_draw_6_3_8  trim, trimu, trimv
4858
4859 Syntax:      
4860 ~~~~~
4861 trim newname name [u1 u2 [v1 v2]] 
4862 trimu newname name 
4863 trimv newname name 
4864 ~~~~~
4865
4866 The **trim** commands create trimmed curves or trimmed surfaces. Note that trimmed curves and surfaces are classes of the *Geom* package. 
4867 * *trim* creates either a new trimmed curve from a curve or a new trimmed surface in u and v from a surface.
4868 * *trimu* creates a u-trimmed surface, 
4869 * *trimv* creates a v-trimmed surface. 
4870
4871 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. 
4872
4873 **Note** that a trimmed curve or surface contains a copy of the basis geometry: modifying that will not modify the trimmed geometry. Trimming trimmed geometry will not create multiple levels of trimming. The basis geometry will be used. 
4874
4875 **Example:** 
4876 ~~~~~
4877 # create a 3d circle 
4878 circle c 0 0 0 10 
4879
4880 # trim it, use the same variable, the original is 
4881 deleted 
4882 trim c c 0 pi/2 
4883
4884 # the original can be recovered! 
4885 trim orc c 
4886
4887 # trim again 
4888 trim c c pi/4 pi/2 
4889
4890 # the original is not the trimmed curve but the basis 
4891 trim orc c 
4892
4893 # as the circle is periodic, the two following commands 
4894 are identical 
4895 trim cc c pi/2 0 
4896 trim cc c pi/2 2*pi 
4897
4898 # trim an infinite cylinder 
4899 cylinder cy 10 
4900 trimv cy cy 0 50 
4901 ~~~~~
4902
4903 @subsubsection occt_draw_6_3_9  offset
4904
4905 Syntax:      
4906 ~~~~~
4907 offset name basename distance [dx dy dz]
4908 ~~~~~ 
4909
4910 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. 
4911
4912 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. 
4913
4914 The offset curve or surface copies the basic geometry, which can be modified later. 
4915
4916 **Example:** 
4917 ~~~~~
4918 # graphic demonstration that the outline of a torus 
4919 # is the offset of an ellipse 
4920 smallview +X+Y 
4921 dset angle pi/6 
4922 torus t 0 0 0 0 cos(angle) sin(angle) 50 20 
4923 fit 
4924 ellipse e 0 0 0 50 50*sin(angle) 
4925 # note that the distance can be negative 
4926 offset l1 e 20 0 0 1 
4927 ~~~~~
4928
4929 @subsubsection occt_draw_6_3_10  revsurf
4930
4931 Syntax:      
4932 ~~~~~
4933 revsurf name curvename x y z dx dy dz
4934 ~~~~~ 
4935
4936 Creates a surface of revolution from a 3d curve. 
4937
4938 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. 
4939
4940 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. 
4941
4942 **Example:** 
4943 ~~~~~
4944 # another way of creating a torus like surface 
4945 circle c 50 0 0 20 
4946 revsurf s c 0 0 0 0 1 0 
4947 ~~~~~
4948
4949 @subsubsection occt_draw_6_3_11  extsurf
4950
4951 Syntax:      
4952 ~~~~~
4953 extsurf newname curvename dx dy dz 
4954 ~~~~~
4955
4956 Creates 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. 
4957
4958 In the syntax, *dx,dy,dz* gives the direction of extrusion. 
4959
4960 To parameterize a surface of extrusion: *u* is the parameter along the extruded curve; the *v* parameter is along the direction of extrusion. 
4961
4962 **Example:** 
4963 ~~~~~
4964 # an elliptic cylinder 
4965 ellipse e 0 0 0 10 5 
4966 extsurf s e 0 0 1 
4967 # to make it finite 
4968 trimv s s 0 10 
4969 ~~~~~
4970
4971 @subsubsection occt_draw_6_3_12  convert
4972
4973 Syntax:      
4974 ~~~~~
4975 convert newname name 
4976 ~~~~~
4977
4978 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.
4979  
4980 **Example:** 
4981 ~~~~~
4982 # turn a 2d arc of a circle into a 2d NURBS 
4983 circle c 0 0 5 
4984 trim c c 0 pi/3 
4985 convert c1 c 
4986
4987 # an easy way to make a planar bspline surface 
4988 plane p 
4989 trim p p -1 1 -1 1 
4990 convert p1 p 
4991 ~~~~~
4992
4993 **Note** that offset curves and surfaces are not processed by this command.
4994
4995 @subsection occt_draw_6_4  Curve and surface modifications
4996
4997 Draw provides commands to modify curves and surfaces, some of them are general, others restricted to bezier curves or bsplines. 
4998
4999 General modifications: 
5000
5001   * Reversing the parametrization: **reverse**, **ureverse**, **vreverse**
5002
5003 Modifications for both bezier curves and bsplines: 
5004
5005   * Exchanging U and V on a surface: **exchuv**
5006   * Segmentation: **segment**, **segsur**
5007   * Increasing the degree: **incdeg**, **incudeg**, **incvdeg**
5008   * Moving poles: **cmovep**, **movep**, **movecolp**, **moverowp**
5009
5010 Modifications for bezier curves: 
5011
5012   * Adding and removing poles: **insertpole**, **rempole**, **remcolpole**, **remrowpole**
5013
5014 Modifications for bspline: 
5015
5016   * Inserting and removing knots: **insertknot**, **remknot**, **insertuknot**, **remuknot**, **insetvknot**, **remvknot**
5017   * Modifying periodic curves and surfaces: **setperiodic**, **setnotperiodic**, **setorigin**, **setuperiodic**, **setunotperiodic**, **setuorigin**, **setvperiodic**, **setvnotperiodic**, **setvorigin**
5018
5019
5020
5021 @subsubsection occt_draw_6_4_1  reverse, ureverse, vreverse
5022
5023
5024 Syntax:            
5025 ~~~~~
5026 reverse curvename 
5027 ureverse surfacename 
5028 vreverse surfacename 
5029 ~~~~~
5030
5031 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. 
5032
5033 **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. 
5034
5035 Reversing a parameter on an analytical surface may create an indirect coordinate system. 
5036
5037 **Example:** 
5038 ~~~~~
5039 # reverse a trimmed 2d circle 
5040 circle c 0 0 5 
5041 trim c c pi/4 pi/2 
5042 reverse c 
5043
5044 # dumping c will show that it is now trimmed between 
5045 # 3*pi/2 and 7*pi/4 i.e. 2*pi-pi/2 and 2*pi-pi/4 
5046 ~~~~~
5047
5048 @subsubsection occt_draw_6_4_2  exchuv
5049
5050 Syntax:                 
5051 ~~~~~
5052 exchuv surfacename 
5053 ~~~~~
5054
5055 For a bezier or bspline surface this command exchanges the u and v parameters. 
5056
5057 **Example:** 
5058 ~~~~~
5059 # exchanging u and v on a spline (made from a cylinder) 
5060 cylinder c 5 
5061 trimv c c 0 10 
5062 convert c1 c 
5063 exchuv c1 
5064 ~~~~~
5065
5066 @subsubsection occt_draw_6_4_3  segment, segsur
5067
5068 Syntax:                  
5069 ~~~~~
5070 segment curve Ufirst Ulast 
5071 segsur surface Ufirst Ulast Vfirst Vlast 
5072 ~~~~~
5073
5074 **segment** and **segsur** segment a bezier curve and a bspline curve or surface respectively. 
5075
5076 These commands modify the curve to restrict it between the new parameters: *Ufirst*, the starting point of the modified curve, and *Ulast*, the end point. *Ufirst* is less than *Ulast*. 
5077
5078 This command must not be confused with **trim** which creates a new geometry. 
5079
5080 **Example:** 
5081 ~~~~~
5082 # segment a bezier curve in half 
5083 beziercurve c 3 0 0 0 10 0 0 10 10 0 
5084 segment c ufirst ulast 
5085 ~~~~~
5086
5087 @subsubsection occt_draw_6_4_4  iincudeg, incvdeg
5088
5089 Syntax:      
5090 ~~~~~
5091 incudeg surfacename newdegree 
5092 incvdeg surfacename newdegree 
5093 ~~~~~
5094
5095 **incudeg** and **incvdeg** increase the degree in the U or V parameter of a bezier or bspline surface.
5096  
5097 **Example:** 
5098 ~~~~~
5099 # make a planar bspline and increase the degree to 2 3 
5100 plane p 
5101 trim p p -1 1 -1 1 
5102 convert p1 p 
5103 incudeg p1 2 
5104 incvdeg p1 3 
5105 ~~~~~
5106
5107 **Note** that the geometry is modified.
5108
5109
5110 @subsubsection occt_draw_6_4_5  cmovep, movep, movecolp, moverowp
5111
5112 Syntax:      
5113 ~~~~~
5114 cmovep curve index dx dy [dz] 
5115 movep surface uindex vindex dx dy dz 
5116 movecolp surface uindex dx dy dz 
5117 moverowp surface vindex dx dy dz 
5118 ~~~~~
5119
5120 **move** methods translate poles of a bezier curve, a bspline curve or a bspline surface. 
5121 * **cmovep** and **movep** translate one pole with a given index. 
5122 * **movecolp** and **moverowp** translate a whole column (expressed by the *uindex*) or row (expressed by the *vindex*) of poles. 
5123
5124 **Example:** 
5125 ~~~~~
5126 # start with a plane 
5127 # transform to bspline, raise degree and add relief 
5128 plane p 
5129 trim p p -10 10 -10 10 
5130 convert p1 p 
5131 incud p1 2 
5132 incvd p1 2 
5133 movecolp p1 2 0 0 5 
5134 moverowp p1 2 0 0 5 
5135 movep p1 2 2 0 0 5 
5136 ~~~~~
5137
5138 @subsubsection occt_draw_6_4_6  insertpole, rempole, remcolpole, remrowpole
5139
5140 Syntax:                  
5141 ~~~~~
5142 insertpole curvename index x y [z] [weight] 
5143 rempole curvename index 
5144 remcolpole surfacename index 
5145 remrowpole surfacename index
5146 ~~~~~ 
5147
5148 **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. 
5149
5150 **rempole** removes a pole from a 2d or 3d bezier curve. Leave at least two poles in the curves. 
5151
5152 **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. 
5153
5154 **Example:** 
5155 ~~~~~
5156 # start with a segment, insert a pole at end 
5157 # then remove the central pole 
5158 beziercurve c 2 0 0 0 10 0 0 
5159 insertpole c 2 10 10 0 
5160 rempole c 2 
5161 ~~~~~
5162
5163 @subsubsection occt_draw_6_4_7  insertknot, insertuknot, insertvknot
5164
5165 Syntax:                  
5166 ~~~~~
5167 insertknot name knot [mult = 1] [knot mult ...] 
5168 insertuknot surfacename knot mult 
5169 insertvknot surfacename knot mult 
5170 ~~~~~
5171
5172 **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. 
5173
5174 **insertuknot** and **insertvknot** insert knots in a surface. 
5175
5176 **Example:** 
5177 ~~~~~
5178 # create a cylindrical surface and insert a knot 
5179 cylinder c 10 
5180 trim c c 0 pi/2 0 10 
5181 convert c1 c 
5182 insertuknot c1 pi/4 1 
5183 ~~~~~
5184
5185 @subsubsection occt_draw_6_4_8  remknot, remuknot, remvknot
5186
5187 Syntax:      
5188 ~~~~~
5189 remknot index [mult] [tol] 
5190 remuknot index [mult] [tol] 
5191 remvknot index [mult] [tol] 
5192 ~~~~~
5193
5194 **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. 
5195
5196 By default, if no tolerance is given, the knot will always be removed. 
5197
5198 **Example:** 
5199 ~~~~~
5200 # bspline circle, remove a knot 
5201 circle c 0 0 5 
5202 convert c1 c 
5203 incd c1 5 
5204 remknot c1 2 
5205 ~~~~~
5206
5207 **Note** that Curves or Surfaces may be modified.
5208
5209
5210 @subsubsection occt_draw_6_4_9  setperiodic, setnotperiodic, setuperiodic, setunotperiodic, setvperiodic, setvnotperiodic
5211
5212 Syntax:      
5213 ~~~~~
5214 setperiodic curve 
5215 setnotperiodic curve 
5216 setuperiodic surface 
5217 setunotperiodic surface 
5218 setvperiodic surface 
5219 setvnotperiodic surface
5220 ~~~~~ 
5221
5222 **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. 
5223
5224 **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. 
5225
5226 **Example:** 
5227 ~~~~~
5228 # a circle deperiodicized 
5229 circle c 0 0 5 
5230 convert c1 c 
5231 setnotperiodic c1 
5232 ~~~~~
5233
5234 @subsubsection occt_draw_6_4_10  setorigin, setuorigin, setvorigin
5235
5236 Syntax:      
5237 ~~~~~
5238 setorigin curvename index 
5239 setuorigin surfacename index 
5240 setuorigin surfacename index 
5241 ~~~~~
5242
5243 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. 
5244
5245 **Example:** 
5246 ~~~~~
5247 # a torus with new U and V origins 
5248 torus t 20 5 
5249 convert t1 t 
5250 setuorigin t1 2 
5251 setvorigin t1 2
5252 ~~~~~ 
5253
5254
5255 @subsection occt_draw_6_5  Transformations
5256
5257 Draw provides commands to apply linear transformations to geometric objects: they include translation, rotation, mirroring and scaling. 
5258
5259 @subsubsection occt_draw_6_5_1  translate, dtranslate
5260
5261 Syntax:                  
5262 ~~~~~
5263 translate name [names ...] dx dy dz 
5264 2dtranslate name [names ...] dx dy 
5265 ~~~~~
5266
5267 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. 
5268
5269 For 2d points or curves, use the **2dtranslate** command. 
5270
5271 **Example:** 
5272 ~~~~~
5273 # 3d tranlation 
5274 point p 10 20 30 
5275 circle c 10 20 30 5 
5276 torus t 10 20 30 5 2 
5277 translate p c t 0 0 15
5278 ~~~~~
5279  
5280 *NOTE* 
5281 *Objects are modified by this command.* 
5282
5283 @subsubsection occt_draw_6_5_2  rotate, 2drotate
5284
5285 Syntax:      
5286 ~~~~~
5287 rotate name [name ...] x y z dx dy dz angle 
5288 2drotate name [name ...] x y angle
5289 ~~~~~ 
5290
5291 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. 
5292
5293 For a 2d rotation, you need only give the center point and the angle. In 2d or 3d, the angle can be negative. 
5294
5295 **Example:** 
5296 ~~~~~
5297 # make a helix of circles. create a script file with 
5298 this code and execute it using **source**. 
5299 circle c0 10 0 0 3 
5300 for {set i 1} {$i <= 10} {incr i} { 
5301 copy c[expr $i-1] c$i 
5302 translate c$i 0 0 3 
5303 rotate c$i 0 0 0 0 0 1 36 
5304
5305 ~~~~~
5306
5307 @subsubsection occt_draw_6_5_3  pmirror, lmirror, smirror, dpmirror, dlmirror
5308
5309 Syntax:      
5310 ~~~~~
5311 pmirror name [names ...] x y z 
5312 lmirror name [names ...] x y z dx dy dz 
5313 smirror name [names ...] x y z dx dy dz 
5314 2dpmirror name [names ...] x y 
5315 2dlmirror name [names ...] x y dx dy 
5316 ~~~~~
5317
5318 The mirror commands perform a mirror transformation of 2d or 3d geometry. 
5319
5320 * **pmirror** is the point mirror, mirroring 3d curves and surfaces about a point of symmetry. 
5321 * **lmirror** is the line mirror commamd, mirroring 3d curves and surfaces about an axis of symmetry.
5322 * **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. 
5323 * **2dpmirror** is the point mirror in 2D.
5324 * **2dlmirror** is the axis symmetry mirror in 2D.
5325
5326 **Example:** 
5327 ~~~~~
5328 # build 3 images of a torus 
5329 torus t 10 10 10 1 2 3 5 1 
5330 copy t t1 
5331 pmirror t1 0 0 0 
5332 copy t t2 
5333 lmirror t2 0 0 0 1 0 0 
5334 copy t t3 
5335 smirror t3 0 0 0 1 0 0 
5336 ~~~~~
5337
5338 @subsubsection occt_draw_6_5_4  pscale, dpscale
5339
5340 Syntax:                  
5341 ~~~~~
5342 pscale name [name ...] x y z s 
5343 2dpscale name [name ...] x y s 
5344 ~~~~~
5345
5346 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**.
5347
5348  
5349 **Example:** 
5350 ~~~~~
5351 # double the size of a sphere 
5352 sphere s 0 0 0 10 
5353 pscale s 0 0 0 2 
5354 ~~~~~
5355
5356 @subsection occt_draw_6_6  Curve and surface analysis
5357
5358 **Draw** provides methods to compute information about curves and surfaces: 
5359
5360   * **coord** to find the coordinates of a point.
5361   * **cvalue** and **2dcvalue** to compute points and derivatives on curves.
5362   * **svalue** to compute points and derivatives on a surface.
5363   * **localprop** and **minmaxcurandif** to compute the curvature on a curve.
5364   * **parameters** to compute (u,v) values for a point on a surface.
5365   * **proj** and **2dproj** to project a point on a curve or a surface.
5366   * **surface_radius** to compute the curvature on a surface.
5367
5368 @subsubsection occt_draw_6_6_1  coord
5369
5370 Syntax:            
5371 ~~~~~
5372 coord P x y [z] 
5373 ~~~~~
5374
5375 Sets the x, y (and optionally z) coordinates of the point P. 
5376
5377 **Example:** 
5378 ~~~~~
5379 # translate a point 
5380 point p 10 5 5 
5381 translate p 5 0 0 
5382 coord p x y z 
5383 # x value is 15 
5384 ~~~~~
5385
5386
5387 @subsubsection occt_draw_6_6_2   cvalue, 2dcvalue
5388
5389 Syntax:      
5390 ~~~~~
5391 cvalue curve U x y z [d1x d1y d1z [d2x d2y d2z]] 
5392 2dcvalue curve U x y [d1x d1y [d2x d2y]] 
5393 ~~~~~
5394
5395 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*. 
5396
5397 **Example:**
5398
5399 Let on a bezier curve at parameter 0 the point is the first pole; the first derivative is the vector to the second pole multiplied by the degree; the second derivative is the difference first to the second pole, second to the third pole multipied by *degree-1* : 
5400
5401 ~~~~~
5402 2dbeziercurve c 4 0 0 1 1 2 1 3 0 
5403 2dcvalue c 0 x y d1x d1y d2x d2y 
5404
5405 # values of x y d1x d1y d2x d2y 
5406 # are 0 0 3 3 0 -6 
5407 ~~~~~
5408
5409 @subsubsection occt_draw_6_6_3  svalue
5410
5411 Syntax: 
5412 ~~~~~
5413 svalue surfname U v x y z [dux duy duz dvx dvy dvz [d2ux d2uy d2uz d2vx d2vy d2vz d2uvx d2uvy d2uvz]] 
5414 ~~~~~
5415
5416 Computes points and derivatives on a surface for a pair of parameter values. The result depends on the number of arguments. You can compute the first and the second derivatives. 
5417
5418 **Example:** 
5419 ~~~~~
5420 # display points on a sphere 
5421 sphere s 10 
5422 for {dset t 0} {[dval t] <= 1} {dset t t+0.01} { 
5423 svalue s t*2*pi t*pi-pi/2 x y z 
5424 point . x y z 
5425
5426 ~~~~~
5427
5428 @subsubsection occt_draw_6_6_4  localprop, minmaxcurandinf
5429
5430 Syntax:      
5431 ~~~~~
5432 localprop curvename U 
5433 minmaxcurandinf curve
5434 ~~~~~ 
5435
5436 **localprop** computes the curvature of a curve. 
5437 **minmaxcurandinf** computes and prints the parameters of the points where the curvature is minimum and maximum on a 2d curve. 
5438
5439 **Example:** 
5440 ~~~~~
5441 # show curvature at the center of a bezier curve 
5442 beziercurve c 3 0 0 0 10 2 0 20 0 0 
5443 localprop c 0.5 
5444 == Curvature : 0.02 
5445 ~~~~~
5446
5447 @subsubsection occt_draw_6_6_5  parameters
5448
5449 Syntax:      
5450 ~~~~~
5451 parameters surf/curve x y z U [V] 
5452 ~~~~~
5453
5454 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. 
5455
5456 **Example:** 
5457 ~~~~~
5458 # Compute parameters on a plane 
5459 plane p 0 0 10 1 1 0 
5460 parameters p 5 5 5 u v 
5461 # the values of u and v are : 0 5 
5462 ~~~~~
5463
5464 @subsubsection occt_draw_6_6_6  proj, 2dproj
5465
5466 Syntax:      
5467 ~~~~~
5468 proj name x y z 
5469 2dproj name xy 
5470 ~~~~~
5471
5472 Use **proj** to project a point on a 3d curve or a surface and **2dproj** for a 2d curve. 
5473
5474 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, ... *
5475
5476 **Example:** 
5477
5478 Let us project a point on a torus 
5479
5480 ~~~~~
5481 torus t 20 5 
5482 proj t 30 10 7 
5483 == ext_1 ext_2 ext_3 ext_4 
5484 ~~~~~
5485
5486 @subsubsection occt_draw_6_6_7  surface_radius
5487
5488 Syntax:      
5489 ~~~~~
5490 surface_radius surface u v [c1 c2] 
5491 ~~~~~
5492
5493 Computes the main curvatures of a surface at parameters *(u,v)*. If there are extra arguments, their curvatures are stored in variables *c1* and *c2*. 
5494
5495 **Example:** 
5496
5497 Let us compute curvatures of a cylinder:
5498
5499 ~~~~~
5500 cylinder c 5 
5501 surface_radius c pi 3 c1 c2 
5502 == Min Radius of Curvature : -5 
5503 == Min Radius of Curvature : infinite 
5504 ~~~~~
5505
5506
5507 @subsection occt_draw_6_7  Intersections
5508
5509 * **intersect** computes intersections of surfaces; 
5510 * **2dintersect** computes intersections of 2d curves.
5511
5512 @subsubsection occt_draw_6_7_1  intersect
5513
5514 Syntax:      
5515 ~~~~~
5516 intersect name surface1 surface2
5517 ~~~~~ 
5518
5519 Intersects two surfaces; if there is one intersection curve it will be named *name*, if there are more than one they will be named *name_1*, *name_2*, ... 
5520
5521 **Example:** 
5522 ~~~~~
5523 # create an ellipse 
5524 cone c 45 0 
5525 plane p 0 0 40 0 1 5 
5526 intersect e c p 
5527 ~~~~~
5528
5529 @subsubsection occt_draw_6_7_2  dintersect
5530
5531 Syntax:      
5532 ~~~~~
5533 2dintersect curve1 curve2 
5534 ~~~~~
5535
5536 Displays the intersection points between two 2d curves. 
5537
5538 **Example:** 
5539 ~~~~~
5540 # intersect two 2d ellipses 
5541 ellipse e1 0 0 5 2 
5542 ellipse e2 0 0 0 1 5 2 
5543 2dintersect e1 e2 
5544 ~~~~~
5545
5546 @subsection occt_draw_6_8  Approximations
5547
5548 Draw provides command to create curves and surfaces by approximation. 
5549
5550 * **2dapprox** fits a curve through 2d points; 
5551 * **appro** fits a curve through 3d points;
5552 * **surfapp** and **grilapp** fit a surface through 3d points;
5553 * **2dinterpolate** interpolates a curve. 
5554
5555 @subsubsection occt_draw_6_8_1   appro, dapprox
5556
5557 Syntax:      
5558 ~~~~~
5559 appro result nbpoint [curve] 
5560 2dapprox result nbpoint [curve / x1 y1 x2 y2]
5561 ~~~~~ 
5562
5563 These commands fit a curve through a set of points. First give the number of points, then choose one of the three ways available to get the points. If you have no arguments, click on the points. If you have a curve argument or a list of points, the command launches computation of the points on the curve. 
5564
5565 **Example:** 
5566
5567 Let us pick points and they will be fitted 
5568
5569 ~~~~~
5570 2dapprox c 10 
5571 ~~~~~
5572
5573 @subsubsection occt_draw_6_8_2  surfapp, grilapp
5574
5575
5576 Syntax: 
5577 ~~~~~
5578 surfapp name nbupoints nbvpoints x y z .... 
5579 grilapp name nbupoints nbvpoints xo dx yo dy z11 z12 ... 
5580 ~~~~~
5581
5582 * **surfapp** fits a surface through an array of u and v points, nbupoints*nbvpoints. 
5583 * **grilapp** has the same function, but the x,y coordinates of the points are on a grid starting at x0,y0 with steps dx,dy. 
5584
5585 **Example:** 
5586 ~~~~~
5587 # a surface using the same data as in the beziersurf 
5588 example sect 4.4 
5589 surfapp s 3 4 \ 
5590 0 0 0 10 0 5 20 0 0 \ 
5591 0 10 2 10 10 3 20 10 2 \ 
5592 0 20 10 10 20 20 20 20 10 \ 
5593 0 30 0 10 30 0 20 30 0 
5594 ~~~~~
5595
5596 @subsection  occt_draw_6_9  Projections
5597
5598 Draw provides commands to project points/curves on curves/surfaces.
5599
5600 * **proj** projects point on the curve/surface (see @ref occt_draw_6_6_6 "proj command description");
5601 * **project** projects 3D curve on the surface (see @ref occt_draw_6_2_11 "project command description");
5602 * **projponf** projects point on the face.
5603
5604 @subsubsection  occt_draw_6_9_1 projponf
5605
5606 Syntax:
5607 ~~~~~
5608 projponf face pnt [extrema flag: -min/-max/-minmax] [extrema algo: -g(grad)/-t(tree)]
5609 ~~~~~
5610
5611 **projponf** projects point *pnt* on the face *face*.
5612 You can change the Extrema options:
5613 * To change the Extrema search algorithm use the following options:<br>
5614  -g - for Grad algorithm;<br>
5615  -t - for Tree algorithm;
5616 * To change the Extrema search solutions use the following options:<br>
5617  -min - to look for Min solutions;<br>
5618  -max - to look for Max solutions;<br>
5619  -minmax - to look for MinMax solutions.
5620
5621 **Example**
5622 ~~~~~
5623 plane p 0 0 0 0 0 1
5624 mkface f p
5625 point pnt 5 5 10
5626
5627 projponf f pnt
5628 # proj dist = 10
5629 # uvproj = 5 5
5630 # pproj = 5 5 0
5631 ~~~~~
5632
5633 @subsection occt_draw_6_10  Constraints
5634
5635 * **cirtang** constructs 2d circles tangent to curves;
5636 * **lintan** constructs 2d lines tangent to curves. 
5637
5638
5639 @subsubsection occt_draw_6_10_1  cirtang
5640
5641 Syntax: 
5642 ~~~~~
5643 cirtang cname curve/point/radius curve/point/radius curve/point/radius 
5644 ~~~~~
5645
5646 Builds all circles satisfying the three constraints which are either a curve (the circle must be tangent to that curve), a point (the circle must pass through that point), or a radius for the circle. Only one constraint can be a radius. The solutions will be stored in variables *name_1*, *name_2*, etc. 
5647
5648 **Example:** 
5649 ~~~~~
5650 # a point, a line and a radius. 2 solutions 
5651 point p 0 0 
5652 line 1 10 0 -1 1 
5653 cirtang c p 1 4 
5654 == c_1 c_2 
5655 ~~~~~
5656
5657 @subsubsection occt_draw_6_10_2  lintan
5658
5659 Syntax:      
5660 ~~~~~
5661 lintan name curve curve [angle] 
5662 ~~~~~
5663
5664 Builds all 2d lines tangent to two curves. If the third angle argument is given the second curve must be a line and **lintan** will build all lines tangent to the first curve and forming the given angle with the line. The angle is given in degrees. The solutions are named *name_1*, *name_2*, etc. 
5665
5666 **Example:** 
5667 ~~~~~
5668 # lines tangent to 2 circles, 4 solutions 
5669 circle c1 -10 0 10 
5670 circle c2 10 0 5 
5671 lintan l c1 c2 
5672
5673 # lines at 15 degrees tangent to a circle and a line, 2 
5674 solutions: l1_1 l1_2 
5675 circle c1 -10 0 1 
5676 line l 2 0 1 1 
5677 lintan l1 c1 l 15 
5678 ~~~~~
5679
5680 @subsection occt_draw_6_11  Display
5681
5682 Draw provides commands to control the display of geometric objects. Some display parameters are used for all objects, others are valid for surfaces only, some for bezier and bspline only, and others for bspline only. 
5683
5684 On curves and surfaces, you can control the mode of representation with the **dmode** command. You can control the parameters for the mode with the **defle** command and the **discr** command, which control deflection and discretization respectively. 
5685
5686 On surfaces, you can control the number of isoparametric curves displayed on the surface with the **nbiso** command. 
5687
5688 On bezier and bspline curve and surface you can toggle the display of the control points with the **clpoles** and **shpoles** commands. 
5689
5690 On bspline curves and surfaces you can toggle the display of the knots with the **shknots** and **clknots** commands. 
5691
5692
5693 @subsubsection occt_draw_6_11_1  dmod, discr, defle
5694
5695 Syntax:      
5696 ~~~~~
5697 dmode name [name ...] u/d 
5698 discr name [name ...] nbintervals 
5699 defle name [name ...] deflection 
5700 ~~~~~
5701
5702 **dmod** command allows choosing the display mode for a curve or a surface. 
5703
5704 In mode *u*, or *uniform deflection*, the points are computed to keep the polygon at a distance lower than the deflection of the geometry. The deflection is set with the *defle* command. This mode involves intensive use of computational power. 
5705
5706 In *d*, or discretization mode, a fixed number of points is computed. This number is set with the *discr* command. This is the default mode. On a bspline, the fixed number of points is computed for each span of the curve. (A span is the interval between two knots). 
5707
5708 If the curve or the isolines seem to present too many angles, you can either increase the discretization or lower the deflection, depending on the mode. This will increase the number of points. 
5709
5710 **Example:** 
5711 ~~~~~
5712 # increment the number of points on a big circle 
5713 circle c 0 0 50 50 
5714 discr 100 
5715
5716 # change the mode 
5717 dmode c u 
5718 ~~~~~
5719
5720 @subsubsection occt_draw_6_11_2   nbiso
5721
5722 Syntax:      
5723 ~~~~~
5724 nbiso name [names...] nuiso nviso 
5725 ~~~~~
5726
5727 Changes the number of isoparametric curves displayed on a surface in the U and V directions. On a bspline surface, isoparametric curves are displayed by default at knot values. Use *nbiso* to turn this feature off. 
5728
5729 **Example:** 
5730
5731 Let us  display 35 meridians and 15 parallels on a sphere:
5732 ~~~~~ 
5733 sphere s 20 
5734 nbiso s 35 15 
5735 ~~~~~
5736
5737 @subsubsection occt_draw_6_11_3  clpoles, shpoles
5738
5739 Syntax:      
5740 ~~~~~
5741 clpoles name 
5742 shpoles name 
5743 ~~~~~
5744
5745 On bezier and bspline curves and surfaces, the control polygon is displayed by default: *clpoles* erases it and *shpoles* restores it. 
5746
5747 **Example:** 
5748
5749 Let us make a bezier curve and erase the poles 
5750
5751 ~~~~~
5752 beziercurve c 3 0 0 0 10 0 0 10 10 0 
5753 clpoles c 
5754 ~~~~~
5755
5756 @subsubsection occt_draw_6_11_4  clknots, shknots
5757
5758 Syntax:   
5759 ~~~~~
5760 clknots name 
5761 shknots name 
5762 ~~~~~
5763
5764 By default, knots on a bspline curve or surface are displayed with markers at the points with parametric value equal to the knots. *clknots* removes them and *shknots* restores them. 
5765
5766 **Example:** 
5767 ~~~~~
5768 # hide the knots on a bspline curve 
5769 bsplinecurve bc 2 3 0 3 1 1 2 3 \ 
5770 10 0 7 1 7 0 7 1 3 0 8 1 0 0 7 1 
5771 clknots bc
5772 ~~~~~
5773
5774
5775 @section occt_draw_7 Topology commands
5776
5777 Draw provides a set of commands to test OCCT Topology libraries. The Draw commands are found in the DRAWEXE executable or in any executable including the BRepTest commands. 
5778
5779 Topology defines the relationship between simple geometric entities, which can thus be linked together to represent complex shapes. The type of variable used by Topology in Draw is the shape variable. 
5780
5781 The <a href="user_guides__modeling_data.html#occt_modat_5">different topological shapes</a> include: 
5782
5783   * **COMPOUND**: A group of any type of topological object.
5784   * **COMPSOLID**: A set of solids connected by their faces. This expands the notions of WIRE and SHELL to solids.
5785   * **SOLID**: A part of space limited by shells. It is three dimensional.
5786   * **SHELL**: A set of faces connected by their edges. A shell can be open or closed.
5787   * **FACE**: In 2d, a plane; in 3d, part of a surface. Its geometry is constrained (trimmed) by contours. It is two dimensional.
5788   * **WIRE**: A set of edges connected by their vertices. It can be open or closed depending on whether the edges are linked or not.
5789   * **EDGE**: A topological element corresponding to a restrained curve. An edge is generally limited by vertices. It has one dimension.
5790   * **VERTEX**: A topological element corresponding to a point. It has a zero dimension.
5791
5792 Shapes are usually shared. **copy** will create a new shape which shares its representation with the original. Nonetheless, two shapes sharing the same topology can be moved independently (see the section on **transformation**). 
5793
5794 The following topics are covered in the eight sections of this chapter: 
5795
5796   * Basic shape commands to handle the structure of shapes and control the display.
5797   * Curve and surface topology, or methods to create topology from geometry and vice versa.
5798   * Primitive construction commands: box, cylinder, wedge etc.
5799   * Sweeping of shapes.
5800   * Transformations of shapes: translation, copy, etc.
5801   * Topological operations, or booleans.
5802   * Drafting and blending.
5803   * Analysis of shapes.
5804
5805
5806 @subsection occt_draw_7_1  Basic topology
5807
5808 The set of basic commands allows simple operations on shapes, or step-by-step construction of objects. These commands are useful for analysis of shape structure and include: 
5809
5810   * **isos** and **discretisation** to control display of shape faces by isoparametric curves .
5811   * **orientation**, **complement** and **invert** to modify topological attributes such as orientation.
5812   * **explode**, **exwire** and **nbshapes** to analyze the structure of a shape.
5813   * **emptycopy**, **add**, **compound** to create shapes by stepwise construction.
5814
5815 In Draw, shapes are displayed using isoparametric curves. There is color coding for the edges: 
5816
5817   * a red edge is an isolated edge, which belongs to no faces.
5818   * a green edge is a free boundary edge, which belongs to one face,
5819   * a yellow edge is a shared edge, which belongs to at least two faces.
5820
5821
5822 @subsubsection occt_draw_7_1_1  isos, discretisation
5823
5824 Syntax:                  
5825 ~~~~~
5826 isos [name ...][nbisos] 
5827 discretisation nbpoints
5828 ~~~~~
5829  
5830 Determines or changes the number of isoparametric curves on shapes. 
5831
5832 The same number is used for the u and v directions. With no arguments, *isos* prints the current default value. To determine, the number of isos for a shape, give it name as the first argument. 
5833
5834 *discretisation* changes the default number of points used to display the curves. The default value is 30. 
5835
5836 **Example:** 
5837 ~~~~~
5838 # Display only the edges (the wireframe) 
5839 isos 0 
5840 ~~~~~
5841
5842 **Warning**: don’t confuse *isos* and *discretisation* with the geometric commands *nbisos* and *discr*. 
5843
5844
5845 @subsubsection occt_draw_7_1_2  orientation, complement, invert, normals, range
5846
5847 Syntax:      
5848 ~~~~~
5849 orientation name [name ...] F/R/E/I 
5850 complement name [name ...] 
5851 invert name 
5852 normals s (length = 10), disp normals 
5853 range name value value 
5854 ~~~~~
5855
5856 * **orientation** -- assigns the orientation of simple and complex shapes to one of the following four values: *FORWARD, REVERSED, INTERNAL, EXTERNAL*. 
5857 * **complement** -- changes the current orientation of shapes to its complement: *FORWARD* to *REVERSED* and  *INTERNAL* to *EXTERNAL*. 
5858 * **invert** -- creates a copy of the original shape with a reversed orientation of all subshapes. For example, it may be useful to reverse the normals of a solid. 
5859 * *normals** -- returns the assignment of colors to orientation values. 
5860 * **range** -- defines the length of a selected edge by defining the values of a starting point and an end point.
5861  
5862 **Example:** 
5863 ~~~~~
5864 # to invert normals of a box 
5865 box b 10 20 30 
5866 normals b 5 
5867 invert b 
5868 normals b 5 
5869
5870 # to assign a value to an edge 
5871 box b1 10 20 30 
5872 # to define the box as edges 
5873 explode b1 e 
5874 b_1 b_2 b_3 b_4 b_5 b_6 b_7 b_8 b_9 b_10 b_11 b_12 
5875 # to define as an edge 
5876 makedge e 1 
5877 # to define the length of the edge as starting from 0 
5878 and finishing at 1 
5879 range e 0 1 
5880 ~~~~~
5881
5882 @subsubsection occt_draw_7_1_3  explode, exwire, nbshapes
5883
5884 Syntax:      
5885 ~~~~~
5886 explode name [C/So/Sh/F/W/E/V] 
5887 exwire name 
5888 nbshapes name 
5889 ~~~~~
5890
5891 **explode** extracts subshapes from an entity. The subshapes will be named *name_1*, *name_2*, ... Note that they are not copied but shared with the original. 
5892
5893 With name only, **explode** will extract the first sublevel of shapes: the shells of a solid or the edges of a wire, for example. With one argument, **explode** will extract all subshapes of that type: *C* for compounds, *So* for solids, *Sh* for shells, *F* for faces, *W* for wires, *E* for edges, *V* for vertices. 
5894
5895 **exwire** is a special case of **explode** for wires, which extracts the edges in an ordered way, if possible. Each edge, for example, is connected to the following one by a vertex. 
5896
5897 **nbshapes** counts the number of shapes of each type in an entity. 
5898
5899 **Example:** 
5900 ~~~~~
5901 # on a box 
5902 box b 10 20 30 
5903
5904 # whatis returns the type and various information 
5905 whatis b 
5906 = b is a shape SOLID FORWARD Free Modified 
5907
5908 # make one shell 
5909 explode b 
5910 whatis b_1 
5911 = b_1 is a shape SHELL FORWARD Modified Orientable 
5912 Closed 
5913
5914 # extract the edges b_1, ... , b_12 
5915 explode b e 
5916 ==b_1 ... b_12 
5917
5918 # count subshapes 
5919 nbshapes b 
5920 == 
5921 Number of shapes in b 
5922 VERTEX : 8 
5923 EDGE : 12 
5924 WIRE : 6 
5925 FACE : 6 
5926 SHELL : 1 
5927 SOLID : 1 
5928 COMPSOLID : 0 
5929 COMPOUND : 0 
5930 SHAPE : 34 
5931 ~~~~~
5932
5933 @subsubsection occt_draw_7_1_4  emptycopy, add, compound
5934
5935 Syntax:                  
5936 ~~~~~
5937 emptycopy [newname] name 
5938 add name toname 
5939 compound [name ...] compoundname 
5940 ~~~~~
5941
5942 **emptycopy** returns an empty shape with the same orientation, location, and geometry as the target shape, but with no sub-shapes. If the **newname** argument is not given, the new shape is stored with the same name. This command is used to modify a frozen shape. A frozen shape is a shape used by another one. To modify it, you must **emptycopy** it. Its subshape may be reinserted with the **add** command. 
5943
5944 **add** inserts shape *C* into shape *S*. Verify that *C* and *S* reference compatible types of objects: 
5945   * Any *Shape* can be added to a *Compound*.
5946   * Only a *Solid* can be added to a *CompSolid*.
5947   * Only a *Shell* can *Edge* or a *Vertex* can be added into a *Solid*.
5948   * Only a *Face* can be added to a *Shell*.
5949   * Only a *Wire* and *Vertex* can be added in a *Solid*.
5950   * Only an *Edge* can be added to a *Wire*.
5951   * Only a *Vertex* can be added to an *Edge*.
5952   * Nothing can be added to a *Vertex*.
5953
5954 **emptycopy** and **add** should be used with care. 
5955
5956 On the other hand, **compound** is a safe way to achieve a similar result. It creates a compound from shapes. If no shapes are given, the compound is empty. 
5957
5958 **Example:** 
5959 ~~~~~
5960 # a compound with three boxes 
5961 box b1 0 0 0 1 1 1 
5962 box b2 3 0 0 1 1 1 
5963 box b3 6 0 0 1 1 1 
5964 compound b1 b2 b3 c 
5965 ~~~~~
5966
5967
5968 @subsubsection occt_draw_7_1_5  compare
5969
5970 Syntax:
5971 ~~~~~
5972 compare shape1 shape2
5973 ~~~~~
5974
5975 **compare** compares the two shapes *shape1* and *shape2* using the methods *TopoDS_Shape::IsSame()* and *TopoDS_Shape::IsEqual()*.
5976
5977 **Example**
5978 ~~~~~
5979 box b1 1 1 1
5980 copy b1 b2
5981 compare b1 b2
5982 # same shapes
5983 # equal shapes
5984
5985 orientation b2 R
5986 compare b1 b2
5987 # same shapes
5988
5989 box b2 1 1 1
5990 compare b1 b2
5991 # shapes are not same
5992 ~~~~~
5993
5994 @subsubsection occt_draw_7_1_6  issubshape
5995
5996 Syntax:
5997 ~~~~~
5998 issubshape subshape shape
5999 ~~~~~
6000
6001 **issubshape** checks if the shape *subshape* is sub-shape of the shape *shape* and gets its index in the shape.
6002
6003 **Example**
6004 ~~~~~
6005 box b 1 1 1
6006 explode b f
6007 issubshape b_2 b
6008 # b_2 is sub-shape of b. Index in the shape: 2.
6009 ~~~~~
6010
6011
6012 @subsection occt_draw_7_2  Curve and surface topology
6013
6014 This group of commands is used to create topology from shapes and to extract shapes from geometry. 
6015
6016   * To create vertices, use the **vertex** command.
6017   * To create edges use, the **edge**, **mkedge** commands.
6018   * To create wires, use the **wire**, **polyline**, **polyvertex** commands.
6019   * To create faces, use the **mkplane**, **mkface** commands.
6020   * To extract the geometry from edges or faces, use the **mkcurve** and **mkface** commands.
6021   * To extract the 2d curves from edges or faces, use the **pcurve** command.
6022
6023
6024 @subsubsection occt_draw_7_2_1  vertex
6025
6026 Syntax:      
6027 ~~~~~
6028 vertex name [x y z / p edge] 
6029 ~~~~~
6030
6031 Creates a vertex at either a 3d location x,y,z or the point at parameter p on an edge. 
6032
6033 **Example:** 
6034 ~~~~~
6035 vertex v1 10 20 30 
6036 ~~~~~
6037
6038 @subsubsection occt_draw_7_2_1a  mkpoint
6039
6040 Syntax:
6041 ~~~~~
6042 mkpoint name vertex
6043 ~~~~~
6044
6045 Creates a point from the coordinates of a given vertex.
6046
6047 **Example:** 
6048 ~~~~~
6049 mkpoint p v1
6050 ~~~~~
6051
6052 @subsubsection occt_draw_7_2_2  edge, mkedge, uisoedge, visoedge
6053
6054 Syntax:      
6055 ~~~~~
6056 edge name vertex1 vertex2 
6057 mkedge edge curve [surface] [pfirst plast] [vfirst [pfirst] vlast [plast]] 
6058 uisoedge edge face u v1 v2 
6059 visoedge edge face v u1 u2 
6060 ~~~~~
6061
6062 * **edge** creates a straight line edge between two vertices. 
6063 * **mkedge** generates edges from curves<.Two parameters can be given for the vertices: the first and last parameters of the curve are given by default. Vertices can also be given with their parameters, this option allows blocking the creation of new vertices. If the parameters of the vertices are not given, they are computed by projection on the curve. Instead of a 3d curve, a 2d curve and a surface can be given. 
6064
6065 **Example:** 
6066 ~~~~~
6067 # straight line edge 
6068 vertex v1 10 0 0 
6069 vertex v2 10 10 0 
6070 edge e1 v1 v2 
6071
6072 # make a circular edge 
6073 circle c 0 0 0 5 
6074 mkedge e2 c 0 pi/2 
6075
6076 # A similar result may be achieved by trimming the curve 
6077 # The trimming is removed by mkedge 
6078 trim c c 0 pi/2 
6079 mkedge e2 c 
6080 ~~~~~
6081
6082 * **visoedge** and **uisoedge** are commands that generate a *uiso* parameter edge or a *viso* parameter edge. 
6083
6084 **Example:** 
6085 ~~~~~
6086 # to create an edge between v1 and v2 at point u 
6087 # to create the example plane 
6088 plane p 
6089 trim p p 0 1 0 1 
6090 convert p p 
6091 incudeg p 3 
6092 incvdeg p 3 
6093 movep p 2 2 0 0 1 
6094 movep p 3 3 0 0 0.5 
6095 mkface p p 
6096 # to create the edge in the plane at the u axis point 
6097 0.5, and between the v axis points v=0.2 and v =0.8 
6098 uisoedge e p 0.5 0.20 0.8 
6099 ~~~~~
6100
6101 @subsubsection occt_draw_7_2_3  wire, polyline, polyvertex
6102
6103 Syntax:      
6104 ~~~~~
6105 wire wirename e1/w1 [e2/w2 ...] 
6106 polyline name x1 y1 z1 x2 y2 z2 ... 
6107 polyvertex name v1 v2 ... 
6108 ~~~~~
6109
6110 **wire** creates a wire from edges or wires. The order of the elements should ensure that the wire is connected, and vertex locations will be compared to detect connection. If the vertices are different, new edges will be created to ensure topological connectivity. The original edge may be copied in the new one. 
6111
6112 **polyline** creates a polygonal wire from point coordinates. To make a closed wire, you should give the first point again at the end of the argument list. 
6113
6114 **polyvertex** creates a polygonal wire from vertices. 
6115
6116 **Example:** 
6117 ~~~~~
6118 # create two polygonal wires 
6119 # glue them and define as a single wire 
6120 polyline w1 0 0 0 10 0 0 10 10 0 
6121 polyline w2 10 10 0 0 10 0 0 0 0 
6122 wire w w1 w2 
6123 ~~~~~
6124
6125 @subsubsection occt_draw_7_2_4  profile
6126
6127 Syntax       
6128 ~~~~~
6129 profile name [code values] [code values] ... 
6130 ~~~~~
6131
6132
6133 **profile** builds a profile in a plane using a moving point and direction. By default, the profile is closed and a face is created. The original point is 0 0, and direction is 1 0 situated in the XY plane. 
6134
6135
6136 | **Code**     |    **Values **    |       **Action** |
6137 | :------------ | :------------- | :---------------- |
6138 | O                 |                     X Y Z      |          Sets the origin of the plane |
6139 | P                 |         DX DY DZ UX UY UZ  |  Sets the normal and X of the plane |
6140 | F                 |                      X Y    |               Sets the first point |
6141 | X                 |                      DX      |             Translates a point along X |
6142 | Y                 |                      DY       |            Translates a point along Y |
6143 | L                 |                      DL        |            Translates a point along direction |
6144 | XX                |                    X           |           Sets point X coordinate |
6145 | YY                |                    Y           |           Sets point Y coordinate |
6146 | T                 |                      DX DY     |         Translates a point |
6147 | TT                |                     X Y        |           Sets a point |
6148 | R                 |                      Angle     |           Rotates direction |
6149 | RR                |                    Angle       |         Sets direction |
6150 | D                 |                     DX DY      |        Sets direction |
6151 | IX                |                      X         |             Intersects with vertical |
6152 | IY                |                      Y         |             Intersects with horizontal |
6153 | C                 |                Radius Angle    |      Arc of circle tangent to direction |
6154
6155
6156 Codes and values are used to define the next point or change the direction. When the profile changes from a straight line to a curve, a tangent is created. All angles are in degrees and can be negative. 
6157
6158 The point [code values] can be repeated any number of times and in any order to create the profile contour. 
6159
6160 | Suffix | Action |
6161 | :----- | :----- |
6162 | No suffix  |             Makes a closed face |
6163 | W          |               Make a closed wire |
6164 | WW         |            Make an open wire |
6165
6166 The profile shape definition is the suffix; no suffix produces a face, *w* is a closed wire, *ww* is an open wire. 
6167
6168 Code letters are not case-sensitive. 
6169
6170 **Example:** 
6171 ~~~~~
6172 # to create a trianglular plane using a vertex at the 
6173 origin, in the xy plane 
6174 profile p O 0 0 0 X 1 Y 0 x 1 y 1 
6175 ~~~~~
6176
6177 **Example:** 
6178 ~~~~~
6179 # to create a contour using the different code 
6180 possibilities 
6181
6182 # two vertices in the xy plane 
6183 profile p F 1 0 x 2 y 1 ww 
6184
6185 # to view from a point normal to the plane 
6186 top 
6187
6188 # add a circular element of 45 degrees 
6189 profile p F 1 0 x 2 y 1 c 1 45 ww 
6190
6191 # add a tangential segment with a length value 1 
6192 profile p F 1 0 x 2 y 1 c 1 45 l 1 ww 
6193
6194 # add a vertex with xy values of 1.5 and 1.5 
6195 profile p F 1 0 x 2 y 1 c 1 45 l 1 tt 1.5 1.5 ww 
6196
6197 # add a vertex with the x value 0.2, y value is constant 
6198 profile p F 1 0 x 2 y 1 c 1 45 l 1 tt 1.5 1.5 xx 0.2 ww 
6199
6200 # add a vertex with the y value 2 x value is constant 
6201 profile p F 1 0 x 2 y 1 c 1 45 l 1 tt 1.5 1.5 yy 2 ww 
6202
6203 # add a circular element with a radius value of 1 and a circular value of 290 degrees 
6204 profile p F 1 0 x 2 y 1 c 1 45 l 1 tt 1.5 1.5 xx 0.2 yy 2 c 1 290 
6205
6206 # wire continues at a tangent to the intersection x = 0 
6207 profile p F 1 0 x 2 y 1 c 1 45 l 1 tt 1.5 1.5 xx 0.2 yy 2 c 1 290 ix 0 ww 
6208
6209 # continue the wire at an angle of 90 degrees until it intersects the y axis at y= -o.3 
6210 profile p F 1 0 x 2 y 1 c 1 45 l 1 tt 1.5 1.5 xx 0.2 yy 2 c 1 290 ix 0 r 90 ix -0.3 ww 
6211
6212 #close the wire 
6213 profile p F 1 0 x 2 y 1 c 1 45 l 1 tt 1.5 1.5 xx 0.2 yy 2 c 1 290 ix 0 r 90 ix -0.3 w 
6214
6215 # to create the plane with the same contour 
6216 profile p F 1 0 x 2 y 1 c 1 45 l 1 tt 1.5 1.5 xx 0.2 yy 2 c 1 290 ix 0 r 90 ix -0.3 
6217 ~~~~~
6218
6219 @subsubsection occt_draw_7_2_5   bsplineprof
6220
6221 Syntax:      
6222 ~~~~~
6223 bsplineprof name [S face] [W WW] 
6224 ~~~~~
6225
6226 * for an edge : \<digitizes\> ... <mouse button 2>
6227 * to end profile : <mouse button 3>
6228
6229 Builds a profile in the XY plane from digitizes. By default the profile is closed and a face is built. 
6230
6231 **bsplineprof** creates a 2d profile from bspline curves using the mouse as the input. *MB1* creates the points, *MB2* finishes the current curve and starts the next curve, *MB3* closes the profile. 
6232
6233 The profile shape definition is the suffix; no suffix produces a face, **w** is a closed wire, **ww** is an open wire. 
6234
6235 **Example:** 
6236 ~~~~~
6237 #to view the xy plane 
6238 top 
6239 #to create a 2d curve with the mouse 
6240 bsplineprof res 
6241 # click mb1 to start the curve 
6242 # click mb1 to create the second vertex 
6243 # click mb1 to create a curve 
6244 == 
6245 #click mb2 to finish the curve and start a new curve 
6246 == 
6247 # click mb1 to create the second curve 
6248 # click mb3 to create the face 
6249 ~~~~~
6250
6251 @subsubsection occt_draw_7_2_6  mkoffset
6252
6253 Syntax:      
6254 ~~~~~
6255 mkoffset result face/compound of wires nboffset stepoffset 
6256 ~~~~~
6257
6258 **mkoffset** creates a parallel wire in the same plane using a face or an existing continuous set of wires as a reference. The number of occurences is not limited. 
6259
6260 The offset distance defines the spacing and the positioning of the occurences. 
6261
6262 **Example:** 
6263 ~~~~~
6264 #Create a box and select a face 
6265 box b 1 2 3 
6266 explode b f 
6267 #Create three exterior parallel contours with an offset 
6268 value of 2 
6269 mkoffset r b_1 3 2 
6270 Create one interior parallel contour with an offset 
6271 value of 
6272 0.4 
6273 mkoffset r b_1 1 -0.4 
6274 ~~~~~
6275
6276 **Note** that *mkoffset* command must be used with prudence, as angular contours produce offset contours with fillets. Interior parallel contours can produce more than one wire, normally these are refused. In the following example, any increase in the offset value is refused.
6277
6278 **Example:** 
6279 ~~~~~
6280 # to create the example contour 
6281 profile p F 0 0 x 2 y 4 tt 1 1 tt 0 4 w 
6282 # to create an incoherent interior offset 
6283 mkoffset r p 1 -0.50 
6284 ==p is not a FACE but a WIRE 
6285 BRepFill_TrimEdgeTool: incoherent intersection 
6286 # to create two incoherent wires 
6287 mkoffset r p 1 -0.50 
6288 ~~~~~
6289
6290 @subsubsection occt_draw_7_2_7  mkplane, mkface
6291
6292 Syntax:      
6293 ~~~~~
6294 mkplane name wire 
6295 mkface name surface [ufirst ulast vfirst vlast] 
6296 ~~~~~
6297
6298 **mkplane** generates a face from a planar wire. The planar surface will be constructed with an orientation which keeps the face inside the wire. 
6299
6300 **mkface** generates a face from a surface. Parameter values can be given to trim a rectangular area. The default boundaries are those of the surface. 
6301
6302 **Example:** 
6303 ~~~~~
6304 # make a polygonal face 
6305 polyline f 0 0 0 20 0 0 20 10 0 10 10 0 10 20 0 0 20 0 0 0 0 
6306 mkplane f f 
6307
6308 # make a cylindrical face 
6309 cylinder g 10 
6310 trim g g -pi/3 pi/2 0 15 
6311 mkface g g 
6312 ~~~~~
6313
6314 @subsubsection occt_draw_7_2_8  mkcurve, mksurface
6315
6316 Syntax:      
6317 ~~~~~
6318 mkcurve curve edge 
6319 mksurface name face 
6320 ~~~~~
6321
6322 **mkcurve** creates a 3d curve from an edge. The curve will be trimmed to the edge boundaries. 
6323
6324 **mksurface** creates a surface from a face. The surface will not be trimmed. 
6325
6326 **Example:** 
6327 ~~~~~
6328 # make a line 
6329 vertex v1 0 0 0 
6330 vertex v2 10 0 0 
6331 edge e v1 v2 
6332 ~~~~~
6333
6334 @subsubsection occt_draw_7_2_9  pcurve
6335
6336 Syntax:      
6337
6338 ~~~~~
6339 pcurve [name edgename] facename 
6340 ~~~~~
6341
6342 Extracts the 2d curve of an edge on a face. If only the face is specified, the command extracts all the curves and colors them according to their orientation. This is useful in checking to see if the edges in a face are correctly oriented, i.e. they turn counter-clockwise. To make curves visible, use a fitted 2d view. 
6343
6344 **Example:** 
6345 ~~~~~
6346 # view the pcurves of a face 
6347 plane p 
6348 trim p p -1 1 -1 1 
6349 mkface p p 
6350 av2d; # a 2d view 
6351 pcurve p 
6352 2dfit 
6353 ~~~~~
6354
6355 @subsubsection occt_draw_7_2_10  chfi2d
6356
6357 Syntax:      
6358 ~~~~~
6359 chfi2d result face [edge1 edge2 (F radius/CDD d1 d2/CDA d ang) .... 
6360 ~~~~~
6361
6362
6363 Creates chamfers and fillets on 2D objects. Select two adjacent edges and: 
6364   * a radius value
6365   * two respective distance values
6366   * a distance value and an angle
6367
6368 The radius value produces a fillet between the two faces. 
6369
6370 The distance is the length value from the edge between the two selected faces in a normal direction. 
6371
6372 **Example:** 
6373
6374 Let us create a 2d fillet: 
6375
6376 ~~~~~
6377 top 
6378 profile p x 2 y 2 x -2 
6379 chfi2d cfr p . . F 0.3 
6380 ==Pick an object 
6381 #select an edge 
6382 ==Pick an object 
6383 #select an edge 
6384 ~~~~~
6385
6386 Let us create a 2d chamfer using two distances:
6387  
6388 ~~~~~
6389 profile p x 2 y 2 x -2 
6390 chfi2d cfr p . . CDD 0.3 0.6 
6391 ==Pick an object 
6392 #select an edge 
6393 ==Pick an object 
6394 #select an edge 
6395 ~~~~~
6396
6397 Let us create a 2d chamfer using a defined distance and angle 
6398
6399 ~~~~~
6400 top 
6401 profile p x 2 y 2 x -2 
6402 chfi2d cfr p . . CDA 0.3 75 
6403 ==Pick an object 
6404 #select an edge 
6405 ==Pick an object 
6406 #select an edge 
6407 ~~~~~
6408
6409 @subsubsection occt_draw_7_2_11  nproject
6410
6411 Syntax:      
6412 ~~~~~
6413 nproject pj e1 e2 e3 ... surf -g -d [dmax] [Tol 
6414 [continuity [maxdeg [maxseg]]] 
6415 ~~~~~
6416
6417 Creates a shape projection which is normal to the target surface. 
6418
6419 **Example:**
6420 ~~~~~
6421 # create a curved surface 
6422 line l 0 0 0 1 0 0 
6423 trim l l 0 2 
6424 convert l l 
6425
6426 incdeg l 3 
6427 cmovep l 1 0 0.5 0 
6428 cmovep l 3 0 0.5 0 
6429 copy l ll 
6430 translate ll 2 -0.5 0 
6431 mkedge e1 l 
6432 mkedge e2 ll 
6433 wire w e1 e2 
6434 prism p w 0 0 3 
6435 donl p 
6436 #display in four views 
6437 mu4 
6438 fit 
6439 # create the example shape 
6440 circle c 1.8 -0.5 1 0 1 0 1 0 0 0.4 
6441 mkedge e c 
6442 donly p e 
6443 # create the normal projection of the shape(circle) 
6444 nproject r e p 
6445 ~~~~~
6446
6447
6448 @subsection occt_draw_7_3  Primitives
6449
6450 Primitive commands make it possible to create simple shapes. They include: 
6451
6452   * **box** and **wedge** commands.
6453   * **pcylinder**, **pcone**, **psphere**, **ptorus** commands.
6454   * **halfspace** command
6455
6456
6457 @subsubsection occt_draw_7_3_1  box, wedge
6458
6459 Syntax:      
6460 ~~~~~
6461 box name [x y z] dx dy dz 
6462 wedge name dx dy dz ltx / xmin zmin xmax xmax 
6463 ~~~~~
6464
6465 **box** creates a box parallel to the axes with dimensions *dx,dy,dz*. *x,y,z* is the corner of the box. It is the default origin. 
6466
6467 **wedge** creates a box with five faces called a wedge. One face is in the OXZ plane, and has dimensions *dx,dz* while the other face is in the plane *y = dy*. This face either has dimensions *ltx, dz* or is bounded by *xmin,zmin,xmax,zmax*. 
6468
6469 The other faces are defined between these faces. The face in the *y=yd* plane may be degenerated into a line if *ltx = 0*, or a point if *xmin = xmax* and *ymin = ymax*. In these cases, the line and the point both have 5 faces each. To position the wedge use the *ttranslate* and *trotate* commands. 
6470
6471 **Example:** 
6472 ~~~~~
6473 # a box at the origin 
6474 box b1 10 20 30 
6475
6476 # another box 
6477 box b2 30 30 40 10 20 30 
6478
6479 # a wedge 
6480 wedge w1 10 20 30 5 
6481
6482 # a wedge with a sharp edge (5 faces) 
6483 wedge w2 10 20 30 0 
6484
6485 # a pyramid 
6486 wedge w3 20 20 20 10 10 10 10 
6487 ~~~~~
6488
6489 @subsubsection occt_draw_7_3_2  pcylinder, pcone, psphere, ptorus
6490
6491 Syntax:      
6492 ~~~~~
6493 pcylinder name [plane] radius height [angle] 
6494 pcone name [plane] radius1 radius2 height [angle] 
6495 pcone name [plane] radius1 radius2 height [angle] 
6496 psphere name [plane] radius1 [angle1 angle2] [angle] 
6497 ptorus name [plane] radius1 radius2 [angle1 angle2] [angle] 
6498 ~~~~~
6499
6500 All these commands create solid blocks in the default coordinate system, using the Z axis as the axis of revolution and the X axis as the origin of the angles. To use another system, translate and rotate the resulting solid or use a plane as first argument to specify a coordinate system. All primitives have an optional last argument which is an angle expressed in degrees and located on the Z axis, starting from the X axis. The default angle is 360. 
6501
6502 **pcylinder** creates a cylindrical block with the given radius and height. 
6503
6504 **pcone** creates a truncated cone of the given height with radius1 in the plane z = 0 and radius2 in the plane z = height. Neither radius can be negative, but one of them can be null. 
6505
6506 **psphere** creates a solid sphere centered on the origin. If two angles, *angle1* and *angle2*, are given, the solid will be limited by two planes at latitude *angle1* and *angle2*. The angles must be increasing and in the range -90,90. 
6507
6508 **ptorus** creates a solid torus with the given radii, centered on the origin, which is a point along the z axis. If two angles increasing in degree in the range 0 -- 360 are given, the solid will be bounded by two planar surfaces at those positions on the circle. 
6509
6510 **Example:** 
6511 ~~~~~
6512 # a can shape 
6513 pcylinder cy 5 10 
6514
6515 # a quarter of a truncated cone 
6516 pcone co 15 10 10 90 
6517
6518 # three-quarters of sphere 
6519 psphere sp 10 270 
6520
6521 # half torus 
6522 ptorus to 20 5 0 90 
6523 ~~~~~
6524
6525 @subsubsection occt_draw_7_3_3  halfspace
6526
6527 Syntax:      
6528 ~~~~~
6529 halfspace result face/shell x y z 
6530 ~~~~~
6531
6532 **halfspace** creates an infinite solid volume based on a face in a defined direction. This volume can be used to perform the boolean operation of cutting a solid by a face or plane. 
6533
6534 **Example:** 
6535 ~~~~~
6536 box b 0 0 0 1 2 3 
6537 explode b f 
6538 ==b_1 b_2 b_3 b_4 b_5 b_6 
6539 halfspace hr b_3 0.5 0.5 0.5 
6540 ~~~~~
6541
6542
6543 @subsection occt_draw_7_4  Sweeping
6544
6545 Sweeping creates shapes by sweeping out a shape along a defined path: 
6546
6547   * **prism** -- sweeps along a direction.
6548   * **revol** -- sweeps around an axis.
6549   * **pipe** -- sweeps along a wire.
6550   * **mksweep** and **buildsweep** -- to create sweeps by defining the arguments and algorithms.
6551   * **thrusections** -- creates a sweep from wire in different planes.
6552
6553
6554 @subsubsection occt_draw_7_4_1  prism
6555
6556 Syntax:      
6557 ~~~~~
6558 prism result base dx dy dz [Copy | Inf | SemiInf] 
6559 ~~~~~
6560
6561 Creates a new shape by sweeping a shape in a direction. Any shape can be swept: a vertex gives an edge; an edge gives a face; and a face gives a solid. 
6562
6563 The shape is swept along the vector *dx dy dz*. The original shape will be shared in the result unless *Copy* is specified. If *Inf* is specified the prism is infinite in both directions. If *SemiInf* is specified the prism is infinite in the *dx,dy,dz* direction, and the length of the vector has no importance. 
6564
6565 **Example:** 
6566 ~~~~~
6567 # sweep a planar face to make a solid 
6568 polyline f 0 0 0 10 0 0 10 5 0 5 5 0 5 15 0 0 15 0 0 0 0 
6569 mkplane f f 
6570 ~~~~~
6571
6572 @subsubsection occt_draw_7_4_2  revol
6573
6574 Syntax:      
6575 ~~~~~
6576 revol result base x y z dx dy dz angle [Copy] 
6577 ~~~~~
6578
6579 Creates a new shape by sweeping a base shape through an angle along the axis *x,y,z dx,dy,dz*. As with the prism command, the shape can be of any type and is not shared if *Copy* is specified. 
6580
6581 **Example:** 
6582 ~~~~~
6583 # shell by wire rotation 
6584 polyline w 0 0 0 10 0 0 10 5 0 5 5 0 5 15 0 0 15 0 
6585 revol s w 20 0 0 0 1 0 90 
6586 ~~~~~
6587
6588
6589 @subsubsection occt_draw_7_4_3  pipe
6590
6591 Syntax:      
6592 ~~~~~
6593 pipe name wire_spine Profile 
6594 ~~~~~
6595
6596 Creates a new shape by sweeping a shape known as the profile along a wire known as the spine. 
6597
6598 **Example:** 
6599 ~~~~~
6600 # sweep a circle along a bezier curve to make a solid 
6601 pipe 
6602
6603 beziercurve spine 4 0 0 0 10 0 0 10 10 0 20 10 0 
6604 mkedge spine spine 
6605 wire spine spine 
6606 circle profile 0 0 0 1 0 0 2 
6607 mkedge profile profile 
6608 wire profile profile 
6609 mkplane profile profile 
6610 pipe p spine profile 
6611 ~~~~~
6612
6613 @subsubsection occt_draw_7_4_4  mksweep, addsweep, setsweep, deletesweep, buildsweep, simulsweep
6614
6615 Syntax:      
6616 ~~~~~
6617 mksweep wire 
6618 addsweep wire[vertex][-M][-C] [auxiilaryshape]
6619 deletesweep wire 
6620 setsweep options [arg1 [arg2 [...]]] 
6621 simulsweep r [n] [option] 
6622 buildsweep [r] [option] [Tol] 
6623 ~~~~~
6624
6625 options are : 
6626  * *-FR* : Tangent and Normal are defined by a Frenet trihedron 
6627  * *-CF* : Tangent is given by Frenet, the Normal is computed to minimize the torsion 
6628  * *-DX Surf* : Tangent and Normal are given by Darboux trihedron, surf must be a shell or a face 
6629  * *-CN dx dy dz* : BiNormal is given by *dx dy dz* 
6630  * *-FX Tx Ty TZ [Nx Ny Nz]* : Tangent and Normal are fixed 
6631  * *-G guide* 
6632
6633 These commands are used to create a shape from wires. One wire is designated as the contour that defines the direction; it is called the spine. At least one other wire is used to define the the sweep profile. 
6634 * **mksweep** -- initializes the sweep creation and defines the wire to be used as the spine. 
6635 * **addsweep** -- defines the wire to be used as the profile. 
6636 * **deletesweep** -- cancels the choice of profile wire, without leaving the mksweep mode. You can re-select a profile wire. 
6637 * **setsweep** -- commands the algorithms used for the construction of the sweep. 
6638 * **simulsweep** -- can be used to create a preview of the shape. [n] is the number of sections that are used to simulate the sweep. 
6639 * **buildsweep** -- creates the sweep using the arguments defined by all the commands. 
6640
6641 **Example:** 
6642 ~~~~~
6643 #create a sweep based on a semi-circular wire using the 
6644 Frenet algorithm 
6645 #create a circular figure 
6646 circle c2 0 0 0 1 0 0 10 
6647 trim c2 c2 -pi/2 pi/2 
6648 mkedge e2 c2 
6649 donly e2 
6650 wire w e2 
6651 whatis w 
6652 mksweep w 
6653 # to display all the options for a sweep 
6654 setsweep 
6655 #to create a sweep using the Frenet algorithm where the 
6656 #normal is computed to minimise the torsion 
6657 setsweep -CF 
6658 addsweep w -R 
6659 # to simulate the sweep with a visual approximation 
6660 simulsweep w 3 
6661 ~~~~~
6662
6663 @subsubsection occt_draw_7_4_5  thrusections
6664
6665 Syntax:  
6666 ~~~~~
6667 thrusections [-N] result issolid isruled wire1 wire2 [..wire..] 
6668 ~~~~~
6669
6670 **thrusections** creates a shape using wires that are positioned in different planes. Each wire selected must have the same number of edges and vertices. 
6671 A bezier curve is generated between the vertices of each wire. The option *[-N]* means that no check is made on wires for direction. 
6672
6673 **Example:** 
6674 ~~~~~
6675 #create three wires in three planes 
6676 polyline w1 0 0 0 5 0 0 5 5 0 2 3 0 
6677 polyline w2 0 1 3 4 1 3 4 4 3 1 3 3 
6678 polyline w3 0 0 5 5 0 5 5 5 5 2 3 5 
6679 # create the shape 
6680 thrusections th issolid isruled w1 w2 w3 
6681 ==thrusections th issolid isruled w1 w2 w3 
6682 Tolerances obtenues   -- 3d : 0 
6683 -- 2d : 0 
6684 ~~~~~
6685
6686
6687 @subsection occt_draw_7_5  Topological transformation
6688
6689 Transformations are applications of matrices. When the transformation is nondeforming, such as translation or rotation, the object is not copied. The topology localcoordinate system feature is used. The copy can be enforced with the **tcopy** command. 
6690
6691   * **tcopy** -- makes a copy of the structure of a shape.
6692   * **ttranslate**, **trotate**, **tmove** and **reset** -- move a shape.
6693   * **tmirror** and **tscale** -- always modify the shape.
6694
6695
6696 @subsubsection occt_draw_7_5_1   tcopy
6697
6698 Syntax: 
6699 ~~~~~
6700 tcopy name toname [name toname ...] 
6701 ~~~~~
6702
6703 Copies the structure of one shape, including the geometry, into another, newer shape. 
6704
6705 **Example:** 
6706 ~~~~~
6707 # create an edge from a curve and copy it 
6708 beziercurve c 3 0 0 0 10 0 0 20 10 0 
6709 mkedge e1 c 
6710 ttranslate e1 0 5 0 
6711 tcopy e1 e2 
6712 ttranslate e2 0 5 0 
6713 # now modify the curve, only e1 and e2 will be modified 
6714 ~~~~~
6715
6716 @subsubsection occt_draw_7_5_2   tmove, treset
6717
6718 Syntax:      
6719 ~~~~~
6720 tmove name [name ...] shape 
6721 reset name [name ...] 
6722 ~~~~~
6723
6724 **tmove** and **reset** modify the location, or the local coordinate system of a shape. 
6725
6726 **tmove** applies the location of a given shape to other shapes. **reset** restores one or several shapes it to its or their original coordinate system(s). 
6727
6728 **Example:** 
6729 ~~~~~
6730 # create two boxes 
6731 box b1 10 10 10 
6732 box b2 20 0 0 10 10 10 
6733 # translate the first box 
6734 ttranslate b1 0 10 0 
6735 # and apply the same location to b2 
6736 tmove b2 b1 
6737 # return to original positions 
6738 reset b1 b2 
6739 ~~~~~
6740
6741 @subsubsection occt_draw_7_5_3   ttranslate, trotate
6742
6743 Syntax:      
6744 ~~~~~
6745 ttranslate [name ...] dx dy dz 
6746 trotate [name ...] x y z dx dy dz angle 
6747 ~~~~~
6748
6749 **ttranslate** translates a set of shapes by a given vector, and **trotate** rotates them by a given angle around an axis. Both commands only modify the location of the shape. 
6750 When creating multiple shapes, the same location is used for all the shapes. (See *toto.tcl* example below. Note that the code of this file can also be directly executed in interactive mode.) 
6751
6752 Locations are very economic in the data structure because multiple occurences of an object share the topological description. 
6753
6754 **Example:** 
6755 ~~~~~
6756 # make rotated copies of a sphere in between two cylinders 
6757 # create a file source toto.tcl 
6758 # toto.tcl code: 
6759 for {set i 0} {$i < 360} {incr i 20} { 
6760 copy s s$i 
6761 trotate s$i 0 0 0 0 0 1 $i 
6762
6763
6764 # create two cylinders 
6765 pcylinder c1 30 5 
6766 copy c1 c2 
6767 ttranslate c2 0 0 20 
6768
6769 #create a sphere 
6770 psphere s 3 
6771 ttranslate s 25 0 12.5 
6772
6773 # call the source file for multiple copies 
6774 source toto.tcl 
6775 ~~~~~
6776
6777 @subsubsection occt_draw_7_5_4   tmirror, tscale
6778
6779 Syntax:      
6780 ~~~~~
6781 tmirror name x y z dx dy dz 
6782 tscale name x y z scale 
6783 ~~~~~
6784
6785 * **tmirror** makes a mirror copy of a shape about a plane x,y,z dx,dy,dz. 
6786
6787 * **Tscale** applies a central homotopic mapping to a shape. 
6788
6789 **Example:** 
6790 ~~~~~
6791 # mirror a portion of cylinder about the YZ plane 
6792 pcylinder c1 10 10 270 
6793 copy c1 c2 
6794 tmirror c2 15 0 0 1 0 0 
6795 # and scale it 
6796 tscale c1 0 0 0 0.5 
6797 ~~~~~
6798
6799
6800 @subsection occt_draw_7_6  Old Topological operations
6801
6802   *  **fuse**, **cut**, **common** are boolean operations. 
6803   *  **section**, **psection** compute sections. 
6804   *  **sewing** joins two or more shapes. 
6805
6806
6807 @subsubsection occt_draw_7_6_1  fuse, cut, common
6808
6809 Syntax:      
6810 ~~~~~
6811 fuse name shape1 shape2 
6812 cut name shape1 shape2 
6813 common name shape1 shape2 
6814 ~~~~~
6815
6816 **fuse** creates a new shape by a boolean operation on two existing shapes. The new shape contains both originals intact. 
6817
6818 **cut** creates a new shape which contains all parts of the second shape but only the first shape without the intersection of the two shapes. 
6819
6820 **common** creates a new shape which contains only what is in common between the two original shapes in their intersection. 
6821
6822 **Example:** 
6823 ~~~~~
6824 # all four boolean operations on a box and a cylinder 
6825
6826 box b 0 -10 5 20 20 10 
6827 pcylinder c 5 20 
6828
6829 fuse s1 b c 
6830 ttranslate s1 40 0 0 
6831
6832 cut s2 b c 
6833 ttranslate s2 -40 0 0 
6834
6835 cut s3 c b 
6836 ttranslate s3 0 40 0 
6837
6838 common s4 b c 
6839 ttranslate s4 0 -40 0 
6840 ~~~~~
6841
6842
6843 @subsubsection occt_draw_7_6_2  section, psection
6844
6845 Syntax:      
6846 ~~~~~
6847 section result shape1 shape2 
6848 psection name shape plane 
6849 ~~~~~
6850
6851 **section** creates a compound object consisting of the edges for the intersection curves on the faces of two shapes. 
6852
6853 **psection** creates a planar section consisting of the edges for the intersection curves on the faces of a shape and a plane. 
6854
6855 **Example:** 
6856 ~~~~~
6857 # section line between a cylinder and a box 
6858 pcylinder c 10 20 
6859 box b 0 0 5 15 15 15 
6860 trotate b 0 0 0 1 1 1 20 
6861 section s b c 
6862
6863 # planar section of a cone 
6864 pcone c 10 30 30 
6865 plane p 0 0 15 1 1 2 
6866 psection s c p 
6867 ~~~~~
6868
6869 @subsubsection occt_draw_7_6_3  sewing
6870
6871 Syntax:      
6872 ~~~~~
6873 sewing result [tolerance] shape1 shape2 ... 
6874 ~~~~~
6875
6876 **Sewing** joins shapes by connecting their adjacent or near adjacent edges. Adjacency can be redefined by modifying the tolerance value. 
6877
6878 **Example:** 
6879 ~~~~~
6880 # create two adjacent boxes 
6881 box b 0 0 0 1 2 3 
6882 box b2 0 2 0 1 2 3 
6883 sewing sr b b2 
6884 whatis sr 
6885 sr is a shape COMPOUND FORWARD Free Modified 
6886 ~~~~~
6887
6888 @subsection occt_draw_7_7  New Topological operations
6889
6890
6891 The new algorithm of Boolean operations avoids a large number of weak points and limitations presented in the old boolean operation algorithm. 
6892
6893
6894 @subsubsection occt_draw_7_7_1  bparallelmode
6895
6896 * **bparallelmode** enable or disable parallel mode for boolean operations. Sequential computing is used by default.
6897
6898 Syntax: 
6899 ~~~~~
6900 bparallelmode [1/0]
6901
6902 ~~~~~
6903
6904 Without arguments, bparallelmode shows current state of parallel mode for boolean operations.
6905
6906 * *0* Disable parallel mode, 
6907 * *1* Enable parallel mode 
6908
6909 **Example:**
6910 ~~~~~
6911 # Enable parallel mode for boolean operations.
6912 bparallelmode 1
6913
6914 # Show state of parallel mode for boolean operations.
6915 bparallelmode
6916 ~~~~~
6917
6918 @subsubsection occt_draw_7_7_2  bop, bopfuse, bopcut, boptuc, bopcommon
6919
6920 * **bop** defines *shape1* and *shape2* subject to ulterior Boolean operations 
6921 * **bopfuse** creates a new shape by a boolean operation on two existing shapes. The new shape contains both originals intact. 
6922 * **bopcut** creates a new shape which contains all parts of the second shape but only the first shape without the intersection of the two shapes. 
6923 * **boptuc** is a reverced **bopcut**. 
6924 * **bopcommon** creates a new shape which contains only whatever is in common between the two original shapes in their intersection. 
6925
6926 Syntax:      
6927 ~~~~~
6928 bop shape1 shape2 
6929 bopcommon result 
6930 bopfuse result 
6931 bopcut result 
6932 boptuc result 
6933 ~~~~~
6934
6935 These commands have short variants: 
6936
6937 ~~~~~
6938 bcommon result shape1 shape2 
6939 bfuse result shape1 shape2 
6940 bcut result shape1 shape2 
6941 ~~~~~
6942
6943
6944 **bop** fills data structure (DS) of boolean operation for *shape1* and *shape2*. 
6945 **bopcommon, bopfuse, bopcut, boptuc** commands are used after **bop** command. After one **bop** command it is possible to call several commands from the list above. For example:
6946
6947 ~~~~~
6948 bop S1 S2
6949 bopfuse R
6950 ~~~~~ 
6951
6952
6953 **Example:** 
6954
6955 Let us produce all four boolean operations on a box and a cylinder: 
6956
6957 ~~~~~
6958 box b 0 -10 5 20 20 10 
6959 pcylinder c 5 20 
6960
6961 # fills data structure 
6962 bop b c 
6963
6964 bopfuse s1 
6965 ttranslate s1 40 0 0 
6966
6967 bopcut s2 
6968 ttranslate s2 -40 0 0 
6969
6970 boptuc s3 
6971 ttranslate s3 0 40 0 
6972
6973 bopcommon s4 
6974 ttranslate s4 0 -40 0 
6975 ~~~~~
6976
6977 Now use short variants of the commands: 
6978
6979 ~~~~~
6980 bfuse s11 b c 
6981 ttranslate s11 40 0 100 
6982
6983 bcut s12 b c 
6984 ttranslate s12 -40 0 100 
6985
6986 bcommon s14 b c 
6987 ttranslate s14 0 -40 100 
6988 ~~~~~
6989
6990 @subsubsection occt_draw_7_7_3  bopsection
6991
6992 Syntax:      
6993 ~~~~~
6994 bop shape1 shape2 
6995 bopsection result 
6996 ~~~~~
6997
6998 * **bopsection** -- creates a compound object consisting of the edges for the intersection curves on the faces of two shapes.
6999 * **bop** -- fills data structure (DS) of boolean operation for *shape1* and *shape2*. 
7000 * **bopsection** -- is used after **bop** command.
7001  
7002 Short variant syntax:      
7003 ~~~~~
7004 bsection result shape1 shape2 [-2d/-2d1/-2s2] [-a] 
7005 ~~~~~
7006
7007 * <i>-2d</i>  --  PCurves are computed on both parts. 
7008 * <i>-2d1</i> -- PCurves are computed on first part. 
7009 * <i>-2d2</i> -- PCurves are computed on second part. 
7010 * <i>-a</i>  --   built geometries  are approximated. 
7011
7012 **Example:** 
7013
7014 Let us build a section line between a cylinder and a box 
7015 ~~~~~
7016 pcylinder c 10 20 
7017 box b 0 0 5 15 15 15 
7018 trotate b 0 0 0 1 1 1 20 
7019 bop b c 
7020 bopsection s 
7021 # Short variant: 
7022 bsection s2 b c 
7023 ~~~~~
7024
7025 @subsubsection occt_draw_7_7_4  bopcheck, bopargshape
7026
7027 Syntax:      
7028 ~~~~~
7029 bopcheck shape 
7030 bopargcheck shape1 [[shape2] [-F/O/C/T/S/U] [/R|F|T|V|E|I|P]] [#BF] 
7031 ~~~~~
7032
7033 **bopcheck** checks a shape for self-interference. 
7034
7035 **bopargcheck** checks the validity of argument(s) for boolean operations. 
7036
7037 * Boolean Operation -- (by default a section is made) : 
7038   * **F** (fuse) 
7039   * **O** (common) 
7040   * **C** (cut) 
7041   * **T** (cut21) 
7042   * **S** (section) 
7043   * **U** (unknown) 
7044 * Test Options -- (by default all options are enabled) : 
7045   * **R** (disable small edges (shrink range) test) 
7046   * **F** (disable faces verification test) 
7047   * **T** (disable tangent faces searching test) 
7048   * **V** (disable test possibility to merge vertices) 
7049   * **E** (disable test possibility to merge edges) 
7050   * **I** (disable self-interference test) 
7051   * **P** (disable shape type test) 
7052 * Additional Test Options :
7053   * **B** (stop test on first faulty found) -- by default it is off; 
7054   * **F** (full output for faulty shapes) -- by default the output is made in a short format.
7055
7056 **Note** that Boolean Operation and Test Options are used only for a couple of argument shapes, except for <b>I</b> and <b>P</b> options that are always used to test a couple of shapes as well as a single shape.
7057
7058 **Example:** 
7059 ~~~~~
7060 # checks a shape on self-interference 
7061 box b1 0 0 0 1 1 1 
7062 bopcheck b1 
7063
7064 # checks the validity of argument for boolean cut operations 
7065 box b2 0 0 0 10 10 10 
7066 bopargcheck b1 b2 -C 
7067 ~~~~~
7068
7069 @subsection occt_draw_7_8  Drafting and blending
7070
7071 Drafting is creation of a new shape by tilting faces through an angle. 
7072
7073 Blending is the creation of a new shape by rounding edges to create a fillet. 
7074
7075   * Use the **depouille** command for drafting.
7076   * Use the **chamf** command to add a chamfer to an edge
7077   * Use the **blend** command for simple blending.
7078   * Use **bfuseblend** for a fusion + blending operation.
7079   * Use **bcutblend** for a cut + blending operation.
7080   * Use **buildevol**, **mkevol**, **updatevol** to realize varying radius blending.
7081
7082
7083 @subsubsection occt_draw_7_8_1  depouille
7084
7085 Syntax: 
7086 ~~~~~
7087 dep result shape dirx diry dirz face angle x y x dx dy dz [face angle...] 
7088 ~~~~~
7089
7090 Creates a new shape by drafting one or more faces of a shape. 
7091
7092 Identify the shape(s) to be drafted, the drafting direction, and the face(s) with an angle and an axis of rotation for each face. You can use dot syntax to identify the faces. 
7093
7094 **Example:** 
7095 ~~~~~
7096 # draft a face of a box 
7097 box b 10 10 10 
7098 explode b f 
7099 == b_1 b_2 b_3 b_4 b_5 b_6 
7100
7101 dep a b 0 0 1 b_2 10 0 10 0 1 0 5 
7102 ~~~~~
7103
7104 @subsubsection occt_draw_7_8_2  chamf
7105
7106 Syntax:      
7107 ~~~~~
7108 chamf newname shape edge face S dist 
7109 chamf newname shape edge face dist1 dist2 
7110 chamf newname shape edge face A dist angle 
7111 ~~~~~
7112
7113 Creates a chamfer along the edge between faces using: 
7114
7115   * a equal distances from the edge
7116   * the edge, a face and distance, a second distance
7117   * the edge, a reference face and an angle
7118
7119 Use the dot syntax to select the faces and edges. 
7120
7121 **Examples:**
7122
7123 Let us create a chamfer based on equal distances from the edge (45 degree angle):
7124 ~~~~~
7125 # create a box 
7126 box b 1 2 3 
7127 chamf ch b . . S 0.5 
7128 ==Pick an object 
7129 # select an edge 
7130 ==Pick an object 
7131 # select an adjacent face 
7132 ~~~~~
7133
7134 Let us create a chamfer based on different distances from the selected edge:
7135 ~~~~~
7136 box b 1 2 3 
7137 chamf ch b . . 0.3 0.4 
7138 ==Pick an object 
7139 # select an edge 
7140 ==Pick an object 
7141 # select an adjacent face
7142 ~~~~~
7143  
7144 Let us create a chamfer based on a distance from the edge and an angle:
7145  
7146 ~~~~~
7147 box b 1 2 3 
7148 chamf ch b . . A 0.4 30 
7149 ==Pick an object 
7150 # select an edge 
7151 ==Pick an object 
7152 # select an adjacent face 
7153 ~~~~~
7154
7155 @subsubsection occt_draw_7_8_3  blend
7156
7157 Syntax:      
7158 ~~~~~
7159 blend result object rad1 ed1 rad2 ed2 ... [R/Q/P] 
7160 ~~~~~
7161
7162 Creates a new shape by filleting the edges of an existing shape. The edge must be inside the shape. You may use the dot syntax. Note that the blend is propagated to the edges of tangential planar, cylindrical or conical faces. 
7163
7164 **Example:** 
7165 ~~~~~
7166 # blend a box, click on an edge 
7167 box b 20 20 20 
7168 blend b b 2 . 
7169 ==tolerance ang : 0.01 
7170 ==tolerance 3d : 0.0001 
7171 ==tolerance 2d : 1e-05 
7172 ==fleche : 0.001 
7173 ==tolblend 0.01 0.0001 1e-05 0.001 
7174 ==Pick an object 
7175 # click on the edge you want ot fillet 
7176
7177 ==COMPUTE: temps total 0.1s dont : 
7178 ==- Init + ExtentAnalyse 0s 
7179 ==- PerformSetOfSurf 0.02s 
7180 ==- PerformFilletOnVertex 0.02s 
7181 ==- FilDS 0s 
7182 ==- Reconstruction 0.06s 
7183 ==- SetRegul 0s 
7184 ~~~~~
7185
7186 @subsubsection occt_draw_7_8_4  bfuseblend
7187
7188 Syntax:
7189 ~~~~~
7190 bfuseblend name shape1 shape2 radius [-d]
7191 ~~~~~
7192  
7193 Creates a boolean fusion of two shapes and then blends (fillets) the intersection edges using the given radius.
7194 Option [-d] enables the Debugging mode in which the error messages, if any, will be printed.
7195
7196 **Example:**
7197 ~~~~~
7198 # fuse-blend two boxes
7199 box b1 20 20 5
7200 copy b1 b2
7201 ttranslate b2 -10 10 3
7202 bfuseblend a b1 b2 1
7203 ~~~~~
7204
7205 @subsubsection occt_draw_7_8_4a  bcutblend
7206
7207 Syntax:
7208 ~~~~~
7209 bcutblend name shape1 shape2 radius [-d]
7210 ~~~~~
7211
7212 Creates a boolean cut of two shapes and then blends (fillets) the intersection edges using the given radius.
7213 Option [-d] enables the Debugging mode in which the error messages, if any, will be printed.
7214
7215 **Example:**
7216 ~~~~~
7217 # cut-blend two boxes
7218 box b1 20 20 5
7219 copy b1 b2
7220 ttranslate b2 -10 10 3
7221 bcutblend a b1 b2 1
7222 ~~~~~
7223
7224 @subsubsection occt_draw_7_8_5  mkevol, updatevol, buildevol
7225
7226 Syntax:      
7227 ~~~~~
7228 mkevol result object (then use updatevol) [R/Q/P] 
7229 updatevol edge u1 radius1 [u2 radius2 ...] 
7230 buildevol 
7231 ~~~~~
7232
7233 These three commands work together to create fillets with evolving radii. 
7234
7235 * **mkevol** allows specifying the shape and the name of the result. It returns the tolerances of the fillet. 
7236 * **updatevol** allows describing the filleted edges you want to create. For each edge, you give a set of coordinates: parameter and radius and the command prompts you to pick the edge of the shape which you want to modify. The parameters will be calculated along the edges and the radius function applied to the whole edge. 
7237 * **buildevol** produces the result described previously in **mkevol** and **updatevol**. 
7238
7239 **Example:** 
7240 ~~~~~
7241 # makes an evolved radius on a box 
7242 box b 10 10 10 
7243 mkevol b b 
7244 ==tolerance ang : 0.01 
7245 ==tolerance 3d : 0.0001 
7246 ==tolerance 2d : 1e-05 
7247 ==fleche : 0.001 
7248 ==tolblend 0.01 0.0001 1e-05 0.001 
7249
7250 # click an edge 
7251 updatevol . 0 1 1 3 2 2 
7252 ==Pick an object 
7253
7254 buildevol 
7255 ==Dump of SweepApproximation 
7256 ==Error 3d = 1.28548881203818e-14 
7257 ==Error 2d = 1.3468326936926e-14 , 
7258 ==1.20292299999388e-14 
7259 ==2 Segment(s) of degree 3 
7260
7261 ==COMPUTE: temps total 0.91s dont : 
7262 ==- Init + ExtentAnalyse 0s 
7263 ==- PerformSetOfSurf 0.33s 
7264 ==- PerformFilletOnVertex 0.53s 
7265 ==- FilDS 0.01s 
7266 ==- Reconstruction 0.04s 
7267 ==- SetRegul 0s 
7268 ~~~~~
7269
7270
7271 @subsection occt_draw_7_9  Analysis of topology and geometry
7272
7273 Analysis of shapes includes commands to compute length, area, volumes and inertial properties, as well as to compute some aspects impacting shape validity.
7274
7275   * Use **lprops**, **sprops**, **vprops** to compute integral properties.
7276   * Use **bounding** to display the bounding box of a shape.
7277   * Use **distmini** to calculate the minimum distance between two shapes.
7278   * Use **xdistef**, **xdistcs**, **xdistcc**, **xdistc2dc2dss**, **xdistcc2ds** to check the distance between two objects on even grid.
7279   * Use **checkshape** to check validity of the shape.
7280   * Use **tolsphere** to see the tolerance spheres of all vertices in the shape.
7281   * Use **validrange** to check range of an edge not covered by vertices.
7282
7283
7284 @subsubsection occt_draw_7_9_1  lprops, sprops, vprops
7285
7286 Syntax:      
7287 ~~~~~
7288 lprops shape 
7289 sprops shape 
7290 vprops shape 
7291 ~~~~~
7292
7293 * **lprops** computes the mass properties of all edges in the shape with a linear density of 1;
7294 * **sprops** of all faces with a surface density of 1;
7295 * **vprops** of all solids with a density of 1. 
7296
7297 All three commands print the mass, the coordinates of the center of gravity, the matrix of inertia and the moments. Mass is either the length, the area or the volume. The center and the main axis of inertia are displayed. 
7298
7299 **Example:** 
7300 ~~~~~
7301 # volume of a cylinder 
7302 pcylinder c 10 20 
7303 vprops c 
7304 == results 
7305 Mass : 6283.18529981086 
7306
7307 Center of gravity : 
7308 X = 4.1004749224903e-06 
7309 Y = -2.03392858349861e-16 
7310 Z = 9.9999999941362 
7311
7312 Matrix of Inertia : 
7313 366519.141445068                    5.71451850691484e-12 
7314 0.257640437382627 
7315 5.71451850691484e-12                366519.141444962 
7316 2.26823064169991e-10                0.257640437382627 
7317 2.26823064169991e-10                314159.265358863 
7318
7319 Moments : 
7320 IX = 366519.141446336 
7321 IY = 366519.141444962 
7322 I.Z = 314159.265357595 
7323 ~~~~~
7324
7325
7326 @subsubsection occt_draw_7_9_2   bounding
7327
7328 Syntax:      
7329 ~~~~~
7330 bounding shape 
7331 ~~~~~
7332
7333 Displays the bounding box of a shape. The bounding box is a cuboid created with faces parallel to the x, y, and z planes. The command returns the dimension values of the the box, *xmin ymin zmin xmax ymax zmax.* 
7334
7335 **Example:** 
7336 ~~~~~
7337 # bounding box of a torus 
7338 ptorus t 20 5 
7339 bounding t 
7340 ==-27.059805107309852              -27.059805107309852 - 
7341 5.0000001000000003 
7342 ==27.059805107309852               27.059805107309852 
7343 5.0000001000000003 
7344 ~~~~~
7345
7346 @subsubsection occt_draw_7_9_3  distmini
7347
7348 Syntax:      
7349 ~~~~~
7350 distmini name Shape1 Shape2 
7351 ~~~~~
7352
7353 Calculates the minimum distance between two shapes. The calculation returns the number of solutions, If more than one solution exists. The options are displayed in the viewer(red) and the results are listed in the shell window. The *distmini* lines are considered as shapes which have a value v. 
7354
7355 **Example:** 
7356 ~~~~~
7357 box b 0 0 0 10 20 30 
7358 box b2 30 30 0 10 20 30 
7359 distmini d1 b b2 
7360 ==the distance value is : 22.3606797749979 
7361 ==the number of solutions is :2 
7362
7363 ==solution number 1 
7364 ==the type of the solution on the first shape is 0 
7365 ==the type of the solution on the second shape is 0 
7366 ==the coordinates of the point on the first shape are: 
7367 ==X=10 Y=20 Z=30 
7368 ==the coordinates of the point on the second shape 
7369 are: 
7370 ==X=30 Y=30 Z=30 
7371
7372 ==solution number 2: 
7373 ==the type of the solution on the first shape is 0 
7374 ==the type of the solution on the second shape is 0 
7375 ==the coordinates of the point on the first shape are: 
7376 ==X=10 Y=20 Z=0 
7377 ==the coordinates of the point on the second shape 
7378 are: 
7379 ==X=30 Y=30 Z=0 
7380
7381 ==d1_val d1 d12 
7382 ~~~~~
7383
7384 @subsubsection occt_draw_7_9_4 xdistef, xdistcs, xdistcc, xdistc2dc2dss, xdistcc2ds 
7385
7386 Syntax:
7387 ~~~~~
7388 xdistef edge face
7389 xdistcs curve surface firstParam lastParam [NumberOfSamplePoints]
7390 xdistcc curve1 curve2 startParam finishParam [NumberOfSamplePoints]
7391 xdistcc2ds c curve2d surf startParam finishParam [NumberOfSamplePoints]
7392 xdistc2dc2dss curve2d_1 curve2d_2 surface_1 surface_2 startParam finishParam [NumberOfSamplePoints]
7393 ~~~~~
7394
7395 It is assumed that curves have the same parametrization range and *startParam* is less than *finishParam*.
7396
7397 Commands with prefix *xdist* allow checking the distance between two objects on even grid:
7398   * **xdistef** -- distance between edge and face;
7399   * **xdistcs** -- distance between curve and surface. This means that the projection of each sample point to the surface is computed;
7400   * **xdistcc** -- distance between two 3D curves;
7401   * **xdistcc2ds** -- distance between 3d curve and 2d curve on surface;
7402   * **xdistc2dc2dss** -- distance between two 2d curves on surface.
7403   
7404 **Examples**
7405 ~~~~~
7406 bopcurves b1 b2 -2d 
7407 mksurf s1 b1
7408 mksurf s2 b2
7409 xdistcs c_1 s1 0 1 100
7410 xdistcc2ds c_1 c2d2_1 s2 0 1
7411 xdistc2dc2dss c2d1_1 c2d2_1 s1 s2 0 1 1000
7412 ~~~~~
7413
7414 @subsubsection occt_draw_7_9_5  checkshape
7415
7416 Syntax:                  
7417 ~~~~~
7418 checkshape [-top] shape [result] [-short] 
7419 ~~~~~
7420
7421 Where: 
7422 * *top* -- optional parameter, which allows checking only topological validity of a shape. 
7423 * *shape* -- the only required parameter which represents the name of the shape to check. 
7424 * *result* -- optional parameter which is the prefix of the output shape names. 
7425 * *short* -- a short description of the check. 
7426
7427 **checkshape** examines the selected object for topological and geometric coherence. The object should be a three dimensional shape. 
7428
7429 **Example:** 
7430 ~~~~~
7431 # checkshape returns a comment valid or invalid 
7432 box b1 0 0 0 1 1 1 
7433 checkshape b1 
7434 # returns the comment 
7435 this shape seems to be valid 
7436 ~~~~~
7437
7438 @subsubsection occt_draw_7_9_6  tolsphere
7439
7440 Syntax:                  
7441 ~~~~~
7442 tolsphere shape
7443 ~~~~~
7444
7445 Where: 
7446 * *shape* -- the name of the shape to process. 
7447
7448 **tolsphere** shows vertex tolerances by drawing spheres around each vertex in the shape. Each sphere is assigned a name of the shape with suffix "_vXXX", where XXX is the number of the vertex in the shape.
7449
7450 **Example:** 
7451 ~~~~~
7452 # tolsphere returns all names of created spheres.
7453 box b1 0 0 0 1 1 1 
7454 settolerance b1 0.05
7455 tolsphere b1
7456 # creates spheres and returns the names
7457 b1_v1 b1_v2 b1_v3 b1_v4 b1_v5 b1_v6 b1_v7 b1_v8
7458 ~~~~~
7459
7460 @subsubsection occt_draw_7_9_7  validrange
7461
7462 Syntax:                  
7463 ~~~~~
7464 validrange edge [(out) u1 u2]
7465 ~~~~~
7466
7467 Where: 
7468 * *edge* -- the name of the edge to analyze. 
7469 * *u1*, *u2* -- optional names of variables to put the range into.
7470
7471 **validrange** computes valid range of the edge. If *u1* and *u2* are not given it returns first and last parameters. Otherwise, it sets the variables u1 and u2.
7472
7473 **Example:** 
7474 ~~~~~
7475 circle c 0 0 0 10
7476 mkedge e c
7477 mkedge e c 0 pi
7478 validrange e
7479 # returns the range
7480 1.9884375000000002e-008 3.1415926337054181
7481 validrange e u1 u2
7482 dval u1
7483 1.9884375000000002e-008
7484 dval u2
7485 3.1415926337054181
7486 ~~~~~
7487
7488
7489 @subsection occt_draw_7_10  Surface creation
7490
7491 Surface creation commands include surfaces created from boundaries and from spaces between shapes. 
7492   * **gplate** creates a surface from a boundary definition.
7493   * **filling** creates a surface from a group of surfaces.
7494
7495 @subsubsection occt_draw_7_10_1   gplate,
7496
7497 Syntax: 
7498 ~~~~~
7499 gplate result nbrcurfront nbrpntconst [SurfInit] [edge 0] [edge tang (1:G1;2:G2) surf]...[point] [u v tang (1:G1;2:G2) surf] ... 
7500 ~~~~~
7501
7502 Creates a surface from a defined boundary. The boundary can be defined using edges, points, or other surfaces. 
7503
7504 **Example:**
7505 ~~~~~
7506 plane p 
7507 trim p p -1 3 -1 3 
7508 mkface p p 
7509
7510 beziercurve c1 3 0 0 0 1 0 1 2 0 0 
7511 mkedge e1 c1 
7512 tcopy e1 e2 
7513 tcopy e1 e3 
7514
7515 ttranslate e2 0 2 0 
7516 trotate e3 0 0 0 0 0 1 90 
7517 tcopy e3 e4 
7518 ttranslate e4 2 0 0 
7519 # create the surface 
7520 gplate r1 4 0 p e1 0 e2 0 e3 0 e4 0 
7521 == 
7522 ======== Results =========== 
7523 DistMax=8.50014503228635e-16 
7524 * GEOMPLATE END* 
7525 Calculation time: 0.33 
7526 Loop number: 1 
7527 Approximation results 
7528 Approximation error : 2.06274907619957e-13 
7529 Criterium error : 4.97600631215754e-14 
7530
7531 #to create a surface defined by edges and passing through a point 
7532 # to define the border edges and the point 
7533 plane p 
7534 trim p p -1 3 -1 3 
7535 mkface p p 
7536
7537 beziercurve c1 3 0 0 0 1 0 1 2 0 0 
7538 mkedge e1 c1 
7539 tcopy e1 e2 
7540 tcopy e1 e3 
7541
7542 ttranslate e2 0 2 0 
7543 trotate e3 0 0 0 0 0 1 90 
7544 tcopy e3 e4 
7545 ttranslate e4 2 0 0 
7546 # to create a point 
7547 point pp 1 1 0 
7548 # to create the surface 
7549 gplate r2 4 1 p e1 0 e2 0 e3 0 e4 0 pp 
7550 == 
7551 ======== Results =========== 
7552 DistMax=3.65622157610934e-06 
7553 * GEOMPLATE END* 
7554 Calculculation time: 0.27 
7555 Loop number: 1 
7556 Approximation results 
7557 Approximation error : 0.000422195884750181 
7558 Criterium error : 3.43709808053967e-05 
7559 ~~~~~
7560
7561 @subsubsection occt_draw_7_10_2   filling, fillingparam
7562
7563 Syntax:      
7564 ~~~~~
7565 filling result nbB nbC nbP [SurfInit] [edge][face]order... 
7566 edge[face]order... point/u v face order... 
7567 ~~~~~
7568
7569 Creates a surface between borders. This command uses the **gplate** algorithm but creates a surface that is tangential to the adjacent surfaces. The result is a smooth continuous surface based on the G1 criterion. 
7570
7571 To define the surface border: 
7572
7573   * enter the number of edges, constraints, and points
7574   * enumerate the edges, constraints and points
7575
7576 The surface can pass through other points. These are defined after the border definition. 
7577
7578 You can use the *fillingparam* command to access the filling parameters. 
7579
7580 The options are: 
7581
7582  * <i>-l</i> : to list current values 
7583  * <i>-i</i> : to set default values 
7584  * <i>-rdeg nbPonC nbIt anis </i> : to set filling options 
7585  * <i>-c t2d t3d tang tcur </i> : to set tolerances 
7586  * <i>-a maxdeg maxseg </i> : Approximation option 
7587
7588 **Example:** 
7589 ~~~~~
7590 # to create four curved survaces and a point 
7591 plane p 
7592 trim p p -1 3 -1 3 
7593 mkface p p 
7594
7595 beziercurve c1 3 0 0 0 1 0 1 2 0 0 
7596 mkedge e1 c1 
7597 tcopy e1 e2 
7598 tcopy e1 e3 
7599
7600 ttranslate e2 0 2 0 
7601 trotate e3 0 0 0 0 0 1 90 
7602 tcopy e3 e4 
7603 ttranslate e4 2 0 0 
7604
7605 point pp 1 1 0 
7606
7607 prism f1 e1 0 -1 0 
7608 prism f2 e2 0 1 0 
7609 prism f3 e3 -1 0 0 
7610 prism f4 e4 1 0 0 
7611
7612 # to create a tangential surface 
7613 filling r1 4 0 0 p e1 f1 1 e2 f2 1 e3 f3 1 e4 f4 1 
7614 # to create a tangential surface passing through point pp 
7615 filling r2 4 0 1 p e1 f1 1 e2 f2 1 e3 f3 1 e4 f4 1 pp# 
7616 # to visualise the surface in detail 
7617 isos r2 40 
7618 # to display the current filling parameters 
7619 fillingparam -l 
7620 == 
7621 Degree = 3 
7622 NbPtsOnCur = 10 
7623 NbIter = 3 
7624 Anisotropie = 0 
7625 Tol2d = 1e-05 
7626 Tol3d = 0.0001 
7627 TolAng = 0.01 
7628 TolCurv = 0.1 
7629
7630 MaxDeg = 8 
7631 MaxSegments = 9 
7632 ~~~~~
7633
7634
7635 @subsection occt_draw_7_11  Complex Topology
7636
7637 Complex topology is the group of commands that modify the topology of shapes. This includes feature modeling. 
7638
7639
7640 @subsubsection occt_draw_7_11_1  offsetshape, offsetcompshape
7641
7642 Syntax:      
7643 ~~~~~
7644 offsetshape r shape offset [tol] [face ...] 
7645 offsetcompshape r shape offset [face ...] 
7646 ~~~~~
7647
7648 **offsetshape** and **offsetcompshape** assign a thickness to the edges of a shape. The *offset* value can be negative or positive. This value defines the thickness and direction of the resulting shape. Each face can be removed to create a hollow object. 
7649
7650 The resulting shape is based on a calculation of intersections. In case of simple shapes such as a box, only the adjacent intersections are required and you can use the **offsetshape** command. 
7651
7652 In case of complex shapes, where intersections can occur from non-adjacent edges and faces, use the **offsetcompshape** command. **comp** indicates complete and requires more time to calculate the result. 
7653
7654 The opening between the object interior and exterior is defined by the argument face or faces. 
7655
7656 **Example:** 
7657 ~~~~~
7658 box b1 10 20 30 
7659 explode b1 f 
7660 == b1_1 b1_2 b1_3 b1_4 b1_5 b1_6 
7661 offsetcompshape r b1 -1 b1_3 
7662 ~~~~~
7663
7664 @subsubsection occt_draw_7_11_2  featprism, featdprism, featrevol, featlf, featrf
7665
7666 Syntax:      
7667 ~~~~~
7668 featprism shape element skface Dirx Diry Dirz Fuse(0/1/2) Modify(0/1) 
7669 featdprism shape face skface angle Fuse(0/1/2) Modify(0/1) 
7670 featrevol shape element skface Ox Oy Oz Dx Dy Dz Fuse(0/1/2) Modify(0/1) 
7671 featlf shape wire plane DirX DirY DirZ DirX DirY DirZ Fuse(0/1/2) Modify(0/1) 
7672 featrf shape wire plane X Y Z DirX DirY DirZ Size Size Fuse(0/1/2) Modify(0/1) 
7673 featperform prism/revol/pipe/dprism/lf result [[Ffrom] Funtil] 
7674 featperformval prism/revol/dprism/lf result value 
7675 ~~~~~
7676
7677 **featprism** loads the arguments for a prism with contiguous sides normal to the face. 
7678
7679 **featdprism** loads the arguments for a prism which is created in a direction normal to the face and includes a draft angle. 
7680
7681 **featrevol** loads the arguments for a prism with a circular evolution. 
7682
7683 **featlf** loads the arguments for a linear rib or slot. This feature uses planar faces and a wire as a guideline. 
7684
7685 **featrf** loads the arguments for a rib or slot with a curved surface. This feature uses a circular face and a wire as a guideline. 
7686
7687 **featperform** loads the arguments to create the feature. 
7688
7689 **featperformval** uses the defined arguments to create a feature with a limiting value. 
7690
7691 All the features are created from a set of arguments which are defined when you initialize the feature context. Negative values can be used to create depressions. 
7692
7693 **Examples:** 
7694
7695 Let us create a feature prism with a draft angle and a normal direction :
7696
7697 ~~~~~
7698 # create a box with a wire contour on the upper face 
7699 box b 1 1 1 
7700 profil f O 0 0 1 F 0.25 0.25 x 0.5 y 0.5 x -0.5 
7701 explode b f 
7702 # loads the feature arguments defining the draft angle 
7703 featdprism b f b_6 5 1 0 
7704 # create the feature 
7705 featperformval dprism r 1 
7706 ==BRepFeat_MakeDPrism::Perform(Height) 
7707 BRepFeat_Form::GlobalPerform () 
7708  Gluer 
7709  still Gluer 
7710  Gluer result 
7711 ~~~~~
7712
7713 Let us  create a feature prism with circular direction :
7714
7715 ~~~~~
7716 # create a box with a wire contour on the upper face 
7717 box b 1 1 1 
7718 profil f O 0 0 1 F 0.25 0.25 x 0.5 y 0.5 x -0.5 
7719 explode b f 
7720 # loads the feature arguments defining a rotation axis 
7721 featrevol b f b_6 1 0 1 0 1 0 1 0 
7722 featperformval revol r 45 
7723 ==BRepFeat_MakeRevol::Perform(Angle) 
7724 BRepFeat_Form::GlobalPerform () 
7725  Gluer 
7726  still Gluer 
7727  Gluer result 
7728 ~~~~~
7729
7730
7731 Let us create a slot using the linear feature :
7732
7733 ~~~~~
7734 #create the base model using the multi viewer 
7735 mu4 
7736 profile p x 5 y 1 x -3 y -0.5 x -1.5 y 0.5 x 0.5 y 4 x -1 y -5 
7737 prism pr p 0 0 1 
7738 # create the contour for the linear feature 
7739 vertex v1 -0.2 4 0.3 
7740 vertex v2 0.2 4 0.3 
7741 vertex v3 0.2 0.2 0.3 
7742 vertex v4 4 0.2 0.3 
7743 vertex v5 4 -0.2 0.3 
7744 edge e1 v1 v2 
7745 edge e2 v2 v3 
7746 edge e3 v3 v4 
7747 edge e4 v4 v5 
7748 wire w e1 e2 e3 e4 
7749 # define a plane 
7750 plane pl 0.2 0.2 0.3 0 0 1 
7751 # loads the linear feature arguments 
7752 featlf pr w pl 0 0 0.3 0 0 0 0 1 
7753 featperform lf result 
7754 ~~~~~
7755
7756 Let us create a rib using the revolution feature :
7757
7758 ~~~~~
7759 #create the base model using the multi viewer 
7760 mu4 
7761 pcylinder c1 3 5 
7762 # create the contour for the revolution feature 
7763 profile w c 1 190 WW 
7764 trotate w 0 0 0 1 0 0 90 
7765 ttranslate w -3 0 1 
7766 trotate w -3 0 1.5 0 0 1 180 
7767 plane pl -3 0 1.5 0 1 0 
7768 # loads the revolution feature arguments 
7769 featrf c1 w pl 0 0 0 0 0 1 0.3 0.3 1 1 
7770 featperform rf result 
7771 ~~~~~
7772
7773 @subsubsection occt_draw_7_11_3  draft
7774
7775 Syntax: 
7776 ~~~~~
7777 draft result shape dirx diry dirz angle shape/surf/length [-IN/-OUT] [Ri/Ro] [-Internal] 
7778 ~~~~~
7779
7780 Computes a draft angle surface from a wire. The surface is determined by the draft direction, the inclination of the draft surface, a draft angle, and a limiting distance. 
7781
7782   * The draft angle is measured in radians.
7783   * The draft direction is determined by the argument -INTERNAL
7784   * The argument Ri/Ro deftermines wether the corner edges of the draft surfaces are angular or rounded.
7785   * Arguments that can be used to define the surface distance are:
7786    * length, a defined distance
7787    * shape, until the surface contacts a shape
7788    * surface, until the surface contacts a surface.
7789
7790 **Note** that the original aim of adding a draft angle to a shape is to produce a shape which can be removed easily from a mould. The Examples below use larger angles than are used normally and the calculation results returned are not indicated.
7791
7792 **Example:** 
7793 ~~~~~
7794 # to create a simple profile 
7795 profile p F 0 0 x 2 y 4 tt 0 4 w 
7796 # creates a draft with rounded angles 
7797 draft res p 0 0 1 3 1 -Ro 
7798 # to create a profile with an internal angle 
7799 profile p F 0 0 x 2 y 4 tt 1 1.5 tt 0 4 w 
7800 # creates a draft with rounded external angles 
7801 draft res p 0 0 1 3 1 -Ro 
7802 ~~~~~
7803
7804 @subsubsection occt_draw_7_11_4  deform
7805
7806 Syntax:      
7807 ~~~~~
7808 deform newname name CoeffX CoeffY CoeffZ
7809 ~~~~~
7810
7811 Modifies the shape using the x, y, and z coefficients. You can reduce or magnify the shape in the x,y, and z directions. 
7812  
7813 **Example:** 
7814 ~~~~~
7815 pcylinder c 20 20 
7816 deform a c 1 3 5 
7817 # the conversion to bspline is followed by the 
7818 deformation 
7819 ~~~~~
7820
7821
7822 @subsubsection occt_draw_7_11_5 nurbsconvert
7823
7824 Syntax:
7825  
7826 ~~~~~
7827 nurbsconvert result name [result name] 
7828 ~~~~~
7829
7830 Changes the NURBS curve definition of a shape to a Bspline curve definition. This conversion is required for assymetric deformation and prepares the arguments for other commands such as **deform**. The conversion can be necessary when transferring shape data to other applications. 
7831
7832
7833 @subsubsection occt_draw_7_11_6 edgestofaces
7834
7835 **edgestofaces** - The command allows building planar faces from the planar edges randomly located in 3D space.
7836
7837 It has the following syntax:
7838 ~~~~
7839 edgestofaces r_faces edges [-a AngTol -s Shared(0/1)]
7840 ~~~~
7841 Options:
7842  * -a AngTol - angular tolerance used for distinguishing the planar faces;
7843  * -s Shared(0/1) - boolean flag which defines whether the input edges are already shared or have to be intersected.
7844
7845
7846 @subsection occt_draw_7_12  Texture Mapping to a Shape
7847
7848 Texture mapping allows you to map textures on a shape. Textures are texture image files and several are predefined. You can control the number of occurrences of the texture on a face, the position of a texture and the scale factor of the texture. 
7849
7850 @subsubsection occt_draw_7_12_1  vtexture
7851
7852 Syntax:      
7853 ~~~~~
7854 vtexture NameOfShape TextureFile 
7855 vtexture NameOfShape 
7856 vtexture NameOfShape ? 
7857 vtexture NameOfShape IdOfTexture 
7858 ~~~~~
7859
7860 **TextureFile** identifies the file containing the texture you want. The same syntax without **TextureFile** disables texture mapping. The question-mark <b>?</b> lists available textures. **IdOfTexture** allows applying predefined textures. 
7861
7862 @subsubsection occt_draw_7_12_2  vtexscale
7863
7864 Syntax:      
7865 ~~~~~
7866 vtexscale NameOfShape ScaleU ScaleV 
7867 vtexscale NameOfShape ScaleUV 
7868 vtexscale NameOfShape 
7869 ~~~~~
7870
7871 *ScaleU* and *Scale V* allow scaling the texture according to the U and V parameters individually, while *ScaleUV* applies the same scale to both parameters. 
7872
7873 The syntax without *ScaleU*, *ScaleV* or *ScaleUV* disables texture scaling. 
7874
7875 @subsubsection occt_draw_7_12_3  vtexorigin
7876
7877 Syntax:       
7878 ~~~~~
7879 vtexorigin NameOfShape UOrigin VOrigin 
7880 vtexorigin NameOfShape UVOrigin 
7881 vtexorigin NameOfShape 
7882 ~~~~~
7883
7884 *UOrigin* and *VOrigin* allow placing the texture according to the U and V parameters individually, while *UVOrigin* applies the same position value to both parameters. 
7885
7886 The syntax without *UOrigin*, *VOrigin* or *UVOrigin* disables origin positioning. 
7887
7888 @subsubsection occt_draw_7_12_4  vtexrepeat
7889
7890 Syntax:       
7891 ~~~~~
7892 vtexrepeat NameOfShape URepeat VRepeat 
7893 vtexrepeat NameOfShape UVRepeat 
7894 vtexrepeat NameOfShape 
7895 ~~~~~
7896
7897 *URepeat* and *VRepeat* allow repeating the texture along the U and V parameters individually, while *UVRepeat* applies the same number of repetitions for both parameters. 
7898
7899 The same syntax without *URepeat*, *VRepeat* or *UVRepeat* disables texture repetition. 
7900
7901 @subsubsection occt_draw_7_12_5  vtexdefault
7902
7903 Syntax:       
7904 ~~~~~
7905 vtexdefault NameOfShape 
7906 ~~~~~
7907
7908 *Vtexdefault* sets or resets the texture mapping default parameters. 
7909
7910 The defaults are: 
7911
7912  * *URepeat = VRepeat = 1* no repetition 
7913  * *UOrigin = VOrigin = 1*  origin set at (0,0) 
7914  * *UScale = VScale = 1*  texture covers 100% of the face 
7915  
7916  
7917 @section occt_draw_20 General Fuse Algorithm commands
7918
7919 This chapter describes existing commands of Open CASCADE Draw Test Harness that are used for debugging of General Fuse Algorithm (GFA). It is also applicable for all General Fuse based algorithms such as Boolean Operations Algorithm (BOA), Splitter Algorithm (SPA), Cells Builder Algorithm etc.
7920
7921 See @ref occt_user_guides__boolean_operations "Boolean operations" user's guide for the description of these algorithms.
7922
7923 @subsection occt_draw_20_1 Definitions
7924
7925 The following terms and definitions are used in this document:
7926 * **Objects** -- list of shapes that are arguments of the algorithm.
7927 * **Tools** -- list of shapes that are arguments of the algorithm. Difference between Objects and Tools is defined by specific requirements of the operations (Boolean Operations, Splitting Operation).
7928 * **DS** -- internal data structure used by the algorithm (*BOPDS_DS* object).
7929 * **PaveFiller** -- intersection part of the algorithm (*BOPAlgo_PaveFiller* object).
7930 * **Builder** -- builder part of the algorithm (*BOPAlgo_Builder* object).
7931 * **IDS Index** -- the index of the vector *myLines*.
7932
7933 @subsection occt_draw_20_2 General commands
7934
7935 * **bclearobjects** -- clears the list of Objects;      
7936 * **bcleartools**       -- clears the list of Tools;    
7937 * **baddobjects** *S1 S2...Sn*  -- adds shapes *S1, S2, ... Sn* as Objects;     
7938 * **baddtools** *S1 S2...Sn* -- adds shapes *S1, S2, ... Sn* as Tools;
7939 * **bfillds** -- performs the Intersection Part of the Algorithm;       
7940 * **bbuild** *r* -- performs the Building Part of the Algorithm (General Fuse operation); *r* is the resulting shape;
7941 * **bsplit** *r* -- performs the Splitting operation; *r* is the resulting shape;
7942 * **bbop** *r* *iOp* -- performs the Boolean operation; *r* is the resulting shape; *iOp* - type of the operation (0 - COMMON; 1 - FUSE; 2 - CUT; 3 - CUT21; 4 - SECTION);
7943 * **bcbuild** *rx* -- performs initialization of the *Cells Builder* algorithm (see @ref occt_algorithms_10c_Cells_1 "Usage of the Cells Builder algorithm" for more details).
7944
7945 @subsection occt_draw_20_3 Commands for Intersection Part
7946
7947 All commands listed below  are available when the Intersection Part of the algorithm is done (i.e. after the command *bfillds*).
7948
7949 @subsubsection occt_draw_20_3_1 bopds
7950         
7951 Syntax: 
7952 ~~~~
7953 bopds -v [e, f] 
7954 ~~~~
7955
7956 Displays:
7957 * all BRep shapes of arguments that are in the DS [default];
7958 * <i>-v</i> : only vertices of arguments that are in the DS;
7959 * <i>-e</i> : only edges of arguments that are in the DS;
7960 * <i>-f</i> : only faces of arguments that are in the DS.
7961
7962 @subsubsection occt_draw_20_3_2 bopdsdump
7963
7964 Prints contents of the DS. 
7965
7966 Example:
7967
7968 ~~~~
7969  Draw[28]> bopdsdump
7970  *** DS ***
7971  Ranges:2                       number of ranges
7972  range: 0 33            indices for range 1
7973  range: 34 67           indices for range 2
7974  Shapes:68              total number of source shapes
7975  0 : SOLID { 1 }
7976  1 : SHELL { 2 12 22 26 30 32 }
7977  2 : FACE { 4 5 6 7 8 9 10 11 }
7978  3 : WIRE { 4 7 9 11 }
7979  4 : EDGE { 5 6 }
7980  5 : VERTEX { }
7981  6 : VERTEX { }
7982  7 : EDGE { 8 5 }
7983  8 : VERTEX { }
7984 ~~~~
7985
7986 @code 0 : SOLID { 1 } @endcode has the following meaning:
7987 * *0* -- index in the DS;
7988 * *SOLID* -- type of the shape;
7989 * <i>{ 1 }</i> -- a DS index of the successors.
7990
7991 @subsubsection occt_draw_20_3_3 bopindex
7992
7993 Syntax:
7994 ~~~~
7995 bopindex S
7996 ~~~~
7997 Prints DS index of shape *S*.
7998
7999 @subsubsection occt_draw_20_3_4 bopiterator
8000
8001 Syntax:
8002 ~~~~~
8003 bopiterator [t1 t2]
8004 ~~~~~
8005
8006 Prints pairs of DS indices of source shapes that are intersected in terms of bounding boxes.
8007
8008 <i>[t1 t2]</i> are types of the shapes:
8009 * *7* -- vertex;
8010 * *6* -- edge;
8011 * *4* -- face.
8012
8013 Example:
8014 ~~~~
8015  Draw[104]> bopiterator 6 4
8016  EF: ( z58 z12 )
8017  EF: ( z17 z56 )
8018  EF: ( z19 z64 )
8019  EF: ( z45 z26 )
8020  EF: ( z29 z36 )
8021  EF: ( z38 z32 )
8022 ~~~~
8023
8024 * *bopiterator 6 4* prints pairs of indices for types: edge/face;
8025 * *z58 z12* -- DS indices of intersecting edge and face.
8026
8027
8028 @subsubsection occt_draw_20_3_5 bopinterf
8029
8030 Syntax: 
8031 ~~~~
8032 bopinterf t
8033 ~~~~
8034
8035 Prints contents of *myInterfTB* for the type of interference *t*:
8036 * *t=0* : vertex/vertex;
8037 * *t=1* : vertex/edge;
8038 * *t=2* : edge/edge;
8039 * *t=3* : vertex/face;
8040 * *t=4* : edge/face.
8041
8042 Example:
8043 ~~~~
8044  Draw[108]> bopinterf 4
8045  EF: (58, 12, 68), (17, 56, 69), (19, 64, 70), (45, 26, 71), (29, 36, 72), (38, 32, 73), 6 EF found.
8046 ~~~~
8047
8048 Here, record <i>(58, 12, 68)</i> means:
8049 * *58* -- a DS index of the edge;
8050 * *12* -- a DS index of the face;
8051 * *68* -- a DS index of the new vertex.
8052
8053 @subsubsection occt_draw_20_3_6 bopsp   
8054
8055 Displays split edges. 
8056
8057 Example:
8058 ~~~~
8059  Draw[33]> bopsp
8060  edge 58 : z58_74 z58_75
8061  edge 17 : z17_76 z17_77
8062  edge 19 : z19_78 z19_79
8063  edge 45 : z45_80 z45_81
8064  edge 29 : z29_82 z29_83
8065  edge 38 : z38_84 z38_85
8066 ~~~~
8067
8068 * *edge 58* -- 58 is a DS index of the original edge.
8069 * *z58_74 z58_75* -- split edges, where 74, 75 are DS indices of the split edges.
8070
8071 @subsubsection occt_draw_20_3_7 bopcb
8072
8073 Syntax:
8074 ~~~~
8075 bopcb [nE]
8076 ~~~~
8077
8078 Prints Common Blocks for:
8079 * all source edges (by default);
8080 * the source edge with the specified index *nE*.
8081
8082 Example:
8083 ~~~~
8084  Draw[43]> bopcb 17
8085  -- CB:
8086  PB:{ E:71 orE:17 Pave1: { 68 3.000 } Pave2: { 18 10.000 } }
8087  Faces: 36
8088 ~~~~
8089
8090 This command dumps common blocks for the source edge with index 17. 
8091 * *PB* -- information about the Pave Block;
8092         * *71* -- a DS index of the split edge
8093         * *17* -- a DS index of the original edge
8094 * <i>Pave1 : { 68 3.000 }</i> -- information about the Pave:
8095         * *68* -- a DS index of the vertex of the pave
8096         * *3.000* -- a parameter of vertex 68 on edge 17
8097 * *Faces: 36* -- 36 is a DS index of the face the common block belongs to. 
8098
8099
8100 @subsubsection occt_draw_20_3_8 bopfin
8101
8102 Syntax:
8103
8104 ~~~~
8105 bopfin nF       
8106 ~~~~
8107 Prints Face Info about IN-parts for the face with DS index *nF*.
8108
8109 Example:
8110 ~~~~
8111  Draw[47]> bopfin 36
8112  pave blocks In:
8113  PB:{ E:71 orE:17 Pave1: { 68 3.000 } Pave2: { 18 10.000 } }
8114  PB:{ E:75 orE:19 Pave1: { 69 3.000 } Pave2: { 18 10.000 } }
8115  vrts In:
8116  18
8117 ~~~~
8118
8119
8120 * <i>PB:{ E:71 orE:17 Pave1: { 68 3.000 } Pave2: { 18 10.000 } }</i> -- information about the Pave Block; 
8121 * <i>vrts In ... 18 </i> -- a DS index of the vertex IN the face.
8122
8123 @subsubsection occt_draw_20_3_9 bopfon
8124
8125 Syntax:
8126 ~~~~
8127 bopfon nF
8128 ~~~~
8129 Print Face Info about ON-parts for the face with DS index *nF*.
8130
8131 Example:
8132 ~~~~
8133  Draw[58]> bopfon 36
8134  pave blocks On:
8135  PB:{ E:72 orE:38 Pave1: { 69 0.000 } Pave2: { 68 10.000 } }
8136  PB:{ E:76 orE:45 Pave1: { 69 0.000 } Pave2: { 71 10.000 } }
8137  PB:{ E:78 orE:43 Pave1: { 71 0.000 } Pave2: { 70 10.000 } }
8138  PB:{ E:74 orE:41 Pave1: { 68 0.000 } Pave2: { 70 10.000 } }
8139  vrts On:
8140  68 69 70 71
8141 ~~~~
8142
8143 * <i>PB:{ E:72 orE:38 Pave1: { 69 0.000 } Pave2: { 68 10.000 } }</i> -- information about the Pave Block; 
8144 * <i>vrts On: ... 68 69 70 71</i> -- DS indices of the vertices ON the face.
8145
8146 @subsubsection occt_draw_20_3_10 bopwho
8147
8148 Syntax:
8149 ~~~~
8150 bopwho nS
8151 ~~~~
8152
8153 Prints the information about the shape with DS index *nF*.
8154
8155 Example:
8156 ~~~~
8157  Draw[116]> bopwho 5
8158  rank: 0
8159 ~~~~
8160
8161 * *rank: 0* -- means that shape 5 results from the Argument with index 0.
8162
8163 Example:
8164 ~~~~
8165  Draw[118]> bopwho 68
8166  the shape is new
8167  EF: (58, 12),
8168  FF curves: (12, 56),
8169  FF curves: (12, 64),
8170 ~~~~
8171
8172 This means that shape 68 is a result of the following interferences:
8173 * *EF: (58, 12)* -- edge 58 / face 12
8174 * *FF curves: (12, 56)* -- edge from the intersection curve between faces 12 and 56
8175 * *FF curves: (12, 64)* -- edge from the intersection curve between faces 12 and 64
8176
8177 @subsubsection occt_draw_20_3_11 bopnews
8178
8179 Syntax:
8180 ~~~~
8181 bopnews -v [-e]
8182 ~~~~
8183
8184 * <i>-v</i> -- displays all new vertices produced during the operation;
8185 * <i>-e</i> -- displays all new edges produced during the operation.
8186
8187 @subsection occt_draw_20_4      Commands for the Building Part
8188
8189 The commands listed below are available when the Building Part of the algorithm is done (i.e. after the command *bbuild*).
8190
8191 @subsubsection occt_draw_20_4_1 bopim
8192
8193 Syntax: 
8194
8195 ~~~~
8196 bopim S
8197 ~~~~
8198 Shows the compound of shapes that are images of shape *S* from the argument.
8199
8200  
8201 @section occt_draw_8 Data Exchange commands
8202
8203 This chapter presents some general information about Data Exchange (DE) operations. 
8204
8205 DE commands are intended for translation files of various formats (IGES,STEP) into OCCT shapes with their attributes (colors, layers etc.) 
8206
8207 This files include a number of entities. Each entity has its own number in the file which we call label and denote as # for a STEP file and D for an IGES file. Each file has entities called roots (one or more). A full description of such entities is contained in the Users' Guides 
8208 * for <a href="user_guides__step.html#occt_step_1">STEP format</a> and
8209 * for <a href="user_guides__iges.html#occt_iges_1">IGES format</a>. 
8210
8211 Each Draw session has an interface model, which is a structure for keeping various information. 
8212
8213 The first step of translation is loading information from a file into a model. 
8214 The second step is creation of an OpenCASCADE shape from this model. 
8215
8216 Each entity from a file has its own number in the model (num). During the translation a map of correspondences between labels(from file) and numbers (from model) is created. 
8217
8218 The model and the map are used for working with most of DE commands. 
8219
8220 @subsection occt_draw_8_1  IGES commands 
8221
8222 @subsubsection occt_draw_8_1_1  igesread
8223
8224 Syntax:      
8225 ~~~~~
8226 igesread <file_name> <result_shape_name> [<selection>]
8227 ~~~~~
8228
8229 Reads an IGES file to an OCCT shape. This command will interactively ask the user to select a set of entities to be converted. 
8230
8231
8232 | N | Mode | Description |
8233 | :-- | :-- | :---------- |
8234 | 0 | End | finish conversion and exit igesbrep |
8235 | 1 | Visible roots | convert only visible roots |
8236 | 2 | All roots | convert all roots |
8237 | 3 | One entity | convert entity with number provided by the user |
8238 | 4 | Selection | convert only entities contained in selection |
8239
8240
8241 After the selected set of entities is loaded the user will be asked how loaded entities should be converted into OCCT shapes (e.g., one shape per root or one shape for all the entities). It is also possible to save loaded shapes in files, and to cancel loading. 
8242
8243 The second parameter of this command defines the name of the loaded shape. If several shapes are created, they will get indexed names. For instance, if the last parameter was *s*, they will be *s_1, ... s_N*. 
8244
8245 <i>\<selection\></i> specifies the scope of selected entities in the model, by default it is *xst-transferrable-roots*.  If we use symbol <i>*</i> as <i>\<selection\></i> all roots will be translated. 
8246
8247 See also the detailed description of <a href="user_guides__iges.html#occt_iges_2_3_4">Selecting IGES entities</a>.
8248
8249 **Example:**
8250 ~~~~~
8251 # translation all roots from file 
8252 igesread /disk01/files/model.igs a  * 
8253 ~~~~~
8254
8255 @subsubsection occt_draw_8_1_2   tplosttrim
8256
8257 Syntax:      
8258 ~~~~~
8259 tplosttrim [<IGES_type>] 
8260 ~~~~~
8261
8262 Sometimes the trimming contours of IGES faces (i.e., entity 141 for 143, 142 for 144) can be lost during translation due to fails. This command gives us a number of lost trims and the number of corresponding IGES entities. 
8263 It outputs the rank and numbers of faces that lost their trims and their numbers for each type (143, 144, 510) and their total number. If a face lost several of its trims it is output only once. 
8264 Optional parameter <i>\<IGES_type\></i> can be *0TrimmedSurface, BoundedSurface* or *Face* to specify the only type of IGES faces. 
8265
8266 **Example:**
8267 ~~~~~
8268 tplosttrim TrimmedSurface 
8269 ~~~~~
8270
8271 @subsubsection occt_draw_8_1_3  brepiges
8272
8273 Syntax:      
8274 ~~~~~
8275 brepiges <shape_name> <filename.igs>
8276 ~~~~~
8277
8278 Writes an OCCT shape to an IGES file. 
8279
8280 **Example:** 
8281 ~~~~~    
8282 # write shape with name aa to IGES file 
8283 brepiges aa /disk1/tmp/aaa.igs 
8284 == unit (write) : MM 
8285 == mode  write  : Faces 
8286 ==   To modifiy : command  param 
8287 == 1 Shapes written, giving 345 Entities 
8288 ==  Now, to write a file, command : writeall filename 
8289 ==  Output on file : /disk1/tmp/aaa.igs 
8290 ==  Write OK 
8291 ~~~~~
8292
8293 @subsection occt_draw_8_2  STEP commands 
8294
8295 These commands are used during the translation of STEP models. 
8296
8297
8298 @subsubsection occt_draw_8_2_1  stepread
8299
8300 Syntax:      
8301 ~~~~~
8302 stepread file_name result_shape_name [selection] 
8303 ~~~~~
8304
8305 Read a STEP file to an OCCT shape. 
8306 This command will interactively ask the user to select a set of entities to be converted: 
8307
8308 | N | Mode | Description |
8309 | :---- | :---- | :---- |  
8310 | 0 | End | Finish transfer and exit stepread | 
8311 | 1 | root with rank 1 | Transfer first root | 
8312 | 2 | root by its rank | Transfer root specified by its rank | 
8313 | 3 | One entity | Transfer entity with a number provided by the user | 
8314 | 4 | Selection | Transfer only entities contained in selection | 
8315
8316 After the selected set of entities is loaded the user will be asked how loaded entities should be converted into OCCT shapes. 
8317 The second parameter of this command defines the name of the loaded shape. If several shapes are created, they will get indexed names. For instance, if the last parameter was *s*, they will be *s_1, ... s_N*. 
8318 <i>\<selection\></i> specifies the scope of selected entities in the model.  If we use symbol <i>*</i> as <i>\<selection\></i> all roots will be translated. 
8319
8320 See also the detailed description of <a href="user_guides__step.html#occt_step_2_3_6">Selecting STEP entities</a>.
8321
8322 **Example:**
8323 ~~~~~
8324 # translation all roots from file 
8325 stepread /disk01/files/model.stp a  * 
8326 ~~~~~
8327
8328 @subsubsection occt_draw_8_2_2   stepwrite
8329
8330 Syntax:      
8331 ~~~~~
8332 stepwrite mode shape_name file_name 
8333 ~~~~~
8334
8335 Writes an OCCT shape to a STEP file. 
8336
8337 The following  modes are available : 
8338     * *a* -- as is -- the mode is selected automatically depending on the type & geometry of the shape; 
8339     * *m* -- *manifold_solid_brep* or *brep_with_voids* 
8340     * *f* -- *faceted_brep* 
8341     * *w* -- *geometric_curve_set* 
8342     * *s* -- *shell_based_surface_model* 
8343  
8344 For further information see <a href="#user_guides__step.html#occt_step_6_5">Writing a STEP file</a>. 
8345
8346 **Example:**
8347
8348 Let us write shape *a* to a STEP file in mode *0*. 
8349
8350 ~~~~~
8351 stepwrite 0 a /disk1/tmp/aaa.igs 
8352 ~~~~~
8353
8354
8355 @subsection occt_draw_8_3  General commands 
8356
8357 These are auxilary commands used for the analysis of result of translation of IGES and STEP files. 
8358
8359 @subsubsection occt_draw_8_3_1  count
8360
8361 Syntax:      
8362 ~~~~~
8363 count <counter> [<selection>] 
8364 ~~~~~
8365
8366 Calculates statistics on the entities in the model and outputs a count of entities. 
8367
8368 The optional selection argument, if specified, defines a subset of entities, which are to be taken into account. The first argument should be one of the currently defined counters. 
8369
8370 | Counter | Operation |
8371 | :-------- | :-------- | 
8372 | xst-types | Calculates how many entities of each OCCT type exist | 
8373 | step214-types | Calculates how many entities of each STEP type exist |
8374
8375 **Example:**
8376 ~~~~~
8377 count xst-types 
8378 ~~~~~
8379
8380 @subsubsection occt_draw_8_3_2 data
8381
8382 Syntax:      
8383 ~~~~~
8384 data <symbol>
8385 ~~~~~
8386
8387 Obtains general statistics on the loaded data. 
8388 The information printed by this command depends on the symbol specified. 
8389
8390 **Example:**
8391 ~~~~~
8392 # print full information about warnings and fails 
8393 data c 
8394 ~~~~~
8395
8396 | Symbol | Output |
8397 | :------ | :------ |
8398 | g | Prints the information contained in the header of the file |
8399 | c or f | Prints messages generated during the loading of the STEP file (when the procedure of the integrity of the loaded data check is performed) and the resulting statistics (f works only with fail messages while c with both fail and warning messages) |
8400 | t | The same as c or f, with a list of failed or warned entities |
8401 | m or l | The same as t but also prints a status for each entity | 
8402 | e | Lists all entities of the model with their numbers, types, validity status etc. |
8403 | R | The same as e but lists only root entities |
8404
8405
8406
8407 @subsubsection occt_draw_8_3_3  elabel
8408
8409 Syntax:      
8410 ~~~~~
8411 elabel <num>
8412 ~~~~~
8413
8414 Entities in the IGES and STEP files are numbered in the succeeding order. An entity can be identified either by its number or by its label. Label is the letter ‘#'(for STEP, for IGES use ‘D’) followed by the rank. This command gives us a label for an entity with a known number. 
8415
8416 **Example:**
8417 ~~~~~
8418 elabel 84 
8419 ~~~~~
8420
8421 @subsubsection occt_draw_8_3_4  entity
8422
8423 Syntax:      
8424 ~~~~~
8425 entity <#(D)>_or_<num> <level_of_information>
8426 ~~~~~
8427
8428 The content of an IGES or STEP entity can be obtained by using this command. 
8429 Entity can be determined by its number or label. 
8430 <i>\<level_of_information\></i> has range [0-6]. You can get more information about this level using this command without parameters. 
8431
8432 **Example:**
8433 ~~~~~
8434 # full information for STEP entity with label 84 
8435 entity #84 6 
8436 ~~~~~
8437
8438 @subsubsection occt_draw_8_3_5  enum
8439
8440 Syntax:      
8441 ~~~~~
8442 enum <#(D)> 
8443 ~~~~~
8444
8445 Prints a number for the entity with a given label. 
8446
8447 **Example:**
8448 ~~~~~
8449 # give a number for IGES entity with label 21 
8450 enum D21 
8451 ~~~~~
8452
8453 @subsubsection occt_draw_8_3_6  estatus
8454
8455 Syntax:      
8456 ~~~~~
8457 estatus <#(D)>_or_<num>
8458 ~~~~~
8459
8460 The list of entities referenced by a given entity and the list of entities referencing to it can be obtained by this command. 
8461
8462 **Example:**
8463 ~~~~~
8464 estatus #315 
8465 ~~~~~
8466
8467 @subsubsection occt_draw_8_3_7  fromshape
8468
8469 Syntax:      
8470 ~~~~~
8471 fromshape <shape_name>
8472 ~~~~~
8473
8474 Gives the number of an IGES or STEP entity corresponding to an OCCT shape. If no corresponding entity can be found and if OCCT shape is a compound the command explodes it to subshapes and try to find corresponding entities for them. 
8475
8476 **Example:**
8477 ~~~~~
8478 fromshape a_1_23 
8479 ~~~~~
8480
8481 @subsubsection occt_draw_8_3_8  givecount
8482
8483 Syntax:
8484 ~~~~~
8485 givecount <selection_name> [<selection_name>]
8486 ~~~~~
8487
8488
8489 Prints a number of loaded entities defined by the selection argument.
8490 Possible values of \<selection_name\> you can find in the “IGES FORMAT Users’s Guide”.
8491
8492 **Example:**
8493 ~~~~~
8494 givecount xst-model-roots 
8495 ~~~~~
8496
8497 @subsubsection occt_draw_8_3_9  givelist
8498
8499 Syntax:      
8500 ~~~~~
8501 givelist <selection_name>
8502 ~~~~~
8503
8504 Prints a list of a subset of loaded entities defined by the selection argument: 
8505 | Selection | Description |
8506 | :-------- | :----------- |
8507 | xst-model-all | all entities of the model |
8508 | xst-model-roots | all roots |
8509 | xst-pointed | (Interactively) pointed entities (not used in DRAW) |
8510 | xst-transferrable-all | all transferable (recognized) entities |
8511 | xst-transferrable-roots | Transferable roots | 
8512
8513
8514 **Example:**
8515 ~~~~~
8516 # give a list of all entities of the model 
8517 givelist xst-model-all 
8518 ~~~~~
8519
8520 @subsubsection occt_draw_8_3_10  listcount
8521
8522 Syntax:     listcount \<counter\> [\<selection\> ...]
8523
8524 Prints a list of entities per each type matching the criteria defined by arguments. 
8525 Optional <i>\<selection\></i> argument, if specified, defines a subset of entities, which are to be taken into account. Argument <i>\<counter\></i>  should be one of the currently defined counters: 
8526
8527 | Counter     | Operation |
8528 | :-----      | :------   |
8529 | xst-types   | Calculates how many entities of each OCCT type exist |
8530 | iges-types  | Calculates how many entities of each IGES type and form exist |
8531 | iges-levels | Calculates how many entities lie in different IGES levels |
8532
8533 **Example:**
8534 ~~~~~
8535 listcount xst-types 
8536 ~~~~~
8537
8538 @subsubsection occt_draw_8_3_11  listitems
8539
8540 Syntax:      
8541 ~~~~~
8542 listitems 
8543 ~~~~~
8544
8545 This command prints a list of objects (counters, selections etc.) defined in the current session. 
8546
8547
8548 @subsubsection occt_draw_8_3_12  listtypes
8549
8550 Syntax:      
8551 ~~~~~
8552 listtypes [<selection_name> ...]
8553 ~~~~~
8554
8555 Gives a list of entity types which were encountered in the last loaded file (with a number of entities of each type). The list can be shown not for all entities but for a subset of them. This subset is defined by an optional selection argument. 
8556
8557
8558 @subsubsection occt_draw_8_3_13  newmodel
8559
8560 Syntax:      
8561 ~~~~~
8562 newmodel 
8563 ~~~~~
8564
8565 Clears the current model. 
8566
8567
8568 @subsubsection occt_draw_8_3_14  param
8569
8570 Syntax:      
8571 ~~~~~
8572 param [<parameter>] [<value>]
8573 ~~~~~
8574
8575 This command is used to manage translation parameters. 
8576 Command without arguments gives a full list of parameters with current values. 
8577 Command with <i>\<parameter\></i> (without <i><value></i>) gives us the current value of this parameter and all possible values for it. Command with <i><value></i> sets this new value to <i>\<parameter\></i>.
8578
8579 **Example:**
8580
8581 Let us get the information about possible schemes for writing STEP file :
8582
8583 ~~~~~
8584 param write.step.schema 
8585 ~~~~~
8586
8587 @subsubsection occt_draw_8_3_15  sumcount
8588
8589 Syntax:      
8590 ~~~~~
8591 sumcount <counter> [<selection> ...]
8592 ~~~~~
8593
8594 Prints only a number of entities per each type matching the criteria defined by arguments. 
8595
8596 **Example:**
8597 ~~~~~
8598 sumcount xst-types 
8599 ~~~~~
8600
8601 @subsubsection occt_draw_8_3_16  tpclear
8602
8603 Syntax:      
8604 ~~~~~
8605 tpclear  
8606 ~~~~~
8607
8608 Clears the map of correspondences between IGES or STEP entities and OCCT shapes. 
8609
8610
8611
8612 @subsubsection occt_draw_8_3_17  tpdraw
8613
8614 Syntax:      
8615 ~~~~~
8616 tpdraw <#(D)>_or_<num>
8617 ~~~~~
8618
8619 **Example:**
8620 ~~~~~
8621 tpdraw 57 
8622 ~~~~~
8623
8624 @subsubsection occt_draw_8_3_18  tpent
8625
8626 Syntax:      
8627 ~~~~~
8628 tpent <#(D)>_or_<num>
8629 ~~~~~
8630
8631 Get information about the result of translation of the given IGES or STEP entity.
8632
8633 **Example:**
8634 ~~~~~
8635 tpent \#23 
8636 ~~~~~
8637
8638 @subsubsection occt_draw_8_3_19  tpstat
8639
8640 Syntax:      
8641 ~~~~~
8642 tpstat [*|?]<symbol> [<selection>]
8643 ~~~~~
8644
8645
8646 Provides all statistics on the last transfer, including a list of transferred entities with mapping from IGES or STEP to OCCT types, as well as fail and warning messages. The parameter <i>\<symbol\></i> defines what information will be printed: 
8647
8648 * *g* -- General statistics (a list of results and messages)
8649 * *c* -- Count of all warning and fail messages
8650 * *C* -- List of all warning and fail messages
8651 * *f* -- Count of all fail messages
8652 * *F* -- List of all fail messages
8653 * *n* -- List of all transferred roots
8654 * *s* -- The same, with types of source entity and the type of result
8655 * *b* -- The same, with messages
8656 * *t* -- Count of roots for geometrical types
8657 * *r* -- Count of roots for topological types
8658 * *l* -- The same, with the type of the source entity
8659
8660 The sign \* before parameters *n, s, b, t, r* makes it work on all entities (not only on roots).
8661
8662 The sign ? before *n, s, b, t* limits the scope of information to invalid entities. 
8663
8664 Optional argument \<selection\> can limit the action of the command to the selection, not to all entities. 
8665
8666 To get help, run this command without arguments. 
8667
8668 **Example:**
8669 ~~~~~
8670 # translation ratio on IGES faces 
8671 tpstat *l iges-faces 
8672 ~~~~~
8673
8674 @subsubsection occt_draw_8_3_20  xload
8675
8676 Syntax:      
8677 ~~~~~
8678 xload <file_name>
8679 ~~~~~
8680
8681 This command loads an IGES or STEP file into memory (i.e. to fill the model with data from the file) without creation of an OCCT shape. 
8682
8683 **Example:**
8684 ~~~~~
8685 xload /disk1/tmp/aaa.stp 
8686 ~~~~~
8687
8688
8689 @subsection occt_draw_8_4  Overview of XDE commands 
8690
8691 These commands are used for translation of IGES and STEP files into an XCAF document (special document is inherited from CAF document and is intended for Extended Data Exchange (XDE) ) and working with it. XDE translation allows reading and writing of shapes with additional attributes -- colors, layers etc. All commands can be divided into the following groups: 
8692   * XDE translation commands
8693   * XDE general commands
8694   * XDE shape’s commands
8695   * XDE color’s commands
8696   * XDE layer’s commands
8697   * XDE property’s commands
8698
8699 Reminding: All operations of translation are performed with parameters managed by command @ref occt_draw_8_3_14 "param".
8700
8701 @subsubsection occt_draw_8_4_1  ReadIges
8702
8703 Syntax:      
8704 ~~~~~
8705 ReadIges document file_name 
8706 ~~~~~
8707
8708 Reads information from an IGES file to an XCAF document. 
8709
8710 **Example:**
8711 ~~~~~
8712 ReadIges D /disk1/tmp/aaa.igs 
8713 ==> Document saved with name D 
8714 ~~~~~
8715
8716 @subsubsection occt_draw_8_4_2  ReadStep
8717
8718 Syntax:      
8719 ~~~~~
8720 ReadStep <document> <file_name>
8721 ~~~~~
8722
8723 Reads information from a STEP file to an XCAF document. 
8724
8725 **Example:**
8726 ~~~~~
8727 ReadStep D /disk1/tmp/aaa.stp 
8728 == Document saved with name D 
8729 ~~~~~
8730
8731 @subsubsection occt_draw_8_4_3  WriteIges
8732
8733 Syntax:      
8734 ~~~~~
8735 WriteIges <document> <file_name>
8736 ~~~~~
8737
8738 **Example:**
8739 ~~~~~
8740 WriteIges D /disk1/tmp/aaa.igs 
8741 ~~~~~
8742
8743 @subsubsection occt_draw_8_4_4  WriteStep
8744
8745 Syntax:      
8746 ~~~~~
8747 WriteStep <document> <file_name>
8748 ~~~~~
8749
8750 Writes information from an XCAF document to a STEP file. 
8751
8752 **Example:**
8753 ~~~~~
8754 WriteStep D /disk1/tmp/aaa.stp 
8755 ~~~~~
8756
8757 @subsubsection occt_draw_8_4_5  XFileCur
8758
8759 Syntax:      
8760 ~~~~~
8761 XFileCur  
8762 ~~~~~
8763
8764 Returns the name of file which is set as the current one in the Draw session. 
8765
8766 **Example:**
8767 ~~~~~
8768 XFileCur 
8769 == *as1-ct-203.stp* 
8770 ~~~~~
8771
8772 @subsubsection occt_draw_8_4_6  XFileList
8773
8774 Syntax:      
8775 ~~~~~
8776 XFileList  
8777 ~~~~~
8778
8779 Returns a list all files that were transferred by the last transfer. This command is  meant (assigned) for the assemble step file. 
8780
8781 **Example:**
8782 ~~~~~
8783 XFileList 
8784 ==> *as1-ct-Bolt.stp* 
8785 ==> *as1-ct-L-Bracktet.stp* 
8786 ==> *as1-ct-LBA.stp* 
8787 ==> *as1-ct-NBA.stp* 
8788 ==> … 
8789 ~~~~~
8790
8791 @subsubsection occt_draw_8_4_7  XFileSet
8792
8793 Syntax:      
8794 ~~~~~
8795 XFileSet <filename> 
8796 ~~~~~
8797
8798 Sets the current file taking it from the components list of the assemble file. 
8799
8800 **Example:**
8801 ~~~~~
8802 XFileSet as1-ct-NBA.stp 
8803 ~~~~~
8804
8805 @subsubsection occt_draw_8_4_8  XFromShape
8806
8807 Syntax:      
8808 ~~~~~
8809 XFromShape <shape>
8810 ~~~~~
8811
8812 This command is similar to the command @ref occt_draw_8_3_7 "fromshape", but gives additional information about the file name. It is useful if a shape was translated from several files. 
8813
8814 **Example:**
8815 ~~~~~
8816 XFromShape a 
8817 ==> Shape a: imported from entity 217:#26 in file as1-ct-Nut.stp 
8818 ~~~~~
8819
8820 @subsection occt_draw_8_5  XDE general commands 
8821
8822 @subsubsection occt_draw_8_5_1  XNewDoc
8823
8824 Syntax:      
8825 ~~~~~
8826 XNewDoc <document>
8827 ~~~~~
8828
8829 Creates a new XCAF document. 
8830
8831 **Example:**
8832 ~~~~~
8833 XNewDoc D 
8834 ~~~~~
8835
8836 @subsubsection occt_draw_8_5_2  XShow
8837
8838 Syntax:      
8839 ~~~~~
8840 XShow <document> [ <label1> … ]
8841 ~~~~~
8842
8843 Shows a shape from a given label in the 3D viewer. If the label is not given -- shows all shapes from the document. 
8844
8845 **Example:**
8846 ~~~~~
8847 # show shape from label 0:1:1:4 from document D 
8848 XShow D 0:1:1:4 
8849 ~~~~~
8850
8851 @subsubsection occt_draw_8_5_3  XStat
8852
8853 Syntax:      
8854 ~~~~~
8855 XStat <document>
8856 ~~~~~
8857
8858 Prints common information from an XCAF document. 
8859
8860 **Example:**
8861 ~~~~~
8862 XStat D 
8863 ==>Statistis of shapes in the document: 
8864 ==>level N 0 : 9 
8865 ==>level N 1 : 18 
8866 ==>level N 2 : 5 
8867 ==>Total number of labels for shapes in the document = 32 
8868 ==>Number of labels with name = 27 
8869 ==>Number of labels with color link = 3 
8870 ==Number of labels with layer link = 0 
8871 ==>Statistis of Props in the document: 
8872 ==>Number of Centroid Props = 5 
8873 ==>Number of Volume Props = 5 
8874 ==>Number of Area Props = 5 
8875 ==>Number of colors = 4 
8876 ==>BLUE1 RED YELLOW BLUE2 
8877 ==>Number of layers = 0 
8878 ~~~~~
8879
8880 @subsubsection occt_draw_8_5_4  XWdump
8881
8882 Syntax:      
8883 ~~~~~
8884 XWdump <document> <filename>
8885 ~~~~~
8886
8887 Saves the contents of the viewer window as an image (XWD, png or BMP file). 
8888 <i>\<filename\></i> must have a corresponding extention. 
8889
8890 **Example:**
8891 ~~~~~
8892 XWdump D /disk1/tmp/image.png 
8893 ~~~~~
8894
8895 @subsubsection occt_draw_8_5_5  Xdump
8896
8897 Syntax:      
8898 ~~~~~
8899 Xdump <document> [int deep {0|1}]
8900 ~~~~~
8901
8902 Prints information about the tree structure of the document. If parameter 1 is given, then the tree is printed with a link to shapes. 
8903
8904 **Example:**
8905 ~~~~~
8906 Xdump D 1 
8907 ==> ASSEMBLY 0:1:1:1 L-BRACKET(0xe8180448) 
8908 ==> ASSEMBLY 0:1:1:2 NUT(0xe82151e8) 
8909 ==> ASSEMBLY 0:1:1:3 BOLT(0xe829b000) 
8910 ==> ASSEMBLY 0:1:1:4 PLATE(0xe8387780) 
8911 ==> ASSEMBLY 0:1:1:5 ROD(0xe8475418) 
8912 ==> ASSEMBLY 0:1:1:6 AS1(0xe8476968) 
8913 ==>    ASSEMBLY 0:1:1:7 L-BRACKET-ASSEMBLY(0xe8476230) 
8914 ==>       ASSEMBLY 0:1:1:1 L-BRACKET(0xe8180448) 
8915 ==>       ASSEMBLY 0:1:1:8 NUT-BOLT-ASSEMBLY(0xe8475ec0) 
8916 ==>               ASSEMBLY 0:1:1:2 NUT(0xe82151e8) 
8917 ==>               ASSEMBLY 0:1:1:3 BOLT(0xe829b000) 
8918 etc. 
8919 ~~~~~
8920
8921 @subsection occt_draw_8_6  XDE shape commands 
8922
8923 @subsubsection occt_draw_8_6_1  XAddComponent
8924
8925 Syntax:      
8926 ~~~~~
8927 XAddComponent <document> <label> <shape> 
8928 ~~~~~
8929
8930 Adds a component shape to assembly. 
8931
8932 **Example:**
8933
8934 Let us add shape b as component shape to assembly shape from label *0:1:1:1* 
8935
8936 ~~~~~
8937 XAddComponent D 0:1:1:1 b 
8938 ~~~~~
8939
8940 @subsubsection occt_draw_8_6_2  XAddShape
8941
8942 Syntax:      
8943 ~~~~~
8944 XAddShape <document> <shape> [makeassembly=1]
8945 ~~~~~
8946
8947 Adds a shape (or an assembly) to a document. If this shape already exists in the document, then prints the label which points to it. By default, a new shape is added as an assembly (i.e. last parameter 1), otherwise it is necessary to pass 0 as the last parameter. 
8948
8949 **Example:**
8950 ~~~~~
8951 # add shape b to document D 
8952 XAddShape D b 0 
8953 == 0:1:1:10 
8954 # if pointed shape is compound and last parameter in 
8955 # XAddShape command is used by default (1), then for 
8956 # each subshapes new label is created 
8957 ~~~~~
8958
8959 @subsubsection occt_draw_8_6_3  XFindComponent
8960
8961 Syntax:      
8962 ~~~~~
8963 XFindComponent <document> <shape>
8964 ~~~~~
8965
8966 Prints a sequence of labels of the assembly path. 
8967
8968 **Example:**
8969 ~~~~~
8970 XFindComponent D b 
8971 ~~~~~
8972
8973 @subsubsection occt_draw_8_6_4  XFindShape
8974
8975 Syntax:      
8976 ~~~~~
8977 XFindShape <document> <shape>
8978 ~~~~~
8979
8980 Finds and prints a label with an indicated top-level shape. 
8981
8982 **Example:**
8983 ~~~~~
8984 XFindShape D a 
8985 ~~~~~
8986
8987 @subsubsection occt_draw_8_6_5  XGetFreeShapes
8988
8989 Syntax:      
8990 ~~~~~
8991 XGetFreeShapes <document> [shape_prefix]
8992 ~~~~~
8993
8994 Print labels or create DRAW shapes for all free shapes in the document. 
8995 If *shape_prefix* is absent -- prints labels, else -- creates DRAW shapes with names 
8996 <i>shape_prefix</i>_num (i.e. for example: there are 3 free shapes and *shape_prefix* = a therefore shapes will be created with names a_1, a_2 and a_3). 
8997
8998 **Note**: a free shape is a shape to which no other shape refers to. 
8999
9000 **Example:**
9001 ~~~~~
9002 XGetFreeShapes D 
9003 == 0:1:1:6 0:1:1:10 0:1:1:12 0:1:1:13 
9004
9005 XGetFreeShapes D sh 
9006 == sh_1 sh_2 sh_3 sh_4 
9007 ~~~~~
9008
9009 @subsubsection occt_draw_8_6_6  XGetOneShape
9010
9011 Syntax:      
9012 ~~~~~
9013 XGetOneShape <shape> <document>
9014 ~~~~~
9015
9016 Creates one DRAW shape for all free shapes from a document. 
9017
9018 **Example:**
9019 ~~~~~
9020 XGetOneShape a D 
9021 ~~~~~
9022
9023 @subsubsection occt_draw_8_6_7  XGetReferredShape
9024
9025 Syntax:      
9026 ~~~~~
9027 XGetReferredShape <document> <label>
9028 ~~~~~
9029
9030 Prints a label that contains a top-level shape that corresponds to a shape at a given label. 
9031
9032 **Example:**
9033 ~~~~~
9034 XGetReferredShape D 0:1:1:1:1 
9035 ~~~~~
9036
9037 @subsubsection occt_draw_8_6_8  XGetShape
9038
9039 Syntax:      
9040 ~~~~~
9041 XGetShape <result> <document> <label>
9042 ~~~~~
9043
9044 Puts a shape from the indicated label in document to result. 
9045
9046 **Example:**
9047 ~~~~~
9048 XGetShape b D 0:1:1:3 
9049 ~~~~~
9050
9051 @subsubsection occt_draw_8_6_9  XGetTopLevelShapes
9052
9053 Syntax:      
9054 ~~~~~
9055 XGetTopLevelShapes <document>
9056 ~~~~~
9057
9058 Prints labels that contain top-level shapes. 
9059
9060 **Example:**
9061 ~~~~~
9062 XGetTopLevelShapes D 
9063 == 0:1:1:1 0:1:1:2 0:1:1:3 0:1:1:4 0:1:1:5 0:1:1:6 0:1:1:7 
9064 0:1:1:8 0:1:1:9 
9065 ~~~~~
9066
9067 @subsubsection occt_draw_8_6_10  XLabelInfo
9068
9069 Syntax:      
9070 ~~~~~
9071 XLabelInfo <document> <label>
9072 ~~~~~
9073
9074 Prints information about a shape, stored at an indicated label. 
9075
9076 **Example:** 
9077 ~~~~~    
9078 XLabelInfo D 0:1:1:6 
9079 ==> There are TopLevel shapes. There is an Assembly. This Shape is not used. 
9080 ~~~~~
9081
9082 @subsubsection occt_draw_8_6_11  XNewShape
9083
9084 Syntax:      
9085 ~~~~~
9086 XNewShape <document>
9087 ~~~~~
9088
9089 Creates a new empty top-level shape. 
9090
9091 **Example:**
9092 ~~~~~
9093 XNewShape D 
9094 ~~~~~
9095
9096 @subsubsection occt_draw_8_6_12  XRemoveComponent
9097
9098 Syntax:      
9099 ~~~~~
9100 XRemoveComponent <document> <label>
9101 ~~~~~
9102
9103 Removes a component from the components label. 
9104
9105 **Example:**
9106 ~~~~~
9107 XRemoveComponent D 0:1:1:1:1 
9108 ~~~~~
9109
9110 @subsubsection occt_draw_8_6_13  XRemoveShape
9111
9112 Syntax:      
9113 ~~~~~
9114 XRemoveShape <document> <label>
9115 ~~~~~
9116
9117 Removes a shape from a document (by it’s label). 
9118
9119 **Example:**
9120 ~~~~~
9121 XRemoveShape D 0:1:1:2 
9122 ~~~~~
9123
9124 @subsubsection occt_draw_8_6_14  XSetShape
9125
9126 Syntax:      
9127 ~~~~~
9128 XSetShape <document> <label> <shape>
9129 ~~~~~
9130
9131 Sets a shape at the indicated label. 
9132
9133 **Example:**
9134 ~~~~~
9135 XSetShape D 0:1:1:3 b 
9136 ~~~~~
9137
9138 @subsubsection occt_draw_8_6_15  XUpdateAssemblies
9139
9140 Syntax:      
9141 ~~~~~
9142 XUpdateAssemblies <document>
9143 ~~~~~
9144
9145 Updates all assembly compounds in the XDE document.
9146
9147 **Example:**
9148 ~~~~~
9149 XUpdateAssemblies D
9150 ~~~~~
9151
9152 @subsection occt_draw_8_7_  XDE color commands 
9153
9154 @subsubsection occt_draw_8_7_1  XAddColor
9155
9156 Syntax:      
9157 ~~~~~
9158 XAddColor <document> <R> <G> <B>
9159 ~~~~~
9160
9161 Adds color in document to the color table. Parameters R,G,B are real. 
9162
9163 **Example:**
9164 ~~~~~
9165 XAddColor D 0.5 0.25 0.25 
9166 ~~~~~
9167
9168 @subsubsection occt_draw_8_7_2  XFindColor
9169
9170 Syntax:      
9171 ~~~~~
9172 XFindColor <document> <R> <G> <B>
9173 ~~~~~
9174
9175 Finds a label where the indicated color is situated. 
9176
9177 **Example:**
9178 ~~~~~
9179 XFindColor D 0.25 0.25 0.5 
9180 ==> 0:1:2:2 
9181 ~~~~~
9182
9183 @subsubsection occt_draw_8_7_3  XGetAllColors
9184
9185 Syntax:      
9186 ~~~~~
9187 XGetAllColors <document> 
9188 ~~~~~
9189
9190 Prints all colors that are defined in the document. 
9191
9192 **Example:**
9193 ~~~~~
9194 XGetAllColors D 
9195 ==> RED DARKORANGE BLUE1 GREEN YELLOW3 
9196 ~~~~~
9197
9198 @subsubsection occt_draw_8_7_4  XGetColor
9199
9200 Syntax:      
9201 ~~~~~
9202 XGetColor <document> <label>
9203 ~~~~~
9204
9205 Returns a color defined at the indicated label from the color table. 
9206
9207 **Example:**
9208 ~~~~~
9209 XGetColor D 0:1:2:3 
9210 == BLUE1 
9211 ~~~~~
9212
9213 @subsubsection occt_draw_8_7_5  XGetObjVisibility
9214
9215 Syntax:      
9216 ~~~~~
9217 XGetObjVisibility <document> {<label>|<shape>}
9218 ~~~~~
9219
9220 Returns the visibility of a shape. 
9221
9222 **Example:**
9223 ~~~~~
9224 XGetObjVisibility D 0:1:1:4 
9225 ~~~~~
9226
9227 @subsubsection occt_draw_8_7_6  XGetShapeColor
9228
9229 Syntax:      
9230 ~~~~~
9231 XGetShapeColor <document> <label> <colortype(s|c)>
9232 ~~~~~
9233
9234 Returns the color defined by label. If <i>colortype</i>=’s’ -- returns surface color, else -- returns curve color. 
9235
9236 **Example:**
9237 ~~~~~
9238 XGetShapeColor D 0:1:1:4 c 
9239 ~~~~~
9240
9241 @subsubsection occt_draw_8_7_7  XRemoveColor
9242
9243 Syntax:      
9244 ~~~~~
9245 XRemoveColor <document> <label>
9246 ~~~~~
9247
9248 Removes a color from the color table in a document. 
9249
9250 **Example:**
9251 ~~~~~
9252 XRemoveColor D 0:1:2:1 
9253 ~~~~~
9254
9255 @subsubsection occt_draw_8_7_8  XSetColor
9256
9257 Syntax:      
9258 ~~~~~
9259 XSetColor <document> {<label>|<shape>} <R> <G> <B>
9260 ~~~~~
9261
9262 Sets an RGB color to a shape given by label. 
9263
9264 **Example:**
9265 ~~~~~
9266 XsetColor D 0:1:1:4 0.5 0.5 0. 
9267 ~~~~~
9268
9269 @subsubsection occt_draw_8_7_9  XSetObjVisibility
9270
9271 Syntax:      
9272 ~~~~~
9273 XSetObjVisibility <document> {<label>|<shape>} {0|1}
9274 ~~~~~
9275
9276 Sets the visibility of a shape. 
9277
9278 **Example:**
9279 ~~~~~
9280 # set shape from label 0:1:1:4 as invisible 
9281 XSetObjVisibility D 0:1:1:4 0 
9282 ~~~~~
9283
9284 @subsubsection occt_draw_8_7_10  XUnsetColor
9285
9286 Syntax:      
9287 ~~~~~
9288 XUnsetColor <document> {<label>|<shape>} <colortype>
9289 ~~~~~
9290
9291 Unset a color given type (‘s’ or ‘c’) for the indicated shape. 
9292
9293 **Example:**
9294 ~~~~~
9295 XUnsetColor D 0:1:1:4 s 
9296 ~~~~~
9297
9298
9299 @subsection occt_draw_8_8_  XDE layer commands 
9300
9301 @subsubsection occt_draw_8_8_1  XAddLayer
9302
9303 Syntax:      
9304 ~~~~~
9305 XAddLayer <document> <layer>
9306 ~~~~~
9307
9308 Adds a new layer in an XCAF document. 
9309
9310 **Example:**
9311 ~~~~~
9312 XAddLayer D layer2 
9313 ~~~~~
9314
9315 @subsubsection occt_draw_8_8_2  XFindLayer
9316
9317 Syntax:      
9318 ~~~~~
9319 XFindLayer <document> <layer>
9320 ~~~~~
9321
9322 Prints a label where a layer is situated. 
9323
9324 **Example:**
9325 ~~~~~
9326 XFindLayer D Bolt 
9327 == 0:1:3:2 
9328 ~~~~~
9329
9330 @subsubsection occt_draw_8_8_3  XGetAllLayers
9331
9332 Syntax:      
9333 ~~~~~
9334 XGetAllLayers <document> 
9335 ~~~~~
9336
9337 Prints all layers in an XCAF document. 
9338
9339 **Example:**
9340 ~~~~~
9341 XGetAllLayers D 
9342 == *0:1:1:3* *Bolt* *0:1:1:9* 
9343 ~~~~~
9344
9345 @subsubsection occt_draw_8_8_4  XGetLayers
9346
9347 Syntax:      
9348 ~~~~~
9349 XGetLayers <document> {<shape>|<label>}
9350 ~~~~~
9351
9352 Returns names of layers, which are pointed to by links of an indicated shape. 
9353
9354 **Example:**
9355 ~~~~~
9356 XGetLayers D 0:1:1:3 
9357 == *bolt* *123* 
9358 ~~~~~
9359
9360 @subsubsection occt_draw_8_8_5  XGetOneLayer
9361
9362 Syntax:      
9363 ~~~~~
9364 XGetOneLayer <document> <label>
9365 ~~~~~
9366
9367 Prints the name of a layer at a given label. 
9368
9369 **Example:**
9370 ~~~~~
9371 XGetOneLayer D 0:1:3:2 
9372 ~~~~~
9373
9374 @subsubsection occt_draw_8_8_6  XIsVisible
9375
9376 Syntax:      
9377 ~~~~~
9378 XIsVisible <document> {<label>|<layer>}
9379 ~~~~~
9380
9381 Returns 1 if the indicated layer is visible, else returns 0. 
9382
9383 **Example:**
9384 ~~~~~
9385 XIsVisible D 0:1:3:1 
9386 ~~~~~
9387
9388 @subsubsection occt_draw_8_8_7  XRemoveAllLayers
9389
9390 Syntax:      
9391 ~~~~~
9392 XRemoveAllLayers <document> 
9393 ~~~~~
9394
9395 Removes all layers from an XCAF document. 
9396
9397 **Example:**
9398 ~~~~~
9399 XRemoveAllLayers D 
9400 ~~~~~
9401
9402 @subsubsection occt_draw_8_8_8  XRemoveLayer
9403
9404 Syntax:      
9405 ~~~~~
9406 XRemoveLayer <document> {<label>|<layer>}
9407 ~~~~~
9408
9409 Removes the indicated layer from an XCAF document. 
9410
9411 **Example:**
9412 ~~~~~
9413 XRemoveLayer D layer2 
9414 ~~~~~
9415
9416 @subsubsection occt_draw_8_8_9  XSetLayer
9417
9418 Syntax:      
9419 ~~~~~
9420 XSetLayer XSetLayer <document> {<shape>|<label>} <layer> [shape_in_one_layer {0|1}]
9421
9422 ~~~~~
9423  
9424 Sets a reference between a shape and a layer (adds a layer if it is necessary). 
9425 Parameter <i>\<shape_in_one_layer\></i> shows whether a shape could be in a number of layers or only in one (0 by default). 
9426
9427 **Example:**
9428 ~~~~~
9429 XSetLayer D 0:1:1:2 layer2 
9430 ~~~~~
9431
9432 @subsubsection occt_draw_8_8_10  XSetVisibility
9433
9434 Syntax:      
9435 ~~~~~
9436 XSetVisibility <document> {<label>|<layer>} <isvisible {0|1}>
9437 ~~~~~
9438
9439 Sets the visibility of a layer. 
9440
9441 **Example:**
9442 ~~~~~
9443 # set layer at label 0:1:3:2 as invisible 
9444 XSetVisibility D 0:1:3:2 0 
9445 ~~~~~
9446
9447 @subsubsection occt_draw_8_8_11  XUnSetAllLayers
9448
9449 Syntax:      
9450 ~~~~~
9451 XUnSetAllLayers <document> {<label>|<shape>}
9452 ~~~~~
9453
9454 Unsets a shape from all layers. 
9455
9456 **Example:**
9457 ~~~~~
9458 XUnSetAllLayers D 0:1:1:2 
9459 ~~~~~
9460
9461 @subsubsection occt_draw_8_8_12  XUnSetLayer
9462
9463 Syntax:      
9464 ~~~~~
9465 XUnSetLayer <document> {<label>|<shape>} <layer>
9466 ~~~~~
9467
9468 Unsets a shape from the indicated layer. 
9469
9470 **Example:**
9471 ~~~~~
9472 XUnSetLayer D 0:1:1:2 layer1 
9473 ~~~~~
9474
9475 @subsection occt_draw_8_9  XDE property commands 
9476
9477 @subsubsection occt_draw_8_9_1  XCheckProps
9478
9479 Syntax:      
9480 ~~~~~
9481 XCheckProps <document> [ {0|deflection} [<shape>|<label>] ]
9482 ~~~~~
9483
9484 Gets properties for a given shape (*volume*, *area* and <i>centroid</i>) and compares them with the results after internal calculations. If the second parameter is 0, the standard OCCT tool is used for the computation of properties. If the second parameter is not 0, it is processed as a deflection. If the deflection is positive the computation is done by triangulations, if it is negative -- meshing is forced. 
9485
9486 **Example:**
9487 ~~~~~
9488 # check properties for shapes at label 0:1:1:1 from 
9489 # document using standard Open CASCADE Technology tools 
9490 XCheckProps D 0 0:1:1:1 
9491 == Label 0:1:1:1      ;L-BRACKET* 
9492 ==  Area defect:        -0.0 (  0%) 
9493 ==  Volume defect:       0.0 (  0%) 
9494 ==  CG defect: dX=-0.000, dY=0.000, dZ=0.000 
9495 ~~~~~
9496
9497 @subsubsection occt_draw_8_9_2  XGetArea
9498
9499 Syntax:      
9500 ~~~~~
9501 XGetArea <document> {<shape>|<label>}
9502 ~~~~~
9503
9504 Returns the area of a given shape. 
9505
9506 **Example:**
9507 ~~~~~
9508 XGetArea D 0:1:1:1 
9509 == 24628.31815094999 
9510 ~~~~~
9511
9512 @subsubsection occt_draw_8_9_3  XGetCentroid
9513
9514 Syntax:      
9515 ~~~~~
9516 XGetCentroid <document> {<shape>|<label>}
9517 ~~~~~
9518
9519 Returns the center of gravity coordinates of a given shape. 
9520
9521 **Example:**
9522 ~~~~~
9523 XGetCentroid D 0:1:1:1 
9524 ~~~~~
9525
9526 @subsubsection occt_draw_8_9_4  XGetVolume
9527
9528 Syntax:      
9529 ~~~~~
9530 XGetVolume <document> {<shape>|<label>}
9531 ~~~~~
9532
9533 Returns the volume of a given shape. 
9534
9535 **Example:**
9536 ~~~~~
9537 XGetVolume D 0:1:1:1 
9538 ~~~~~
9539
9540 @subsubsection occt_draw_8_9_5  XSetArea
9541
9542 Syntax:      
9543 ~~~~~
9544 XSetArea <document> {<shape>|<label>} <area>
9545 ~~~~~
9546
9547 Sets new area to attribute list ??? given shape. 
9548
9549 **Example:**
9550 ~~~~~
9551 XSetArea D 0:1:1:1 2233.99 
9552 ~~~~~
9553
9554 @subsubsection occt_draw_8_9_6  XSetCentroid
9555
9556 Syntax:      
9557 ~~~~~
9558 XSetCentroid <document> {<shape>|<label>} <x> <y> <z>
9559 ~~~~~
9560
9561 Sets new center of gravity  to the attribute list given shape. 
9562
9563 **Example:**
9564 ~~~~~
9565 XSetCentroid D 0:1:1:1 0. 0. 100. 
9566 ~~~~~
9567
9568 @subsubsection occt_draw_8_9_7  XSetMaterial
9569
9570 Syntax:      
9571 ~~~~~
9572 XSetMaterial <document> {<shape>|<label>} <name> <density(g/cu sm)>
9573 ~~~~~ 
9574
9575 Adds a new label with material into the material table in a document, and adds a link to this material to the attribute list of a given shape or a given label. The last parameter sets the density of a pointed material. 
9576
9577 **Example:**
9578 ~~~~~
9579 XSetMaterial D 0:1:1:1 Titanium 8899.77 
9580 ~~~~~
9581
9582 @subsubsection occt_draw_8_9_8  XSetVolume
9583
9584 Syntax:      
9585 ~~~~~
9586 XSetVolume <document> {<shape>|<label>} <volume>
9587 ~~~~~
9588
9589 Sets new volume to the attribute list ??? given shape. 
9590
9591 **Example:**
9592 ~~~~~
9593 XSetVolume D 0:1:1:1 444555.33 
9594 ~~~~~
9595
9596 @subsubsection occt_draw_8_9_9  XShapeMassProps
9597
9598 Syntax:      
9599 ~~~~~
9600 XShapeMassProps <document> [ <deflection> [{<shape>|<label>}] ]
9601 ~~~~~
9602
9603 Computes and returns real mass and real center of gravity for a given shape or for all shapes in a document. The second parameter is used for calculation of the volume and CG(center of gravity). If it is 0, then the standard CASCADE tool (geometry) is used for computation, otherwise -- by triangulations with a given deflection. 
9604
9605 **Example:**
9606 ~~~~~
9607 XShapeMassProps D 
9608 == Shape from label : 0:1:1:1 
9609 == Mass = 193.71681469282299 
9610 == CenterOfGravity X = 14.594564763807696,Y = 
9611     20.20271885211281,Z = 49.999999385313245 
9612 == Shape from label : 0:1:1:2 not have a mass 
9613 etc. 
9614 ~~~~~
9615
9616 @subsubsection occt_draw_8_9_10  XShapeVolume
9617
9618 Syntax:      
9619 ~~~~~
9620 XShapeVolume <shape> <deflection>
9621 ~~~~~
9622
9623 Calculates the real volume of a pointed shape with a given deflection. 
9624
9625 **Example:**
9626 ~~~~~
9627 XShapeVolume a 0 
9628 ~~~~~
9629
9630 @section occt_draw_9 Shape Healing commands
9631
9632
9633
9634 @subsection occt_draw_9_1 General commands 
9635
9636 @subsubsection occt_draw_9_1_1 bsplres
9637
9638 Syntax:      
9639 ~~~~~
9640 bsplres <result> <shape> <tol3d> <tol2d< <reqdegree> <reqnbsegments> <continuity3d> <continuity2d> <PriorDeg> <RationalConvert>
9641 ~~~~~
9642
9643 Performs approximations of a given shape (BSpline curves and surfaces or other surfaces) to BSpline with given required parameters. The specified continuity can be reduced if the approximation with a specified continuity was not done successfully. Results are put into the shape, which is given as a parameter result. For a more detailed description see the ShapeHealing User’s Guide (operator: **BSplineRestriction**). 
9644
9645 @subsubsection occt_draw_9_1_2 checkfclass2d
9646
9647 Syntax:      
9648 ~~~~~
9649 checkfclass2d <face> <ucoord> <vcoord>
9650 ~~~~~
9651
9652 Shows where a point which is given by coordinates is located in relation to a given face -- outbound, inside or at the bounds. 
9653
9654 **Example:**
9655 ~~~~~
9656 checkfclass2d f 10.5 1.1 
9657 == Point is OUT 
9658 ~~~~~
9659
9660 @subsubsection occt_draw_9_1_3 checkoverlapedges
9661
9662 Syntax:      
9663 ~~~~~
9664 checkoverlapedges <edge1> <edge2> [<toler> <domaindist>]
9665 ~~~~~
9666
9667 Checks the overlapping of two given edges. If the distance between two edges is less than the given value of tolerance then edges are overlapped. Parameter \<domaindist\> sets length of part of edges on which edges are overlapped. 
9668
9669 **Example:**
9670 ~~~~~
9671 checkoverlapedges e1 e2 
9672 ~~~~~
9673
9674 @subsubsection occt_draw_9_1_4 comtol
9675
9676 Syntax:      
9677 ~~~~~
9678 comptol <shape> [nbpoints] [prefix]
9679 ~~~~~
9680
9681 Compares the real value of tolerance on curves with the value calculated by standard (using 23 points). The maximal value of deviation of 3d curve from pcurve at given simple points is taken as a real value (371 is by default). Command returns the maximal, minimal and average value of tolerance for all edges and difference between real values and set values. Edges with the maximal value of tolerance and relation will be saved if the ‘prefix’ parameter is given. 
9682
9683 **Example:** 
9684 ~~~~~    
9685 comptol h 871 t 
9686
9687 ==> Edges tolerance computed by 871 points: 
9688 ==> MAX=8.0001130696523449e-008 AVG=6.349346868091096e-009 MIN=0 
9689 ==> Relation real tolerance / tolerance set in edge 
9690 ==> MAX=0.80001130696523448 AVG=0.06349345591805905 MIN=0 
9691 ==> Edge with max tolerance saved to t_edge_tol 
9692 ==> Concerned faces saved to shapes t_1, t_2 
9693 ~~~~~
9694
9695 @subsubsection occt_draw_9_1_5 convtorevol
9696
9697 Syntax:      
9698 ~~~~~
9699 convtorevol <result> <shape>
9700 ~~~~~
9701
9702 Converts all elementary surfaces of a given shape into surfaces of revolution. 
9703 Results are put into the shape, which is given as the <i>\<result\></i> parameter. 
9704
9705 **Example:**
9706 ~~~~~
9707 convtorevol r a 
9708 ~~~~~
9709
9710 @subsubsection occt_draw_9_1_6 directfaces
9711
9712 Syntax:      
9713 ~~~~~
9714 directfaces <result> <shape>
9715 ~~~~~
9716
9717 Converts indirect surfaces and returns the results into the shape, which is given as the result parameter. 
9718
9719 **Example:**
9720 ~~~~~
9721 directfaces r a 
9722 ~~~~~
9723
9724 @subsubsection occt_draw_9_1_7 expshape
9725
9726 Syntax:   
9727 ~~~~~
9728 expshape <shape> <maxdegree> <maxseg>
9729 ~~~~~
9730
9731 Gives statistics for a given shape. This test command is working with Bezier and BSpline entities. 
9732
9733 **Example:**
9734 ~~~~~
9735 expshape a 10 10 
9736 ==> Number of Rational Bspline curves 128 
9737 ==> Number of Rational Bspline pcurves 48 
9738 ~~~~~
9739
9740 @subsubsection occt_draw_9_1_8 fixsmall
9741
9742 Syntax:      
9743 ~~~~~
9744 fixsmall <result> <shape> [<toler>=1.]
9745 ~~~~~
9746
9747 Fixes small edges in given shape by merging adjacent edges with agiven tolerance. Results are put into the shape, which is given as the result parameter. 
9748
9749 **Example:**
9750 ~~~~~
9751 fixsmall r a 0.1 
9752 ~~~~~
9753
9754 @subsubsection occt_draw_9_1_9 fixsmalledges
9755
9756 Syntax:      
9757 ~~~~~
9758 fixsmalledges <result> <shape> [<toler> <mode> <maxangle>]
9759 ~~~~~
9760
9761 Searches at least one small edge at a given shape. If such edges have been found, then small edges are merged with a given tolerance. If parameter <i>\<mode\></i> is equal to *Standard_True* (can be given any values, except 2), then  small edges, which can not be merged, are removed, otherwise they are to be kept (*Standard_False* is used by default). Parameter <i>\<maxangle\></i> sets a maximum possible angle for merging two adjacent edges, by default no limit angle is applied (-1). Results are put into the shape, which is given as parameter result. 
9762
9763 **Example:**
9764 ~~~~~
9765 fixsmalledges r a 0.1 1 
9766 ~~~~~
9767
9768 @subsubsection occt_draw_9_1_10 fixshape
9769
9770 Syntax:      
9771 ~~~~~
9772 fixshape <result> <shape> [<preci> [<maxpreci>]] [{switches}]
9773 ~~~~~
9774
9775 Performs fixes of all sub-shapes (such as *Solids*, *Shells*, *Faces*, *Wires* and *Edges*) of a given shape. Parameter <i>\<preci\></i> sets a basic precision value, <i>\<maxpreci\></i> sets the maximal allowed tolerance. Results are put into the shape, which is given as parameter result. <b>{switches}</b> allows to tune parameters of ShapeFix 
9776
9777 The following syntax is used: 
9778 * <i>\<symbol\></i> may be
9779   * "-" to set parameter off, 
9780   * "+" to set on or  
9781   * "*" to set default 
9782 * <i>\<parameter\></i> is identified by  letters: 
9783   * l -- FixLackingMode 
9784   * o -- FixOrientationMode 
9785   * h -- FixShiftedMode 
9786   * m -- FixMissingSeamMode 
9787   * d -- FixDegeneratedMode 
9788   * s -- FixSmallMode 
9789   * i -- FixSelfIntersectionMode 
9790   * n -- FixNotchedEdgesMode 
9791 For enhanced message output, use switch '+?' 
9792
9793 **Example:**
9794 ~~~~~
9795 fixshape r a 0.001 
9796 ~~~~~
9797
9798 @subsubsection occt_draw_9_1_11 fixwgaps
9799
9800 Syntax:      
9801 ~~~~~
9802 fixwgaps <result> <shape> [<toler>=0]
9803 ~~~~~
9804
9805 Fixes gaps between ends of curves of adjacent edges (both 3d and pcurves) in wires in a given shape with a given tolerance. Results are put into the shape, which is given as parameter result. 
9806
9807 **Example:**
9808 ~~~~~
9809 fixwgaps r a 
9810 ~~~~~
9811
9812 @subsubsection occt_draw_9_1_12 offsetcurve, offset2dcurve
9813
9814 Syntax:      
9815 ~~~~~
9816 offsetcurve <result> <curve> <offset> <direction(as point)>
9817 offset2dcurve <result> <curve> <offset>
9818 ~~~~~
9819
9820 **offsetcurve** works with the curve in 3d space, **offset2dcurve** in 2d space. 
9821
9822 Both commands are intended to create a new offset curve by copying the given curve to distance, given by parameter <i>\<offset\></i>. Parameter <i>\<direction\></i> defines direction of the offset curve. It is created as a point. For correct work of these commands the direction of normal of the offset curve must be perpendicular to the plane, the basis curve is located there. Results are put into the curve, which is given as parameter <i>\<result\></i>.  
9823
9824 **Example:**
9825 ~~~~~
9826 point pp 10 10 10 
9827 offsetcurve r c 20 pp 
9828 ~~~~~
9829
9830 @subsubsection occt_draw_9_1_13 projcurve
9831
9832 Syntax:      
9833 ~~~~~
9834 projcurve <edge>|<curve3d>|<curve3d first last>  <X> <Y> <Z>
9835 ~~~~~
9836
9837 **projcurve** returns the projection of a given point on a given curve. The curve may be defined by three ways: by giving the edge name, giving the 3D curve and by giving the unlimited curve and limiting it by pointing its start and finish values. 
9838
9839 **Example:** 
9840 ~~~~~    
9841 projcurve k_1 0 1 5 
9842 ==Edge k_1 Params from 0 to 1.3 
9843 ==Precision (BRepBuilderAPI) : 9.9999999999999995e-008  ==Projection : 0  1  5 
9844 ==Result : 0  1.1000000000000001  0 
9845 ==Param = -0.20000000000000001  Gap = 5.0009999000199947 
9846 ~~~~~
9847
9848 @subsubsection occt_draw_9_1_14 projpcurve
9849
9850 Syntax:      
9851 ~~~~~
9852 projpcurve <edge> <face>  <Tol> <X> <Y> <Z> [<start_param>]
9853 ~~~~~
9854
9855 **projpcurve** returns the projection of a given point on a given curve on surface. The curve on surface is defined by giving the edge and face names. Edge must have curve 2D repesentation on the face. Optional parameter <i>\<start_param\></i> is any parameter of pcurve, which is used by algoritm as start point for searching projection of given point with help of local Extrema algorithm. If this parameter is not set, algorithm uses whole parametric interval of pcurve for searching projection.   
9856
9857 **Example:** 
9858 ~~~~~ 
9859 ##Using global searching   
9860 projpcurve f_1 f 1.e-7 0.877 0 0.479
9861 ==Point: 0.87762772831890712 0 0.47934285275342808
9862 ==Param: 0.49990578239977856
9863 ==Dist: 0.0007152557954264938
9864 ~~~~~
9865 ##Using starting parameter on edge
9866 projpcurve f_1 f 1.e-7 0.877 0 0.479 .6
9867 ==Point: 0.87762772831890712 0 0.47934285275342808
9868 ==Param: 0.49990578239977856
9869 ==Dist: 0.0007152557954264938
9870 ~~~~~
9871
9872 @subsubsection occt_draw_9_1_15 projface
9873
9874 Syntax:      
9875 ~~~~~
9876 projface <face> <X> <Y> [<Z>]
9877 ~~~~~
9878
9879 Returns the projection of a given point to a given face in 2d or 3d space. If two coordinates (2d space) are given then returns coordinates projection of this point in 3d space and vice versa. 
9880
9881 **Example:**
9882 ~~~~~
9883 projface a_1 10.0 0.0 
9884 ==  Point UV  U = 10  V = 0 
9885 ==   =   proj  X = -116  Y = -45  Z = 0 
9886 ~~~~~
9887
9888 @subsubsection occt_draw_9_1_16 scaleshape
9889
9890 Syntax:   
9891 ~~~~~
9892 scaleshape <result> <shape> <scale>
9893 ~~~~~
9894
9895 Returns a new shape, which is the result of scaling of a given shape with a coefficient equal to the parameter <i>\<scale\></i>. Tolerance is calculated for the  new shape as well.
9896
9897 **Example:**
9898 ~~~~~
9899 scaleshape r a_1 0.8 
9900 ~~~~~
9901
9902 @subsubsection occt_draw_9_1_17 settolerance
9903
9904 Syntax:      
9905 ~~~~~
9906 settolerance <shape> [<mode>=v-e-w-f-a] <val>(fix value) or
9907                    <tolmin> <tolmax>
9908 ~~~~~ 
9909
9910 Sets new values of tolerance for a given shape. If the second parameter <i>mode</i> is given, then the tolerance value is set only for these sub shapes. 
9911
9912 **Example:**
9913 ~~~~~
9914 settolerance a 0.001 
9915 ~~~~~
9916
9917 @subsubsection occt_draw_9_1_18 splitface
9918
9919 Syntax:      
9920 ~~~~~
9921 splitface <result> <face> [u usplit1 usplit2...] [v vsplit1 vsplit2 ...]
9922 ~~~~~
9923
9924 Splits a given face in parametric space and puts the result into the given parameter <i>\<result\></i>. 
9925 Returns the status of split face. 
9926
9927 **Example:**
9928 ~~~~~
9929 # split face f by parameter u = 5 
9930 splitface r f u 5 
9931 ==> Splitting by   U:   ,5 
9932 ==> Status:  DONE1 
9933 ~~~~~
9934
9935 @subsubsection occt_draw_9_1_19 statshape
9936
9937 Syntax:      
9938 ~~~~~
9939 statshape <shape> [particul]
9940 ~~~~~
9941
9942 Returns the number of sub-shapes, which compose the given shape. For example, the number of solids, number of faces etc.  It also returns the number of geometrical objects or sub-shapes with a specified type, example, number of free faces, number of C0 
9943 surfaces. The last parameter becomes out of date. 
9944
9945 **Example:**
9946 ~~~~~
9947 statshape a 
9948 ==> Count     Item 
9949 ==> -----     ---- 
9950 ==> 402     Edge (oriented) 
9951 ==> 402     Edge (Shared) 
9952 ==> 74      Face 
9953 ==> 74      Face (Free) 
9954 ==> 804     Vertex (Oriented) 
9955 ==> 402     Vertex (Shared) 
9956 ==> 78      Wire 
9957 ==> 4      Face with more than one wire 
9958 ==> 34     bspsur: BSplineSurface 
9959 ~~~~~
9960
9961 @subsubsection occt_draw_9_1_20 tolerance
9962
9963 Syntax:
9964 ~~~~~
9965 tolerance <shape> [<mode>:D v e f c] [<tolmin> <tolmax>:real]
9966 ~~~~~
9967
9968 Returns tolerance (maximal, avg and minimal values)  of all given shapes and tolerance of their *Faces*, *Edges* and *Vertices*. If parameter <i>\<tolmin\></i> or <i>\<tolmax\></i> or both of them are given, then sub-shapes are returned as a result of analys of this shape, which satisfy the given tolerances. If a particular value of entity ((**D**)all shapes  (**v**) *vertices* (**e**) *edges* (**f**) *faces* (**c**) *combined* (*faces*)) is given as the second parameter then only this group will be analyzed for tolerance. 
9969
9970 **Example:**
9971 ~~~~~
9972 tolerance a 
9973 ==> Tolerance MAX=0.31512672416608001 AVG=0.14901359484722074 MIN=9.9999999999999995e-08 
9974 ==> FACE    : MAX=9.9999999999999995e-08 AVG=9.9999999999999995e-08 MIN=9.9999999999999995e-08 
9975 ==> EDGE    : MAX=0.31512672416608001 AVG=0.098691334511810405 MIN=9.9999999999999995e-08 
9976 ==> VERTEX  : MAX=0.31512672416608001 AVG=0.189076074499648 MIN=9.9999999999999995e-08 
9977
9978 tolerance a v 0.1 0.001 
9979 ==>  Analysing Vertices gives 6 Shapes between tol1=0.10000000000000001 and tol2=0.001 , named tol_1 to tol_6 
9980 ~~~~~
9981
9982
9983 @subsection occt_draw_9_2 Conversion commands 
9984
9985 @subsubsection occt_draw_9_2_1 DT_ClosedSplit
9986
9987 Syntax:      
9988 ~~~~~
9989 DT_ClosedSplit <result> <shape>
9990 ~~~~~
9991
9992 Divides all closed faces in the shape (for example cone) and returns result of given shape into shape, which is given as parameter result. Number of faces in resulting shapes will be increased. 
9993 Note: A closed face is a face with one or more seam. 
9994
9995 **Example:**
9996 ~~~~~
9997 DT_ClosetSplit r a 
9998 ~~~~~
9999
10000 @subsubsection occt_draw_9_2_2 DT_ShapeConvert, DT_ShapeConvertRev
10001
10002 Syntax:      
10003 ~~~~~
10004 DT_ShapeConvert <result> <shape> <convert2d> <convert3d>
10005 DT_ShapeConvertRev <result> <shape> <convert2d> <convert3d>
10006 ~~~~~
10007  
10008 Both commands are intended for the conversion of 3D, 2D curves to Bezier curves and surfaces to Bezier based surfaces. Parameters convert2d and convert3d take on a value 0 or 1. If the given value is 1, then the conversion will be performed, otherwise it will not be performed. The results are put into the shape, which is given as parameter Result. Command *DT_ShapeConvertRev* differs from *DT_ShapeConvert* by converting all elementary surfaces into surfaces of revolution first. 
10009
10010 **Example:**
10011 ~~~~~
10012 DT_ShapeConvert r a 1 1 
10013 == Status: DONE1 
10014 ~~~~~
10015
10016 @subsubsection occt_draw_9_2_3 DT_ShapeDivide
10017
10018 Syntax:      
10019 ~~~~~
10020 DT_ShapeDivide <result> <shape> <tol>
10021 ~~~~~
10022
10023 Divides the shape with C1 criterion and returns the result of geometry conversion of a given shape into the shape, which is given as parameter result. This command illustrates how class *ShapeUpgrade_ShapeDivideContinuity* works. This class allows to convert geometry with a continuity less than the specified continuity to geometry with target continuity. If conversion is not possible then the geometrical object is split into several ones, which satisfy the given tolerance. It also returns the  status shape splitting: 
10024  * OK      : no splitting was done 
10025  * Done1 : Some edges were split 
10026  * Done2 : Surface was split 
10027  * Fail1    : Some errors occurred 
10028
10029 **Example:**
10030 ~~~~~
10031 DT_ShapeDivide r a 0.001 
10032 == Status: OK 
10033 ~~~~~
10034
10035 @subsubsection occt_draw_9_2_4 DT_SplitAngle
10036
10037 Syntax:      
10038 ~~~~~
10039 DT_SplitAngle <result> <shape> [MaxAngle=95]
10040 ~~~~~
10041
10042 Works with all revolved surfaces, like cylinders, surfaces of revolution, etc. This command divides given revolved surfaces into segments so that each resulting segment covers not more than the given *MaxAngle* degrees and puts the result of splitting into the shape, which is given as parameter result. Values of returned status are given above. 
10043 This command illustrates how class *ShapeUpgrade_ShapeDivideAngle* works. 
10044
10045 **Example:**
10046 ~~~~~
10047 DT_SplitAngle r a 
10048 == Status: DONE2 
10049 ~~~~~
10050
10051 @subsubsection occt_draw_9_2_5 DT_SplitCurve
10052
10053 Syntax:      
10054 ~~~~~
10055 DT_SplitCurve <curve> <tol> <split(0|1)>
10056 ~~~~~
10057
10058 Divides the 3d curve with C1 criterion and returns the result of splitting of the given curve into a new curve. If the curve had been divided by segments, then each segment is put to an individual result.  This command can correct a given curve at a knot with the given tolerance, if it is impossible, then the given surface is split at that knot. If the last parameter is 1, then 5 knots are added at the given curve, and its surface is split by segments, but this will be performed not for all parametric spaces. 
10059
10060 **Example:**
10061 ~~~~~
10062 DT_SplitCurve r c 
10063 ~~~~~
10064
10065 @subsubsection occt_draw_9_2_6 DT_SplitCurve2d
10066
10067 Syntax:      
10068 ~~~~~
10069 DT_SplitCurve2d Curve Tol Split(0/1) 
10070 ~~~~~
10071
10072 Works just as **DT_SplitCurve** (see above), only with 2d curve. 
10073
10074 **Example:**
10075 ~~~~~
10076 DT_SplitCurve2d r c 
10077 ~~~~~
10078
10079 @subsubsection occt_draw_9_2_7 DT_SplitSurface
10080
10081 Syntax:      
10082 ~~~~~
10083 DT_SplitSurface <result> <Surface|GridSurf> <tol> <split(0|1)>
10084 ~~~~~
10085
10086 Divides surface with C1 criterion and returns the result of splitting of a given surface into surface, which is given as parameter result. If the surface has been divided into segments, then each segment is put to an individual result.  This command can correct a given C0 surface at a knot with a given tolerance, if it is impossible, then the given surface is split at that knot. If the last parameter is 1, then 5 knots are added to the given surface, and its surface is split by segments, but this will be performed not for all parametric spaces. 
10087
10088 **Example:** 
10089 ~~~~~
10090
10091 ~~~~~
10092 # split surface with name "su"
10093 DT_SplitSurface res su 0.1 1 
10094 ==> single surf 
10095 ==> appel a SplitSurface::Init 
10096 ==> appel a SplitSurface::Build 
10097 ==> appel a SplitSurface::GlobalU/VKnots 
10098 ==> nb GlobalU;nb GlobalV=7 2 0 1 2 3 4 5 6.2831853072 0 1 
10099 ==> appel a Surfaces 
10100 ==> transfert resultat 
10101 ==> res1_1_1 res1_2_1 res1_3_1 res1_4_1 res1_5_1 res1_6_1 
10102 ~~~~~
10103 ~~~~~
10104
10105 @subsubsection occt_draw_9_2_8 DT_ToBspl
10106
10107 Syntax:
10108 ~~~~~
10109 DT_ToBspl <result> <shape>
10110 ~~~~~
10111
10112 Converts a surface of linear extrusion, revolution and offset surfaces into BSpline surfaces. Returns the result into the shape, which is given as parameter result. 
10113
10114 **Example:** 
10115 ~~~~~    
10116 DT_ToBspl res sh 
10117 == error = 5.20375663162094e-08   spans = 10 
10118 ==  Surface is aproximated with continuity 2 
10119 ~~~~~
10120
10121 @section occt_draw_10 Performance evaluation commands
10122
10123
10124 @subsection occt_draw_10_1 VDrawSphere
10125
10126 Syntax:      
10127 ~~~~~
10128 vdrawsphere shapeName Fineness [X=0.0 Y=0.0 Z=0.0] [Radius=100.0] [ToEnableVBO=1] [NumberOfViewerUpdate=1] [ToShowEdges=0] 
10129 ~~~~~
10130
10131 Calculates and displays in a given number of steps a sphere with given coordinates, radius and fineness. Returns the information about the properties of the sphere, the time and the amount of memory required to build it. 
10132
10133 This command can be used for visualization performance evaluation instead of the outdated Visualization Performance Meter. 
10134
10135 **Example:** 
10136 ~~~~~
10137 vdrawsphere s 200 1 1 1 500 1 
10138 == Compute Triangulation... 
10139 == NumberOfPoints: 39602 
10140 == NumberOfTriangles: 79200 
10141 == Amount of memory required for PolyTriangulation without Normals: 2 Mb 
10142 == Amount of memory for colors: 0 Mb 
10143 == Amount of memory for PolyConnect: 1 Mb 
10144 == Amount of graphic card memory required: 2 Mb 
10145 == Number of scene redrawings: 1 
10146 == CPU user time: 15.6000999999998950 msec 
10147 == CPU system time: 0.0000000000000000 msec 
10148 == CPU average time of scene redrawing: 15.6000999999998950 msec 
10149 ~~~~~
10150
10151
10152 @section occt_draw_12 Simple vector algebra and measurements
10153
10154 This section contains description of auxiliary commands that can be useful for simple calculations and manipulations needed when analyzing complex models.
10155
10156 @subsection occt_draw_12_1 Vector algebra commands
10157
10158 This section describes commands providing simple calculations with 2D and 3D vectors. The vector is represented by a TCL list of double values (coordinates). The commands get input vector coordinates from the command line as distinct values. So, if you have a vector stored in a variable you need to use *eval* command as a prefix, for example, to compute the magnitude of cross products of two vectors given by 3 points the following commands can be used:
10159 ~~~~~{.cpp}
10160 Draw[10]> set vec1 [vec 12 28 99 12 58 99]
10161 0 30 0
10162 Draw[13]> set vec2 [vec 12 28 99 16 21 89]
10163 4 -7 -10
10164 Draw[14]> set cross [eval cross $vec1 $vec2]
10165 -300 0 -120
10166 Draw[15]> eval module $cross
10167 323.10988842807024
10168 ~~~~~
10169
10170 @subsubsection occt_draw_12_1_1 vec
10171
10172 Syntax:
10173 ~~~~~
10174 vec <x1> <y1> <z1> <x2> <y2> <z2>
10175 ~~~~~ 
10176
10177 Returns coordinates of vector between two 3D points.
10178
10179 Example:
10180 ~~~~~{.cpp}
10181 vec 1 2 3 6 5 4
10182 ~~~~~
10183
10184 @subsubsection occt_draw_12_1_2 2dvec
10185
10186 Syntax:
10187 ~~~~~
10188 2dvec <x1> <y1> <x2> <y2>
10189 ~~~~~ 
10190
10191 Returns coordinates of vector between two 2D points.
10192
10193 Example: 
10194 ~~~~~{.cpp}
10195 2dvec 1 2 4 3
10196 ~~~~~
10197
10198 @subsubsection occt_draw_12_1_3 pln
10199
10200 Syntax:
10201 ~~~~~
10202 pln <x1> <y1> <z1> <x2> <y2> <z2> <x3> <y3> <z3>
10203 ~~~~~ 
10204
10205 Returns plane built on three points. A plane is represented by 6 double values: coordinates of the origin point and the normal directoin.
10206
10207 Example: 
10208 ~~~~~{.cpp}
10209 pln 1 2 3 6 5 4 9 8 7
10210 ~~~~~
10211
10212 @subsubsection occt_draw_12_1_4 module
10213
10214 Syntax:
10215 ~~~~~
10216 module <x> <y> <z>
10217 ~~~~~ 
10218
10219 Returns module of a vector.
10220
10221 Example: 
10222 ~~~~~{.cpp}
10223 module 1 2 3
10224 ~~~~~
10225
10226 @subsubsection occt_draw_12_1_5 2dmodule
10227
10228 Syntax:
10229 ~~~~~
10230 2dmodule <x> <y>
10231 ~~~~~ 
10232
10233 Returns module of a 2D vector.
10234
10235 Example: 
10236 ~~~~~{.cpp}
10237 2dmodule 1 2
10238 ~~~~~
10239
10240 @subsubsection occt_draw_12_1_6 norm
10241
10242 Syntax:
10243 ~~~~~
10244 norm <x> <y> <z>
10245 ~~~~~ 
10246
10247 Returns unified vector from a given 3D vector.
10248
10249 Example: 
10250 ~~~~~{.cpp}
10251 norm 1 2 3
10252 ~~~~~
10253
10254 @subsubsection occt_draw_12_1_7 2dnorm
10255
10256 Syntax:
10257 ~~~~~
10258 2dnorm <x> <y>
10259 ~~~~~ 
10260
10261 Returns unified vector from a given 2D vector.
10262
10263 Example: 
10264 ~~~~~{.cpp}
10265 2dnorm 1 2
10266 ~~~~~
10267
10268 @subsubsection occt_draw_12_1_8 inverse
10269
10270 Syntax:
10271 ~~~~~
10272 inverse <x> <y> <z>
10273 ~~~~~ 
10274
10275 Returns inversed 3D vector.
10276
10277 Example: 
10278 ~~~~~{.cpp}
10279 inverse 1 2 3
10280 ~~~~~
10281
10282 @subsubsection occt_draw_12_1_9 2dinverse
10283
10284 Syntax:
10285 ~~~~~
10286 2dinverse <x> <y>
10287 ~~~~~ 
10288
10289 Returns inversed 2D vector.
10290
10291 Example: 
10292 ~~~~~{.cpp}
10293 2dinverse 1 2
10294 ~~~~~
10295
10296 @subsubsection occt_draw_12_1_10 2dort
10297
10298 Syntax:
10299 ~~~~~
10300 2dort <x> <y>
10301 ~~~~~ 
10302
10303 Returns 2D vector rotated on 90 degrees.
10304
10305 Example: 
10306 ~~~~~{.cpp}
10307 2dort 1 2
10308 ~~~~~
10309
10310 @subsubsection occt_draw_12_1_11 distpp
10311
10312 Syntax:
10313 ~~~~~
10314 distpp <x1> <y1> <z1> <x2> <y2> <z2>
10315 ~~~~~ 
10316
10317 Returns distance between two 3D points.
10318
10319 Example: 
10320 ~~~~~{.cpp}
10321 distpp 1 2 3 4 5 6
10322 ~~~~~
10323
10324 @subsubsection occt_draw_12_1_12 2ddistpp
10325
10326 Syntax:
10327 ~~~~~
10328 2ddistpp <x1> <y1> <x2> <y2>
10329 ~~~~~ 
10330
10331 Returns distance between two 2D points.
10332
10333 Example: 
10334 ~~~~~{.cpp}
10335 2ddistpp 1 2 3 4
10336 ~~~~~
10337
10338 @subsubsection occt_draw_12_1_13 distplp
10339
10340 Syntax:
10341 ~~~~~
10342 distplp <x0> <y0> <z0> <nx> <ny> <nz> <xp> <yp> <zp>
10343 ~~~~~ 
10344
10345 Returns distance between plane defined by point and normal direction and another point.
10346
10347 Example: 
10348 ~~~~~{.cpp}
10349 distplp 0 0 0 0 0 1 5 6 7
10350 ~~~~~
10351
10352 @subsubsection occt_draw_12_1_14 distlp
10353
10354 Syntax:
10355 ~~~~~
10356 distlp <x0> <y0> <z0> <dx> <dy> <dz> <xp> <yp> <zp>
10357 ~~~~~ 
10358
10359 Returns distance between 3D line defined by point and direction and another point.
10360
10361 Example: 
10362 ~~~~~{.cpp}
10363 distlp 0 0 0 1 0 0 5 6 7
10364 ~~~~~
10365
10366 @subsubsection occt_draw_12_1_15 2ddistlp
10367
10368 Syntax:
10369 ~~~~~
10370 2ddistlp <x0> <y0> <dx> <dy> <xp> <yp>
10371 ~~~~~ 
10372
10373 Returns distance between 2D line defined by point and direction and another point.
10374
10375 Example: 
10376 ~~~~~{.cpp}
10377 2ddistlp 0 0 1 0 5 6
10378 ~~~~~
10379
10380 @subsubsection occt_draw_12_1_16 distppp
10381
10382 Syntax:
10383 ~~~~~
10384 distppp <x1> <y1> <z1> <x2> <y2> <z2> <x3> <y3> <z3>
10385 ~~~~~ 
10386
10387 Returns deviation of point (x2,y2,z2) from segment defined by points (x1,y1,z1) and (x3,y3,z3).
10388
10389 Example: 
10390 ~~~~~{.cpp}
10391 distppp 0 0 0 1 1 0 2 0 0
10392 ~~~~~
10393
10394 @subsubsection occt_draw_12_1_17 2ddistppp
10395
10396 Syntax:
10397 ~~~~~
10398 2ddistppp <x1> <y1> <x2> <y2> <x3> <y3>
10399 ~~~~~ 
10400
10401 Returns deviation of point (x2,y2) from segment defined by points (x1,y1) and (x3,y3). The result is a signed value. It is positive if the point (x2,y2) is on the left side of the segment, and negative otherwise.
10402
10403 Example: 
10404 ~~~~~{.cpp}
10405 2ddistppp 0 0 1 -1 2 0
10406 ~~~~~
10407
10408 @subsubsection occt_draw_12_1_18 barycen
10409
10410 Syntax:
10411 ~~~~~
10412 barycen <x1> <y1> <z1> <x2> <y2> <z2> <par>
10413 ~~~~~ 
10414
10415 Returns point of a given parameter between two 3D points.
10416
10417 Example: 
10418 ~~~~~{.cpp}
10419 barycen 0 0 0 1 1 1 0.3
10420 ~~~~~
10421
10422 @subsubsection occt_draw_12_1_19 2dbarycen
10423
10424 Syntax:
10425 ~~~~~
10426 2dbarycen <x1> <y1> <x2> <y2> <par>
10427 ~~~~~ 
10428
10429 Returns point of a given parameter between two 2D points.
10430
10431 Example: 
10432 ~~~~~{.cpp}
10433 2dbarycen 0 0 1 1 0.3
10434 ~~~~~
10435
10436 @subsubsection occt_draw_12_1_20 cross
10437
10438 Syntax:
10439 ~~~~~
10440 cross <x1> <y1> <z1> <x2> <y2> <z2>
10441 ~~~~~ 
10442
10443 Returns cross product of two 3D vectors.
10444
10445 Example: 
10446 ~~~~~{.cpp}
10447 cross 1 0 0 0 1 0
10448 ~~~~~
10449
10450 @subsubsection occt_draw_12_1_21 2dcross
10451
10452 Syntax:
10453 ~~~~~
10454 2dcross <x1> <y1> <x2> <y2>
10455 ~~~~~ 
10456
10457 Returns cross product of two 2D vectors.
10458
10459 Example: 
10460 ~~~~~{.cpp}
10461 2dcross 1 0 0 1
10462 ~~~~~
10463
10464 @subsubsection occt_draw_12_1_22 dot
10465
10466 Syntax:
10467 ~~~~~
10468 dot <x1> <y1> <z1> <x2> <y2> <z2>
10469 ~~~~~ 
10470
10471 Returns scalar product of two 3D vectors.
10472
10473 Example: 
10474 ~~~~~{.cpp}
10475 dot 1 0 0 0 1 0
10476 ~~~~~
10477
10478 @subsubsection occt_draw_12_1_23 2ddot
10479
10480 Syntax:
10481 ~~~~~
10482 2ddot <x1> <y1> <x2> <y2>
10483 ~~~~~ 
10484
10485 Returns scalar product of two 2D vectors.
10486
10487 Example: 
10488 ~~~~~{.cpp}
10489 2ddot 1 0 0 1
10490 ~~~~~
10491
10492 @subsubsection occt_draw_12_1_24 scale
10493
10494 Syntax:
10495 ~~~~~
10496 scale <x> <y> <z> <factor>
10497 ~~~~~ 
10498
10499 Returns 3D vector multiplied by scalar.
10500
10501 Example: 
10502 ~~~~~{.cpp}
10503 scale 1 0 0 5
10504 ~~~~~
10505
10506 @subsubsection occt_draw_12_1_25 2dscale
10507
10508 Syntax:
10509 ~~~~~
10510 2dscale <x> <y> <factor>
10511 ~~~~~ 
10512
10513 Returns 2D vector multiplied by scalar.
10514
10515 Example: 
10516 ~~~~~{.cpp}
10517 2dscale 1 0 5
10518 ~~~~~
10519
10520 @subsection occt_draw_12_2 Measurements commands
10521
10522 This section describes commands that make possible to provide measurements on a model.
10523
10524 @subsubsection occt_draw_12_2_1 pnt
10525
10526 Syntax:
10527 ~~~~~
10528 pnt <object>
10529 ~~~~~ 
10530
10531 Returns coordinates of point in the given Draw variable. Object can be of type point or vertex. Actually this command is built up from the commands @ref occt_draw_7_2_1a "mkpoint" and @ref occt_draw_6_6_1 "coord".
10532
10533 Example: 
10534 ~~~~~{.cpp}
10535 vertex v 0 1 0
10536 pnt v
10537 ~~~~~
10538
10539 @subsubsection occt_draw_12_2_2 pntc
10540
10541 Syntax:
10542 ~~~~~
10543 pntc <curv> <par>
10544 ~~~~~ 
10545
10546 Returns coordinates of point on 3D curve with given parameter. Actually this command is based on the command @ref occt_draw_6_6_2 "cvalue".
10547
10548 Example: 
10549 ~~~~~{.cpp}
10550 circle c 0 0 0 10
10551 pntc c [dval pi/2]
10552 ~~~~~
10553
10554 @subsubsection occt_draw_12_2_3 2dpntc
10555
10556 Syntax:
10557 ~~~~~
10558 2dpntc <curv2d> <par>
10559 ~~~~~ 
10560
10561 Returns coordinates of point on 2D curve with given parameter. Actually this command is based on the command @ref occt_draw_6_6_2 "2dcvalue".
10562
10563 Example: 
10564 ~~~~~{.cpp}
10565 circle c 0 0 10
10566 2dpntc c [dval pi/2]
10567 ~~~~~
10568
10569 @subsubsection occt_draw_12_2_4 pntsu
10570
10571 Syntax:
10572 ~~~~~
10573 pntsu <surf> <u> <v>
10574 ~~~~~ 
10575
10576 Returns coordinates of point on surface with given parameters. Actually this command is based on the command @ref occt_draw_6_6_3 "svalue".
10577
10578 Example: 
10579 ~~~~~{.cpp}
10580 cylinder s 10
10581 pntsu s [dval pi/2] 5
10582 ~~~~~
10583
10584 @subsubsection occt_draw_12_2_5 pntcons
10585
10586 Syntax:
10587 ~~~~~
10588 pntcons <curv2d> <surf> <par>
10589 ~~~~~ 
10590
10591 Returns coordinates of point on surface defined by point on 2D curve with given parameter. Actually this command is based on the commands @ref occt_draw_6_6_2 "2dcvalue" and @ref occt_draw_6_6_3 "svalue".
10592
10593 Example: 
10594 ~~~~~{.cpp}
10595 line c 0 0 1 0
10596 cylinder s 10
10597 pntcons c s [dval pi/2]
10598 ~~~~~
10599
10600 @subsubsection occt_draw_12_2_6 drseg
10601
10602 Syntax:
10603 ~~~~~
10604 drseg <name> <x1> <y1> <z1> <x2> <y2> <z2>
10605 ~~~~~ 
10606
10607 Creates a linear segment between two 3D points. The new object is given the *name*. The object is drawn in the axonometric view.
10608
10609 Example: 
10610 ~~~~~{.cpp}
10611 drseg s 0 0 0 1 0 0
10612 ~~~~~
10613
10614 @subsubsection occt_draw_12_2_7 2ddrseg
10615
10616 Syntax:
10617 ~~~~~
10618 2ddrseg <name> <x1> <y1> <x2> <y2>
10619 ~~~~~ 
10620
10621 Creates a linear segment between two 2D points. The new object is given the *name*. The object is drawn in the 2D view.
10622
10623 Example: 
10624 ~~~~~{.cpp}
10625 2ddrseg s 0 0 1 0
10626 ~~~~~
10627
10628 @subsubsection occt_draw_12_2_8 mpick
10629
10630 Syntax:
10631 ~~~~~
10632 mpick
10633 ~~~~~ 
10634
10635 Prints in the console the coordinates of a point clicked by mouse in a view (axonometric or 2D). This command will wait for mouse click event in a view.
10636
10637 Example: 
10638 ~~~~~{.cpp}
10639 mpick
10640 ~~~~~
10641
10642 @subsubsection occt_draw_12_2_9 mdist
10643
10644 Syntax:
10645 ~~~~~
10646 mdist
10647 ~~~~~ 
10648
10649 Prints in the console the distance between two points clicked by mouse in a view (axonometric or 2D). This command will wait for two mouse click events in a view.
10650
10651 Example: 
10652 ~~~~~{.cpp}
10653 mdist
10654 ~~~~~
10655
10656 @section occt_draw_11 Extending Test Harness with custom commands
10657
10658
10659 The following chapters explain how to extend Test Harness with custom commands and how to activate them using a plug-in mechanism. 
10660
10661
10662 @subsection occt_draw_11_1 Custom command implementation
10663
10664 Custom command implementation has not undergone any changes since the introduction of the plug-in mechanism. The syntax of every command should still be like in the following example. 
10665
10666 **Example:** 
10667 ~~~~~
10668 static Standard_Integer myadvcurve(Draw_Interpretor& di, Standard_Integer n, char** a) 
10669
10670 ... 
10671
10672 ~~~~~
10673
10674 For examples of existing commands refer to Open CASCADE Technology (e.g. GeomliteTest.cxx). 
10675
10676
10677 @subsection occt_draw_11_2 Registration of commands in Test Harness
10678
10679 To become available in the Test Harness the custom command must be registered in it. This should be done as follows. 
10680
10681 **Example:** 
10682 ~~~~~
10683 void MyPack::CurveCommands(Draw_Interpretor& theCommands) 
10684
10685 ... 
10686 char* g = "Advanced curves creation"; 
10687
10688 theCommands.Add ( "myadvcurve", "myadvcurve name p1 p2 p3 - Creates my advanced curve from points", 
10689                   __FILE__, myadvcurve, g ); 
10690 ... 
10691
10692 ~~~~~
10693
10694 @subsection occt_draw_11_3 Creating a toolkit (library) as a plug-in
10695
10696 All custom commands are compiled and linked into a dynamic library (.dll on Windows, or .so on Unix/Linux). To make Test Harness recognize it as a plug-in it must respect certain conventions. Namely, it must export function *PLUGINFACTORY()* accepting the Test Harness interpreter object (*Draw_Interpretor*). This function will be called when the library is dynamically loaded during the Test Harness session. 
10697
10698 This exported function *PLUGINFACTORY()* must be implemented only once per library. 
10699
10700 For convenience the *DPLUGIN* macro (defined in the *Draw_PluginMacro.hxx* file) has been provided. It implements the *PLUGINFACTORY()* function as a call to the *Package::Factory()* method and accepts *Package* as an argument. Respectively, this *Package::Factory()* method must be implemented in the library and activate all implemented commands. 
10701
10702 **Example:** 
10703 ~~~~~
10704 #include <Draw_PluginMacro.hxx>
10705
10706 void MyPack::Factory(Draw_Interpretor& theDI)
10707 {
10708 ...
10709 // 
10710 MyPack::CurveCommands(theDI);
10711 ...
10712 }
10713
10714 // Declare entry point PLUGINFACTORY
10715 DPLUGIN(MyPack)
10716 ~~~~~
10717
10718 @subsection occt_draw_11_4 Creation of the plug-in resource file
10719
10720 As mentioned above, the plug-in resource file must be compliant with Open CASCADE Technology requirements (see *Resource_Manager.hxx* file for details). In particular, it should contain keys separated from their values by a colon (;:;). 
10721 For every created plug-in there must be a key. For better readability and comprehension it is recommended to have some meaningful name. 
10722 Thus, the resource file must contain a line mapping this name (key) to the library name. The latter should be without file extension (.dll on Windows, .so on Unix/Linux) and without the ;lib; prefix on Unix/Linux. 
10723 For several plug-ins one resource file can be created. In such case, keys denoting plug-ins can be combined into groups, these groups -- into their groups and so on (thereby creating some hierarchy). Any new parent key must have its value as a sequence of child keys separated by spaces, tabs or commas. Keys should form a tree without cyclic dependencies. 
10724
10725 **Examples** (file MyDrawPlugin): 
10726 ~~~~~
10727 ! Hierarchy of plug-ins 
10728 ALL                : ADVMODELING, MESHING 
10729 DEFAULT            : MESHING 
10730 ADVMODELING        : ADVSURF, ADVCURV 
10731
10732 ! Mapping from naming to toolkits (libraries) 
10733 ADVSURF            : TKMyAdvSurf 
10734 ADVCURV            : TKMyAdvCurv 
10735 MESHING            : TKMyMesh 
10736 ~~~~~
10737
10738 For other examples of the plug-in resource file refer to the @ref occt_draw_1_3_2 "Plug-in resource file" chapter above or to the <i>$CASROOT/src/DrawPlugin</i> file shipped with Open CASCADE Technology. 
10739
10740
10741 @subsection occt_draw_11_5 Dynamic loading and activation
10742
10743 Loading a plug-in and activating its commands is described in the @ref occt_draw_1_3_3 "Activation of the commands implemented in the plug-in" chapter. 
10744
10745 The procedure consists in defining the system variables and using the *pload* commands in the Test Harness session. 
10746
10747 **Example:** 
10748 ~~~~
10749 Draw[]> set env(CSF_MyDrawPluginDefaults) /users/test
10750 Draw[]> pload -MyDrawPlugin ALL
10751 ~~~~
10752