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