22641fa72b3a6c9032f09118ba6f382d125ce4f7
[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 **Attention:** 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 vangleparam
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 vlengthparam
2531
2532 Syntax:
2533 ~~~~~
2534 vlengthparam name [-type interior|exterior]
2535                   [-showarrow first|second|both|none]
2536 ~~~~~
2537
2538 Sets parameters for length dimension **name**.
2539
2540 **Example:** 
2541 ~~~~~
2542 vinit
2543 vpoint p1 20 20 0
2544 vpoint p2 80 80 0
2545 vdimension dim1 -length -plane xoy -shapes p1 p2
2546 vtop
2547 vfit
2548 vzoom 0.5
2549 vlengthparam dim1 -direction ox
2550 ~~~~~
2551
2552 @subsubsection occt_draw_4_4_24 vmovedim
2553
2554 Syntax:
2555 ~~~~~
2556 vmovedim [name] [x y z]
2557 ~~~~~
2558
2559 Moves picked or named (if **name** parameter is defined) dimension
2560 to picked mouse position or input point with coordinates **x**,**y**,**z**.
2561 Text label of dimension **name** is moved to position, another parts of dimension
2562 are adjusted.
2563
2564 **Example:** 
2565 ~~~~~
2566 vinit
2567 vpoint p1 0 0 0
2568 vpoint p2 50 50 0
2569 vdimension dim1 -length -plane xoy -shapes p1 p2
2570 vmovedim dim1 -10 30 0
2571 ~~~~~
2572
2573
2574 @subsection occt_draw_4_5 AIS viewer -- Mesh Visualization Service
2575
2576 **MeshVS** (Mesh Visualization Service) component provides flexible means of displaying meshes with associated pre- and post- processor data.
2577
2578 @subsubsection occt_draw_4_5_1 meshfromstl
2579
2580 Syntax:                  
2581 ~~~~~
2582 meshfromstl meshname file
2583 ~~~~~ 
2584
2585 Creates a *MeshVS_Mesh* object based on STL file data. The object will be displayed immediately.
2586  
2587 **Example:**
2588 ~~~~~ 
2589 meshfromstl mesh myfile.stl
2590 ~~~~~ 
2591
2592 @subsubsection occt_draw_4_5_2 meshdispmode
2593
2594 Syntax:                  
2595 ~~~~~
2596 meshdispmode meshname displaymode
2597 ~~~~~ 
2598
2599 Changes the display mode of object **meshname**. The **displaymode** is integer, which can be:
2600 * *1* for *wireframe*, 
2601 * *2* for *shading* mode, or
2602 * *3* for *shrink* mode. 
2603
2604 **Example:** 
2605 ~~~~~
2606 vinit 
2607 meshfromstl mesh myfile.stl 
2608 meshdispmode mesh 2
2609 ~~~~~ 
2610
2611 @subsubsection occt_draw_4_5_3 meshselmode
2612
2613 Syntax:                  
2614 ~~~~~
2615 meshselmode meshname selectionmode
2616 ~~~~~ 
2617
2618 Changes the selection mode of object **meshname**. The *selectionmode* is integer OR-combination of mode flags. The basic flags are the following: 
2619 * *1* -- node selection;
2620 * *2* -- 0D elements (not supported in STL); 
2621 * *4* -- links (not supported in STL); 
2622 * *8* -- faces.
2623  
2624 **Example:** 
2625 ~~~~~
2626 vinit 
2627 meshfromstl mesh myfile.stl 
2628 meshselmode mesh 1
2629 ~~~~~ 
2630
2631 @subsubsection occt_draw_4_5_4 meshshadcolor
2632
2633 Syntax:                  
2634 ~~~~~
2635 meshshadcolor meshname red green blue
2636 ~~~~~ 
2637
2638 Changes the face interior color of object **meshname**. The *red*, *green* and *blue* are real values between *0* and *1*.
2639  
2640 **Example:** 
2641 ~~~~~
2642 vinit 
2643 meshfromstl mesh myfile.stl 
2644 meshshadcolormode mesh 0.5 0.5 0.5
2645 ~~~~~ 
2646
2647 @subsubsection occt_draw_4_5_5 meshlinkcolor
2648
2649 Syntax:                  
2650 ~~~~~
2651 meshlinkcolor meshname red green blue
2652 ~~~~~ 
2653
2654 Changes the color of face borders for object **meshname**. The *red*, *green* and *blue* are real values between *0* and *1*.
2655  
2656 **Example:** 
2657 ~~~~~
2658 vinit 
2659 meshfromstl mesh myfile.stl 
2660 meshlinkcolormode mesh 0.5 0.5 0.5
2661 ~~~~~ 
2662
2663 @subsubsection occt_draw_4_5_6 meshmat
2664
2665 Syntax:                  
2666 ~~~~~
2667 meshmat meshname material
2668 ~~~~~ 
2669
2670 Changes the material of object **meshname**.
2671
2672 *material* is represented with an integer value as follows (equivalent to enumeration *Graphic3d_NameOfMaterial*): 
2673 * *0 -- BRASS,* 
2674 * *1 -- BRONZE,* 
2675 * *2 -- COPPER,* 
2676 * *3 -- GOLD,* 
2677 * *4 -- PEWTER,* 
2678 * *5 -- PLASTER,* 
2679 * *6 -- PLASTIC,* 
2680 * *7 -- SILVER,* 
2681 * *8 -- STEEL,* 
2682 * *9 -- STONE,* 
2683 * *10 -- SHINY_PLASTIC,* 
2684 * *11 -- SATIN,*
2685 * *12 -- METALIZED,* 
2686 * *13 -- NEON_GNC,* 
2687 * *14 -- CHROME,*
2688 * *15 -- ALUMINIUM,*
2689 * *16 -- OBSIDIAN,* 
2690 * *17 -- NEON_PHC,* 
2691 * *18 -- JADE,*
2692 * *19 -- DEFAULT,* 
2693 * *20 -- UserDefined*
2694  
2695 **Example:** 
2696 ~~~~~
2697 vinit 
2698 meshfromstl mesh myfile.stl 
2699 meshmat mesh JADE 
2700 ~~~~~
2701
2702 @subsubsection occt_draw_4_5_7 meshshrcoef
2703
2704 Syntax:                  
2705 ~~~~~
2706 meshshrcoef meshname shrinkcoefficient
2707 ~~~~~ 
2708
2709 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.
2710  
2711 **Example:** 
2712 ~~~~~
2713 vinit 
2714 meshfromstl mesh myfile.stl 
2715 meshshrcoef mesh 0.05
2716 ~~~~~ 
2717
2718 @subsubsection occt_draw_4_5_8 meshshow
2719
2720 Syntax:                  
2721 ~~~~~
2722 meshshow meshname
2723 ~~~~~ 
2724
2725 Displays **meshname** in the viewer (if it is erased).
2726  
2727 **Example:** 
2728 ~~~~~
2729 vinit 
2730 meshfromstl mesh myfile.stl 
2731 meshshow mesh
2732 ~~~~~ 
2733
2734 @subsubsection occt_draw_4_5_9 meshhide
2735
2736 Syntax:                  
2737 ~~~~~
2738 meshhide meshname
2739 ~~~~~ 
2740
2741 Hides **meshname** in the viewer. 
2742
2743 **Example:** 
2744 ~~~~~
2745 vinit 
2746 meshfromstl mesh myfile.stl 
2747 meshhide mesh
2748 ~~~~~ 
2749
2750 @subsubsection occt_draw_4_5_10 meshhidesel
2751
2752 Syntax:                  
2753 ~~~~~
2754 meshhidesel meshname
2755 ~~~~~ 
2756
2757 Hides only selected entities. The other part of **meshname** remains visible. 
2758
2759 @subsubsection occt_draw_4_5_11 meshshowsel
2760
2761 Syntax:                  
2762 ~~~~~
2763 meshshowsel meshname
2764 ~~~~~ 
2765
2766 Shows only selected entities. The other part of **meshname** becomes invisible. 
2767
2768 @subsubsection occt_draw_4_5_12 meshshowall
2769
2770 Syntax:                  
2771 ~~~~~
2772 meshshowall meshname
2773 ~~~~~ 
2774
2775 Changes the state of all entities to visible for **meshname**. 
2776
2777 @subsubsection occt_draw_4_5_13 meshdelete
2778
2779 Syntax:                  
2780 ~~~~~
2781 meshdelete meshname
2782 ~~~~~ 
2783
2784 Deletes MeshVS_Mesh object **meshname**. 
2785
2786 **Example:** 
2787 ~~~~~
2788 vinit 
2789 meshfromstl mesh myfile.stl 
2790 meshdelete mesh 
2791 ~~~~~
2792
2793 @subsection occt_draw_4_6       VIS Viewer commands
2794
2795 A specific plugin with alias *VIS* should be loaded to have access to VIS functionality in DRAW Test Harness:
2796
2797 ~~~~
2798 \> pload VIS
2799 ~~~~
2800
2801 @subsubsection occt_draw_4_6_1  ivtkinit
2802
2803 Syntax:
2804 ~~~~~
2805 ivtkinit
2806 ~~~~~
2807
2808 Creates a window for VTK viewer.
2809
2810 @figure{/user_guides/draw_test_harness/images/draw_image001.png,"",225}
2811
2812 @subsubsection occt_draw_4_6_2  ivtkdisplay
2813
2814 Syntax:
2815 ~~~~~
2816 ivtkdisplay name1 [name2] …[name n]
2817 ~~~~~
2818
2819 Displays named objects.
2820
2821 **Example:** 
2822 ~~~~~
2823 ivtkinit
2824 # create cone
2825 pcone c 5 0 10
2826 ivtkdisplay c
2827 ~~~~~
2828
2829 @figure{/user_guides/draw_test_harness/images/draw_image002.png,"",261}
2830
2831
2832 @subsubsection occt_draw_4_6_3  ivtkerase
2833
2834 Syntax:
2835 ~~~~~
2836 ivtkerase [name1] [name2] … [name n]
2837 ~~~~~
2838
2839 Erases named objects. If no arguments are passed, erases all displayed objects.
2840
2841 **Example:**
2842 ~~~~~
2843 ivtkinit
2844 # create a sphere
2845 psphere s 10
2846 # create a cone
2847 pcone c 5 0 10
2848 # create a cylinder
2849 pcylinder cy 5 10
2850 # display objects
2851 ivtkdisplay s c cy
2852 # erase only the cylinder
2853 ivtkerase cy
2854 # erase the sphere and the cone
2855 ivtkerase s c
2856 ~~~~~
2857
2858 @subsubsection occt_draw_4_6_4   ivtkfit
2859
2860 Syntax:
2861 ~~~~~
2862 ivtkfit
2863 ~~~~~
2864
2865 Automatic zoom/panning.
2866
2867 @subsubsection occt_draw_4_6_5  ivtkdispmode
2868
2869 Syntax:
2870 ~~~~~
2871 ivtksetdispmode [name] {0|1}
2872 ~~~~~
2873
2874 Sets display mode for a named object. If no arguments are passed, sets the given display mode for all displayed objects
2875 The possible modes are: 0 (WireFrame) and 1 (Shading).
2876
2877 **Example:**
2878 ~~~~~
2879 ivtkinit
2880 # create a cone
2881 pcone c 5 0 10
2882 # display the cone
2883 ivtkdisplay c
2884 # set shading mode for the cone
2885 ivtksetdispmode c 1
2886 ~~~~~
2887
2888 @figure{/user_guides/draw_test_harness/images/draw_image003.png,"",262}
2889
2890 @subsubsection occt_draw_4_6_6  ivtksetselmode
2891
2892 Syntax:
2893 ~~~~~
2894 ivtksetselmode [name] mode {0|1}
2895 ~~~~~
2896
2897 Sets selection mode for a named object. If no arguments are passed, sets the given selection mode for all the displayed objects.
2898
2899 **Example:**
2900 ~~~~~
2901 ivtkinit
2902 # load a shape from file
2903 restore CrankArm.brep a
2904 # display the loaded shape
2905 ivtkdisplay a
2906 # set the face selection mode
2907 ivtksetselmode a 4 1
2908 ~~~~~
2909
2910 @figure{/user_guides/draw_test_harness/images/draw_image004.png,"",291}
2911  
2912 @subsubsection occt_draw_4_6_7  ivtkmoveto
2913
2914 Syntax:
2915 ~~~~~
2916 ivtkmoveto x y
2917 ~~~~~
2918
2919 Imitates mouse cursor moving to point with the given display coordinates **x**,**y**.
2920
2921 **Example:**
2922 ~~~~~
2923 ivtkinit
2924 pcone c 5 0 10
2925 ivtkdisplay c
2926 ivtkmoveto 40 50
2927 ~~~~~
2928
2929 @subsubsection occt_draw_4_6_8  ivtkselect
2930
2931 Syntax:
2932 ~~~~~
2933 ivtkselect x y
2934 ~~~~~
2935
2936 Imitates mouse cursor moving to point with the given display coordinates and performs selection at this point.
2937
2938 **Example:**
2939 ~~~~~
2940 ivtkinit
2941 pcone c 5 0 10
2942 ivtkdisplay c
2943 ivtkselect 40 50
2944 ~~~~~
2945
2946 @subsubsection occt_draw_4_6_9  ivtkdump
2947
2948 Syntax:
2949 ~~~~~
2950 ivtkdump *filename* [buffer={rgb|rgba|depth}] [width height] [stereoproj={L|R}]
2951 ~~~~~
2952
2953 Dumps the contents of VTK viewer to image. It supports:
2954 * dumping in different raster graphics formats: PNG, BMP, JPEG, TIFF or PNM.
2955 * dumping of different buffers: RGB, RGBA or depth buffer.
2956 * defining of image sizes (width and height in pixels).
2957 * dumping of stereo projections (left or right).
2958
2959 **Example:**
2960 ~~~~~
2961 ivtkinit
2962 pcone c 5 0 10
2963 ivtkdisplay c
2964 ivtkdump D:/ConeSnapshot.png rgb 768 768
2965 ~~~~~
2966
2967 @subsubsection occt_draw_4_6_10 ivtkbgcolor
2968
2969
2970 Syntax:
2971 ~~~~~
2972 ivtkbgcolor r g b [r2 g2 b2]
2973 ~~~~~
2974
2975 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].
2976
2977 **Example:**
2978 ~~~~~
2979 ivtkinit
2980 ivtkbgcolor 200 220 250
2981 ~~~~~
2982  
2983 @figure{/user_guides/draw_test_harness/images/draw_image005.png,"",196}
2984
2985 ~~~~~
2986 ivtkbgcolor 10 30 80 255 255 255
2987 ~~~~~
2988
2989 @figure{/user_guides/draw_test_harness/images/draw_image006.png,"",190}
2990
2991 @section occt_draw_5 OCAF commands
2992
2993 This chapter contains a set of commands for Open CASCADE Technology Application Framework (OCAF). 
2994
2995
2996 @subsection occt_draw_5_1 Application commands
2997
2998
2999 @subsubsection occt_draw_5_1_1 NewDocument
3000
3001 Syntax:       
3002 ~~~~~
3003 NewDocument docname [format]
3004 ~~~~~ 
3005
3006 Creates a new **docname** document with MDTV-Standard or described format. 
3007
3008 **Example:** 
3009 ~~~~~
3010 # Create new document with default (MDTV-Standard) format 
3011 NewDocument D 
3012
3013 # Create new document with BinOcaf format 
3014 NewDocument D2 BinOcaf 
3015 ~~~~~
3016
3017 @subsubsection occt_draw_5_1_2 IsInSession
3018
3019 Syntax:       
3020 ~~~~~
3021 IsInSession path
3022 ~~~~~ 
3023
3024 Returns *0*, if **path** document is managed by the application session, *1* -- otherwise. 
3025
3026 **Example:** 
3027 ~~~~~
3028 IsInSession /myPath/myFile.std 
3029 ~~~~~
3030
3031 @subsubsection occt_draw_5_1_3 ListDocuments
3032
3033 Syntax:       
3034 ~~~~~
3035 ListDocuments
3036 ~~~~~ 
3037
3038 Makes a list of documents handled during the session of the application. 
3039
3040
3041 @subsubsection occt_draw_5_1_4 Open
3042
3043 Syntax:       
3044 ~~~~~
3045 Open path docname [-stream]
3046 ~~~~~ 
3047
3048 Retrieves the document of file **docname** in the path **path**. Overwrites the document, if it is already in session. 
3049
3050 option <i>-stream</i> activates usage of alternative interface of OCAF persistence working with C++ streams instead of file names.
3051
3052 **Example:** 
3053 ~~~~~
3054 Open /myPath/myFile.std D
3055 ~~~~~ 
3056
3057 @subsubsection occt_draw_5_1_5 Close
3058
3059 Syntax:       
3060 ~~~~~
3061 Close docname
3062 ~~~~~ 
3063
3064 Closes **docname** document. The document is no longer handled by the applicative session. 
3065
3066 **Example:** 
3067 ~~~~~
3068 Close D 
3069 ~~~~~
3070
3071 @subsubsection occt_draw_5_1_6 Save
3072
3073 Syntax:       
3074 ~~~~~
3075 Save docname
3076 ~~~~~ 
3077
3078 Saves **docname** active document. 
3079
3080 **Example:** 
3081 ~~~~~
3082 Save D 
3083 ~~~~~
3084
3085 @subsubsection occt_draw_5_1_7 SaveAs
3086
3087 Syntax:       
3088 ~~~~~
3089 SaveAs docname path [-stream]
3090 ~~~~~ 
3091
3092 Saves the active document in the file **docname** in the path **path**. Overwrites the file if it already exists.
3093
3094 option <i>-stream</i> activates usage of alternative interface of OCAF persistence working with C++ streams instead of file names.
3095
3096 **Example:** 
3097 ~~~~~
3098 SaveAs D /myPath/myFile.std
3099 ~~~~~ 
3100
3101 @subsection occt_draw_5_2 Basic commands
3102
3103 @subsubsection occt_draw_5_2_1 Label
3104
3105 Syntax:   
3106
3107 ~~~~~
3108 Label docname entry
3109 ~~~~~
3110
3111 Creates the label expressed by <i>\<entry\></i> if it does not exist.
3112
3113 Example
3114 ~~~~~
3115 Label D 0:2
3116 ~~~~~
3117
3118 @subsubsection occt_draw_5_2_2 NewChild
3119
3120 Syntax:   
3121
3122 ~~~~~
3123 NewChild docname [taggerlabel = Root label]
3124 ~~~~~
3125 Finds (or creates) a *TagSource* attribute located at father label of <i>\<taggerlabel\></i> and makes a new child label.
3126
3127 Example
3128 ~~~~~
3129 # Create new child of root label
3130 NewChild D
3131
3132 # Create new child of existing label
3133 Label D 0:2
3134 NewChild D 0:2
3135 ~~~~~
3136
3137 @subsubsection occt_draw_5_2_3 Children
3138
3139 Syntax:  
3140 ~~~~~
3141 Children docname label
3142 ~~~~~
3143 Returns the list of attributes of label.
3144
3145 Example
3146 ~~~~~
3147 Children D 0:2
3148 ~~~~~
3149
3150 @subsubsection occt_draw_5_2_4 ForgetAll
3151
3152 Syntax:   
3153 ~~~~~
3154 ForgetAll docname label
3155 ~~~~~
3156 Forgets all attributes of the label.
3157
3158 Example
3159 ~~~~~
3160 ForgetAll D 0:2
3161 ~~~~~
3162
3163
3164 @subsubsection occt_draw_5_3 Application commands
3165
3166 @subsubsection occt_draw_5_3_1  Main
3167
3168 Syntax:       
3169 ~~~~~
3170 Main docname
3171 ~~~~~ 
3172
3173 Returns the main label of the framework. 
3174
3175 **Example:** 
3176 ~~~~~
3177 Main D 
3178 ~~~~~
3179
3180 @subsubsection occt_draw_5_3_2  UndoLimit
3181
3182 Syntax:       
3183 ~~~~~
3184 UndoLimit docname [value=0]
3185 ~~~~~ 
3186
3187
3188 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 
3189
3190 **Example:** 
3191 ~~~~~
3192 UndoLimit D 100 
3193 ~~~~~
3194
3195 @subsubsection occt_draw_5_3_3  Undo
3196
3197 Syntax:       
3198 ~~~~~
3199 Undo docname [value=1]
3200 ~~~~~ 
3201
3202 Undoes **value** steps. 
3203
3204 **Example:** 
3205 ~~~~~
3206 Undo D 
3207 ~~~~~
3208
3209 @subsubsection occt_draw_5_3_4  Redo
3210
3211 Syntax:       
3212 ~~~~~
3213 Redo docname [value=1]
3214 ~~~~~ 
3215
3216 Redoes **value** steps.
3217  
3218 **Example:** 
3219 ~~~~~
3220 Redo D 
3221 ~~~~~
3222
3223 @subsubsection occt_draw_5_3_5  OpenCommand
3224
3225 Syntax:       
3226 ~~~~~
3227 OpenCommand docname
3228 ~~~~~ 
3229
3230 Opens a new command transaction. 
3231
3232 **Example:**
3233 ~~~~~ 
3234 OpenCommand D
3235 ~~~~~ 
3236
3237 @subsubsection occt_draw_5_3_6  CommitCommand
3238
3239 Syntax:       
3240 ~~~~~
3241 CommitCommand docname
3242 ~~~~~ 
3243
3244 Commits the Command transaction. 
3245
3246 **Example:** 
3247 ~~~~~
3248 CommitCommand D
3249 ~~~~~ 
3250
3251 @subsubsection occt_draw_5_3_7  NewCommand
3252
3253 Syntax:       
3254 ~~~~~
3255 NewCommand docname
3256 ~~~~~ 
3257
3258 This is a shortcut for Commit and Open transaction. 
3259
3260 **Example:** 
3261 ~~~~~
3262 NewCommand D 
3263 ~~~~~
3264
3265 @subsubsection occt_draw_5_3_8  AbortCommand
3266
3267 Syntax:       
3268 ~~~~~
3269 AbortCommand docname
3270 ~~~~~ 
3271
3272 Aborts the Command transaction. 
3273
3274 **Example:** 
3275 ~~~~~
3276 AbortCommand D 
3277 ~~~~~
3278
3279 @subsubsection occt_draw_5_3_9  Copy
3280
3281 Syntax:       
3282 ~~~~~
3283 Copy docname entry Xdocname Xentry
3284 ~~~~~ 
3285
3286 Copies the contents of *entry* to *Xentry*. No links are registered. 
3287
3288 **Example:** 
3289 ~~~~~
3290 Copy D1 0:2 D2 0:4 
3291 ~~~~~
3292
3293 @subsubsection occt_draw_5_3_10  UpdateLink
3294
3295 Syntax:       
3296 ~~~~~
3297 UpdateLink docname [entry] 
3298 ~~~~~
3299
3300 Updates external reference set at *entry*. 
3301
3302 **Example:** 
3303 ~~~~~
3304 UpdateLink D 
3305 ~~~~~
3306
3307 @subsubsection occt_draw_5_3_11  CopyWithLink
3308
3309 Syntax:       
3310 ~~~~~
3311 CopyWithLink docname entry Xdocname Xentry
3312 ~~~~~ 
3313
3314 Aborts the Command transaction. 
3315 Copies the content of *entry* to *Xentry*. The link is registered with an *Xlink* attribute at *Xentry*  label. 
3316
3317 **Example:** 
3318 ~~~~~
3319 CopyWithLink D1 0:2 D2 0:4
3320 ~~~~~ 
3321
3322 @subsubsection occt_draw_5_3_12  UpdateXLinks
3323
3324 Syntax:       
3325 ~~~~~
3326 UpdateXLinks docname entry
3327 ~~~~~ 
3328
3329 Sets modifications on labels impacted by external references to the *entry*. The *document* becomes invalid and must be recomputed 
3330
3331 **Example:** 
3332 ~~~~~
3333 UpdateXLinks D 0:2 
3334 ~~~~~
3335
3336 @subsubsection occt_draw_5_3_13  DumpDocument
3337
3338 Syntax:       
3339 ~~~~~
3340 DumpDocument docname
3341 ~~~~~ 
3342
3343 Displays parameters of *docname* document. 
3344
3345 **Example:** 
3346 ~~~~~
3347 DumpDocument D 
3348 ~~~~~
3349
3350
3351 @subsection occt_draw_5_4  Data Framework commands
3352
3353
3354 @subsubsection occt_draw_5_4_1  MakeDF
3355
3356 Syntax:       
3357 ~~~~~
3358 MakeDF dfname
3359 ~~~~~ 
3360
3361 Creates a new data framework. 
3362
3363 **Example:** 
3364 ~~~~~
3365 MakeDF D 
3366 ~~~~~
3367
3368 @subsubsection occt_draw_5_4_2  ClearDF
3369
3370 Syntax:       
3371 ~~~~~
3372 ClearDF dfname
3373 ~~~~~ 
3374
3375 Clears a data framework. 
3376
3377 **Example:** 
3378 ~~~~~
3379 ClearDF D 
3380 ~~~~~
3381
3382 @subsubsection occt_draw_5_4_3  CopyDF
3383
3384 Syntax:       
3385 ~~~~~
3386 CopyDF dfname1 entry1 [dfname2] entry2
3387 ~~~~~ 
3388
3389 Copies a data framework. 
3390
3391 **Example:** 
3392 ~~~~~
3393 CopyDF D 0:2 0:4 
3394 ~~~~~
3395
3396 @subsubsection occt_draw_5_4_4  CopyLabel
3397
3398 Syntax:       
3399 ~~~~~
3400 CopyLabel dfname fromlabel tolablel
3401 ~~~~~ 
3402
3403 Copies a label. 
3404
3405 **Example:** 
3406 ~~~~~
3407 CopyLabel D1 0:2 0:4 
3408 ~~~~~
3409
3410 @subsubsection occt_draw_5_4_5  MiniDumpDF
3411
3412 Syntax:       
3413 ~~~~~
3414 MiniDumpDF dfname
3415 ~~~~~ 
3416
3417 Makes a mini-dump of a data framework. 
3418
3419 **Example:** 
3420 ~~~~~
3421 MiniDumpDF D 
3422 ~~~~~
3423
3424 @subsubsection occt_draw_5_4_6  XDumpDF
3425
3426 Syntax:       
3427 ~~~~~
3428 XDumpDF dfname
3429 ~~~~~ 
3430
3431 Makes an extended dump of a data framework. 
3432
3433 **Example:** 
3434 ~~~~~
3435 XDumpDF D
3436 ~~~~~ 
3437
3438 @subsection occt_draw_5_5  General attributes commands
3439
3440
3441 @subsubsection occt_draw_5_5_1  SetInteger
3442
3443 Syntax:       
3444 ~~~~~
3445 SetInteger dfname entry value
3446 ~~~~~ 
3447
3448 Finds or creates an Integer attribute at *entry* label and sets *value*. 
3449
3450 **Example:** 
3451 ~~~~~
3452 SetInteger D 0:2 100 
3453 ~~~~~
3454
3455 @subsubsection occt_draw_5_5_2  GetInteger
3456
3457 Syntax:       
3458 ~~~~~
3459 GetInteger dfname entry [drawname]
3460 ~~~~~ 
3461
3462 Gets a value of an Integer attribute at *entry* label and sets it to *drawname* variable, if it is defined. 
3463
3464 **Example:** 
3465 ~~~~~
3466 GetInteger D 0:2 Int1 
3467 ~~~~~
3468
3469 @subsubsection occt_draw_5_5_3  SetReal
3470
3471 Syntax:       
3472 ~~~~~
3473 SetReal dfname entry value
3474 ~~~~~ 
3475
3476 Finds or creates a Real attribute at *entry* label and sets *value*. 
3477
3478 **Example:** 
3479 ~~~~~
3480 SetReal D 0:2 100. 
3481 ~~~~~
3482
3483 @subsubsection occt_draw_5_5_4  GetReal
3484
3485 Syntax:       
3486 ~~~~~
3487 GetReal dfname entry [drawname]
3488 ~~~~~ 
3489
3490 Gets a value of a Real attribute at *entry* label and sets it to *drawname* variable, if it is defined. 
3491
3492 **Example:** 
3493 ~~~~~
3494 GetReal D 0:2 Real1 
3495 ~~~~~
3496
3497 @subsubsection occt_draw_5_5_5  SetIntArray
3498
3499 Syntax:       
3500 ~~~~~
3501 SetIntArray dfname entry lower upper value1 value2 … 
3502 ~~~~~
3503
3504 Finds or creates an IntegerArray attribute at *entry* label with lower and upper bounds and sets **value1*, *value2*... 
3505
3506 **Example:** 
3507 ~~~~~
3508 SetIntArray D 0:2 1 4 100 200 300 400
3509 ~~~~~ 
3510
3511 @subsubsection occt_draw_5_5_6  GetIntArray
3512
3513 Syntax:       
3514 ~~~~~
3515 GetIntArray dfname entry
3516 ~~~~~ 
3517
3518 Gets a value of an *IntegerArray* attribute at *entry* label. 
3519
3520 **Example:** 
3521 ~~~~~
3522 GetIntArray D 0:2
3523 ~~~~~ 
3524
3525 @subsubsection occt_draw_5_5_7  SetRealArray
3526
3527 Syntax:       
3528 ~~~~~
3529 SetRealArray dfname entry lower upper value1 value2 …
3530 ~~~~~ 
3531
3532 Finds or creates a RealArray attribute at *entry* label with lower and upper bounds and sets *value1*, *value2*… 
3533
3534 **Example:** 
3535 ~~~~~
3536 GetRealArray D 0:2 1 4 100. 200. 300. 400. 
3537 ~~~~~
3538
3539 @subsubsection occt_draw_5_5_8  GetRealArray
3540
3541 Syntax:       
3542 ~~~~~
3543 GetRealArray dfname entry
3544 ~~~~~ 
3545
3546 Gets a value of a RealArray attribute at *entry* label. 
3547
3548 **Example:** 
3549 ~~~~~
3550 GetRealArray D 0:2 
3551 ~~~~~
3552
3553 @subsubsection occt_draw_5_5_9  SetComment
3554
3555 Syntax:       
3556 ~~~~~
3557 SetComment dfname entry value
3558 ~~~~~ 
3559
3560 Finds or creates a Comment attribute at *entry* label and sets *value*. 
3561
3562 **Example:** 
3563 ~~~~~
3564 SetComment D 0:2 "My comment"
3565 ~~~~~ 
3566
3567 @subsubsection occt_draw_5_5_10  GetComment
3568
3569 Syntax:       
3570 ~~~~~
3571 GetComment dfname entry
3572 ~~~~~ 
3573
3574 Gets a value of a Comment attribute at *entry* label. 
3575
3576 **Example:** 
3577 ~~~~~
3578 GetComment D 0:2
3579 ~~~~~ 
3580
3581 @subsubsection occt_draw_5_5_11  SetExtStringArray
3582
3583 Syntax:       
3584 ~~~~~
3585 SetExtStringArray dfname entry lower upper value1 value2 …
3586 ~~~~~ 
3587
3588 Finds or creates an *ExtStringArray* attribute at *entry* label with lower and upper bounds and sets *value1*, *value2*… 
3589
3590 **Example:** 
3591 ~~~~~
3592 SetExtStringArray D 0:2 1 3 *string1* *string2* *string3*
3593 ~~~~~ 
3594
3595 @subsubsection occt_draw_5_5_12  GetExtStringArray
3596
3597 Syntax:       
3598 ~~~~~
3599 GetExtStringArray dfname entry
3600 ~~~~~ 
3601
3602 Gets a value of an ExtStringArray attribute at *entry* label. 
3603
3604 **Example:** 
3605 ~~~~~
3606 GetExtStringArray D 0:2 
3607 ~~~~~
3608
3609 @subsubsection occt_draw_5_5_13  SetName
3610
3611 Syntax:       
3612 ~~~~~
3613 SetName dfname entry value 
3614 ~~~~~
3615
3616 Finds or creates a Name attribute at *entry* label and sets *value*. 
3617
3618 **Example:** 
3619 ~~~~~
3620 SetName D 0:2 *My name* 
3621 ~~~~~
3622
3623 @subsubsection occt_draw_5_5_14  GetName
3624
3625 Syntax:       
3626 ~~~~~
3627 GetName dfname entry 
3628 ~~~~~
3629
3630 Gets a value of a Name attribute at *entry* label. 
3631
3632 **Example:** 
3633 ~~~~~
3634 GetName D 0:2 
3635 ~~~~~
3636
3637 @subsubsection occt_draw_5_5_15  SetReference
3638
3639 Syntax:       
3640 ~~~~~
3641 SetReference dfname entry reference 
3642 ~~~~~
3643
3644 Creates a Reference attribute at *entry* label and sets *reference*. 
3645
3646 **Example:** 
3647 ~~~~~
3648 SetReference D 0:2 0:4 
3649 ~~~~~
3650
3651 @subsubsection occt_draw_5_5_16  GetReference
3652
3653 Syntax:       
3654 ~~~~~
3655 GetReference dfname entry 
3656 ~~~~~
3657
3658 Gets a value of a Reference attribute at *entry* label. 
3659
3660 **Example:** 
3661 ~~~~~
3662 GetReference D 0:2 
3663 ~~~~~
3664
3665 @subsubsection occt_draw_5_5_17  SetUAttribute
3666
3667 Syntax:       
3668 ~~~~~
3669 SetUAttribute dfname entry localGUID 
3670 ~~~~~
3671
3672 Creates a UAttribute attribute at *entry* label with *localGUID*. 
3673
3674 **Example:** 
3675 ~~~~~
3676 set localGUID "c73bd076-22ee-11d2-acde-080009dc4422" 
3677 SetUAttribute D 0:2 ${localGUID} 
3678 ~~~~~
3679
3680 @subsubsection occt_draw_5_5_18  GetUAttribute
3681
3682 Syntax:       
3683 ~~~~~
3684 GetUAttribute dfname entry loacalGUID 
3685 ~~~~~
3686
3687 Finds a *UAttribute* at *entry* label with *localGUID*. 
3688
3689 **Example:** 
3690 ~~~~~
3691 set localGUID "c73bd076-22ee-11d2-acde-080009dc4422" 
3692 GetUAttribute D 0:2 ${localGUID} 
3693 ~~~~~
3694
3695 @subsubsection occt_draw_5_5_19  SetFunction
3696
3697 Syntax:       
3698 ~~~~~
3699 SetFunction dfname entry ID failure 
3700 ~~~~~
3701
3702 Finds or creates a *Function* attribute at *entry* label with driver ID and *failure* index. 
3703
3704 **Example:** 
3705 ~~~~~
3706 set ID "c73bd076-22ee-11d2-acde-080009dc4422" 
3707 SetFunction D 0:2 ${ID} 1 
3708 ~~~~~
3709
3710 @subsubsection occt_draw_5_5_20  GetFunction
3711
3712 Syntax:       
3713 ~~~~~
3714 GetFunction dfname entry ID failure 
3715 ~~~~~
3716
3717 Finds a Function attribute at *entry* label and sets driver ID to *ID* variable and failure index to *failure* variable. 
3718
3719 **Example:** 
3720 ~~~~~
3721 GetFunction D 0:2 ID failure 
3722 ~~~~~
3723
3724 @subsubsection occt_draw_5_5_21  NewShape
3725
3726 Syntax:       
3727 ~~~~~
3728 NewShape dfname entry [shape] 
3729 ~~~~~
3730
3731 Finds or creates a Shape attribute at *entry* label. Creates or updates the associated *NamedShape* attribute by *shape* if *shape* is defined. 
3732
3733 **Example:** 
3734 ~~~~~
3735 box b 10 10 10 
3736 NewShape D 0:2 b 
3737 ~~~~~
3738
3739 @subsubsection occt_draw_5_5_22  SetShape
3740
3741 Syntax:       
3742 ~~~~~
3743 SetShape dfname entry shape 
3744 ~~~~~
3745
3746 Creates or updates a *NamedShape* attribute at *entry* label by *shape*. 
3747
3748 **Example:** 
3749 ~~~~~
3750 box b 10 10 10 
3751 SetShape D 0:2 b 
3752 ~~~~~
3753
3754 @subsubsection occt_draw_5_5_23  GetShape
3755
3756 Syntax:       
3757 ~~~~~
3758 GetShape2 dfname entry shape 
3759 ~~~~~
3760
3761 Sets a shape from NamedShape attribute associated with *entry* label to *shape* draw variable. 
3762
3763 **Example:** 
3764 ~~~~~
3765 GetShape2 D 0:2 b 
3766 ~~~~~
3767
3768 @subsection occt_draw_5_6  Geometric attributes commands
3769
3770
3771 @subsubsection occt_draw_5_6_1  SetPoint
3772
3773 Syntax:       
3774 ~~~~~
3775 SetPoint dfname entry point
3776 ~~~~~ 
3777
3778 Finds or creates a Point attribute at *entry* label and sets *point* as generated in the associated *NamedShape* attribute. 
3779
3780 **Example:** 
3781 ~~~~~
3782 point p 10 10 10 
3783 SetPoint D 0:2 p 
3784 ~~~~~
3785
3786 @subsubsection occt_draw_5_6_2  GetPoint
3787
3788 Syntax:       
3789 ~~~~~
3790 GetPoint dfname entry [drawname] 
3791 ~~~~~
3792
3793 Gets a vertex from *NamedShape* attribute at *entry* label and sets it to *drawname* variable, if it is defined. 
3794
3795 **Example:** 
3796 ~~~~~
3797 GetPoint D 0:2 p 
3798 ~~~~~
3799
3800 @subsubsection occt_draw_5_6_3  SetAxis
3801
3802 Syntax:       
3803 ~~~~~
3804 SetAxis dfname entry axis 
3805 ~~~~~
3806
3807 Finds or creates an Axis attribute at *entry* label and sets *axis* as generated in the associated *NamedShape* attribute. 
3808
3809 **Example:** 
3810 ~~~~~
3811 line l 10 20 30 100 200 300 
3812 SetAxis D 0:2 l 
3813 ~~~~~
3814
3815 @subsubsection occt_draw_5_6_4  GetAxis
3816
3817 Syntax:       
3818 ~~~~~
3819 GetAxis dfname entry [drawname] 
3820 ~~~~~
3821
3822 Gets a line from *NamedShape* attribute at *entry* label and sets it to *drawname* variable, if it is defined. 
3823
3824 **Example:** 
3825 ~~~~~
3826 GetAxis D 0:2 l 
3827 ~~~~~
3828
3829 @subsubsection occt_draw_5_6_5  SetPlane
3830
3831 Syntax:       
3832 ~~~~~
3833 SetPlane dfname entry plane 
3834 ~~~~~
3835
3836 Finds or creates a Plane attribute at *entry* label and sets *plane* as generated in the associated *NamedShape* attribute. 
3837
3838 **Example:** 
3839 ~~~~~
3840 plane pl 10 20 30 -1 0 0 
3841 SetPlane D 0:2 pl 
3842 ~~~~~
3843
3844 @subsubsection occt_draw_5_6_6  GetPlane
3845
3846 Syntax:       
3847 ~~~~~
3848 GetPlane dfname entry [drawname] 
3849 ~~~~~
3850
3851 Gets a plane from *NamedShape* attribute at *entry* label and sets it to *drawname* variable, if it is defined. 
3852
3853 **Example:** 
3854 ~~~~~
3855 GetPlane D 0:2 pl 
3856 ~~~~~
3857
3858 @subsubsection occt_draw_5_6_7  SetGeometry
3859
3860 Syntax:       
3861 ~~~~~
3862 SetGeometry dfname entry [type] [shape] 
3863 ~~~~~
3864
3865 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*. 
3866
3867 **Example:** 
3868 ~~~~~
3869 point p 10 10 10 
3870 SetGeometry D 0:2 pnt p 
3871 ~~~~~
3872
3873 @subsubsection occt_draw_5_6_8  GetGeometryType
3874
3875 Syntax:       
3876 ~~~~~
3877 GetGeometryType dfname entry
3878 ~~~~~ 
3879
3880 Gets a geometry type from Geometry attribute at *entry* label. 
3881
3882 **Example:** 
3883 ~~~~~
3884 GetGeometryType D 0:2 
3885 ~~~~~
3886
3887 @subsubsection occt_draw_5_6_9  SetConstraint
3888
3889 Syntax:       
3890 ~~~~~
3891 SetConstraint dfname entry keyword geometrie [geometrie …] 
3892 SetConstraint dfname entry "plane" geometrie 
3893 SetConstraint dfname entry "value" value
3894 ~~~~~  
3895
3896 1. Creates a Constraint attribute at *entry* label and sets *keyword* constraint between geometry(ies). 
3897 *keyword* must be one of the following: 
3898 *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* 
3899 2. Sets plane for the existing constraint. 
3900 3. Sets value for the existing constraint. 
3901
3902 **Example:** 
3903 ~~~~~
3904 SetConstraint D 0:2 "value" 5 
3905 ~~~~~
3906
3907 @subsubsection occt_draw_5_6_10  GetConstraint
3908
3909 Syntax:       
3910 ~~~~~
3911 GetConstraint dfname entry
3912 ~~~~~ 
3913
3914 Dumps a Constraint attribute at *entry* label 
3915
3916 **Example:** 
3917 ~~~~~
3918 GetConstraint D 0:2 
3919 ~~~~~
3920
3921 @subsubsection occt_draw_5_6_11  SetVariable
3922
3923 Syntax:       
3924 ~~~~~
3925 SetVariable dfname entry isconstant(0/1) units 
3926 ~~~~~
3927
3928 Creates a Variable attribute at *entry* label and sets *isconstant* flag and *units* as a string. 
3929
3930 **Example:** 
3931 ~~~~~
3932 SetVariable D 0:2 1 "mm" 
3933 ~~~~~
3934
3935 @subsubsection occt_draw_5_6_12  GetVariable
3936
3937 Syntax:       
3938 ~~~~~
3939 GetVariable dfname entry isconstant units 
3940 ~~~~~
3941
3942 Gets an *isconstant* flag and units of a Variable attribute at *entry* label. 
3943
3944 **Example:** 
3945 ~~~~~
3946 GetVariable D 0:2 isconstant units 
3947 puts "IsConstant=${isconstant}" 
3948 puts "Units=${units}" 
3949 ~~~~~
3950
3951 @subsection occt_draw_5_7  Tree attributes commands
3952
3953
3954 @subsubsection occt_draw_5_7_1  RootNode
3955
3956 Syntax:       
3957 ~~~~~
3958 RootNode dfname treenodeentry [ID]
3959 ~~~~~ 
3960
3961 Returns the ultimate father of *TreeNode* attribute identified by its *treenodeentry* and its *ID* (or default ID, if *ID* is not defined). 
3962
3963
3964 @subsubsection occt_draw_5_7_2  SetNode
3965
3966 Syntax:       
3967 ~~~~~
3968 SetNode dfname treenodeentry [ID]
3969 ~~~~~ 
3970
3971 Creates a *TreeNode* attribute on the *treenodeentry* label with its tree *ID* (or assigns a default ID, if the *ID* is not defined). 
3972
3973
3974 @subsubsection occt_draw_5_7_3  AppendNode
3975
3976 Syntax:       
3977 ~~~~~
3978 AppendNode dfname fatherentry childentry [fatherID]
3979 ~~~~~ 
3980
3981
3982 Inserts a *TreeNode* attribute with its tree *fatherID* (or default ID, if *fatherID* is not defined) on *childentry* as last child of *fatherentry*. 
3983
3984
3985
3986
3987 @subsubsection occt_draw_5_7_4  PrependNode
3988
3989 Syntax:       
3990 ~~~~~
3991 PrependNode dfname fatherentry childentry [fatherID]
3992 ~~~~~ 
3993
3994
3995 Inserts a *TreeNode* attribute with its tree *fatherID* (or default ID, if *fatherID* is not defined) on *childentry* as first child of *fatherentry*. 
3996
3997
3998 @subsubsection occt_draw_5_7_5  InsertNodeBefore
3999
4000 Syntax:       
4001 ~~~~~
4002 InsertNodeBefore dfname treenodeentry beforetreenode [ID]
4003 ~~~~~ 
4004
4005 Inserts a *TreeNode* attribute with tree *ID* (or default ID, if *ID* is not defined) *beforetreenode* before *treenodeentry*. 
4006
4007
4008 @subsubsection occt_draw_5_7_6  InsertNodeAfter
4009
4010 Syntax:       
4011 ~~~~~
4012 InsertNodeAfter dfname treenodeentry aftertreenode [ID]
4013 ~~~~~ 
4014
4015 Inserts a *TreeNode* attribute with tree *ID* (or default ID, if *ID* is not defined) *aftertreenode* after *treenodeentry*. 
4016
4017
4018 @subsubsection occt_draw_5_7_7  DetachNode
4019
4020 Syntax:       
4021 ~~~~~
4022 DetachNode dfname treenodeentry [ID]
4023 ~~~~~ 
4024
4025 Removes a *TreeNode* attribute with tree *ID* (or default ID, if *ID* is not defined) from *treenodeentry*. 
4026
4027
4028 @subsubsection occt_draw_5_7_8  ChildNodeIterate
4029
4030 Syntax:       
4031 ~~~~~
4032 ChildNodeIterate dfname treenodeentry alllevels(0/1) [ID]
4033 ~~~~~ 
4034
4035
4036 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.
4037  
4038 **Example:** 
4039 ~~~~~
4040 Label D 0:2 
4041 Label D 0:3 
4042 Label D 0:4 
4043 Label D 0:5 
4044 Label D 0:6 
4045 Label D 0:7 
4046 Label D 0:8 
4047 Label D 0:9 
4048
4049 # Set root node 
4050 SetNode D 0:2 
4051
4052 AppendNode D 0:2 0:4 
4053 AppendNode D 0:2 0:5 
4054 PrependNode D 0:4 0:3 
4055 PrependNode D 0:4 0:8 
4056 PrependNode D 0:4 0:9 
4057
4058 InsertNodeBefore D 0:5 0:6 
4059 InsertNodeAfter D 0:4 0:7 
4060
4061 DetachNode D 0:8 
4062
4063
4064 # List all levels 
4065 ChildNodeIterate D 0:2 1 
4066
4067 ==0:4 
4068 ==0:9 
4069 ==0:3 
4070 ==0:7 
4071 ==0:6 
4072 ==0:5 
4073
4074
4075 # List only first levels 
4076 ChildNodeIterate D 0:2 1 
4077
4078 ==0:4 
4079 ==0:7 
4080 ==0:6 
4081 ==0:5 
4082 ~~~~~
4083
4084 @subsubsection occt_draw_5_7_9  InitChildNodeIterator
4085
4086 Syntax:       
4087 ~~~~~
4088 InitChildNodeIterator dfname treenodeentry alllevels(0/1) [ID]
4089 ~~~~~ 
4090
4091
4092 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. 
4093
4094 **Example:** 
4095 ~~~~~
4096 InitChildNodeIterate D 0:5 1 
4097 set aChildNumber 0 
4098 for {set i 1} {$i < 100} {incr i} { 
4099     if {[ChildNodeMore] == *TRUE*} { 
4100         puts *Tree node = [ChildNodeValue]* 
4101         incr aChildNumber 
4102         ChildNodeNext 
4103     } 
4104
4105 puts "aChildNumber=$aChildNumber"
4106 ~~~~~ 
4107
4108 @subsubsection occt_draw_5_7_10  ChildNodeMore
4109
4110 Syntax:       
4111 ~~~~~
4112 ChildNodeMore
4113 ~~~~~ 
4114
4115 Returns TRUE if there is a current item in the iteration. 
4116
4117
4118 @subsubsection occt_draw_5_7_11  ChildNodeNext
4119
4120 Syntax:       
4121 ~~~~~
4122 ChildNodeNext
4123 ~~~~~ 
4124
4125 Moves to the next Item. 
4126
4127
4128 @subsubsection occt_draw_5_7_12  ChildNodeValue
4129
4130 Syntax:       
4131 ~~~~~
4132 ChildNodeValue
4133 ~~~~~ 
4134
4135 Returns the current treenode of *ChildNodeIterator*. 
4136
4137
4138 @subsubsection occt_draw_5_7_13  ChildNodeNextBrother
4139
4140 Syntax:       
4141 ~~~~~
4142 ChildNodeNextBrother
4143 ~~~~~ 
4144
4145 Moves to the next *Brother*. If there is none, goes up. This method is interesting only with *allLevels* behavior. 
4146
4147
4148 @subsection occt_draw_5_8   Standard presentation commands
4149
4150
4151 @subsubsection occt_draw_5_8_1  AISInitViewer
4152
4153 Syntax:       
4154 ~~~~~
4155 AISInitViewer docname
4156 ~~~~~ 
4157
4158 Creates and sets *AISViewer* attribute at root label, creates AIS viewer window. 
4159
4160 **Example:** 
4161 ~~~~~
4162 AISInitViewer D 
4163 ~~~~~
4164
4165 @subsubsection occt_draw_5_8_2  AISRepaint
4166
4167 Syntax:       
4168 ~~~~~
4169 AISRepaint docname 
4170 ~~~~~
4171
4172 Updates the AIS viewer window. 
4173
4174 **Example:** 
4175 ~~~~~
4176 AISRepaint D 
4177 ~~~~~
4178
4179 @subsubsection occt_draw_5_8_3  AISDisplay
4180
4181 Syntax:       
4182 ~~~~~
4183 AISDisplay docname entry [not_update] 
4184 ~~~~~
4185
4186 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. 
4187
4188 **Example:** 
4189 ~~~~~
4190 AISDisplay D 0:5 
4191 ~~~~~
4192
4193 @subsubsection occt_draw_5_8_4  AISUpdate
4194
4195 Syntax:       
4196 ~~~~~
4197 AISUpdate docname entry 
4198 ~~~~~
4199
4200 Recomputes a presentation of *AISobject* from *entry* label and applies the visualization setting in AIS viewer. 
4201
4202 **Example:** 
4203 ~~~~~
4204 AISUpdate D 0:5 
4205 ~~~~~
4206
4207 @subsubsection occt_draw_5_8_5  AISErase
4208
4209 Syntax:       
4210 ~~~~~
4211 AISErase docname entry 
4212 ~~~~~
4213
4214 Erases *AISobject* of *entry* label in AIS viewer. 
4215
4216 **Example:** 
4217 ~~~~~
4218 AISErase D 0:5 
4219 ~~~~~
4220
4221 @subsubsection occt_draw_5_8_6  AISRemove
4222
4223 Syntax:       
4224 ~~~~~
4225 AISRemove docname entry 
4226 ~~~~~
4227
4228 Erases *AISobject* of *entry* label in AIS viewer, then *AISobject* is removed from *AIS_InteractiveContext*. 
4229
4230 **Example:** 
4231 ~~~~~
4232 AISRemove D 0:5 
4233 ~~~~~
4234
4235 @subsubsection occt_draw_5_8_7  AISSet
4236
4237 Syntax:       
4238 ~~~~~
4239 AISSet docname entry ID 
4240 ~~~~~
4241
4242 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*). 
4243
4244 **Example:** 
4245 ~~~~~
4246 AISSet D 0:5 NS 
4247 ~~~~~
4248
4249 @subsubsection occt_draw_5_8_8  AISDriver
4250
4251 Syntax:       
4252 ~~~~~
4253 AISDriver docname entry [ID] 
4254 ~~~~~
4255
4256 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*). 
4257
4258 **Example:** 
4259 ~~~~~
4260 # Get Driver GUID 
4261 AISDriver D 0:5 
4262 ~~~~~
4263
4264 @subsubsection occt_draw_5_8_9  AISUnset
4265
4266 Syntax:       
4267 ~~~~~
4268 AISUnset docname entry 
4269 ~~~~~
4270
4271 Deletes *AISPresentation* attribute (if it exists) of an *entry* label. 
4272
4273 **Example:** 
4274 ~~~~~
4275 AISUnset D 0:5 
4276 ~~~~~
4277
4278 @subsubsection occt_draw_5_8_10  AISTransparency
4279
4280 Syntax:       
4281 ~~~~~
4282 AISTransparency docname entry [transparency] 
4283 ~~~~~
4284
4285 Sets (if *transparency* is defined) or gets the value of transparency for *AISPresentation* attribute of an *entry* label. 
4286
4287 **Example:** 
4288 ~~~~~
4289 AISTransparency D 0:5 0.5 
4290 ~~~~~
4291
4292 @subsubsection occt_draw_5_8_11  AISHasOwnTransparency
4293
4294 Syntax:       
4295 ~~~~~
4296 AISHasOwnTransparency docname entry 
4297 ~~~~~
4298
4299 Tests *AISPresentation* attribute of an *entry* label by own transparency. 
4300
4301 **Example:** 
4302 ~~~~~
4303 AISHasOwnTransparency D 0:5 
4304 ~~~~~
4305
4306 @subsubsection occt_draw_5_8_12  AISMaterial
4307
4308 Syntax:       
4309 ~~~~~
4310 AISMaterial docname entry [material] 
4311 ~~~~~
4312
4313 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). 
4314
4315 **Example:** 
4316 ~~~~~
4317 AISMaterial D 0:5 5 
4318 ~~~~~
4319
4320 @subsubsection occt_draw_5_8_13  AISHasOwnMaterial
4321
4322 Syntax:       
4323 ~~~~~
4324 AISHasOwnMaterial docname entry 
4325 ~~~~~
4326
4327 Tests *AISPresentation* attribute of an *entry* label by own material. 
4328
4329 **Example:** 
4330 ~~~~~
4331 AISHasOwnMaterial D 0:5 
4332 ~~~~~
4333
4334 @subsubsection occt_draw_5_8_14  AISColor
4335
4336 Syntax:       
4337 ~~~~~
4338 AISColor docname entry [color] 
4339 ~~~~~
4340
4341 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*). 
4342
4343 **Example:** 
4344 ~~~~~
4345 AISColor D 0:5 25 
4346 ~~~~~
4347
4348 @subsubsection occt_draw_5_8_15  AISHasOwnColor
4349
4350 Syntax:       
4351 ~~~~~
4352 AISHasOwnColor docname entry 
4353 ~~~~~
4354
4355 Tests *AISPresentation* attribute of an *entry* label by own color. 
4356
4357 **Example:** 
4358 ~~~~~
4359 AISHasOwnColor D 0:5 
4360 ~~~~~
4361
4362 @section occt_draw_6 Geometry commands
4363
4364 @subsection occt_draw_6_1 Overview
4365
4366 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. 
4367
4368 In the context of Geometry, Draw includes the following types of variable: 
4369
4370   * 2d and 3d points
4371   * The 2d curve, which corresponds to *Curve* in *Geom2d*.
4372   * 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>.
4373   
4374 Draw geometric variables never share data; the *copy* command will always make a complete copy of the content of the variable. 
4375
4376 The following topics are covered in the nine sections of this chapter: 
4377
4378   * **Curve creation** deals with the various types of curves and how to create them.
4379   * **Surface creation** deals with the different types of surfaces and how to create them.
4380   * **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.
4381   * **Geometric transformations** covers translation, rotation, mirror image and point scaling transformations.
4382   * **Curve and Surface Analysis** deals with the commands used to compute points, derivatives and curvatures.
4383   * **Intersections** presents intersections of surfaces and curves.
4384   * **Approximations** deals with creating curves and surfaces from a set of points.
4385   * **Constraints** concerns construction of 2d circles and lines by constraints such as tangency.
4386   * **Display** describes commands to control the display of curves and surfaces.
4387
4388 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. 
4389
4390 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. 
4391
4392 @subsection occt_draw_6_2  Curve creation
4393
4394 This section deals with both points and curves. Types of curves are: 
4395
4396   * Analytical curves such as lines, circles, ellipses, parabolas, and hyperbolas.
4397   * Polar curves such as bezier curves and bspline curves.
4398   * 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.
4399   * NURBS can be created from other curves using *convert* in the *Surface Creation* section.
4400   * Curves can be created from the isoparametric lines of surfaces by the *uiso* and *viso* commands.
4401   * 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.
4402
4403 Curves are displayed with an arrow showing the last parameter. 
4404
4405
4406 @subsubsection occt_draw_6_2_1 point
4407
4408 Syntax:      
4409 ~~~~~
4410 point name x y [z] 
4411 ~~~~~
4412   
4413 Creates a 2d or 3d point, depending on the number of arguments. 
4414
4415 **Example:**
4416 ~~~~~
4417 # 2d point 
4418 point p1 1 2 
4419
4420 # 3d point 
4421 point p2 10 20 -5 
4422 ~~~~~
4423   
4424 @subsubsection occt_draw_6_2_2  line
4425
4426 Syntax:      
4427 ~~~~~
4428 line name x y [z] dx dy [dz]
4429 ~~~~~ 
4430
4431   
4432 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. 
4433
4434 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. 
4435
4436 **Example:** 
4437 ~~~~~
4438 # a 2d line at 45 degrees of the X axis 
4439 line l 2 0 1 1 
4440
4441 # a 3d line through the point 10 0 0 and parallel to Z 
4442 line l 10 0 0 0 0 1 
4443 ~~~~~
4444
4445 @subsubsection occt_draw_6_2_3  circle
4446
4447 Syntax:      
4448 ~~~~~
4449 circle name x y [z [dx dy dz]] [ux uy [uz]] radius
4450 ~~~~~ 
4451
4452 Creates a 2d or a 3d circle. 
4453
4454 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. 
4455
4456 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*. 
4457
4458 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. 
4459
4460 **Example:** 
4461 ~~~~~
4462 # A 2d circle of radius 5 centered at 10,-2 
4463 circle c1 10 -2 5 
4464
4465 # another 2d circle with a user defined origin 
4466 # the point of parameter 0 on this circle will be 
4467 # 1+sqrt(2),1+sqrt(2) 
4468 circle c2 1 1 1 1 2 
4469
4470 # a 3d circle, center 10 20 -5, axis Z, radius 17 
4471 circle c3 10 20 -5 17 
4472
4473 # same 3d circle with axis Y 
4474 circle c4 10 20 -5 0 1 0 17 
4475
4476 # full 3d circle, axis X, origin on Z 
4477 circle c5 10 20 -5 1 0 0 0 0 1 17 
4478 ~~~~~
4479
4480 @subsubsection occt_draw_6_2_4  ellipse
4481
4482 Syntax: 
4483 ~~~~~
4484 ellipse name x y [z [dx dy dz]] [ux uy [uz]] firstradius secondradius 
4485 ~~~~~
4486
4487 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: 
4488
4489 ~~~~~
4490 P(u) = O + firstradius*cos(u)*Xdir + secondradius*sin(u)*Ydir 
4491 ~~~~~
4492 where: 
4493
4494   * P is the point of parameter *u*,
4495   * *O, Xdir* and *Ydir* are respectively the origin, *X Direction* and *Y Direction* of its local coordinate system.
4496  
4497 **Example:**
4498 ~~~~~
4499 # default 2d ellipse 
4500 ellipse e1 10 5 20 10 
4501
4502 # 2d ellipse at angle 60 degree 
4503 ellipse e2 0 0 1 2 30 5 
4504
4505 # 3d ellipse, in the XY plane 
4506 ellipse e3 0 0 0 25 5 
4507
4508 # 3d ellipse in the X,Z plane with axis 1, 0 ,1 
4509 ellipse e4 0 0 0 0 1 0 1 0 1 25 5 
4510 ~~~~~
4511
4512 @subsubsection occt_draw_6_2_5  hyperbola
4513
4514 Syntax:      
4515 ~~~~~
4516 hyperbola name x y [z [dx dy dz]] [ux uy [uz]] firstradius secondradius
4517 ~~~~~ 
4518
4519 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. 
4520
4521 The Draw hyperbola is parameterized as follows: 
4522 ~~~~~
4523 P(U) = O + firstradius*Cosh(U)*XDir + secondradius*Sinh(U)*YDir 
4524 ~~~~~
4525 where: 
4526
4527   * *P* is the point of parameter *U*,
4528   * *O, XDir* and *YDir* are respectively the origin, *X Direction* and *YDirection* of its local coordinate system. 
4529
4530 **Example:** 
4531 ~~~~~
4532 # default 2d hyperbola, with asymptotes 1,1 -1,1 
4533 hyperbola h1 0 0 30 30 
4534
4535 # 2d hyperbola at angle 60 degrees 
4536 hyperbola h2 0 0 1 2 20 20 
4537
4538 # 3d hyperbola, in the XY plane 
4539 hyperbola h3 0 0 0 50 50 
4540 ~~~~~
4541
4542 @subsubsection occt_draw_6_2_6  parabola
4543
4544 Syntax:      
4545 ~~~~~
4546 parabola name x y [z [dx dy dz]] [ux uy [uz]] FocalLength 
4547 ~~~~~
4548
4549 Creates a 2d or 3d parabola. in the axis system defined by the first arguments. The origin is the apex of the parabola. 
4550
4551 The *Geom_Parabola* is parameterized as follows: 
4552
4553 ~~~~~
4554 P(u) = O + u*u/(4.*F)*XDir + u*YDir 
4555 ~~~~~
4556
4557 where: 
4558   * *P* is the point of parameter *u*,
4559   * *O, XDir* and *YDir* are respectively the origin, *X Direction* and *Y Direction* of its local coordinate system,
4560   * *F* is the focal length of the parabola.
4561
4562 **Example:** 
4563 ~~~~~
4564 # 2d parabola 
4565 parabola p1 0 0 50 
4566
4567 # 2d parabola with convexity +Y 
4568 parabola p2 0 0 0 1 50 
4569
4570 # 3d parabola in the Y-Z plane, convexity +Z 
4571 parabola p3 0 0 0 1 0 0 0 0 1 50 
4572 ~~~~~
4573
4574 @subsubsection occt_draw_6_2_7  beziercurve, 2dbeziercurve
4575
4576 Syntax:      
4577 ~~~~~
4578 beziercurve name nbpole pole, [weight] 
4579 2dbeziercurve name nbpole pole, [weight]
4580 ~~~~~ 
4581
4582 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. 
4583
4584 **Example:** 
4585 ~~~~~
4586 # a rational 2d bezier curve (arc of circle) 
4587 2dbeziercurve ci 3 0 0 1 10 0 sqrt(2.)/2. 10 10 1 
4588
4589 # a 3d bezier curve, not rational 
4590 beziercurve cc 4 0 0 0 10 0 0 10 0 10 10 10 10 
4591 ~~~~~
4592
4593 @subsubsection occt_draw_6_2_8  bsplinecurve, 2dbsplinecurve, pbsplinecurve, 2dpbsplinecurve
4594
4595 Syntax:      
4596 ~~~~~
4597 bsplinecurve   name degree nbknots knot, umult pole, weight
4598 2dbsplinecurve name degree nbknots knot, umult pole, weight
4599
4600 pbsplinecurve   name degree nbknots knot, umult pole, weight (periodic)
4601 2dpbsplinecurve name degree nbknots knot, umult pole, weight (periodic)
4602 ~~~~~
4603
4604 Creates 2d or 3d bspline curves; the **pbsplinecurve** and **2dpbsplinecurve** commands create periodic bspline curves. 
4605
4606 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. 
4607
4608 The table of knots is an increasing sequence of reals without repetition. 
4609 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. 
4610
4611 The poles must be given with their weights, use weights of 1 for a non rational curve, the number of poles must be: 
4612
4613   * For a non periodic curve: Sum of multiplicities - degree + 1
4614   * For a periodic curve: Sum of multiplicities - last multiplicity
4615
4616 **Example:** 
4617 ~~~~~
4618 # a bspline curve with 4 poles and 3 knots 
4619 bsplinecurve bc 2 3 0 3 1 1 2 3 \ 
4620 10 0 7 1 7 0 7 1 3 0 8 1 0 0 7 1 
4621 # a 2d periodic circle (parameter from 0 to 2*pi !!) 
4622 dset h sqrt(3)/2 
4623 2dpbsplinecurve c 2 \ 
4624 4 0 2 pi/1.5 2 pi/0.75 2 2*pi 2 \ 
4625 0 -h/3 1 \ 
4626 0.5 -h/3 0.5 \ 
4627 0.25 h/6 1 \ 
4628 0 2*h/3 0.5 \ 
4629 -0.25 h/6 1 \ 
4630 -0.5 -h/3 0.5 \ 
4631 0 -h/3 1 
4632 ~~~~~
4633
4634 **Note** that you can create the **NURBS** subset of bspline curves and surfaces by trimming analytical curves and surfaces and executing the command *convert*. 
4635
4636
4637 @subsubsection occt_draw_6_2_9  uiso, viso
4638
4639 Syntax:      
4640 ~~~~~
4641 uiso name surface u 
4642 viso name surface u 
4643 ~~~~~
4644
4645 Creates a U or V isoparametric curve from a surface. 
4646
4647 **Example:** 
4648 ~~~~~
4649 # create a cylinder and extract iso curves 
4650
4651 cylinder c 10 
4652 uiso c1 c pi/6 
4653 viso c2 c 
4654 ~~~~~
4655
4656 **Note** that this cannot be done from offset surfaces.
4657
4658
4659 @subsubsection occt_draw_6_2_10  to3d, to2d
4660
4661 Syntax:      
4662 ~~~~~
4663 to3d name curve2d [plane] 
4664 to2d name curve3d [plane] 
4665 ~~~~~
4666
4667 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. 
4668
4669 **Example:** 
4670 ~~~~~
4671 # the following commands 
4672 circle c 0 0 5 
4673 plane p -2 1 0 1 2 3 
4674 to3d c c p 
4675
4676 # will create the same circle as 
4677 circle c -2 1 0 1 2 3 5 
4678 ~~~~~
4679
4680 See also: **project** 
4681
4682
4683 @subsubsection occt_draw_6_2_11  project
4684
4685 Syntax:      
4686 ~~~~~
4687 project name curve3d surface 
4688 ~~~~~
4689
4690 Computes a 2d curve in the parametric space of a surface corresponding to a 3d curve. This can only be used on analytical surfaces. 
4691
4692 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. 
4693
4694 ~~~~~
4695 cylinder c 5 
4696 plane p 0 0 0 0 1 1 
4697 intersect i c p 
4698 project i2d i c 
4699 ~~~~~
4700
4701 @subsection occt_draw_6_3  Surface creation
4702
4703 The following types of surfaces exist: 
4704   * Analytical surfaces: plane, cylinder, cone, sphere, torus;
4705   * Polar surfaces: bezier surfaces, bspline surfaces;
4706   * Trimmed and Offset surfaces;
4707   * Surfaces produced by Revolution and Extrusion, created from curves with the *revsurf* and *extsurf*;
4708   * NURBS surfaces.
4709
4710 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. 
4711
4712 @subsubsection occt_draw_6_3_1  plane
4713
4714 Syntax:      
4715 ~~~~~
4716 plane name [x y z [dx dy dz [ux uy uz]]]
4717 ~~~~~ 
4718
4719 Creates an infinite plane. 
4720
4721 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. 
4722
4723 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*. 
4724
4725 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. 
4726
4727 Note that this definition will be used for all analytical surfaces. 
4728
4729 **Example:** 
4730 ~~~~~
4731 # a plane through the point 10,0,0 perpendicular to X 
4732 # with U direction on Y 
4733 plane p1 10 0 0 1 0 0 0 1 0 
4734
4735 # an horixontal plane with origin 10, -20, -5 
4736 plane p2 10 -20 -5 
4737 ~~~~~
4738
4739 @subsubsection occt_draw_6_3_2  cylinder
4740
4741 Syntax:      
4742 ~~~~~
4743 cylinder name [x y z [dx dy dz [ux uy uz]]] radius 
4744 ~~~~~
4745
4746 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. 
4747
4748 **Example:** 
4749 ~~~~~
4750 # a cylinder on the default Z axis, radius 10 
4751 cylinder c1 10 
4752
4753 # a cylinder, also along the Z axis but with origin 5, 
4754 10, -3 
4755 cylinder c2 5 10 -3 10 
4756
4757 # a cylinder through the origin and on a diagonal 
4758 # with longitude pi/3 and latitude pi/4 (euler angles) 
4759 dset lo pi/3. la pi/4. 
4760 cylinder c3 0 0 0 cos(la)*cos(lo) cos(la)*sin(lo) 
4761 sin(la) 10 
4762 ~~~~~
4763
4764 @subsubsection occt_draw_6_3_3  cone
4765
4766 Syntax:      
4767 ~~~~~
4768 cone name [x y z [dx dy dz [ux uy uz]]] semi-angle radius 
4769 ~~~~~
4770 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. 
4771
4772 **Example:** 
4773 ~~~~~
4774 # a cone at 45 degrees at the origin on Z 
4775 cone c1 45 0 
4776
4777 # a cone on axis Z with radius r1 at z1 and r2 at z2 
4778 cone c2 0 0 z1 180.*atan2(r2-r1,z2-z1)/pi r1 
4779 ~~~~~
4780
4781 @subsubsection occt_draw_6_3_4  sphere
4782
4783 Syntax:      
4784 ~~~~~
4785 sphere name [x y z [dx dy dz [ux uy uz]]] radius 
4786 ~~~~~
4787
4788 Creates a sphere in the local coordinate system defined in the **plane** command. The sphere is centered at the origin. 
4789
4790 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. 
4791
4792 **Example:**
4793 ~~~~~ 
4794 # a sphere at the origin 
4795 sphere s1 10 
4796 # a sphere at 10 10 10, with poles on the axis 1,1,1 
4797 sphere s2 10 10 10 1 1 1 10 
4798 ~~~~~
4799
4800 @subsubsection occt_draw_6_3_5  torus
4801
4802 Syntax:      
4803 ~~~~~
4804 torus name [x y z [dx dy dz [ux uy uz]]] major minor
4805 ~~~~~ 
4806
4807 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. 
4808
4809 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. 
4810
4811 **Example:** 
4812 ~~~~~
4813 # a torus at the origin 
4814 torus t1 20 5 
4815
4816 # a torus in another coordinate system 
4817 torus t2 10 5 -2 2 1 0 20 5 
4818 ~~~~~
4819
4820
4821 @subsubsection occt_draw_6_3_6  beziersurf
4822
4823 Syntax:      
4824 ~~~~~
4825 beziersurf name nbupoles nbvolpes pole, [weight] 
4826 ~~~~~
4827
4828 Use this command to create a bezier surface, rational or non-rational. First give the numbers of poles in the u and v directions. 
4829
4830 Then give the poles in the following order: *pole(1, 1), pole(nbupoles, 1), pole(1, nbvpoles)* and *pole(nbupoles, nbvpoles)*. 
4831
4832 Weights may be omitted, but if you give one weight you must give all of them. 
4833
4834 **Example:** 
4835 ~~~~~
4836 # a non-rational degree 2,3 surface 
4837 beziersurf s 3 4 \ 
4838 0 0 0 10 0 5 20 0 0 \ 
4839 0 10 2 10 10 3 20 10 2 \ 
4840 0 20 10 10 20 20 20 20 10 \ 
4841 0 30 0 10 30 0 20 30 0 
4842 ~~~~~
4843
4844 @subsubsection occt_draw_6_3_7   bsplinesurf, upbsplinesurf, vpbsplinesurf, uvpbsplinesurf
4845
4846 Syntax:     
4847 ~~~~~
4848 bsplinesurf name udegree nbuknots uknot umult ... nbvknot vknot 
4849 vmult ... x y z w ... 
4850 upbsplinesurf ... 
4851 vpbsplinesurf ... 
4852 uvpbsplinesurf ... 
4853 ~~~~~
4854
4855 * **bsplinesurf** generates bspline surfaces;
4856 * **upbsplinesurf** creates a bspline surface periodic in u; 
4857 * **vpbsplinesurf** creates one periodic in v; 
4858 * **uvpbsplinesurf** creates one periodic in uv. 
4859
4860 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. 
4861
4862 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. 
4863
4864 **Example:** 
4865 ~~~~~
4866 # create a bspline surface of degree 1 2 
4867 # with two knots in U and three in V 
4868 bsplinesurf s \ 
4869 1 2 0 2 1 2 \ 
4870 2 3 0 3 1 1 2 3 \ 
4871 0 0 0 1 10 0 5 1 \ 
4872 0 10 2 1 10 10 3 1 \ 
4873 0 20 10 1 10 20 20 1 \ 
4874 0 30 0 1 10 30 0 1 
4875 ~~~~~
4876
4877
4878 @subsubsection occt_draw_6_3_8  trim, trimu, trimv
4879
4880 Syntax:      
4881 ~~~~~
4882 trim newname name [u1 u2 [v1 v2] [usense vsense]]
4883 trimu newname name u1 u2 [usense]
4884 trimv newname name v1 v2 [vsense]
4885 ~~~~~
4886
4887 The **trim** commands create trimmed curves or trimmed surfaces. Note that trimmed curves and surfaces are classes of the *Geom* package. 
4888 * *trim* creates either a new trimmed curve from a curve or a new trimmed surface in u and v from a surface.
4889 * *trimu* creates a u-trimmed surface, 
4890 * *trimv* creates a v-trimmed surface. 
4891
4892 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. 
4893
4894 **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. 
4895
4896 **Example:** 
4897 ~~~~~
4898 # create a 3d circle 
4899 circle c 0 0 0 10 
4900
4901 # trim it, use the same variable, the original is 
4902 deleted 
4903 trim c c 0 pi/2 
4904
4905 # the original can be recovered! 
4906 trim orc c 
4907
4908 # trim again 
4909 trim c c pi/4 pi/2 
4910
4911 # the original is not the trimmed curve but the basis 
4912 trim orc c 
4913
4914 # as the circle is periodic, the two following commands 
4915 are identical 
4916 trim cc c pi/2 0 
4917 trim cc c pi/2 2*pi 
4918
4919 # trim an infinite cylinder 
4920 cylinder cy 10 
4921 trimv cy cy 0 50 
4922 ~~~~~
4923
4924 @subsubsection occt_draw_6_3_9  offset
4925
4926 Syntax:      
4927 ~~~~~
4928 offset name basename distance [dx dy dz]
4929 ~~~~~ 
4930
4931 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. 
4932
4933 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. 
4934
4935 The offset curve or surface copies the basic geometry, which can be modified later. 
4936
4937 **Example:** 
4938 ~~~~~
4939 # graphic demonstration that the outline of a torus 
4940 # is the offset of an ellipse 
4941 smallview +X+Y 
4942 dset angle pi/6 
4943 torus t 0 0 0 0 cos(angle) sin(angle) 50 20 
4944 fit 
4945 ellipse e 0 0 0 50 50*sin(angle) 
4946 # note that the distance can be negative 
4947 offset l1 e 20 0 0 1 
4948 ~~~~~
4949
4950 @subsubsection occt_draw_6_3_10  revsurf
4951
4952 Syntax:      
4953 ~~~~~
4954 revsurf name curvename x y z dx dy dz
4955 ~~~~~ 
4956
4957 Creates a surface of revolution from a 3d curve. 
4958
4959 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. 
4960
4961 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. 
4962
4963 **Example:** 
4964 ~~~~~
4965 # another way of creating a torus like surface 
4966 circle c 50 0 0 20 
4967 revsurf s c 0 0 0 0 1 0 
4968 ~~~~~
4969
4970 @subsubsection occt_draw_6_3_11  extsurf
4971
4972 Syntax:      
4973 ~~~~~
4974 extsurf newname curvename dx dy dz 
4975 ~~~~~
4976
4977 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. 
4978
4979 In the syntax, *dx,dy,dz* gives the direction of extrusion. 
4980
4981 To parameterize a surface of extrusion: *u* is the parameter along the extruded curve; the *v* parameter is along the direction of extrusion. 
4982
4983 **Example:** 
4984 ~~~~~
4985 # an elliptic cylinder 
4986 ellipse e 0 0 0 10 5 
4987 extsurf s e 0 0 1 
4988 # to make it finite 
4989 trimv s s 0 10 
4990 ~~~~~
4991
4992 @subsubsection occt_draw_6_3_12  convert
4993
4994 Syntax:      
4995 ~~~~~
4996 convert newname name 
4997 ~~~~~
4998
4999 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.
5000  
5001 **Example:** 
5002 ~~~~~
5003 # turn a 2d arc of a circle into a 2d NURBS 
5004 circle c 0 0 5 
5005 trim c c 0 pi/3 
5006 convert c1 c 
5007
5008 # an easy way to make a planar bspline surface 
5009 plane p 
5010 trim p p -1 1 -1 1 
5011 convert p1 p 
5012 ~~~~~
5013
5014 **Note** that offset curves and surfaces are not processed by this command.
5015
5016 @subsection occt_draw_6_4  Curve and surface modifications
5017
5018 Draw provides commands to modify curves and surfaces, some of them are general, others restricted to bezier curves or bsplines. 
5019
5020 General modifications: 
5021
5022   * Reversing the parametrization: **reverse**, **ureverse**, **vreverse**
5023
5024 Modifications for both bezier curves and bsplines: 
5025
5026   * Exchanging U and V on a surface: **exchuv**
5027   * Segmentation: **segment**, **segsur**
5028   * Increasing the degree: **incdeg**, **incudeg**, **incvdeg**
5029   * Moving poles: **cmovep**, **movep**, **movecolp**, **moverowp**
5030
5031 Modifications for bezier curves: 
5032
5033   * Adding and removing poles: **insertpole**, **rempole**, **remcolpole**, **remrowpole**
5034
5035 Modifications for bspline: 
5036
5037   * Inserting and removing knots: **insertknot**, **remknot**, **insertuknot**, **remuknot**, **insetvknot**, **remvknot**
5038   * Modifying periodic curves and surfaces: **setperiodic**, **setnotperiodic**, **setorigin**, **setuperiodic**, **setunotperiodic**, **setuorigin**, **setvperiodic**, **setvnotperiodic**, **setvorigin**
5039
5040
5041
5042 @subsubsection occt_draw_6_4_1  reverse, ureverse, vreverse
5043
5044
5045 Syntax:            
5046 ~~~~~
5047 reverse curvename 
5048 ureverse surfacename 
5049 vreverse surfacename 
5050 ~~~~~
5051
5052 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. 
5053
5054 **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. 
5055
5056 Reversing a parameter on an analytical surface may create an indirect coordinate system. 
5057
5058 **Example:** 
5059 ~~~~~
5060 # reverse a trimmed 2d circle 
5061 circle c 0 0 5 
5062 trim c c pi/4 pi/2 
5063 reverse c 
5064
5065 # dumping c will show that it is now trimmed between 
5066 # 3*pi/2 and 7*pi/4 i.e. 2*pi-pi/2 and 2*pi-pi/4 
5067 ~~~~~
5068
5069 @subsubsection occt_draw_6_4_2  exchuv
5070
5071 Syntax:                 
5072 ~~~~~
5073 exchuv surfacename 
5074 ~~~~~
5075
5076 For a bezier or bspline surface this command exchanges the u and v parameters. 
5077
5078 **Example:** 
5079 ~~~~~
5080 # exchanging u and v on a spline (made from a cylinder) 
5081 cylinder c 5 
5082 trimv c c 0 10 
5083 convert c1 c 
5084 exchuv c1 
5085 ~~~~~
5086
5087 @subsubsection occt_draw_6_4_3  segment, segsur
5088
5089 Syntax:                  
5090 ~~~~~
5091 segment curve Ufirst Ulast 
5092 segsur surface Ufirst Ulast Vfirst Vlast 
5093 ~~~~~
5094
5095 **segment** and **segsur** segment a bezier curve and a bspline curve or surface respectively. 
5096
5097 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*. 
5098
5099 This command must not be confused with **trim** which creates a new geometry. 
5100
5101 **Example:** 
5102 ~~~~~
5103 # segment a bezier curve in half 
5104 beziercurve c 3 0 0 0 10 0 0 10 10 0 
5105 segment c ufirst ulast 
5106 ~~~~~
5107
5108 @subsubsection occt_draw_6_4_4  iincudeg, incvdeg
5109
5110 Syntax:      
5111 ~~~~~
5112 incudeg surfacename newdegree 
5113 incvdeg surfacename newdegree 
5114 ~~~~~
5115
5116 **incudeg** and **incvdeg** increase the degree in the U or V parameter of a bezier or bspline surface.
5117  
5118 **Example:** 
5119 ~~~~~
5120 # make a planar bspline and increase the degree to 2 3 
5121 plane p 
5122 trim p p -1 1 -1 1 
5123 convert p1 p 
5124 incudeg p1 2 
5125 incvdeg p1 3 
5126 ~~~~~
5127
5128 **Note** that the geometry is modified.
5129
5130
5131 @subsubsection occt_draw_6_4_5  cmovep, movep, movecolp, moverowp
5132
5133 Syntax:      
5134 ~~~~~
5135 cmovep curve index dx dy [dz] 
5136 movep surface uindex vindex dx dy dz 
5137 movecolp surface uindex dx dy dz 
5138 moverowp surface vindex dx dy dz 
5139 ~~~~~
5140
5141 **move** methods translate poles of a bezier curve, a bspline curve or a bspline surface. 
5142 * **cmovep** and **movep** translate one pole with a given index. 
5143 * **movecolp** and **moverowp** translate a whole column (expressed by the *uindex*) or row (expressed by the *vindex*) of poles. 
5144
5145 **Example:** 
5146 ~~~~~
5147 # start with a plane 
5148 # transform to bspline, raise degree and add relief 
5149 plane p 
5150 trim p p -10 10 -10 10 
5151 convert p1 p 
5152 incud p1 2 
5153 incvd p1 2 
5154 movecolp p1 2 0 0 5 
5155 moverowp p1 2 0 0 5 
5156 movep p1 2 2 0 0 5 
5157 ~~~~~
5158
5159 @subsubsection occt_draw_6_4_6  insertpole, rempole, remcolpole, remrowpole
5160
5161 Syntax:                  
5162 ~~~~~
5163 insertpole curvename index x y [z] [weight] 
5164 rempole curvename index 
5165 remcolpole surfacename index 
5166 remrowpole surfacename index
5167 ~~~~~ 
5168
5169 **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. 
5170
5171 **rempole** removes a pole from a 2d or 3d bezier curve. Leave at least two poles in the curves. 
5172
5173 **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. 
5174
5175 **Example:** 
5176 ~~~~~
5177 # start with a segment, insert a pole at end 
5178 # then remove the central pole 
5179 beziercurve c 2 0 0 0 10 0 0 
5180 insertpole c 2 10 10 0 
5181 rempole c 2 
5182 ~~~~~
5183
5184 @subsubsection occt_draw_6_4_7  insertknot, insertuknot, insertvknot
5185
5186 Syntax:                  
5187 ~~~~~
5188 insertknot name knot [mult = 1] [knot mult ...] 
5189 insertuknot surfacename knot mult 
5190 insertvknot surfacename knot mult 
5191 ~~~~~
5192
5193 **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. 
5194
5195 **insertuknot** and **insertvknot** insert knots in a surface. 
5196
5197 **Example:** 
5198 ~~~~~
5199 # create a cylindrical surface and insert a knot 
5200 cylinder c 10 
5201 trim c c 0 pi/2 0 10 
5202 convert c1 c 
5203 insertuknot c1 pi/4 1 
5204 ~~~~~
5205
5206 @subsubsection occt_draw_6_4_8  remknot, remuknot, remvknot
5207
5208 Syntax:      
5209 ~~~~~
5210 remknot index [mult] [tol] 
5211 remuknot index [mult] [tol] 
5212 remvknot index [mult] [tol] 
5213 ~~~~~
5214
5215 **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. 
5216
5217 By default, if no tolerance is given, the knot will always be removed. 
5218
5219 **Example:** 
5220 ~~~~~
5221 # bspline circle, remove a knot 
5222 circle c 0 0 5 
5223 convert c1 c 
5224 incd c1 5 
5225 remknot c1 2 
5226 ~~~~~
5227
5228 **Note** that Curves or Surfaces may be modified.
5229
5230
5231 @subsubsection occt_draw_6_4_9  setperiodic, setnotperiodic, setuperiodic, setunotperiodic, setvperiodic, setvnotperiodic
5232
5233 Syntax:      
5234 ~~~~~
5235 setperiodic curve 
5236 setnotperiodic curve 
5237 setuperiodic surface 
5238 setunotperiodic surface 
5239 setvperiodic surface 
5240 setvnotperiodic surface
5241 ~~~~~ 
5242
5243 **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. 
5244
5245 **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. 
5246
5247 **Example:** 
5248 ~~~~~
5249 # a circle deperiodicized 
5250 circle c 0 0 5 
5251 convert c1 c 
5252 setnotperiodic c1 
5253 ~~~~~
5254
5255 @subsubsection occt_draw_6_4_10  setorigin, setuorigin, setvorigin
5256
5257 Syntax:      
5258 ~~~~~
5259 setorigin curvename index 
5260 setuorigin surfacename index 
5261 setuorigin surfacename index 
5262 ~~~~~
5263
5264 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. 
5265
5266 **Example:** 
5267 ~~~~~
5268 # a torus with new U and V origins 
5269 torus t 20 5 
5270 convert t1 t 
5271 setuorigin t1 2 
5272 setvorigin t1 2
5273 ~~~~~ 
5274
5275
5276 @subsection occt_draw_6_5  Transformations
5277
5278 Draw provides commands to apply linear transformations to geometric objects: they include translation, rotation, mirroring and scaling. 
5279
5280 @subsubsection occt_draw_6_5_1  translate, dtranslate
5281
5282 Syntax:                  
5283 ~~~~~
5284 translate name [names ...] dx dy dz 
5285 2dtranslate name [names ...] dx dy 
5286 ~~~~~
5287
5288 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. 
5289
5290 For 2d points or curves, use the **2dtranslate** command. 
5291
5292 **Example:** 
5293 ~~~~~
5294 # 3d tranlation 
5295 point p 10 20 30 
5296 circle c 10 20 30 5 
5297 torus t 10 20 30 5 2 
5298 translate p c t 0 0 15
5299 ~~~~~
5300  
5301 *NOTE* 
5302 *Objects are modified by this command.* 
5303
5304 @subsubsection occt_draw_6_5_2  rotate, 2drotate
5305
5306 Syntax:      
5307 ~~~~~
5308 rotate name [name ...] x y z dx dy dz angle 
5309 2drotate name [name ...] x y angle
5310 ~~~~~ 
5311
5312 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. 
5313
5314 For a 2d rotation, you need only give the center point and the angle. In 2d or 3d, the angle can be negative. 
5315
5316 **Example:** 
5317 ~~~~~
5318 # make a helix of circles. create a script file with 
5319 this code and execute it using **source**. 
5320 circle c0 10 0 0 3 
5321 for {set i 1} {$i <= 10} {incr i} { 
5322 copy c[expr $i-1] c$i 
5323 translate c$i 0 0 3 
5324 rotate c$i 0 0 0 0 0 1 36 
5325
5326 ~~~~~
5327
5328 @subsubsection occt_draw_6_5_3  pmirror, lmirror, smirror, dpmirror, dlmirror
5329
5330 Syntax:      
5331 ~~~~~
5332 pmirror name [names ...] x y z 
5333 lmirror name [names ...] x y z dx dy dz 
5334 smirror name [names ...] x y z dx dy dz 
5335 2dpmirror name [names ...] x y 
5336 2dlmirror name [names ...] x y dx dy 
5337 ~~~~~
5338
5339 The mirror commands perform a mirror transformation of 2d or 3d geometry. 
5340
5341 * **pmirror** is the point mirror, mirroring 3d curves and surfaces about a point of symmetry. 
5342 * **lmirror** is the line mirror commamd, mirroring 3d curves and surfaces about an axis of symmetry.
5343 * **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. 
5344 * **2dpmirror** is the point mirror in 2D.
5345 * **2dlmirror** is the axis symmetry mirror in 2D.
5346
5347 **Example:** 
5348 ~~~~~
5349 # build 3 images of a torus 
5350 torus t 10 10 10 1 2 3 5 1 
5351 copy t t1 
5352 pmirror t1 0 0 0 
5353 copy t t2 
5354 lmirror t2 0 0 0 1 0 0 
5355 copy t t3 
5356 smirror t3 0 0 0 1 0 0 
5357 ~~~~~
5358
5359 @subsubsection occt_draw_6_5_4  pscale, dpscale
5360
5361 Syntax:                  
5362 ~~~~~
5363 pscale name [name ...] x y z s 
5364 2dpscale name [name ...] x y s 
5365 ~~~~~
5366
5367 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**.
5368
5369  
5370 **Example:** 
5371 ~~~~~
5372 # double the size of a sphere 
5373 sphere s 0 0 0 10 
5374 pscale s 0 0 0 2 
5375 ~~~~~
5376
5377 @subsection occt_draw_6_6  Curve and surface analysis
5378
5379 **Draw** provides methods to compute information about curves and surfaces: 
5380
5381   * **coord** to find the coordinates of a point.
5382   * **cvalue** and **2dcvalue** to compute points and derivatives on curves.
5383   * **svalue** to compute points and derivatives on a surface.
5384   * **localprop** and **minmaxcurandif** to compute the curvature on a curve.
5385   * **parameters** to compute (u,v) values for a point on a surface.
5386   * **proj** and **2dproj** to project a point on a curve or a surface.
5387   * **surface_radius** to compute the curvature on a surface.
5388
5389 @subsubsection occt_draw_6_6_1  coord
5390
5391 Syntax:            
5392 ~~~~~
5393 coord P x y [z] 
5394 ~~~~~
5395
5396 Sets the x, y (and optionally z) coordinates of the point P. 
5397
5398 **Example:** 
5399 ~~~~~
5400 # translate a point 
5401 point p 10 5 5 
5402 translate p 5 0 0 
5403 coord p x y z 
5404 # x value is 15 
5405 ~~~~~
5406
5407
5408 @subsubsection occt_draw_6_6_2   cvalue, 2dcvalue
5409
5410 Syntax:      
5411 ~~~~~
5412 cvalue curve U x y z [d1x d1y d1z [d2x d2y d2z]] 
5413 2dcvalue curve U x y [d1x d1y [d2x d2y]] 
5414 ~~~~~
5415
5416 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*. 
5417
5418 **Example:**
5419
5420 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* : 
5421
5422 ~~~~~
5423 2dbeziercurve c 4 0 0 1 1 2 1 3 0 
5424 2dcvalue c 0 x y d1x d1y d2x d2y 
5425
5426 # values of x y d1x d1y d2x d2y 
5427 # are 0 0 3 3 0 -6 
5428 ~~~~~
5429
5430 @subsubsection occt_draw_6_6_3  svalue
5431
5432 Syntax: 
5433 ~~~~~
5434 svalue surfname U v x y z [dux duy duz dvx dvy dvz [d2ux d2uy d2uz d2vx d2vy d2vz d2uvx d2uvy d2uvz]] 
5435 ~~~~~
5436
5437 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. 
5438
5439 **Example:** 
5440 ~~~~~
5441 # display points on a sphere 
5442 sphere s 10 
5443 for {dset t 0} {[dval t] <= 1} {dset t t+0.01} { 
5444 svalue s t*2*pi t*pi-pi/2 x y z 
5445 point . x y z 
5446
5447 ~~~~~
5448
5449 @subsubsection occt_draw_6_6_4  localprop, minmaxcurandinf
5450
5451 Syntax:      
5452 ~~~~~
5453 localprop curvename U 
5454 minmaxcurandinf curve
5455 ~~~~~ 
5456
5457 **localprop** computes the curvature of a curve. 
5458 **minmaxcurandinf** computes and prints the parameters of the points where the curvature is minimum and maximum on a 2d curve. 
5459
5460 **Example:** 
5461 ~~~~~
5462 # show curvature at the center of a bezier curve 
5463 beziercurve c 3 0 0 0 10 2 0 20 0 0 
5464 localprop c 0.5 
5465 == Curvature : 0.02 
5466 ~~~~~
5467
5468 @subsubsection occt_draw_6_6_5  parameters
5469
5470 Syntax:      
5471 ~~~~~
5472 parameters surf/curve x y z U [V] 
5473 ~~~~~
5474
5475 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. 
5476
5477 **Example:** 
5478 ~~~~~
5479 # Compute parameters on a plane 
5480 plane p 0 0 10 1 1 0 
5481 parameters p 5 5 5 u v 
5482 # the values of u and v are : 0 5 
5483 ~~~~~
5484
5485 @subsubsection occt_draw_6_6_6  proj, 2dproj
5486
5487 Syntax:      
5488 ~~~~~
5489 proj name x y z 
5490 2dproj name xy 
5491 ~~~~~
5492
5493 Use **proj** to project a point on a 3d curve or a surface and **2dproj** for a 2d curve. 
5494
5495 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, ... *
5496
5497 **Example:** 
5498
5499 Let us project a point on a torus 
5500
5501 ~~~~~
5502 torus t 20 5 
5503 proj t 30 10 7 
5504 == ext_1 ext_2 ext_3 ext_4 
5505 ~~~~~
5506
5507 @subsubsection occt_draw_6_6_7  surface_radius
5508
5509 Syntax:      
5510 ~~~~~
5511 surface_radius surface u v [c1 c2] 
5512 ~~~~~
5513
5514 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*. 
5515
5516 **Example:** 
5517
5518 Let us compute curvatures of a cylinder:
5519
5520 ~~~~~
5521 cylinder c 5 
5522 surface_radius c pi 3 c1 c2 
5523 == Min Radius of Curvature : -5 
5524 == Min Radius of Curvature : infinite 
5525 ~~~~~
5526
5527
5528 @subsection occt_draw_6_7  Intersections
5529
5530 * **intersect** computes intersections of surfaces; 
5531 * **2dintersect** computes intersections of 2d curves.
5532 * **intconcon** computes intersections of 2d conic curves.
5533
5534 @subsubsection occt_draw_6_7_1  intersect
5535
5536 Syntax:      
5537 ~~~~~
5538 intersect name surface1 surface2
5539 ~~~~~ 
5540
5541 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*, ... 
5542
5543 **Example:** 
5544 ~~~~~
5545 # create an ellipse 
5546 cone c 45 0 
5547 plane p 0 0 40 0 1 5 
5548 intersect e c p 
5549 ~~~~~
5550
5551 @subsubsection occt_draw_6_7_2  2dintersect
5552
5553 Syntax:      
5554 ~~~~~
5555 2dintersect curve1 [curve2] [-tol tol] [-state]
5556 ~~~~~
5557
5558 Displays the intersection points between 2d curves.
5559 Options:
5560  -tol - allows changing the intersection tolerance (default value is 1.e-3);
5561  -state - allows printing the intersection state for each point.
5562
5563 **Example:** 
5564 ~~~~~
5565 # intersect two 2d ellipses 
5566 ellipse e1 0 0 5 2 
5567 ellipse e2 0 0 0 1 5 2 
5568 2dintersect e1 e2 -tol 1.e-10 -state
5569 ~~~~~
5570
5571 @subsubsection occt_draw_6_7_3 intconcon
5572
5573 Syntax:      
5574 ~~~~~
5575 intconcon curve1 curve2 
5576 ~~~~~
5577
5578 Displays the intersection points between two 2d curves. 
5579 Curves must be only conic sections: 2d lines, circles, ellipses,
5580 hyperbolas, parabolas. The algorithm from *IntAna2d_AnaIntersection* is used.
5581
5582 **Example:** 
5583 ~~~~~
5584 # intersect two 2d ellipses 
5585 ellipse e1 0 0 5 2 
5586 ellipse e2 0 0 0 1 5 2 
5587 intconcon e1 e2 
5588 ~~~~~
5589
5590 @subsection occt_draw_6_8  Approximations
5591
5592 Draw provides command to create curves and surfaces by approximation. 
5593
5594 * **2dapprox** fits a curve through 2d points; 
5595 * **appro** fits a curve through 3d points;
5596 * **surfapp** and **grilapp** fit a surface through 3d points by approximation;
5597 * **surfint** fit a surface through 3d points by interpolation;
5598 * **2dinterpole** interpolates a curve. 
5599
5600 @subsubsection occt_draw_6_8_1   appro, dapprox
5601
5602 Syntax:      
5603 ~~~~~
5604 appro result nbpoint [curve] 
5605 2dapprox result nbpoint [curve / x1 y1 x2 y2]
5606 ~~~~~ 
5607
5608 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. 
5609
5610 **Example:** 
5611
5612 Let us pick points and they will be fitted 
5613
5614 ~~~~~
5615 2dapprox c 10 
5616 ~~~~~
5617
5618 @subsubsection occt_draw_6_8_2  surfapp, grilapp, surfint
5619
5620
5621 Syntax: 
5622 ~~~~~
5623 surfapp name nbupoints nbvpoints x y z .... 
5624 or
5625 surfapp name nbupoints nbvpoints surf [periodic_flag = 0]
5626 grilapp name nbupoints nbvpoints xo dx yo dy z11 z12 ... 
5627 surfint name surf nbupoints nbvpoints [periodic_flag = 0]
5628 ~~~~~
5629
5630 * **surfapp** fits a surface through an array of u and v points, nbupoints*nbvpoints. 
5631 * **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. 
5632 * **surfapp** can take array of points from other input surface, if alternative syntax
5633 **surfapp** name nbupoints nbvpoints surf [periodic_flag = 0]
5634 is used.
5635 Both command use for fitting approximation algorithm.
5636 **surfint** uses interpolation algorithm and can take array of point only from other input surface.
5637 Optional parameter **periodic_flag** allows to get correct periodical surfaces in U direction.
5638 U direction of result surface corresponds colums of initial array of points.
5639 If **periodic_flag** = 1, algorithm uses first row of array as last row and builds periodical surface.
5640
5641 **Example:** 
5642 ~~~~~
5643 # a surface using the same data as in the beziersurf 
5644 example sect 4.4 
5645 surfapp s 3 4 \ 
5646 0 0 0 10 0 5 20 0 0 \ 
5647 0 10 2 10 10 3 20 10 2 \ 
5648 0 20 10 10 20 20 20 20 10 \ 
5649 0 30 0 10 30 0 20 30 0 
5650 ~~~~~
5651
5652 @subsection  occt_draw_6_9  Projections
5653
5654 Draw provides commands to project points/curves on curves/surfaces.
5655
5656 * **proj** projects point on the curve/surface (see @ref occt_draw_6_6_6 "proj command description");
5657 * **project** projects 3D curve on the surface (see @ref occt_draw_6_2_11 "project command description");
5658 * **projponf** projects point on the face.
5659
5660 @subsubsection  occt_draw_6_9_1 projponf
5661
5662 Syntax:
5663 ~~~~~
5664 projponf face pnt [extrema flag: -min/-max/-minmax] [extrema algo: -g(grad)/-t(tree)]
5665 ~~~~~
5666
5667 **projponf** projects point *pnt* on the face *face*.
5668 You can change the Extrema options:
5669 * To change the Extrema search algorithm use the following options:<br>
5670  -g - for Grad algorithm;<br>
5671  -t - for Tree algorithm;
5672 * To change the Extrema search solutions use the following options:<br>
5673  -min - to look for Min solutions;<br>
5674  -max - to look for Max solutions;<br>
5675  -minmax - to look for MinMax solutions.
5676
5677 **Example**
5678 ~~~~~
5679 plane p 0 0 0 0 0 1
5680 mkface f p
5681 point pnt 5 5 10
5682
5683 projponf f pnt
5684 # proj dist = 10
5685 # uvproj = 5 5
5686 # pproj = 5 5 0
5687 ~~~~~
5688
5689 @subsection occt_draw_6_10  Constraints
5690
5691 * **cirtang** constructs 2d circles tangent to curves;
5692 * **lintan** constructs 2d lines tangent to curves. 
5693
5694
5695 @subsubsection occt_draw_6_10_1  cirtang
5696
5697 Syntax: 
5698 ~~~~~
5699 cirtang result [-t <Tolerance>] -c <curve> -p <point> -r <Radius>...
5700 ~~~~~
5701
5702 Builds all circles satisfying the condition: 
5703 1. the circle must be tangent to every given curve;
5704 2. the circle must pass through every given point;
5705 3. the radius of the circle must be equal to the requested one. 
5706
5707 Only following set of input data is supported: Curve-Curve-Curve, Curve-Curve-Point, Curve-Curve-Radius, Curve-Point-Point, Curve-Point-Radius, Point-Point-Point, Point-Point-Radius. The solutions will be stored in variables *result_1*, *result_2*, etc.
5708
5709 **Example:** 
5710 ~~~~~
5711 # a point, a line and a radius. 2 solutions of type Curve-Point-Radius (C-P-R)
5712 point p 0 0 
5713 line l 10 0 -1 1 
5714 cirtang c -p p -c l -r 4 
5715 == Solution of type C-P-R is: c_1 c_2
5716 ~~~~~
5717
5718 Additionally it is possible to create a circle(s) with given center and tangent to the given curve (Curve-Point type).
5719
5720 **Example:** 
5721 ~~~~~
5722 point pp 1 1
5723 2dbsplinecurve cc 1 2 0 2 1 2 -10 -5 1 10 -5 1
5724 cirtang r -p pp -c cc 
5725 == Solution of type C-P is: r_1 r_2 
5726 ~~~~~
5727
5728 @subsubsection occt_draw_6_10_2  lintan
5729
5730 Syntax:      
5731 ~~~~~
5732 lintan name curve curve [angle] 
5733 ~~~~~
5734
5735 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. 
5736
5737 **Example:** 
5738 ~~~~~
5739 # lines tangent to 2 circles, 4 solutions 
5740 circle c1 -10 0 10 
5741 circle c2 10 0 5 
5742 lintan l c1 c2 
5743
5744 # lines at 15 degrees tangent to a circle and a line, 2 
5745 solutions: l1_1 l1_2 
5746 circle c1 -10 0 1 
5747 line l 2 0 1 1 
5748 lintan l1 c1 l 15 
5749 ~~~~~
5750
5751 @subsection occt_draw_6_11  Display
5752
5753 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. 
5754
5755 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. 
5756
5757 On surfaces, you can control the number of isoparametric curves displayed on the surface with the **nbiso** command. 
5758
5759 On bezier and bspline curve and surface you can toggle the display of the control points with the **clpoles** and **shpoles** commands. 
5760
5761 On bspline curves and surfaces you can toggle the display of the knots with the **shknots** and **clknots** commands. 
5762
5763
5764 @subsubsection occt_draw_6_11_1  dmod, discr, defle
5765
5766 Syntax:      
5767 ~~~~~
5768 dmode name [name ...] u/d 
5769 discr name [name ...] nbintervals 
5770 defle name [name ...] deflection 
5771 ~~~~~
5772
5773 **dmod** command allows choosing the display mode for a curve or a surface. 
5774
5775 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. 
5776
5777 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). 
5778
5779 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. 
5780
5781 **Example:** 
5782 ~~~~~
5783 # increment the number of points on a big circle 
5784 circle c 0 0 50 50 
5785 discr 100 
5786
5787 # change the mode 
5788 dmode c u 
5789 ~~~~~
5790
5791 @subsubsection occt_draw_6_11_2   nbiso
5792
5793 Syntax:      
5794 ~~~~~
5795 nbiso name [names...] nuiso nviso 
5796 ~~~~~
5797
5798 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. 
5799
5800 **Example:** 
5801
5802 Let us  display 35 meridians and 15 parallels on a sphere:
5803 ~~~~~ 
5804 sphere s 20 
5805 nbiso s 35 15 
5806 ~~~~~
5807
5808 @subsubsection occt_draw_6_11_3  clpoles, shpoles
5809
5810 Syntax:      
5811 ~~~~~
5812 clpoles name 
5813 shpoles name 
5814 ~~~~~
5815
5816 On bezier and bspline curves and surfaces, the control polygon is displayed by default: *clpoles* erases it and *shpoles* restores it. 
5817
5818 **Example:** 
5819
5820 Let us make a bezier curve and erase the poles 
5821
5822 ~~~~~
5823 beziercurve c 3 0 0 0 10 0 0 10 10 0 
5824 clpoles c 
5825 ~~~~~
5826
5827 @subsubsection occt_draw_6_11_4  clknots, shknots
5828
5829 Syntax:   
5830 ~~~~~
5831 clknots name 
5832 shknots name 
5833 ~~~~~
5834
5835 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. 
5836
5837 **Example:** 
5838 ~~~~~
5839 # hide the knots on a bspline curve 
5840 bsplinecurve bc 2 3 0 3 1 1 2 3 \ 
5841 10 0 7 1 7 0 7 1 3 0 8 1 0 0 7 1 
5842 clknots bc
5843 ~~~~~
5844
5845
5846 @section occt_draw_7 Topology commands
5847
5848 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. 
5849
5850 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. 
5851
5852 The <a href="user_guides__modeling_data.html#occt_modat_5">different topological shapes</a> include: 
5853
5854   * **COMPOUND**: A group of any type of topological object.
5855   * **COMPSOLID**: A set of solids connected by their faces. This expands the notions of WIRE and SHELL to solids.
5856   * **SOLID**: A part of space limited by shells. It is three dimensional.
5857   * **SHELL**: A set of faces connected by their edges. A shell can be open or closed.
5858   * **FACE**: In 2d, a plane; in 3d, part of a surface. Its geometry is constrained (trimmed) by contours. It is two dimensional.
5859   * **WIRE**: A set of edges connected by their vertices. It can be open or closed depending on whether the edges are linked or not.
5860   * **EDGE**: A topological element corresponding to a restrained curve. An edge is generally limited by vertices. It has one dimension.
5861   * **VERTEX**: A topological element corresponding to a point. It has a zero dimension.
5862
5863 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**). 
5864
5865 The following topics are covered in the eight sections of this chapter: 
5866
5867   * Basic shape commands to handle the structure of shapes and control the display.
5868   * Curve and surface topology, or methods to create topology from geometry and vice versa.
5869   * Primitive construction commands: box, cylinder, wedge etc.
5870   * Sweeping of shapes.
5871   * Transformations of shapes: translation, copy, etc.
5872   * Topological operations, or booleans.
5873   * Drafting and blending.
5874   * Defeaturing.
5875   * Making shapes periodic in 3D space.
5876   * Making shapes connected.
5877   * Analysis of shapes.
5878
5879
5880 @subsection occt_draw_7_1  Basic topology
5881
5882 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: 
5883
5884   * **isos** and **discretisation** to control display of shape faces by isoparametric curves .
5885   * **orientation**, **complement** and **invert** to modify topological attributes such as orientation.
5886   * **explode**, **exwire** and **nbshapes** to analyze the structure of a shape.
5887   * **emptycopy**, **add**, **compound** to create shapes by stepwise construction.
5888
5889 In Draw, shapes are displayed using isoparametric curves. There is color coding for the edges: 
5890
5891   * a red edge is an isolated edge, which belongs to no faces.
5892   * a green edge is a free boundary edge, which belongs to one face,
5893   * a yellow edge is a shared edge, which belongs to at least two faces.
5894
5895
5896 @subsubsection occt_draw_7_1_1  isos, discretisation
5897
5898 Syntax:                  
5899 ~~~~~
5900 isos [name ...][nbisos] 
5901 discretisation nbpoints
5902 ~~~~~
5903  
5904 Determines or changes the number of isoparametric curves on shapes. 
5905
5906 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. 
5907
5908 *discretisation* changes the default number of points used to display the curves. The default value is 30. 
5909
5910 **Example:** 
5911 ~~~~~
5912 # Display only the edges (the wireframe) 
5913 isos 0 
5914 ~~~~~
5915
5916 **Warning**: don’t confuse *isos* and *discretisation* with the geometric commands *nbisos* and *discr*. 
5917
5918
5919 @subsubsection occt_draw_7_1_2  orientation, complement, invert, normals, range
5920
5921 Syntax:      
5922 ~~~~~
5923 orientation name [name ...] F/R/E/I 
5924 complement name [name ...] 
5925 invert name 
5926 normals s (length = 10), disp normals 
5927 range name value value 
5928 ~~~~~
5929
5930 * **orientation** -- assigns the orientation of simple and complex shapes to one of the following four values: *FORWARD, REVERSED, INTERNAL, EXTERNAL*. 
5931 * **complement** -- changes the current orientation of shapes to its complement: *FORWARD* to *REVERSED* and  *INTERNAL* to *EXTERNAL*. 
5932 * **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. 
5933 * *normals** -- returns the assignment of colors to orientation values. 
5934 * **range** -- defines the length of a selected edge by defining the values of a starting point and an end point.
5935  
5936 **Example:** 
5937 ~~~~~
5938 # to invert normals of a box 
5939 box b 10 20 30 
5940 normals b 5 
5941 invert b 
5942 normals b 5 
5943
5944 # to assign a value to an edge 
5945 box b1 10 20 30 
5946 # to define the box as edges 
5947 explode b1 e 
5948 b_1 b_2 b_3 b_4 b_5 b_6 b_7 b_8 b_9 b_10 b_11 b_12 
5949 # to define as an edge 
5950 makedge e 1 
5951 # to define the length of the edge as starting from 0 
5952 and finishing at 1 
5953 range e 0 1 
5954 ~~~~~
5955
5956 @subsubsection occt_draw_7_1_3  explode, exwire, nbshapes
5957
5958 Syntax:      
5959 ~~~~~
5960 explode name [C/So/Sh/F/W/E/V] 
5961 exwire name 
5962 nbshapes name 
5963 ~~~~~
5964
5965 **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. 
5966
5967 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. 
5968
5969 **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. 
5970
5971 **nbshapes** counts the number of shapes of each type in an entity. 
5972
5973 **Example:** 
5974 ~~~~~
5975 # on a box 
5976 box b 10 20 30 
5977
5978 # whatis returns the type and various information 
5979 whatis b 
5980 = b is a shape SOLID FORWARD Free Modified 
5981
5982 # make one shell 
5983 explode b 
5984 whatis b_1 
5985 = b_1 is a shape SHELL FORWARD Modified Orientable 
5986 Closed 
5987
5988 # extract the edges b_1, ... , b_12 
5989 explode b e 
5990 ==b_1 ... b_12 
5991
5992 # count subshapes 
5993 nbshapes b 
5994 == 
5995 Number of shapes in b 
5996 VERTEX : 8 
5997 EDGE : 12 
5998 WIRE : 6 
5999 FACE : 6 
6000 SHELL : 1 
6001 SOLID : 1 
6002 COMPSOLID : 0 
6003 COMPOUND : 0 
6004 SHAPE : 34 
6005 ~~~~~
6006
6007 @subsubsection occt_draw_7_1_4  emptycopy, add, compound
6008
6009 Syntax:                  
6010 ~~~~~
6011 emptycopy [newname] name 
6012 add name toname 
6013 compound [name ...] compoundname 
6014 ~~~~~
6015
6016 **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. 
6017
6018 **add** inserts shape *C* into shape *S*. Verify that *C* and *S* reference compatible types of objects: 
6019   * Any *Shape* can be added to a *Compound*.
6020   * Only a *Solid* can be added to a *CompSolid*.
6021   * Only a *Shell* can *Edge* or a *Vertex* can be added into a *Solid*.
6022   * Only a *Face* can be added to a *Shell*.
6023   * Only a *Wire* and *Vertex* can be added in a *Solid*.
6024   * Only an *Edge* can be added to a *Wire*.
6025   * Only a *Vertex* can be added to an *Edge*.
6026   * Nothing can be added to a *Vertex*.
6027
6028 **emptycopy** and **add** should be used with care. 
6029
6030 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. 
6031
6032 **Example:** 
6033 ~~~~~
6034 # a compound with three boxes 
6035 box b1 0 0 0 1 1 1 
6036 box b2 3 0 0 1 1 1 
6037 box b3 6 0 0 1 1 1 
6038 compound b1 b2 b3 c 
6039 ~~~~~
6040
6041
6042 @subsubsection occt_draw_7_1_5  compare
6043
6044 Syntax:
6045 ~~~~~
6046 compare shape1 shape2
6047 ~~~~~
6048
6049 **compare** compares the two shapes *shape1* and *shape2* using the methods *TopoDS_Shape::IsSame()* and *TopoDS_Shape::IsEqual()*.
6050
6051 **Example**
6052 ~~~~~
6053 box b1 1 1 1
6054 copy b1 b2
6055 compare b1 b2
6056 # same shapes
6057 # equal shapes
6058
6059 orientation b2 R
6060 compare b1 b2
6061 # same shapes
6062
6063 box b2 1 1 1
6064 compare b1 b2
6065 # shapes are not same
6066 ~~~~~
6067
6068 @subsubsection occt_draw_7_1_6  issubshape
6069
6070 Syntax:
6071 ~~~~~
6072 issubshape subshape shape
6073 ~~~~~
6074
6075 **issubshape** checks if the shape *subshape* is sub-shape of the shape *shape* and gets its index in the shape.
6076
6077 **Example**
6078 ~~~~~
6079 box b 1 1 1
6080 explode b f
6081 issubshape b_2 b
6082 # b_2 is sub-shape of b. Index in the shape: 2.
6083 ~~~~~
6084
6085
6086 @subsection occt_draw_7_2  Curve and surface topology
6087
6088 This group of commands is used to create topology from shapes and to extract shapes from geometry. 
6089
6090   * To create vertices, use the **vertex** command.
6091   * To create edges use, the **edge**, **mkedge** commands.
6092   * To create wires, use the **wire**, **polyline**, **polyvertex** commands.
6093   * To create faces, use the **mkplane**, **mkface** commands.
6094   * To extract the geometry from edges or faces, use the **mkcurve** and **mkface** commands.
6095   * To extract the 2d curves from edges or faces, use the **pcurve** command.
6096
6097
6098 @subsubsection occt_draw_7_2_1  vertex
6099
6100 Syntax:      
6101 ~~~~~
6102 vertex name [x y z / p edge] 
6103 ~~~~~
6104
6105 Creates a vertex at either a 3d location x,y,z or the point at parameter p on an edge. 
6106
6107 **Example:** 
6108 ~~~~~
6109 vertex v1 10 20 30 
6110 ~~~~~
6111
6112 @subsubsection occt_draw_7_2_1a  mkpoint
6113
6114 Syntax:
6115 ~~~~~
6116 mkpoint name vertex
6117 ~~~~~
6118
6119 Creates a point from the coordinates of a given vertex.
6120
6121 **Example:** 
6122 ~~~~~
6123 mkpoint p v1
6124 ~~~~~
6125
6126 @subsubsection occt_draw_7_2_2  edge, mkedge, uisoedge, visoedge
6127
6128 Syntax:      
6129 ~~~~~
6130 edge name vertex1 vertex2 
6131 mkedge edge curve [surface] [pfirst plast] [vfirst [pfirst] vlast [plast]] 
6132 uisoedge edge face u v1 v2 
6133 visoedge edge face v u1 u2 
6134 ~~~~~
6135
6136 * **edge** creates a straight line edge between two vertices. 
6137 * **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. 
6138
6139 **Example:** 
6140 ~~~~~
6141 # straight line edge 
6142 vertex v1 10 0 0 
6143 vertex v2 10 10 0 
6144 edge e1 v1 v2 
6145
6146 # make a circular edge 
6147 circle c 0 0 0 5 
6148 mkedge e2 c 0 pi/2 
6149
6150 # A similar result may be achieved by trimming the curve 
6151 # The trimming is removed by mkedge 
6152 trim c c 0 pi/2 
6153 mkedge e2 c 
6154 ~~~~~
6155
6156 * **visoedge** and **uisoedge** are commands that generate a *uiso* parameter edge or a *viso* parameter edge. 
6157
6158 **Example:** 
6159 ~~~~~
6160 # to create an edge between v1 and v2 at point u 
6161 # to create the example plane 
6162 plane p 
6163 trim p p 0 1 0 1 
6164 convert p p 
6165 incudeg p 3 
6166 incvdeg p 3 
6167 movep p 2 2 0 0 1 
6168 movep p 3 3 0 0 0.5 
6169 mkface p p 
6170 # to create the edge in the plane at the u axis point 
6171 0.5, and between the v axis points v=0.2 and v =0.8 
6172 uisoedge e p 0.5 0.20 0.8 
6173 ~~~~~
6174
6175 @subsubsection occt_draw_7_2_3  wire, polyline, polyvertex
6176
6177 Syntax:      
6178 ~~~~~
6179 wire wirename e1/w1 [e2/w2 ...] 
6180 polyline name x1 y1 z1 x2 y2 z2 ... 
6181 polyvertex name v1 v2 ... 
6182 ~~~~~
6183
6184 **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. 
6185
6186 **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. 
6187
6188 **polyvertex** creates a polygonal wire from vertices. 
6189
6190 **Example:** 
6191 ~~~~~
6192 # create two polygonal wires 
6193 # glue them and define as a single wire 
6194 polyline w1 0 0 0 10 0 0 10 10 0 
6195 polyline w2 10 10 0 0 10 0 0 0 0 
6196 wire w w1 w2 
6197 ~~~~~
6198
6199 @subsubsection occt_draw_7_2_4  profile
6200
6201 Syntax       
6202 ~~~~~
6203 profile name [code values] [code values] ... 
6204 ~~~~~
6205
6206
6207 **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. 
6208
6209
6210 | **Code**     |    **Values **    |       **Action** |
6211 | :------------ | :------------- | :---------------- |
6212 | O                 |                     X Y Z      |          Sets the origin of the plane |
6213 | P                 |         DX DY DZ UX UY UZ  |  Sets the normal and X of the plane |
6214 | F                 |                      X Y    |               Sets the first point |
6215 | X                 |                      DX      |             Translates a point along X |
6216 | Y                 |                      DY       |            Translates a point along Y |
6217 | L                 |                      DL        |            Translates a point along direction |
6218 | XX                |                    X           |           Sets point X coordinate |
6219 | YY                |                    Y           |           Sets point Y coordinate |
6220 | T                 |                      DX DY     |         Translates a point |
6221 | TT                |                     X Y        |           Sets a point |
6222 | R                 |                      Angle     |           Rotates direction |
6223 | RR                |                    Angle       |         Sets direction |
6224 | D                 |                     DX DY      |        Sets direction |
6225 | IX                |                      X         |             Intersects with vertical |
6226 | IY                |                      Y         |             Intersects with horizontal |
6227 | C                 |                Radius Angle    |      Arc of circle tangent to direction |
6228
6229
6230 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. 
6231
6232 The point [code values] can be repeated any number of times and in any order to create the profile contour. 
6233
6234 | Suffix | Action |
6235 | :----- | :----- |
6236 | No suffix  |             Makes a closed face |
6237 | W          |               Make a closed wire |
6238 | WW         |            Make an open wire |
6239
6240 The profile shape definition is the suffix; no suffix produces a face, *w* is a closed wire, *ww* is an open wire. 
6241
6242 Code letters are not case-sensitive. 
6243
6244 **Example:** 
6245 ~~~~~
6246 # to create a triangular plane using a vertex at the
6247 origin, in the xy plane 
6248 profile p O 0 0 0 X 1 Y 0 x 1 y 1 
6249 ~~~~~
6250
6251 **Example:** 
6252 ~~~~~
6253 # to create a contour using the different code 
6254 possibilities 
6255
6256 # two vertices in the xy plane 
6257 profile p F 1 0 x 2 y 1 ww 
6258
6259 # to view from a point normal to the plane 
6260 top 
6261
6262 # add a circular element of 45 degrees 
6263 profile p F 1 0 x 2 y 1 c 1 45 ww 
6264
6265 # add a tangential segment with a length value 1 
6266 profile p F 1 0 x 2 y 1 c 1 45 l 1 ww 
6267
6268 # add a vertex with xy values of 1.5 and 1.5 
6269 profile p F 1 0 x 2 y 1 c 1 45 l 1 tt 1.5 1.5 ww 
6270
6271 # add a vertex with the x value 0.2, y value is constant 
6272 profile p F 1 0 x 2 y 1 c 1 45 l 1 tt 1.5 1.5 xx 0.2 ww 
6273
6274 # add a vertex with the y value 2 x value is constant 
6275 profile p F 1 0 x 2 y 1 c 1 45 l 1 tt 1.5 1.5 yy 2 ww 
6276
6277 # add a circular element with a radius value of 1 and a circular value of 290 degrees 
6278 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 
6279
6280 # wire continues at a tangent to the intersection x = 0 
6281 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 
6282
6283 # continue the wire at an angle of 90 degrees until it intersects the y axis at y= -o.3 
6284 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 
6285
6286 #close the wire 
6287 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 
6288
6289 # to create the plane with the same contour 
6290 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 
6291 ~~~~~
6292
6293 @subsubsection occt_draw_7_2_5   bsplineprof
6294
6295 Syntax:      
6296 ~~~~~
6297 bsplineprof name [S face] [W WW] 
6298 ~~~~~
6299
6300 * for an edge : \<digitizes\> ... <mouse button 2>
6301 * to end profile : <mouse button 3>
6302
6303 Builds a profile in the XY plane from digitizes. By default the profile is closed and a face is built. 
6304
6305 **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. 
6306
6307 The profile shape definition is the suffix; no suffix produces a face, **w** is a closed wire, **ww** is an open wire. 
6308
6309 **Example:** 
6310 ~~~~~
6311 #to view the xy plane 
6312 top 
6313 #to create a 2d curve with the mouse 
6314 bsplineprof res 
6315 # click mb1 to start the curve 
6316 # click mb1 to create the second vertex 
6317 # click mb1 to create a curve 
6318 == 
6319 #click mb2 to finish the curve and start a new curve 
6320 == 
6321 # click mb1 to create the second curve 
6322 # click mb3 to create the face 
6323 ~~~~~
6324
6325 @subsubsection occt_draw_7_2_6  mkoffset
6326
6327 **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 occurrences is not limited. 
6328 The offset distance defines the spacing and the positioning of the occurrences. 
6329
6330 Syntax:      
6331 ~~~~~
6332 mkoffset result shape nboffset stepoffset [jointype(a/i) [alt]]
6333 ~~~~~
6334 where:
6335 * *result* - the base name for the resulting wires. The index of the occurrence (starting with 1) will be added to this name, so the resulting wires will have the names - *result_1*, *result_2* ...;
6336 * *shape* - input shape (face or compound of wires);
6337 * *nboffset* - the number of the parallel occurrences;
6338 * *stepoffset* - offset distance between occurrences;
6339 * *jointype(a/i)* - join type (a for *arc* (default) and i for *intersection*);
6340 * *alt* - altitude from the plane of the input face in relation to the normal to the face.
6341
6342
6343 **Example:** 
6344 ~~~~~
6345 # Create a box and select a face 
6346 box b 1 2 3 
6347 explode b f 
6348 # Create three exterior parallel contours with an offset value of 2 
6349 mkoffset r b_1 3 2 
6350 # wires r_1, r_2 and r_3 are created
6351
6352 # Create three exterior parallel contours with an offset value of 2 without round corners
6353 mkoffset r b_1 3 2 i
6354 # wires r_1, r_2 and r_3 are created
6355
6356 # Create one interior parallel contour with an offset value of 0.4 
6357 mkoffset r b_1 1 -0.4 
6358 ~~~~~
6359
6360 **Note** that on a concave input contour for an interior step *mkoffset* command may produce several wires which will be contained in a single compound.
6361
6362 **Example:** 
6363 ~~~~~
6364 # to create the example contour 
6365 profile p F 0 0 x 2 y 4 tt 1 1 tt 0 4 w 
6366 # creates an incoherent interior offset 
6367 mkoffset r p 1 -0.50 
6368
6369 # creates two incoherent wires 
6370 mkoffset r p 1 -0.55 
6371 # r_1 is a compound of two wires
6372 ~~~~~
6373
6374 @subsubsection occt_draw_7_2_7  mkplane, mkface
6375
6376 Syntax:      
6377 ~~~~~
6378 mkplane name wire 
6379 mkface name surface [ufirst ulast vfirst vlast] 
6380 ~~~~~
6381
6382 **mkplane** generates a face from a planar wire. The planar surface will be constructed with an orientation which keeps the face inside the wire. 
6383
6384 **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. 
6385
6386 **Example:** 
6387 ~~~~~
6388 # make a polygonal face 
6389 polyline f 0 0 0 20 0 0 20 10 0 10 10 0 10 20 0 0 20 0 0 0 0 
6390 mkplane f f 
6391
6392 # make a cylindrical face 
6393 cylinder g 10 
6394 trim g g -pi/3 pi/2 0 15 
6395 mkface g g 
6396 ~~~~~
6397
6398 @subsubsection occt_draw_7_2_8  mkcurve, mksurface
6399
6400 Syntax:      
6401 ~~~~~
6402 mkcurve curve edge 
6403 mksurface name face 
6404 ~~~~~
6405
6406 **mkcurve** creates a 3d curve from an edge. The curve will be trimmed to the edge boundaries. 
6407
6408 **mksurface** creates a surface from a face. The surface will not be trimmed. 
6409
6410 **Example:** 
6411 ~~~~~
6412 # make a line 
6413 vertex v1 0 0 0 
6414 vertex v2 10 0 0 
6415 edge e v1 v2 
6416 ~~~~~
6417
6418 @subsubsection occt_draw_7_2_9  pcurve
6419
6420 Syntax:      
6421
6422 ~~~~~
6423 pcurve [name edgename] facename 
6424 ~~~~~
6425
6426 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. 
6427
6428 **Example:** 
6429 ~~~~~
6430 # view the pcurves of a face 
6431 plane p 
6432 trim p p -1 1 -1 1 
6433 mkface p p 
6434 av2d; # a 2d view 
6435 pcurve p 
6436 2dfit 
6437 ~~~~~
6438
6439 @subsubsection occt_draw_7_2_10  chfi2d
6440
6441 Syntax:      
6442 ~~~~~
6443 chfi2d result face [edge1 edge2 (F radius/CDD d1 d2/CDA d ang) .... 
6444 ~~~~~
6445
6446
6447 Creates chamfers and fillets on 2D objects. Select two adjacent edges and: 
6448   * a radius value
6449   * two respective distance values
6450   * a distance value and an angle
6451
6452 The radius value produces a fillet between the two faces. 
6453
6454 The distance is the length value from the edge between the two selected faces in a normal direction. 
6455
6456 **Example:** 
6457
6458 Let us create a 2d fillet: 
6459
6460 ~~~~~
6461 top 
6462 profile p x 2 y 2 x -2 
6463 chfi2d cfr p . . F 0.3 
6464 ==Pick an object 
6465 #select an edge 
6466 ==Pick an object 
6467 #select an edge 
6468 ~~~~~
6469
6470 Let us create a 2d chamfer using two distances:
6471  
6472 ~~~~~
6473 profile p x 2 y 2 x -2 
6474 chfi2d cfr p . . CDD 0.3 0.6 
6475 ==Pick an object 
6476 #select an edge 
6477 ==Pick an object 
6478 #select an edge 
6479 ~~~~~
6480
6481 Let us create a 2d chamfer using a defined distance and angle 
6482
6483 ~~~~~
6484 top 
6485 profile p x 2 y 2 x -2 
6486 chfi2d cfr p . . CDA 0.3 75 
6487 ==Pick an object 
6488 #select an edge 
6489 ==Pick an object 
6490 #select an edge 
6491 ~~~~~
6492
6493 @subsubsection occt_draw_7_2_11  nproject
6494
6495 Syntax:      
6496 ~~~~~
6497 nproject pj e1 e2 e3 ... surf -g -d [dmax] [Tol 
6498 [continuity [maxdeg [maxseg]]] 
6499 ~~~~~
6500
6501 Creates a shape projection which is normal to the target surface. 
6502
6503 **Example:**
6504 ~~~~~
6505 # create a curved surface 
6506 line l 0 0 0 1 0 0 
6507 trim l l 0 2 
6508 convert l l 
6509
6510 incdeg l 3 
6511 cmovep l 1 0 0.5 0 
6512 cmovep l 3 0 0.5 0 
6513 copy l ll 
6514 translate ll 2 -0.5 0 
6515 mkedge e1 l 
6516 mkedge e2 ll 
6517 wire w e1 e2 
6518 prism p w 0 0 3 
6519 donl p 
6520 #display in four views 
6521 mu4 
6522 fit 
6523 # create the example shape 
6524 circle c 1.8 -0.5 1 0 1 0 1 0 0 0.4 
6525 mkedge e c 
6526 donly p e 
6527 # create the normal projection of the shape(circle) 
6528 nproject r e p 
6529 ~~~~~
6530
6531
6532 @subsection occt_draw_7_3  Primitives
6533
6534 Primitive commands make it possible to create simple shapes. They include: 
6535
6536   * **box** and **wedge** commands.
6537   * **pcylinder**, **pcone**, **psphere**, **ptorus** commands.
6538   * **halfspace** command
6539
6540
6541 @subsubsection occt_draw_7_3_1  box, wedge
6542
6543 Syntax:      
6544 ~~~~~
6545 box name [x y z] dx dy dz 
6546 wedge name dx dy dz ltx / xmin zmin xmax xmax 
6547 ~~~~~
6548
6549 **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. 
6550
6551 **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*. 
6552
6553 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. 
6554
6555 **Example:** 
6556 ~~~~~
6557 # a box at the origin 
6558 box b1 10 20 30 
6559
6560 # another box 
6561 box b2 30 30 40 10 20 30 
6562
6563 # a wedge 
6564 wedge w1 10 20 30 5 
6565
6566 # a wedge with a sharp edge (5 faces) 
6567 wedge w2 10 20 30 0 
6568
6569 # a pyramid 
6570 wedge w3 20 20 20 10 10 10 10 
6571 ~~~~~
6572
6573 @subsubsection occt_draw_7_3_2  pcylinder, pcone, psphere, ptorus
6574
6575 Syntax:      
6576 ~~~~~
6577 pcylinder name [plane] radius height [angle] 
6578 pcone name [plane] radius1 radius2 height [angle] 
6579 pcone name [plane] radius1 radius2 height [angle] 
6580 psphere name [plane] radius1 [angle1 angle2] [angle] 
6581 ptorus name [plane] radius1 radius2 [angle1 angle2] [angle] 
6582 ~~~~~
6583
6584 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. 
6585
6586 **pcylinder** creates a cylindrical block with the given radius and height. 
6587
6588 **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. 
6589
6590 **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. 
6591
6592 **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. 
6593
6594 **Example:** 
6595 ~~~~~
6596 # a can shape 
6597 pcylinder cy 5 10 
6598
6599 # a quarter of a truncated cone 
6600 pcone co 15 10 10 90 
6601
6602 # three-quarters of sphere 
6603 psphere sp 10 270 
6604
6605 # half torus 
6606 ptorus to 20 5 0 90 
6607 ~~~~~
6608
6609 @subsubsection occt_draw_7_3_3  halfspace
6610
6611 Syntax:      
6612 ~~~~~
6613 halfspace result face/shell x y z 
6614 ~~~~~
6615
6616 **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. 
6617
6618 **Example:** 
6619 ~~~~~
6620 box b 0 0 0 1 2 3 
6621 explode b f 
6622 ==b_1 b_2 b_3 b_4 b_5 b_6 
6623 halfspace hr b_3 0.5 0.5 0.5 
6624 ~~~~~
6625
6626
6627 @subsection occt_draw_7_4  Sweeping
6628
6629 Sweeping creates shapes by sweeping out a shape along a defined path: 
6630
6631   * **prism** -- sweeps along a direction.
6632   * **revol** -- sweeps around an axis.
6633   * **pipe** -- sweeps along a wire.
6634   * **mksweep** and **buildsweep** -- to create sweeps by defining the arguments and algorithms.
6635   * **thrusections** -- creates a sweep from wire in different planes.
6636
6637
6638 @subsubsection occt_draw_7_4_1  prism
6639
6640 Syntax:      
6641 ~~~~~
6642 prism result base dx dy dz [Copy | Inf | SemiInf] 
6643 ~~~~~
6644
6645 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. 
6646
6647 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. 
6648
6649 **Example:** 
6650 ~~~~~
6651 # sweep a planar face to make a solid 
6652 polyline f 0 0 0 10 0 0 10 5 0 5 5 0 5 15 0 0 15 0 0 0 0 
6653 mkplane f f 
6654 ~~~~~
6655
6656 @subsubsection occt_draw_7_4_2  revol
6657
6658 Syntax:      
6659 ~~~~~
6660 revol result base x y z dx dy dz angle [Copy] 
6661 ~~~~~
6662
6663 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. 
6664
6665 **Example:** 
6666 ~~~~~
6667 # shell by wire rotation 
6668 polyline w 0 0 0 10 0 0 10 5 0 5 5 0 5 15 0 0 15 0 
6669 revol s w 20 0 0 0 1 0 90 
6670 ~~~~~
6671
6672
6673 @subsubsection occt_draw_7_4_3  pipe
6674
6675 Syntax:      
6676 ~~~~~
6677 pipe name wire_spine Profile 
6678 ~~~~~
6679
6680 Creates a new shape by sweeping a shape known as the profile along a wire known as the spine. 
6681
6682 **Example:** 
6683 ~~~~~
6684 # sweep a circle along a bezier curve to make a solid 
6685 pipe 
6686
6687 beziercurve spine 4 0 0 0 10 0 0 10 10 0 20 10 0 
6688 mkedge spine spine 
6689 wire spine spine 
6690 circle profile 0 0 0 1 0 0 2 
6691 mkedge profile profile 
6692 wire profile profile 
6693 mkplane profile profile 
6694 pipe p spine profile 
6695 ~~~~~
6696
6697 @subsubsection occt_draw_7_4_4  mksweep, addsweep, setsweep, deletesweep, buildsweep, simulsweep
6698
6699 Syntax:      
6700 ~~~~~
6701 mksweep wire 
6702 addsweep wire[vertex][-M][-C] [auxiilaryshape]
6703 deletesweep wire 
6704 setsweep options [arg1 [arg2 [...]]] 
6705 simulsweep r [n] [option] 
6706 buildsweep [r] [option] [Tol] 
6707 ~~~~~
6708
6709 options are : 
6710  * *-FR* : Tangent and Normal are defined by a Frenet trihedron 
6711  * *-CF* : Tangent is given by Frenet, the Normal is computed to minimize the torsion 
6712  * *-DX Surf* : Tangent and Normal are given by Darboux trihedron, surf must be a shell or a face 
6713  * *-CN dx dy dz* : BiNormal is given by *dx dy dz* 
6714  * *-FX Tx Ty TZ [Nx Ny Nz]* : Tangent and Normal are fixed 
6715  * *-G guide* 
6716
6717 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. 
6718 * **mksweep** -- initializes the sweep creation and defines the wire to be used as the spine. 
6719 * **addsweep** -- defines the wire to be used as the profile. 
6720 * **deletesweep** -- cancels the choice of profile wire, without leaving the mksweep mode. You can re-select a profile wire. 
6721 * **setsweep** -- commands the algorithms used for the construction of the sweep. 
6722 * **simulsweep** -- can be used to create a preview of the shape. [n] is the number of sections that are used to simulate the sweep. 
6723 * **buildsweep** -- creates the sweep using the arguments defined by all the commands. 
6724
6725 **Example:** 
6726 ~~~~~
6727 #create a sweep based on a semi-circular wire using the 
6728 Frenet algorithm 
6729 #create a circular figure 
6730 circle c2 0 0 0 1 0 0 10 
6731 trim c2 c2 -pi/2 pi/2 
6732 mkedge e2 c2 
6733 donly e2 
6734 wire w e2 
6735 whatis w 
6736 mksweep w 
6737 # to display all the options for a sweep 
6738 setsweep 
6739 #to create a sweep using the Frenet algorithm where the 
6740 #normal is computed to minimise the torsion 
6741 setsweep -CF 
6742 addsweep w -R 
6743 # to simulate the sweep with a visual approximation 
6744 simulsweep w 3 
6745 ~~~~~
6746
6747 @subsubsection occt_draw_7_4_5  thrusections
6748
6749 Syntax:  
6750 ~~~~~
6751 thrusections [-N] result issolid isruled wire1 wire2 [..wire..] 
6752 ~~~~~
6753
6754 **thrusections** creates a shape using wires that are positioned in different planes. Each wire selected must have the same number of edges and vertices. 
6755 A bezier curve is generated between the vertices of each wire. The option *[-N]* means that no check is made on wires for direction. 
6756
6757 **Example:** 
6758 ~~~~~
6759 #create three wires in three planes 
6760 polyline w1 0 0 0 5 0 0 5 5 0 2 3 0 
6761 polyline w2 0 1 3 4 1 3 4 4 3 1 3 3 
6762 polyline w3 0 0 5 5 0 5 5 5 5 2 3 5 
6763 # create the shape 
6764 thrusections th issolid isruled w1 w2 w3 
6765 ==thrusections th issolid isruled w1 w2 w3 
6766 Tolerances obtenues   -- 3d : 0 
6767 -- 2d : 0 
6768 ~~~~~
6769
6770
6771 @subsection occt_draw_7_5  Topological transformation
6772
6773 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. 
6774
6775   * **tcopy** -- makes a copy of the structure of a shape.
6776   * **ttranslate**, **trotate**, **tmove** and **reset** -- move a shape.
6777   * **tmirror** and **tscale** -- always modify the shape.
6778
6779
6780 @subsubsection occt_draw_7_5_1   tcopy
6781
6782 Syntax: 
6783 ~~~~~
6784 tcopy name toname [name toname ...] 
6785 ~~~~~
6786
6787 Copies the structure of one shape, including the geometry, into another, newer shape. 
6788
6789 **Example:** 
6790 ~~~~~
6791 # create an edge from a curve and copy it 
6792 beziercurve c 3 0 0 0 10 0 0 20 10 0 
6793 mkedge e1 c 
6794 ttranslate e1 0 5 0 
6795 tcopy e1 e2 
6796 ttranslate e2 0 5 0 
6797 # now modify the curve, only e1 and e2 will be modified 
6798 ~~~~~
6799
6800 @subsubsection occt_draw_7_5_2   tmove, treset
6801
6802 Syntax:      
6803 ~~~~~
6804 tmove name [name ...] shape 
6805 reset name [name ...] 
6806 ~~~~~
6807
6808 **tmove** and **reset** modify the location, or the local coordinate system of a shape. 
6809
6810 **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). 
6811
6812 **Example:** 
6813 ~~~~~
6814 # create two boxes 
6815 box b1 10 10 10 
6816 box b2 20 0 0 10 10 10 
6817 # translate the first box 
6818 ttranslate b1 0 10 0 
6819 # and apply the same location to b2 
6820 tmove b2 b1 
6821 # return to original positions 
6822 reset b1 b2 
6823 ~~~~~
6824
6825 @subsubsection occt_draw_7_5_3   ttranslate, trotate
6826
6827 Syntax:      
6828 ~~~~~
6829 ttranslate [name ...] dx dy dz 
6830 trotate [name ...] x y z dx dy dz angle 
6831 ~~~~~
6832
6833 **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. 
6834 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.) 
6835
6836 Locations are very economic in the data structure because multiple occurrences of an object share the topological description.
6837
6838 **Example:** 
6839 ~~~~~
6840 # make rotated copies of a sphere in between two cylinders 
6841 # create a file source toto.tcl 
6842 # toto.tcl code: 
6843 for {set i 0} {$i < 360} {incr i 20} { 
6844 copy s s$i 
6845 trotate s$i 0 0 0 0 0 1 $i 
6846
6847
6848 # create two cylinders 
6849 pcylinder c1 30 5 
6850 copy c1 c2 
6851 ttranslate c2 0 0 20 
6852
6853 #create a sphere 
6854 psphere s 3 
6855 ttranslate s 25 0 12.5 
6856
6857 # call the source file for multiple copies 
6858 source toto.tcl 
6859 ~~~~~
6860
6861 @subsubsection occt_draw_7_5_4   tmirror, tscale
6862
6863 Syntax:      
6864 ~~~~~
6865 tmirror name x y z dx dy dz 
6866 tscale name x y z scale 
6867 ~~~~~
6868
6869 * **tmirror** makes a mirror copy of a shape about a plane x,y,z dx,dy,dz. 
6870
6871 * **Tscale** applies a central homotopic mapping to a shape. 
6872
6873 **Example:** 
6874 ~~~~~
6875 # mirror a portion of cylinder about the YZ plane 
6876 pcylinder c1 10 10 270 
6877 copy c1 c2 
6878 tmirror c2 15 0 0 1 0 0 
6879 # and scale it 
6880 tscale c1 0 0 0 0.5 
6881 ~~~~~
6882
6883
6884 @subsection occt_draw_7_6  Old Topological operations
6885
6886   *  **fuse**, **cut**, **common** are boolean operations. 
6887   *  **section**, **psection** compute sections. 
6888   *  **sewing** joins two or more shapes. 
6889
6890
6891 @subsubsection occt_draw_7_6_1  fuse, cut, common
6892
6893 These commands are no longer supported, so the result may be unpredictable.
6894 Use the commands bfuse, bcut, bcommon instead.
6895
6896 Syntax:
6897 ~~~~~
6898 fuse name shape1 shape2 
6899 cut name shape1 shape2 
6900 common name shape1 shape2 
6901 ~~~~~
6902
6903 **fuse** creates a new shape by a boolean operation on two existing shapes. The new shape contains both originals intact. 
6904
6905 **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. 
6906
6907 **common** creates a new shape which contains only what is in common between the two original shapes in their intersection. 
6908
6909 **Example:** 
6910 ~~~~~
6911 # all four boolean operations on a box and a cylinder 
6912
6913 box b 0 -10 5 20 20 10 
6914 pcylinder c 5 20 
6915
6916 fuse s1 b c 
6917 ttranslate s1 40 0 0 
6918
6919 cut s2 b c 
6920 ttranslate s2 -40 0 0 
6921
6922 cut s3 c b 
6923 ttranslate s3 0 40 0 
6924
6925 common s4 b c 
6926 ttranslate s4 0 -40 0 
6927 ~~~~~
6928
6929
6930 @subsubsection occt_draw_7_6_2  section, psection
6931
6932 These commands are no longer supported, so the result may be unpredictable.
6933 Use the command **bsection** instead.
6934
6935 Syntax:      
6936 ~~~~~
6937 section result shape1 shape2 
6938 psection name shape plane 
6939 ~~~~~
6940
6941 **section** creates a compound object consisting of the edges for the intersection curves on the faces of two shapes. 
6942
6943 **psection** creates a planar section consisting of the edges for the intersection curves on the faces of a shape and a plane. 
6944
6945 **Example:** 
6946 ~~~~~
6947 # section line between a cylinder and a box 
6948 pcylinder c 10 20 
6949 box b 0 0 5 15 15 15 
6950 trotate b 0 0 0 1 1 1 20 
6951 section s b c 
6952
6953 # planar section of a cone 
6954 pcone c 10 30 30 
6955 plane p 0 0 15 1 1 2 
6956 psection s c p 
6957 ~~~~~
6958
6959 @subsubsection occt_draw_7_6_3  sewing
6960
6961 Syntax:      
6962 ~~~~~
6963 sewing result [tolerance] shape1 shape2 ... 
6964 ~~~~~
6965
6966 **Sewing** joins shapes by connecting their adjacent or near adjacent edges. Adjacency can be redefined by modifying the tolerance value. 
6967
6968 **Example:** 
6969 ~~~~~
6970 # create two adjacent boxes 
6971 box b 0 0 0 1 2 3 
6972 box b2 0 2 0 1 2 3 
6973 sewing sr b b2 
6974 whatis sr 
6975 sr is a shape COMPOUND FORWARD Free Modified 
6976 ~~~~~
6977
6978 @subsection occt_draw_7_7 New Topological operations
6979
6980 The new algorithm of Boolean operations avoids a large number of weak points and limitations presented in the old Boolean operation algorithm.
6981 It also provides wider range of options and diagnostics.
6982 The algorithms of Boolean component are fully described in the @ref specification__boolean_operations "Boolean Operations" of boolean operation user guide.
6983
6984 For the Draw commands to perform operations in Boolean component, read the dedicated section @ref occt_draw_bop "Boolean operations commands"
6985
6986
6987 @subsection occt_draw_7_8  Drafting and blending
6988
6989 Drafting is creation of a new shape by tilting faces through an angle. 
6990
6991 Blending is the creation of a new shape by rounding edges to create a fillet. 
6992
6993   * Use the **depouille** command for drafting.
6994   * Use the **chamf** command to add a chamfer to an edge
6995   * Use the **blend** command for simple blending.
6996   * Use **bfuseblend** for a fusion + blending operation.
6997   * Use **bcutblend** for a cut + blending operation.
6998   * Use **buildevol**, **mkevol**, **updatevol** to realize varying radius blending.
6999
7000
7001 @subsubsection occt_draw_7_8_1  depouille
7002
7003 Syntax: 
7004 ~~~~~
7005 dep result shape dirx diry dirz face angle x y x dx dy dz [face angle...] 
7006 ~~~~~
7007
7008 Creates a new shape by drafting one or more faces of a shape. 
7009
7010 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. 
7011
7012 **Example:** 
7013 ~~~~~
7014 # draft a face of a box 
7015 box b 10 10 10 
7016 explode b f 
7017 == b_1 b_2 b_3 b_4 b_5 b_6 
7018
7019 dep a b 0 0 1 b_2 10 0 10 0 1 0 5 
7020 ~~~~~
7021
7022 @subsubsection occt_draw_7_8_2  chamf
7023
7024 Syntax:      
7025 ~~~~~
7026 chamf newname shape edge face S dist 
7027 chamf newname shape edge face dist1 dist2 
7028 chamf newname shape edge face A dist angle 
7029 ~~~~~
7030
7031 Creates a chamfer along the edge between faces using: 
7032
7033   * a equal distances from the edge
7034   * the edge, a face and distance, a second distance
7035   * the edge, a reference face and an angle
7036
7037 Use the dot syntax to select the faces and edges. 
7038
7039 **Examples:**
7040
7041 Let us create a chamfer based on equal distances from the edge (45 degree angle):
7042 ~~~~~
7043 # create a box 
7044 box b 1 2 3 
7045 chamf ch b . . S 0.5 
7046 ==Pick an object 
7047 # select an edge 
7048 ==Pick an object 
7049 # select an adjacent face 
7050 ~~~~~
7051
7052 Let us create a chamfer based on different distances from the selected edge:
7053 ~~~~~
7054 box b 1 2 3 
7055 chamf ch b . . 0.3 0.4 
7056 ==Pick an object 
7057 # select an edge 
7058 ==Pick an object 
7059 # select an adjacent face
7060 ~~~~~
7061  
7062 Let us create a chamfer based on a distance from the edge and an angle:
7063  
7064 ~~~~~
7065 box b 1 2 3 
7066 chamf ch b . . A 0.4 30 
7067 ==Pick an object 
7068 # select an edge 
7069 ==Pick an object 
7070 # select an adjacent face 
7071 ~~~~~
7072
7073 @subsubsection occt_draw_7_8_3  blend
7074
7075 Syntax:      
7076 ~~~~~
7077 blend result object rad1 ed1 rad2 ed2 ... [R/Q/P] 
7078 ~~~~~
7079
7080 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. 
7081
7082 **Example:** 
7083 ~~~~~
7084 # blend a box, click on an edge 
7085 box b 20 20 20 
7086 blend b b 2 . 
7087 ==tolerance ang : 0.01 
7088 ==tolerance 3d : 0.0001 
7089 ==tolerance 2d : 1e-05 
7090 ==fleche : 0.001 
7091 ==tolblend 0.01 0.0001 1e-05 0.001 
7092 ==Pick an object 
7093 # click on the edge you want ot fillet 
7094
7095 ==COMPUTE: temps total 0.1s dont : 
7096 ==- Init + ExtentAnalyse 0s 
7097 ==- PerformSetOfSurf 0.02s 
7098 ==- PerformFilletOnVertex 0.02s 
7099 ==- FilDS 0s 
7100 ==- Reconstruction 0.06s 
7101 ==- SetRegul 0s 
7102 ~~~~~
7103
7104 @subsubsection occt_draw_7_8_4  bfuseblend
7105
7106 Syntax:
7107 ~~~~~
7108 bfuseblend name shape1 shape2 radius [-d]
7109 ~~~~~
7110  
7111 Creates a boolean fusion of two shapes and then blends (fillets) the intersection edges using the given radius.
7112 Option [-d] enables the Debugging mode in which the error messages, if any, will be printed.
7113
7114 **Example:**
7115 ~~~~~
7116 # fuse-blend two boxes
7117 box b1 20 20 5
7118 copy b1 b2
7119 ttranslate b2 -10 10 3
7120 bfuseblend a b1 b2 1
7121 ~~~~~
7122
7123 @subsubsection occt_draw_7_8_4a  bcutblend
7124
7125 Syntax:
7126 ~~~~~
7127 bcutblend name shape1 shape2 radius [-d]
7128 ~~~~~
7129
7130 Creates a boolean cut of two shapes and then blends (fillets) the intersection edges using the given radius.
7131 Option [-d] enables the Debugging mode in which the error messages, if any, will be printed.
7132
7133 **Example:**
7134 ~~~~~
7135 # cut-blend two boxes
7136 box b1 20 20 5
7137 copy b1 b2
7138 ttranslate b2 -10 10 3
7139 bcutblend a b1 b2 1
7140 ~~~~~
7141
7142 @subsubsection occt_draw_7_8_5  mkevol, updatevol, buildevol
7143
7144 Syntax:      
7145 ~~~~~
7146 mkevol result object (then use updatevol) [R/Q/P] 
7147 updatevol edge u1 radius1 [u2 radius2 ...] 
7148 buildevol 
7149 ~~~~~
7150
7151 These three commands work together to create fillets with evolving radii. 
7152
7153 * **mkevol** allows specifying the shape and the name of the result. It returns the tolerances of the fillet. 
7154 * **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. 
7155 * **buildevol** produces the result described previously in **mkevol** and **updatevol**. 
7156
7157 **Example:** 
7158 ~~~~~
7159 # makes an evolved radius on a box 
7160 box b 10 10 10 
7161 mkevol b b 
7162 ==tolerance ang : 0.01 
7163 ==tolerance 3d : 0.0001 
7164 ==tolerance 2d : 1e-05 
7165 ==fleche : 0.001 
7166 ==tolblend 0.01 0.0001 1e-05 0.001 
7167
7168 # click an edge 
7169 updatevol . 0 1 1 3 2 2 
7170 ==Pick an object 
7171
7172 buildevol 
7173 ==Dump of SweepApproximation 
7174 ==Error 3d = 1.28548881203818e-14 
7175 ==Error 2d = 1.3468326936926e-14 , 
7176 ==1.20292299999388e-14 
7177 ==2 Segment(s) of degree 3 
7178
7179 ==COMPUTE: temps total 0.91s dont : 
7180 ==- Init + ExtentAnalyse 0s 
7181 ==- PerformSetOfSurf 0.33s 
7182 ==- PerformFilletOnVertex 0.53s 
7183 ==- FilDS 0.01s 
7184 ==- Reconstruction 0.04s 
7185 ==- SetRegul 0s 
7186 ~~~~~
7187
7188
7189 @subsection occt_draw_defeaturing Defeaturing
7190
7191 Draw command **removefeatures** is intended for performing @ref occt_modalg_defeaturing "3D Model Defeaturing", i.e. it performs the removal of the requested features from the shape.
7192
7193 Syntax:
7194 ~~~~
7195 removefeatures result shape f1 f2 ... [-nohist] [-parallel]
7196
7197 Where:
7198 result   - result of the operation;
7199 shape    - the shape to remove the features from;
7200 f1, f2   - features to remove from the shape;
7201
7202 Options:
7203 nohist   - disables the history collection;
7204 parallel - enables the parallel processing mode.
7205 ~~~~
7206
7207
7208 @subsection occt_draw_makeperiodic 3D Model Periodicity
7209
7210 Draw module for @ref occt_modalg_makeperiodic "making the shape periodic" includes the following commands:
7211 * **makeperiodic** - makes the shape periodic in required directions;
7212 * **repeatshape** - repeats the periodic shape in requested periodic direction;
7213 * **periodictwins** - returns the periodic twins for the shape;
7214 * **clearrepetitions** - clears all previous repetitions of the periodic shape.
7215
7216 @subsubsection occt_draw_makeperiodic_makeperiodic makeperiodic
7217
7218 The command makes the shape periodic in the required directions with the required period.
7219 If trimming is given it trims the shape to fit the requested period.
7220
7221 Syntax:
7222 ~~~~
7223 makeperiodic result shape [-x/y/z period [-trim first]]
7224
7225 Where:
7226 result        - resulting periodic shape;
7227 shape         - input shape to make it periodic:
7228 -x/y/z period - option to make the shape periodic in X, Y or Z direction with the given period;
7229 -trim first   - option to trim the shape to fit the required period, starting the period in first.
7230 ~~~~
7231
7232 @subsubsection occt_draw_makeperiodic_repeatshape repeatshape
7233
7234 The command repeats the periodic shape in periodic direction requested number of time.
7235 The result contains the all the repeated shapes glued together.
7236 The command should be called after **makeperiodic** command.
7237
7238 Syntax:
7239 ~~~~
7240 repeatshape result -x/y/z times
7241
7242 Where:
7243 result       - resulting shape;
7244 -x/y/z times - direction for repetition and number of repetitions (negative number of times means the repetition in negative direction).
7245 ~~~~
7246
7247 @subsubsection occt_draw_makeperiodic_periodictwins periodictwins
7248
7249 For the given shape the command returns the identical shapes located on the opposite sides of the periodic direction.
7250 All periodic twins should have the same geometry.
7251 The command should be called after **makeperiodic** command.
7252
7253 Syntax:
7254 ~~~~
7255 periodictwins twins shape
7256
7257 Where:
7258 twins - periodic twins for the given shape
7259 shape - shape to find the twins for
7260 ~~~~
7261
7262 @subsubsection occt_draw_makeperiodic_clearrepetitions clearrepetitions
7263
7264 The command clears all previous repetitions of the periodic shape allowing to start the repetitions over.
7265 No arguments are needed for the command.
7266
7267
7268 @subsection occt_draw_makeconnected Making the touching shapes connected
7269
7270 Draw module for @ref occt_modalg_makeconnected "making the touching same-dimensional shapes connected" includes the following commands:
7271 * **makeconnected** - make the input shapes connected or glued, performs material associations;
7272 * **cmaterialson** - returns the materials located on the requested side of a shape;
7273 * **cmakeperiodic** - makes the connected shape periodic in requested directions;
7274 * **crepeatshape** - repeats the periodic connected shape in requested directions requested number of times;
7275 * **cperiodictwins** - returns all periodic twins for the shape;
7276 * **cclearrepetitions** - clears all previous repetitions of the periodic shape, keeping the shape periodic.
7277
7278 @subsubsection occt_draw_makeconnected_makeconnected makeconnected
7279
7280 The command makes the input touching shapes connected.
7281
7282 Syntax:
7283 ~~~~
7284 makeconnected result shape1 shape2 ...
7285
7286 Where:
7287 result            - resulting connected shape.
7288 shape1 shape2 ... - shapes to be made connected.
7289 ~~~~
7290
7291 @subsubsection occt_draw_makeconnected_cmaterialson cmaterialson
7292
7293 The command returns the materials located on the requested side of the shape.
7294 The command should be called after the shapes have been made connected, i.e. after the command **makeconnected**.
7295
7296 Syntax:
7297 ~~~~
7298 cmaterialson result +/- shape
7299
7300 Where:
7301 result - material shapes
7302 shape  - shape for which the materials are needed
7303 +/-    - side of a given shape ('+' for positive side, '-' - for negative).
7304 ~~~~
7305
7306 @subsubsection occt_draw_makeconnected_cmakeperiodic cmakeperiodic
7307
7308 The command makes the connected shape periodic in the required directions with the required period.
7309 The command should be called after the shapes have been made connected, i.e. after the command **makeconnected**.
7310
7311 Syntax:
7312 ~~~~
7313 cmakeperiodic result [-x/y/z period [-trim first]]
7314  
7315 Where:
7316 result        - resulting periodic shape;
7317 shape         - input shape to make it periodic:
7318 -x/y/z period - option to make the shape periodic in X, Y or Z direction with the given period;
7319 -trim first   - option to trim the shape to fit the required period, starting the period in first.
7320 ~~~~
7321
7322 @subsubsection occt_draw_makeconnected_crepeatshape crepeatshape
7323
7324 The command repeats the connected periodic shape in the required periodic directions required number of times.
7325 The command should be called after the shapes have been made connected and periodic, i.e. after the commands **makeconnected** and **cmakeperiodic**.
7326
7327 Syntax:
7328 ~~~~
7329 crepeatshape result -x/y/z times
7330
7331 Where:
7332 result       - resulting shape;
7333 -x/y/z times - direction for repetition and number of repetitions (negative number of times means the repetition in negative direction).
7334 ~~~~
7335
7336 @subsubsection occt_draw_makeconnected_cperiodictwins cperiodictwins
7337
7338 The command returns all periodic twins for the shape.
7339 The command should be called after the shapes have been made connected and periodic, i.e. after the commands **makeconnected** and **cmakeperiodic**.
7340
7341 Syntax:
7342 ~~~~
7343 cperiodictwins twins shape
7344
7345 Where:
7346 twins - periodic twins of a shape.
7347 shape - input shape.
7348 ~~~~
7349
7350 @subsubsection occt_draw_makeconnected_cclearrepetitions cclearrepetitions
7351
7352 The command clears all previous repetitions of the periodic shape keeping the shape periodic.
7353 The command should be called after the shapes have been made connected, periodic and the repetitions have been applied to the periodic shape, i.e. after the commands **makeconnected**, **cmakeperiodic** and **crepeatshape**.
7354 Otherwise the command will have no effect.
7355
7356 Syntax:
7357 ~~~~
7358 cclearrepetitions [result]
7359 ~~~~
7360
7361
7362 @subsection occt_draw_7_9  Analysis of topology and geometry
7363
7364 Analysis of shapes includes commands to compute length, area, volumes and inertial properties, as well as to compute some aspects impacting shape validity.
7365
7366   * Use **lprops**, **sprops**, **vprops** to compute integral properties.
7367   * Use **bounding** to compute and to display the bounding box of a shape.
7368   * Use **distmini** to calculate the minimum distance between two shapes.
7369   * Use **isbbinterf** to check if the two shapes are interfered by their bounding boxes. 
7370   * Use **xdistef**, **xdistcs**, **xdistcc**, **xdistc2dc2dss**, **xdistcc2ds** to check the distance between two objects on even grid.
7371   * Use **checkshape** to check validity of the shape.
7372   * Use **tolsphere** to see the tolerance spheres of all vertices in the shape.
7373   * Use **validrange** to check range of an edge not covered by vertices.
7374
7375
7376 @subsubsection occt_draw_7_9_1  lprops, sprops, vprops
7377
7378 Syntax:      
7379 ~~~~~
7380 lprops shape  [x y z] [-skip] [-full] [-tri]
7381 sprops shape [epsilon] [c[losed]] [x y z] [-skip] [-full] [-tri]
7382 vprops shape [epsilon] [c[losed]] [x y z] [-skip] [-full] [-tri] 
7383 ~~~~~
7384
7385 * **lprops** computes the mass properties of all edges in the shape with a linear density of 1;
7386 * **sprops** of all faces with a surface density of 1;
7387 * **vprops** of all solids with a density of 1. 
7388
7389 For computation of properties of the shape, exact geomery (curves, surfaces) or
7390 some discrete data (polygons, triangulations) can be used for calculations.
7391 The epsilon, if given, defines relative precision of computation.
7392 The **closed** flag, if present, forces computation only closed shells of the shape.
7393 The centroid coordinates will be put to DRAW variables x y z (if given).
7394 Shared entities will be taken in account only one time in the **skip** mode.
7395 All values are output with the full precision in the **full** mode.
7396 Preferable source of geometry data are triangulations in case if it exists, 
7397 if the **-tri** key is used, otherwise preferable data is exact geometry.
7398 If epsilon is given, exact geometry (curves, surfaces) are used for calculations independently of using key **-tri**.
7399
7400 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. 
7401
7402 **Example:** 
7403 ~~~~~
7404 # volume of a cylinder 
7405 pcylinder c 10 20 
7406 vprops c 
7407 == results 
7408 Mass : 6283.18529981086 
7409
7410 Center of gravity : 
7411 X = 4.1004749224903e-06 
7412 Y = -2.03392858349861e-16 
7413 Z = 9.9999999941362 
7414
7415 Matrix of Inertia : 
7416 366519.141445068                    5.71451850691484e-12 
7417 0.257640437382627 
7418 5.71451850691484e-12                366519.141444962 
7419 2.26823064169991e-10                0.257640437382627 
7420 2.26823064169991e-10                314159.265358863 
7421
7422 Moments : 
7423 IX = 366519.141446336 
7424 IY = 366519.141444962 
7425 I.Z = 314159.265357595 
7426 ~~~~~
7427
7428
7429 @subsubsection occt_draw_7_9_2   bounding
7430
7431 Syntax:      
7432 ~~~~~
7433 bounding {-s shape | -c xmin ymin zmin xmax ymax zmax} [-obb] [-shape name] [-dump] [-notriangulation] [-perfmeter name NbIters] [-save xmin ymin zmin xmax ymax zmax] [-nodraw] [-optimal] [-exttoler]
7434 ~~~~~
7435
7436 Computes and displays the bounding box (BndBox) of a shape. The bounding box is a cuboid that circumscribes the source shape.
7437 Generaly, bounding boxes can be divided into two main types:
7438   - axis-aligned BndBox (AABB). I.e. the box whose edges are parallel to an axis of World Coordinate System (WCS);
7439   - oriented BndBox (OBB). I.e. not AABB.
7440
7441 Detailed information about this command is availabe in DRAW help-system (enter "help bounding" in DRAW application).
7442   
7443 **Example 1: Creation of AABB with given corners** 
7444 ~~~~~
7445 bounding -c 50 100 30 180 200 100 -shape result
7446 # look at the box
7447 vdisplay result
7448 vfit
7449 vsetdispmode 1
7450 ~~~~~
7451
7452 **Example 2: Compare AABB and OBB** 
7453 ~~~~~
7454 # Create a torus and rotate it
7455 ptorus t 20 5 
7456 trotate t 5 10 15 1 1 1 28
7457
7458 # Create AABB from the torus
7459 bounding -s t -shape ra -dump -save x1 y1 z1 x2 y2 z2
7460 ==Axes-aligned bounding box
7461 ==X-range: -26.888704600189307 23.007685197265488
7462 ==Y-range: -22.237699567214314 27.658690230240481
7463 ==Z-range: -13.813966507560762 12.273995247458407
7464
7465 # Obtain the boundaries
7466 dump x1 y1 z1 x2 y2 z2
7467 ==*********** Dump of x1 *************
7468 ==-26.8887046001893
7469
7470 ==*********** Dump of y1 *************
7471 ==-22.2376995672143
7472
7473 ==*********** Dump of z1 *************
7474 ==-13.8139665075608
7475
7476 ==*********** Dump of x2 *************
7477 ==23.0076851972655
7478
7479 ==*********** Dump of y2 *************
7480 ==27.6586902302405
7481
7482 ==*********** Dump of z2 *************
7483 ==12.2739952474584
7484
7485 # Compute the volume of AABB
7486 vprops ra 1.0e-12
7487 ==Mass :         64949.9
7488
7489 # Let us check this value
7490 dval (x2-x1)*(y2-y1)*(z2-z1)
7491 ==64949.886543606823
7492 ~~~~~
7493
7494 The same result is obtained.
7495
7496 ~~~~~
7497 # Create OBB from the torus
7498 bounding -s t -shape ro -dump -obb
7499 ==Oriented bounding box
7500 ==Center: -1.9405097014619073 2.7104953315130857 -0.76998563005117782
7501 ==X-axis: 0.31006700219833244 -0.23203206410428409 0.9219650619059514
7502 ==Y-axis: 0.098302309139513336 -0.95673739537318336 -0.27384340837854165
7503 ==Z-axis: 0.94561890324040099 0.17554109923901748 -0.27384340837854493
7504 ==Half X: 5.0000002000000077
7505 ==Half Y: 26.783728747002169
7506 ==Half Z: 26.783728747002165
7507
7508 # Compute the volume of OBB
7509 vprops ro 1.0e-12
7510 ==Mass :         28694.7
7511 ~~~~~
7512
7513 As we can see, the volume of OBB is significantly less than the volume of AABB.
7514
7515 @subsubsection occt_draw_7_9_2a   isbbinterf
7516
7517 Syntax:      
7518 ~~~~~
7519 isbbinterf shape1 shape2 [-o]
7520 ~~~~~
7521
7522 Checks whether the bounding boxes created from the given shapes are interfered. If "-o"-option is switched on then the oriented boxes will be checked. Otherwise, axis-aligned boxes will be checked.
7523
7524 **Example 1: Not interfered AABB** 
7525 ~~~~~
7526 box b1 100 60 140 20 10 80
7527 box b2 210 200 80 120 60 90
7528 isbbinterf b1 b2
7529 ==The shapes are NOT interfered by AABB.
7530 ~~~~~
7531
7532 **Example 2: Interfered AABB** 
7533 ~~~~~
7534 box b1 300 300 300
7535 box b2 100 100 100 50 50 50
7536 isbbinterf b1 b2
7537 ==The shapes are interfered by AABB.
7538 ~~~~~
7539
7540 **Example 3: Not interfered OBB** 
7541 ~~~~~
7542 box b1 100 150 200
7543 copy b1 b2
7544 trotate b1 -150 -150 -150 1 2 3 -40
7545 trotate b2 -150 -150 -150 1 5 2 60
7546
7547 # Check of interference
7548 isbbinterf b1 b2 -o
7549 ==The shapes are NOT interfered by OBB.
7550 ~~~~~
7551
7552 **Example 4: Interfered OBB** 
7553 ~~~~~
7554 box b1 100 150 200
7555 copy b1 b2
7556 trotate b1 -50 -50 -50 1 1 1 -40
7557 trotate b2 -50 -50 -50 1 1 1 60
7558
7559 # Check of interference
7560 isbbinterf b1 b2 -o
7561 ==The shapes are interfered by OBB.
7562 ~~~~~
7563
7564 @subsubsection occt_draw_7_9_3  distmini
7565
7566 Syntax:      
7567 ~~~~~
7568 distmini name Shape1 Shape2 
7569 ~~~~~
7570
7571 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 in red and the results are listed in the shell window. The *distmini* lines are considered as shapes which have a value v. 
7572
7573 **Example:** 
7574 ~~~~~
7575 box b 0 0 0 10 20 30 
7576 box b2 30 30 0 10 20 30 
7577 distmini d1 b b2 
7578 ==the distance value is : 22.3606797749979 
7579 ==the number of solutions is :2 
7580
7581 ==solution number 1 
7582 ==the type of the solution on the first shape is 0 
7583 ==the type of the solution on the second shape is 0 
7584 ==the coordinates of the point on the first shape are: 
7585 ==X=10 Y=20 Z=30 
7586 ==the coordinates of the point on the second shape 
7587 are: 
7588 ==X=30 Y=30 Z=30 
7589
7590 ==solution number 2: 
7591 ==the type of the solution on the first shape is 0 
7592 ==the type of the solution on the second shape is 0 
7593 ==the coordinates of the point on the first shape are: 
7594 ==X=10 Y=20 Z=0 
7595 ==the coordinates of the point on the second shape 
7596 are: 
7597 ==X=30 Y=30 Z=0 
7598
7599 ==d1_val d1 d12 
7600 ~~~~~
7601
7602 @subsubsection occt_draw_7_9_4 xdistef, xdistcs, xdistcc, xdistc2dc2dss, xdistcc2ds 
7603
7604 Syntax:
7605 ~~~~~
7606 xdistef edge face
7607 xdistcs curve surface firstParam lastParam [NumberOfSamplePoints]
7608 xdistcc curve1 curve2 startParam finishParam [NumberOfSamplePoints]
7609 xdistcc2ds c curve2d surf startParam finishParam [NumberOfSamplePoints]
7610 xdistc2dc2dss curve2d_1 curve2d_2 surface_1 surface_2 startParam finishParam [NumberOfSamplePoints]
7611 ~~~~~
7612
7613 It is assumed that curves have the same parametrization range and *startParam* is less than *finishParam*.
7614
7615 Commands with prefix *xdist* allow checking the distance between two objects on even grid:
7616   * **xdistef** -- distance between edge and face;
7617   * **xdistcs** -- distance between curve and surface. This means that the projection of each sample point to the surface is computed;
7618   * **xdistcc** -- distance between two 3D curves;
7619   * **xdistcc2ds** -- distance between 3d curve and 2d curve on surface;
7620   * **xdistc2dc2dss** -- distance between two 2d curves on surface.
7621   
7622 **Examples**
7623 ~~~~~
7624 bopcurves b1 b2 -2d 
7625 mksurf s1 b1
7626 mksurf s2 b2
7627 xdistcs c_1 s1 0 1 100
7628 xdistcc2ds c_1 c2d2_1 s2 0 1
7629 xdistc2dc2dss c2d1_1 c2d2_1 s1 s2 0 1 1000
7630 ~~~~~
7631
7632 @subsubsection occt_draw_7_9_5  checkshape
7633
7634 Syntax:                  
7635 ~~~~~
7636 checkshape [-top] shape [result] [-short] 
7637 ~~~~~
7638
7639 Where: 
7640 * *top* -- optional parameter, which allows checking only topological validity of a shape. 
7641 * *shape* -- the only required parameter, defines the name of the shape to check. 
7642 * *result* -- optional parameter, defines custom prefix for the output shape names.
7643 * *short* -- a short description of the check. 
7644
7645 **checkshape** examines the selected object for topological and geometric coherence. The object should be a three dimensional shape. 
7646
7647 **Example:** 
7648 ~~~~~
7649 # checkshape returns a comment valid or invalid 
7650 box b1 0 0 0 1 1 1 
7651 checkshape b1 
7652 # returns the comment 
7653 this shape seems to be valid 
7654 ~~~~~
7655
7656 @subsubsection occt_draw_7_9_6  tolsphere
7657
7658 Syntax:                  
7659 ~~~~~
7660 tolsphere shape
7661 ~~~~~
7662
7663 Where: 
7664 * *shape* -- the name of the shape to process. 
7665
7666 **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.
7667
7668 **Example:** 
7669 ~~~~~
7670 # tolsphere returns all names of created spheres.
7671 box b1 0 0 0 1 1 1 
7672 settolerance b1 0.05
7673 tolsphere b1
7674 # creates spheres and returns the names
7675 b1_v1 b1_v2 b1_v3 b1_v4 b1_v5 b1_v6 b1_v7 b1_v8
7676 ~~~~~
7677
7678 @subsubsection occt_draw_7_9_7  validrange
7679
7680 Syntax:                  
7681 ~~~~~
7682 validrange edge [(out) u1 u2]
7683 ~~~~~
7684
7685 Where: 
7686 * *edge* -- the name of the edge to analyze. 
7687 * *u1*, *u2* -- optional names of variables to put into the range.
7688
7689 **validrange** computes valid range of the edge. If *u1* and *u2* are not given, it returns the first and the last parameters. Otherwise, it sets variables *u1* and *u2*.
7690
7691 **Example:** 
7692 ~~~~~
7693 circle c 0 0 0 10
7694 mkedge e c
7695 mkedge e c 0 pi
7696 validrange e
7697 # returns the range
7698 1.9884375000000002e-008 3.1415926337054181
7699 validrange e u1 u2
7700 dval u1
7701 1.9884375000000002e-008
7702 dval u2
7703 3.1415926337054181
7704 ~~~~~
7705
7706
7707 @subsection occt_draw_7_10  Surface creation
7708
7709 Surface creation commands include surfaces created from boundaries and from spaces between shapes. 
7710   * **gplate** creates a surface from a boundary definition.
7711   * **filling** creates a surface from a group of surfaces.
7712
7713 @subsubsection occt_draw_7_10_1   gplate,
7714
7715 Syntax: 
7716 ~~~~~
7717 gplate result nbrcurfront nbrpntconst [SurfInit] [edge 0] [edge tang (1:G1;2:G2) surf]...[point] [u v tang (1:G1;2:G2) surf] ... 
7718 ~~~~~
7719
7720 Creates a surface from a defined boundary. The boundary can be defined using edges, points, or other surfaces. 
7721
7722 **Example:**
7723 ~~~~~
7724 plane p 
7725 trim p p -1 3 -1 3 
7726 mkface p p 
7727
7728 beziercurve c1 3 0 0 0 1 0 1 2 0 0 
7729 mkedge e1 c1 
7730 tcopy e1 e2 
7731 tcopy e1 e3 
7732
7733 ttranslate e2 0 2 0 
7734 trotate e3 0 0 0 0 0 1 90 
7735 tcopy e3 e4 
7736 ttranslate e4 2 0 0 
7737 # create the surface 
7738 gplate r1 4 0 p e1 0 e2 0 e3 0 e4 0 
7739 == 
7740 ======== Results =========== 
7741 DistMax=8.50014503228635e-16 
7742 * GEOMPLATE END* 
7743 Calculation time: 0.33 
7744 Loop number: 1 
7745 Approximation results 
7746 Approximation error : 2.06274907619957e-13 
7747 Criterium error : 4.97600631215754e-14 
7748
7749 #to create a surface defined by edges and passing through a point 
7750 # to define the border edges and the point 
7751 plane p 
7752 trim p p -1 3 -1 3 
7753 mkface p p 
7754
7755 beziercurve c1 3 0 0 0 1 0 1 2 0 0 
7756 mkedge e1 c1 
7757 tcopy e1 e2 
7758 tcopy e1 e3 
7759
7760 ttranslate e2 0 2 0 
7761 trotate e3 0 0 0 0 0 1 90 
7762 tcopy e3 e4 
7763 ttranslate e4 2 0 0 
7764 # to create a point 
7765 point pp 1 1 0 
7766 # to create the surface 
7767 gplate r2 4 1 p e1 0 e2 0 e3 0 e4 0 pp 
7768 == 
7769 ======== Results =========== 
7770 DistMax=3.65622157610934e-06 
7771 * GEOMPLATE END* 
7772 Calculculation time: 0.27 
7773 Loop number: 1 
7774 Approximation results 
7775 Approximation error : 0.000422195884750181 
7776 Criterium error : 3.43709808053967e-05 
7777 ~~~~~
7778
7779 @subsubsection occt_draw_7_10_2   filling, fillingparam
7780
7781 Syntax:      
7782 ~~~~~
7783 filling result nbB nbC nbP [SurfInit] [edge][face]order... 
7784 edge[face]order... point/u v face order... 
7785 ~~~~~
7786
7787 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. 
7788
7789 To define the surface border: 
7790
7791   * enter the number of edges, constraints, and points
7792   * enumerate the edges, constraints and points
7793
7794 The surface can pass through other points. These are defined after the border definition. 
7795
7796 You can use the *fillingparam* command to access the filling parameters. 
7797
7798 The options are: 
7799
7800  * <i>-l</i> : to list current values 
7801  * <i>-i</i> : to set default values 
7802  * <i>-rdeg nbPonC nbIt anis </i> : to set filling options 
7803  * <i>-c t2d t3d tang tcur </i> : to set tolerances 
7804  * <i>-a maxdeg maxseg </i> : Approximation option 
7805
7806 **Example:** 
7807 ~~~~~
7808 # to create four curved survaces and a point 
7809 plane p 
7810 trim p p -1 3 -1 3 
7811 mkface p p 
7812
7813 beziercurve c1 3 0 0 0 1 0 1 2 0 0 
7814 mkedge e1 c1 
7815 tcopy e1 e2 
7816 tcopy e1 e3 
7817
7818 ttranslate e2 0 2 0 
7819 trotate e3 0 0 0 0 0 1 90 
7820 tcopy e3 e4 
7821 ttranslate e4 2 0 0 
7822
7823 point pp 1 1 0 
7824
7825 prism f1 e1 0 -1 0 
7826 prism f2 e2 0 1 0 
7827 prism f3 e3 -1 0 0 
7828 prism f4 e4 1 0 0 
7829
7830 # to create a tangential surface 
7831 filling r1 4 0 0 p e1 f1 1 e2 f2 1 e3 f3 1 e4 f4 1 
7832 # to create a tangential surface passing through point pp 
7833 filling r2 4 0 1 p e1 f1 1 e2 f2 1 e3 f3 1 e4 f4 1 pp# 
7834 # to visualise the surface in detail 
7835 isos r2 40 
7836 # to display the current filling parameters 
7837 fillingparam -l 
7838 == 
7839 Degree = 3 
7840 NbPtsOnCur = 10 
7841 NbIter = 3 
7842 Anisotropie = 0 
7843 Tol2d = 1e-05 
7844 Tol3d = 0.0001 
7845 TolAng = 0.01 
7846 TolCurv = 0.1 
7847
7848 MaxDeg = 8 
7849 MaxSegments = 9 
7850 ~~~~~
7851
7852
7853 @subsection occt_draw_7_11  Complex Topology
7854
7855 Complex topology is the group of commands that modify the topology of shapes. This includes feature modeling. 
7856
7857
7858 @subsubsection occt_draw_7_11_1  offsetshape, offsetcompshape
7859
7860 Syntax:      
7861 ~~~~~
7862 offsetshape r shape offset [tol] [face ...] 
7863 offsetcompshape r shape offset [face ...] 
7864 ~~~~~
7865
7866 **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. 
7867
7868 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. 
7869
7870 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. 
7871
7872 The opening between the object interior and exterior is defined by the argument face or faces. 
7873
7874 **Example:** 
7875 ~~~~~
7876 box b1 10 20 30 
7877 explode b1 f 
7878 == b1_1 b1_2 b1_3 b1_4 b1_5 b1_6 
7879 offsetcompshape r b1 -1 b1_3 
7880 ~~~~~
7881
7882 @subsubsection occt_draw_7_11_2  featprism, featdprism, featrevol, featlf, featrf
7883
7884 Syntax:      
7885 ~~~~~
7886 featprism shape element skface Dirx Diry Dirz Fuse(0/1/2) Modify(0/1) 
7887 featdprism shape face skface angle Fuse(0/1/2) Modify(0/1) 
7888 featrevol shape element skface Ox Oy Oz Dx Dy Dz Fuse(0/1/2) Modify(0/1) 
7889 featlf shape wire plane DirX DirY DirZ DirX DirY DirZ Fuse(0/1/2) Modify(0/1) 
7890 featrf shape wire plane X Y Z DirX DirY DirZ Size Size Fuse(0/1/2) Modify(0/1) 
7891 featperform prism/revol/pipe/dprism/lf result [[Ffrom] Funtil] 
7892 featperformval prism/revol/dprism/lf result value 
7893 ~~~~~
7894
7895 **featprism** loads the arguments for a prism with contiguous sides normal to the face. 
7896
7897 **featdprism** loads the arguments for a prism which is created in a direction normal to the face and includes a draft angle. 
7898
7899 **featrevol** loads the arguments for a prism with a circular evolution. 
7900
7901 **featlf** loads the arguments for a linear rib or slot. This feature uses planar faces and a wire as a guideline. 
7902
7903 **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. 
7904
7905 **featperform** loads the arguments to create the feature. 
7906
7907 **featperformval** uses the defined arguments to create a feature with a limiting value. 
7908
7909 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. 
7910
7911 **Examples:** 
7912
7913 Let us create a feature prism with a draft angle and a normal direction :
7914
7915 ~~~~~
7916 # create a box with a wire contour on the upper face 
7917 box b 1 1 1 
7918 profil f O 0 0 1 F 0.25 0.25 x 0.5 y 0.5 x -0.5 
7919 explode b f 
7920 # loads the feature arguments defining the draft angle 
7921 featdprism b f b_6 5 1 0 
7922 # create the feature 
7923 featperformval dprism r 1 
7924 ==BRepFeat_MakeDPrism::Perform(Height) 
7925 BRepFeat_Form::GlobalPerform () 
7926  Gluer 
7927  still Gluer 
7928  Gluer result 
7929 ~~~~~
7930
7931 Let us  create a feature prism with circular direction :
7932
7933 ~~~~~
7934 # create a box with a wire contour on the upper face 
7935 box b 1 1 1 
7936 profil f O 0 0 1 F 0.25 0.25 x 0.5 y 0.5 x -0.5 
7937 explode b f 
7938 # loads the feature arguments defining a rotation axis 
7939 featrevol b f b_6 1 0 1 0 1 0 1 0 
7940 featperformval revol r 45 
7941 ==BRepFeat_MakeRevol::Perform(Angle) 
7942 BRepFeat_Form::GlobalPerform () 
7943  Gluer 
7944  still Gluer 
7945  Gluer result 
7946 ~~~~~
7947
7948
7949 Let us create a slot using the linear feature :
7950
7951 ~~~~~
7952 #create the base model using the multi viewer 
7953 mu4 
7954 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 
7955 prism pr p 0 0 1 
7956 # create the contour for the linear feature 
7957 vertex v1 -0.2 4 0.3 
7958 vertex v2 0.2 4 0.3 
7959 vertex v3 0.2 0.2 0.3 
7960 vertex v4 4 0.2 0.3 
7961 vertex v5 4 -0.2 0.3 
7962 edge e1 v1 v2 
7963 edge e2 v2 v3 
7964 edge e3 v3 v4 
7965 edge e4 v4 v5 
7966 wire w e1 e2 e3 e4 
7967 # define a plane 
7968 plane pl 0.2 0.2 0.3 0 0 1 
7969 # loads the linear feature arguments 
7970 featlf pr w pl 0 0 0.3 0 0 0 0 1 
7971 featperform lf result 
7972 ~~~~~
7973
7974 Let us create a rib using the revolution feature :
7975
7976 ~~~~~
7977 #create the base model using the multi viewer 
7978 mu4 
7979 pcylinder c1 3 5 
7980 # create the contour for the revolution feature 
7981 profile w c 1 190 WW 
7982 trotate w 0 0 0 1 0 0 90 
7983 ttranslate w -3 0 1 
7984 trotate w -3 0 1.5 0 0 1 180 
7985 plane pl -3 0 1.5 0 1 0 
7986 # loads the revolution feature arguments 
7987 featrf c1 w pl 0 0 0 0 0 1 0.3 0.3 1 1 
7988 featperform rf result 
7989 ~~~~~
7990
7991 @subsubsection occt_draw_7_11_3  draft
7992
7993 Syntax: 
7994 ~~~~~
7995 draft result shape dirx diry dirz angle shape/surf/length [-IN/-OUT] [Ri/Ro] [-Internal] 
7996 ~~~~~
7997
7998 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. 
7999
8000   * The draft angle is measured in radians.
8001   * The draft direction is determined by the argument -INTERNAL
8002   * The argument Ri/Ro deftermines whether the corner edges of the draft surfaces are angular or rounded.
8003   * Arguments that can be used to define the surface distance are:
8004    * length, a defined distance
8005    * shape, until the surface contacts a shape
8006    * surface, until the surface contacts a surface.
8007
8008 **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.
8009
8010 **Example:** 
8011 ~~~~~
8012 # to create a simple profile 
8013 profile p F 0 0 x 2 y 4 tt 0 4 w 
8014 # creates a draft with rounded angles 
8015 draft res p 0 0 1 3 1 -Ro 
8016 # to create a profile with an internal angle 
8017 profile p F 0 0 x 2 y 4 tt 1 1.5 tt 0 4 w 
8018 # creates a draft with rounded external angles 
8019 draft res p 0 0 1 3 1 -Ro 
8020 ~~~~~
8021
8022 @subsubsection occt_draw_7_11_4  deform
8023
8024 Syntax:      
8025 ~~~~~
8026 deform newname name CoeffX CoeffY CoeffZ
8027 ~~~~~
8028
8029 Modifies the shape using the x, y, and z coefficients. You can reduce or magnify the shape in the x,y, and z directions. 
8030  
8031 **Example:** 
8032 ~~~~~
8033 pcylinder c 20 20 
8034 deform a c 1 3 5 
8035 # the conversion to bspline is followed by the 
8036 deformation 
8037 ~~~~~
8038
8039
8040 @subsubsection occt_draw_7_11_5 nurbsconvert
8041
8042 Syntax:
8043  
8044 ~~~~~
8045 nurbsconvert result name [result name] 
8046 ~~~~~
8047
8048 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. 
8049
8050
8051 @subsubsection occt_draw_7_11_6 edgestofaces
8052
8053 **edgestofaces** - The command allows building planar faces from the planar edges randomly located in 3D space.
8054
8055 It has the following syntax:
8056 ~~~~
8057 edgestofaces r_faces edges [-a AngTol -s Shared(0/1)]
8058 ~~~~
8059 Options:
8060  * -a AngTol - angular tolerance used for distinguishing the planar faces;
8061  * -s Shared(0/1) - boolean flag which defines whether the input edges are already shared or have to be intersected.
8062
8063 @subsection occt_draw_hist History commands
8064
8065 Draw module for @ref occt_modalg_hist "History Information support" includes the command to save history of modifications performed by Boolean operation or sibling commands into a drawable object and the actual history commands:
8066
8067 * **setfillhistory**;
8068 * **savehistory**;
8069 * **isdeleted**;
8070 * **modified**;
8071 * **generated**.
8072
8073 @subsubsection occt_draw_hist_set setfillhistory
8074
8075 *setfillhistory* command controls if the history is needed to be filled in the supported algorithms and saved into the session after the algorithm is done.
8076 By default it is TRUE, i.e. the history is filled and saved.
8077
8078 Syntax:
8079 ~~~~
8080 setfillhistory  : Controls the history collection by the algorithms and its saving into the session after algorithm is done.
8081                 Usage: setfillhistory [flag]
8082                 w/o arguments prints the current state of the option;
8083                 flag == 0 - history will not be collected and saved;
8084                 flag != 0 - history will be collected and saved into the session (default).
8085 ~~~~
8086
8087 Example:
8088 ~~~~
8089 box b1 10 10 10
8090 box b2 10 10 10
8091 setfillhistory 0
8092 bfuse r b1 b2
8093 savehistory h
8094 # No history has been prepared yet.
8095 setfillhistory 1
8096 bfuse r b1 b2
8097 savehistory h
8098 dump h
8099 # *********** Dump of h *************
8100 # History contains:
8101 #  - 2 Deleted shapes;
8102 #  - 52 Modified shapes;
8103 #  - 0 Generated shapes.
8104 ~~~~
8105
8106 @subsubsection occt_draw_hist_save savehistory
8107
8108 *savehistory* command saves the history from the session into a drawable object with the given name.
8109
8110 Syntax:
8111 ~~~~
8112 savehistory     : savehistory name
8113 ~~~~
8114
8115 If the history of shape modifications performed during an operation is needed, the *savehistory* command should be called after the command performing the operation.
8116 If another operation supporting history will be performed before the history of the first operation is saved it will be overwritten with the new history.
8117
8118 Example:
8119 ~~~~
8120 box b1 10 10 10
8121 box b2 5 0 0 10 10 15
8122 bfuse r b1 b2
8123 savehistory fuse_hist
8124
8125 dump fuse_hist
8126 #*********** Dump of fuse_hist *************
8127 # History contains:
8128 # - 4 Deleted shapes;
8129 # - 20 Modified shapes;
8130 # - 6 Generated shapes.
8131
8132 unifysamedom ru r
8133 savehistory usd_hist
8134 dump usd_hist
8135 #*********** Dump of usd_hist *************
8136 #History contains:
8137 # - 14 Deleted shapes;
8138 # - 28 Modified shapes;
8139 # - 0 Generated shapes.
8140 ~~~~
8141
8142 @subsubsection occt_draw_hist_isdel isdeleted
8143
8144 *isdeleted* command checks if the given shape has been deleted in the given history.
8145
8146 Syntax:
8147 ~~~~
8148 isdeleted       : isdeleted history shape
8149 ~~~~
8150
8151 Example:
8152 ~~~~
8153 box b1 4 4 4 2 2 2
8154 box b2 10 10 10
8155 bcommon r b1 b2
8156
8157 savehistory com_hist
8158 # all vertices, edges and faces of the b2 are deleted
8159 foreach s [join [list [explode b2 v] [explode b2 e] [explode b2 f] ] ] {
8160   isdeleted com_hist $s
8161   # Deleted
8162 }
8163 ~~~~
8164
8165 @subsubsection occt_draw_hist_mod modified
8166
8167 *modified* command returns the shapes Modified from the given shape in the given history. All modified shapes are put into a compound. If the shape has not been modified, the resulting compound will be empty. Note that if the shape has been modified into a single shape only, it will be returned without enclosure into the compound.
8168
8169 Syntax:
8170 ~~~~
8171 modified        : modified modified_shapes history shape
8172 ~~~~
8173
8174 Example:
8175 ~~~~
8176 box b 10 10 10
8177 explode b e
8178 fillet r b 2 b_1
8179
8180 savehistory fillet_hist
8181
8182 explode b f
8183
8184 modified m3 fillet_hist b_3
8185 modified m5 fillet_hist b_5
8186 ~~~~
8187
8188 @subsubsection occt_draw_hist_gen generated
8189
8190 *generated* command returns the shapes Generated from the given shape in the given history. All generated shapes are put into a compound. If no shapes have been generated from the shape, the resulting compound will be empty. Note that; if the shape has generated a single shape only, it will be returned without enclosure into the compound.
8191
8192 Syntax:
8193 ~~~~
8194 generated       : generated generated_shapes history shape
8195 ~~~~
8196
8197 Example:
8198 ~~~~
8199 polyline w1 0 0 0 10 0 0 10 10 0
8200 polyline w2 5 1 10 9 1 10 9 5 10
8201
8202 thrusections r 0 0 w1 w2
8203
8204 savehistory loft_hist
8205
8206 explode w1 e
8207 explode w2 e
8208
8209 generated g11 loft_hist w1_1
8210 generated g12 loft_hist w1_2
8211 generated g21 loft_hist w2_1
8212 generated g22 loft_hist w2_2
8213
8214 compare g11 g21
8215 # equal shapes
8216
8217 compare g12 g22
8218 # equal shapes
8219 ~~~~
8220
8221 @subsubsection occt_draw_hist_extension Enabling Draw history support for the algorithms
8222
8223 Draw History mechanism allows fast and easy enabling of the Draw history support for the OCCT algorithms supporting standard history methods.
8224 To enable History commands for the algorithm it is necessary to save the history of the algorithm into the session.
8225 For that, it is necessary to put the following code into the command implementation just after the command is done:
8226 ~~~~
8227 BRepTest_Objects::SetHistory(ListOfArguments, Algorithm);
8228 ~~~~
8229
8230 Here is the example of how it is done in the command performing Split operation (see implementation of the *bapisplit* command):
8231 ~~~~
8232 BRepAlgoAPI_Splitter aSplitter;
8233 // setting arguments
8234 aSplitter.SetArguments(BOPTest_Objects::Shapes());
8235 // setting tools
8236 aSplitter.SetTools(BOPTest_Objects::Tools());
8237
8238 // setting options
8239 aSplitter.SetRunParallel(BOPTest_Objects::RunParallel());
8240 aSplitter.SetFuzzyValue(BOPTest_Objects::FuzzyValue());
8241 aSplitter.SetNonDestructive(BOPTest_Objects::NonDestructive());
8242 aSplitter.SetGlue(BOPTest_Objects::Glue());
8243 aSplitter.SetCheckInverted(BOPTest_Objects::CheckInverted());
8244 aSplitter.SetUseOBB(BOPTest_Objects::UseOBB());
8245 aSplitter.SetToFillHistory(BRepTest_Objects::IsHistoryNeeded());
8246
8247 // performing operation
8248 aSplitter.Build();
8249
8250 if (BRepTest_Objects::IsHistoryNeeded())
8251 {
8252   // Store the history for the Objects (overwrites the history in the session)
8253   BRepTest_Objects::SetHistory(BOPTest_Objects::Shapes(), aSplitter);
8254   // Add the history for the Tools
8255   BRepTest_Objects::AddHistory(BOPTest_Objects::Tools(), aSplitter);
8256 }
8257 ~~~~
8258
8259 The method *BRepTest_Objects::IsHistoryNeeded()* controls if the history is needed to be filled in the algorithm and saved into the session after the algorithm is done (*setfillhistory* command controls this option in DRAW).
8260
8261
8262 @subsection occt_draw_7_12  Texture Mapping to a Shape
8263
8264 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. 
8265
8266 @subsubsection occt_draw_7_12_1  vtexture
8267
8268 Syntax:      
8269 ~~~~~
8270 vtexture NameOfShape TextureFile 
8271 vtexture NameOfShape 
8272 vtexture NameOfShape ? 
8273 vtexture NameOfShape IdOfTexture 
8274 ~~~~~
8275
8276 **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. 
8277
8278 @subsubsection occt_draw_7_12_2  vtexscale
8279
8280 Syntax:      
8281 ~~~~~
8282 vtexscale NameOfShape ScaleU ScaleV 
8283 vtexscale NameOfShape ScaleUV 
8284 vtexscale NameOfShape 
8285 ~~~~~
8286
8287 *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. 
8288
8289 The syntax without *ScaleU*, *ScaleV* or *ScaleUV* disables texture scaling. 
8290
8291 @subsubsection occt_draw_7_12_3  vtexorigin
8292
8293 Syntax:       
8294 ~~~~~
8295 vtexorigin NameOfShape UOrigin VOrigin 
8296 vtexorigin NameOfShape UVOrigin 
8297 vtexorigin NameOfShape 
8298 ~~~~~
8299
8300 *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. 
8301
8302 The syntax without *UOrigin*, *VOrigin* or *UVOrigin* disables origin positioning. 
8303
8304 @subsubsection occt_draw_7_12_4  vtexrepeat
8305
8306 Syntax:       
8307 ~~~~~
8308 vtexrepeat NameOfShape URepeat VRepeat 
8309 vtexrepeat NameOfShape UVRepeat 
8310 vtexrepeat NameOfShape 
8311 ~~~~~
8312
8313 *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. 
8314
8315 The same syntax without *URepeat*, *VRepeat* or *UVRepeat* disables texture repetition. 
8316
8317 @subsubsection occt_draw_7_12_5  vtexdefault
8318
8319 Syntax:       
8320 ~~~~~
8321 vtexdefault NameOfShape 
8322 ~~~~~
8323
8324 *Vtexdefault* sets or resets the texture mapping default parameters. 
8325
8326 The defaults are: 
8327
8328  * *URepeat = VRepeat = 1* no repetition 
8329  * *UOrigin = VOrigin = 1*  origin set at (0,0) 
8330  * *UScale = VScale = 1*  texture covers 100% of the face 
8331  
8332  
8333 @section occt_draw_bop Boolean Operations Commands
8334
8335 This chapter describes existing commands of Open CASCADE Draw Test Harness that are used for performing, analyzing, debugging the algorithm in Boolean Component.
8336 See @ref specification__boolean_operations "Boolean operations" user's guide for the description of these algorithms.
8337
8338 @subsection occt_draw_bop_two Boolean Operations on two operands
8339
8340 All commands in this section perform Boolean operations on two shapes. One of them is considered as object, and the other as a tool.
8341
8342 @subsubsection occt_draw_bop_two_bop bop, bopfuse, bopcut, boptuc, bopcommon, bopsection
8343
8344 These commands perform Boolean operations on two shapes:
8345 * **bop** performs intersection of given shapes and stores the intersection results into internal Data Structure.
8346 * **bopfuse** creates a new shape representing the union of two shapes.
8347 * **bopcut** creates a new shape representing a subtraction of a second argument from the first one.
8348 * **boptuc** creates a new shape representing a subtraction of a first argument from the second one.
8349 * **bopcommon** creates a new shape representing the intersection of two shapes.
8350 * **bopsection** creates a new shape representing the intersection edges and vertices between shapes.
8351
8352 These commands allow intersecting the shapes only once for building all types of Boolean operations. After *bop* command is done, the other commands in this category use the intersection results prepared by *bop*.
8353 It may be very useful as the intersection part is usually most time-consuming part of the operation.
8354
8355 Syntax:      
8356 ~~~~~
8357 bop shape1 shape2 
8358 bopcommon result 
8359 bopfuse result 
8360 bopcut result 
8361 boptuc result 
8362 ~~~~~
8363
8364 **Example:** 
8365
8366 Let's produce all four boolean operations on a box and a cylinder performing intersection only once:
8367 ~~~~~
8368 box b 0 -10 5 20 20 10 
8369 pcylinder c 5 20 
8370
8371 # intersect the shape, storing results into data structure 
8372 bop b c 
8373
8374 # fuse operation
8375 bopfuse s1 
8376
8377 # cut operation
8378 bopcut s2 
8379
8380 # opposite cut operation
8381 boptuc s3 
8382
8383 # common operation
8384 bopcommon s4 
8385
8386 # section operation
8387 bopsection s5
8388 ~~~~~
8389
8390
8391 @subsubsection occt_draw_bop_two_bapi bfuse, bcut, btuc, bcommon, bsection
8392
8393 These commands also perform Boolean operations on two shapes. These are the short variants of the bop* commands.
8394 Each of these commands performs both intersection and building the result and may be useful if you need only the result of a single boolean operation.
8395
8396 Syntax:
8397 ~~~~~
8398 bcommon result shape1 shape2 
8399 bfuse result shape1 shape2 
8400 bcut result shape1 shape2 
8401 btuc result shape1 shape2 
8402 ~~~~~
8403
8404 **bection** command has some additional options for faces intersection:
8405 ~~~~
8406 bsection result shape1 shape2 [-n2d/-n2d1/-n2d2] [-na]
8407
8408 Where:
8409 result - result of the operation
8410 shape1, shape2 - arguments of the operation
8411 -n2d - disables PCurve construction on both objects
8412 -n2d1 - disables PCurve construction on first object
8413 -n2d2 - disables PCurve construction on second object
8414 -na - disables approximation of the section curves
8415 ~~~~
8416
8417 @subsection occt_draw_bop_multi Boolean Operations on multiple arguments
8418
8419 The modern Boolean Operations algorithm available in Open CASCADE Technology is capable of performing a Boolean Operations not only on two shapes, but on arbitrary number of shapes.
8420 In terms of Boolean Operations these arguments are divided on two groups **Objects** and **Tools**. The meaning of these groups is similar to the single object and tool of Boolean Operations on two shapes.
8421
8422 The Boolean operations are based on the General Fuse operation (see @ref specification__boolean_7 "General Fuse algorithm") which splits all input shapes basing on the intersection results.
8423 Depending on the type of Boolean operation the BOP algorithm choses the necessary splits of the arguments.
8424
8425 @subsection occt_draw_bop_general_com General commands for working with multiple arguments
8426
8427 The algorithms based on General Fuse operation are using the same commands for adding and clearing the arguments list and for performing intersection of these arguments.
8428
8429 @subsubsection occt_draw_bop_general_com_add Adding arguments of operation
8430
8431 The following commands are used to add the objects and tools for Boolean operations:
8432 * **baddobjects** *S1 S2...Sn*  -- adds shapes *S1, S2, ... Sn* as Objects;
8433 * **baddtools** *S1 S2...Sn* -- adds shapes *S1, S2, ... Sn* as Tools;
8434
8435 The following commands are used to clear the objects and tools:
8436 * **bclearobjects** -- clears the list of Objects;
8437 * **bcleartools**       -- clears the list of Tools;
8438
8439 So, when running subsequent operation in one Draw session, make sure you cleared the Objects and Tools from previous operation. Otherwise, the new arguments will be added to the current ones.
8440
8441 @subsubsection occt_draw_bop_general_com_fill Intersection of the arguments
8442
8443 The command **bfillds** performs intersection of the arguments (**Objects** and **Tools**) and stores the intersection results into internal Data Structure.
8444
8445
8446 @subsection occt_draw_bop_build Building the result of operations
8447
8448 @subsubsection occt_draw_bop_build_BOP Boolean operation
8449
8450 The command **bbop** is used for building the result of Boolean Operation. It has to be used after **bfillds** command.
8451
8452 Syntax:
8453 ~~~~
8454 bbop result iOp
8455
8456 Where:
8457 result - result of the operation
8458 iOp - type of Boolean Operation. It could have the following values:
8459 0 - COMMON operation
8460 1 - FUSE operation
8461 2 - CUT operation
8462 3 - CUT21 (opposite CUT, i.e. objects and tools are swapped) operation
8463 4 - SECTION operation
8464 ~~~~
8465
8466 **Example**
8467 ~~~~
8468 box b1 10 10 10
8469 box b2 5 5 5 10 10 10
8470 box b3 -5 -5 -5 10 10 10
8471
8472 # Clear objects and tools from previous runs
8473 bclearobjects
8474 bcleartools
8475 # add b1 as object
8476 baddobjects b1
8477 # add b2 and b3 as tools
8478 baddtools b2 b3
8479 # perform intersection
8480 bfillds
8481 # build result
8482 bbop rcom 0
8483 bbop rfuse 1
8484 bbop rcut 2
8485 bbop rtuc 3
8486 bbop rsec 4
8487 ~~~~
8488
8489 @subsubsection occt_draw_bop_build_GF General Fuse operation
8490
8491 The command **bbuild** is used for building the result of General Fuse Operation. It has to be used after **bfillds** command.
8492 General Fuse operation does not make the difference between Objects and Tools considering both as objects.
8493
8494 Syntax:
8495 ~~~~
8496 bbuild result
8497 ~~~~
8498 **Example**
8499 ~~~~
8500 box b1 10 10 10
8501 box b2 5 5 5 10 10 10
8502 box b3 -5 -5 -5 10 10 10
8503
8504 # Clear objects and tools from previous runs
8505 bclearobjects
8506 bcleartools
8507 # add b1 as object
8508 baddobjects b1
8509 # add b2 and b3 as tools
8510 baddtools b2 b3
8511 # perform intersection
8512 bfillds
8513 # build result
8514 bbuild result
8515 ~~~~
8516
8517 @subsubsection occt_draw_bop_build_Split Split operation
8518
8519 Split operation splits the **Objects** by the **Tools**.
8520 The command **bsplit** is used for building the result of Split operation. It has to be used after **bfillds** command.
8521
8522 **Example**
8523 ~~~~
8524 box b1 10 10 10
8525 box b2 5 5 5 10 10 10
8526 box b3 -5 -5 -5 10 10 10
8527
8528 # Clear objects and tools from previous runs
8529 bclearobjects
8530 bcleartools
8531 # add b1 as object
8532 baddobjects b1
8533 # add b2 and b3 as tools
8534 baddtools b2 b3
8535 # perform intersection
8536 bfillds
8537 # build result
8538 bsplit result
8539 ~~~~
8540
8541 @subsubsection occt_draw_bop_build_BOP_opensolids Alternative command for BOP
8542
8543 There is an alternative way to build the result of Boolean operation using the **buildbop** command, which should be run after any other building command, such as **bbuild** or **bbop** or **bsplit**.
8544 The command has the following features:
8545 * It is designed to work on open solids and thus uses the alternative approach for building the results (see @ref specification__boolean_bop_on_opensolids "BOP on open solids" chapter of Boolean operations user guide).
8546 * It allows changing the groups of Objects and Tools of the operation (even excluding some of the arguments is possible).
8547 * History information for solids will be lost.
8548
8549 Syntax:
8550 ~~~~
8551 buildbop result -o s1 [s2 ...] -t s3 [s4 ...] -op operation (common/fuse/cut/tuc)
8552 Where:
8553 result      - result shape of the operation
8554 s1 s2 s3 s4 - arguments (solids) of the GF operation
8555 operation   - type of boolean operation
8556 ~~~~
8557
8558 **Example**
8559 ~~~~
8560 box b1 10 10 10
8561 box b2 5 5 5 10 10 10
8562 box b3 -5 -5 -5 10 10 10
8563
8564 bclearobjects
8565 bcleartools
8566 baddobjects b1 b2 b3
8567 bfillds
8568 bbuild r
8569
8570 # bbop command will not be available as the tools are not set
8571 # but buildbop is available
8572
8573 # fuse of two
8574 buildbop r1 -o b1 -t b2 -op fuse
8575 buildbop r2 -o b2 -t b3 -op fuse
8576
8577 # fuse of all - it does not matter how the groups are formed
8578 buildbop r3 -o b1 b2 -t b3 -op fuse
8579 buildbop r4 -o b2 -t b1 b3 -op fuse
8580 buildbop r5 -o b1 b2 b3 -op fuse
8581 buildbop r6 -t b1 b2 b3 -op fuse
8582
8583 # common of two
8584 buildbop r7 -o b2 -t b1 -op common
8585 buildbop r8 -o b1 -t b3 -op common
8586
8587 # common
8588 buildbop r9 -o b1 -t b2 b3 -op common
8589
8590 # cut
8591 buildbop r10 -o b1 -t b2 b3 -op cut
8592
8593 # opposite cut
8594 buildbop r11 -o b1 -t b2 b3 -op tuc
8595 ~~~~
8596
8597 @subsubsection occt_draw_bop_build_CB Cells Builder
8598
8599 See the @ref specification__boolean_10c_Cells_1 "Cells Builder Usage" for the Draw usage of Cells Builder algorithm.
8600
8601
8602 @subsubsection occt_draw_bop_build_API Building result through API
8603
8604 The following commands are used to perform the operation using API implementation of the algorithms:
8605 * **bapibuild** -- to perform API general fuse operation.
8606 * **bapibop** -- to perform API Boolean operation.
8607 * **bapisplit** -- to perform API Split operation.
8608
8609 These commands have the same syntax as the analogical commands described above.
8610
8611
8612 @subsection occt_draw_bop_options Setting options for the operation
8613
8614 The algorithms in Boolean component have a wide range of options.
8615 To see the current state of all option the command **boptions** should be used.
8616 It has the following syntax:
8617 ~~~~
8618 boptions [-default]
8619
8620 -default - allows to set all options to default state.
8621 ~~~~
8622
8623 To have an effect the options should be set before the operation (before *bfillds* command).
8624
8625 @subsubsection occt_draw_bop_options_par Parallel processing mode
8626
8627 **brunparallel** command enables/disables the parallel processing mode of the operation.
8628
8629 Syntax:
8630 ~~~~
8631 brunparallel flag
8632
8633 Where:
8634 flag is the boolean flag controlling the mode:
8635 flag == 0 - parallel processing mode is off.
8636 flag != 0 - parallel processing mode is on.
8637 ~~~~
8638
8639 The command is applicable for all commands in the component.
8640
8641 @subsubsection occt_draw_bop_options_safe Safe processing mode
8642
8643 **bnondestructive** command enables/disables the safe processing mode in which the input arguments are protected from modification.
8644
8645 Syntax:
8646 ~~~~
8647 bnondestructive flag
8648
8649 Where:
8650 flag is the boolean flag controlling the mode:
8651 flag == 0 - safe processing mode is off.
8652 flag != 0 - safe processing mode is on.
8653 ~~~~
8654
8655 The command is applicable for all commands in the component.
8656
8657 @subsubsection occt_draw_bop_options_fuzzy Fuzzy option
8658
8659 **bfuzzyvalue** command sets the additional tolerance for operations.
8660
8661 Syntax:
8662 ~~~~
8663 bfuzzyvalue value
8664 ~~~~
8665
8666 The command is applicable for all commands in the component.
8667
8668 @subsubsection occt_draw_bop_options_glue Gluing option
8669
8670 **bglue** command sets the gluing mode for the BOP algorithms.
8671
8672 Syntax:
8673 ~~~~
8674 bglue 0/1/2
8675
8676 Where:
8677 0 - disables gluing mode.
8678 1 - enables the Shift gluing mode.
8679 2 - enables the Full gluing mode.
8680 ~~~~
8681
8682 The command is applicable for all commands in the component.
8683
8684 @subsubsection occt_draw_bop_options_checkinv Check inversion of input solids
8685
8686 **bcheckinverted** command enables/disables the check of the input solids on inverted status in BOP algorithms.
8687
8688 Syntax:
8689 ~~~~
8690 bcheckinverted 0 (off) / 1 (on)
8691 ~~~~
8692
8693 The command is applicable for all commands in the component.
8694
8695 @subsubsection occt_draw_bop_options_obb OBB usage
8696
8697 **buseobb** commannd enables/disables the usage of OBB in BOP algorithms.
8698
8699 Syntax:
8700 ~~~~
8701 buseobb 0 (off) / 1 (on)
8702 ~~~~
8703
8704 The command is applicable for all commands in the component.
8705
8706 @subsubsection occt_draw_bop_options_simplify Result simplification
8707
8708 **bsimplify** command enables/disables the result simplification after BOP. The command is applicable only to the API variants of GF, BOP and Split operations.
8709
8710 Syntax:
8711 ~~~~
8712 bsimplify [-e 0/1] [-f 0/1] [-a tol]
8713
8714 Where:
8715 -e 0/1 - enables/disables edges unification
8716 -f 0/1 - enables/disables faces unification
8717 -a tol - changes default angular tolerance of unification algo.
8718 ~~~~
8719
8720 @subsubsection occt_draw_bop_options_warn Drawing warning shapes
8721
8722 **bdrawwarnshapes** command enables/disables drawing of warning shapes of BOP algorithms.
8723
8724 Syntax:
8725 ~~~~
8726 bdrawwarnshapes 0 (do not draw) / 1 (draw warning shapes)
8727 ~~~~
8728
8729 The command is applicable for all commands in the component.
8730
8731
8732 @subsection occt_draw_bop_check Check commands
8733
8734 The following commands are analyzing the given shape on the validity of Boolean operation.
8735
8736 @subsubsection occt_draw_bop_check_1 bopcheck
8737
8738 Syntax:
8739 ~~~~
8740 bopcheck shape [level of check: 0 - 9]
8741 ~~~~
8742
8743 It checks the given shape for self-interference. The optional level of check allows limiting the check to certain intersection types. Here are the types of interferences that will be checked for given level of check:
8744 * 0 - only V/V;
8745 * 1 - V/V and V/E;
8746 * 2 - V/V, V/E and E/E;
8747 * 3 - V/V, V/E, E/E and V/F;
8748 * 4 - V/V, V/E, E/E, V/F and E/F;
8749 * 5 - V/V, V/E, E/E, V/F, E/F and F/F;
8750 * 6 - V/V, V/E, E/E, V/F, E/F, F/F and V/S;
8751 * 7 - V/V, V/E, E/E, V/F, E/F, F/F, V/S and E/S;
8752 * 8 - V/V, V/E, E/E, V/F, E/F, F/F, V/S, E/S and F/S;
8753 * 9 - V/V, V/E, E/E, V/F, E/F, F/F, V/S, E/S, F/S and S/S - all interferences (Default value)
8754
8755 **Example:**
8756 ~~~~
8757 box b1 10 10 10
8758 box b2 3 3 3 4 4 4
8759 compound b1 b2 c
8760 bopcheck c
8761 ~~~~
8762
8763 In this example one box is completely included into other box. So the output shows that all sub-shapes of b2 interfering with the solid b1.
8764 **bopcheck** command does not modifies the input shape, thus can be safely used.
8765
8766
8767 @subsubsection occt_draw_bop_check_2 bopargcheck
8768
8769 **bopargcheck** syntax:
8770 ~~~~
8771 bopargcheck Shape1 [[Shape2] [-F/O/C/T/S/U] [/R|F|T|V|E|I|P|C|S]] [#BF]
8772
8773  -<Boolean Operation>
8774  F (fuse)
8775  O (common)
8776  C (cut)
8777  T (cut21)
8778  S (section)
8779  U (unknown)
8780  For example: "bopargcheck s1 s2 -F" enables checking for Fuse operation
8781  default - section
8782
8783  /<Test Options>
8784  R (disable small edges (shrank range) test)
8785  F (disable faces verification test)
8786  T (disable tangent faces searching test)
8787  V (disable test possibility to merge vertices)
8788  E (disable test possibility to merge edges)
8789  I (disable self-interference test)
8790  P (disable shape type test)
8791  C (disable test for shape continuity)
8792  S (disable curve on surface check)
8793  For example: "bopargcheck s1 s2 /RI" disables small edge detection and self-intersection detection
8794  default - all options are enabled
8795
8796  #<Additional Test Options>
8797  B (stop test on first faulty found); default OFF
8798  F (full output for faulty shapes); default - output in a short format
8799
8800  NOTE: <Boolean Operation> and <Test Options> are used only for couple of argument shapes, except I and P options that are always used for couple of shapes as well as for single shape test.
8801 ~~~~
8802
8803 As you can see *bopargcheck* performs more extended check of the given shapes than *bopcheck*.
8804
8805 **Example:**
8806 Let's make an edge with big vertices:
8807 ~~~~
8808 vertex v1 0 0 0
8809 settolerance v1 0.5
8810 vertex v2 1 0 0
8811 settolerance v2 0.5
8812 edge e v1 v2
8813 top; don e; fit
8814 tolsphere e
8815
8816 bopargcheck e
8817 ~~~~
8818 Here is the output of this command:
8819 ~~~~
8820 Made faulty shape: s1si_1
8821 Made faulty shape: s1se_1
8822 Faulties for FIRST  shape found : 2
8823 ---------------------------------
8824 Shapes are not suppotrted by BOP: NO
8825 Self-Intersections              : YES  Cases(1)  Total shapes(2)
8826 Check for SI has been aborted   : NO
8827 Too small edges                 : YES  Cases(1)  Total shapes(1)
8828 Bad faces                       : NO
8829 Too close vertices              : DISABLED
8830 Too close edges                 : DISABLED
8831 Shapes with Continuity C0       : NO
8832 Invalid Curve on Surface        : NO
8833
8834 Faulties for SECOND  shape found : 0
8835 ~~~~
8836
8837 @subsection occt_draw_bop_debug Debug commands
8838
8839 The following terms and definitions are used in this chapter:
8840 * **DS** -- internal data structure used by the algorithm (*BOPDS_DS* object).
8841 * **PaveFiller** -- intersection part of the algorithm (*BOPAlgo_PaveFiller* object).
8842 * **Builder** -- builder part of the algorithm (*BOPAlgo_Builder* object).
8843 * **IDS Index** -- the index of the vector *myLines*.
8844
8845 @subsubsection occt_draw_bop_debug_int Intersection Part commands
8846
8847 All commands listed below  are available when the Intersection Part of the algorithm is done (i.e. after the command *bfillds*).
8848
8849 **bopds**
8850         
8851 Syntax: 
8852 ~~~~
8853 bopds -v [e, f] 
8854 ~~~~
8855
8856 Displays:
8857 * all BRep shapes of arguments that are in the DS [default];
8858 * <i>-v</i> : only vertices of arguments that are in the DS;
8859 * <i>-e</i> : only edges of arguments that are in the DS;
8860 * <i>-f</i> : only faces of arguments that are in the DS.
8861
8862 **bopdsdump**
8863
8864 Prints contents of the DS. 
8865
8866 Example:
8867 ~~~~
8868  Draw[28]> bopdsdump
8869  *** DS ***
8870  Ranges:2                       number of ranges
8871  range: 0 33            indices for range 1
8872  range: 34 67           indices for range 2
8873  Shapes:68              total number of source shapes
8874  0 : SOLID { 1 }
8875  1 : SHELL { 2 12 22 26 30 32 }
8876  2 : FACE { 4 5 6 7 8 9 10 11 }
8877  3 : WIRE { 4 7 9 11 }
8878  4 : EDGE { 5 6 }
8879  5 : VERTEX { }
8880  6 : VERTEX { }
8881  7 : EDGE { 8 5 }
8882  8 : VERTEX { }
8883 ~~~~
8884
8885 @code 0 : SOLID { 1 } @endcode has the following meaning:
8886 * *0* -- index in the DS;
8887 * *SOLID* -- type of the shape;
8888 * <i>{ 1 }</i> -- a DS index of the successors.
8889
8890
8891 **bopindex**
8892
8893 Syntax:
8894 ~~~~
8895 bopindex S
8896 ~~~~
8897 Prints DS index of shape *S*.
8898
8899
8900 **bopiterator**
8901
8902 Syntax:
8903 ~~~~~
8904 bopiterator [t1 t2]
8905 ~~~~~
8906
8907 Prints pairs of DS indices of source shapes that are intersected in terms of bounding boxes.
8908
8909 <i>[t1 t2]</i> are types of the shapes:
8910 * *7* -- vertex;
8911 * *6* -- edge;
8912 * *4* -- face.
8913
8914 Example:
8915 ~~~~
8916  Draw[104]> bopiterator 6 4
8917  EF: ( z58 z12 )
8918  EF: ( z17 z56 )
8919  EF: ( z19 z64 )
8920  EF: ( z45 z26 )
8921  EF: ( z29 z36 )
8922  EF: ( z38 z32 )
8923 ~~~~
8924
8925 * *bopiterator 6 4* prints pairs of indices for types: edge/face;
8926 * *z58 z12* -- DS indices of intersecting edge and face.
8927
8928
8929 **bopinterf**
8930
8931 Syntax: 
8932 ~~~~
8933 bopinterf t
8934 ~~~~
8935
8936 Prints contents of *myInterfTB* for the type of interference *t*:
8937 * *t=0* : vertex/vertex;
8938 * *t=1* : vertex/edge;
8939 * *t=2* : edge/edge;
8940 * *t=3* : vertex/face;
8941 * *t=4* : edge/face.
8942
8943 Example:
8944 ~~~~
8945  Draw[108]> bopinterf 4
8946  EF: (58, 12, 68), (17, 56, 69), (19, 64, 70), (45, 26, 71), (29, 36, 72), (38, 32, 73), 6 EF found.
8947 ~~~~
8948
8949 Here, record <i>(58, 12, 68)</i> means:
8950 * *58* -- a DS index of the edge;
8951 * *12* -- a DS index of the face;
8952 * *68* -- a DS index of the new vertex.
8953
8954
8955 **bopsp**
8956
8957 Displays split edges. 
8958
8959 Example:
8960 ~~~~
8961  Draw[33]> bopsp
8962  edge 58 : z58_74 z58_75
8963  edge 17 : z17_76 z17_77
8964  edge 19 : z19_78 z19_79
8965  edge 45 : z45_80 z45_81
8966  edge 29 : z29_82 z29_83
8967  edge 38 : z38_84 z38_85
8968 ~~~~
8969
8970 * *edge 58* -- 58 is a DS index of the original edge.
8971 * *z58_74 z58_75* -- split edges, where 74, 75 are DS indices of the split edges.
8972
8973 **bopcb**
8974
8975 Syntax:
8976 ~~~~
8977 bopcb [nE]
8978 ~~~~
8979
8980 Prints Common Blocks for:
8981 * all source edges (by default);
8982 * the source edge with the specified index *nE*.
8983
8984 Example:
8985 ~~~~
8986  Draw[43]> bopcb 17
8987  -- CB:
8988  PB:{ E:71 orE:17 Pave1: { 68 3.000 } Pave2: { 18 10.000 } }
8989  Faces: 36
8990 ~~~~
8991
8992 This command dumps common blocks for the source edge with index 17. 
8993 * *PB* -- information about the Pave Block;
8994         * *71* -- a DS index of the split edge
8995         * *17* -- a DS index of the original edge
8996 * <i>Pave1 : { 68 3.000 }</i> -- information about the Pave:
8997         * *68* -- a DS index of the vertex of the pave
8998         * *3.000* -- a parameter of vertex 68 on edge 17
8999 * *Faces: 36* -- 36 is a DS index of the face the common block belongs to. 
9000
9001
9002 **bopfin**
9003
9004 Syntax:
9005 ~~~~
9006 bopfin nF       
9007 ~~~~
9008 Prints Face Info about IN-parts for the face with DS index *nF*.
9009
9010 Example:
9011 ~~~~
9012  Draw[47]> bopfin 36
9013  pave blocks In:
9014  PB:{ E:71 orE:17 Pave1: { 68 3.000 } Pave2: { 18 10.000 } }
9015  PB:{ E:75 orE:19 Pave1: { 69 3.000 } Pave2: { 18 10.000 } }
9016  vrts In:
9017  18
9018 ~~~~
9019
9020
9021 * <i>PB:{ E:71 orE:17 Pave1: { 68 3.000 } Pave2: { 18 10.000 } }</i> -- information about the Pave Block; 
9022 * <i>vrts In ... 18 </i> -- a DS index of the vertex IN the face.
9023
9024 **bopfon**
9025
9026 Syntax:
9027 ~~~~
9028 bopfon nF
9029 ~~~~
9030 Print Face Info about ON-parts for the face with DS index *nF*.
9031
9032 Example:
9033 ~~~~
9034  Draw[58]> bopfon 36
9035  pave blocks On:
9036  PB:{ E:72 orE:38 Pave1: { 69 0.000 } Pave2: { 68 10.000 } }
9037  PB:{ E:76 orE:45 Pave1: { 69 0.000 } Pave2: { 71 10.000 } }
9038  PB:{ E:78 orE:43 Pave1: { 71 0.000 } Pave2: { 70 10.000 } }
9039  PB:{ E:74 orE:41 Pave1: { 68 0.000 } Pave2: { 70 10.000 } }
9040  vrts On:
9041  68 69 70 71
9042 ~~~~
9043
9044 * <i>PB:{ E:72 orE:38 Pave1: { 69 0.000 } Pave2: { 68 10.000 } }</i> -- information about the Pave Block; 
9045 * <i>vrts On: ... 68 69 70 71</i> -- DS indices of the vertices ON the face.
9046
9047 **bopwho**
9048
9049 Syntax:
9050 ~~~~
9051 bopwho nS
9052 ~~~~
9053
9054 Prints the information about the shape with DS index *nF*.
9055
9056 Example:
9057 ~~~~
9058  Draw[116]> bopwho 5
9059  rank: 0
9060 ~~~~
9061
9062 * *rank: 0* -- means that shape 5 results from the Argument with index 0.
9063
9064 Example:
9065 ~~~~
9066  Draw[118]> bopwho 68
9067  the shape is new
9068  EF: (58, 12),
9069  FF curves: (12, 56),
9070  FF curves: (12, 64),
9071 ~~~~
9072
9073 This means that shape 68 is a result of the following interferences:
9074 * *EF: (58, 12)* -- edge 58 / face 12
9075 * *FF curves: (12, 56)* -- edge from the intersection curve between faces 12 and 56
9076 * *FF curves: (12, 64)* -- edge from the intersection curve between faces 12 and 64
9077
9078 **bopnews**
9079
9080 Syntax:
9081 ~~~~
9082 bopnews -v [-e]
9083 ~~~~
9084
9085 * <i>-v</i> -- displays all new vertices produced during the operation;
9086 * <i>-e</i> -- displays all new edges produced during the operation.
9087
9088 @subsubsection occt_draw_bop_debug_build Building Part commands
9089
9090 The commands listed below are available when the Building Part of the algorithm is done (i.e. after the command *bbuild*).
9091
9092 **bopim**
9093
9094 Syntax: 
9095 ~~~~
9096 bopim S
9097 ~~~~
9098 Shows the compound of shapes that are images of shape *S* from the argument.
9099
9100  
9101 @section occt_draw_8 Data Exchange commands
9102
9103 This chapter presents some general information about Data Exchange (DE) operations. 
9104
9105 DE commands are intended for translation files of various formats (IGES,STEP) into OCCT shapes with their attributes (colors, layers etc.) 
9106
9107 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 
9108 * for <a href="user_guides__step.html#occt_step_1">STEP format</a> and
9109 * for <a href="user_guides__iges.html#occt_iges_1">IGES format</a>. 
9110
9111 Each Draw session has an interface model, which is a structure for keeping various information. 
9112
9113 The first step of translation is loading information from a file into a model. 
9114 The second step is creation of an OpenCASCADE shape from this model. 
9115
9116 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. 
9117
9118 The model and the map are used for working with most of DE commands. 
9119
9120 @subsection occt_draw_8_1  IGES commands 
9121
9122 @subsubsection occt_draw_8_1_1  igesread
9123
9124 Syntax:      
9125 ~~~~~
9126 igesread <file_name> <result_shape_name> [<selection>]
9127 ~~~~~
9128
9129 Reads an IGES file to an OCCT shape. This command will interactively ask the user to select a set of entities to be converted. 
9130
9131
9132 | N | Mode | Description |
9133 | :-- | :-- | :---------- |
9134 | 0 | End | finish conversion and exit igesbrep |
9135 | 1 | Visible roots | convert only visible roots |
9136 | 2 | All roots | convert all roots |
9137 | 3 | One entity | convert entity with number provided by the user |
9138 | 4 | Selection | convert only entities contained in selection |
9139
9140
9141 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. 
9142
9143 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*. 
9144
9145 <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. 
9146
9147 See also the detailed description of <a href="user_guides__iges.html#occt_iges_2_3_4">Selecting IGES entities</a>.
9148
9149 **Example:**
9150 ~~~~~
9151 # translation all roots from file 
9152 igesread /disk01/files/model.igs a  * 
9153 ~~~~~
9154
9155 @subsubsection occt_draw_8_1_2   tplosttrim
9156
9157 Syntax:      
9158 ~~~~~
9159 tplosttrim [<IGES_type>] 
9160 ~~~~~
9161
9162 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. 
9163 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. 
9164 Optional parameter <i>\<IGES_type\></i> can be *0TrimmedSurface, BoundedSurface* or *Face* to specify the only type of IGES faces. 
9165
9166 **Example:**
9167 ~~~~~
9168 tplosttrim TrimmedSurface 
9169 ~~~~~
9170
9171 @subsubsection occt_draw_8_1_3  brepiges
9172
9173 Syntax:      
9174 ~~~~~
9175 brepiges <shape_name> <filename.igs>
9176 ~~~~~
9177
9178 Writes an OCCT shape to an IGES file. 
9179
9180 **Example:** 
9181 ~~~~~    
9182 # write shape with name aa to IGES file 
9183 brepiges aa /disk1/tmp/aaa.igs 
9184 == unit (write) : MM 
9185 == mode  write  : Faces 
9186 ==   To modifiy : command  param 
9187 == 1 Shapes written, giving 345 Entities 
9188 ==  Now, to write a file, command : writeall filename 
9189 ==  Output on file : /disk1/tmp/aaa.igs 
9190 ==  Write OK 
9191 ~~~~~
9192
9193 @subsection occt_draw_8_2  STEP commands 
9194
9195 These commands are used during the translation of STEP models. 
9196
9197
9198 @subsubsection occt_draw_8_2_1  stepread
9199
9200 Syntax:      
9201 ~~~~~
9202 stepread file_name result_shape_name [selection] 
9203 ~~~~~
9204
9205 Read a STEP file to an OCCT shape. 
9206 This command will interactively ask the user to select a set of entities to be converted: 
9207
9208 | N | Mode | Description |
9209 | :---- | :---- | :---- |  
9210 | 0 | End | Finish transfer and exit stepread | 
9211 | 1 | root with rank 1 | Transfer first root | 
9212 | 2 | root by its rank | Transfer root specified by its rank | 
9213 | 3 | One entity | Transfer entity with a number provided by the user | 
9214 | 4 | Selection | Transfer only entities contained in selection | 
9215
9216 After the selected set of entities is loaded the user will be asked how loaded entities should be converted into OCCT shapes. 
9217 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*. 
9218 <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. 
9219
9220 See also the detailed description of <a href="user_guides__step.html#occt_step_2_3_6">Selecting STEP entities</a>.
9221
9222 **Example:**
9223 ~~~~~
9224 # translation all roots from file 
9225 stepread /disk01/files/model.stp a  * 
9226 ~~~~~
9227
9228 @subsubsection occt_draw_8_2_2   stepwrite
9229
9230 Syntax:      
9231 ~~~~~
9232 stepwrite mode shape_name file_name 
9233 ~~~~~
9234
9235 Writes an OCCT shape to a STEP file. 
9236
9237 The following  modes are available : 
9238     * *a* -- as is -- the mode is selected automatically depending on the type & geometry of the shape; 
9239     * *m* -- *manifold_solid_brep* or *brep_with_voids* 
9240     * *f* -- *faceted_brep* 
9241     * *w* -- *geometric_curve_set* 
9242     * *s* -- *shell_based_surface_model* 
9243  
9244 For further information see <a href="#user_guides__step.html#occt_step_6_5">Writing a STEP file</a>. 
9245
9246 **Example:**
9247
9248 Let us write shape *a* to a STEP file in mode *0*. 
9249
9250 ~~~~~
9251 stepwrite 0 a /disk1/tmp/aaa.igs 
9252 ~~~~~
9253
9254
9255 @subsection occt_draw_8_3  General commands 
9256
9257 These are auxilary commands used for the analysis of result of translation of IGES and STEP files. 
9258
9259 @subsubsection occt_draw_8_3_1  count
9260
9261 Syntax:      
9262 ~~~~~
9263 count <counter> [<selection>] 
9264 ~~~~~
9265
9266 Calculates statistics on the entities in the model and outputs a count of entities. 
9267
9268 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. 
9269
9270 | Counter | Operation |
9271 | :-------- | :-------- | 
9272 | xst-types | Calculates how many entities of each OCCT type exist | 
9273 | step214-types | Calculates how many entities of each STEP type exist |
9274
9275 **Example:**
9276 ~~~~~
9277 count xst-types 
9278 ~~~~~
9279
9280 @subsubsection occt_draw_8_3_2 data
9281
9282 Syntax:      
9283 ~~~~~
9284 data <symbol>
9285 ~~~~~
9286
9287 Obtains general statistics on the loaded data. 
9288 The information printed by this command depends on the symbol specified. 
9289
9290 **Example:**
9291 ~~~~~
9292 # print full information about warnings and fails 
9293 data c 
9294 ~~~~~
9295
9296 | Symbol | Output |
9297 | :------ | :------ |
9298 | g | Prints the information contained in the header of the file |
9299 | 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) |
9300 | t | The same as c or f, with a list of failed or warned entities |
9301 | m or l | The same as t but also prints a status for each entity | 
9302 | e | Lists all entities of the model with their numbers, types, validity status etc. |
9303 | R | The same as e but lists only root entities |
9304
9305
9306
9307 @subsubsection occt_draw_8_3_3  elabel
9308
9309 Syntax:      
9310 ~~~~~
9311 elabel <num>
9312 ~~~~~
9313
9314 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. 
9315
9316 **Example:**
9317 ~~~~~
9318 elabel 84 
9319 ~~~~~
9320
9321 @subsubsection occt_draw_8_3_4  entity
9322
9323 Syntax:      
9324 ~~~~~
9325 entity <#(D)>_or_<num> <level_of_information>
9326 ~~~~~
9327
9328 The content of an IGES or STEP entity can be obtained by using this command. 
9329 Entity can be determined by its number or label. 
9330 <i>\<level_of_information\></i> has range [0-6]. You can get more information about this level using this command without parameters. 
9331
9332 **Example:**
9333 ~~~~~
9334 # full information for STEP entity with label 84 
9335 entity #84 6 
9336 ~~~~~
9337
9338 @subsubsection occt_draw_8_3_5  enum
9339
9340 Syntax:      
9341 ~~~~~
9342 enum <#(D)> 
9343 ~~~~~
9344
9345 Prints a number for the entity with a given label. 
9346
9347 **Example:**
9348 ~~~~~
9349 # give a number for IGES entity with label 21 
9350 enum D21 
9351 ~~~~~
9352
9353 @subsubsection occt_draw_8_3_6  estatus
9354
9355 Syntax:      
9356 ~~~~~
9357 estatus <#(D)>_or_<num>
9358 ~~~~~
9359
9360 The list of entities referenced by a given entity and the list of entities referencing to it can be obtained by this command. 
9361
9362 **Example:**
9363 ~~~~~
9364 estatus #315 
9365 ~~~~~
9366
9367 @subsubsection occt_draw_8_3_7  fromshape
9368
9369 Syntax:      
9370 ~~~~~
9371 fromshape <shape_name>
9372 ~~~~~
9373
9374 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. 
9375
9376 **Example:**
9377 ~~~~~
9378 fromshape a_1_23 
9379 ~~~~~
9380
9381 @subsubsection occt_draw_8_3_8  givecount
9382
9383 Syntax:
9384 ~~~~~
9385 givecount <selection_name> [<selection_name>]
9386 ~~~~~
9387
9388
9389 Prints a number of loaded entities defined by the selection argument.
9390 Possible values of \<selection_name\> you can find in the “IGES FORMAT Users’s Guide”.
9391
9392 **Example:**
9393 ~~~~~
9394 givecount xst-model-roots 
9395 ~~~~~
9396
9397 @subsubsection occt_draw_8_3_9  givelist
9398
9399 Syntax:      
9400 ~~~~~
9401 givelist <selection_name>
9402 ~~~~~
9403
9404 Prints a list of a subset of loaded entities defined by the selection argument: 
9405 | Selection | Description |
9406 | :-------- | :----------- |
9407 | xst-model-all | all entities of the model |
9408 | xst-model-roots | all roots |
9409 | xst-pointed | (Interactively) pointed entities (not used in DRAW) |
9410 | xst-transferrable-all | all transferable (recognized) entities |
9411 | xst-transferrable-roots | Transferable roots | 
9412
9413
9414 **Example:**
9415 ~~~~~
9416 # give a list of all entities of the model 
9417 givelist xst-model-all 
9418 ~~~~~
9419
9420 @subsubsection occt_draw_8_3_10  listcount
9421
9422 Syntax:     listcount \<counter\> [\<selection\> ...]
9423
9424 Prints a list of entities per each type matching the criteria defined by arguments. 
9425 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: 
9426
9427 | Counter     | Operation |
9428 | :-----      | :------   |
9429 | xst-types   | Calculates how many entities of each OCCT type exist |
9430 | iges-types  | Calculates how many entities of each IGES type and form exist |
9431 | iges-levels | Calculates how many entities lie in different IGES levels |
9432
9433 **Example:**
9434 ~~~~~
9435 listcount xst-types 
9436 ~~~~~
9437
9438 @subsubsection occt_draw_8_3_11  listitems
9439
9440 Syntax:      
9441 ~~~~~
9442 listitems 
9443 ~~~~~
9444
9445 This command prints a list of objects (counters, selections etc.) defined in the current session. 
9446
9447
9448 @subsubsection occt_draw_8_3_12  listtypes
9449
9450 Syntax:      
9451 ~~~~~
9452 listtypes [<selection_name> ...]
9453 ~~~~~
9454
9455 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. 
9456
9457
9458 @subsubsection occt_draw_8_3_13  newmodel
9459
9460 Syntax:      
9461 ~~~~~
9462 newmodel 
9463 ~~~~~
9464
9465 Clears the current model. 
9466
9467
9468 @subsubsection occt_draw_8_3_14  param
9469
9470 Syntax:      
9471 ~~~~~
9472 param [<parameter>] [<value>]
9473 ~~~~~
9474
9475 This command is used to manage translation parameters. 
9476 Command without arguments gives a full list of parameters with current values. 
9477 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>.
9478
9479 **Example:**
9480
9481 Let us get the information about possible schemes for writing STEP file :
9482
9483 ~~~~~
9484 param write.step.schema 
9485 ~~~~~
9486
9487 @subsubsection occt_draw_8_3_15  sumcount
9488
9489 Syntax:      
9490 ~~~~~
9491 sumcount <counter> [<selection> ...]
9492 ~~~~~
9493
9494 Prints only a number of entities per each type matching the criteria defined by arguments. 
9495
9496 **Example:**
9497 ~~~~~
9498 sumcount xst-types 
9499 ~~~~~
9500
9501 @subsubsection occt_draw_8_3_16  tpclear
9502
9503 Syntax:      
9504 ~~~~~
9505 tpclear  
9506 ~~~~~
9507
9508 Clears the map of correspondences between IGES or STEP entities and OCCT shapes. 
9509
9510
9511
9512 @subsubsection occt_draw_8_3_17  tpdraw
9513
9514 Syntax:      
9515 ~~~~~
9516 tpdraw <#(D)>_or_<num>
9517 ~~~~~
9518
9519 **Example:**
9520 ~~~~~
9521 tpdraw 57 
9522 ~~~~~
9523
9524 @subsubsection occt_draw_8_3_18  tpent
9525
9526 Syntax:      
9527 ~~~~~
9528 tpent <#(D)>_or_<num>
9529 ~~~~~
9530
9531 Get information about the result of translation of the given IGES or STEP entity.
9532
9533 **Example:**
9534 ~~~~~
9535 tpent \#23 
9536 ~~~~~
9537
9538 @subsubsection occt_draw_8_3_19  tpstat
9539
9540 Syntax:      
9541 ~~~~~
9542 tpstat [*|?]<symbol> [<selection>]
9543 ~~~~~
9544
9545
9546 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: 
9547
9548 * *g* -- General statistics (a list of results and messages)
9549 * *c* -- Count of all warning and fail messages
9550 * *C* -- List of all warning and fail messages
9551 * *f* -- Count of all fail messages
9552 * *F* -- List of all fail messages
9553 * *n* -- List of all transferred roots
9554 * *s* -- The same, with types of source entity and the type of result
9555 * *b* -- The same, with messages
9556 * *t* -- Count of roots for geometrical types
9557 * *r* -- Count of roots for topological types
9558 * *l* -- The same, with the type of the source entity
9559
9560 The sign \* before parameters *n, s, b, t, r* makes it work on all entities (not only on roots).
9561
9562 The sign ? before *n, s, b, t* limits the scope of information to invalid entities. 
9563
9564 Optional argument \<selection\> can limit the action of the command to the selection, not to all entities. 
9565
9566 To get help, run this command without arguments. 
9567
9568 **Example:**
9569 ~~~~~
9570 # translation ratio on IGES faces 
9571 tpstat *l iges-faces 
9572 ~~~~~
9573
9574 @subsubsection occt_draw_8_3_20  xload
9575
9576 Syntax:      
9577 ~~~~~
9578 xload <file_name>
9579 ~~~~~
9580
9581 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. 
9582
9583 **Example:**
9584 ~~~~~
9585 xload /disk1/tmp/aaa.stp 
9586 ~~~~~
9587
9588
9589 @subsection occt_draw_8_4  Overview of XDE commands 
9590
9591 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: 
9592   * XDE translation commands
9593   * XDE general commands
9594   * XDE shape’s commands
9595   * XDE color’s commands
9596   * XDE layer’s commands
9597   * XDE property’s commands
9598
9599 Reminding: All operations of translation are performed with parameters managed by command @ref occt_draw_8_3_14 "param".
9600
9601 @subsubsection occt_draw_8_4_1  ReadIges
9602
9603 Syntax:      
9604 ~~~~~
9605 ReadIges document file_name 
9606 ~~~~~
9607
9608 Reads information from an IGES file to an XCAF document. 
9609
9610 **Example:**
9611 ~~~~~
9612 ReadIges D /disk1/tmp/aaa.igs 
9613 ==> Document saved with name D 
9614 ~~~~~
9615
9616 @subsubsection occt_draw_8_4_2  ReadStep
9617
9618 Syntax:      
9619 ~~~~~
9620 ReadStep <document> <file_name>
9621 ~~~~~
9622
9623 Reads information from a STEP file to an XCAF document. 
9624
9625 **Example:**
9626 ~~~~~
9627 ReadStep D /disk1/tmp/aaa.stp 
9628 == Document saved with name D 
9629 ~~~~~
9630
9631 @subsubsection occt_draw_8_4_3  WriteIges
9632
9633 Syntax:      
9634 ~~~~~
9635 WriteIges <document> <file_name>
9636 ~~~~~
9637
9638 **Example:**
9639 ~~~~~
9640 WriteIges D /disk1/tmp/aaa.igs 
9641 ~~~~~
9642
9643 @subsubsection occt_draw_8_4_4  WriteStep
9644
9645 Syntax:      
9646 ~~~~~
9647 WriteStep <document> <file_name>
9648 ~~~~~
9649
9650 Writes information from an XCAF document to a STEP file. 
9651
9652 **Example:**
9653 ~~~~~
9654 WriteStep D /disk1/tmp/aaa.stp 
9655 ~~~~~
9656
9657 @subsubsection occt_draw_8_4_5  XFileCur
9658
9659 Syntax:      
9660 ~~~~~
9661 XFileCur  
9662 ~~~~~
9663
9664 Returns the name of file which is set as the current one in the Draw session. 
9665
9666 **Example:**
9667 ~~~~~
9668 XFileCur 
9669 == *as1-ct-203.stp* 
9670 ~~~~~
9671
9672 @subsubsection occt_draw_8_4_6  XFileList
9673
9674 Syntax:      
9675 ~~~~~
9676 XFileList  
9677 ~~~~~
9678
9679 Returns a list all files that were transferred by the last transfer. This command is  meant (assigned) for the assemble step file. 
9680
9681 **Example:**
9682 ~~~~~
9683 XFileList 
9684 ==> *as1-ct-Bolt.stp* 
9685 ==> *as1-ct-L-Bracktet.stp* 
9686 ==> *as1-ct-LBA.stp* 
9687 ==> *as1-ct-NBA.stp* 
9688 ==> … 
9689 ~~~~~
9690
9691 @subsubsection occt_draw_8_4_7  XFileSet
9692
9693 Syntax:      
9694 ~~~~~
9695 XFileSet <filename> 
9696 ~~~~~
9697
9698 Sets the current file taking it from the components list of the assemble file. 
9699
9700 **Example:**
9701 ~~~~~
9702 XFileSet as1-ct-NBA.stp 
9703 ~~~~~
9704
9705 @subsubsection occt_draw_8_4_8  XFromShape
9706
9707 Syntax:      
9708 ~~~~~
9709 XFromShape <shape>
9710 ~~~~~
9711
9712 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. 
9713
9714 **Example:**
9715 ~~~~~
9716 XFromShape a 
9717 ==> Shape a: imported from entity 217:#26 in file as1-ct-Nut.stp 
9718 ~~~~~
9719
9720 @subsection occt_draw_8_5  XDE general commands 
9721
9722 @subsubsection occt_draw_8_5_1  XNewDoc
9723
9724 Syntax:      
9725 ~~~~~
9726 XNewDoc <document>
9727 ~~~~~
9728
9729 Creates a new XCAF document. 
9730
9731 **Example:**
9732 ~~~~~
9733 XNewDoc D 
9734 ~~~~~
9735
9736 @subsubsection occt_draw_8_5_2  XShow
9737
9738 Syntax:      
9739 ~~~~~
9740 XShow <document> [ <label1> … ]
9741 ~~~~~
9742
9743 Shows a shape from a given label in the 3D viewer. If the label is not given -- shows all shapes from the document. 
9744
9745 **Example:**
9746 ~~~~~
9747 # show shape from label 0:1:1:4 from document D 
9748 XShow D 0:1:1:4 
9749 ~~~~~
9750
9751 @subsubsection occt_draw_8_5_3  XStat
9752
9753 Syntax:      
9754 ~~~~~
9755 XStat <document>
9756 ~~~~~
9757
9758 Prints common information from an XCAF document. 
9759
9760 **Example:**
9761 ~~~~~
9762 XStat D 
9763 ==>Statistis of shapes in the document: 
9764 ==>level N 0 : 9 
9765 ==>level N 1 : 18 
9766 ==>level N 2 : 5 
9767 ==>Total number of labels for shapes in the document = 32 
9768 ==>Number of labels with name = 27 
9769 ==>Number of labels with color link = 3 
9770 ==Number of labels with layer link = 0 
9771 ==>Statistis of Props in the document: 
9772 ==>Number of Centroid Props = 5 
9773 ==>Number of Volume Props = 5 
9774 ==>Number of Area Props = 5 
9775 ==>Number of colors = 4 
9776 ==>BLUE1 RED YELLOW BLUE2 
9777 ==>Number of layers = 0 
9778 ~~~~~
9779
9780 @subsubsection occt_draw_8_5_4  XWdump
9781
9782 Syntax:      
9783 ~~~~~
9784 XWdump <document> <filename>
9785 ~~~~~
9786
9787 Saves the contents of the viewer window as an image (XWD, png or BMP file). 
9788 <i>\<filename\></i> must have a corresponding extention. 
9789
9790 **Example:**
9791 ~~~~~
9792 XWdump D /disk1/tmp/image.png 
9793 ~~~~~
9794
9795 @subsubsection occt_draw_8_5_5  Xdump
9796
9797 Syntax:      
9798 ~~~~~
9799 Xdump <document> [int deep {0|1}]
9800 ~~~~~
9801
9802 Prints information about the tree structure of the document. If parameter 1 is given, then the tree is printed with a link to shapes. 
9803
9804 **Example:**
9805 ~~~~~
9806 Xdump D 1 
9807 ==> ASSEMBLY 0:1:1:1 L-BRACKET(0xe8180448) 
9808 ==> ASSEMBLY 0:1:1:2 NUT(0xe82151e8) 
9809 ==> ASSEMBLY 0:1:1:3 BOLT(0xe829b000) 
9810 ==> ASSEMBLY 0:1:1:4 PLATE(0xe8387780) 
9811 ==> ASSEMBLY 0:1:1:5 ROD(0xe8475418) 
9812 ==> ASSEMBLY 0:1:1:6 AS1(0xe8476968) 
9813 ==>    ASSEMBLY 0:1:1:7 L-BRACKET-ASSEMBLY(0xe8476230) 
9814 ==>       ASSEMBLY 0:1:1:1 L-BRACKET(0xe8180448) 
9815 ==>       ASSEMBLY 0:1:1:8 NUT-BOLT-ASSEMBLY(0xe8475ec0) 
9816 ==>               ASSEMBLY 0:1:1:2 NUT(0xe82151e8) 
9817 ==>               ASSEMBLY 0:1:1:3 BOLT(0xe829b000) 
9818 etc. 
9819 ~~~~~
9820
9821 @subsection occt_draw_8_6  XDE shape commands 
9822
9823 @subsubsection occt_draw_8_6_1  XAddComponent
9824
9825 Syntax:      
9826 ~~~~~
9827 XAddComponent <document> <label> <shape> 
9828 ~~~~~
9829
9830 Adds a component shape to assembly. 
9831
9832 **Example:**
9833
9834 Let us add shape b as component shape to assembly shape from label *0:1:1:1* 
9835
9836 ~~~~~
9837 XAddComponent D 0:1:1:1 b 
9838 ~~~~~
9839
9840 @subsubsection occt_draw_8_6_2  XAddShape
9841
9842 Syntax:      
9843 ~~~~~
9844 XAddShape <document> <shape> [makeassembly=1]
9845 ~~~~~
9846
9847 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. 
9848
9849 **Example:**
9850 ~~~~~
9851 # add shape b to document D 
9852 XAddShape D b 0 
9853 == 0:1:1:10 
9854 # if pointed shape is compound and last parameter in 
9855 # XAddShape command is used by default (1), then for 
9856 # each subshapes new label is created 
9857 ~~~~~
9858
9859 @subsubsection occt_draw_8_6_3  XFindComponent
9860
9861 Syntax:      
9862 ~~~~~
9863 XFindComponent <document> <shape>
9864 ~~~~~
9865
9866 Prints a sequence of labels of the assembly path. 
9867
9868 **Example:**
9869 ~~~~~
9870 XFindComponent D b 
9871 ~~~~~
9872
9873 @subsubsection occt_draw_8_6_4  XFindShape
9874
9875 Syntax:      
9876 ~~~~~
9877 XFindShape <document> <shape>
9878 ~~~~~
9879
9880 Finds and prints a label with an indicated top-level shape. 
9881
9882 **Example:**
9883 ~~~~~
9884 XFindShape D a 
9885 ~~~~~
9886
9887 @subsubsection occt_draw_8_6_5  XGetFreeShapes
9888
9889 Syntax:      
9890 ~~~~~
9891 XGetFreeShapes <document> [shape_prefix]
9892 ~~~~~
9893
9894 Print labels or create DRAW shapes for all free shapes in the document. 
9895 If *shape_prefix* is absent -- prints labels, else -- creates DRAW shapes with names 
9896 <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). 
9897
9898 **Note**: a free shape is a shape to which no other shape refers to. 
9899
9900 **Example:**
9901 ~~~~~
9902 XGetFreeShapes D 
9903 == 0:1:1:6 0:1:1:10 0:1:1:12 0:1:1:13 
9904
9905 XGetFreeShapes D sh 
9906 == sh_1 sh_2 sh_3 sh_4 
9907 ~~~~~
9908
9909 @subsubsection occt_draw_8_6_6  XGetOneShape
9910
9911 Syntax:      
9912 ~~~~~
9913 XGetOneShape <shape> <document>
9914 ~~~~~
9915
9916 Creates one DRAW shape for all free shapes from a document. 
9917
9918 **Example:**
9919 ~~~~~
9920 XGetOneShape a D 
9921 ~~~~~
9922
9923 @subsubsection occt_draw_8_6_7  XGetReferredShape
9924
9925 Syntax:      
9926 ~~~~~
9927 XGetReferredShape <document> <label>
9928 ~~~~~
9929
9930 Prints a label that contains a top-level shape that corresponds to a shape at a given label. 
9931
9932 **Example:**
9933 ~~~~~
9934 XGetReferredShape D 0:1:1:1:1 
9935 ~~~~~
9936
9937 @subsubsection occt_draw_8_6_8  XGetShape
9938
9939 Syntax:      
9940 ~~~~~
9941 XGetShape <result> <document> <label>
9942 ~~~~~
9943
9944 Puts a shape from the indicated label in document to result. 
9945
9946 **Example:**
9947 ~~~~~
9948 XGetShape b D 0:1:1:3 
9949 ~~~~~
9950
9951 @subsubsection occt_draw_8_6_9  XGetTopLevelShapes
9952
9953 Syntax:      
9954 ~~~~~
9955 XGetTopLevelShapes <document>
9956 ~~~~~
9957
9958 Prints labels that contain top-level shapes. 
9959
9960 **Example:**
9961 ~~~~~
9962 XGetTopLevelShapes D 
9963 == 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 
9964 0:1:1:8 0:1:1:9 
9965 ~~~~~
9966
9967 @subsubsection occt_draw_8_6_10  XLabelInfo
9968
9969 Syntax:      
9970 ~~~~~
9971 XLabelInfo <document> <label>
9972 ~~~~~
9973
9974 Prints information about a shape, stored at an indicated label. 
9975
9976 **Example:** 
9977 ~~~~~    
9978 XLabelInfo D 0:1:1:6 
9979 ==> There are TopLevel shapes. There is an Assembly. This Shape is not used. 
9980 ~~~~~
9981
9982 @subsubsection occt_draw_8_6_11  XNewShape
9983
9984 Syntax:      
9985 ~~~~~
9986 XNewShape <document>
9987 ~~~~~
9988
9989 Creates a new empty top-level shape. 
9990
9991 **Example:**
9992 ~~~~~
9993 XNewShape D 
9994 ~~~~~
9995
9996 @subsubsection occt_draw_8_6_12  XRemoveComponent
9997
9998 Syntax:      
9999 ~~~~~
10000 XRemoveComponent <document> <label>
10001 ~~~~~
10002
10003 Removes a component from the components label. 
10004
10005 **Example:**
10006 ~~~~~
10007 XRemoveComponent D 0:1:1:1:1 
10008 ~~~~~
10009
10010 @subsubsection occt_draw_8_6_13  XRemoveShape
10011
10012 Syntax:      
10013 ~~~~~
10014 XRemoveShape <document> <label>
10015 ~~~~~
10016
10017 Removes a shape from a document (by it’s label). 
10018
10019 **Example:**
10020 ~~~~~
10021 XRemoveShape D 0:1:1:2 
10022 ~~~~~
10023
10024 @subsubsection occt_draw_8_6_14  XSetShape
10025
10026 Syntax:      
10027 ~~~~~
10028 XSetShape <document> <label> <shape>
10029 ~~~~~
10030
10031 Sets a shape at the indicated label. 
10032
10033 **Example:**
10034 ~~~~~
10035 XSetShape D 0:1:1:3 b 
10036 ~~~~~
10037
10038 @subsubsection occt_draw_8_6_15  XUpdateAssemblies
10039
10040 Syntax:      
10041 ~~~~~
10042 XUpdateAssemblies <document>
10043 ~~~~~
10044
10045 Updates all assembly compounds in the XDE document.
10046
10047 **Example:**
10048 ~~~~~
10049 XUpdateAssemblies D
10050 ~~~~~
10051
10052 @subsection occt_draw_8_7_  XDE color commands 
10053
10054 @subsubsection occt_draw_8_7_1  XAddColor
10055
10056 Syntax:      
10057 ~~~~~
10058 XAddColor <document> <R> <G> <B>
10059 ~~~~~
10060
10061 Adds color in document to the color table. Parameters R,G,B are real. 
10062
10063 **Example:**
10064 ~~~~~
10065 XAddColor D 0.5 0.25 0.25 
10066 ~~~~~
10067
10068 @subsubsection occt_draw_8_7_2  XFindColor
10069
10070 Syntax:      
10071 ~~~~~
10072 XFindColor <document> <R> <G> <B>
10073 ~~~~~
10074
10075 Finds a label where the indicated color is situated. 
10076
10077 **Example:**
10078 ~~~~~
10079 XFindColor D 0.25 0.25 0.5 
10080 ==> 0:1:2:2 
10081 ~~~~~
10082
10083 @subsubsection occt_draw_8_7_3  XGetAllColors
10084
10085 Syntax:      
10086 ~~~~~
10087 XGetAllColors <document> 
10088 ~~~~~
10089
10090 Prints all colors that are defined in the document. 
10091
10092 **Example:**
10093 ~~~~~
10094 XGetAllColors D 
10095 ==> RED DARKORANGE BLUE1 GREEN YELLOW3 
10096 ~~~~~
10097
10098 @subsubsection occt_draw_8_7_4  XGetColor
10099
10100 Syntax:      
10101 ~~~~~
10102 XGetColor <document> <label>
10103 ~~~~~
10104
10105 Returns a color defined at the indicated label from the color table. 
10106
10107 **Example:**
10108 ~~~~~
10109 XGetColor D 0:1:2:3 
10110 == BLUE1 
10111 ~~~~~
10112
10113 @subsubsection occt_draw_8_7_5  XGetObjVisibility
10114
10115 Syntax:      
10116 ~~~~~
10117 XGetObjVisibility <document> {<label>|<shape>}
10118 ~~~~~
10119
10120 Returns the visibility of a shape. 
10121
10122 **Example:**
10123 ~~~~~
10124 XGetObjVisibility D 0:1:1:4 
10125 ~~~~~
10126
10127 @subsubsection occt_draw_8_7_6  XGetShapeColor
10128
10129 Syntax:      
10130 ~~~~~
10131 XGetShapeColor <document> <label> <colortype(s|c)>
10132 ~~~~~
10133
10134 Returns the color defined by label. If <i>colortype</i>=’s’ -- returns surface color, else -- returns curve color. 
10135
10136 **Example:**
10137 ~~~~~
10138 XGetShapeColor D 0:1:1:4 c 
10139 ~~~~~
10140
10141 @subsubsection occt_draw_8_7_7  XRemoveColor
10142
10143 Syntax:      
10144 ~~~~~
10145 XRemoveColor <document> <label>
10146 ~~~~~
10147
10148 Removes a color from the color table in a document. 
10149
10150 **Example:**
10151 ~~~~~
10152 XRemoveColor D 0:1:2:1 
10153 ~~~~~
10154
10155 @subsubsection occt_draw_8_7_8  XSetColor
10156
10157 Syntax:      
10158 ~~~~~
10159 XSetColor <document> {<label>|<shape>} <R> <G> <B>
10160 ~~~~~
10161
10162 Sets an RGB color to a shape given by label. 
10163
10164 **Example:**
10165 ~~~~~
10166 XsetColor D 0:1:1:4 0.5 0.5 0. 
10167 ~~~~~
10168
10169 @subsubsection occt_draw_8_7_9  XSetObjVisibility
10170
10171 Syntax:      
10172 ~~~~~
10173 XSetObjVisibility <document> {<label>|<shape>} {0|1}
10174 ~~~~~
10175
10176 Sets the visibility of a shape. 
10177
10178 **Example:**
10179 ~~~~~
10180 # set shape from label 0:1:1:4 as invisible 
10181 XSetObjVisibility D 0:1:1:4 0 
10182 ~~~~~
10183
10184 @subsubsection occt_draw_8_7_10  XUnsetColor
10185
10186 Syntax:      
10187 ~~~~~
10188 XUnsetColor <document> {<label>|<shape>} <colortype>
10189 ~~~~~
10190
10191 Unset a color given type (‘s’ or ‘c’) for the indicated shape. 
10192
10193 **Example:**
10194 ~~~~~
10195 XUnsetColor D 0:1:1:4 s 
10196 ~~~~~
10197
10198
10199 @subsection occt_draw_8_8_  XDE layer commands 
10200
10201 @subsubsection occt_draw_8_8_1  XAddLayer
10202
10203 Syntax:      
10204 ~~~~~
10205 XAddLayer <document> <layer>
10206 ~~~~~
10207
10208 Adds a new layer in an XCAF document. 
10209
10210 **Example:**
10211 ~~~~~
10212 XAddLayer D layer2 
10213 ~~~~~
10214
10215 @subsubsection occt_draw_8_8_2  XFindLayer
10216
10217 Syntax:      
10218 ~~~~~
10219 XFindLayer <document> <layer>
10220 ~~~~~
10221
10222 Prints a label where a layer is situated. 
10223
10224 **Example:**
10225 ~~~~~
10226 XFindLayer D Bolt 
10227 == 0:1:3:2 
10228 ~~~~~
10229
10230 @subsubsection occt_draw_8_8_3  XGetAllLayers
10231
10232 Syntax:      
10233 ~~~~~
10234 XGetAllLayers <document> 
10235 ~~~~~
10236
10237 Prints all layers in an XCAF document. 
10238
10239 **Example:**
10240 ~~~~~
10241 XGetAllLayers D 
10242 == *0:1:1:3* *Bolt* *0:1:1:9* 
10243 ~~~~~
10244
10245 @subsubsection occt_draw_8_8_4  XGetLayers
10246
10247 Syntax:      
10248 ~~~~~
10249 XGetLayers <document> {<shape>|<label>}
10250 ~~~~~
10251
10252 Returns names of layers, which are pointed to by links of an indicated shape. 
10253
10254 **Example:**
10255 ~~~~~
10256 XGetLayers D 0:1:1:3 
10257 == *bolt* *123* 
10258 ~~~~~
10259
10260 @subsubsection occt_draw_8_8_5  XGetOneLayer
10261
10262 Syntax:      
10263 ~~~~~
10264 XGetOneLayer <document> <label>
10265 ~~~~~
10266
10267 Prints the name of a layer at a given label. 
10268
10269 **Example:**
10270 ~~~~~
10271 XGetOneLayer D 0:1:3:2 
10272 ~~~~~
10273
10274 @subsubsection occt_draw_8_8_6  XIsVisible
10275
10276 Syntax:      
10277 ~~~~~
10278 XIsVisible <document> {<label>|<layer>}
10279 ~~~~~
10280
10281 Returns 1 if the indicated layer is visible, else returns 0. 
10282
10283 **Example:**
10284 ~~~~~
10285 XIsVisible D 0:1:3:1 
10286 ~~~~~
10287
10288 @subsubsection occt_draw_8_8_7  XRemoveAllLayers
10289
10290 Syntax:      
10291 ~~~~~
10292 XRemoveAllLayers <document> 
10293 ~~~~~
10294
10295 Removes all layers from an XCAF document. 
10296
10297 **Example:**
10298 ~~~~~
10299 XRemoveAllLayers D 
10300 ~~~~~
10301
10302 @subsubsection occt_draw_8_8_8  XRemoveLayer
10303
10304 Syntax:      
10305 ~~~~~
10306 XRemoveLayer <document> {<label>|<layer>}
10307 ~~~~~
10308
10309 Removes the indicated layer from an XCAF document. 
10310
10311 **Example:**
10312 ~~~~~
10313 XRemoveLayer D layer2 
10314 ~~~~~
10315
10316 @subsubsection occt_draw_8_8_9  XSetLayer
10317
10318 Syntax:      
10319 ~~~~~
10320 XSetLayer XSetLayer <document> {<shape>|<label>} <layer> [shape_in_one_layer {0|1}]
10321
10322 ~~~~~
10323  
10324 Sets a reference between a shape and a layer (adds a layer if it is necessary). 
10325 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). 
10326
10327 **Example:**
10328 ~~~~~
10329 XSetLayer D 0:1:1:2 layer2 
10330 ~~~~~
10331
10332 @subsubsection occt_draw_8_8_10  XSetVisibility
10333
10334 Syntax:      
10335 ~~~~~
10336 XSetVisibility <document> {<label>|<layer>} <isvisible {0|1}>
10337 ~~~~~
10338
10339 Sets the visibility of a layer. 
10340
10341 **Example:**
10342 ~~~~~
10343 # set layer at label 0:1:3:2 as invisible 
10344 XSetVisibility D 0:1:3:2 0 
10345 ~~~~~
10346
10347 @subsubsection occt_draw_8_8_11  XUnSetAllLayers
10348
10349 Syntax:      
10350 ~~~~~
10351 XUnSetAllLayers <document> {<label>|<shape>}
10352 ~~~~~
10353
10354 Unsets a shape from all layers. 
10355
10356 **Example:**
10357 ~~~~~
10358 XUnSetAllLayers D 0:1:1:2 
10359 ~~~~~
10360
10361 @subsubsection occt_draw_8_8_12  XUnSetLayer
10362
10363 Syntax:      
10364 ~~~~~
10365 XUnSetLayer <document> {<label>|<shape>} <layer>
10366 ~~~~~
10367
10368 Unsets a shape from the indicated layer. 
10369
10370 **Example:**
10371 ~~~~~
10372 XUnSetLayer D 0:1:1:2 layer1 
10373 ~~~~~
10374
10375 @subsection occt_draw_8_9  XDE property commands 
10376
10377 @subsubsection occt_draw_8_9_1  XCheckProps
10378
10379 Syntax:      
10380 ~~~~~
10381 XCheckProps <document> [ {0|deflection} [<shape>|<label>] ]
10382 ~~~~~
10383
10384 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. 
10385
10386 **Example:**
10387 ~~~~~
10388 # check properties for shapes at label 0:1:1:1 from 
10389 # document using standard Open CASCADE Technology tools 
10390 XCheckProps D 0 0:1:1:1 
10391 == Label 0:1:1:1      ;L-BRACKET* 
10392 ==  Area defect:        -0.0 (  0%) 
10393 ==  Volume defect:       0.0 (  0%) 
10394 ==  CG defect: dX=-0.000, dY=0.000, dZ=0.000 
10395 ~~~~~
10396
10397 @subsubsection occt_draw_8_9_2  XGetArea
10398
10399 Syntax:      
10400 ~~~~~
10401 XGetArea <document> {<shape>|<label>}
10402 ~~~~~
10403
10404 Returns the area of a given shape. 
10405
10406 **Example:**
10407 ~~~~~
10408 XGetArea D 0:1:1:1 
10409 == 24628.31815094999 
10410 ~~~~~
10411
10412 @subsubsection occt_draw_8_9_3  XGetCentroid
10413
10414 Syntax:      
10415 ~~~~~
10416 XGetCentroid <document> {<shape>|<label>}
10417 ~~~~~
10418
10419 Returns the center of gravity coordinates of a given shape. 
10420
10421 **Example:**
10422 ~~~~~
10423 XGetCentroid D 0:1:1:1 
10424 ~~~~~
10425
10426 @subsubsection occt_draw_8_9_4  XGetVolume
10427
10428 Syntax:      
10429 ~~~~~
10430 XGetVolume <document> {<shape>|<label>}
10431 ~~~~~
10432
10433 Returns the volume of a given shape. 
10434
10435 **Example:**
10436 ~~~~~
10437 XGetVolume D 0:1:1:1 
10438 ~~~~~
10439
10440 @subsubsection occt_draw_8_9_5  XSetArea
10441
10442 Syntax:      
10443 ~~~~~
10444 XSetArea <document> {<shape>|<label>} <area>
10445 ~~~~~
10446
10447 Sets new area to attribute list ??? given shape. 
10448
10449 **Example:**
10450 ~~~~~
10451 XSetArea D 0:1:1:1 2233.99 
10452 ~~~~~
10453
10454 @subsubsection occt_draw_8_9_6  XSetCentroid
10455
10456 Syntax:      
10457 ~~~~~
10458 XSetCentroid <document> {<shape>|<label>} <x> <y> <z>
10459 ~~~~~
10460
10461 Sets new center of gravity  to the attribute list given shape. 
10462
10463 **Example:**
10464 ~~~~~
10465 XSetCentroid D 0:1:1:1 0. 0. 100. 
10466 ~~~~~
10467
10468 @subsubsection occt_draw_8_9_7  XSetMaterial
10469
10470 Syntax:      
10471 ~~~~~
10472 XSetMaterial <document> {<shape>|<label>} <name> <density(g/cu sm)>
10473 ~~~~~ 
10474
10475 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. 
10476
10477 **Example:**
10478 ~~~~~
10479 XSetMaterial D 0:1:1:1 Titanium 8899.77 
10480 ~~~~~
10481
10482 @subsubsection occt_draw_8_9_8  XSetVolume
10483
10484 Syntax:      
10485 ~~~~~
10486 XSetVolume <document> {<shape>|<label>} <volume>
10487 ~~~~~
10488
10489 Sets new volume to the attribute list ??? given shape. 
10490
10491 **Example:**
10492 ~~~~~
10493 XSetVolume D 0:1:1:1 444555.33 
10494 ~~~~~
10495
10496 @subsubsection occt_draw_8_9_9  XShapeMassProps
10497
10498 Syntax:      
10499 ~~~~~
10500 XShapeMassProps <document> [ <deflection> [{<shape>|<label>}] ]
10501 ~~~~~
10502
10503 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. 
10504
10505 **Example:**
10506 ~~~~~
10507 XShapeMassProps D 
10508 == Shape from label : 0:1:1:1 
10509 == Mass = 193.71681469282299 
10510 == CenterOfGravity X = 14.594564763807696,Y = 
10511     20.20271885211281,Z = 49.999999385313245 
10512 == Shape from label : 0:1:1:2 not have a mass 
10513 etc. 
10514 ~~~~~
10515
10516 @subsubsection occt_draw_8_9_10  XShapeVolume
10517
10518 Syntax:      
10519 ~~~~~
10520 XShapeVolume <shape> <deflection>
10521 ~~~~~
10522
10523 Calculates the real volume of a pointed shape with a given deflection. 
10524
10525 **Example:**
10526 ~~~~~
10527 XShapeVolume a 0 
10528 ~~~~~
10529
10530 @section occt_draw_9 Shape Healing commands
10531
10532
10533
10534 @subsection occt_draw_9_1 General commands 
10535
10536 @subsubsection occt_draw_9_1_1 bsplres
10537
10538 Syntax:      
10539 ~~~~~
10540 bsplres <result> <shape> <tol3d> <tol2d< <reqdegree> <reqnbsegments> <continuity3d> <continuity2d> <PriorDeg> <RationalConvert>
10541 ~~~~~
10542
10543 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**). 
10544
10545 @subsubsection occt_draw_9_1_2 checkfclass2d
10546
10547 Syntax:      
10548 ~~~~~
10549 checkfclass2d <face> <ucoord> <vcoord>
10550 ~~~~~
10551
10552 Shows where a point which is given by coordinates is located in relation to a given face -- outbound, inside or at the bounds. 
10553
10554 **Example:**
10555 ~~~~~
10556 checkfclass2d f 10.5 1.1 
10557 == Point is OUT 
10558 ~~~~~
10559
10560 @subsubsection occt_draw_9_1_3 checkoverlapedges
10561
10562 Syntax:      
10563 ~~~~~
10564 checkoverlapedges <edge1> <edge2> [<toler> <domaindist>]
10565 ~~~~~
10566
10567 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. 
10568
10569 **Example:**
10570 ~~~~~
10571 checkoverlapedges e1 e2 
10572 ~~~~~
10573
10574 @subsubsection occt_draw_9_1_4 comtol
10575
10576 Syntax:      
10577 ~~~~~
10578 comptol <shape> [nbpoints] [prefix]
10579 ~~~~~
10580
10581 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. 
10582
10583 **Example:** 
10584 ~~~~~    
10585 comptol h 871 t 
10586
10587 ==> Edges tolerance computed by 871 points: 
10588 ==> MAX=8.0001130696523449e-008 AVG=6.349346868091096e-009 MIN=0 
10589 ==> Relation real tolerance / tolerance set in edge 
10590 ==> MAX=0.80001130696523448 AVG=0.06349345591805905 MIN=0 
10591 ==> Edge with max tolerance saved to t_edge_tol 
10592 ==> Concerned faces saved to shapes t_1, t_2 
10593 ~~~~~
10594
10595 @subsubsection occt_draw_9_1_5 convtorevol
10596
10597 Syntax:      
10598 ~~~~~
10599 convtorevol <result> <shape>
10600 ~~~~~
10601
10602 Converts all elementary surfaces of a given shape into surfaces of revolution. 
10603 Results are put into the shape, which is given as the <i>\<result\></i> parameter. 
10604
10605 **Example:**
10606 ~~~~~
10607 convtorevol r a 
10608 ~~~~~
10609
10610 @subsubsection occt_draw_9_1_6 directfaces
10611
10612 Syntax:      
10613 ~~~~~
10614 directfaces <result> <shape>
10615 ~~~~~
10616
10617 Converts indirect surfaces and returns the results into the shape, which is given as the result parameter. 
10618
10619 **Example:**
10620 ~~~~~
10621 directfaces r a 
10622 ~~~~~
10623
10624 @subsubsection occt_draw_9_1_7 expshape
10625
10626 Syntax:   
10627 ~~~~~
10628 expshape <shape> <maxdegree> <maxseg>
10629 ~~~~~
10630
10631 Gives statistics for a given shape. This test command is working with Bezier and BSpline entities. 
10632
10633 **Example:**
10634 ~~~~~
10635 expshape a 10 10 
10636 ==> Number of Rational Bspline curves 128 
10637 ==> Number of Rational Bspline pcurves 48 
10638 ~~~~~
10639
10640 @subsubsection occt_draw_9_1_8 fixsmall
10641
10642 Syntax:      
10643 ~~~~~
10644 fixsmall <result> <shape> [<toler>=1.]
10645 ~~~~~
10646
10647 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. 
10648
10649 **Example:**
10650 ~~~~~
10651 fixsmall r a 0.1 
10652 ~~~~~
10653
10654 @subsubsection occt_draw_9_1_9 fixsmalledges
10655
10656 Syntax:      
10657 ~~~~~
10658 fixsmalledges <result> <shape> [<toler> <mode> <maxangle>]
10659 ~~~~~
10660
10661 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. 
10662
10663 **Example:**
10664 ~~~~~
10665 fixsmalledges r a 0.1 1 
10666 ~~~~~
10667
10668 @subsubsection occt_draw_9_1_10 fixshape
10669
10670 Syntax:      
10671 ~~~~~
10672 fixshape <result> <shape> [<preci> [<maxpreci>]] [{switches}]
10673 ~~~~~
10674
10675 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 
10676
10677 The following syntax is used: 
10678 * <i>\<symbol\></i> may be
10679   * "-" to set parameter off, 
10680   * "+" to set on or  
10681   * "*" to set default 
10682 * <i>\<parameter\></i> is identified by  letters: 
10683   * l -- FixLackingMode 
10684   * o -- FixOrientationMode 
10685   * h -- FixShiftedMode 
10686   * m -- FixMissingSeamMode 
10687   * d -- FixDegeneratedMode 
10688   * s -- FixSmallMode 
10689   * i -- FixSelfIntersectionMode 
10690   * n -- FixNotchedEdgesMode 
10691 For enhanced message output, use switch '+?' 
10692
10693 **Example:**
10694 ~~~~~
10695 fixshape r a 0.001 
10696 ~~~~~
10697
10698 @subsubsection occt_draw_9_1_11 fixwgaps
10699
10700 Syntax:      
10701 ~~~~~
10702 fixwgaps <result> <shape> [<toler>=0]
10703 ~~~~~
10704
10705 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. 
10706
10707 **Example:**
10708 ~~~~~
10709 fixwgaps r a 
10710 ~~~~~
10711
10712 @subsubsection occt_draw_9_1_12 offsetcurve, offset2dcurve
10713
10714 Syntax:      
10715 ~~~~~
10716 offsetcurve <result> <curve> <offset> <direction(as point)>
10717 offset2dcurve <result> <curve> <offset>
10718 ~~~~~
10719
10720 **offsetcurve** works with the curve in 3d space, **offset2dcurve** in 2d space. 
10721
10722 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>.  
10723
10724 **Example:**
10725 ~~~~~
10726 point pp 10 10 10 
10727 offsetcurve r c 20 pp 
10728 ~~~~~
10729
10730 @subsubsection occt_draw_9_1_13 projcurve
10731
10732 Syntax:      
10733 ~~~~~
10734 projcurve <edge>|<curve3d>|<curve3d first last>  <X> <Y> <Z>
10735 ~~~~~
10736
10737 **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. 
10738
10739 **Example:** 
10740 ~~~~~    
10741 projcurve k_1 0 1 5 
10742 ==Edge k_1 Params from 0 to 1.3 
10743 ==Precision (BRepBuilderAPI) : 9.9999999999999995e-008  ==Projection : 0  1  5 
10744 ==Result : 0  1.1000000000000001  0 
10745 ==Param = -0.20000000000000001  Gap = 5.0009999000199947 
10746 ~~~~~
10747
10748 @subsubsection occt_draw_9_1_14 projpcurve
10749
10750 Syntax:      
10751 ~~~~~
10752 projpcurve <edge> <face>  <Tol> <X> <Y> <Z> [<start_param>]
10753 ~~~~~
10754
10755 **projpcurve** returns the projection of a given point on a given curve on surface.
10756 The curve on surface is defined by giving the edge and face names.
10757 Edge must have curve 2D repesentation on the face.
10758 Optional parameter <i>\<start_param\></i> is any parameter of pcurve, which is used by algorithm as start point for searching projection of given point with help of local Extrema algorithm.
10759 If this parameter is not set, algorithm uses whole parametric interval of pcurve for searching projection.
10760
10761 **Example:** 
10762
10763 ~~~~~ 
10764 # Using global searching   
10765 projpcurve f_1 f 1.e-7 0.877 0 0.479
10766 ==Point: 0.87762772831890712 0 0.47934285275342808
10767 ==Param: 0.49990578239977856
10768 ==Dist: 0.0007152557954264938
10769 ~~~~~
10770
10771 ~~~~~
10772 # Using starting parameter on edge
10773 projpcurve f_1 f 1.e-7 0.877 0 0.479 .6
10774 ==Point: 0.87762772831890712 0 0.47934285275342808
10775 ==Param: 0.49990578239977856
10776 ==Dist: 0.0007152557954264938
10777 ~~~~~
10778
10779 @subsubsection occt_draw_9_1_15 projface
10780
10781 Syntax:      
10782 ~~~~~
10783 projface <face> <X> <Y> [<Z>]
10784 ~~~~~
10785
10786 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. 
10787
10788 **Example:**
10789 ~~~~~
10790 projface a_1 10.0 0.0 
10791 ==  Point UV  U = 10  V = 0 
10792 ==   =   proj  X = -116  Y = -45  Z = 0 
10793 ~~~~~
10794
10795 @subsubsection occt_draw_9_1_16 scaleshape
10796
10797 Syntax:   
10798 ~~~~~
10799 scaleshape <result> <shape> <scale>
10800 ~~~~~
10801
10802 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.
10803
10804 **Example:**
10805 ~~~~~
10806 scaleshape r a_1 0.8 
10807 ~~~~~
10808
10809 @subsubsection occt_draw_9_1_17 settolerance
10810
10811 Syntax:      
10812 ~~~~~
10813 settolerance <shape> [<mode>=v-e-w-f-a] <val>(fix value) or
10814                    <tolmin> <tolmax>
10815 ~~~~~ 
10816
10817 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. 
10818
10819 **Example:**
10820 ~~~~~
10821 settolerance a 0.001 
10822 ~~~~~
10823
10824 @subsubsection occt_draw_9_1_18 splitface
10825
10826 Syntax:      
10827 ~~~~~
10828 splitface <result> <face> [u usplit1 usplit2...] [v vsplit1 vsplit2 ...]
10829 ~~~~~
10830
10831 Splits a given face in parametric space and puts the result into the given parameter <i>\<result\></i>. 
10832 Returns the status of split face. 
10833
10834 **Example:**
10835 ~~~~~
10836 # split face f by parameter u = 5 
10837 splitface r f u 5 
10838 ==> Splitting by   U:   ,5 
10839 ==> Status:  DONE1 
10840 ~~~~~
10841
10842 @subsubsection occt_draw_9_1_19 statshape
10843
10844 Syntax:      
10845 ~~~~~
10846 statshape <shape> [particul]
10847 ~~~~~
10848
10849 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 
10850 surfaces. The last parameter becomes out of date. 
10851
10852 **Example:**
10853 ~~~~~
10854 statshape a 
10855 ==> Count     Item 
10856 ==> -----     ---- 
10857 ==> 402     Edge (oriented) 
10858 ==> 402     Edge (Shared) 
10859 ==> 74      Face 
10860 ==> 74      Face (Free) 
10861 ==> 804     Vertex (Oriented) 
10862 ==> 402     Vertex (Shared) 
10863 ==> 78      Wire 
10864 ==> 4      Face with more than one wire 
10865 ==> 34     bspsur: BSplineSurface 
10866 ~~~~~
10867
10868 @subsubsection occt_draw_9_1_20 tolerance
10869
10870 Syntax:
10871 ~~~~~
10872 tolerance <shape> [<mode>:D v e f c] [<tolmin> <tolmax>:real]
10873 ~~~~~
10874
10875 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. 
10876
10877 **Example:**
10878 ~~~~~
10879 tolerance a 
10880 ==> Tolerance MAX=0.31512672416608001 AVG=0.14901359484722074 MIN=9.9999999999999995e-08 
10881 ==> FACE    : MAX=9.9999999999999995e-08 AVG=9.9999999999999995e-08 MIN=9.9999999999999995e-08 
10882 ==> EDGE    : MAX=0.31512672416608001 AVG=0.098691334511810405 MIN=9.9999999999999995e-08 
10883 ==> VERTEX  : MAX=0.31512672416608001 AVG=0.189076074499648 MIN=9.9999999999999995e-08 
10884
10885 tolerance a v 0.1 0.001 
10886 ==>  Analysing Vertices gives 6 Shapes between tol1=0.10000000000000001 and tol2=0.001 , named tol_1 to tol_6 
10887 ~~~~~
10888
10889
10890 @subsection occt_draw_9_2 Conversion commands 
10891
10892 @subsubsection occt_draw_9_2_1 DT_ClosedSplit
10893
10894 Syntax:      
10895 ~~~~~
10896 DT_ClosedSplit <result> <shape>
10897 ~~~~~
10898
10899 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. 
10900 Note: A closed face is a face with one or more seam. 
10901
10902 **Example:**
10903 ~~~~~
10904 DT_ClosetSplit r a 
10905 ~~~~~
10906
10907 @subsubsection occt_draw_9_2_2 DT_ShapeConvert, DT_ShapeConvertRev
10908
10909 Syntax:      
10910 ~~~~~
10911 DT_ShapeConvert <result> <shape> <convert2d> <convert3d>
10912 DT_ShapeConvertRev <result> <shape> <convert2d> <convert3d>
10913 ~~~~~
10914  
10915 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. 
10916
10917 **Example:**
10918 ~~~~~
10919 DT_ShapeConvert r a 1 1 
10920 == Status: DONE1 
10921 ~~~~~
10922
10923 @subsubsection occt_draw_9_2_3 DT_ShapeDivide
10924
10925 Syntax:      
10926 ~~~~~
10927 DT_ShapeDivide <result> <shape> <tol>
10928 ~~~~~
10929
10930 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: 
10931  * OK      : no splitting was done 
10932  * Done1 : Some edges were split 
10933  * Done2 : Surface was split 
10934  * Fail1    : Some errors occurred 
10935
10936 **Example:**
10937 ~~~~~
10938 DT_ShapeDivide r a 0.001 
10939 == Status: OK 
10940 ~~~~~
10941
10942 @subsubsection occt_draw_9_2_4 DT_SplitAngle
10943
10944 Syntax:      
10945 ~~~~~
10946 DT_SplitAngle <result> <shape> [MaxAngle=95]
10947 ~~~~~
10948
10949 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. 
10950 This command illustrates how class *ShapeUpgrade_ShapeDivideAngle* works. 
10951
10952 **Example:**
10953 ~~~~~
10954 DT_SplitAngle r a 
10955 == Status: DONE2 
10956 ~~~~~
10957
10958 @subsubsection occt_draw_9_2_5 DT_SplitCurve
10959
10960 Syntax:      
10961 ~~~~~
10962 DT_SplitCurve <curve> <tol> <split(0|1)>
10963 ~~~~~
10964
10965 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. 
10966
10967 **Example:**
10968 ~~~~~
10969 DT_SplitCurve r c 
10970 ~~~~~
10971
10972 @subsubsection occt_draw_9_2_6 DT_SplitCurve2d
10973
10974 Syntax:      
10975 ~~~~~
10976 DT_SplitCurve2d Curve Tol Split(0/1) 
10977 ~~~~~
10978
10979 Works just as **DT_SplitCurve** (see above), only with 2d curve. 
10980
10981 **Example:**
10982 ~~~~~
10983 DT_SplitCurve2d r c 
10984 ~~~~~
10985
10986 @subsubsection occt_draw_9_2_7 DT_SplitSurface
10987
10988 Syntax:      
10989 ~~~~~
10990 DT_SplitSurface <result> <Surface|GridSurf> <tol> <split(0|1)>
10991 ~~~~~
10992
10993 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. 
10994
10995 **Example:** 
10996 ~~~~~
10997 # split surface with name "su"
10998 DT_SplitSurface res su 0.1 1 
10999 ==> single surf 
11000 ==> appel a SplitSurface::Init 
11001 ==> appel a SplitSurface::Build 
11002 ==> appel a SplitSurface::GlobalU/VKnots 
11003 ==> nb GlobalU;nb GlobalV=7 2 0 1 2 3 4 5 6.2831853072 0 1 
11004 ==> appel a Surfaces 
11005 ==> transfert resultat 
11006 ==> res1_1_1 res1_2_1 res1_3_1 res1_4_1 res1_5_1 res1_6_1 
11007 ~~~~~
11008
11009 @subsubsection occt_draw_9_2_8 DT_ToBspl
11010
11011 Syntax:
11012 ~~~~~
11013 DT_ToBspl <result> <shape>
11014 ~~~~~
11015
11016 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. 
11017
11018 **Example:** 
11019 ~~~~~    
11020 DT_ToBspl res sh 
11021 == error = 5.20375663162094e-08   spans = 10 
11022 ==  Surface is aproximated with continuity 2 
11023 ~~~~~
11024
11025 @section occt_draw_10 Performance evaluation commands
11026
11027
11028 @subsection occt_draw_10_1 VDrawSphere
11029
11030 Syntax:      
11031 ~~~~~
11032 vdrawsphere shapeName Fineness [X=0.0 Y=0.0 Z=0.0] [Radius=100.0] [ToEnableVBO=1] [NumberOfViewerUpdate=1] [ToShowEdges=0] 
11033 ~~~~~
11034
11035 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. 
11036
11037 This command can be used for visualization performance evaluation instead of the outdated Visualization Performance Meter. 
11038
11039 **Example:** 
11040 ~~~~~
11041 vdrawsphere s 200 1 1 1 500 1 
11042 == Compute Triangulation... 
11043 == NumberOfPoints: 39602 
11044 == NumberOfTriangles: 79200 
11045 == Amount of memory required for PolyTriangulation without Normals: 2 Mb 
11046 == Amount of memory for colors: 0 Mb 
11047 == Amount of memory for PolyConnect: 1 Mb 
11048 == Amount of graphic card memory required: 2 Mb 
11049 == Number of scene redrawings: 1 
11050 == CPU user time: 15.6000999999998950 msec 
11051 == CPU system time: 0.0000000000000000 msec 
11052 == CPU average time of scene redrawing: 15.6000999999998950 msec 
11053 ~~~~~
11054
11055
11056 @section occt_draw_12 Simple vector algebra and measurements
11057
11058 This section contains description of auxiliary commands that can be useful for simple calculations and manipulations needed when analyzing complex models.
11059
11060 @subsection occt_draw_12_1 Vector algebra commands
11061
11062 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:
11063 ~~~~~{.cpp}
11064 Draw[10]> set vec1 [vec 12 28 99 12 58 99]
11065 0 30 0
11066 Draw[13]> set vec2 [vec 12 28 99 16 21 89]
11067 4 -7 -10
11068 Draw[14]> set cross [eval cross $vec1 $vec2]
11069 -300 0 -120
11070 Draw[15]> eval module $cross
11071 323.10988842807024
11072 ~~~~~
11073
11074 @subsubsection occt_draw_12_1_1 vec
11075
11076 Syntax:
11077 ~~~~~
11078 vec <x1> <y1> <z1> <x2> <y2> <z2>
11079 ~~~~~ 
11080
11081 Returns coordinates of vector between two 3D points.
11082
11083 Example:
11084 ~~~~~{.cpp}
11085 vec 1 2 3 6 5 4
11086 ~~~~~
11087
11088 @subsubsection occt_draw_12_1_2 2dvec
11089
11090 Syntax:
11091 ~~~~~
11092 2dvec <x1> <y1> <x2> <y2>
11093 ~~~~~ 
11094
11095 Returns coordinates of vector between two 2D points.
11096
11097 Example: 
11098 ~~~~~{.cpp}
11099 2dvec 1 2 4 3
11100 ~~~~~
11101
11102 @subsubsection occt_draw_12_1_3 pln
11103
11104 Syntax:
11105 ~~~~~
11106 pln <x1> <y1> <z1> <x2> <y2> <z2> <x3> <y3> <z3>
11107 ~~~~~ 
11108
11109 Returns plane built on three points. A plane is represented by 6 double values: coordinates of the origin point and the normal directoin.
11110
11111 Example: 
11112 ~~~~~{.cpp}
11113 pln 1 2 3 6 5 4 9 8 7
11114 ~~~~~
11115
11116 @subsubsection occt_draw_12_1_4 module
11117
11118 Syntax:
11119 ~~~~~
11120 module <x> <y> <z>
11121 ~~~~~ 
11122
11123 Returns module of a vector.
11124
11125 Example: 
11126 ~~~~~{.cpp}
11127 module 1 2 3
11128 ~~~~~
11129
11130 @subsubsection occt_draw_12_1_5 2dmodule
11131
11132 Syntax:
11133 ~~~~~
11134 2dmodule <x> <y>
11135 ~~~~~ 
11136
11137 Returns module of a 2D vector.
11138
11139 Example: 
11140 ~~~~~{.cpp}
11141 2dmodule 1 2
11142 ~~~~~
11143
11144 @subsubsection occt_draw_12_1_6 norm
11145
11146 Syntax:
11147 ~~~~~
11148 norm <x> <y> <z>
11149 ~~~~~ 
11150
11151 Returns unified vector from a given 3D vector.
11152
11153 Example: 
11154 ~~~~~{.cpp}
11155 norm 1 2 3
11156 ~~~~~
11157
11158 @subsubsection occt_draw_12_1_7 2dnorm
11159
11160 Syntax:
11161 ~~~~~
11162 2dnorm <x> <y>
11163 ~~~~~ 
11164
11165 Returns unified vector from a given 2D vector.
11166
11167 Example: 
11168 ~~~~~{.cpp}
11169 2dnorm 1 2
11170 ~~~~~
11171
11172 @subsubsection occt_draw_12_1_8 inverse
11173
11174 Syntax:
11175 ~~~~~
11176 inverse <x> <y> <z>
11177 ~~~~~ 
11178
11179 Returns inversed 3D vector.
11180
11181 Example: 
11182 ~~~~~{.cpp}
11183 inverse 1 2 3
11184 ~~~~~
11185
11186 @subsubsection occt_draw_12_1_9 2dinverse
11187
11188 Syntax:
11189 ~~~~~
11190 2dinverse <x> <y>
11191 ~~~~~ 
11192
11193 Returns inversed 2D vector.
11194
11195 Example: 
11196 ~~~~~{.cpp}
11197 2dinverse 1 2
11198 ~~~~~
11199
11200 @subsubsection occt_draw_12_1_10 2dort
11201
11202 Syntax:
11203 ~~~~~
11204 2dort <x> <y>
11205 ~~~~~ 
11206
11207 Returns 2D vector rotated on 90 degrees.
11208
11209 Example: 
11210 ~~~~~{.cpp}
11211 2dort 1 2
11212 ~~~~~
11213
11214 @subsubsection occt_draw_12_1_11 distpp
11215
11216 Syntax:
11217 ~~~~~
11218 distpp <x1> <y1> <z1> <x2> <y2> <z2>
11219 ~~~~~ 
11220
11221 Returns distance between two 3D points.
11222
11223 Example: 
11224 ~~~~~{.cpp}
11225 distpp 1 2 3 4 5 6
11226 ~~~~~
11227
11228 @subsubsection occt_draw_12_1_12 2ddistpp
11229
11230 Syntax:
11231 ~~~~~
11232 2ddistpp <x1> <y1> <x2> <y2>
11233 ~~~~~ 
11234
11235 Returns distance between two 2D points.
11236
11237 Example: 
11238 ~~~~~{.cpp}
11239 2ddistpp 1 2 3 4
11240 ~~~~~
11241
11242 @subsubsection occt_draw_12_1_13 distplp
11243
11244 Syntax:
11245 ~~~~~
11246 distplp <x0> <y0> <z0> <nx> <ny> <nz> <xp> <yp> <zp>
11247 ~~~~~ 
11248
11249 Returns distance between plane defined by point and normal direction and another point.
11250
11251 Example: 
11252 ~~~~~{.cpp}
11253 distplp 0 0 0 0 0 1 5 6 7
11254 ~~~~~
11255
11256 @subsubsection occt_draw_12_1_14 distlp
11257
11258 Syntax:
11259 ~~~~~
11260 distlp <x0> <y0> <z0> <dx> <dy> <dz> <xp> <yp> <zp>
11261 ~~~~~ 
11262
11263 Returns distance between 3D line defined by point and direction and another point.
11264
11265 Example: 
11266 ~~~~~{.cpp}
11267 distlp 0 0 0 1 0 0 5 6 7
11268 ~~~~~
11269
11270 @subsubsection occt_draw_12_1_15 2ddistlp
11271
11272 Syntax:
11273 ~~~~~
11274 2ddistlp <x0> <y0> <dx> <dy> <xp> <yp>
11275 ~~~~~ 
11276
11277 Returns distance between 2D line defined by point and direction and another point.
11278
11279 Example: 
11280 ~~~~~{.cpp}
11281 2ddistlp 0 0 1 0 5 6
11282 ~~~~~
11283
11284 @subsubsection occt_draw_12_1_16 distppp
11285
11286 Syntax:
11287 ~~~~~
11288 distppp <x1> <y1> <z1> <x2> <y2> <z2> <x3> <y3> <z3>
11289 ~~~~~ 
11290
11291 Returns deviation of point (x2,y2,z2) from segment defined by points (x1,y1,z1) and (x3,y3,z3).
11292
11293 Example: 
11294 ~~~~~{.cpp}
11295 distppp 0 0 0 1 1 0 2 0 0
11296 ~~~~~
11297
11298 @subsubsection occt_draw_12_1_17 2ddistppp
11299
11300 Syntax:
11301 ~~~~~
11302 2ddistppp <x1> <y1> <x2> <y2> <x3> <y3>
11303 ~~~~~ 
11304
11305 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.
11306
11307 Example: 
11308 ~~~~~{.cpp}
11309 2ddistppp 0 0 1 -1 2 0
11310 ~~~~~
11311
11312 @subsubsection occt_draw_12_1_18 barycen
11313
11314 Syntax:
11315 ~~~~~
11316 barycen <x1> <y1> <z1> <x2> <y2> <z2> <par>
11317 ~~~~~ 
11318
11319 Returns point of a given parameter between two 3D points.
11320
11321 Example: 
11322 ~~~~~{.cpp}
11323 barycen 0 0 0 1 1 1 0.3
11324 ~~~~~
11325
11326 @subsubsection occt_draw_12_1_19 2dbarycen
11327
11328 Syntax:
11329 ~~~~~
11330 2dbarycen <x1> <y1> <x2> <y2> <par>
11331 ~~~~~ 
11332
11333 Returns point of a given parameter between two 2D points.
11334
11335 Example: 
11336 ~~~~~{.cpp}
11337 2dbarycen 0 0 1 1 0.3
11338 ~~~~~
11339
11340 @subsubsection occt_draw_12_1_20 cross
11341
11342 Syntax:
11343 ~~~~~
11344 cross <x1> <y1> <z1> <x2> <y2> <z2>
11345 ~~~~~ 
11346
11347 Returns cross product of two 3D vectors.
11348
11349 Example: 
11350 ~~~~~{.cpp}
11351 cross 1 0 0 0 1 0
11352 ~~~~~
11353
11354 @subsubsection occt_draw_12_1_21 2dcross
11355
11356 Syntax:
11357 ~~~~~
11358 2dcross <x1> <y1> <x2> <y2>
11359 ~~~~~ 
11360
11361 Returns cross product of two 2D vectors.
11362
11363 Example: 
11364 ~~~~~{.cpp}
11365 2dcross 1 0 0 1
11366 ~~~~~
11367
11368 @subsubsection occt_draw_12_1_22 dot
11369
11370 Syntax:
11371 ~~~~~
11372 dot <x1> <y1> <z1> <x2> <y2> <z2>
11373 ~~~~~ 
11374
11375 Returns scalar product of two 3D vectors.
11376
11377 Example: 
11378 ~~~~~{.cpp}
11379 dot 1 0 0 0 1 0
11380 ~~~~~
11381
11382 @subsubsection occt_draw_12_1_23 2ddot
11383
11384 Syntax:
11385 ~~~~~
11386 2ddot <x1> <y1> <x2> <y2>
11387 ~~~~~ 
11388
11389 Returns scalar product of two 2D vectors.
11390
11391 Example: 
11392 ~~~~~{.cpp}
11393 2ddot 1 0 0 1
11394 ~~~~~
11395
11396 @subsubsection occt_draw_12_1_24 scale
11397
11398 Syntax:
11399 ~~~~~
11400 scale <x> <y> <z> <factor>
11401 ~~~~~ 
11402
11403 Returns 3D vector multiplied by scalar.
11404
11405 Example: 
11406 ~~~~~{.cpp}
11407 scale 1 0 0 5
11408 ~~~~~
11409
11410 @subsubsection occt_draw_12_1_25 2dscale
11411
11412 Syntax:
11413 ~~~~~
11414 2dscale <x> <y> <factor>
11415 ~~~~~ 
11416
11417 Returns 2D vector multiplied by scalar.
11418
11419 Example: 
11420 ~~~~~{.cpp}
11421 2dscale 1 0 5
11422 ~~~~~
11423
11424 @subsection occt_draw_12_2 Measurements commands
11425
11426 This section describes commands that make possible to provide measurements on a model.
11427
11428 @subsubsection occt_draw_12_2_1 pnt
11429
11430 Syntax:
11431 ~~~~~
11432 pnt <object>
11433 ~~~~~ 
11434
11435 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".
11436
11437 Example: 
11438 ~~~~~{.cpp}
11439 vertex v 0 1 0
11440 pnt v
11441 ~~~~~
11442
11443 @subsubsection occt_draw_12_2_2 pntc
11444
11445 Syntax:
11446 ~~~~~
11447 pntc <curv> <par>
11448 ~~~~~ 
11449
11450 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".
11451
11452 Example: 
11453 ~~~~~{.cpp}
11454 circle c 0 0 0 10
11455 pntc c [dval pi/2]
11456 ~~~~~
11457
11458 @subsubsection occt_draw_12_2_3 2dpntc
11459
11460 Syntax:
11461 ~~~~~
11462 2dpntc <curv2d> <par>
11463 ~~~~~ 
11464
11465 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".
11466
11467 Example: 
11468 ~~~~~{.cpp}
11469 circle c 0 0 10
11470 2dpntc c [dval pi/2]
11471 ~~~~~
11472
11473 @subsubsection occt_draw_12_2_4 pntsu
11474
11475 Syntax:
11476 ~~~~~
11477 pntsu <surf> <u> <v>
11478 ~~~~~ 
11479
11480 Returns coordinates of point on surface with given parameters. Actually this command is based on the command @ref occt_draw_6_6_3 "svalue".
11481
11482 Example: 
11483 ~~~~~{.cpp}
11484 cylinder s 10
11485 pntsu s [dval pi/2] 5
11486 ~~~~~
11487
11488 @subsubsection occt_draw_12_2_5 pntcons
11489
11490 Syntax:
11491 ~~~~~
11492 pntcons <curv2d> <surf> <par>
11493 ~~~~~ 
11494
11495 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".
11496
11497 Example: 
11498 ~~~~~{.cpp}
11499 line c 0 0 1 0
11500 cylinder s 10
11501 pntcons c s [dval pi/2]
11502 ~~~~~
11503
11504 @subsubsection occt_draw_12_2_6 drseg
11505
11506 Syntax:
11507 ~~~~~
11508 drseg <name> <x1> <y1> <z1> <x2> <y2> <z2>
11509 ~~~~~ 
11510
11511 Creates a linear segment between two 3D points. The new object is given the *name*. The object is drawn in the axonometric view.
11512
11513 Example: 
11514 ~~~~~{.cpp}
11515 drseg s 0 0 0 1 0 0
11516 ~~~~~
11517
11518 @subsubsection occt_draw_12_2_7 2ddrseg
11519
11520 Syntax:
11521 ~~~~~
11522 2ddrseg <name> <x1> <y1> <x2> <y2>
11523 ~~~~~ 
11524
11525 Creates a linear segment between two 2D points. The new object is given the *name*. The object is drawn in the 2D view.
11526
11527 Example: 
11528 ~~~~~{.cpp}
11529 2ddrseg s 0 0 1 0
11530 ~~~~~
11531
11532 @subsubsection occt_draw_12_2_8 mpick
11533
11534 Syntax:
11535 ~~~~~
11536 mpick
11537 ~~~~~ 
11538
11539 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.
11540
11541 Example: 
11542 ~~~~~{.cpp}
11543 mpick
11544 ~~~~~
11545
11546 @subsubsection occt_draw_12_2_9 mdist
11547
11548 Syntax:
11549 ~~~~~
11550 mdist
11551 ~~~~~ 
11552
11553 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.
11554
11555 Example: 
11556 ~~~~~{.cpp}
11557 mdist
11558 ~~~~~
11559
11560 @section occt_draw_13 Inspector commands
11561
11562
11563 This section describes commands that make possible to use Inspector.
11564
11565 @subsection occt_draw_13_1 tinspector
11566
11567 Syntax:                  
11568 ~~~~~
11569 tinspector [-plugins {name1 ... [nameN] | all}]
11570            [-activate name]
11571            [-shape object [name1] ... [nameN]]
11572            [-open file_name [name1] ... [nameN]]
11573            [-update]
11574            [-select {object | name1 ... [nameN]}]
11575            [-show {0|1} = 1]
11576 ~~~~~
11577 Starts inspection tool.
11578 Options:
11579 * *plugins* enters plugins that should be added in the inspector.
11580 Available names are: *dfbrowser*, *vinspector* and *shapeview*.
11581 Plugins order will be the same as defined in the arguments.
11582 'all' adds all available plugins in the order:
11583 DFBrowser, VInspector and ShapeView.
11584 If at the first call this option is not used, 'all' option is applied;
11585 * *activate* activates the plugin in the tool view.
11586 If at the first call this option is not used, the first plugin is activated;
11587 * *shape* initializes plugin(s) by the shape object. If 'name' is empty, initializes all plugins;
11588 * *open* gives the file to the plugin(s). If the plugin is active after open, the content will be updated;
11589 * *update* updates content of the active plugin;
11590 * *select* sets the parameter that should be selected in an active tool view.
11591 Depending on the active tool the parameter is:
11592 ShapeView: 'object' is an instance of *TopoDS_Shape TShape*,
11593 DFBrowser: 'name' is an entry of *TDF_Label* and 'name2' (optionally) for *TDF_Attribute* type name,
11594 VInspector: 'object' is an instance of *AIS_InteractiveObject*;
11595 * *show* sets Inspector view visible or hidden. The first call of this command will show it.
11596
11597 **Example:** 
11598 ~~~~~
11599 pload DCAF INSPECTOR
11600
11601 NewDocument Doc BinOcaf
11602
11603 set aSetAttr1 100
11604 set aLabel 0:2
11605 SetInteger Doc ${aLabel} ${aSetAttr1}
11606
11607 tinspector -plugins dfbrowser -select 0:2 TDataStd_Integer
11608 ~~~~~ 
11609
11610 **Example:** 
11611 ~~~~~
11612 pload ALL INSPECTOR
11613
11614 box b1 200 100 120
11615 box b2 100 200 220 100 120 100
11616
11617 tinspector -plugins shapeview -shape b1 -shape b2 -select b1
11618 ~~~~~ 
11619
11620 **Example:** 
11621 ~~~~~
11622 pload ALL INSPECTOR
11623
11624 tinspector -plugins vinspector
11625
11626 vinit
11627 box box_1 100 100 100
11628 vdisplay box_1
11629
11630 box box_2 180 120 200 150 150 150
11631 vdisplay box_2
11632
11633 vfit
11634 vselmode box_1 1 1
11635 vselmode box_1 3 1
11636
11637 tinspector -update -select box_1
11638 ~~~~~ 
11639
11640
11641 @section occt_draw_11 Extending Test Harness with custom commands
11642
11643
11644 The following chapters explain how to extend Test Harness with custom commands and how to activate them using a plug-in mechanism. 
11645
11646
11647 @subsection occt_draw_11_1 Custom command implementation
11648
11649 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. 
11650
11651 **Example:** 
11652 ~~~~~
11653 static Standard_Integer myadvcurve(Draw_Interpretor& di, Standard_Integer n, char** a) 
11654
11655 ... 
11656
11657 ~~~~~
11658
11659 For examples of existing commands refer to Open CASCADE Technology (e.g. GeomliteTest.cxx). 
11660
11661
11662 @subsection occt_draw_11_2 Registration of commands in Test Harness
11663
11664 To become available in the Test Harness the custom command must be registered in it. This should be done as follows. 
11665
11666 **Example:** 
11667 ~~~~~
11668 void MyPack::CurveCommands(Draw_Interpretor& theCommands) 
11669
11670 ... 
11671 char* g = "Advanced curves creation"; 
11672
11673 theCommands.Add ( "myadvcurve", "myadvcurve name p1 p2 p3 - Creates my advanced curve from points", 
11674                   __FILE__, myadvcurve, g ); 
11675 ... 
11676
11677 ~~~~~
11678
11679 @subsection occt_draw_11_3 Creating a toolkit (library) as a plug-in
11680
11681 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. 
11682
11683 This exported function *PLUGINFACTORY()* must be implemented only once per library. 
11684
11685 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. 
11686
11687 **Example:** 
11688 ~~~~~
11689 #include <Draw_PluginMacro.hxx>
11690
11691 void MyPack::Factory(Draw_Interpretor& theDI)
11692 {
11693 ...
11694 // 
11695 MyPack::CurveCommands(theDI);
11696 ...
11697 }
11698
11699 // Declare entry point PLUGINFACTORY
11700 DPLUGIN(MyPack)
11701 ~~~~~
11702
11703 @subsection occt_draw_11_4 Creation of the plug-in resource file
11704
11705 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 (;:;). 
11706 For every created plug-in there must be a key. For better readability and comprehension it is recommended to have some meaningful name. 
11707 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. 
11708 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. 
11709
11710 **Examples** (file MyDrawPlugin): 
11711 ~~~~~
11712 ! Hierarchy of plug-ins 
11713 ALL                : ADVMODELING, MESHING 
11714 DEFAULT            : MESHING 
11715 ADVMODELING        : ADVSURF, ADVCURV 
11716
11717 ! Mapping from naming to toolkits (libraries) 
11718 ADVSURF            : TKMyAdvSurf 
11719 ADVCURV            : TKMyAdvCurv 
11720 MESHING            : TKMyMesh 
11721 ~~~~~
11722
11723 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. 
11724
11725
11726 @subsection occt_draw_11_5 Dynamic loading and activation
11727
11728 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. 
11729
11730 The procedure consists in defining the system variables and using the *pload* commands in the Test Harness session. 
11731
11732 **Example:** 
11733 ~~~~
11734 Draw[]> set env(CSF_MyDrawPluginDefaults) /users/test
11735 Draw[]> pload -MyDrawPlugin ALL
11736 ~~~~