1
0
mirror of https://git.dev.opencascade.org/repos/occt.git synced 2025-04-10 18:51:21 +03:00
2012-03-05 19:23:40 +04:00

5533 lines
116 KiB
Plaintext
Executable File

This document is the reference manual for the harness Draw, Draw is a
command interpreter based on TCL and a graphical system used to test
and demonstrate CAS.CADE modeling libraries. In this document are
described the basics of the TCL command language and Draw extensions,
the commands to do geometry and the commands to do topology.
*Overview
Draw is a test and development harness for CAS.CADE. It is intended to
provide a flexible and easy-to-use means of testing and demonstrating
the CAS.CADE modeling libraries.
Draw can be used interactively to create, display and modify objects
such as curves, surfaces and topological shapes.
Scripts can be written to customize Draw and perform tests. New types
of objects and new commands can be added using the C++ programing
language.
Draw is basically made up of
- a command interpreter based on the TCL command language
- a 3d graphic viewer based on the X system
- a basic set of commands covering scripts, variables and graphics
- a set of geometric commands, allowing to create and modify curves
and surfaces and to use CAS.CADE geometry algorithms. This set of
commands is optional
- a set of topological commands to create and modify BRep shapes and
to use the CAS.CADE topology algorithms
As a rule there is an "official" set of commands for each delivery
unit in the modeling libraries : GEOMETRY, TOPOLOGY, ADVALGOS,
GRAPHIC, PRESENTATION
**Contents of the documentation
This documentation describes
- the command language
- the basic set of commands
- the graphical commands
- the geometry set of commands
- the topology set of commands
This document does not describe the other sets of commands and does
not explain how to extend Draw using C++.
This document is mainly a reference manual, it contains descriptions
of commands, all descriptions have the same format which is above
illustrated with the exit command.
*** exit
.Synopsis
exit
.Purpose
Terminates the Draw, TCL session. If the commands are read from a file
using the source command this will terminante reading from the file.
.Example
# this is a very short example
exit
.See also
source
.Index
exit command
**Getting started
We will now try a simple example. The first thing to do is to setup a
Draw executable, check if the DRAW and TCL ULs are visible in your
workbench with the wok command "ulinuse". If DRAW does not appear you
should check with your workshop manager to install DRAW and TCL.
We will now suppose that you have a DRAW version, at least DRAW-7 (use
"ulinuse -v" to check so). You must now find an executable. Let us
try TGEOMETRY. Just type TGEOMETRY, if you do not get a prompt
"Draw[1]> " you must create an executable by linking the program from
the source example TestDraw.cxx which can be found in the src
directory of the UL.
Draw displays prompt and waits for commands, here is a sample session
:
.Example
# create Two views 2d and axonometric
Draw[1]> av2d
# create a 2d circle
Draw[2]> circle c 0 0 1 0 5
Draw[3]> 2dfit
# trim the circle and dump it
Draw[4]> trim c c 0 pi/2
Draw[5]> dump c
0*********** Dump of c *************
Trimmed curve
Parameters : 0 1.5707963267949
Basis curve :
Circle
Center :0, 0
XAxis :1, 0
YAxis :-0, 1
Radius :5
# make a 3d circle from it, and turn it into a bspline
Draw[6]> to3d c c
Draw[7]> fit
Draw[8]> convert c c
Draw[9]> dump c
0*********** Dump of c *************
BSplineCurve rational
Degree 2, 3 Poles, 2 Knots
Poles :
1 : 5, 0, 0 1
2 : 5, 5, 0 0.707106781186548
3 : 3.06161699786838e-16, 5, 0 1
Knots :
1 : 0 3
2 : 1.5707963267949 3
.Example
# make a surface of revolution from the spline
Draw[10]> fit
Draw[11]> help rev
reverse : reverse name ...
revsurf : revsurf name curvename x y z dx dy dz
# here you must click on the curve with the mouse
Draw[12]> revsurf s . 5 5 0 -1 1 0
Pick an object
Draw[13]> fit
# rotate the view
Draw[14]> u
Draw[15]> erase c
c
# make a bspline surface and intersect with a plane
Draw[20]> convert s s
Draw[21]> fit
Draw[22]> plane p 5 5 5 1 1 1 1 0 0
Draw[23]> intersect c p s
# pick on one of the intersection curves
# you may get c_2 onstead of c_1
Draw[24]> whatis .
Pick an object
c_1 is a a 3d curve
Draw[25]> clear
Draw[27]> rename c_1 c
Draw[28]> fit
# save the curve, use any directory where you can write
Draw[29]> datadir $env(WBCONTAINER)/data/default
/adv_20/BAG/data/default
Draw[30]> save c curveinter
c
Draw[31]> exit
.Text
In this example some geometrical operations have been performed,
objects have been displayed and wrote to files.
*The command language
The command language used in Draw is the TCL command language. It is
highly recommended, if you want to use Draw extensively, to read some
TCL documentation like "TCL and the TK Toolkit" by John K. Ousterhout
(Addison-Wesley).
The following section is a short outline of the TCL language and its
extensions incorporated in Draw. The following topics will be covered.
- syntax of the TCL language
- accessing variables in TCL and Draw
- control structures
- procedures
** Syntax of TCL
.Index
TCL
script
command
word
substitution
quoting
.Text
TCL is an interpreted command language, it is not a structured
language like C, Pascal, LISP or Basic, it is rather a line oriented
language like a shell (csh for example). However you will find that
TCL is easier to use than shell because control structures and
procedure are easier to define. TCL is also faster than shell because
it does not fork a process for each command.
The basic program for TCL is a script. A script consists of one or
more commands. Commands are separated by newlines or semicolons.
.Example
set a 24
set b 15
set a 25; set b 15
.Text
Each command consists of one or more words, the first word is the name
of a command and additional words are arguments for that command.
Words are separated by spaces or tabs. In the preceding example each
command has three words. There may be any number of words in a command
and each word is a string of arbitrary length.
The evaluation of a command by TCL follows two steps. In the first
step the command is parsed and broken into words and some
substitutions are performed. In the second step the command procedure
corresponding to the first word is called with the other words as
arguments. In the first step there is only string manipulation,
meaning is given to the words only in the second step by the command
procedure.
The following substitutions are performed by TCL
- Variable substitution is triggered by the $ character (as with csh),
the content of the variable is substituted, {} may be used as in csh
to enclose the name of the variable.
.Example
# set a variable value
set file documentation
# a simple substitution, set psfile to documentation.ps
set psfile $file.ps
# another substitution, set pfile to documentationPS
set pfile ${file}PS
# a last one,
# delete files NEWdocumentation and OLDdocumentation
foreach prefix {NEW OLD} {rm $prefix$file}
.Text
- Command substitution is triggered by the [] characters. The brackets
must enclose a valid script, this scrit is evaluated and the result is
substituted. This is similar to the `command` construction in csh.
.Example
set degree 30
set pi 3.14159265
# expr is a command evaluating a numeric expression
set radian [expr $pi*$degree/180]
.Index
expr command
.Text
- Backslash substitution is triggered by the backslash character. It
is used to insert special characters like : $,[,]. A backslash
terminated line is continued on the following line.
TCL uses two forms of quoting to prevent substitution and word
breaking.
- Double quote quoting enables to define a string with space and tabs
as a single word, substitutions are still performed inside the "".
.Example
# set msg to "the price is 12.00$"
set price "\$ 12.00"
set msg "the price is $price"
.Text
- Braces quoting prevent all the substitutions. Braces are also
nested. The main use of braces is to defer evaluation when defining
procedures and control structures. Braces are useful to present nicely
TCL scripts on multiple lines.
.Example
set x 0
# this will loop for ever
# because while argument is "0 < 3"
while "$x < 3" {set x [expr $x+1]}
# this will terminate as expected because
# while argument is {$x < 3}
while {$x < 3} {set x [expr $x+1]}
# this can be written also
while {$x < 3} {
set x [expr $x+1]
}
# the following cannot be written
# because while requires two arguments
while {$x < 3}
{
set x [expr $x+1]
}
.Text
Comments start with a # character as the first non blank character in
a command. If you want to comment at the end of the line you must
precede the comment by semi-colon to end the preceding command.
.Example
# This is a comment
set a 1 # this is not a comment
set b 1; # this is a comment
.Text
Last but not least thing to know about parsing in TCL is that the
number of words is never changed by substitution. For example the
result of a substitution is always a single word. This is different
than csh but it is very convenient as the behavior of the parser is
more predictable. Sometimes it may be necessary to enforce a second
round of evaluation to reparse, the eval command is useful to that
purpose. This command concatenates all its arguments and evaluates
this script.
.Example
# I want to delete two files
set files "foo bar"
# this will fail because rm will receive only one argument
# and complain that "foo bar" does not exists
exec rm $files
# a second evaluation will do it
eval exec rm $files
.Index
eval command
exec command
** Accessing variables in TCL and Draw
TCL variables have only string values. Note that even numeric values
are stored as string literals and computations with the expr command
start by parsing the strings. This approach is not sufficient for Draw
where variables with other kinds of values are necessary, such as
curves, surfaces or topological shapes.
Fortunately TCL provides a mechanism to link user data to variables,
this mechanism is used with Draw. Draw variables are TCL variables
with associated data. The string value of a Draw variable is
meaningless, it is usually set to the name of the variable itself, so
preceding a Draw variable with a $ do not change the result of a
command. The content of a Draw variable is accessed with appropriate
commands. There are many kinds of Draw variables, and new ones may be
added with C++. We will describe later geometric and topological
variables, for the moment we will only describe the numeric variables.
Draw numeric variables can be used within an expression whereever a
Draw comand requires a numeric value. The expr command is useless in
this case. Those variables are not stored as strings but as floating
point values.
.Example
# dset is used for numeric variables
# pi is a predefined Draw variable
dset angle pi/3 radius 10
point p radius*cos(angle) radius*sin(angle) 0
.Text
At the beginning the difference between TCL and Draw variables may be
confusing but you will be quickly used to it. My advice is to use TCL
variable only for strings and to use Draw for numerics as you can
avoid the expr command. Usually for geometry and topology you will
only need numbers no strings.
.Index
numeric variables
Draw variables
pi
*** set, unset
.Synopsis
set varname [value]
unset varname [varname varname ...]
.Purpose
Use the set command to assign a string value to a variable. If the
variable does not exist it is created.
Without the value argument the command returns the content of the
variable.
Use the unset command to destroy the variables. This is is also used
to destroy Draw variables.
.Example
set a "Hello world"
set b "Goodbye"
set a
==> "Hello world"
unset a b
set a
==> Error message....
.Warning
The set command can set only one variable, unlike the dset command.
.See also
dset, dval
.Index
set command
unset command
*** dset, dval
.Synopsis
dset varname expression [varname expression ...]
dval expression
.Purpose
Use the dset command to assign values to Draw numeric variables. The
expression may be any numeric expression including Draw numeric
variables, as any Draw command expecting a numeric expression there is
no need for $ or expr. The dset command can assign many variables, if
there is an odd number of argument the last variable will be assigned
a value of 0. If the variable does not exist it will be created.
Use dval to evaluate an expression containing Draw numeric variables
and return the result as a string, including a single variable. This
not useful for Draw commands as they usually interpret expression, but
this is useful for TCL basic commands expecting strings.
.Example
# z is set to 0
dset x 10 y 15 z
# no $ required for Draw commands
point p x y z
# puts prints a string
puts "x = [dval x], cos(x/pi) = [dval cos(x/pi)]"
.Warning
In TCL parentheses are not considered as special characters, so do not
forget to quote an expression if it contains spaces to avoid parsing
different words.
(a + b) is parsed as three words, "(a + b)" or (a+b) are correct.
.See also
set, unset
.Index
dset command
dval command
** lists
TCL uses lists a lot, a list is only a string containing elements
separated by spaces or tabs. If the string contains braces the braced
part count for one element, this allows to put lists in lists.
.Example
# a list of 3 strings
"a b c"
# a list of two strings the first is a list of 2
"{a b} c"
.Text
Many TCL commands return lists and the foreach command is an useful
way to loop on list elements.
** Control Structures
TCL allows repetition of an execution using control structures. The
control structures are implemented with commands and their syntax is
very similar to their C counterpart (if, while, switch,..). There are
two main differences with C. Do not use parentheses to enclose
conditions but braces, do not start the script on the next line or
your command will not have enough argument.
*** if
.Synopsis
if condition script [elseif script .... else script]
.Purpose
If evaluate the condition and evaluate the script if the condition is
true, and so on.
.Example
# note the position of the braces
# even if you find it ugly, you must do it this way
if {$x > 0} {
puts "positive"
} elseif {$x == 0} {
puts "null"
} else {
puts "negative"
}
.Index
if command
*** while, for, foreach
.Synopsis
while condition script
for init condition reinit script
foreach varname list script
.Purpose
The three loop structures are similar to their C or csh equivalent. It
is important to use braces to delay evaluation. foreach will assign
the elements of the list to the variable before evaluating the script.
.Example
# while example
dset x 1.1
while {[dval x] < 100} {
circle c 0 0 x
dset x x*x
}
# for example
# incr var d, incremente une variable de d (defaut 1)
for {set i 0} {$i < 10} {incr i} {
dset angle $i*pi/10
point p$i cos(angle0 sin(angle) 0
}
# foreach example
foreach object {crapo tomson lucas} {display $object}
.Index
while command
for command
foreach command
incr command
.See also
break, continue
*** break, continue
.Synopsis
break
continue
.Purpose
Within loops the, break and continue commands have the same effect
than in C. break interrupts the innermost loop and continue steps to
the next iteration.
.Example
# search the index for which t$i has value "secret"
for {set i 1} {$i <= 100} {incr i} {
if {[set t$i] == "secret"} break;
}
.Warning
.See also
.Index
break command
continue command
** Procedures
TCL can be extended by defining procedures using the proc command. The
proc commandsetup a context of local variables, binds arguments and
executes a TCL script.
The only confusing point in procedures is that variables are strictly
local, and as they are implicitly created when used it may be
difficult to detect the errors.
There are two means to access a variable outside the scope of the
current procedure. The global command may be used to declare a global
variable (a variable outside all procedures), the upvar command can be
used to access a variable in the scope of the caller. In TCL arguments
are always string values, the only way to pass Draw variables is to
pass by reference, i.e. passing the name of the variable and using
the upvar command as in the following examples.
TCL is not a strongly typed language, it is thus very difficult to
detect programming errors and debugging can be tedious, TCL procedures
are not designed for large scale software development but for testing
and simple command or interactive writing.
*** proc
.Synopsis
proc arglist script
.Purpose
Use the proc command to define a procedure, arglist is the list of
arguments, it must be an empty list if there are no arguments. 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.
The return command is used to give a return value to the procedure.
.Example
# simple procedure
proc hello {} {
puts "hello world"
}
# procedure with arguments and default values
proc distance {x1 y1 {x2 0} {y2 0}} {
set d [expr (x2-x1)*(x2-x1) + (y2-y1)*(y2-y1)]
return [expr sqrt(d)]
}
# we could not resist the classical one
proc fact n {
if {$n == 0} {return 1} else {
return [expr n*[fact [expr n -1]]]
}
}
.Warning
.See also
global, upvar
.Index
proc command
procedure
*** global, upvar
.Synopsis
global varname [varname ...]
upvar varname localname [varname localname ...]
.Purpose
Use the global command to access top level variables. Unlike in C
global variables are not visible in procedures.
Use the upvar command to give a local name to a variable in the caller
scope, this is when an argument is the name of a variable instead of a
value, this is call by reference and it is the only way to use Draw
variables as arguments.
Note in the following examples that the $ is always necessary to
access the arguments.
.Example
# convert degree to radian
# pi is a global variable
proc deg2rad (degree} {
global pi
return [dval pi*$degree/180.]
}
# create line with a point and an angle
proc linang {linename x y angle} {
upvar linename l
line l $x $y cos($angle) sin($angle)
}
.Warning
.See also
.Index
global command
upvar command
reference, call by
value, call by
*Basic commands
We will now describe all the commands defined in the basic Draw
package. Some of the commands are TCL commands, but most of them are
defined by Draw. Those commands are found in all Draw applications.
The commands are grouped in four sections
- general commandsused for Draw and TCL management
- variable commands used to manage Draw variables, storing, dumping ...
- graphic commands used to manage the graphic system : views ...
- variables display commands are used to manage the display of objects
**General commands
This section describes some useful commands, help to get information,
source to eval a script from a file, spy to capture the commands in a
file, cpulimit limit the process cpu time, wait to waste some time,
chrono to time commands.
***help
.Synopsis
help [command [helpstring group]]
.Purpose
Provides help or modifies the help information.
help, without arguments list all groups and the commands in each
group.
help command, provides information on a command or a set of commands,
command may be a shell-like regular expression. * is automatically
added at the end so that all completing commands match.
help command helpstring group, defines helpstring to be the help for
command, put the command in the group. The group defaults to "User
commands".
.Example
# Gives help on all command starting with a
help a
# defines help for the help command
help {help [command [helpstring group = "Use commands"]]} "DRAW Basic Commands"
.Index
help command
***source
.Synopsis
source file
.Purpose
Reads and evaluates commands from a file.
The exit command will terminate the file.
.See also
exit
.Index
source command
*** spy
.Synopsis
spy [file]
.Purpose
Save interactive commands in the file. If there is already spying the
current file is closed. spy without argument closes the current file
and stops spying.
If a command returns an error it is saved with a comment mark.
The file created by spy can be played with the source command.
.Example
# from now all commands will be saved in the file "session"
spy session
# the file "session" is closed and commands are not saved
spy
.See also
source
.Index
spy command
spying session
*** cpulimit
.Synopsis
cpulimit [nbseconds]
.Purpose
The process will be interrupted after nbseconds of cpu, this is useful
during tests to avoid infinite loops. cpulimit without arguments
removes all existing limits.
.Example
#limit cpu to one hour
cpulimit 3600
.Index
cpulimit command
*** wait
.Synopsis
wait [nbseconds]
.Purpose
Interrupt execution for nbseconds, the default value is ten (10)
seconds. This is usefull in a demo to give people time to admire a
nice picture.
.Example
# You have ten seconds ...
wait
.Index
wait command
*** chrono
.Synopsis
chrono [ name start/stop/reset/show]
.Purpose
The chrono command has two usages, without arguments it toggles the
timing of commands. When chronometers are activated each command will
be timed, i.e. the cpu and user time of the command will be printed.
With arguments the chrono command is used to manage chronometers, a
chronometer is a special kind of Draw variable used to measure
time. The following action can be performed on a chronometer.
- start : to run the chronometer.
- stop : to stop the chronometer.
- reset : to reset the chronometer to 0.
- show : to display the current time.
Chronometers are useful to print partial times as in the following
example, the timing of the command foreach will only give you the time
for all the process.
.Example
# use of a chronometer
chrono swatch
foreach face {f1 f2 f3 f4 f5} {
chrono swatch reset
processface $face
chrono swatch stop
puts "$face is processed"
chrono swatch show
}
.Index
chrono command
** Variables management commands
We describe now commands used to manage Draw variables. isdraw test if
a variable is a draw variable, directory list draw variables, whatis
gives the type of a variable, dump prints the content of a variable,
rename and copy change the content of variables, datadir, save and
restore are used to put the contents of variables in files.
*** isdraw, directory
.Synopsis
isdraw varname
directory [pattern]
.Purpose
Use isdraw to test if a variable is a draw variable, isdraw will
return 1 if there is a Draw value attached to the variable.
Use directory to return a list of all Draw global variables matching a
pattern, like the shell ls command.
.Example
set a 1
isdraw a
===> 0
dset a 1
isdraw a
===> 1
circle c 0 0 1 0 5
isdraw c
===> 1
# to destroy all Draw objects with name containing curve
foreach var [directory *curve*] {unset $var}
.See also
whatis
.Index
isdraw command
directory command
*** whatis, dump
.Synopsis
whatis varname [varname ...]
dump varname [varname ...]
.Purpose
Use whatis to get a short information about a Draw variable, the
result depends on the type of the object. Usually it is the name of
the type.
Use dump to get a long information about a Draw variable, the result
depends on the type of the object. Usually it is a full dump (may be
rather long for geometry or topology).
.Example
dset x 3
whatis x
==> x is a numeric
dump x
==> *********** Dump of x *************
==> 3
.Warning
The behavior of whatis on other variables (not Draw) is not excellent.
.Index
whatis command
dump command
*** rename, copy
.Synopsis
rename varname tovarname [varname tovarname ...]
copy varname tovarname [varname tovarname ...]
.Purpose
Use rename to change the name of a Draw variable, the original
variable does not exist any more, note that the content is not
modified, only the name is changed.
Use copy to make a new variable with a copy of the content of an
existing variable. The exact behavior of copy is type dependent, in
some cases the content may still be shared (see the topological
variables for example).
.Example
circle c1 0 0 1 0 5
rename c1 c2
# curves are copied, c2 will not be modified
copy c2 c3
2dtranslate c3 10 0
.Index
rename command
copy command
*** datadir, save, restore
.Synopsis
datadir [data-path]
save name [filename]
restore filename [name]
.Purpose
Use save and restore to transfert the content of Draw variables to
files, the files are located in the data directory.
Use save to write 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.
Use restore to read the content of a file in the data directory in a
local variable, by default the name of the variable if the name of the
file, to give a different name use a second argument.
The exact content of the file is type dependent, they are usually
ASCII files, so they are architecture independnts.
.Example
# note how TCL access shell environment variables
# using $env()
datadir $env(WBCONTAINER)/data/default
datadir
==> /adv_20/BAG/data/default
box b 10 20 30
save b theBox
# when TCL does not find a command it tries a shell command
ls [datadir]
==> theBox
restore theBox
datadir ./bugs
datadir
==> /adv_20/BAG/data/bugs
# now the box is saved in both the default and data directories
save theBox
.Index
datadir command
save command
restore command
environment variables
**Graphic Commands
Graphic commands are used to manage the Draw graphic system. Draw
provides a 2d and a 3d viewer with up to 30 views, views are numbered
and the index of the view is visible in the title of the
window. Objects are displayed in all 2d views or in all 3d views
depending on their type but never on both.
The view and delete commands are the basic view management commands,
but useful procedures for screen layout are defined, axo, left, top.
Commands are provided to modify the view parameters, fit, zoom, pu,
pd, pl, pr to pan, u,d,l,r to rotate. fu, fd to change the focal.
The view parameters commands process all views or only one view, in
this case the index of the view must be given as the first argument. A
command control 3d views or 2d views, the 2d views version of the
command starts with 2d, for example zoom and 2dzoom.
Colors are numbered from 1 to 15, the aspect can be changed with the
color command.
To put some text on the screen use the dtext command.
Postscript drawings can be made with the hardcopy command and xwd
files with the xwd command.
To use the mouse you can use the pick and the wclick commands.
*** view, delete
.Synopsis
view index type [X Y W H]
delete [index]
.Purpose
view is the basic view creation command. It creates a new view with
the given index, if a view already exits with this index it is
destroyed. The view is created with default parameters and X Y W H are
the position and dimensions on the window on the screen, they are X
window system coordinates in pixel, 0,0 being the upper left corner of
the screen. Default values are 0, 0, 500, 500 which is not very
convenient.
Usually it is far simpler to use the procedures as axo, top, left to
create views.
delete destroy a view, if no index is given all views are destroyed.
The type is a four letter upper case code among the followings
- AXON : Axonometric view
- PERS : Perspective view
- +X+Y : View on the two axes (i.e. a top view), other codes are
-X+Y +Y-Z etc...
- -2D- : 2d view
The index, the type, the current zoom are displayed in the window
title.
.Example
# this is the content of the mu4 procedure
proc mu4 {} {
delete
view 1 +X+Z 320 20 400 400
view 2 +X+Y 320 450 400 400
view 3 +Y+Z 728 20 400 400
view 4 AXON 728 450 400 400
}
.See also
axo, pers, top, bottom, left, right, front, back, mu4
v2d, av2d, smallview
.Index
view command
delete command
window
*** axo, pers, top, ...
.Synopsis
axo
pers
...
smallview type
.Purpose
All these commands are procedures used to define standard screen
layout, they delete all existing views and create some views. The
layout usually abides by the european convention, i.e. the top view is
under the front view.
- axo : One big axonometric view
- pers : One big perspective view
- top, bottom, left, right, front, back : One big axis view
- mu4 : Four views layout with front, left, top and axo
- v2d : One big 2d view
- av2d : Two views, one 2d and one axo
The smallview command creates a view at the right bottom of the screen
with the given type. See the view command for the type list.
.Example
# just try them !!
# here we give the body of smallview
proc smallview {{v AXON}} {
delete
view 1 $v 728 450 400 400
}
.See also
view, delete
.Index
axo command
pers command
top command
top command
bottom command
left command
right command
front command
back command
mu4 command
v2d command
av2d command
smallview command
screen layout
layout of views
*** mu, md, 2dmu, 2dmd, zoom, 2dzoom, wzoom
.Synopsis
mu [index]
2dmu [index]
zoom [index] value
wzoom
.Purpose
Use mu (magnify up) to increase the zoom in a view or in all views by
a factor of 10%. md (magnify down) decrease the zoom by the inverse
factor. 2dmu and 2dmd do the same on one or all 2d views.
Use zoom or 2dzoom to set the zoom factor to a given value. The
current zoom is always displayed in the window title.
Use wzoom (window zoom) to select with the mouse the area you want to
zoom in a view. You will be prompted for two graphic selections in the
same view and the rectangle you defined will be set to the whole
window of the view.
.Example
# set a zoom of 2.5 on all 2d views
zoom 2.5
# magnify on
mu 1
.See also
fit, 2dfit
.Index
mu command
md command
2dmu command
2dmd command
zoom command
2dzoom command
wzoom command
*** pu, pd, pl, pr, 2dpu, 2dpd, 2dpl, 2dpr
.Synopsis
pu [index]
pd [index]
.Purpose
Use the pu, .. commands to pan the view, pu and pd pan vertically up
and down, pl and pr pan horizontally left and right. The views are
panned by a quantity of 40 pixels.
.Example
# pan up the first view
pu 1
.See also
fit, 2dfit
.Index
pu command
pd command
pl command
pr command
2dpu command
2dpd command
2dpl command
2dpr command
*** fit, 2dfit
.Synopsis
fit [index]
2dfit [index]
.Purpose
Use the fit command to compute automatically a best zoom and panning on
the content of the view. The content of the view will be centered and
fit the whole window.
When fitting all views a unique zoom is computed for all the views, so
each view is not best fitted but all views are on the same scale. To
compute a best fit on all views fit them one by one.
.Example
# fit only view 1
fit 1
# fit all 2d views
2dfit
.Warning
.See also
zoom, mu, pu
.Index
fit command
2dfit command
*** u, d, l, r
.Synopsis
u [index]
d [index]
l [index]
r [index]
.Purpose
Rotate the view in the up, down, left or right direction by five
degrees. This is only for axonometric and perspective views.
.Example
# rotate the view up
u
.Index
u command
d command
l command
r command
*** focal, fu, fd
.Synopsis
focal [index] value
fu [index]
fd [index]
.Purpose
Use the focal method to change the focal distance for perspective
views. The focal is the distance form the eye to the view point. A low
focal increases the perspective effect, a high focal looks like an
axonometric. The default value is 500.
Use fu and fd to increase or decrease the focal value by 10%. fd makes
the eye closer to the object.
.Example
# create a perspective and look closer
pers
repeat 10 fd
.Warning
A negative or null focal is not a bright idea !!
.See also
pers
.Index
focal command
fu command
fd command
*** color
.Synopsis
color index name
.Purpose
Set the color to a value, index is the index of the color between 0
and 15, name is a X window color name. The list can be found in the
file rgb.txt in the X library directory.
The default value 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
.Example
# change the hue of the blue
color 3 "navy blue"
.Warning
The color change will be visible on the next redraw of the views, for
example after fit or mu.
.Index
color command
*** dtext
.Synopsis
dtext [x y [z]] string
.Purpose
Display 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 2d views at this position, with 3 coordinates the text
is created in 3d views. The coordinates are real space coordinates.
.Example
# mark the origins
dtext 0 0 "This is the 2d origin"
dtext 0 0 0 "This is the 3d origin"
# write on the views
dtext "You just clicked here"
.Index
dtext command
text display
*** hardcopy, hcolor, xwd
.Synopsis
hardcopy [index]
hcolor index width gray
xwd [index] filename
.Purpose
The hardcopy command creates a postcript file named post.ps in the
current directory. This file contains the postscript description of
the view index, or of all the views.
The hcolor command 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, the default value is 1,
gray is a grey level from 0 = black to 1 = white, the default value is
0. All colors are bound to the default values at the beginning.
The xwd command creates an X window xwd file from a view, by default
index is 1. To visualize an xwd file you can use the unix command
xwud.
.Example
# all blue lines (color 3)
# will be half-width and grey
hcolor 3 0.5
# make a postscript file and print it
hardcopy
lpr post.ps
# make an xwd file and display it
xwd theview
xwud -in theview
.Warning
There are bugs when using hardcopy without index with more than one
view.
You need a postscript printer or your harcopy will not look great.
.See also
color
.Index
hardcopy command
hcolor command
xwd command
postscript
dump of image
xwud
*** wclick, pick
.Synopsis
wclick
pick index X Y Z b [nowait]
.Purpose
Use the wclick command to wait until a mouse button is clicked, the
message "just click" is displayed. This is useful to let people
admire a drawing until they are fed up with it.
Use the pick command to get a graphical input, the arguments must be
names for variables where the results are stored.
- index : will be the index of the view where the input was made
- X,Y,Z : Are 3d coordinates in real world
- b : b is the mouse button 1,2 or 3
When there is an extra argument its value is not used and the command
do not wait for a button click, the value of b may then be 0 if there
was no click. This option is useful for tracking the pointer.
Note that the results are stored in Draw numeric variables.
.Example
# make a circle at mouse location
pick index x y z b
circle c x y z 0 0 1 1 0 0 0 30
# make a dynamic circle at mouse location
# stop when a button is clicked
# (see the repaint command)
dset b 0
while {[dval b] == 0} {
pick index x y z b nowait
circle c x y z 0 0 1 1 0 0 0 30
repaint
}
.See also
repaint
.Index
wclick command
pick command
** Variables display commands
Many Draw objects can be displayed, for example curves, surfaces,
shapes. Draw provides commands to manage the display of the objects.
display, donly are used to display objects, erase, clear, 2dclear to
erase them. The autodisplay command is used to control if variables
are displayed as soon as created.
The variable name "." (dot) has a special status within Draw, any draw
command expecting a Draw object as argument can be passed a dot. The
meaning of the dot is the following.
If the dot is an input argument a graphical selection will be made,
instead of getting the object from a variable. Draw will ask you to
select an object on a view.
If the dot is an output argument, an unnamed object will be created,
of course this will make sense only for graphical objects, if you
create an unnamed number you will not be able to access it. This
feature is useful when you want to create objects for display only.
If you do not see what you expected while executing loops or sourcing
files you may want to consider the repaint and dflush commands.
.Example
# use dot to dump an object on the screen
dump .
# display points on a curve c
# with dot no variables are created
for {set i 0} {$i <= 10} {incr i} {
cvalue c $i/10 x y z
point . x y z
}
# point p x y z
# would have displayed only one point
# because the precedent content of a variable is erased
# point p$i x y z
# is an other solution, creating variables
# p0, p1, p2, ....
# give a name to a graphic object
rename . x
.Index
dot argument
selection, graphical
unnamed objects
*** autodisplay
.Synopsis
autodisplay [0/1]
.Purpose
By default Draw displays automatically any graphical object as soon as
it is created. This behavior known as autodisplay can be removed with
this command. Without arguments, autodisplay toggles the autodisplay
mode, the command always returns the current mode.
When autodisplay is off, using the dot return argument is ineffective.
.Example
# c is dislayed
circle c 0 0 1 0 5
# toggle the mode
autodisplay
==> 0
circle c 0 0 1 0 5
# c is erased, but not displayed
display c
.Warning
.See also
display
.Index
autodisplay command
*** display, donly
.Synopsis
display varname [varname ...]
donly varname [varname ...]
.Purpose
Use display to make objects visible. Use donly to make objects visible
and erase all other objects, it stands for "display only".
As you may have guessed "display ." is quite useless, "donly ." is
very useful to extract one object from a messy screen.
.Example
# to see everybody
foreach var [directory] {display $var}
# to select two objects and erase the others
donly . .
.See also
erase
.Index
display command
donly command
*** erase, clear, 2dclear
.Synopsis
erase [varname varname ...]
clear
2dclear
.Purpose
Use erase to erase objects from all the views, erase without arguments
erase everything in 3d and 2d. To erase unnamed objects use "erase .".
Use clear to erase only 3d objects and 2dclear for 2d objects, erase
without arguments is the same thing as "clear; 2dclear".
.Example
# erase all guys with name starting by c_
foreach var [directory c_*] {erase $var}
# clear 2d views
2d clear
.See also
display
.Index
erase command
clear command
2dclear command
*** repaint, dflush
.Synopsis
repaint
dflush
.Purpose
The repaint command enforces pending repaint of the views. The dflush
command flushes the graphic buffers. These commands are useful within
loops or in scripts.
A new object is immediatly displayed, but when an object is modified
or erased the whole view must be repainted. To avoid doing it too many
times, Draw only sets a flag and delays the repaint to the end of the
command when the new prompt is issued. Within a script you may want to
display immediatly the result of a modification, the repaint command
will repaint the views if the flag is raised and clear the flag.
Graphical operations are buffered by Draw (and also by the X system),
usually the buffer is flushed at the end of a command and before
graphical selection. If you want to flush the buffer within a script
use the dflush command.
.Example
# See the example with the pick command
.See also
pick
.Index
repaint command
dflush command
*Geometry commands
Draw provides a set of commands to test geometry libraries. Geometry
libraries are provided with the GEOMETRY UL. These commands are found
in the TGEOMETRY executable, or in any Draw executable as long as it
includes the GeometryTest commands.
The geometry with Draw includes new types of variables
- The 2d and 3d point will be referred to as Draw points.
- The 2d curve, it is exactly the same as the Geom2d_Curve class. Will
be referred to as Draw 2d curve.
- The 3d curve and the surface, they are exactly the Geom_Curve and
Geom_Surface classes. Will be referred to as Draw curve and Draw
surface.
Please refer to the Geom and Geom2d packages to learn more about
CAS.CADE geometry.
Draw geometric variables never share their data, the copy command will
always make a complete copy of the content of the variable.
The following sections cover the topics
- crves creation, the different types of curves and how to create
them.
- surfaces creation, the different types of surfaces and how to create
them.
- curves and surfaces modification, commands to modify the definition
of curves and surfaces, a majority is for bezier and bspline.
- geometric transformations, i.e. translation, rotation, mirror, ...
- analysis of curves and surfaces, commands to compute points,
derivatives, curvatures.
- intersections of surfaces and curves.
- approximations of set of points to create curves and surfaces.
- construction of 2d circles and lines by constraints like tangency.
- the last section describes commands which control the display of
curves and surfaces.
When possible the commands are general, i.e. they process 2d curves 3d
curves and surfaces, for example the circle command may create a 2d or
a 3d circle depending on the number of arguments and the translate
command will process points, curves or surfaces depending on the type
of the argument. So when you do not find a command in a section you
may look in another section, for example the trim command is described
in the surface section but it can be used with curves.
**Creation of curves
To create points use the point command, to create curves use the
command corresponding to the type. The types of curves are :
- Analytical curves : line, circle, ellipse, parabola, hyperbola.
- Polar curves : beziercurve, bsplinecurve, bspline, bspline2d
- Trimmed curves and Offset curves made from other curves with the
trim and offset command. Note that the trim and offset command are
described in the surface section, as they work on curves or surfaces.
- Bspline curves (NURBS) can be created from other curves using the
convert command (see the surface creation).
- Curves can be created from surface isoparametric lines with the uiso
and viso commands.
- 3d curves can be created from 2d curves and the contrary using the
to3d and to2d commands. The project command more generally computes
the 2d curve on a surface.
Curves are displayed with an arrow to indicate the last parameter.
*** point
.Synopsis
point name x y [z]
.Purpose
Use the point command to create a 2d or 3d point, depending on the
number of arguments.
.Example
# 2d point
point p1 1 2
# 3d point
point p2 10 20 -5
.Index
point command
*** line
.Synopsis
line name x y [z] dx dy [dz]
.Purpose
Use the line command to create a 3d or 2d line. x y z are the
coordinates of the origin of the line, dx, dy, dz is the direction
vector. Of course the dimension must be consistent, either line l x y
dx dy in 2d or line l x y z dx dy dz in 3d.
A line is parametrised by the length starting form the origin along
the direction vector, the direction vector will be normalised, it must
not be null. The lines are infinite, but not the drawing.
.Example
# a 2d line at 45 degrees of the X axis
line l2d 0 0 1 1
# a 3d line trough the point 10 0 0 parallel to Z
line l 10 0 0 0 0 1
.See also
.Index
line command
*** circle
.Synopsis
circle name x y [z [dx dy dz]] [ux uy [uz]] radius
.Purpose
Use this command to create a 2d or a 3d circle, in 2d x,y are the
coordinates of the center and ux, uy is the vector in the direction of
the origin of the parameters, by default this direction is (1,0) the X
axis. Use another vector to change the origin of parameters.
In 3d x,y,z are the coordinates of the center, dx,dy,dz is the normal
vector defining the plane through the center where the circle is, this
vector is normalised and must not be null, by default this vector is
(0,0,1) i.e. the Z axis. ux,uy,uz is the direction of the origin, if
it is not given a default direction will be computed, this vector must
not be null or parallel to dx,dy,dz.
The circle is parametrised by the angle in [0,2*pi] starting from the
origin. Note that the specification of origin direction and plane is
the same for all analytical curves and surfaces.
.Example
# A 2d circle of radius 5 centered at 10,-2
circle c1 10 -2 5
# an other 2d circle with a user defined origin
# the point of parameter 0 on this circle will be
# 1+sqrt(2),1+sqrt(2)
circle c2 1 1 1 1 2
# a 3d circle, center 10 20 -5, axis Z, radius 17
circle c3 10 20 -5 17
# same 3d circle with axis Y
circle c4 10 20 -5 0 1 0 17
# full 3d circle, axis X, origin on Z
circle c5 10 20 -5 1 0 0 0 0 1 17
.Index
circle command
*** ellipse
.Synopsis
ellipse name x y [z [dx dy dz]] [ux uy [uz]] firstradius secondradius
.Purpose
Create a 2d or 3d ellipse, the first arguments are the same as for the
circle to define the center and the system of axis. The ellipse will
have firstradius on its X axis and secondradius on its Y axis. The
ellipse is parametrised by [0,2*pi] starting from the X axis going to
the Y axis. Note that this is not an angle, the local parametrisation
of the ellipse is (firstradius * cos(t), secondradius * sin(t))
.Example
# default 2d ellipse
ellipse e1 10 5 20 10
# 2d ellipse at angle 60 degree
ellipse e2 0 0 1 2 30 5
# 3d ellipse, in the XY plane
ellipse e3 0 0 0 25 5
# 3d ellipse in the X,Z plane with axis 1, 0 ,1
ellipse e4 0 0 0 0 1 0 1 0 1 25 5
.See also
circle
.Index
ellipse command
*** hyperbola
.Synopsis
hyperbola name x y [z [dx dy dz]] [ux uy [uz]] firstradius secondradius
.Purpose
Create a 2d or 3d ellipse, the first arguments are the same as for the
circle to define the center and the system of axis. The hyperbola will
have firstradius on its X axis and secondradius on its Y axis. This
values are not real radius but the coefficients of the parametric
equation, where the parameters run for -infinite to +infinite
(firstradius * ch(t), secondradius * sh(t)). Note that the hyperbola
has only one branch, the one in the X direction.
.Example
# default 2d hyperbola, with asymptotes 1,1 -1,1
hyperbola h1 0 0 30 30
# 2d hyperbola at angle 60 degree
hyperbola h2 0 0 1 2 20 20
# 3d hyperbola, in the XY plane
hyperbola h3 0 0 0 50 50
.Warning
.See also
circle
.Index
hyperbola command
*** parabola
.Synopsis
parabola name x y [z [dx dy dz]] [ux uy [uz]] focal
.Purpose
Create a 2d or 3d parabola in the axis-system defined by the first
arguments (see the circle command), the origin is the apex of the
parabola and focal is the coefficient in the parametric equation : (
x= t*t / 4*focal, y = t).
.Example
# 2d parabola
parabola p1 0 0 50
# 2d parabola with convexity +Y
parabola p2 0 0 0 1 50
# 3d parabola in the Y-Z plane, convexity +Z
parabola p3 0 0 0 1 0 0 0 0 1 50
.Warning
.See also
circle
.Index
parabola command
*** beziercurve, 2dbeziercurve
.Synopsis
beziercurve name nbpoles x1 y1 z1 [w1] x2 y2 z2 [w2] ....
2dbeziercurve name nbpoles x1 y1 z1 [w1] x2 y2 z2 [w2] ....
.Purpose
Use the beziercurve command to create a 3d curve, give the number of
poles then the coordinates of the poles, the degree will be
nbpoles-1. You can give weights with the poles to create a rational
curve, you must give weights for all poles or for none.
Use 2dbeziercurve to create a 2d curve with the same conditions as
above.
.Example
# a rational 2d bezier curve (arc of circle)
2dbeziercurve ci 3 0 0 1 10 0 sqrt(2.)/2. 10 10 1
# a 3d bezier curve, not rational
beziercurve cc 4 0 0 0 10 0 0 10 0 10 10 10 10
.Index
beziercurve command
2dbeziercurve command
*** bsplinecurve, 2dbsplinecurve, pbsplinecurve, 2dpbsplinecurve
.Synopsis
bsplinecurve name degree nbknots k1 m1 ... x1 y1 z1 w1 ...
2dbsplinecurve name degree nbknots k1 m1 ... x1 y1 w1 ...
pbsplinecurve name degree nbknots k1 m1 ... x1 y1 z1 w1 ...
2dpbsplinecurve name degree nbknots k1 m1 ... x1 y1 w1 ...
.Purpose
Use the bsplinecurve commands to create 3d or 2d NURBS curves, the
pbsplinecurve and 2dpbsplinecurve commands create periodic
curves. Degree is the degree for the curves, nbknots the number of
knots, then you must give the knots with their multiplicities, the
knots must be non decreasing, if succcessive knots are equal the
multiplicities will be added, multiplicities must be lower or equal to
the degree, on non periodic curves the first and last multiplicities
can be equal to degree+1, this is even recommended if you like the
curve to go from the first pole to the last pole. On a periodic curve
the first and last multiplicity must be equal.
The poles must be given with their weights, use weights of 1 for a non
rational curve, the number of poles must be
For a non periodic curve, Sum of multiplicities - degree + 1
For a periodic curve, Sum of multiplicities - last multiplicity
.Example
# a 2d periodic circle (parameter from 0 to 2*pi !!)
dset h sqrt(3)/2
2dpbsplinecurve c 2 \
4 0 2 pi/1.5 2 pi/0.75 2 2*pi 2 \
0 -h/3 1 \
0.5 -h/3 0.5 \
0.25 h/6 1 \
0 2*h/3 0.5 \
-0.25 h/6 1 \
-0.5 -h/3 0.5 \
0 -h/3 1
.Warning
.See also
.Index
bsplinecurve command
2dbsplinecurve command
pbsplinecurve command
2dpbsplinecurve command
periodic bsplines
*** bspline, bspline2d
.Synopsis
bspline name <digitizes ...> <mouse bouton 2>
bspline2d name <digitizes ...> <mouse bouton 2>
.Purpose
Use the bspline commands to create 3d or 2d NURBS curves by
digitizing on the screen. The mouse bouton 2 ends the digitizing
scheme and constructs a degree 3 curve that is scaled so that it fits
in box of length 1. The graphic screen is updated when the mouse
button 2 is pressed.
.Example
#
# a random bspline curve
#
bspline mycurve
.Warning
.See also
.Index
bsplinecurve command
2dbsplinecurve command
pbsplinecurve command
2dpbsplinecurve command
periodic bsplines
*** uiso, viso
.Synopsis
uiso name surface u
viso name surface u
.Purpose
Use these commands to create a U or V isoparametric curve from a surface.
.Example
# create a cylinder and extract to iso curves
# see the cylinder command
cylinder c 10
uiso c1 c pi/6
viso c2 c 5
.Warning
It is not possible to extract isoparametric curves on offset surfaces.
.See also
.Index
uiso command
viso command
isoparametric curves
*** to2d, to3d
.Synopsis
to3d name curve2d [plane]
to2d name curve3d [plane]
.Purpose
to3d and to2d commands are used to create 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 OXY plane. to3d always gives a correct result, but to2d may
surprise you as it is not a projection. It is always correct if the
curve is planar and parallel to the plane of projection, the points
defining the curve are projected onto the plane but a circle will
remain a circle for example, it will not be changed to an ellipse.
.Example
# the following commands
circle c 0 0 5
plane p -2 1 0 1 2 3
to3d c c p
# will create the same circle as
circle c -2 1 0 1 2 3 5
.Warning
.See also
project
.Index
to2d command
to3d command
*** project
.Synopsis
project name curve3d surface
.Purpose
Computes the 2d curve in the parametric space of the surface
correponding to the 3d curve. This can be used only on analytical
surface and for curves lying on the surface.
.Example
# intersect a cylinder and a plane
# and project the resulting ellipse on the cylinder
# this will create a 2d sinusoid-like bspline
cylinder c 5
plane p 0 0 0 0 1 1
intersect i c p
project i2d i c
.Warning
.See also
.Index
project command
**Creation of surfaces
To create surfaces use also the type, types of surfaces are
- Analytical surface : plane, cylinder, cone, sphere, torus.
- Polar surfaces : beziersurf, bsplinesurf
- Trimmed and Offset surface, using the commands trim, trimu, trimv,
offset.
- Surface of Revolution and Extrusion, created from curves with the
revsurf and extsurf commands.
- NURBS surface can be constructed from other surfaces using the
convert command.
Surfaces are displayed with isoparametric lines, a small parametric
line is displayed at 1/10 of U with a length 1/10 of V to show the
parametrisation.
*** plane
.Synopsis
plane name [x y z [dx dy dz [ux uy uz]]]
.Purpose
Uses this command to create an infinite plane, a plane is the same
thing as a 3d coordinate system, x,y,z is the origin, dx, dy, dz is
the Z direction and ux, uy, uz is the X direction. The plane is
perpendicular to Z and X is the U parameter. dx,dy,dz and ux,uy,uz
must not be null and not colinear. ux,uy,uz will be modified to be
orthogonal to dx,dy,dz. There are default values for the coordinate
system, if no arguments are given the default is the global system
(0,0,0), (0,0,1), (1,0,0), if only the origin is given the axis are
the default ones (0,0,1), (1,0,0), if the origin and the Z axis are
given the X axis is generated perpendicular to the Z axis. Note that
this definition will be used for all analytical surfaces.
.Example
# a plane through the point 10,0,0 perpendicular to X
# with U direction on Y
plane p1 10 0 0 1 0 0 0 1 0
# an horixontal plane with origin 10, -20, -5
plane p2 10 -20 -5
.Index
plane command
coordinate system
*** cylinder
.Synopsis
cylinder name [x y z [dx dy dz [ux uy uz]]] radius
.Purpose
A cylinder is defined by a coordinate system, just like a plane, and a
radius. The cylinder is an infinite cylinder with the Z axis as axis,
the U parameter is the angle starting from X going to the Y
direction. The V coordinate is the length along the Z axis starting
from the origin.
.Example
# a cylinder on the default Z axis, radius 10
cylinder c1 10
# a cylinder, also with Z axis but with origin 5, 10, -3
cylinder c2 5 10 -3 10
# a cylinder through the origin
# with longitude pi/3 and latitude pi/4 (euler angles)
dset lo pi/3. la pi/4.
cylinder c3 0 0 0 cos(la)*cos(lo) cos(la)*sin(lo) sin(la) 10
.See also
plane
.Index
cylinder command
longitude and latitude
euler angles
*** cone
.Synopsis
cone name [x y z [dx dy dz [ux uy uz]]] semi-angle radius
.Purpose
Creates a cone in the coordinate system, the radius is the radius of
the section of the cone in the XY plane, the semi-angle is the angle
in degree of the cone with the axis, it should be between -90 and 90,
both and 0 excluded. The vertex is on the Z axis in the negative
direction at a distance radius/tan(semi-angle) from the origin. If the
radius is 0 the vertex is the origin.
To parametrise the cone, U is the angle starting from 0, in the Y
direction, V is the length along the the side starting from the
origin, in the local system V = Z / cos(semi-angle).
The definition of the cone may seem redundant but it is very useful to
disconnect the origin of the V parameter and the apex, mainly for very
small angle when the cone is like a cylinder, the useful part of the
surface may be very far from the apex and would require very large
parameter values.
.Example
# a cone a 45 degree at the origin on Z
cone c1 45 0
# a cone on axis Z with radius r1 at z1 and r2 at z2
cone c2 0 0 z1 180.*atan2(r2-r1,z2-z1)/pi r1
.Warning
The angle is in degree.
.See also
plane
.Index
cone command
*** sphere
.Synopsis
sphere name [x y z [dx dy dz [ux uy uz]]] radius
.Purpose
Creates a sphere in a local coordinate system defined like for the
lane command. The sphere is centered at the origin with the given
radius. To parametrise the sphere, U is the angle from X to Y, U is
between o and 2*pi, V is the angle in the half-circle at angle U in
the plane containing the Z axis, V is between -pi/2 and pi/2. The
poles are the points Z = +/- radius, their parameters are U,+/-pi/2
for any U in 0,2*pi.
.Example
# a sphere at the origin
sphere s1 10
# a sphere at 10 10 10, with poles on the axis 1,1,1
sphere s2 10 10 10 1 1 1 10
.Warning
.See also
plane
.Index
sphere command
*** torus
.Synopsis
torus name [x y z [dx dy dz [ux uy uz]]] major minor
.Purpose
Creates a torus in the local coordinate system with the given major
and minor radius, Z is the axis for the major radius. The major radius
can be lower than the minor one.
To parametrize 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.
.Example
# a torus at the origin
torus t1 20 5
# a torus in another system
torus t2 10 5 -2 2 1 0 20 5
.See also
plane
.Index
torus command
*** beziersurf
.Synopsis
beziersurf name nbupoles nbvolpes x y z [w] ....
.Purpose
Use this command to create a bezier surface, rational or not. You must
first give the numbers of poles in the U and V directions, degrees
will be nbupoles-1 and nbvpoles-1. Then give the nbupoles*nbvpoles
poles, starting with U. i.e. P(1,1) P(2,1) ,... P(nbupoles,1) P(1,2)
,... P(nbupoles,nbvpoles). You can omit weights, but if you give one
weight you must give them all.
.Example
# a non-rational degree 2,3 surface
beziersurf s 3 4 \
0 0 0 10 0 5 20 0 0 \
0 10 2 10 10 3 20 10 2 \
0 20 10 10 20 20 20 20 10 \
0 30 0 10 30 0 20 30 0
.See also
beziercurve
.Index
beziersurf command
*** bsplinesurf, upbsplinesurf, vpbsplinesurf, uvpbsplinesurf
.Synopsis
bsplinesurf name udegree nbuknots uknot umult ... nbvknot vknot vmult ... x y z w ...
upbsplinesurf ...
vpbsplinesurf ...
uvpbsplinesurf ...
.Purpose
Use the bsplinesurf command to create NURBS surfaces, the
upbsplinesurf command to create a NURBS surface periodic in U,
vpbsplinesurf periodic in V, and uvpbsplinesurf periodic in UV.
The description is similar to the bsplinecurve command, first you give
the degree in U and the knots in U with their multiplicities, then the
same in V. The poles follow, the number of poles is the product of the
number in U and the number in V, see bsplinecurve to compute the
number of poles, the poles are first given in U as in the beziersurf
command. Note that you must give the weights, use 1 for rational
surface.
.Example
# create a bspline surface of degree 1 2
# with two knots in U and three in V
bsplinesurf s \
1 2 0 2 1 2 \
2 3 0 3 1 1 2 3 \
0 0 0 1 10 0 5 1 \
0 10 2 1 10 10 3 1 \
0 20 10 1 10 20 20 1 \
0 30 0 1 10 30 0 1
.Warning
The weights are mandatory.
.See also
bsplinecurve
beziersurf
convert
.Index
bsplinesurf command
upbsplinesurf command
vpbsplinesurf command
uvpbsplinesurf command
periodic bsplines
*** trim, trimu, trimv
.Synopsis
trim newname name [u1 u2 [v1 v2]]
trimu newname name [u1 u2]
trimv newname name [v1 v2]
.Purpose
The trim commands are used to create trimmed curves or trimmed
surfaces. Note that trimmed curves and surfaces are classes of the
Geom packages. The trim command creates a new trimmed curve from a
curve, or a new trimmed surface in u and v from a surface. trimu
creates a u trimmed surface, and trimv a vtrimmed surface. If no
parameters are given, the command recreates the basis curve and
surface if the argument is trimmed. The curves can be either 2d or 3d
curves. If the trimming parameters are decreasing, direction is
reversed if the curve or surface is not periodic.
Note that a trimmed curve or surface contains a copy of the basis
geometry, so modifying it will not modify the trimmed geometry. Note
also that trimmig a trimmed geometry will not create multiple levels
of trimming, the basic geometry will be used.
.Example
# create a 3d circle
circle c 0 0 0 10
# trim it, use the same variable, the original is destroyed
trim c c 0 pi/2
# original can be recovered !
trim orc c
# trim again
trim c c pi/4 pi/2
# original is not the trimmed curve but the basis
trim orc c
# as the circle is periodic the two following commands are identical
trim cc c pi/2 0
trim cc c pi/2 2*pi
# trim an infinite cylinder
cylinder cy 10
trimv cy cy 0 50
.Warning
.See also
reverse
.Index
trim command
trimu command
trimv command
*** offset
.Synopsis
offset newname name distance [dx dy dz]
.Purpose
Use the offset command to create offset curve or surface from a basis
curve or surface at a given distance, offset curves and surfaces are
classes from the Geom package. The curve can be a 2d or a 3d curve,
for a 3d curve you must give also a vector dx,dy,dz to compute the
offsets, usually for a planar curve this vector is the normal to the
plane containing the curve.
The offset curve or surface copies the basis geometry which can be
modified later.
.Example
# graphical demonstration that the outline of a torus
# is the offset of an ellipse
# Please do this in a top view
smallview +X+Y
dset angle pi/6
torus t 0 0 0 0 cos(angle) sin(angle) 50 20
fit
ellipse e 0 0 0 50 50*sin(angle)
# note that the distance can be negative
offset l1 e 20 0 0 1
offset l2 e -20 0 0 1
# Admire...
.Index
offset command
*** revsurf
.Synopsis
revsurf newname curvename x y z dx dy dz
.Purpose
This command creates a surface of revolution from a 3d curve, this is
the class SurfaceOfRevolution from Geom, x,y,z and dx,dy,dz defines
the axis of revolution. To parametrize a surface of revolution U, is
the angle around the axis, starting from the curve, V is the parameter
of the curve.
.Example
# another way to make a torus like surface
circle c 50 0 0 20
revsurf s c 0 0 0 0 1 0
.Warning
.See also
.Index
revsurf command
*** extsurf
.Synopsis
extsurf newname curvename dx dy dz
.Purpose
Use the extsurf command to create a surface of linear extrusion from a
3d curve. dx,dy,dz is the direction of extrusion. To parametrize a
surface of extrusion, U is the parameter on the curve, V is the length
along the direction of extrusion.
.Example
# an elliptic cylinder
ellipse e 0 0 0 10 5
extsurf s e 0 0 1
# to make it finite
trimv s s 0 10
.Index
extsurf command
*** convert
.Synopsis
convert newname name
.Purpose
The convert command creates a NURBS 2d curve, 3d curve or surface from
any 2d curve, curve, and surface. essentially conics curves and
quadric surfaces are turned to NURBS, it does not process offsets.
.Example
# turn a 2d arc of circle into a 2d nurbs
circle c 0 0 5
trim c c 0 pi/3
convert c c
# an easy way to make a planar bspline surface
plane p
trim p p -1 1 -1 1
convert p p
.Warning
Offset curves and surfaces are not processed.
.See also
bsplinecurve, bsplinesurf
.Index
convert command
**Modifications of Curves and surfaces
Draw provides commands to modify curves and surfaces, some of them are
general, others are restricted to bezier or bsplines.
General modification are
- Reversing the parametrisation : reverse, ureverse, vreverse.
Modifications for bezier and bspline are
- Exchanging U and V on a surface : exchuv
- segmentation, segment, segsur
- Increasing the degree, incdeg, incudeg, incvdeg
- moving poles, cmovep, movep, movecolp, moverowp
- moving a point on a curve or a surface, cmovepoint, movepoint
Modifications for bezier are
- adding and removing poles, insertpole, rempole, remcolpole, remrowpole
Modifications for bspline are
- inserting and removing knots, insertknot, remknot, insertuknot,
remuknot, insetvknot, remvknot
- modifying periodic curves and surfaces, setperiodic, setnotperiodic,
setorigin, setuperiodic, setunotperiodic, setuorigin, setvperiodic,
setvnotperiodic, setvorigin
*** reverse, ureverse, vreverse
.Synopsis
reverse curvename
ureverse surfacename
vreverse surfacename
.Purpose
Use the reverse command to reverse the parametrisation of a 3d or 2d
curve, use ureverse or vreverse to 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 example they will change sign on a
line or stay 0,1 on a bezier.
Reversing a parameter on an analytical surface may create an indirect
coordinate system, i.e. for example Z is not the cross product of X
and Y, because reversing a parameter will reverse only one axis.
.Example
# reverse a trimmed 2d circle
circle c 0 0 5
trim c c pi/4 pi/2
reverse c
# dumping c will show that it is now trimmed between
# 3*pi/2 and 7*pi/4 i.e. 2*pi-pi/2 and 2*pi-pi/4
.Warning
The geometry has been modified, if you want to keep the curve or the
surface you must copy it before.
.See also
.Index
reverse command
ureverse command
vreverse command
*** exchuv
.Synopsis
exchuv surfacename
.Purpose
For a bezier or bspline surface this command exchange the U and V parameters.
.Example
# exchanging u and v on a spline (made from a cylinder)
# this is impossible on the cylinder
cylinder c 5
trimv c c 0 10
convert c c
exchuv c
.Index
exchuv command
*** segment, segsur
.Synopsis
segment curve ufirst ulast
segsur surface ufirst ulast vfirst vlast
.Purpose
Use the segment and segsur commands to segment respectively a bezier
or bspline curve and surface. This command modifies the curve to
restrict it between the new parameters. This command must not be
confused with the trim command which creates a new geometry.
.Example
# segment a bezier curve in half
beziercurve c 3 0 0 0 10 0 0 10 10 0
segment c 0.5 1
.Warning
.See also
.Index
segment command
segsur command
*** incdeg, incudeg, incvdeg
.Synopsis
incdeg curvename newdegree
incudeg surfacename newdegree
incvdeg surfacename newdegree
.Purpose
Use the incdeg command to increase the degree of a 2d or 3d bezier or
bspline curve to a new value higher than the current one. Use incudeg
and incvdeg to increase the degree in U or V of a surface.
.Example
# make a planar bspline and increase the degree to 2 3
plane p
trim p p -1 1 -1 1
convert p p
incudeg p 2
incvdeg p 3
.Warning
The geometry is modified.
.See also
.Index
incdeg command
incudeg command
incvdeg command
*** cmovep, movep, movecolp, moverowp
.Synopsis
cmovep curve index dx dy [dz]
movep surface uindex vindex dx dy dz
movecolp uindex dx dy dz
moverowp vindex dx dy dz
.Purpose
Use the move methods to translate poles of a bezier or a bspline curve
or surface. cmovep and movep translate the pole with the given index.
movecolp and moverowp translate a whole column or row of poles.
.Example
# start with a plane
# turn to bspline, raise degree and raise poles
plane p
trim p p -10 10 -10 10
convert p p
incud p 2
incvd p 2
movecolp p 2 0 0 5
moverowp p 2 0 0 5
movep p 2 2 0 0 5
.Warning
.See also
.Index
cmovep command
movep command
movecolp command
moverowp command
*** cmovepoint, movepoint
.Synopsis
cmovepoint curve u dx dy [dz]
movepoint surface u v dx dy dz
.Purpose
Use the cmovepoint command to modify a curve so the point of parameter
u have a new position translated by dx,dy,dz (no dz in 2d).
Use the movepoint command to modify a surface so the point of
parameters u,v have a new position translated by dx,dy,dz.
.Example
# Create a spline curve and move 100 times a point
bsplinecurve bscurv \
3 2 -1.0 4 1.0 4 0 0 0 1 1 0 0 1 2 0 0 1 3 0 0 1
incdeg bscurv 10
translate bscurv 0 -4 0
set i 1
repeat 100 {cmovepoint bscurv 0.3 0. 0.05 0.0e0 ; incr i 1; repaint}
dump bscurv
set i 1
repeat 100 {cmovepoint bscurv 0.3 0. -0.05 0.0e0 ; incr i 1;repaint}
.Warning
The geometry is modfied. Do not confuse with cmovep and movep which
modifies a pole and not a point.
.See also
cmovep, movep
.Index
cmovepoint command
movepoint command
*** insertpole, rempole, remcolpole, remrowpole
.Synopsis
insertpole curvename index x y [z] [w]
rempole curvename index
remcolpole surfacename index
remrowpole surfacename index
.Purpose
Use the insertpole command to insert a new pole on a 2d or 3d bezier
curve, you can add a weight for the pole, the default value for the
weight is 1. The pole is added at the position after the index, use an
index 0 to insert before the first pole.
Use the rempole command to remove a pole from a 2d or 3d bezier curve,
you must leave at least two poles in the curves.
Use the remcolpole and remrowpole commands to 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 are two rows and two columns.
.Example
# start with a segment, insert a pole at end
# then remove the central pole
beziercurve c 2 0 0 0 10 0 0
insertpole c 2 10 10 0
rempole c 2
.Index
insertpole command
rempole command
remcolpole command
remrowpole command
pole insertion and removal
*** insertknot, insertuknot, insertvknot
.Synopsis
insertknot curvename knot [mult]
insertuknot surfacename knot [mult]
insertvknot surfacename knot [mult]
.Purpose
Insert knots in the knot sequence of a bspline curve or surface, use
insertknot for a 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 its multiplicity will be raised if it is
lower than the target multiplicity. Use insertuknot and insertvknot to
insert knots in a surface.
.Example
# create a cylindrical surface and insert a knot
cylinder c 10
trim c c 0 pi/2 0 10
convert c c
insertuknot c pi/4 1
.Index
insertknot command
insertuknot command
insertvknot command
knot insertion
*** remknot, remulnot, remvknot
.Synopsis
remknot index [mult] [tol]
remuknot index [mult] [tol]
remvknot index [mult] [tol]
.Purpose
To remove a knot from the knot sequence of a curve or a surface use
the remknot commands, give the index of the knot and the target
multiplicity, default is 0 to remove the knot, if the target
multiplicity is not 0, the multiplicity of the knot will be
lowered. You can give a tolerance value to control the process as the
curve may be modified, if the tolerance is low the removal will be
done only if the curve is not modified. By default the removal is
always done.
.Example
# bspline circle, remove a knot
circle c 0 0 5
convert c c
incd c 5
remknot c 2
.Warning
The curve or the surface may be modified.
.See also
.Index
remknot command
remulnot command
remvknot command
knot removal
*** setperiodic, setnotperiodic, setuperiodic, setunotperiodic, setvperiodic, setvnotperiodic
.Synopsis
setperiodic curve
setnotperiodic curve
setuperiodic surface
setunotperiodic surface
setvperiodic surface
setvnotperiodic surface
.Purpose
setperiodic turns a bspline curve in a periodic bspline curve, the
knot vector is the same and excess poles are truncated, the curve may
be modified if it was not closed. setnotperiodic removes the
periodicity of a periodic curve, poles are duplicated. Note that knots
are added at the begining and the end of the knot vector and the
multiplicity are knot set to degree+1 at the start and the end.
.Example
# a circle deperiodicised
circle c 0 0 5
convert c c
setnotperiodic c
.Index
setperiodic command
setnotperiodic command
setuperiodic command
setunotperiodic command
setvperiodic command
setvnotperiodic command
*** setorigin, setuorigin, setvorigin
.Synopsis
setorigin curvename index
setuorigin surfacename index
setuorigin surfacename index
.Purpose
Use these commands to change the origin of the parameters on periodic
curves or surfaces, the new origin must be an existing knot. To set an
origin outside a knot you must first insert a knot with the insertknot
command.
.Example
# a torus with new U and V origins
torus t 20 5
convert t t
setuorigin t 2
setvorigin t 2
.See also
insertknot
.Index
setorigin command
setuorigin command
setvorigin command
**Transformations
Draw provides commands to apply linear transformations to geometric
objects, they include translation, rotation, mirror and scale.
*** translate, 2dtranslate
.Synopsis
translate name [name ...] dx dy dz
2dtranslate name [name ...] dx dy
.Purpose
To translate 3d points, curves and surfaces use the translate
commands, giving a vector dx,dy,dz. You can translate more than one
object with the same command.
For 2d points or curves use the 2dtranslate command.
.Example
# 3d translation
point p 10 20 30
circle c 10 20 30 5
torus t 10 20 30 5 2
translate p c t 0 0 15
.Warning
Objects are modified.
.See also
.Index
translate command
2dtranslate command
*** rotate, 2drotate
.Synopsis
rotate name [name ...] x y z dx dy dz angle
2drotate name [name ...] x y angle
.Purpose
To rotate a 3d point, curve or surface use the rotate command. You
must give an axis of rotation with a point x,y,z, a vector dx,dy,dz
and an angle in degree.
For a 2d rotation you must only give the center and the angle. In 3d
or 2d the angle can be negative.
.Example
# make an helix of circles
circle c0 10 0 0 3
for {set i 1} {$i <= 10} {incr i} {
copy c[expr $i-1] c$i
translate c$i 0 0 3
rotate c$i 0 0 0 0 0 1 36
}
.Index
rotate command
2drotate command
*** pmirror, lmirror, smirror, 2dpmirror, 2dlmirror
.Synopsis
pmirror name [name ...] x y z
lmirror name [name ...] x y z dx dy dz
smirror name [name ...] x y z dx dy dz
2dpmirror name [name ...] x y
2dlmirror name [name ...] x y dx dy
.Purpose
The mirrors command make a mirror transformation of a 3d or 2d
geometry. pmirror is the point mirror, or central symetry, lmirror is
the line mirror or axial symetry, smirror is the surface mirror or
planar symetry, the plane of symetry is perpendicular to dx,dy,dz.
In 2d we have only 2dpmirror, the point symetry, and 2dlmirror the
axis symetry.
.Example
# build 3 images of a torus
torus t 10 10 10 1 2 3 5 1
copy t t1
pmirror t1 0 0 0
copy t t2
lmirror t2 0 0 0 1 0 0
copy t t3
smirror t3 0 0 0 1 0 0
.Warning
.See also
.Index
pmirror command
lmirror command
smirror command
2dpmirror command
2dlmirror command
*** pscale, 2dpscale
.Synopsis
pscale name [name ...] x y z s
2dpscale name [name ...] x y s
.Purpose
Use the pscale and 2dpscale commands to transform an object with a
point scaling (central homotetic). You must give the center and the
scaling factor. Using a scaling factor of -1 is similar to pmirror.
.Example
# double the size of a sphere
sphere s 0 0 0 10
pscale s 0 0 0 2
.Warning
.See also
.Index
pscale command
2dpscale command
**Analysis of curves and surfaces
Draw provides methods to compute information about curves and
surfaces.
- Use coord to find the coordinates of a point.
- Use cvalue and 2dcvalue to compute points and derivatives on
curves.
- Use svalue to compute points and derivatives on a surface.
- Use localprop and minmaxcurandif to compute the curvature on a
curve.
- Use parameters to compute U,V values for a point on a surface.
- Use proj and 2dproj to project a point on a curve or a surface.
- Use surface_radius to compute the curvalture on a surface.
*** coord
.Synopsis
coord point x y [z]
.Purpose
The coord command will store in the variable x, y and z the
coordinates of the point.
.Example
# translate a point
point p 10 5 5
translate p 5 0 0
coord p x y z
# x value is 15
.See also
point
.Index
coord command
*** cvalue, 2dcvalue
.Synopsis
cvalue curve u [x y z [d1x d1y d1z [d2x d2y d2z]]] [P]
2dcvalue curve u [x y [d1x d1y [d2x d2y]]] [P]
.Purpose
Depending on the number of arguments this command computes on a curve
at a given parameter : the coordinates in x,y,z, the first derivative
in d1x,d1y,d1z, the second derivative in d2x,d2y,d2z and set in P the
point of coordinates x,y,z.
.Example
# on a bezier curve at parameter 0
# the point is the first pole
# the derivative is the vector first to second pole
# multiplied by the degree
# the second derivative is the difference
# first to second pole, second to third pole
# multiplied by degree * degree-1
2dbeziercurve c 4 0 0 1 1 2 1 3 0
2dcvalue c 0 x y d1x d1y d2x d2y P
# values of x y d1x d1y d2x d2y
# are 0 0 3 3 0 -6
# and displays the point P(0,0,3)
.Warning
.See also
.Index
cvalue command
2dcvalue command
value on curves
derivative on curves
*** svalue
.Synopsis
svalue surface u v [x y z [dux duy duz dvx dvy dvz [d2ux d2uy
d2uz d2vx d2vy d2vz d2uvx d2uvy d2uvz]]] [P]
.Purpose
Use the svalue command to compute point and derivatives on a surface
at a pair of parameter values, the result depends on the number of
arguments. You can compute up to order two of derivation and display
the resulting point.
.Example
# display points on a sphere
sphere s 10
for {dset t 0} {[dval t] <= 1} {dset t t+0.01} {
svalue s t*2*pi t*pi-pi/2 x y z
point . x y z
}
# can also be written
sphere s 10
for {dset t 0} {[dval t] <= 1} {dset t t+0.01} {
svalue s t*2*pi t*pi-pi/2 .
}
.Warning
.See also
.Index
svalue command
*** localprop, minmaxcurandif
.Synopsis
localprop curve u
minmaxcurandif curve
.Purpose
The localprop command computes on a curve the curvature and display
the osculationg circle. The minmaxcurandif command computes and print
the parameters where the curvature is minimum or maximum on a curve.
.Example
# show curvature at the center of a bezier curve
beziercurve c 3 0 0 0 10 2 0 20 0 0
localprop c 0.5
.See also
surface_radius
.Index
localprop command
minmaxcurandif command
radius of curvature
curvature
*** parameters
.Synopsis
parameters surface x y z u v
.Purpose
The parameters command returns in variables u and v the parameters on
the surface of the 3d point x,y,z. This command can be used only on
analytical surfaces, plane, cylinder, cone, sphere, torus.
.Example
# Compute parameters on a plane
plane p 0 0 10 1 1 0
parameters p 5 5 5 u v
# the values of u and v are 0 5
.Warning
.See also
.Index
parameters command
*** proj, 2dproj
.Synopsis
proj name x y z
2dproj name xy
.Purpose
Use proj to project a point on a curve or a surface and 2dproj for a
2d curve, the command will compute and display all points at an
extreme distance. The lines joining the point to the projections are
created with names such as ext_1, ext_2, ...
.Example
# project point on a torus
torus t 20 5
proj t 30 10 7
.Warning
.See also
.Index
proj command
2dproj command
*** surface_radius
.Synopsis
surface_radius surface u v [c1 c2]
.Purpose
Use the surface radius command to compute the main curvatures of a
surface at parameters u,v. If there are extra arguments the curvatures
are stored in variables c1 and c2.
.Example
# computes curvatures of a cylinder
cylinder c 5
surface_radius c pi 3 c1 c2
.Warning
The radii are displayed and the curvatures are returned, the radius is
the inverse of the curvature.
.See also
.Index
surface_radius command
curvature of surfaces
**Intersections
To compute intersections of surfaces, use the intersect command; to
compute intersections of 2d curves, use the 2dintersect command.
*** intersect
.Synopsis
intersect name surface1 surface2 [tolerance]
.Purpose
Use the intersect command to intersect 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", ... The precision of the result
is the given tolerance, this is important when a spline is fitted to
the result curve. The default tolerance is 1e-7.
.Example
# create an ellipse
cone c 45 0
plane p 0 0 40 0 1 5
intersect e c p
.Warning
.See also
.Index
intersect command
*** 2dintersect
.Synopsis
2dintersect curve1 curve2
.Purpose
Display the intersection points between two 2d curves.
.Example
# intersect two 2d ellipses
ellipse e1 0 0 5 2
ellipse e2 0 0 0 1 5 2
2dintersect e1 e2
.Warning
.See also
.Index
2dintersect command
**Approximations
Draw provides commandd to create curves and surfaces by
approximations. 2dapprox to fit a curve through 2d points. appro to
fit a curve through 3d points. surfapp and grilapp to fit a surface
through 3d points. 2dinterpolate can be used to interpolate a curve.
*** appro, 2dapprox, 2dinterpolate
.Synopsis
appro name nbpoints [curve]
2dapprox name name nbpoints [curve / x1 y1 x2 y2 ...]
2dinterpolate name name nbpoints [curve / x1 y1 x2 y2 ...]
.Purpose
Fit a curve through a set of points, first give the number of points,
then there are three ways to give the points. Without arguments
interactivly click the points, with a curve argument computes the
points on the curve, else give a list of points.
.Example
# pick ten points and they will be fit
2dapprox c 10
.Warning
.See also
.Index
appro command
2dapprox command
approximation
*** surfapp, grilapp
.Synopsis
surfapp name nbupoints nbvpoints x y z ....
grilapp name nbupoints nbvpoints xo dx yo dy z11 z12 ...
.Purpose
Use surfapp to fit a surface through an array of points
nbupoints*nbvpoints. grilapp do the same but the x,y coordinates of
the points are on a grid starting at x0,y0 with steps dx,dy.
.See also
.Index
surfapp command
grilapp command
**Constraints
The command cirtang is used to construct 2d circles tangent to curves
and lintan to construct 2d lines tangent to curves.
*** cirtang
.Synopsis
cirtang name c1 c2 c3
.Purpose
The cirtang command will build all circles satsifying the three
constraints c1,c2,c3. The constraints are either, a curve then the
circle must be tangent to that curve, a point then the circle must
pass through that point, a radius for the circle. Only one constraint
can be a radius. The solutions will be stored in variables called
name_1, name_2, ...
.Example
# a point, a line and a radius. 2 solutions
point p 0 0
line l 10 0 -1 1
cirtan c p l 4
.Warning
.See also
.Index
cirtang command
tangent circle
*** lintan
.Synopsis
lintan name curve curve [angle]
.Purpose
The lintan command will build all 2d lines tangent to two curves. If a
third angle argument is given the second curve must be a line and
lintan will build all lines tangent to the first curve making the
given angle with the line. The angle is defined in degree. The
solutions are named name_1, name_2, ...
.Example
# lines tangent to 2 circles, 4 solutions
circle c1 -10 0 10
circle c2 10 0 5
lintan l c1 c2
.Warning
.See also
.Index
lintan command
tangent line
**Display
Draw provides commands to control the display of geometric
objects. Some display parameters are used for all objects, some are
valid only for surfaces, some are valid only for bezier and bspline,
and some only for bspline.
On curve and surfaces you can control the display mode (how points are
computed) with the dmode command. And the parameters for the mode
with the defle command and the discr command to control the deflection
and the discretisation.
On surfaces you can control the number of isoparametric curves
displayed on the surface with the nbiso command.
On bezier and bspline curve and surface you can toggle the display of
the control points with the clpoles and shpoles commands.
On bspline curves and surfaces you can toggle the display of the knots
with the shknots clknots commands.
.Index
display of curves and surfaces
*** dmod, discr, defle
.Synopsis
dmode name [name ...] u/d
discr name [name ...] nbintervals
defle name [name ...] deflection
.Purpose
You can choose the display mode for a curve or a surface with the
dmode command. The display mode defines how the points are computed to
create the polygon to display the curve or the surface.
In "u" mode, known as uniform deflection, the points are computed to
keep the polygon at a distance lower than the deflection from the
geometry. The deflection is set with the defle command. This mode is
more computer intensive.
In "d" mode, known as discretisation, 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).
If the curves are not smooth you can either increase the
discretisation or lower the deflection, depending on the mode in
use. This will increase the number of points.
.Example
# increment the number of points on a big circle
circle c 0 0 50 50
discr 100
# change the mode
dmode c u
.Warning
.See also
.Index
dmod command
discr command
defle command
*** nbiso
.Synopsis
nbiso surface [surface ...] nbuiso nbviso
.Purpose
Use the nbiso command to change the number of isoparametric curves
displayed on a surface in the U and V directions. Note that on a
bspline surface by default isoparametrics are displayed at knots
values, using nbiso will remove this feature.
.Example
# display 35 meridians and 15 parallels on a sphere
sphere s 20
nbiso s 35 15
.Warning
.See also
.Index
nbiso command
*** clpoles, shpoles
.Synopsis
clpoles name
shpoles name
.Purpose
On bezier and bspline curves and surfaces the control polygon is
displayed by default, you can suppress it with the clpoles command and
restore it with the shpoles command.
.Example
# create a bezier curve and erase the poles
beziercurve c 3 0 0 0 10 0 0 10 10 0
clpoles c
.Warning
.See also
.Index
clpoles command
shpoles command
poles display
*** clknots, shknots
.Synopsis
clknots name
shknots name
.Purpose
By default on a bspline curve and surface knots are displayed with a
marker at the points with a parametric value equal to the knots. You
can remove them with the clknots commands and restore them with the
shknots command.
.Example
# hide the knots on a circle converted to spline
circle c 0 0 5
convert c c
clknots c
.Warning
.See also
.Index
clknots command
shknots command
knots display
*Topology commands
Draw provides a set of commands to test topology libraries. Topology
libraries are provided with the TOPOLOGY UL. Those commnads are found
in the TTOPOLOGY executable or in any executable including the
BRepTest commands.
The topology adds a new type of variable in Draw, the shape variable,
shape is a topological object, it can be a Vertex, an Edge, a Wire, a
Face, a Shell, a Solid, a CompSolid or a Compound, you are invited to
refer to the topology documentation for more information.
Shapes are usually shared, i.e. the Draw copy command will create a
new shape sharing its representation with the original, but two shapes
sharing their topology can be moved independently (see the section
about transformations for more details).
The following sections cover the topics
- Basic shape commands, to handle the structure of shapes and control
the display.
- Curves and surfaces topology, methods to make topology from
geometry, or vice versa.
- The profile method to make planar profiles.
- Primitive construction commands. Box, cylinder, ...
- Sweeping of shapes.
- Transformations of shapes. Translation, copy, ....
- Topological operations, also known as booleans.
- Local operations. Features, holes.
- Drafting and blending.
- Analysis of shapes. Length, area, volume....
**Basic topology
The basic set of commands allows simple operations on shapes, or
stepwise constructions of objects which may be far from simple. They
are useful for analysis of shapes structure.
- Shapes are displayed with isoparametric curves on the faces, this is
controlled with the isos command. The number of points used to display
the shapes curves can be modified with the discretisation command.
- To modify topological attributes such as the orientation use
orientation, complement and invert.
- To analyse the structure of a shape, use explode, exwire and
nbshapes.
- To create shapes by stepwise construction, use emptycopy, add,
compound.
*** isos, discretisation
.Synopsis
isos [name ...] nbisos
discretisation nbpoints
.Purpose
Shapes are displayed by a set of curves, the edges and isoparametric
curves on the faces. There is color coding for the edges, a red edge
is an isolated edge (belongs to no faces), a green edge is a free
boundary edge (belongs to one face), a yellow edge is a shared edge
(at least two faces).
You can change the number of isoparametric curves on shapes using the
isos commands. Nnote that the same number is used for the U and V
directions, if you give no shape arguments the value you give will be
the new default value (originally 2), if you give no arguments at all
the command prints the current default value.
You can change the default number of points used to display the curves
with the discretisation command. The original value is 30.
.Example
# Display only the edges (the wireframe)
isos 0
.Warning
Do not get confused with the geometric commands nbisos and discr which
control the display of geometry.
.See also
.Index
isos command
discretisation command
display of shapes
free boundary
*** orientation, complement, invert
.Synopsis
orientation name [name ...] F/R/E/I
complement name [name ...]
invert name
.Purpose
These commands are used to change the orientation of shapes.
The orientation command sets one of the four values, FORWARD, REVERSED,
INTERNAL, EXTERNAL
The complement command changes the current orientation to its
complement, FORWARD <-> REVERSED, INTERNAL <-> EXTERNAL.
The invert command creates a new shape which is a copy of the original
with all subshapes orientation reversed. It is useful for example to
reverse the normals of a solid.
.Example
# invert normals of a box
box b 10 20 30
normals b 5
invert b
normals b 5
.Index
orientation command
complement command
invert command
*** explode, exwire, nbshapes
.Synopsis
explode name [C/So/Sh/F/W/E/V]
exwire name
nbshapes name
.Purpose
The explode command is very useful to extract subshapes from a shape,
the subshapes will be named name_1, name_2, ... Note that they are not
copied but shared with the original. Without other arguments than the
shape explode will extract the first sublevel of shapes, the shells of
a solid, the edges of a wire for example. With an argument explode
will extract all subshapes of the given type, C for compounds, So for
solids, Sh for shells, F for faces, W for wires, E for edges, V for
vertices.
The exwire command is a special case of explode for wires which
extract the edges in an ordered way if possible. i/e/ each edge is
connected to the following one by a vertex.
The nbshapes command counts the number of shapes of each type in a
shape.
.Example
# on a box
box b 10 20 30
# whatis returns the type and various information
whatis b
=> b is a shape SOLID FORWARD Free Modified
# make one shell
explode b
whatis b_1
=> b_1 is a shape SHELL REVERSED Modified Orientable Closed
# extract the edges b_1, ... , b_12
explode b e
==> b_12
# count subshapes
nbshapes b
==>
Number of shapes in b
VERTEX : 8
EDGE : 12
WIRE : 6
FACE : 6
SHELL : 1
SOLID : 1
COMPSOLID : 0
COMPOUND : 0
SHAPE : 34
.Warning
.See also
.Index
explode command
exwire command
nbshapes command
exploring a shape
wire exploration
*** emptycopy, add, compound
.Synopsis
emptycopy [newname] name
add name toname
compound [name ...] compoundname
.Purpose
The emptycopy command creates a new shape from an existing one without
subshapes, only the geometry, if there is one, is used. The new shape
is stored with the same name if the newname argument is not
given. This command is useful to modify a frozen shape, a frozen shape
is a shape used by an other shape, it cannot be modifed, so it must be
emptycopied and its subshape may be reinserted with the add command.
The add command insert a reference to a shape in an other one, the
shapes must be compatible (you cannot insert a face into an edge) and
the modified shape must not be frozen. (However, using emptycopy and
add requires caution).
The compound command is very safe, it creates a compound from shapes,
if no shapes are given the compound is empty.
.Example
# a compound with three boxes
box b1 0 0 0 1 1 1
box b2 3 0 0 1 1 1
box b3 6 0 0 1 1 1
compound b1 b2 b3 c
.Warning
.See also
.Index
emptycopy command
add command
compound command
**Curve and surfaces topology
This group of commands is used to create topology from shapes and to
extract shapes geometry. Note that these commands are low-level, to
create faces or wires the profile command described in the next
section is usually more appropriate.
- To create vertices use the vertex command.
- To create edges use the edge, mkedge commands.
- To create wires use the wire, polyline, polyvertex commands.
- To create faces use the mkplane, mkface commands.
- To extract the geometry from edges or faces use the mkcurve and
mkface commands.
- To extract the 2d curves for edges on faces use the pcurve command.
*** vertex
.Synopsis
vertex name [x y z / p edge]
.Purpose
Creates a vertex at a 3d location, the location is a x,y,z point or
the point at parameter p on an edge.
.Example
vertex v1 10 20 30
.Warning
.See also
.Index
vertex command
*** edge, mkedge
.Synopsis
edge name vertex1 vertex2
mkedge edge curve [surface] [pfirst plast] [vfirst [pfirst] vlast [plast]]
.Purpose
The edge command creates a straight line edge between two vertices. Of
course they must not be at the same location.
The mkedge command allows the creation of edges from curves, it is a
quite complete command corresponding to the BRepAPI_MakeEdge class. It
can create an edge from a curve, two parameters can be given for the
vertices (the default are the first and last parameters of the curve),
vertices can also be given with their parameters, this option allows
to inhibate 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.
.Example
# straight line edge
vertex v1 10 0 0
vertex v2 10 10 0
edge e1 v1 v2
# make a circular edge
circle c 0 0 0 5
mkedge e2 c 0 pi/2
# the same result may be achieved with a trimmed curve
# trimmed curves are recognised removed my mkedge
trim c c 0 pi/2
mkedge e2 c
.Warning
.See also
.Index
edge command
mkedge command
curve to edge
edge from curve
*** wire, polyline, polyvertex
.Synopsis
wire name name1 [name2 ...]
polyline name x1 y1 z1 x2 y2 z2 ...
polyvertex name v1 v2 ...
.Purpose
The wire command creates a wire from edges or wires, the order of the
elements must ensure that the wire is connected. The vertices
locations are compared to detect connection, if the vertices are
differents new edges are created to ensure topological connectivity,
so the original edge may be copied in the wire.
The polyline command creates a polygonal wire from points coordinates,
to make a closed wire you should repeat the first point at the end.
The polyvertex command creates a polygonal wire from vertices.
.Example
# create two polygonal wires
# and glue them
polyline w1 0 0 0 10 0 0 10 10 0
polyline w2 10 10 0 0 10 0 0 0 0
wire w w1 w2
.Warning
.See also
.Index
wire command
polyline command
polyvertex command
*** mkplane, mkface
.Synopsis
mkplane name wire
mkface mkface name surface [ufirst ulast vfirst vlast]
.Purpose
Use the mkplane command to make a face from a planar wire, the plane
surface will be constructed with an orientation to keep the face
inside the wire.
Use the mkface command to make a face from a surface, parameter values
can be given to trim a rectangular area, the default are the bounds of
the surface.
.Example
# make a polygonal face
polyline f 0 0 0 20 0 0 20 10 0 10 10 0 10 20 0 0 20 0 0 0 0
mkplane f f
# make a cylindrical face
cylinder g 10
trim g g -pi/3 pi/2 0 15
mkface g g
.Warning
.See also
.Index
mkplane command
mkface command
surface to face
face from surface
*** mkcurve, mkface
.Synopsis
mkcurve name edge
mksurface name face
.Purpose
Use the mkcurve command to create a 3d curve from an edge, the curve
will be trimmed to the edge boundaries, this is not possible if the
edge has no 3d curve.
Use the mksurface command to make a surface from a face, the surface
is not trimmed.
.Example
# make a line
vertex v1 0 0 0
vertex v2 10 0 0
edge e v1 v2
mkcurve l e
.Warning
.See also
.Index
mkcurve command
mkface command
edge to curve
curve from edge
*** pcurve
.Synopsis
pcurve [name edge] face
.Purpose
The pcurve command extracts the 2d curve of an edge on a face. If the
only argument is a face the command extracts all the curves and color
them according to their orientation. This is very useful to check if
the edges in a face are correctly oriented, i.e. they turn
counterclockwise.
.Example
# view the pcurves of a face
plane p
trim p p -1 1 -1 1
mkface p p
av2d; # a 2d view
pcurve p
2dfit
.Warning
If you do not see anything, may you forgot to create a 2d view or to
fit it woth the 2dfit command.
.See also
.Index
pcurve command
** Making profiles
The profile command is a powerfull tool to create planar faces or
wires made of straight lines an circles which are current in
mechanical applications.
*** profile
.Synopsis
profile name [instruction parameters instruction parameters ....]
.Purpose
The profile command creates a planar profile from a list of
instructions. The profile is created in 2d on a plane starting from
point 0,0 and direction X (1,0), some instructions creates a segment
of line or an arc of circle moving the point and setting a new
direction to the tangent of the profile. Other instructions modify the
current direction, the plane or terminate the profile.
Instructions are one or two upper or lowercase letter, followed by a
fixed number of arguments. The angles are given in degree.
- O X Y Z, Set the origin of the plane (default value is 0 0 0)
- P DX DY DZ UX UY UZ, Set the normal and X direction of the plane,
(default value is 0 0 1 1 0 0, an X Y plane)
- X DX, Move the point along X axis.
- Y DY, Move the point along Y axis.
- L DL, Move the point along the current direction by length DL.
- XX X, Set point X coordinate (absolute value).
- YY Y, Set point Y coordinate (absolute value).
- T DX DY, Translate the point.
- TT X Y, Set the point (absolute coordinates).
- R Angle, Rotate the direction (clockwise).
- RR Angle, Set the direction (absolute angle from X axis).
- D DX DY, Set the direction (DX DY will be normalized).
The instructions starting with I will intersect the line defined by the
point and the direction with a curve and move to this new point.
- IX X, Intersect with a vertical (absolute X value).
- IY Y, Intersect with an horizontal (absolute X value).
- C Radius Angle, Make an arc of circle tangent to the current direction.
By default the profile is closed and a face is created, to create a
closed or open wire the following instructions may be used. The
profile will be terminated.
- W, Make a closed wire.
- WW, Make an open wire.
.Example
# Make a square with two fillets on the top
# and a half-circle on the bottom
profile f x 5 r -90 c 5 180 x 5 y 8 c 2 90 xx 2 c 2 90
.Warning
.See also
.Index
profile command
face creation
**Primitives
Primitive commands allow the creation of simple shapes.
- box and wedge commands.
- pcylinder, pcone, psphere, ptorus commands.
*** box, wedge
.Synopsis
box name [x y z] dx dy dz
wedge name dx dy dz ltx / xmin zmin xmax xmax
.Purpose
Use the box command to create a box parallel to the axes with
dx,dy,dz dimensions. x,y,z is the corner of the box, by default it
is the origin.
Use the wedge command to create a wedge, a wedge has six faces, one
face in the OXZ plane has dimensions dx,dz the other face is in the
plane y = dy. It has dimensions ltx,dz or it is bounded by
xmin,zmin,xmax,zmax. The other faces are defined between those 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 this case there are 5
faces. To position the wedge use the ttranslate and trotate commands.
.Example
# a box at the origin
box b1 10 20 30
# an other box
box b2 30 30 40 10 20 30
# a wedge
wedge w1 10 20 30 5
# a wedge with a sharp edge (5 faces)
wedge w2 10 20 30 0
# a pyramid
wedge w3 20 20 20 10 10 10 10
.Warning
.See also
.Index
box command
wedge command
*** pcylinder, pcone, psphere, ptorus
.Synopsis
pcylinder name [plane] radius height [angle]
pcone name [plane] radius1 radius2 height [angle]
pcone name [plane] radius1 radius2 height [angle]
psphere name [plane] radius1 [angle1 angle2] [angle]
psphere name [plane] radius1 radius2 [angle1 angle2] [angle]
.Purpose
All these commands create solids in the default coordinate system,
using the Z axis as the axis of revolution and the X axis as origin of
angles. To use another system you can translate and rotate the
resulting solid or use a plane as the first argument to specify a
coordinate system. Note that this is quite different because the
translation and rotation only change the coordinate system of the
object. All primitives have an optional last argument which is an
angle in degree around the Z axis, starting from the X axis. The
default is 360.
The pcylinder command creates a cylindrical block around with given
radius and height.
The pcone command creates a truncated cone of given height with radius
radius1 in the plane z = 0 and radius2 in the plane z = heigth. The
radii must not be negative but one of them can be null.
The psphere command creates a solid sphere centered at the origin, if
two angles angle1 and angle2 are given the solid will be limited by
two planes at latitude angle1 and angle2 in degree. The angles must be
increasing and in the range -90,90.
The ptorus command creates a solid torus centered at the origin around
the z axis with given radii, if two increasing angles in degree in the
range 0 360 are given the solid will be bounded by two planar surfaces
at these positions on the circle.
.Example
# make a can
pcylinder cy 5 10
# a quarter of trucated cone
pcone co 15 10 10 90
# three-quarters of sphere
psphere sp 10 270
# half torus
ptorus to 20 5 0 90
.Warning
.See also
.Index
pcylinder command
pcone command
psphere command
ptorus command
cone solid
cylinder solid
sphere solid
torus solid
**Sweeping
Sweepinf creates shapes by sweeping a shape along a path.
- prism sweeps along a direction.
- revol sweeps around an axis.
- pipe sweeps along a wire.
*** prism
.Synopsis
prism name shape dx dy dz ["Copy | Inf | SemiInf]
.Purpose
The prism command creates a new shape by sweeping a shape along a
direction. Any shape can be swept, a vertex gives an edge, en edge
gives a face, a face gives a solid...
The sweeping is done 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, then the
length of the vector has no meaning.
.Example
# sweep a planar face to make a solid
polyline f 0 0 0 10 0 0 10 5 0 5 5 0 5 15 0 0 15 0 0 0 0
mkplane f f
prism p f 0 0 10
.Warning
.See also
.Index
prism command
sweeping
*** revol
.Synopsis
revol name shape x y z dx dy dz angle [Copy]
.Purpose
The revol command creates a new shape by sweeping a shape around the
axis x,y,z dx,dy,dz by an angle in degree. As with the prism command
the shape can be of any type and is not shared if Copy is specified.
.Example
# shell by wire rotation
polyline w 0 0 0 10 0 0 10 5 0 5 5 0 5 15 0 0 15 0
revol s w 20 0 0 0 1 0 90
.Warning
.See also
.Index
revol command
*** pipe
.Synopsis
pipe name wire shape
.Purpose
The pipe command creates a shape by sweeping a shape known as the
profile along a wire known as the spine.
.Example
# sweep a circle along a bezier curve to make a solid pipe
beziercurve spine 4 0 0 0 10 0 0 10 10 0 20 10 0
mkedge spine spine
wire spine spine
circle profile 0 0 0 1 0 0 2
mkedge profile profile
wire profile profile
mkplane profile profile
pipe p spine profile
.Warning
.See also
.Index
pipe command
**Topology transformation
Transformations are application of matrices, when the transformation
is non deforming, like translation or rotation, the object is not
copied, we use the topology local coordinate system feature. The copy
can be enforced with the tcopy command.
- tcopy makes a copy of the structure of a shape.
- ttranslate, trotate, tmove, reset moves a shape.
- tmirror, tscale always modify the shape.
*** tcopy
.Synopsis
tcopy name toname [name toname ...]
.Purpose
Copy the structure of a shape in a new shape, including the geometry.
.Example
# create an edge from a curve and copy it
beziercurve c 3 0 0 0 10 0 0 20 10 0
mkedge e1 c
ttranslate e1 0 5 0
tcopy e1 e2
ttranslate e2 0 5 0
# now modify the curve, only e1 will be modified
cmovep c 2 0 0 20
.Warning
.See also
.Index
tcopy command
copying shapes
*** tmove, treset
.Synopsis
tmove name [name ...] shape
reset name [name ...]
.Purpose
The tmove and reset command are used to modify the location, or local
coordinate system of a shape, tmove applies to some shapes the
location of a given shape. reset removes the location of a shape,
restoring it in its original coordinate system.
.Example
# create two boxes
box b1 10 10 10
box b2 20 0 0 10 10 10
# translate the first box
ttranslate b1 0 10 0
# and apply the same location to b2
tmove b2 b1
# return to original positions
reset b1 b2
.Warning
.See also
.Index
tmove command
treset command
location
*** ttranslate, trotate
.Synopsis
ttranslate [name ...] dx dy dz
trotate [name ...] x y z dx dy dz angle
.Purpose
Use the ttranslate command to translate a set of shapes by a given
vector, and the trotate command to rotate them by a given angle in
degree around an axis. Both commands only modify the location of the
shape. When transforming multiple shapes the same location is used for
all the shapes, when a command is used for each shape, even if the
translation or the rotation are the same, a new location is created.
Locations are very economic in the data structure because multiple
occurrences of an object share the topological description.
.Example
# make rotated copy of a sphere and cylinders
pcylinder c1 30 5
copy c1 c2
ttranslate c2 0 0 20
psphere s 3
ttranslate s 25 0 12.5
for {set i 0} {$i < 360} {incr i 20} {
copy s s$i
trotate s$i 0 0 0 0 0 1 $i
}
.Warning
.See also
.Index
ttranslate command
trotate command
translating shapes
rotating shapes
*** tmirror, tscale
.Synopsis
tmirror name x y z dx dy dz
tscale name x y z scale
.Purpose
The tmirror command makes a mirror copy of a shape about a plane x,y,z
dx,dy,dz, the tscale command applies a central homothety to the shape.
.Example
# mirror a portion of cylinder about the YZ plane
pcylinder c1 10 10 270
copy c1 c2
tmirror c2 15 0 0 1 0 0
# and scale it
tscale c1 0 0 0 0.5
.Warning
.See also
.Index
tmirror command
tscale command
mirroring shapes
scaling shapes
**Topological operations
Topological operations includes the boolean operations, they are using
intersections.
- fuse, cut, common are the boolean operations.
- section, psection computes sections.
*** fuse, cut, common
.Synopsis
fuse name shape1 shape2
cut name shape1 shape2
common name shape1 shape2
.Purpose
Creation of a new shape by a boolean operation between two shapes,
fuse is the union, cut substract the second to the first, common is
the intersection.
.Example
# the four boolean operations between a box and a cylinder
box b 0 -10 5 20 20 10
pcylinder c 5 20
fuse s1 b c
ttranslate s1 40 0 0
cut s2 b c
ttranslate s2 -40 0 0
cut s3 c b
ttranslate s3 0 40 0
common s4 b c
ttranslate s4 0 -40 0
.Warning
.See also
.Index
fuse command
cut command
common command
boolean operations
*** section, psection
.Synopsis
section name shape1 shape2
psection name shape plane
.Purpose
The section command creates a compound with the intersection edges
created from the faces of two shapes, this is the section line. The
psection command do the same between a shape and a plane. This is the
planar section.
.Example
# section line between a cylinder and a box
pcylinder c 10 20
box b 0 0 5 15 15 15
trotate b 0 0 0 1 1 1 20
section s b c
# planar section of a cone
pcone c 10 30 30
plane p 0 0 15 1 1 2
psection s c p
.Warning
.See also
.Index
section command
psection command
planar section
**Local operations
Local operations are boolean operations restricted to some faces of a
solid.
- localope is the general local operation command, to perform local
boolean operations.
- hole, firsthole, holend, blindhole are various commands to create
cylindrical holes.
*** localope
.Synopsis
localope name shape tool F/C face [face ...]
.Purpose
Use the localope command to perform a local operation on a shape with
a tool. The operation is a fusion or a cut (use 'F' or 'C'). The
operation will be restricted to the designates faces. The tool is
intersected only with the given faces and other faces necessary to
close the intersection curves.
This operation is the basis for features implementation.
.Example
# make a box and fuse a cylinder on one side
box b 10 10 10
pcylinder c 1 20
ttranslate c 5 5 -5
# click on the top or bottom face and observe the result...
localope a b c F .
.Warning
.See also
.Index
localope command
features
*** hole, firsthole, holend, blindhole, holecontrol
.Synopsis
hole name shape Or.X Or.Y Or.Z Dir.X Dir.Y Dir.Z Radius [Pfrom Pto]
firsthole name shape Or.X Or.Y Or.Z Dir.X Dir.Y Dir.Z Radius
holend name shape Or.X Or.Y Or.Z Dir.X Dir.Y Dir.Z Radius
blindhole name shape Or.X Or.Y Or.Z Dir.X Dir.Y Dir.Z Radius Length
holecontrol [0/1]
.Purpose
Use the hole commands to make a cylindrical hole in a solid, in any
case you must give an axis and a radius with Or.X Or.Y Or.Z Dir.X
Dir.Y Dir.Z Radius.
- hole will make a hole through the whole solid or between parameters
Pfrom and Pto on the axis.
- firsthole will make only the first possible hole along the positive
side of the axis.
- holend will make all possible holes along the positive side of the
axis.
- blindhole will make a blind hole of depth Length starting from the
origin of the axis on the positive side.
The holecontrol command is used to set or display the control
mode. When the value is 1 a check of validity is performed after all
the hole commands.
.Example
# make a hole through a cylinder
pcylinder c 5 10
firsthole r c 0 -10 5 0 1 0 1
.Warning
If the axis does not intersect the solid nothing is done, this is not
the same as a full boolean operation.
.See also
.Index
hole command
firsthole command
holend command
blindhole command
holecontrol command
**Drafting and blending
Drafting is the creation of a new shape by tilting faces with an
angle, blending is the creation of a new shapes by rounding of edges.
- Use the depouille command for drafting.
- Use the blend command for simple blending.
- Use the chfi2d command for blending or chamfering planar faces.
- Use fubl for a fusion + blending operation.
- Use buildevol, mkevol, updatevol to make varying radius blending.
*** depouille
.Synopsis
depouille name shape dirx diry dirz face angle x y x dx dy dz [face angle...]
.Purpose
Use this command to create a new shape by drafting faces of a shape,
you must give the shape to be drafted and the drafting direction
(think of it as an unmolding direction), then faces with angles and
axis of rotation. The faces must be faces of the shape, you can use
the dot syntax to pick the faces.
.Example
# draft a face of a box
box b 10 10 10
explode b f
depouille a b 0 0 1 b_2 10 0 10 0 1 0 5
.Warning
.See also
.Index
depouille command
*** blend
.Synopsis
blend name shape radius edge [radius edge ...]
.Purpose
The blend command creates a new shape by rounding edges of a shape,
you must give the shape and pairs radius, edge. The edge must be in
the shape, you may use the dot syntax. Not that the blend is expanded
to other edges when the faces are tangent. Blends are also called
fillets.
.Example
# blend a box, click on an edge
box b 20 20 20
blend b b 2 .
.Warning
.See also
.Index
blend command
fillets
*** chfi2d
.Synopsis
chfi2d result face [edge1 edge2 (F radius/CDD d1 d2/CDA d ang) ....]
.Purpose
Creates a new face name result from an existing face adding fillets
and chamfers. The face must be planar, if it is a wire a planar face
can be made with the mkplane command. Multiples fillets and chamfers
can be built.
edge1 edge2 F radius, builds a fillet of the given radius on the
vertex connecting the two edges.
edge1 edge2 CDD d1 d2, builds a chamfer on the vertex connecting the
two edges with distance d1 on edge1 and d2 on edge2.
edge1 edge2 CDA d ang, builds a chamfer on the vertex connecting the
two edges at distance d on edge1 making an angle ang (degree) with
edge1.
.Example
# Make a fillet and the two kinds of vertices
# with graphical selection of the edges
polyline f 0 0 0 20 0 0 20 10 0 10 10 0 10 30 0 0 30 0 0 0 0
mkplane f f
chfi2d f f . . F 3 . . CDD 1 2 . . CDA 1.5 60
.Warning
.See also
mkplane
.Index
chfi2d command
rounding
fillet 2d
chamfer 2d
*** fubl
.Synopsis
fubl name shape1 shape2 radius
.Purpose
Make a fusion boolean operation between two shapes then blend the
intersection edges with the radius.
.Example
# fuse-blend two boxes
box b1 20 20 5
copy b1 b2
ttranslate b2 -10 10 3
fubl a b1 b2 1
.Warning
.See also
fuse
blend
.Index
fubl command
*** mkevol, updatevol, buildevol
.Synopsis
mkevol name shape
updatevol edge u1 radius1 [u2 radius2 ...]
buildevol
.Purpose
These three commands work together to blend shapes with evolving
radius. First you give the shape and the name of the result with the
mkevol command. Then you describe edges to be blended with the
updatevol command., for each edge you give a set of pairs : parameter
radius, the parameters will be scaled along the edge and the radius
function interpolated for the whole edge. At last the buildevol
command computes the result.
.Example
# makes an evolved radius on a box
box b 10 10 10
mkevol b b
# click an edge
updatevol . 0 1 1 3 2 2
buildevol
.Warning
.See also
.Index
buildevol command
mkevol command
updatevol command
**Topology analysis
Analysis of shapes includes the commands to compute length, area
volumes and inertia properties.
- Use lprops, sprops, vprops to compute properties.
- Use bounding to display the bounding box of a shape.
*** lprops, sprops, vprops
.Synopsis
lprops shape
sprops shape
vprops shape
.Purpose
lprops computes massic properties of all edges in the shape with a
linear density of 1, sprops of all faces with a surfacic density of 1
and vprops of all solids with a density of 1.
The three commands print the mass, which is either the length, the
area or the volume, the coordinates of the center of gravity, the
matrix of inertia and the moments. The center and the main axis of
inertia are displayed.
.Example
# volume of a cylinder
pcylinder c 10 20
vprops c
==> results
Mass : 6283.18529981086
Center of gravity :
X = 4.1004749224903e-06
Y = -2.03392858349861e-16
Z = 9.9999999941362
Matrix of Inertia :
366519.141445068 5.71451850691484e-12 0.257640437382627
5.71451850691484e-12 366519.141444962 2.26823064169991e-10
0.257640437382627 2.26823064169991e-10 314159.265358863
Moments :
IX = 366519.141446336
IY = 366519.141444962
IZ = 314159.265357595
.Warning
.See also
.Index
lprops command
sprops command
vprops command
length
area
volume
inertia
*** bounding
.Synopsis
bounding shape
.Purpose
Display the bounding box of a shape and returns the string "xmin ymin
zmin xmax ymax zmax"
.Example
# bounding box of a torus
ptorus t 20 5
bounding t
==>
-25.000000100000001 -25.000000100000001 -5.0000001000000003
25.000000100000001 25.000000100000001 5.0000001000000003
.Warning
.See also
.Index
bounding command
box, bounding