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