IRIT Ver. 11 User`s Manual

IRIT Ver. 11 User`s Manual
IRIT
Ver. 11 User’s Manual
A Solid modeling Program
(C) Copyright 1989-2015 Gershon Elber
EMail: [email protected]
Join IRIT mailing list: [email protected]
Mailing list: [email protected]
Bug reports: [email protected]
WWW Page: http://www.cs.technion.ac.il/~irit
This manual is for IRIT Ver. 11.
Contents
1
Introduction
1
2
Copyrights
1
3
Command Line Options and Set Up
3.1
IBM PC OS2 Specific Set Up . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.2
IBM PC Window 95/98/NT/2000/XP Specific Set Up . . . . . . . . . . . . . . . . . .
3.3
Unix Specific Set Up . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1
4
4
5
4
First Usage
5
5
Line Editing
6
6
Data Types
6
7
Commands summary
7
8
Functions and Variables
9
9
Language description
10
11
12
Operator overloading
10.1 Overloading + . . . . . . . . . . . . . . . .
10.2 Overloading − . . . . . . . . . . . . . . . .
10.3 Overloading ∗ . . . . . . . . . . . . . . . .
10.4 Overloading / . . . . . . . . . . . . . . . .
10.5 Overloading ˆ . . . . . . . . . . . . . . .
10.6 Overloading Equal (Assignments) . . . . .
10.7 Comparison operators ==, ! =, <, >, <=,
10.8 Logical operators &&, , ! . . . . . . . .
10.9 Geometric Boolean Operations . . . . . .
10.10 Priority of operators . . . . . . . . . . . .
10.11 Grammar . . . . . . . . . . . . . . . . . .
. . .
. . .
. . .
. . .
. . .
. . .
>=
. . .
. . .
. . .
. . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
14
14
14
15
16
16
16
16
17
17
21
21
Function Description
11.1 NumericType returning functions
11.1.1 ABS . . . . . . . . . . . .
11.1.2 ACOS . . . . . . . . . . .
11.1.3 AREA . . . . . . . . . . .
11.1.4 ASIN . . . . . . . . . . . .
11.1.5 ATAN . . . . . . . . . . .
11.1.6 ATAN2 . . . . . . . . . .
11.1.7 COS . . . . . . . . . . . .
11.1.8 CLNTEXEC . . . . . . .
11.1.9 CPOLY . . . . . . . . . .
11.1.10 DSTPTLN . . . . . . . .
11.1.11 DSTPTPLN . . . . . . . .
11.1.12 DSTLNLN . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
21
21
21
21
21
22
22
22
22
22
23
23
23
23
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
11.1.13 EXP . . . . . . . . . . . . .
11.1.14 FLOOR . . . . . . . . . . .
11.1.15 FMOD . . . . . . . . . . . .
11.1.16 LN . . . . . . . . . . . . . .
11.1.17 LOG . . . . . . . . . . . . .
11.1.18 MESHSIZE . . . . . . . . .
11.1.19 POWER . . . . . . . . . . .
11.1.20 RANDOM . . . . . . . . . .
11.1.21 SIN . . . . . . . . . . . . .
11.1.22 SIZEOF . . . . . . . . . . .
11.1.23 SQRT . . . . . . . . . . . .
11.1.24 TAN . . . . . . . . . . . . .
11.1.25 THISOBJ . . . . . . . . . .
11.1.26 VOLUME . . . . . . . . . .
11.2 GeometricType returning functions
11.2.1 ADAPISO . . . . . . . . . .
11.2.2 ALGSUM . . . . . . . . . .
11.2.3 ANALYFIT . . . . . . . . .
11.2.4 ANIMEVAL . . . . . . . . .
11.2.5 ANTIPODAL . . . . . . . .
11.2.6 AOFFSET . . . . . . . . . .
11.2.7 ARC . . . . . . . . . . . . .
11.2.8 ARC360 . . . . . . . . . . .
11.2.9 AREPARAM . . . . . . . .
11.2.10 BBOX . . . . . . . . . . . .
11.2.11 BELTCURVE . . . . . . . .
11.2.12 BFROM2IMG . . . . . . . .
11.2.13 BFROM3IMG . . . . . . . .
11.2.14 BLND2SRFS . . . . . . . .
11.2.15 BLHERMITE . . . . . . . .
11.2.16 BLSHERMITE . . . . . . .
11.2.17 BLOSSOM . . . . . . . . .
11.2.18 BOOLONE . . . . . . . . .
11.2.19 BOOLSUM . . . . . . . . .
11.2.20 BOUNDARY . . . . . . . .
11.2.21 BOX . . . . . . . . . . . . .
11.2.22 BSCTCONCN2 . . . . . . .
11.2.23 BSCTCONCON . . . . . .
11.2.24 BSCTCONCYL . . . . . . .
11.2.25 BSCTCONLN . . . . . . .
11.2.26 BSCTCONPL . . . . . . . .
11.2.27 BSCTCONPT . . . . . . .
11.2.28 BSCTCONSPR . . . . . . .
11.2.29 BSCTCYLCYL . . . . . . .
11.2.30 BSCTCYLPL . . . . . . . .
11.2.31 BSCTCYLPT . . . . . . . .
11.2.32 BSCTCYLSPR . . . . . . .
11.2.33 BSCTPLNLN . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
23
23
23
23
24
24
24
24
24
24
25
25
25
25
25
25
26
27
28
28
28
29
30
30
31
31
31
33
33
33
34
35
36
36
38
38
38
39
39
39
40
40
41
41
41
42
42
43
11.2.34
11.2.35
11.2.36
11.2.37
11.2.38
11.2.39
11.2.40
11.2.41
11.2.42
11.2.43
11.2.44
11.2.45
11.2.46
11.2.47
11.2.48
11.2.49
11.2.50
11.2.51
11.2.52
11.2.53
11.2.54
11.2.55
11.2.56
11.2.57
11.2.58
11.2.59
11.2.60
11.2.61
11.2.62
11.2.63
11.2.64
11.2.65
11.2.66
11.2.67
11.2.68
11.2.69
11.2.70
11.2.71
11.2.72
11.2.73
11.2.74
11.2.75
11.2.76
11.2.77
11.2.78
11.2.79
11.2.80
11.2.81
BSCTPLNPT . . .
BSCTSPRLN . . .
BSCTSPRPL . . .
BSCTSPRPT . . .
BSCTSPRSPR . .
BSCTTRSPT . . .
BSCTTRSSPR . .
BZR2BSP . . . . .
BSP2BZR . . . . .
C2CONTACT . . .
C2RECTRGN . . .
CALPHASECTOR
CANGLEMAP . .
CARCLEN . . . .
CAREA . . . . . .
CARRANGMNT .
CARNGMNT2 . .
CBEZIER . . . . .
CBIARCS . . . . .
CBISECTOR2D .
CBISECTOR3D .
CBSPLINE . . . .
CCINTER . . . . .
CCRVTR . . . . .
CCRVTR . . . . .
CCRVTREVAL . .
CCUBICS . . . . .
CDERIVE . . . . .
CDIVIDE . . . . .
CEDITPT . . . . .
CENVOFF . . . .
CEVAL . . . . . .
CEXTREMES . .
CFNCRVTR . . .
CHELIX . . . . . .
CIEXTREME . . .
CINFLECT . . . .
CINTEG . . . . .
CINTERP . . . . .
CIRCLE . . . . . .
CIRCPOLY . . . .
CLNTCRSR . . .
CLNTREAD . . .
CMESH . . . . . .
CMOEBIUS . . . .
CMORPH . . . . .
CMULTIRES . . .
CNORMAL . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
43
43
44
44
44
45
45
45
46
46
47
48
48
49
50
50
51
53
53
54
56
57
58
60
60
61
62
62
62
64
64
65
65
65
66
66
67
68
69
70
70
71
71
72
72
72
73
75
11.2.82
11.2.83
11.2.84
11.2.85
11.2.86
11.2.87
11.2.88
11.2.89
11.2.90
11.2.91
11.2.92
11.2.93
11.2.94
11.2.95
11.2.96
11.2.97
11.2.98
11.2.99
11.2.100
11.2.101
11.2.102
11.2.103
11.2.104
11.2.105
11.2.106
11.2.107
11.2.108
11.2.109
11.2.110
11.2.111
11.2.112
11.2.113
11.2.114
11.2.115
11.2.116
11.2.117
11.2.118
11.2.119
11.2.120
11.2.121
11.2.122
11.2.123
11.2.124
11.2.125
11.2.126
11.2.127
11.2.128
11.2.129
CNRMLCRV .
CNVXHULL .
COERCE . . .
COMPOSE . .
CON2 . . . . .
CONE . . . . .
CONICSEC . .
CONTOUR . .
CONVEX . . .
COORD . . . .
COVERISO . .
COVERPT . .
CPINCLUDE .
CPOWER . . .
CRAISE . . . .
CRC2CRVTAN
CREDUCE . .
CREFINE . . .
CREGION . .
CREPARAM .
CROSSEC . . .
CRV2TANS . .
CRVKERNEL
CRVLNDST . .
CRVPTDST . .
CRVPTTAN .
CSINE . . . . .
CSPIRAL . . .
CSURFACE . .
CTANGENT .
CTLPT . . . .
CTRIMSRF . .
CTRLCYCLE .
CMESH . . . .
CUBICCRVS .
CVIEWMAP .
CVISIBLE . . .
CYLIN . . . . .
CZEROS . . .
DIST2FF . . .
DUALITY . . .
ELLIPSE3PT .
EVOLUTE . .
EXTRUDE . .
FFCMPCRV .
FFCOMPAT .
FFCTLPTS . .
FFEXTEND .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
75
75
76
77
78
79
80
81
82
82
83
84
85
86
86
86
87
87
88
89
90
90
91
92
92
93
95
95
95
97
97
98
98
99
99
100
100
101
101
102
104
104
105
106
107
108
108
108
11.2.130
11.2.131
11.2.132
11.2.133
11.2.134
11.2.135
11.2.136
11.2.137
11.2.138
11.2.139
11.2.140
11.2.141
11.2.142
11.2.143
11.2.144
11.2.145
11.2.146
11.2.147
11.2.148
11.2.149
11.2.150
11.2.151
11.2.152
11.2.153
11.2.154
11.2.155
11.2.156
11.2.157
11.2.158
11.2.159
11.2.160
11.2.161
11.2.162
11.2.163
11.2.164
11.2.165
11.2.166
11.2.167
11.2.168
11.2.169
11.2.170
11.2.171
11.2.172
11.2.173
11.2.174
11.2.175
11.2.176
11.2.177
FFEXTREMA .
FFEXTREME .
FFGTYPE . . .
FFKNTLNS . . .
FFKNTVEC . .
FFMATCH . . .
FFMERGE . . .
FFMESH . . . .
FFMSIZE . . . .
FFORDER . . .
FFPOLES . . . .
FFPTDIST . . .
FFPTTYPE . . .
FFSPLIT . . . .
FFSPLTPOLES
FITPMODEL . .
FIXPLGEOM . .
FIXPLNRML . .
FMLNANAL . .
GBOX . . . . . .
GETATTR . . .
GETLINE . . . .
GETNAME . . .
GGINTER . . .
GPOINTLIST .
GPOLYGON . .
GPOLYLINE . .
HAUSDORFF .
HAUSDRPTS . .
HERMITE . . .
ILOFFSET . . .
IMPLCTTRANS
INSTANCE . . .
IRITSTATE . . .
ISGEOM . . . .
ISOCLINE . . .
KNOTCLEAN .
KNOTREMOVE
LINTERP . . . .
LOFFSET . . . .
MATDECOMP .
MATDECOMP2
MATRECOMP .
MAXEDGELEN
MBEZIER . . . .
MBISECTOR . .
MBSPLINE . . .
MDERIVE . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
109
109
110
110
110
110
111
111
111
112
112
112
113
113
114
114
115
115
116
116
117
117
118
118
119
119
120
120
121
121
122
122
122
123
125
126
126
126
127
127
128
128
128
128
129
129
130
131
11.2.178
11.2.179
11.2.180
11.2.181
11.2.182
11.2.183
11.2.184
11.2.185
11.2.186
11.2.187
11.2.188
11.2.189
11.2.190
11.2.191
11.2.192
11.2.193
11.2.194
11.2.195
11.2.196
11.2.197
11.2.198
11.2.199
11.2.200
11.2.201
11.2.202
11.2.203
11.2.204
11.2.205
11.2.206
11.2.207
11.2.208
11.2.209
11.2.210
11.2.211
11.2.212
11.2.213
11.2.214
11.2.215
11.2.216
11.2.217
11.2.218
11.2.219
11.2.220
11.2.221
11.2.222
11.2.223
11.2.224
11.2.225
MDIVIDE . . . .
MERGEPLLN .
MERGEPOLY .
MEVAL . . . . .
MFROM2IMG .
MFROM3IMG .
MFROMMESH .
MFROMMV . .
MMERGE . . . .
MOFFSET . . .
MOMENT . . . .
MPOWER . . .
MRAISE . . . .
MRCHCUBE . .
MREFINE . . .
MREGION . . .
MREPARAM . .
MREVERSE . .
MSCIRC . . . . .
MSCONE . . . .
MSSPHERE . .
MUNIVZERO . .
MVCONTACT .
MVEXPLICIT .
MVINTER . . .
NCCNTRPATH
NCPCKTPATH
MZERO . . . . .
MPROMOTE . .
NIL . . . . . . .
OFFSET . . . .
ORTHOTOMC .
PATTRIB . . . .
PCIRCLE . . . .
PCRVTR . . . .
PDECIMATE . .
PDOMAIN . . .
PINTERP . . . .
PIMPRTNC . . .
PLANE . . . . .
PLANECLIP . .
PLN3PTS . . . .
PMORPH . . . .
PNORMAL . . .
POINT . . . . .
POLARSIL . . .
POLY . . . . . .
POLYHOLES . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
132
132
133
133
134
134
135
136
136
136
137
137
137
138
140
140
140
141
141
141
141
142
142
143
143
143
144
145
145
145
146
147
147
148
148
149
149
150
150
150
151
151
151
151
152
152
152
153
11.2.226
11.2.227
11.2.228
11.2.229
11.2.230
11.2.231
11.2.232
11.2.233
11.2.234
11.2.235
11.2.236
11.2.237
11.2.238
11.2.239
11.2.240
11.2.241
11.2.242
11.2.243
11.2.244
11.2.245
11.2.246
11.2.247
11.2.248
11.2.249
11.2.250
11.2.251
11.2.252
11.2.253
11.2.254
11.2.255
11.2.256
11.2.257
11.2.258
11.2.259
11.2.260
11.2.261
11.2.262
11.2.263
11.2.264
11.2.265
11.2.266
11.2.267
11.2.268
11.2.269
11.2.270
11.2.271
11.2.272
11.2.273
PPINCLUDE .
PPINTER . . .
PPROPFTCH
PRINTER . . .
PRISA . . . . .
PSUBDIV . . .
PT3BARY . . .
PTHMSPR . .
PTLNPLN . .
PTPTLN . . .
PTREGISTER
PTS2PLLN . .
PTS2PLYS . .
PTSLNLN . . .
QUADCRVS .
QUADRIC . .
RAYTRAPS .
RFLCTLN . .
RRINTER . . .
RULEDFIT . .
RULEDSRF . .
RULEDTV . .
SACCESS . . .
SASPCTGRPH
SASYMPEVAL
SBEZIER . . .
SBISECTOR .
SBSPLINE . .
SCRVTR . . .
SCRVTREVAL
SDDMMAP . .
SDERIVE . . .
SDIVCRV . . .
SDIVIDE . . .
SELFINTER .
SETCOVER .
SEDITPT . . .
SEVAL . . . .
SFLECNODAL
SFOCAL . . .
SFROMCRVS .
SGAUSS . . . .
SILHOUETTE
SINTERP . . .
SINTPCRVS .
SKEL2DINT .
SMEAN . . . .
SMERGE . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
154
154
154
155
155
156
157
157
157
158
158
158
158
159
159
159
160
160
162
163
163
165
165
167
167
168
169
170
170
172
173
173
174
174
175
176
176
177
177
177
178
179
180
181
182
183
183
185
11.2.274
11.2.275
11.2.276
11.2.277
11.2.278
11.2.279
11.2.280
11.2.281
11.2.282
11.2.283
11.2.284
11.2.285
11.2.286
11.2.287
11.2.288
11.2.289
11.2.290
11.2.291
11.2.292
11.2.293
11.2.294
11.2.295
11.2.296
11.2.297
11.2.298
11.2.299
11.2.300
11.2.301
11.2.302
11.2.303
11.2.304
11.2.305
11.2.306
11.2.307
11.2.308
11.2.309
11.2.310
11.2.311
11.2.312
11.2.313
11.2.314
11.2.315
11.2.316
11.2.317
11.2.318
11.2.319
11.2.320
11.2.321
SMESH . . . . .
SMOEBIUS . . .
SMOOTHNRML
SMOMENTS . .
SMORPH . . . .
SNORMAL . . .
SNRMLSRF . . .
SPARABOLC . .
SPHERE . . . .
SPLITLST . . .
SPOWER . . . .
SRADCRVTR .
SRAISE . . . . .
SRAYCLIP . . .
SREFINE . . . .
SREGION . . . .
SREPARAM . .
SREVERSE . . .
SRF2TANS . . .
SRF3TANS . . .
SRFFFORM . .
SRFLNDST . . .
SRFKERNEL . .
SRFPTDST . . .
SRINTER . . . .
SSINTER . . . .
SSINTR2 . . . .
STANGENT . .
STRIMSRF . . .
STRIVAR . . . .
SURFPREV . . .
SURFREV . . .
SURFREVAXS .
SURFREV2 . . .
SURFREVAX2 .
SVISIBLE . . . .
SVOLUME . . .
SWEEPSRF . .
SWPSCLSRF . .
SWUNGASUM .
SYMBCPROD .
SYMBDIFF . . .
SYMBDPROD .
SYMBIPROD . .
SYMBPROD . .
SYMBSUM . . .
TBEZIER . . . .
TBOOLONE . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
185
186
186
186
187
187
188
188
189
189
189
190
190
191
191
191
192
193
193
194
195
196
196
197
197
198
198
198
199
199
200
200
201
201
202
202
203
204
205
207
207
208
209
209
210
210
211
212
11.2.322 TBOOLSUM . . . . . .
11.2.323 TBSPLINE . . . . . . .
11.2.324 TCRVTR . . . . . . . .
11.2.325 TDEFORM . . . . . . .
11.2.326 TDERIVE . . . . . . . .
11.2.327 TDIVIDE . . . . . . . .
11.2.328 TEDITPT . . . . . . . .
11.2.329 TEVAL . . . . . . . . .
11.2.330 TEXT2GEOM . . . . .
11.2.331 TEXTLAYSHP . . . . .
11.2.332 TEXTGEOM . . . . . .
11.2.333 TEXTWARP . . . . . .
11.2.334 TFROMSRFS . . . . . .
11.2.335 TINTERP . . . . . . . .
11.2.336 TMORPH . . . . . . . .
11.2.337 TNSCRCR . . . . . . .
11.2.338 TOFFSET . . . . . . . .
11.2.339 TORUS . . . . . . . . .
11.2.340 TPINCLUDE . . . . . .
11.2.341 TRAISE . . . . . . . . .
11.2.342 TREFINE . . . . . . . .
11.2.343 TREGION . . . . . . .
11.2.344 TREPARAM . . . . . .
11.2.345 TRIANGL . . . . . . . .
11.2.346 TRIMSRF . . . . . . . .
11.2.347 TRMSRFS . . . . . . .
11.2.348 TSBEZIER . . . . . . .
11.2.349 TSBSPLINE . . . . . .
11.2.350 TSDERIVE . . . . . . .
11.2.351 TSEVAL . . . . . . . . .
11.2.352 TSGREGORY . . . . .
11.2.353 TSNORMAL . . . . . .
11.2.354 TVIMPJACOB . . . . .
11.2.355 TVJACOBIAN . . . . .
11.2.356 TVLOAD . . . . . . . .
11.2.357 TVPREV . . . . . . . .
11.2.358 TVOLUME . . . . . . .
11.2.359 TVREV . . . . . . . . .
11.2.360 TVZRJACOB . . . . . .
11.2.361 UVPOLY . . . . . . . .
11.2.362 ZCOLLIDE . . . . . . .
11.2.363 ZTEXTRUDE . . . . .
11.3 Object transformation functions
11.3.1 HOMOMAT . . . . . . .
11.3.2 MAP3PT2EQL . . . . .
11.3.3 MATPOSDIR . . . . . .
11.3.4 PROJMAT . . . . . . .
11.3.5 RFLCTMAT . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
212
213
214
215
216
216
217
217
218
218
220
221
221
222
224
224
224
225
225
227
227
228
228
229
229
230
231
232
233
234
234
235
235
235
236
236
237
237
237
239
239
239
240
241
241
241
242
242
11.3.6 ROTV2V . . . . .
11.3.7 ROTVEC . . . . .
11.3.8 ROTX . . . . . . .
11.3.9 ROTY . . . . . . .
11.3.10 ROTZ . . . . . . .
11.3.11 ROTZ2V . . . . .
11.3.12 ROTZ2V2 . . . . .
11.3.13 SCALE . . . . . .
11.3.14 TRANS . . . . . .
11.4 General purpose functions
11.4.1 ADWIDTH . . . .
11.4.2 ATTRIB . . . . . .
11.4.3 ATTRPROP . . .
11.4.4 ATTRVPROP . .
11.4.5 AWIDTH . . . . .
11.4.6 CHDIR . . . . . .
11.4.7 CLNTCLOSE . . .
11.4.8 CLNTWRITE . .
11.4.9 COLOR . . . . . .
11.4.10 COMMENT . . . .
11.4.11 CPATTR . . . . .
11.4.12 ERROR . . . . . .
11.4.13 EXEC . . . . . . .
11.4.14 EXIT . . . . . . .
11.4.15 FOR . . . . . . . .
11.4.16 HELP . . . . . . .
11.4.17 FNFREE . . . . .
11.4.18 FREE . . . . . . .
11.4.19 FUNCTION . . . .
11.4.20 IF . . . . . . . . .
11.4.21 INCLUDE . . . . .
11.4.22 INSERTPOLY . .
11.4.23 INTERACT . . . .
11.4.24 IQUERY . . . . . .
11.4.25 LIST . . . . . . . .
11.4.26 LOAD . . . . . . .
11.4.27 LOGFILE . . . . .
11.4.28 MSLEEP . . . . .
11.4.29 NREF . . . . . . .
11.4.30 NRMLCONE . . .
11.4.31 NTH . . . . . . . .
11.4.32 PAUSE . . . . . .
11.4.33 PRINTF . . . . . .
11.4.34 PRINTFILE . . .
11.4.35 PROCEDURE . .
11.4.36 RESET . . . . . .
11.4.37 RMATTR . . . . .
11.4.38 SAVE . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
242
242
242
242
243
243
243
243
243
243
243
243
244
244
245
245
245
245
246
246
246
246
247
247
247
248
248
248
248
249
250
250
250
251
251
251
252
252
252
253
253
253
253
254
254
254
255
255
11.4.39 SETNAME . . . . . . . . . .
11.4.40 SNOC . . . . . . . . . . . . .
11.4.41 SYSTEM . . . . . . . . . . .
11.4.42 TIME . . . . . . . . . . . . .
11.4.43 VARLIST . . . . . . . . . . .
11.4.44 VECTOR . . . . . . . . . . .
11.4.45 VIEW . . . . . . . . . . . . .
11.4.46 VIEWOBJ . . . . . . . . . .
11.4.47 VIEWSET . . . . . . . . . .
11.4.48 WHILE . . . . . . . . . . . .
11.5 System variables . . . . . . . . . . .
11.5.1 AXES . . . . . . . . . . . . .
11.5.2 DRAWCTLPT . . . . . . . .
11.5.3 FLAT4PLY . . . . . . . . . .
11.5.4 MACHINE . . . . . . . . . .
11.5.5 POLY APPROX OPT . . . .
11.5.6 POLY APPROX UV . . . . .
11.5.7 POLY APPROX TOL . . . .
11.5.8 POLY APPROX TRI . . . .
11.5.9 POLY MERGE COPLANAR
11.5.10 PRSP MAT . . . . . . . . . .
11.5.11 RESOLUTION . . . . . . . .
11.5.12 VIEW MAT . . . . . . . . . .
11.6 System constants . . . . . . . . . . .
11.6.1 AMIGA . . . . . . . . . . . .
11.6.2 APOLLO . . . . . . . . . . .
11.6.3 BEZIER TYPE . . . . . . . .
11.6.4 BLACK . . . . . . . . . . . .
11.6.5 BLUE . . . . . . . . . . . . .
11.6.6 BSPLINE TYPE . . . . . . .
11.6.7 CLIENTS ALL . . . . . . . .
11.6.8 COL . . . . . . . . . . . . . .
11.6.9 CTLPT TYPE . . . . . . . .
11.6.10 CURVE TYPE . . . . . . . .
11.6.11 CYAN . . . . . . . . . . . . .
11.6.12 CYGWIN . . . . . . . . . . .
11.6.13 DEPTH . . . . . . . . . . . .
11.6.14 E1 . . . . . . . . . . . . . . .
11.6.15 E2 . . . . . . . . . . . . . . .
11.6.16 E3 . . . . . . . . . . . . . . .
11.6.17 E4 . . . . . . . . . . . . . . .
11.6.18 E5 . . . . . . . . . . . . . . .
11.6.19 E6 . . . . . . . . . . . . . . .
11.6.20 E7 . . . . . . . . . . . . . . .
11.6.21 E8 . . . . . . . . . . . . . . .
11.6.22 E9 . . . . . . . . . . . . . . .
11.6.23 FALSE . . . . . . . . . . . . .
11.6.24 GEOM CONST . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
256
257
257
257
257
257
258
259
259
260
260
260
260
260
260
261
261
261
261
261
261
261
261
261
262
262
262
262
262
262
262
262
262
262
262
262
262
263
263
263
263
263
263
263
263
263
263
263
11.6.25
11.6.26
11.6.27
11.6.28
11.6.29
11.6.30
11.6.31
11.6.32
11.6.33
11.6.34
11.6.35
11.6.36
11.6.37
11.6.38
11.6.39
11.6.40
11.6.41
11.6.42
11.6.43
11.6.44
11.6.45
11.6.46
11.6.47
11.6.48
11.6.49
11.6.50
11.6.51
11.6.52
11.6.53
11.6.54
11.6.55
11.6.56
11.6.57
11.6.58
11.6.59
11.6.60
11.6.61
11.6.62
11.6.63
11.6.64
11.6.65
11.6.66
11.6.67
11.6.68
11.6.69
11.6.70
11.6.71
11.6.72
GEOM LINEAR . . . .
GEOM CIRCULAR . .
GEOM PLANAR . . . .
GEOM SPHERICAL . .
GEOM SRF OF REV .
GEOM EXTRUSION .
GEOM RULED SRF . .
GEOM DEVELOP SRF
GEOM SWEEP . . . .
GREEN . . . . . . . . .
GREGORY TYPE . . .
HP . . . . . . . . . . . .
IBMOS2 . . . . . . . . .
KV DISC OPEN . . . .
KV FLOAT . . . . . . .
KV OPEN . . . . . . . .
KV PERIODIC . . . . .
LINUX . . . . . . . . .
LIST TYPE . . . . . . .
MACOSX . . . . . . . .
MAGENTA . . . . . . .
MATRIX TYPE . . . .
MSDOS . . . . . . . . .
MODEL TYPE . . . . .
MULTIVAR TYPE . . .
NUMERIC TYPE . . .
OFF . . . . . . . . . . .
ON . . . . . . . . . . . .
P1 . . . . . . . . . . . .
P2 . . . . . . . . . . . .
P3 . . . . . . . . . . . .
P4 . . . . . . . . . . . .
P5 . . . . . . . . . . . .
P6 . . . . . . . . . . . .
P7 . . . . . . . . . . . .
P8 . . . . . . . . . . . .
P9 . . . . . . . . . . . .
PARAM CENTRIP . .
PARAM CHORD . . . .
PARAM NIELFOL . . .
PARAM UNIFORM . .
PI . . . . . . . . . . . .
PLANE TYPE . . . . .
POINT TYPE . . . . .
POLY TYPE . . . . . .
POWER TYPE . . . . .
RED . . . . . . . . . . .
ROW . . . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
263
263
264
264
264
264
264
264
264
264
264
264
264
264
264
265
265
265
265
265
265
265
265
265
265
265
265
265
266
266
266
266
266
266
266
266
266
266
266
266
266
267
267
267
267
267
267
267
11.6.73
11.6.74
11.6.75
11.6.76
11.6.77
11.6.78
11.6.79
11.6.80
11.6.81
11.6.82
11.6.83
11.6.84
11.6.85
11.6.86
11.6.87
SGI . . . . . . . . . .
STRING TYPE . . . .
SURFACE TYPE . .
SUN . . . . . . . . . .
TRIMSRF TYPE . . .
TRISRF TYPE . . . .
TRIVAR TYPE . . .
TRUE . . . . . . . . .
UNDEF TYPE . . . .
UNIX . . . . . . . . .
UNTRIMMED TYPE
VECTOR TYPE . . .
WINDOWS . . . . . .
WHITE . . . . . . . .
YELLOW . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
267
267
267
267
267
267
268
268
268
268
268
268
268
268
268
12
Animation
268
12.1 How to create animation curves in IRIT . . . . . . . . . . . . . . . . . . . . . . . . . . 268
12.2 A more complete animation example . . . . . . . . . . . . . . . . . . . . . . . . . . . . 270
12.3 Another complete animation example . . . . . . . . . . . . . . . . . . . . . . . . . . . . 272
13
Display devices
13.1 Command Line Options . . . . . . . . . . . . . . . . . . . . . .
13.2 Configuration Options . . . . . . . . . . . . . . . . . . . . . . .
13.3 Interactive mode setup . . . . . . . . . . . . . . . . . . . . . . .
13.4 Basic Attributes . . . . . . . . . . . . . . . . . . . . . . . . . . .
13.5 Animation Mode . . . . . . . . . . . . . . . . . . . . . . . . . .
13.6 Advanced (Programmable) Hardware Graphics Support . . . .
13.6.1 HDDM (Hardware Deformation Displacement Mapping)
13.6.2 HFFD (Hardware Free Form Deformation) . . . . . . . .
13.7 Specific Comments . . . . . . . . . . . . . . . . . . . . . . . . .
13.8 Examples . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
14
15
16
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
Utilities - General Usage
287
Poly3d-h - Hidden Line Removing Program
15.1 Introduction . . . . . . . . . . . . . . . . . . .
15.2 Command Line Options . . . . . . . . . . . .
15.3 Configuration . . . . . . . . . . . . . . . . . .
15.4 Usage . . . . . . . . . . . . . . . . . . . . . .
Illustrt - Simple line illustration
16.1 Introduction . . . . . . . . . . .
16.2 Command Line Options . . . .
16.3 Usage . . . . . . . . . . . . . .
273
275
277
279
282
282
282
283
284
285
286
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
287
287
288
289
289
filter
289
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 289
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 290
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 291
17
Aisoshad - Simple line illustration filter
292
17.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 292
17.2 Command Line Options . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 292
17.3 Usage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 294
18
IZebra - Simple zebra style,
18.1 Introduction . . . . . . . .
18.2 Command Line Options .
18.3 Usage . . . . . . . . . . .
19
LineShad - Simple line illustration filter
297
19.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 297
19.2 Command Line Options . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 297
19.3 Usage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 300
20
ihidden - Hidden Curve Removing Program
20.1 Introduction . . . . . . . . . . . . . . . . . . .
20.2 Command Line Options . . . . . . . . . . . .
20.3 Configuration . . . . . . . . . . . . . . . . . .
20.4 Usage . . . . . . . . . . . . . . . . . . . . . .
21
parallel curve based rendering
295
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 295
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 295
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 297
Irender - Simple Scan Line Renderer
21.1 Introduction . . . . . . . . . . . . . .
21.2 Command Line Options . . . . . . .
21.3 Configuration . . . . . . . . . . . . .
21.4 Usage . . . . . . . . . . . . . . . . .
21.5 Advanced Usage . . . . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
300
300
301
302
302
.
.
.
.
.
.
.
.
.
.
.
.
.
302
. 302
. 303
. 305
. 305
. 305
22
3DS2Irit - AutoCad 3DS Data To IRIT file filter
311
22.1 Command Line Options . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 311
22.2 Usage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 311
23
Dat2Bin - Data To Binary Data file filter
312
23.1 Command Line Options . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 312
23.2 Usage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 312
24
Dat2Irit - Data To IRIT file filter
312
24.1 Command Line Options . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 312
24.2 Usage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 312
25
Dxf2Irit - DXF (Autocad) To IRIT filter
313
25.1 Command Line Options . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 313
25.2 Usage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 313
26
IGS2Irit - IGES Data To IRIT file filter
313
26.1 Command Line Options . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 313
26.2 Usage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 314
27
Iirit23js - IRIT To ThreeJS
27.1 Command Line Options .
27.2 Usage . . . . . . . . . . .
27.3 Advanced Usage . . . . .
filter
314
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 314
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 314
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 315
28
Irit2Dxf - IRIT To DXF (Autocad) filter
316
28.1 Command Line Options . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 316
28.2 Usage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 316
29
Irit2Hgl - IRIT To HPGL filter
316
29.1 Command Line Options . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 317
29.2 Usage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 317
30
Irit2IGS - IRIT To IGES filter
318
30.1 Command Line Options . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 318
30.2 Usage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 318
31
Irit2Iv - IRIT To SGI’s Inventor filter
318
31.1 Command Line Options . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 318
31.2 Usage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 319
32
Irit2Nff - IRIT To NFF filter
319
32.1 Command Line Options . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 319
32.2 Usage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 320
32.3 Advanced Usage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 320
33
Irit2Off - IRIT To OFF filter
321
33.1 Command Line Options . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 321
33.2 Usage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 322
34
Irit2Plg - IRIT To PLG (REND386) filter
322
34.1 Command Line Options . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 322
34.2 Usage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 322
35
Irit2pov - IRIT To POVRAY
35.1 Command Line Options . .
35.2 Usage . . . . . . . . . . . .
35.3 Advanced Usage . . . . . .
36
Irit2Ps - IRIT To PS filter
326
36.1 Command Line Options . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 326
36.2 Usage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 327
36.3 Advanced Usage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 328
37
Irit2Ray - IRIT To RAYSHADE filter
329
37.1 Command Line Options . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 329
37.2 Usage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 330
37.3 Advanced Usage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 331
raytracer filter
322
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 322
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 324
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 325
38
Irit2Scn - IRIT To SCENE (RTrace)
38.1 Command Line Options . . . . . . .
38.2 Usage . . . . . . . . . . . . . . . . .
38.3 Advanced Usage . . . . . . . . . . .
39
Irit2Stl - IRIT To STL filter
334
39.1 Command Line Options . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 334
39.2 Usage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 334
40
Irit2Wrl - IRIT To IGES filter
334
40.1 Command Line Options . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 335
40.2 Usage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 335
41
Irit2Wgl - IRIT To WGL filter
41.1 Command Line Options . . . .
41.2 Usage . . . . . . . . . . . . . .
41.3 Runtime Usage . . . . . . . . .
41.4 Browser Support . . . . . . . .
41.5 Usefull Links . . . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
filter
332
. . . . . . . . . . . . . . . . . . . . . . . . . . . . 332
. . . . . . . . . . . . . . . . . . . . . . . . . . . . 332
. . . . . . . . . . . . . . . . . . . . . . . . . . . . 333
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
335
335
336
337
337
337
42
Irit2Xfg - IRIT To XFIG filter
337
42.1 Command Line Options . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 337
42.2 Usage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 338
43
Obj2irit - Wavefront OBJ format To IRIT data files
338
43.1 Command Line Options . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 338
43.2 Usage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 339
44
Off2irit - Geom View Off format To IRIT data files
339
44.1 Command Line Options . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 339
44.2 Usage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 339
45
Stl2Irit - Stl (stereo lithograph) data To IRIT file filter
339
45.1 Command Line Options . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 339
45.2 Usage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 339
46
Data File Format
340
47
Bugs and Limitations
349
IRIT Solid modeler
1
G. Elber
1
Introduction
IRIT is a solid modeler developed for educational purposes. Although small, it is now powerful enough
to create quite complex scenes.
IRIT started as a polygonal solid modeler and was originally developed on an IBM PC under
MSDOS. Version 2.0 was also ported to X11 and version 3.0 to SGI 4D systems. Version 3.0 also
includes quite a few free form curves and surfaces tools. See the UPDATE.NEW file for more detailed
update information. In Version 4.0, the display devices were enhanced, freeform curves and surfaces are
more extensively supported, functions can be defined, and numerous improvement and optimizations
are added.
2
Copyrights
BECAUSE IRIT AND ITS SUPPORTING TOOLS AS DOCUMENTED IN THIS DOCUMENT ARE
LICENSED FREE OF CHARGE, I PROVIDE ABSOLUTELY NO WARRANTY, TO THE EXTENT
PERMITTED BY APPLICABLE STATE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING, I GERSHON ELBER PROVIDE THE IRIT PROGRAM AND ITS SUPPORTING TOOLS ”AS
IS” WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING,
BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THESE PROGRAMS IS WITH YOU. SHOULD THE IRIT PROGRAMS PROVE
DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW WILL GERSHON ELBER, BE
LIABLE TO YOU FOR DAMAGES, INCLUDING ANY LOST PROFITS, LOST MONIES, OR
OTHER SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
USE OR INABILITY TO USE (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR A
FAILURE OF THE PROGRAMS TO OPERATE WITH PROGRAMS NOT DISTRIBUTED BY
GERSHON ELBER) THE PROGRAMS, EVEN IF YOU HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES, OR FOR ANY CLAIM BY ANY OTHER PARTY.
IRIT is a freeware solid modeler. It is not public domain since we hold copyrights on it. However,
unless you are to sell or attempt to make money from any part of this code and/or any model you
made with this solid modeler, you are free to make anything you want with it. In order to use IRIT
commercially, you must license it first - contact us is such a case.
IRIT can be compiled and executed on numerous Unix/Linux systems as well as Windows 98/NT/2000/XP/Vista,
Mac, OS2, and AmigaDOS. Also, under Windows, IRIT must be installed at a directory/path with no
spaces.
You are not obligated to me or to anyone else in any way by using IRIT. You are encouraged to share
any model you made with it, but the models you made with it are yours, and you have no obligation
to share them. You can use this program and/or any model created with it for non commercial and
non profit purposes only. An acknowledgement on the way the models were created would be nice but
is not required.
3
Command Line Options and Set Up
The IRIT program reads a file called irit.cfg each time it is executed. This file configures the system.
It is a regular text file with comments, so you can edit it and properly modify it for your environment.
G. Elber
IRIT Solid modeler
2
This file is being searched for in the directory specified by the IRIT PATH environment variable. On
Windows 64 bits compilation IRIT PATH64 will be searched first, with a fall back to IRIT PATH. For
example ’setenv IRIT PATH /u/gershon/irit/bin/’. If the variable is not set only the current directory
is being searched for irit.cfg.
In addition, if it exists, a file by the name of iritinit.irt will be automatically executed before any
other ’.irt’ file. This file may contain any IRIT command. It is the proper place to put your predefined
functions and procedures, if you have any. This file will be searched much the same way irit.cfg is.
The name of this initialization file may be changed by setting the StartFile entry in the configuration
file. This file is far more important starting at version 4.0, because of the new function and procedure
definition that has been added, and which is used to emulate BEEP, VIEW, and INTERACT, for
example.
The solid modeler can be executed in text mode (see the .cfg and the -t flag below) on virtually
any system with a C compiler.
Under all systems the following environment variables must be set and updated:
path
IRIT PATH
IRIT PATH64
IRIT DISPLAY
IRIT DISPLAY64
IRIT BIN IPC
Add to path the directory where IRIT’s binaries are.
Directory with config., help and IRIT’s binary files.
On windows this access the 32 bit version of IRIT.
Directory with config., help and IRIT’s 64 bits version
(windows only)
The graphics driver program/options. Must be in path.
The graphics driver program/options for IRIT’s 64 bits
version (windows only). Must be in path.
If set, uses binary Inter Process Communication.
For example,
set path = ($path /u/gershon/irit/bin)
setenv IRIT_PATH /u/gershon/irit/bin/
setenv IRIT_DISPLAY "xgldrvs -s-"
setenv IRIT_BIN_IPC 1
to set /u/gershon/irit/bin as the binary directory and to use the sgi’s gl driver. If IRIT DISPLAY
is not set, the server (i.e., the IRIT program) will prompt and wait for you to run a client (i.e., a
display driver). if IRIT PATH is not set, none of the configuration files, nor the help file will be found.
If IRIT BIN IPC is not set, text based IPC is used, which is far slower. There is no real reason not
to use IRIT BIN IPC, unless it does not work for you, for some reason.
In addition, the following optional environment variables may be set.
G. Elber
IRIT Solid modeler
IRIT MALLOC
IRIT MALLOC ID
IRIT NO SIGNALS
IRIT SERVER HOST
IRIT SERVER PORT
IRIT TIME OUT
IRIT INCLUDE
LD LIBRARY PATH
3
If set, apply dynamic memory consistency testing.
Programs will execute much slower in this mode.
Sets the allocation unique ID when program will scream
(abort) once this pointer is allocated, if IRIT MALLOC
is set.
If set, no signals are caught by IRIT.
Internet Name of IRIT server (used by graphics driver).
Used internally to the TCP socket number. Should not
be set by users.
Integer (seconds) for timing out when trying
to execute a display device from IRIT. Default is 10
seconds.
A semicolon separated list of directories, in which to
look for the irt files to include. See INCLUDE command.
If shared libraries are created, this variable must be
updated to point to the shared libraries’ directory.
For example,
setenv
setenv
setenv
setenv
setenv
IRIT_MALLOC 1
IRIT_MALLOC_ID 1234567890
IRIT_NO_SIGNALS 1
IRIT_SERVER_HOST irit.cs.technion.ac.il
IRIT_INCLUDE "/d2/gershon/irit/irit/scripts;/tmp"
IRIT MALLOC is useful for programmers, or when reporting a memory fatal error occurrence.
This variable, when set as a non zero value, will activate the following (hexadecimal bit settings with
any combination of the following):
0x01
0x02
0x04
0x08
0x10
0x20
A test for overwriting before the dynamic memory
is allocated or immediately after it. Cheap in time.
Savings of all allocated objects in a table for the
detection of freeing unallocated objects and consistency
of the entire dynamic memory. Time expensive.
Zeros every freed object, once it is freed.
On Windows environments - enables CrtCheckMemory checks
every malloc/free, in debug compilation modes.
On Windows environments - enables CrtCheckMemory checks
every 16 mallocs/frees, in debug compilation modes.
On Windows environments - keeps complete call stack info
on every malloc, in debug compilation modes.
IRIT NO SIGNALS is also useful for debugging when contorl-C is used within a debugger. The
IRIT SERVER HOST/PORT controls the server/client (IRIT/Display device) communication.
IRIT SERVER HOST and IRIT SERVER PORT are used in the unix and Window NT ports of
IRIT.
See the section on graphics drivers for more details.
G. Elber
IRIT Solid modeler
4
A session can be logged into a file as set via LogFile in the configuration file. See also the LOGFILE
command.
The following command line options are available:
IRIT [-t] [-s] [-g] [-q] [-i] [-z] {[-m ...]} [file.irt]
-t
-s
-g
-q
-i
-z
-m
file.irt
3.1
Puts IRIT into text mode. No graphics will be displayed and
the display commands will be ignored. This is useful when
one needs to execute an IRIT file to create data on a tty
device...
Run a Script and quit without prompting to stdin.
IRIT under GUI mode. Should not be used by end users.
Quiet mode with no regular output to stdout.
IRIT under Interactive mode. Should not be used by end users.
Prints usage message and current configuration/version
information.
Optional option... If IRIT is compiled for debugging, allows
setting three addition parameters of trap pointer, search
pointer, and abort counter.
A file to invoke directly instead of waiting to input from
stdin.
IBM PC OS2 Specific Set Up
Under OS2 the IRIT DISPLAY environment variable must be set (if set) to os2drvs.exe without any
option (-s- will be passed automatically). os2drvs.exe must be in a directory that is in the PATH
environment variable. IRIT BIN IPC can be used to signal binary IPC which is faster. Here is a
complete example:
set IRIT_PATH=c:\irit\bin\
set IRIT_DISPLAY=os2drvs -sset IRIT_BIN_IPC=1
assuming the directory specified by IRIT PATH holds the executables of IRIT and is in PATH.
If IRIT BIN IPC is not set, text based IPC is used which is far slower. There is no real reason not
to use IRIT BIN IPC unless it does not work for you, for some reason.
The OS2 executables are typically built using the EMX port of gnu C compiler. The distribution
of the executables does not include the EMX run time library and any attempt to run IRIT will fail.
You will get an error message such as ”File EMX does not exist”. You can get the run time from
ftp to ftp-os2.nmsu.edu (aliased also as hobbes.NMSU.Edu) cd to os2/unix/emx09c (or a newer
version number/level) get emxrt.zip and place its dlls in a place they would be found.
3.2
IBM PC Window 95/98/NT/2000/XP Specific Set Up
The NT port uses sockets and is, in this respect, similar to the Unix port. The envirnoment variables
IRIT DISPLAY, IRIT SERVER HOST, and IRIT BIN IPC should all be set in a similar way to the
Unix specific setup. As a direct result, the server (IRIT) and the display device can run on different
hosts. For example, the server might be running on an NT system while the display device will be
running on an SGI4D, exploiting the graphic’s hardware capabilities. Here is a complete example:
G. Elber
IRIT Solid modeler
5
set IRIT_PATH=c:\irit\bin\
set IRIT_DISPLAY=wntgdrvs -sset IRIT_BIN_IPC=1
Also, under Windows, IRIT must be installed in a directory/path with no spaces.
3.3
Unix Specific Set Up
Under UNIX using X11 (x11drvs driver), add the following options to your .Xdefaults. Most are self
explanatory. The Trans attributes control the transformation window, while the View attributes control
the view window. SubWin attributes control the subwindows within the transformation window.
#if COLOR
irit*Trans*BackGround:
irit*Trans*BorderColor:
irit*Trans*BorderWidth:
irit*Trans*TextColor:
irit*Trans*SubWin*BackGround:
irit*Trans*SubWin*BorderColor:
irit*Trans*Geometry:
irit*Trans*CursorColor:
irit*View*BackGround:
irit*View*BorderColor:
irit*View*BorderWidth:
irit*View*Geometry:
irit*View*CursorColor:
irit*MaxColors:
#else
irit*Trans*Geometry:
irit*Trans*BackGround:
irit*View*Geometry:
irit*View*BackGround:
irit*MaxColors:
#endif
4
NavyBlue
Red
3
Yellow
DarkGreen
Magenta
=150x500+500+0
Green
NavyBlue
Red
3
=500x500+0+0
Red
15
=150x500+500+0
Black
=500x500+0+0
Black
1
First Usage
Commands to IRIT are entered using a textual interface, usually from the same window from which
the program was executed.
Some important commands to begin with are:
1. include(”file.irt”); - will execute the commands in file.irt. Note include can be recursive up to
10 levels. To execute the demo (demo.irt) simply type ’include(”demo.irt”);’. Another way to run the
demo is by typing demo(); which is a predefined procedure defined in iritinit.irt.
2. help(””); - will print all available commands and how to get help on them. A file called irit.hlp
will be searched as irit.cfg is being searched (see above), to provide the help.
3. exit(); - close everything and exit IRIT.
G. Elber
IRIT Solid modeler
6
Most operators are overloaded. This means that you can multiply two scalars (numbers), or two
vectors, or even two matrices, with the same multiplication operator (∗). To get the on-line help on
the operator ’∗’, type ’help(”∗”);’
The best way to learn this program (as any other program...) is by trying it. Print the manual and
study each of the commands available. Study the demo programs (∗.irt) provided, as well.
The ”best” mode in which to use IRIT is via the emacs editor. With this distribution an emacs
mode for IRIT files (irt postfix) is provided (irit.el). Make your .emacs load this file automatically.
Loading file.irt will switch emacs into an IRIT mode that supports the following keystrokes:
Meta-E
Meta-R
Meta-S
Meta-H
Executes the current line
Executes the current Region (Between Cursor and Mark)
Executes a single line from input buffer
Prints IRIT help on the current WORD the point is on using ’help(”WORD”);’
The first time one of the above keystrokes is hit, emacs will fork an IRIT process so that IRIT’S stdin
is controlled via the above commands. This emacs mode was tested under various Unix environments,
under OS2 2.x/3.x, and under Windows 95/98/NT/2000/XP.
5
Line Editing
The IRIT interpreter provides full line editing capabilities. The following are the available control
options:
^a
^e
^f
^b
^d
^h (Backspace)
^i (Tab)
^k
^p
^n
^j (LineFeed)
Beginning of line
End of line
Forward one character
Backward one character
Delete current character
Delete backward one character
Toggles overwrite/insert mode
Kill to end of line
Get previous history line
Get next history line
Done with this line
Only lines entered from stdin will enter the history queue. The above control capabilities are fully
configurable via the irit.cfg configuration file.
6
Data Types
These are the Data Types recognized by the solid modeler. They are also used to define the calling
sequences of the different functions below:
IRIT Solid modeler
ConstantType
NumericType
VectorType
PointType
CtlPtType
PlaneType
MatrixType
PolygonType
PolylineType
CurveType
SurfaceType
TrimSrfType
TriSrfType
TrivarType
MultivarType
FreeformType
GeometricType
InstanceType
GeometricTreeType
StringType
AnyType
ListType
G. Elber
7
Scalar real type that cannot be modified.
Scalar real type.
3D real type vector.
3D real type point.
Control point of a freeform curve or surface.
3D real type plane.
4 by 4 matrix (homogeneous transformation matrix).
Object consists of polygons.
Object consists of polylines.
Object consists of curves.
Object consists of surfaces.
Object consists of trimmed surfaces.
Object consists of triangular surfaces
Object consists of trivariate functions.
Object consists of multivariate functions.
One of CurveType, SurfaceType, TrimSrfType,
TrivarType, MultivarType, TriSrfType.
One of Polygon/lineType, FreeformType.
Object with a GeometryType and a Transformation.
A list of GeometricTypes or GeometricTreeTypes.
Sequence of chars within double quotes - ”A string”.
Current implementation is limited to 80 chars.
Any of the above.
List of (any of the above type) objects. List
size is dynamically increased, as needed.
Although points and vectors are not the same, IRIT does not distinguish between them, most of
the time. In this future this might change.
7
Commands summary
These are all the commands and operators supported by the IRIT Solid Modeler:
G. Elber
IRIT Solid modeler
+
−
∗
/
^
=
==
!=
<
>
<=
>=
ABS
ACOS
ADAPISO
ADWIDTH
ALGSUM
ANALYFIT
ANIMEVAL
ANTIPODAL
AOFFSET
ARC
ARC360
AREA
AREPARAM
ASIN
ATAN
ATAN2
ATTRIB
ATTRPROP
ATTRVPROP
AWIDTH
BBOX
BELTCURVE
BFROM2IMG
BFROM3IMG
BLND2SRFS
BLHERMITE
BLSHERMITE
BLOSSOM
BOOLONE
BOOLSUM
BOUNDARY
BOX
BSCTCONCN2
BSCTCONCON
BSCTCONCYL
BSCTCONLN
BSCTCONPL
BSCTCONPT
BSCTCONSPR
BSCTCYLCYL
BSCTCYLPL
BSCTCYLPT
BSCTCYLSPR
BSCTPLNLN
BSCTPLNPT
BSCTSPRLN
BSCTSPRPL
BSCTSPRPT
BSCTSPRSPR
BSCTTRSPT
BSCTTRSSPR
BSP2BZR
BZR2BSP
C2CONTACT
C2RECTRGN
CALPHASECTOR
CANGLEMAP
CARCLEN
CAREA
CARRANGMNT
CARNGMNT2
CBEZIER
CBIARCS
CBISECTOR2D
CBISECTOR3D
CBSPLINE
CCINTER
CCRVTR
CCRVTR1PT
CCRVTREVAL
CCUBICS
CDERIVE
CDIVIDE
CEDITPT
CENVOFF
CEVAL
CEXTREMES
CFNCRVTR
CHDIR
CHELIX
CIEXTREME
CINFLECT
CINTERP
CINTEG
CIRCLE
CIRCPOLY
CLNTCLOSE
CLNTCRSR
CLNTEXEC
CLNTREAD
CLNTWRITE
CMESH
CMOEBIUS
CMORPH
CMULTIRES
CNORMAL
CNRMLCRV
CNVXHULL
COERCE
COLOR
COMMENT
COMPOSE
CON2
CONE
CONICSEC
CONTOUR
CONVEX
COORD
COS
COVERISO
COVERPT
CPATTR
CPINCLUDE
CPOLY
CPOWER
CRAISE
CRC2CRVTAN
CREDUCE
CREFINE
CREGION
CREPARAM
CROSSEC
CRV2TANS
CRVKERNEL
CRVLNDST
CRVPTDST
CRVPTTAN
CSINE
CSPIRAL
CSURFACE
CTANGENT
CTLPT
CTRIMSRF
CTRLCYCLE
CUBICCRVS
CVIEWMAP
CVISIBLE
CYLIN
CZEROS
DIST2FF
DSTPTLN
DSTPTPLN
DSTLNLN
DUALITY
ELLIPSE3PT
ERROR
EVOLUTE
EXEC
EXIT
EXP
EXTRUDE
FFCMPCRV
FFCOMPAT
FFCTLPTS
FFEXTEND
FFEXTREMA
FFEXTREME
FFGTYPE
FFKNTLNS
FFKNTVEC
FFMATCH
FFMERGE
FFMESH
FFMSIZE
FFORDER
FFPOLES
FFPTDIST
FFPTTYPE
FFSPLTPOLES
FFSPLIT
FITPMODEL
FIXPLGEOM
FIXPLNRML
FLOOR
FMLNANAL
FMOD
FNFREE
FOR
FREE
FUNCTION
GBOX
GETATTR
GETLINE
GETNAME
GGINTER
GPOINTLIST
GPOLYGON
GPOLYLINE
HAUSDORFF
HAUSDRPTS
HELP
HERMITE
HOMOMAT
IF
ILOFFSET
IMPLCTRANS
INCLUDE
INSERTPOLY
INSTANCE
INTERACT
IQUERY
IRITSTATE
ISGEOM
ISOCLINE
8
KNOTCLEAN
KNOTREMOVE
LINTERP
LIST
LN
LOAD
LOFFSET
LOG
LOGFILE
MAP3PT2EQL
MATDECOMP
MATDECOMP2
MATRECOMP
MATPOSDIR
MAXEDGELEN
MBEZIER
MBISECTOR
MBSPLINE
MDERIVE
MDIVIDE
MERGEPLLN
MERGEPOLY
MESHSIZE
MEVAL
MFROM2IMG
MFROM3IMG
MFROMMESH
MFROMMV
MMERGE
MOFFSET
MOMENT
MPOWER
MPROMOTE
MRAISE
MRCHCUBE
MREFINE
MREGION
MREPARAM
MREVERSE
MSCIRC
MSLEEP
MSCONE
MSSPHERE
MUNIVZERO
MVCONTACT
MVEXPLICIT
MVINTER
MZERO
NCCNTRPATH
NCPCKTPATH
NIL
G. Elber
IRIT Solid modeler
NREF
NRMLCONE
NTH
OFFSET
ORTHOTOMC
PATTRIB
PAUSE
PCIRCLE
PCRVTR
PDECIMATE
PDOMAIN
PINTERP
PIMPRTNC
PLANE
PLANECLIP
PLN3PTS
PMORPH
PNORMAL
POINT
POLARSIL
POLY
POLYHOLES
POWER
PPINCLUDE
PPINTER
PPROPFTCH
PRINTER
PRINTF
PRINTFILE
PRISA
PROCEDURE
PROJMAT
PSUBDIV
PT3BARY
PTHMSPR
PTLNPLN
PTPTLN
PTREGISTER
PTS2PLLN
8
PTS2PLYS
PTSLNLN
QUADCRVS
QUADRIC
RANDOM
RAYTRAPS
RFLCTLN
RFLCTMAT
RESET
RMATTR
ROTVEC
ROTV2V
ROTX
ROTY
ROTZ
ROTZ2V
ROTZ2V2
RRINTER
RULEDFIT
RULEDSRF
RULEDTV
SACCESS
SASPCTGRPH
SASYMPEVAL
SAVE
SBEZIER
SBISECTOR
SBSPLINE
SCALE
SCRVTR
SCRVTREVAL
SDDMMAP
SDERIVE
SDIVCRV
SDIVIDE
SEDITPT
SELFINTER
SETCOVER
SETNAME
SEVAL
SFLECNODAL
SFOCAL
SFROMCRVS
SGAUSS
SILHOUETTE
SIN
SINTERP
SINTPCRVS
SIZEOF
SKEL2DINT
SMEAN
SMERGE
SMESH
SMOEBIUS
SMOMENTS
SMOOTHNRML
SMORPH
SNOC
SNORMAL
SNRMLSRF
SPARABOLC
SPHERE
SPLITLST
SQRT
SRADCRVTR
SRAISE
SRAYCLIP
SREFINE
SREGION
SREPARAM
SREVERSE
SRF2TANS
SRF3TANS
SRFFFORM
SRFLNDST
SRFKERNEL
SRFPTDST
SRINTER
9
SSINTER
SSINTR2
STANGENT
STRIMSRF
STRIVAR
SURFPREV
SURFREV
SURFREVAXS
SURFREV2
SURFREVAX2
SVISIBLE
SVOLUME
SWEEPSRF
SWPSCLSRF
SWUNGASUM
SYMBCPROD
SYMBDIFF
SYMBDPROD
SYMBIPROD
SYMBPROD
SYMBSUM
SYSTEM
TAN
TBEZIER
TBOOLONE
TBOOLSUM
TBSPLINE
TCRVTR
TDEFORM
TDERIVE
TDIVIDE
TEDITPT
TEVAL
TEXTGEOM
TEXT2GEOM
TEXTLAYSHP
TEXTWARP
TFROMSRFS
TIME
TINTERP
THISOBJ
TMORPH
TNSCRCR
TOFFSET
TORUS
TPINCLUDE
TRAISE
TRANS
TREFINE
TREGION
TREPARAM
TRIANGL
TRIMSRF
TRMSRFS
TSBEZIER
TSBSPLINE
TSDERIVE
TSEVAL
TSGREGORY
TSNORMAL
TVIMPJACOB
TVJACOBIAN
TVLOAD
TVPREV
TVOLUME
TVREV
TVZRJACOB
UVPOLY
VARLIST
VECTOR
VIEW
VIEWOBJ
VIEWSET
VOLUME
WHILE
ZCOLLIDE
ZTEXTRUDE
Functions and Variables
This section lists all the functions supported by the IRIT system according to their classes - mostly,
the object type they return.
Functions that return a NumericType:
ABS
ACOS
AREA
ASIN
ATAN
ATAN2
COS
CLNTEXEC
CPOLY
DSTPTLN
DSTPTPLN
DSTLNLN
EXP
FLOOR
FMOD
LN
LOG
MESHSIZE
POWER
RANDOM
SIN
SIZEOF
SQRT
TAN
THISOBJ
VOLUME
G. Elber
IRIT Solid modeler
10
Functions that return a GeometricType:
ADAPISO
ALGSUM
ANALYFIT
ANIMEVAL
ANTIPODAL
AOFFSET
ARC
ARC360
AREPARAM
BBOX
BELTCURVE
BFROM2IMG
BFROM3IMG
BLND2SRFS
BLHERMITE
BLSHERMITE
BLOSSOM
BOOLONE
BOOLSUM
BOUNDARY
BOX
BSCTCONCN2
BSCTCONCON
BSCTCONCYL
BSCTCONLN
BSCTCONPL
BSCTCONPT
BSCTCONSPR
BSCTCYLCYL
BSCTCYLPL
BSCTCYLPT
BSCTCYLSPR
BSCTPLNLN
BSCTPLNPT
BSCTSPRLN
BSCTSPRPL
BSCTSPRPT
BSCTSPRSPR
BSCTTRSPT
BSCTTRSSPR
BSP2BZR
BZR2BSP
C2CONTACT
C2RECTRGN
CALPHASECTOR
CANGLEMAP
CARCLEN
CAREA
CARRANGMNT
CARNGMNT2
CBEZIER
CBIARCS
CBISECTOR2D
CBISECTOR3D
CBSPLINE
CCINTER
CCRVTR
CCRVTR1PT
CCRVTREVAL
CCUBICS
CDERIVE
CDIVIDE
CEDITPT
CENVOFF
CEVAL
CEXTREMES
CFNCRVTR
CHELIX
CIEXTREME
CINFLECT
CINTERP
CIRCLE
CIRCPOLY
CLNTCRSR
CLNTREAD
CMESH
CMOEBIUS
CMORPH
CMULTIRES
CNORMAL
CNRMLCRV
CNVXHULL
COERCE
COMPOSE
CON2
CONE
CONICSEC
CONTOUR
CONVEX
COORD
COVERISO
COVERPT
CPINCLUDE
CPOWER
CRAISE
CRC2CRVTAN
CREDUCE
CREFINE
CREGION
CREPARAM
CROSSEC
CRV2TANS
CRVKERNEL
CRVLNDST
CRVPTDST
CRVPTTAN
CSINE
CSPIRAL
CSURFACE
CTANGENT
CTLPT
CTRIMSRF
CTRLCYCLE
CUBICCRVS
CVIEWMAP
CVISIBLE
CYLIN
CZEROS
DIST2FF
DUALITY
ELLIPSE3PT
EVOLUTE
EXTRUDE
FFCMPCRV
FFCOMPAT
FFCTLPTS
FFEXTEND
FFEXTREMA
FFEXTREME
FFGTYPE
FFKNTLNS
FFKNTVEC
FFMATCH
FFMERGE
FFMESH
FFMSIZE
FFORDER
FFPOLES
FFPTDIST
FFPTTYPE
FFKNTLNS
FFSPLIT
FITPMODEL
FIXPLGEOM
FIXPLNRML
FMLNANAL
GBOX
GETATTR
GETLINE
GETNAME
GGINTER
GPOINTLIST
GPOLYGON
GPOLYLINE
HAUSDORFF
HAUSDRPTS
HERMITE
ILOFFSET
IMPLCTRANS
INSTANCE
IRITSTATE
ISGEOM
ISOCLINE
KNOTCLEAN
KNOTREMOVE
LINTERP
LOFFSET
MATDECOMP
MATDECOMP2
MATRECOMP
MAXEDGELEN
MBEZIER
MBISECTOR
MBSPLINE
MDERIVE
MDIVIDE
MERGEPLLN
MERGEPOLY
MEVAL
MFROM2IMG
MFROM3IMG
MFROMMESH
MFROMMV
MMERGE
MOFFSET
MOMENT
MPOWER
MPROMOTE
MRAISE
MRCHCUBE
MREFINE
MREGION
MREPARAM
MREVERSE
MSCIRC
MSCONE
MSSPHERE
MUNIVZERO
MVCONTACT
MVEXPLICIT
MVINTER
MZERO
NCCNTRPATH
NCPCKTPATH
NIL
G. Elber
IRIT Solid modeler
OFFSET
ORTHOTOMC
PATTRIB
PCIRCLE
PCRVTR
PDECIMATE
PDOMAIN
PINTERP
PIMPRTNC
PLANE
PLANECLIP
PLN3PTS
PMORPH
PNORMAL
POINT
POLARSIL
POLY
POLYHOLES
PPINCLUDE
PPINTER
PPROPFTCH
PRINTER
PRISA
PROCEDURE
PSUBDIV
PT3BARY
PTHMSPR
PTLNPLN
PTPTLN
PTREGISTER
PTS2PLLN
PTS2PLYS
PTSLNLN
QUADCRVS
QUADRIC
RAYTRAPS
RFLCTLN
RRINTER
RULEDFIT
RULEDSRF
RULEDTV
SACCESS
SASPCTGRPH
SASYMPEVAL
SBEZIER
SBISECTOR
SBSPLINE
SCRVTR
SCRVTREVAL
SDDMMAP
SDERIVE
SDIVCRV
SDIVIDE
SEDITPT
SELFINTER
SETCOVER
SEVAL
SFLECNODAL
SFOCAL
SFROMCRVS
SINTPCRVS
SGAUSS
SILHOUETTE
SINTERP
SINTPCRVS
SKEL2DINT
SMEAN
SMERGE
SMESH
SMOEBIUS
SMOMENTS
SMOOTHNRML
SMORPH
SNORMAL
SNRMLSRF
SPARABOLC
SPHERE
SPLITLST
SRADCRVTR
SRAISE
SRAYCLIP
SREFINE
SREGION
SREPARAM
SREVERSE
SRF2TANS
SRF3TANS
SRFFFORM
SRFLNDST
SRFKERNEL
SRFPTDST
SRINTER
SSINTER
SSINTR2
STANGENT
STRIMSRF
11
STRIVAR
SURFPREV
SURFREV
SURFREVAXS
SURFREV2
SURFREVAX2
SVISIBLE
SVOLUME
SWEEPSRF
SWPSCLSRF
SWUNGASUM
SYMBCPROD
SYMBDIFF
SYMBDPROD
SYMBIPROD
SYMBPROD
SYMBSUM
TBEZIER
TBOOLONE
TBOOLSUM
TBSPLINE
TCRVTR
TDEFORM
TDERIVE
TDIVIDE
TEDITPT
TEVAL
TEXTGEOM
TEXT2GEOM
TEXTLAYSHP
TEXTWARP
TFROMSRFS
TINTERP
TMORPH
TNSCRCR
TOFFSET
TORUS
TPINCLUDE
TRAISE
TREFINE
TREGION
TREPARAM
TRIANGL
TRIMSRF
TRMSRFS
TSBEZIER
TSBSPLINE
TSDERIVE
TSEVAL
TSGREGORY
TSNORMAL
TVIMPJACOB
TVJACOBIAN
TVLOAD
TVPREV
TVOLUME
TVREV
TVZRJACOB
UVPOLY
ZCOLLIDE
ZTEXTRUDE
Functions that create linear transformation matrices:
HOMOMAT
MAP3PT2EQL
MATPOSDIR
Miscellaneous functions:
PROJMAT
RFLCTMAT
ROTVEC
ROTV2V
ROTX
ROTY
ROTZ
ROTZ2V
ROTZ2V2
SCALE
TRANS
G. Elber
IRIT Solid modeler
ADWIDTH
ATTRIB
ATTRPROP
ATTRVPROP
AWIDTH
CHDIR
CLNTCLOSE
CLNTWRITE
COLOR
COMMENT
CPATTR
ERROR
EXEC
EXIT
FNFREE
FOR
FREE
FUNCTION
HELP
IF
INCLUDE
INSERTPOLY
INTERACT
IQUERY
LIST
LOAD
LOGFILE
MSLEEP
NREF
NRMLCONE
12
NTH
PAUSE
PRINTF
PRINTFILE
PROCEDURE
RESET
RMATTR
SAVE
SETNAME
SNOC
SYSTEM
TIME
VARLIST
VECTOR
VIEW
VIEWOBJ
VIEWSET
WHILE
Variables that are predefined in the system:
AXES
DRAWCTLPT
FLAT4PLY
MACHINE
POLY
POLY
POLY
POLY
APPROX
APPROX
APPROX
APPROX
OPT
UV
TOL
TRI
POLY MERGE COPLANAR
PRSP MAT
RESOLUTION
VIEW MAT
Constants that are predefined in the system:
AMIGA
APOLLO
BEZIER TYPE
BLACK
BLUE
BSPLINE TYPE
CLIENTS ALL
COL
CTLPT TYPE
CURVE TYPE
CYAN
CYGWIN
DEPTH
E1
E2
E3
E4
E5
E6
E7
9
E8
E9
FALSE
GREEN
GREGORY TYPE
HP
IBMOS2
KV DISC OPEN
KV FLOAT
KV OPEN
KV PERIODIC
LINUX
LIST TYPE
MACOSX
MAGENTA
MATRIX TYPE
MSDOS
MODEL TYPE
MULTIVAR TYPE
NUMERIC TYPE
OFF
ON
P1
P2
P3
P4
P5
P6
P7
P8
P9
PARAM CENTRIP
PARAM CHORD
PARAM NIELFOL
PARAM UNIFORM
PI
PLANE TYPE
POINT TYPE
POLY TYPE
POWER TYPE
RED
ROW
SGI
STRING TYPE
SURFACE TYPE
SUN
TRIMSRF TYPE
TRISRF TYPE
TRIVAR TYPE
TRUE
UNDEF TYPE
UNIX
UNTRIMMED TYPE
VECTOR TYPE
WINDOWS
WHITE
YELLOW
Language description
The front end of the IRIT Solid Modeler is an infix parser that mimics some C language behavior. The
infix operators that are supported are plus (+), minus (-), multiply (*), divide (/), and power (^), for
numeric operators, with the same precedence as in C.
IRIT Solid modeler
G. Elber
13
However, unlike the C language, these operators are overloaded, 1 or different action is taken, based
upon the different operands. This means that one can write ’1 + 2’, in which the plus sign denotes
a numeric addition, or one can write ’PolyObj1 + PolyObj2’, in which case the plus sign denotes the
Boolean operation of a union between two geometric objects. The exact way each operator is overloaded
is defined below.
In this environment, reals, integers, and even Booleans, are all represented as real types. Data are
automatically promoted as necessary. For example, the constants TRUE and FALSE are defined as
1.0 and 0.0, respectively.
Each expression is terminated by a semicolon. An expression can be as simple as ’a;’ which prints
the value of variable a, or as complex as:
for ( t = 1.1, 0.1, 1.9,
cb1 = csurface( sb, COL, t ):
color( cb1, green ):
snoc( cb1, cb_all )
);
While an expression is terminated with a semicolon, a colon is used to terminate mini-expressions
within an expression.
Once a complete expression is read in (i.e., a semicolon is detected) and parsed correctly (i.e. no
syntax errors are found), it is executed. Before each operator or a function is executed, parameter type
matching tests are made to make sure the operator can be applied to these operand(s), or that the
function gets the correct set of arguments.
The parser is totally case insensitive, so Obj, obj, and OBJ will refer to the same object, while
MergePoly, MERGEPOLY, and mergePoly will refer to the same function.
Objects (Variables, if you prefer) need not be declared. Simply use them when you need them.
Object names may be any alpha-numeric (and underscore) string of at most 30 characters. When
assigned to an old object, the old object will be automatically deleted and if necessary, its type will be
modified on the fly.
Example:
V
V
V
V
=
=
=
=
sin( 45 * pi / 180.0 );
V * vector( 1, 2, 3 );
V * rotx( 90 );
V * V;
will assign to V a NumericType equal to the sine of 45 degrees, the VectorType ( 1, 2, 3 ) scaled by
the sine of 45, rotate that vector around the X axis by 90 degrees, and finally a NumericType which is
the dot (inner) product of V with itself.
The parser will read from stdin, unless a file is specified on the command line or an INCLUDE
command is executed. In both cases, when the end of file is encountered, the parser will again wait for
input from stdin. In order to execute a file and quit at the end of the file, put an EXIT command as
the last command in the file.
1
In fact the C language does support overloaded operators to some extent: ’1 + 2’ and ’1.0 + 2.0’ implies invocation
of two different actions.
G. Elber
IRIT Solid modeler
10
14
Operator overloading
The basic operators +, −, ∗, /, and ^ are overloaded. This section describes what action is taken by
each of these operators depending on its arguments.
10.1
Overloading +
The + operator is overloaded above the following domains:
NumericType
PointType
VectorType
MatrixType
PolygonType
PolygonType
PolygonType
CurveType
CurveType
CtlPtType
ListType
StringType
StringType
ModelType
SurfaceType
TrimSrfType
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
NumericType
PolygonType
VectorType
MatrixType
PolygonType
SurfaceType
TrimSrfType
CurveType
CtlPtType
CtlPtType
ListType
StringType
RealType
ModelType
ModelType
ModelType
->
->
->
->
->
->
->
->
->
->
->
->
->
->
->
->
NumericType
PolygonType
VectorType
MatrixType
PolygonType
PolygonType
PolygonType
CurveType
CurveType
CurveType
ListType
StringType
StringType
ModelType
ModelType
ModelType
(Point polyline profiling)
(Vector addition)
(Matrix addition)
(Polygonal Boolean UNION operation)
(Polygonal Boolean UNION operation)
(Polygonal Boolean UNION operation)
(Curve curve profiling)
(Curve control point profiling)
(Control points profiling)
(Append lists operator)
(String concat)
(String concat, real as int string)
(Freeform Boolean UNION operation)
(Freeform Boolean UNION operation)
(Freeform Boolean UNION operation)
Note: Boolean UNION of two disjoint objects (no common volume) will result in the two objects
being combined. It is the USER’s responsibility to make sure that the non intersecting objects are also
disjoint - this system only tests for no intersection. Boolean UNION of two polyline objects will merge
the list of polylines.
10.2
Overloading −
The − operator is overloaded above the following domains:
As a binary operator:
NumericType
VectorType
MatrixType
PolygonType
PolygonType
PolygonType
ModelType
SurfaceType
TrimSrfType
-
NumericType
VectorType
MatrixType
PolygonType
SurfaceType
TrimSrfType
ModelType
ModelType
ModelType
As a unary operator:
->
->
->
->
->
->
->
->
->
NumericType
VectorType
MatrixType
PolygonType
PolygonType
PolygonType
ModelType
ModelType
ModelType
(Vectoric difference)
(Matrix difference)
(Polygonal Boolean SUBTRACT op.)
(Polygonal Boolean SUBTRACT op.)
(Polygonal Boolean SUBTRACT op.)
(Freeform Boolean SUBTRACT op.)
(Freeform Boolean SUBTRACT op.)
(Freeform Boolean SUBTRACT op.)
G. Elber
IRIT Solid modeler
-
NumericType
PointType
VectorType
CtlPtType
PlaneType
StringType
MatrixType
PolygonType
CurveType
SurfaceType
TrimSrfType
ModelType
->
->
->
->
->
->
->
->
->
->
->
->
NumericType
PointType
VectorType
CtlPtType
PlaneType
StringType
MatrixType
PolygonType
CurveType
SurfaceType
TrimSrfType
ModelType
15
(Scale vector by -1)
(Scale vector by -1)
(Scale vector by -1)
(Scale vector by -1)
(Reverse the order of string’s characters)
(Scale matrix by -1)
(Boolean NEGATION operation)
(Curve parameterization is reversed)
(Surface parameterization is reversed)
(Trim surface parameterization is reversed)
(Model inside/outside flip)
Note: Boolean SUBTRACT of two disjoint objects (no common volume) will result in an empty
object. For both a curve and a surface parameterization, reverse operation (binary minus) causes the
object normal to be flipped as a side effect.
10.3
Overloading ∗
The ∗ operator is overloaded above the following domains:
NumericType
VectorType
VectorType
VectorType
VectorType
PlaneType
MatrixType
MatrixType
MatrixType
MatrixType
MatrixType
MatrixType
MatrixType
PolygonType
PolygonType
PolygonType
InstanceType
ModelType
SurfaceType
TrimSrfType
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
NumericType
NumericType
CurveType
SurfaceType
VectorType
MatrixType
NumericType
PointType
CtlPtType
VectorType
MatrixType
GeometricType
ListType
PolygonType
SurfaceType
TrimSrfType
MatrixType
ModelType
ModelType
ModelType
->
->
->
->
->
->
->
->
->
->
->
->
->
->
->
->
->
->
->
->
NumericType
VectorType
CurveType
SurfaceType
NumericType
PlaneType
MatrixType
PointType
CtlPtType
VectorType
MatrixType
GeometricType
ListType
PolygonType
PolygonType
PolygonType
InstanceType
ModelType
ModelType
ModelType
(Vector scaling)
(Inner product projection)
(Inner product projection)
(Inner product)
(Plane transformation)
(Matrix Scaling)
(Point transformation)
(Ctl Point transformation)
(Vector transformation)
(Matrix multiplication)
(Object transformation)
(Object hierarchy transform.)
(Polygonal Boolean INTER. op.)
(Polygonal Boolean INTER. op.)
(Polygonal Boolean INTER. op.)
(Transform of Instance’s matrix)
(Freeform Boolean INTER. op.)
(Freeform Boolean INTER. op.)
(Freeform Boolean INTER. op.)
Note: Boolean INTERSECTION of two disjoint objects (no common volume) will result in an empty
object. Object hierarchy transform transforms any transformable object (GeometricType) found in the
list recursively. Boolean INTERSECTION of two planar (XY plane) polyline objects will compute the
intersection points of the two lists of polylines. Be aware that a plane multiplied by a matrix does not
always do what you might expected.
G. Elber
IRIT Solid modeler
10.4
16
Overloading /
The / operator is overloaded above the following domains:
NumericType
PointType
PointType
PolygonType
PolygonType
PolygonType
ModelType
SurfaceType
TrimSrfType
/
/
/
/
/
/
/
/
/
NumericType
PointType
PolygonType
PolygonType
SurfaceType
TrimSrfType
ModelType
ModelType
ModelType
->
->
->
->
->
->
->
->
->
NumericType
PolyType
PolygonType
PolygonType
PolygonType
PolygonType
ModelType
ModelType
ModelType
(Polyline between two pts)
(Point polyline profiling)
(Polygonal Boolean CUT operation)
(Polygonal Boolean CUT operation)
(Polygonal Boolean CUT operation)
(Freeform Boolean CUT operation)
(Freeform Boolean CUT operation)
(Freeform Boolean CUT operation)
Note: Boolean CUT of two disjoint objects (no common volume) will result with an empty object.
10.5
Overloading ˆ
The ^ operator is overloaded above the following domains:
NumericType
VectorType
MatrixType
PolygonType
StringType
StringType
^
^
^
^
^
^
NumericType
VectorType
NumericType
PolygonType
StringType
RealType
->
->
->
->
->
->
NumericType
VectorType
MatrixType
PolygonType
StringType
StringType
(Cross product)
(Matrix to the (int) power)
(Boolean MERGE operation)
(String concat)
(String concat, real as real string)
Note: Boolean MERGE simply merges the two sets of polygons without any intersection tests.
Matrix powers must be positive integers or -1 or -2, in which case the matrix inverse (if it exists) or
transpose is computed.
10.6
Overloading Equal (Assignments)
Assignments are allowed as side effects, in any place in an expression. If ”Expr” is an expression, then
”var = Expr” is the exact same expression with the side effect of setting Var to that value. There is
no guarantee of the order of evaluation, so using Vars that are set within the same expression is a bad
practice. Use parentheses to force the order of evaluation, i.e., ”( var = Expr )”.
10.7
Comparison operators ==, ! =, <, >, <=, >=
The conditional comparison operators can be applied to the following domains (o for a comparison
operator):
NumericType
StringType
PointType
VectorType
PlaneType
CtlPtType
MatrixType
o
o
o
o
o
o
o
NumericType
StringType
PointType
VectorType
PlaneType
CtlPtType
MatrixType
->
->
->
->
->
->
->
NumericType
NumericType
NumericType
NumericType
NumericType
NumericType
NumericType
G. Elber
IRIT Solid modeler
CurveType
SurfaceType
TrivarType
TriSrfType
MultivarType
o
o
o
o
o
CurveType
SurfaceType
TrivarType
TriSrfType
MultivarType
->
->
->
->
->
17
NumericType
NumericType
NumericType
NumericType
NumericType
The returned NumericType is non-zero if the condition holds, or zero if not. The comparison
operators other than == and ! = can be used on NumericTypes and StringType only.
10.8
Logical operators &&, , !
Complex logical expressions can be defined using the logical and (&&), logical or (||) and logical not
(!). These operators can be applied to NumericTypes that are considered Boolean results. That is,
true for a non-zero value, and false otherwise. The returned NumericType is true if both operands
are true for the and operator, at least one is true for the or operator, and the operand is false for the
not operator. In all other cases, a false is returned. To make sure logical expressions are readable, the
and and or operators are defined to have the same priority. Use parentheses to disambiguate a logical
expression and to make it more readable.
10.9
Geometric Boolean Operations
The IRIT Solid Modeling System supports Boolean operations between polyhedra objects. Freeform
objects will be automaticaly converted to a polygonal representation when used in Boolean operations.
The +, ∗, and − are overloaded to denote Boolean union, intersection and subtraction when operating
on geometric entities. − can also be used as an unary operator to reverse the object orientation inside
out.
IRIT supports Boolean operations on polyhedra models. A polyhedra based model is simply a
collection of polygons. While a polyhedra is simply a set of polygons, this set must conform to certain
conditions:
• Every polygon has known adjacent polygons, for all its edges.
• The model must be a 2-manifold. That is every edge is shared by exactly two polygons.
• The model is expected to be closed. Actually only the resulting intersection curves must be closed
and the objects participating in the Boleans might be open in unintersecting regions.
• Every polygon has a normal that points into the model. That normal is inside/outside consistent
with its adjacent polygons.
In other words, for every polygon, one can locally determine the inside or the outside of the model.
Moreover, every polygon has neighbors for all its edges, forming a closed object that consistently
delineates inside from outside, globally.
If your input geometry does not adhere to the above constrains, the Boolean operation is likely
to fail. You can enable a special intersection-curves mode that only compute the intersection curves
between the two input objects and does not form the output object. This special model is insensitive
to many of the above constraints so you could use this model to examine the intersection curves and
make sure there are indeed forming closed loops. You can enable this intersection-curves mode via
’iritstate(”intercrv”, true);’. See also IRITSTATE command.
The Boolean operations are set operations conducted between two such models, M1 and M2 , that
delineate inside from outside. Boolean Union, Boolean Intersection and Boolean Subtraction are the
G. Elber
IRIT Solid modeler
18
three common operations that resemble the exact semantic that is expected, when treating M1 and
M2 as three-dimensional point sets.
Certain attributes are propegated between input and output geometry, when processed through
the Boolean operations module. If the vertices of the input geometry have normals, uv parametric
coordinates (”uvvals” attribute), or rgb colors (”rgb” attribute), they will be propertly propagated
and interpolated through the Booleans. Similarly, an integer ”ID” attribute that is placed on an input
object will propagate into its polygons and all polygons in the output that are part of the input objects
will be carrying this ”ID” attribute.
The Boolean operations can be formulated into a binary tree structure also known as a Constructive
Solid Geometry (CSG) tree. See, for example, Figure 1 for a sequence of Boolean operations on
polyhedra model, defining a Constructive Solid Geometry (CSG) tree.
Example:
resolution = 20;
B = box(vector(-1, -1, -0.25), 2, 1.2, 0.5);
C = con2(vector(0, 0, -1.5), vector(0, 0, 3), 0.7, 0.3);
D
E
F
G
=
=
=
=
convex(B
convex(C
convex(B
convex(B
+
*
C);
B);
C);
C);
tr = rotx( -90 ) * roty( 40 ) * rotx( -30 );
All = list( D * tr * trans( vector( 0.6, 0.5,
E * tr * trans( vector( 3.0, 0.0,
F * tr * trans( vector( -2.0, 0.0,
G * tr * trans( vector( 0.7, -1.0,
* scale( vector( 0.25, 0.25, 0.25 ) )
* trans( vector( -0.1, -0.3, 0.0 ) );
view_mat = rotx( 0 );
view( list( view_mat, All ), on );
save( "booleans", list( view_mat, All ) );
0.0
0.0
0.0
0.0
)
)
)
)
),
),
),
) )
This is a complete example of how to compute the union, intersection and both differences of a box
and a truncated cone. The result of this example can be seen in Figure 2 with its hidden lines removed.
Special cases can be very difficult to handle when considering Boolean operations. Consider an axes
parallel bounding cube. Consider a second cube rotated α degrees from the first cube. At large angles,
the Boolean operations are fairly simple to compute. Nevertheless, as alpha approaches zero, the
almost coplanar planes of the two intersecting cubes make it very difficult to robustly and consistently
compute their intersection. Figure 3 shows three such examples for α = 10, 1, 0.1 degrees, computed
using IRIT. IRIT itself fails to return a valid result at α = 10−6 , complaining about theye inconsistency
of its computation. Proper handling of coplanarity and almost tangent faces, in a robust manner, are
one of the most challenging tasks in computing the Boolean operations.
There are several flags to control the Boolean operations. See IRITSTATE command for the
”InterCrv”, ”InterUV”, ”Coplanar”, and ”PolySort” states.
G. Elber
IRIT Solid modeler
19
S 3 = S 2 − C2
S 2 = S 1 − B2
C2
S 1 = B1 + C1
B2
B1
C1
Figure 1: A simple example of a polyhedra model, computed as a sequence of several Boolean operation,
presented as a CSG tree.
IRIT Solid modeler
G. Elber
20
Figure 2: Geometric Boolean operations between a box and a truncated cone. Shown are union (left),
intersection (bottom center), box minus the cone (top center), and cone minus the box (right).
α = 10 degrees
α = 1 degree
α = 0.1 degrees
Figure 3: Examples of robustness of Boolean Intersection operation. As the rotation anlge approaches
zero, the coplanarity of the intersecting models puts very difficult constraints on the robustness of the
result. In this specific example, using IRIT, the operation fails at angles of 10e-6 and below.
G. Elber
IRIT Solid modeler
10.10
21
Priority of operators
The following table lists the priority of the different operators.
Lowest
priority
Highest
priority
10.11
Operator
,
:
&&, ||
=, ==, ! =, <=, >=, <, >
+, *, /
^
-, !
Name of operator
comma
colon
logical and, logical or
assignment, equal, not equal, less
equal, greater equal, less, greater
plus, minus
multiply, divide
power
unary minus, logical not
Grammar
The grammar of the IRIT parser follows guidelines similar to those of the C language for simple
expressions. However, complex statements differ. See the IF, FOR, FUNCTION, and PROCEDURE
below for the usage of these clauses.
11
Function Description
The description below defines the parameters and returned values of the predefined functions in the
system, using the notation of functions in ANSI C. All the functions in the system, in alphabetic order,
are listed are according to their classes.
11.1
11.1.1
NumericType returning functions
ABS
NumericType ABS( NumericType Operand )
returns the absolute value of the given Operand.
11.1.2
ACOS
NumericType ACOS( NumericType Operand )
returns the arc cosine value (in radians) of the given Operand.
11.1.3
AREA
NumericType AREA( PolygonType Object )
or
NumericType AREA( CurveType Object )
returns the area of the given Object (in object units).
IRIT Solid modeler
11.1.4
G. Elber
22
ASIN
NumericType ASIN( NumericType Operand )
returns the arc sine value (in radians) of the given Operand.
11.1.5
ATAN
NumericType ATAN( NumericType Operand )
returns the arc tangent value (in radians) of the given Operand.
11.1.6
ATAN2
NumericType ATAN2( NumericType Operand1, NumericType Operand2 )
returns the arc tangent value (in radians) of the given ratio: Operand1 / Operand2, over the
whole circle.
11.1.7
COS
NumericType COS( NumericType Operand )
returns the cosine value of the given Operand (in radians).
11.1.8
CLNTEXEC
NumericType CLNTEXEC( StringType ClientName )
Initiate communication channels to a client named ClientName. ClientName is executed by
this function as a sub process. Two communication channels are opened between the IRIT server
and the new client, for read and write. See also CLNTCRSR, CLNTREAD, CLNTWRITE, and
CLNTCLOSE. If ClientName is an empty string, the user is provided with the new communication
port to be used and the server blocks for the user to manually execute the client after setting the proper
IRIT SERVER HOST/PORT environment variables.
Example:
h1 = CLNTEXEC( "" );
h2 = CLNTEXEC( "nuldrvs -s-" );
executes two clients, one named nuldrvs while the other one is prompted for by the user. As a
result of the second invokation of CLNTEXEC, the user will be prompted with a message similar to:
Irit: Startup your program - I am waiting...
setenv IRIT_SERVER_PORT 2182
and he/she will need to set the proper environment variable and execute their client manually.
IRIT Solid modeler
11.1.9
G. Elber
23
CPOLY
NumericType CPOLY( PolygonType Object )
returns the number of polygons in the given polygonal Object.
11.1.10
DSTPTLN
NumericType DSTPTLN( PointType Pt, PointType LineOrig, VectorType LineRay )
returns the distance between a given point Pt and line LineOrig, LineRay. See also PTPTLN.
11.1.11
DSTPTPLN
NumericType DSTPTPLN( PointType Pt, PlaneType Plane )
returns the distance between a given point Pt and plane Plane.
11.1.12
DSTLNLN
NumericType DSTLNLN( PointType Line1Orig, VectorType Line1Ray,
PointType Line2Orig, VectorType Line2Ray )
returns the distance between two lines defined by point LineiOrig and ray LineiRay. See also
PTSLNLN.
11.1.13
EXP
NumericType EXP( NumericType Operand )
returns the natural exponential value of the given Operand.
11.1.14
FLOOR
NumericType FLOOR( NumericType Operand )
returns the largest integer not greater than the Operand.
11.1.15
FMOD
NumericType FMOD( NumericType Operand, NumericType Mod )
returns the floating point remainder of the division of the Operand by Mod.
11.1.16
LN
NumericType LN( NumericType Operand )
returns the natural logarithm value of the given Operand.
IRIT Solid modeler
11.1.17
G. Elber
24
LOG
NumericType LOG( NumericType Operand )
returns the base 10 logarithm value of the given Operand.
11.1.18
MESHSIZE
NumericType MESHSIZE( FreeformType Freeform, ConstantType Direction )
returns the size of the Freeform’s mesh in a Direction, which will be COL, ROW or DEPTH.
For the case of a multivariate Freeform, the Direction is an integer value starting from 0. See also
FFMSIZE. Examples:
Len = MESHSIZE( Crv, COL );
RSize = MESHSIZE( Sphere, ROW );
CSize = MESHSIZE( Sphere, COL );
TVSize = MESHSIZE( TV, COL ) * MESHSIZE( TV, ROW ) * MESHSIZE( TV, DEPTH );
MVSize1 = MESHSIZE( MV, 1 );
11.1.19
POWER
NumericType POWER( NumericType Operand, NumericType Exp )
returns the Operand to the power of Exp.
11.1.20
RANDOM
NumericType RANDOM( NumericType Min, NumericType Max )
returns a randomized value between Min and Max. See also ”RandomInit”, in the IRITSTATE
function.
11.1.21
SIN
NumericType SIN( NumericType Operand )
returns the sine value of the given Operand (in radians).
11.1.22
SIZEOF
NumericType SIZEOF( PointTypr Pt | VectorType Vec | PlaneType Pln |
CtlPtType CtlPt | ListType List | PolygonType Poly |
CurveType Crv | StringType Str )
returns the size of a point, vector, plane, or control point (negative size if rational) or the length of
a list if List, the number of polygons if Poly, the length of the control polygon if Crv, or the number
of characters in string if Str. If, however, only one polygon is in Poly, it returns the number of vertices
in that polygon.
Example:
G. Elber
IRIT Solid modeler
25
len = SIZEOF( list( 1, 2, 3 ) );
numPolys = SIZEOF( axes );
numCtlpt = SIZEOF( circle( vector( 0, 0, 0 ), 1 ) );
will assign the value of 3 to the variable len, set numPolys to the number of polylines in the axes
object, and set numCtlPt to 9, the number of control points in a circle.
11.1.23
SQRT
NumericType SQRT( NumericType Operand )
returns the square root value of the given Operand.
11.1.24
TAN
NumericType TAN( NumericType Operand )
returns the tangent value of the given Operand (in radians).
11.1.25
THISOBJ
NumericType THISOBJ( StringType Object )
returns the object type of the given name of an Object. This can be one of the constants,
UNDEF TYPE
POLY TYPE
NUMERIC TYPE
POINT TYPE
VECTOR TYPE
PLANE TYPE
MATRIX TYPE
CURVE TYPE
SURFACE TYPE
STRING TYPE
CTLPT TYPE
LIST TYPE
TRIVAR TYPE
TRISRF TYPE
TRIMSRF TYPE
MODEL TYPE
MULTIVAR TYPE
This is also a way to ask if an object by a given name exists (if the returned type is UNDEF TYPE
or not).
11.1.26
VOLUME
NumericType VOLUME( PolygonType Object )
returns the volume of the given Object (in object units). It returns the volume of the polygonal
object, not the volume of the object it might approximate.
This routine decomposes all non-convex polygons to convex ones, as a side effect (see CONVEX).
11.2
11.2.1
GeometricType returning functions
ADAPISO
CurveType ADAPISO( SurfaceType Srf, NumericType GenIsos, NumericType Dir,
NumericType Eps, NumericType FullIso,
NumericType SinglePath, ListType WeightPtSclWdt )
G. Elber
IRIT Solid modeler
26
Constructs a coverage to Srf using isocurve (if GenIsos TRUE) in the Dir direction or coverage
to Srf using quadrilaterals (if GenIsos FALSE). For isocuves, for any point p on surface Srf, there
exists a point on one of the isocurves that is close to p within Eps. If FullIso, the extracted isocurves
span the entire surface domain; otherwise they may span only a subset of the domain. If SinglePath,
an approximation to a single path (Hamiltonian path) that visits all isocurves is constructed (not
supported). If Srf has an integer ”AdapIsoMinSubdivLevel” attribute, it is used to set the minimal
subdivision level used in the adaptive isocurve computations.
If quadrilaterals are generated, one can force higher density of quads at some zone using the
WeightPtSclWdt parameter that is a list of length three: (point of interest, weight of influence, scale
factor). See also COVERPT, COVERISO.
srf = sbezier( list( list( ctlpt( E3, -0.5,
ctlpt( E3, 0.4,
ctlpt( E3, -0.5,
list( ctlpt( E3, 0.0,
ctlpt( E3, 0.0,
ctlpt( E3, 0.0,
list( ctlpt( E3, 0.5,
ctlpt( E3, -0.4,
ctlpt( E3, 0.5,
attrib( srf, "AdapIsoMinSubdivLevel", 2 );
aiso = ADAPISO( srf, TRUE, COL, 0.1, FALSE,
-1.0, 0.0 ),
0.0, 0.1 ),
1.0, 0.0 ) ),
-0.7, 0.1 ),
0.0, 0.0 ),
0.7, -0.2 ) ),
-1.0, 0.1 ),
0.0, 0.0 ),
1.0, -0.2 ) ) ) );
FALSE, NIL() );
constructs an adaptive isocurve approximation with tolerance of 0.1 to surface srf in direction
COL. Isocurves are allowed to span a subset of the surface domain. No single path is needed.
The SinglePath option is currently not supported.
11.2.2
ALGSUM
SurfaceType ALGSUM( CurveType Crv1, CurveType Crv2 )
Given two curves, compute a surface that is their algebraic sum:
S(u, v) = C1 (u) + C2 (v)
Example:
c1 = circle( vector( 0.0, 0.0, 0.0 ), 0.7 );
c2 = ctlpt( E3, -0.2, -0.5, -1.5 ) + ctlpt( E3, 0.2, 0.5, 1.5 );
s1 = algsum( c1, c2 );
c2 = cbspline( 3,
list( ctlpt( E3, 0.0,
ctlpt( E3, 0.0,
ctlpt( E3, 0.0,
ctlpt( E3, 0.0,
ctlpt( E3, 0.0,
list( KV_OPEN ) );
s2 = algsum( c1, c2 );
0.0,
0.0,
1.5,
0.0,
0.0,
0.0
0.7
1.0
1.3
2.0
),
),
),
),
) ),
(1)
IRIT Solid modeler
G. Elber
27
Figure 4: An algebraic sum of a circle and a line creating a cylinder (left) and a general sweep like
surface (right), both using ALGSUM.
creates two algebraic sum surfaces, one in the shape of a cylinder as a sum of a line and a circle,
and one circular sweep like. See Figure 4.
11.2.3
ANALYFIT
ListType ANALYFIT( ListType UVPts, ListType EucPts,
NumericType FirstAtOrigin, NumericType Degree )
computes a surface fit to the given paraametrized points data. The fitted surface will be of bi-degree
Degree, fitting points EucPts at parameters UVPts. Needless to say EucPts and UVPts should
be lists of points of similar length. If FirstAtOrigin is TRUE, all points are translated so the first
point in EucPts is at the origin. Only the first coordinates of UVPts are used.
Example:
Fitting = nil();
Eps = 1e-2;
PtPln = nil():
for (i = 1, 1, 100,
snoc( point( random( -1, 1 ), random( -1, 1 ), random( -Eps, Eps ) ),
PtPln ) );
IRIT Solid modeler
G. Elber
28
BilinCoefs = ANALYFIT( PtPln, PtPln, 0, 1 ) );
fits a bilinear to the given planar data with noise. See also the COERCE function from POWER TYPE
to BEZIER TYPE, and FITPMODEL.
11.2.4
ANIMEVAL
AnyType ANIMEVAL( NumericType Time, AnyType Object, NumericType EvalMats )
evaluates the animation curves in Object at time Time. The transformations for time Time are
saved at the respective sub objects of Object as ”animation mat” matrices, if EvalMats is TRUE.
If, however, EvalMats is FALSE, the evaluated/mapped geometry is returned directly.
For example,
mov_x = cbezier( list( ctlpt( E1, 0.0 ), ctlpt( E1, 1.0 ) ) );
attrib( axes, "animation", list( mov_x ) );
axes2 = ANIMEVAL( 0.5, axes, true );
and axes2 will have a matrix in attribute ”animation mat” of translation in x of 1/2.
11.2.5
ANTIPODAL
ListType ANTIPODAL( CurveType Crv, NumericType SubdivTol,
NumericType NumerTol )
or
ListType ANTIPODAL( SurfaceType Srf, NumericType SubdivTol,
NumericType NumerTol )
computes distinct antipodal pairs on curve Crv or on surface Srf. An antipodal pair defines two
distinct locations on Crv or on Srf that a line through the two locations is orthogonal to the tangent
space of the shape, at thouse locations. In other words, the normals to the freeform shape at those two
locations are along the line connecting the locations. SubdivTol and NumerTol control the tolerance
of the computation as in MZERO.
Examples:
A = ANTIPODAL( Srf, 1e-3, -1e-12 );
11.2.6
AOFFSET
CurveType AOFFSET( CurveType Crv, NumericType OffsetDistance,
NumericType Epsilon, NumericType TrimLoops,
NumericType BezInterp )
or
CurveType AOFFSET( CurveType Crv, CurveType OffsetDistance,
NumericType Epsilon, NumericType TrimLoops,
NumericType BezInterp )
IRIT Solid modeler
G. Elber
29
Figure 5: Adaptive offset approximation (thick) of a B-spline curve (thin). On the left, the self
intersections in the offset computed in the right are eliminated. Both offsets were computed using
AOFFSET. (See also Figure 66.)
computes an offset of OffsetDistance with a globally bounded error (controlled by Epsilon). The
smaller Epsilon is, the better the approximation to the offset. The bounded error is achieved by
adaptive refinement of the Crv. If OffsetDistance is a (scalar) curve, the curve’s first coordinate is
used to prescribe a variable offset amount along the curve. Both Crv and OffsetDistance must share
the same parametric domain. If TrimLoops is TRUE or on, the regions of the object that self-intersect
as a result of the offset operation are trimmed away. If BezInterp is TRUE, each curve’s segment is
interpolated instead of approximated.
Example:
OffCrv1 = AOFFSET( Crv, 0.5, 0.01, FALSE, FALSE );
OffCrv2 = AOFFSET( Crv, 0.5, 0.01, TRUE, FALSE );
computes an adaptive offset to Crv with OffsetDistance of 0.5 and Epsilon of 0.01 and trims
the self intersection loops in the second instance. See also OFFSET, TOFFSET, LOFFSET, and
MOFFSET. See Figure 5.
11.2.7
ARC
CurveType ARC( VectorType StartPos, VectorType Center, VectorType EndPos )
constructs an arc between the two end points StartPos and EndPos, centered at Center. THe
arc will always be less than 180 degrees, so the shortest circular path from StartPos to EndPos is
selected. The case where StartPos, Center, and EndPos are collinear is illegal, since it attempts to
define a 180 degrees arc. The arc is constructed as a single rational quadratic Bezier curve.
Example:
Arc1 = ARC( vector( 1.0, 0.0, 0.0 ),
vector( 1.0, 1.0, 0.0 ),
vector( 0.0, 1.0, 0.0 ) );
constructs a 90 degrees arc, tangent to both the X and Y axes at coordinate 1. See Figure 6 (a).
See also ARC360
IRIT Solid modeler
G. Elber
30
Figure 6: A 90 degree arc constructed using the ARC constructor (left) and a 280 degrees arc (right)
constructed using the ARC360 constructor.
11.2.8
ARC360
CurveType ARC360( VectorType Center, NumericType Radius,
NumericType StartAngle, NumericType EndAngle )
constructs an arc between the two angles (degrees) StartAngle and EndAngle, centered at Center. The arc will always be less than 360 degrees. The arc is constructed as a rational quadratic
B-spline curve.
Example:
Arc2 = ARC360( vector( 0.0, 0.0, 0.0 ), 1.0, 75, 355 );
constructs a 280 degrees arc. See Figure 6 (b). See also ARC.
11.2.9
AREPARAM
AnyType AREPARAM( AnyType Obj, NumericType Min, NumericType Max )
Updates the time domain of the animation embedded in Obj to be from Min to Max. This
function has an effect only if Obj has animation(s) set for it. See the Animation section and ATTRIB
to set animation attributes on objects.
Example:
ASrf = AREPARAM( Srf, 0, 2 );
Sets the animation time to be from zero to two time units.
IRIT Solid modeler
11.2.10
G. Elber
31
BBOX
ListType BBOX( GeometricTreeType Geom )
Given a (tree of) geometry, Geom computes its bounding box and return it as a list of six numbers:
XMin/Max, YMin/Max, ZMin/Max, in this order.
Example:
B1 = BBOX( axes );
11.2.11
BELTCURVE
ListType BELTCURVE( PolyType Pulleys, NumericType Thickness,
NumericType BoundingArcs, NumericType ReturnCrvs )
Computes a belt for a given set of Pulleys defined as point list of the form (x, y, r) for each Pulley.
Positive r designates a CW pulley whereas a negative r designates a CCW pulley. The thickness of the
belt is defined by Thickness. BoundingArcs is usually zero but if not, prescribes two bounding arcs
for each linear segment of the belt. ReturnCrvs should be TRUE to simply return the two boundary
curves of the belt or FALSE to return a list of arcs/lines of the belt.
Example:
B1 = BeltCurve( list( vector( 0, 0,
0.6 ),
vector( 1, 3, -0.24 ),
vector( 3, 3, -0.24 ),
vector( 3, 1,
0.4 ),
vector( 3, -1, 0.3 ),
vector( 1, -1, 0.3 ),
BeltThickness, CreateBoundingArcs, ReturnCrvs ),
See Figure 7 for the result of this example.
11.2.12
BFROM2IMG
ListType BFROM2IMG( StringType Img1, StringType Img2,
NumericType DitherSize, NumericType MatchWidth,
NumericType Positive, NumericType AugmentContrast,
NumericType SpreadMethod, NumericType SphereRadius )
Constructs a 3D dithering cloud of blobs that looks like Img1 from one view direction and like
Img2 from another view direction. DitherSize sets the 3D dithering size - 2, 3, or 4 for 2x2x2,
3x3x3 or 4x4x4. MatchWidth constraints the (bipartitte graph) matching between two rows in the
two different images and is measured in pixels. If Positive is true, the images are processed as is.
If false, the images are negated first. AugmentContrast allows control over contrast at the cost of
more computation, or zero to disable. SpreadMethod is typically true to allow random spreading.
SphereRadius sets the radius of the constructed blobs.
See Figure 8 for the result of this example.
Example:
PTS = BFrom2Img( "BenGurion.ppm", "Herzl.ppm",
2, 21, true, 0, 2, 0.0 );
IRIT Solid modeler
G. Elber
32
Figure 7: A belt defined using the BELTCURVE function.
Figure 8: A 3D dithering of two (three) images that creates a cloud of 3D points using the BFROM2IMG
(BFROM3IMG) function. Herzl is seen from one view and Ben Gurion from another view.
IRIT Solid modeler
G. Elber
33
constructs a could of points that looks like Herzl from one view and Ben Gurion from another. See
also BFROM3IMG, MFROM2IMG, and MFROM3IMG.
11.2.13
BFROM3IMG
ListType BFROM3IMG( StringType Img1, StringType Img2, StringType Img3,
NumericType DitherSize, NumericType MatchWidth,
NumericType Positive, NumericType AugmentContrast,
NumericType SpreadMethod, NumericType SphereRadius )
Constructs a 3D dithering cloud of blobs that looks like Img1 from one view direction, like Img2
from another view direction, and like Img3 from a third view direction. DitherSize sets the 3D
dithering size - 2, 3, or 4 for 2x2x2, 3x3x3 or 4x4x4. MatchWidth constraints the (bipartitte graph)
matching between two rows in the two different images and is measured in pixels. If Positive is true,
the images are processed as is. If false, the images are negated first. AugmentContrast allows control
over contrast at the cost of more computation, or zero to disable. SpreadMethod is typically true to
allow random spreading. SphereRadius sets the radius of the constructed blobs.
Example:
PTS = BFrom2Img( "BenGurion.ppm", "Herzl.ppm", "Rabin.ppm",
2, 21, true, 0, 2, 0.0 );
constructs a could of points that looks like Herzl from one view, Ben Gurion from another, and
Rabin from a third view. See also BFROM2IMG, MFROM2IMG, and MFROM3IMG.
11.2.14
BLND2SRFS
SurfaceType BLND2SRFS( SurfaceType Srf1, SurfaceType Srf2,
NumericType BlendDegree, NumericType TanScale )
constructs a new surface that blends Srf1 at UMin and Srf2 at UMax. BlendDegree can be 2
in which case the blending surface is C 0 continuous (to Srf1 and Srf2) or 4 to achieve C 1 continuity.
Finally TanScale controls the strength of the tangential field, if C 1 is sought.
Example:
BSrf = BLND2SRFS( Srf1, Srf2, 4, 1.0 );
See also HERMITE, BLHERMITE and BLSHERMITE
11.2.15
BLHERMITE
SurfaceType BLHERMITE( CurveType Bndry1, CurveType Bndry2,
CurveType Tan1, CurveType Tan2,
CurveType Sctn, CurveType Nrml )
computes a Hermite blend surface that supports an arbitrary cross section. This constructs a
surface between Bndry1 and Bndry2 so that the first derivative continuity constraints, as prescribed
by Tan1 at Bndry1 and Tan2 at Bndry2, are preserved. In addition, the interior between Bndry1
and Bndry2 will follow the shape of planar cross section curve Sctn and will be oriented along the
vector field prescribed by Nrml. Cross section Sctn is a planar curve that must start at (-1, 0) and
G. Elber
IRIT Solid modeler
34
end at (1, 0), and have zero speed at the ends (first control point equals the second and is the same at
the end).
Example:
c1
c2
d1
d2
=
=
=
=
ctlpt(
ctlpt(
ctlpt(
ctlpt(
e3, 0, 0, 0 ) +
e3, 1, 0, 0 ) +
e3, 1, 0, 1 )
e3, 1, 0, -0.1
ctlpt( e3, 0, 1, 0 );
ctlpt( e3, 1, 1, 0 );
+ ctlpt( e3, 1, 0, 0.1 );
) + ctlpt( e3, 1, 0, -1 );
s1 = hermite( c1, c2, d1, d2 );
color( s1, red );
cSec = cbspline( 3,
list( ctlpt( e2, -1,
ctlpt( e2, -1,
ctlpt( e2, -0.14,
ctlpt( e2, -0.65,
ctlpt( e2, 0,
ctlpt( e2, 0.65,
ctlpt( e2, 0.14,
ctlpt( e2, 1,
ctlpt( e2, 1,
list( kv_open ) );
n = ctlpt( e3, 0, 0, 1 ) + ctlpt( e3, 0,
0 ),
0 ),
0.26 ),
0.51 ),
0.76 ),
0.51 ),
0.26 ),
0 ),
0 ) ),
0, 1 );
s2 = BLHERMITE( c1, c2, d1, d2, cSec2, n );
color( s2, yellow );
constructs a regular Hermite surfaces s1 and a blending Hermite that follows the cross section cSec.
See also HERMITE and BLSHERMITE. See Figure 9 (a).
11.2.16
BLSHERMITE
SurfaceType BLSHERMITE( SurfaceType Srf, CurveType PCrv,
CurveType Sctn, NumericType TanScale,
AnyType Width, AnyType Height )
computes a Hermite blend surface on Srf along parametric curve of Srf, PCrv, the cross section
Sctn, a tangent field scale control TanScale, and the width and height control of Width and Height.
Width and Height can be either a numeric value of expected width and height or a scalar field curve
prescribing the expected width and height along the constructed blend.
The constructed surface, which is C1 continuous to Srf, is positioned along PCrv, a curve in the
parametric domain of Srf. The cross section Sctn is a planar curve that must start at (-1, 0) and end
at (1, 0), and have zero speed at the ends (first control point equals the second and is the same at the
end). TanScale controls how rapid the change in the tangent is, as we move away from the surface.
Example:
cSec = cbspline( 3,
list( ctlpt( e2, -1,
0 ),
G. Elber
IRIT Solid modeler
35
Figure 9: Blending Hermite with a prescribed cross section (left) using BLHERMITE and blending
Hermite with a prescribed cross section on a surface (right) using BLSHERMITE.
ctlpt( e2, -1,
ctlpt( e2, -0.5,
ctlpt( e2, -0.7,
ctlpt( e2, 0,
ctlpt( e2, 0.7,
ctlpt( e2, 0.5,
ctlpt( e2, 1,
ctlpt( e2, 1,
list( kv_open ) );
0 ),
0.2 ),
0.3 ),
0.5 ),
0.3 ),
0.2 ),
0 ),
0 ) ),
s = -surfPRev( cregion( pcircle( vector( 0, 0, 0 ), 1 ),
0, 2 ) * rx( 90 ) );
s1 = BLSHERMITE( s, ctlpt( E2, 0, 1 ) + ctlpt( E2, 4, 1 ),
cSec, 1, 0.2, 0.5 );
s2 = BLSHERMITE( s, ctlpt( E2, 0, 1.5 ) + ctlpt( E2, 4, 1.5 ),
cSec, 0.1, 0.2, 0.5 );
s3 = BLSHERMITE( s, ctlpt( E2, 0, 0.3 ) + ctlpt( E2, 4, 0.3 ),
cSec, 1.5, 0.2, 0.5 );
places three Hermite blend surfaces s1, s2, s3 using the cross section cSec on a unit sphere s. See
also HERMITE and BLHERMITE. See Figure 9 (b).
11.2.17
BLOSSOM
CtlPtType BLOSSOM( CurveType Crv, ListType BlossomVals )
G. Elber
IRIT Solid modeler
36
or
CtlPtType BLOSSOM( SurfaceType Srf, ListType BlossomVals )
computes the blossom of the given Crv or Srf and the given blossom values BlossomVals. For
a Crv, BlossomVals is expected to hold a linear list of blossom values. For a Srf, BlossomVals is
expected to hold two linear lists (for u and v) of blossom values.
Example:
c1 = cbezier( list( ctlpt(
ctlpt(
ctlpt(
ctlpt(
ctlpt(
BLOSSOM(
BLOSSOM(
BLOSSOM(
BLOSSOM(
BLOSSOM(
c1,
c1,
c1,
c1,
c1,
list(
list(
list(
list(
list(
0,
0,
0,
0,
1,
0,
0,
0,
1,
1,
0,
0,
1,
1,
1,
E2,
E2,
E2,
E2,
E2,
1.7,
0.7,
1.7,
1.5,
1.6,
0
1
1
1
1
)
)
)
)
)
)
)
)
)
)
0.0
0.7
0.3
0.8
1.0
==
==
==
==
==
),
),
),
),
) ) );
coord(
coord(
coord(
coord(
coord(
c1,
c1,
c1,
c1,
c1,
0
1
2
3
4
) &&
) &&
) &&
) &&
);
extracts the control points of an quadric Bezier curve via blossoming and compares this to the
results obtained via a traditional extraction approach (via the COORD function).
11.2.18
BOOLONE
SurfaceType BOOLONE( CurveType Crv )
Given a closed curve, the curve is subdivided into four segments equally spaced in the parametric
space that are fed into BOOLSUM. This is useful if a surface should ”fill” the area enclosed by a closed
curve.
Example:
Srf = BOOLONE( circle( vector( 0.0, 0.0, 0.0 ), 1.0 ) );
creates a disk surface containing the area enclosed by the unit circle. See Figure 10.
11.2.19
BOOLSUM
SurfaceType BOOLSUM( CurveType Crv1, CurveType Crv2,
CurveType Crv3, CurveType Crv4 )
constructs a surface using the provided four curves as its four boundary curves. Curves do not have
to have the same order or type, and will be promoted to their least common denominator. The end
points of the four curves should match as follows:
Crv1
Crv1
Crv2
Crv2
start point,
end point,
start point,
end point,
to
to
to
to
Crv3
Crv4
Crv3
Crv4
start point.
start point.
end point.
end point.
IRIT Solid modeler
G. Elber
37
Figure 10: A Boolean sum of a circle creates a disk (left) using BOOLONE and a general Boolean sum
of four curves (right) using BOOLSUM.
where Crv1 and Crv2 are the two boundaries in one parametric direction, and Crv3 and Crv4
are the two boundaries in the other parametric direction.
Example:
Cbzr1 = cbezier( list( ctlpt( E3, 0.1, 0.1, 0.1 ),
ctlpt( E3, 0.0, 0.5, 1.0 ),
ctlpt( E3, 0.4, 1.0, 0.4 ) ) );
Cbzr2 = cbezier( list( ctlpt( E3, 1.0, 0.2, 0.2 ),
ctlpt( E3, 1.0, 0.5, -1.0 ),
ctlpt( E3, 1.0, 1.0, 0.3 ) ) );
Cbsp3 = cbspline( 4,
list( ctlpt( E3, 0.1, 0.1, 0.1 ),
ctlpt( E3, 0.25, 0.0, -1.0 ),
ctlpt( E3, 0.5, 0.0, 2.0 ),
ctlpt( E3, 0.75, 0.0, -1.0 ),
ctlpt( E3, 1.0, 0.2, 0.2 ) ),
list( KV_OPEN ) );
Cbsp4 = cbspline( 4,
list( ctlpt( E3, 0.4, 1.0, 0.4 ),
ctlpt( E3, 0.25, 1.0, 1.0 ),
ctlpt( E3, 0.5, 1.0, -2.0 ),
ctlpt( E3, 0.75, 1.0, 1.0 ),
ctlpt( E3, 1.0, 1.0, 0.3 ) ),
list( KV_OPEN ) );
Srf = BOOLSUM( Cbzr1, Cbzr2, Cbsp3, Cbsp4 );
IRIT Solid modeler
11.2.20
G. Elber
38
BOUNDARY
AnyType BOUNDARY( AnyType Obj )
Given a geometric object Obj, let it be a surface, a trimed surface, or a polygonal model, returns
the boundary of the shape. If Obj is a polygonal object originated with a surface and all vertices has
”uvvals” attributes, by placing ”SrfBoundary” attribute on Obj with the ”UMin VMin UMax VMax”
surface domain, the surface boundary is will be properly detected, even if the surface is closed.
Example:
CBndry1 = BOUNDARY( Srf );
poly_approx_uv = 1;
Pl = gpolygon( Srf, 1 );
attrib( Pl, "SrfBoundary", "0 0 1 2" );
# Domain of Srf [0, 1] x [0, 2]
CBndry2 = BOUNDARY( Pl );
returns in CBndry1, the four boundary curves of tensor product surface Srf and in CBndry2,
the edges on the tesselation of Srf, Pl, on the boundary of Srf, even if Srf is closed.
11.2.21
BOX
PolygonType BOX( VectorType Point,
NumericType Dx, NumericType Dy, NumericType Dz )
creates a BOX polygonal object, whose boundary is coplanar with the XY , XZ, and Y Z planes.
The BOX is defined by Point as base position, and Dx, Dy, Dz as BOX dimensions. Negative
dimensions are allowed.
Example:
B = BOX( vector( 0, 0, 0 ), 1, 1, 1);
creates a unit cube from 0 to 1 in all axes.
11.2.22
BSCTCONCN2
SurfaceType BSCTCONCN2( PointType ConeApx1, VectorType ConeDir1,
NumericType ConeAngle1,
PointType ConeApx2, VectorType ConeDir2,
NumericType ConeAngle2 )
computes the bisector surface of two cones in general position. The cones’ apexes can be found in
ConeApx1 and ConeApx2 with axes directions ConeDir1 and ConeDir2 and spanning angles of
ConeAngle1 and ConeAngle2.
Example:
BisectSrf = BSCTCONCN2( Apx1, Dir1, Ang1, Apx2, Dir2, Ang2 );
See also BSCPCONCON, BSCTCONCYL, BSCTCYLCYL, BSCTCONLN, BSCTCONPL, BSCTCONPT, BSCTCONSPR, BSCTCYLPL, BSCTCYLPT, BSCTCYLSPR, BSCTPLNLN, BSCTPLNPT,
BSCTSPRLN, BSCTSPRPL, BSCTSPRPT, BSCTSPRSPR, BSCTTRSPT, BSCTTRSSPR, CALPHASECTOR, CBISECTOR2D, CBISECTOR3D, SBISECTOR,
IRIT Solid modeler
11.2.23
G. Elber
39
BSCTCONCON
SurfaceType | ListType BSCTCONCON( VectorType ConeDir1, NumericType ConeAngle1,
VectorType ConeDir2, NumericType ConeAngle2,
NumericType Size )
computes the bisector surface of two cones that share the same apex. The cones’ directions are
ConeDir1 and ConeDir2 and the spanning angles of ConeAngle1 and ConeAngle2. ConeDir1
and ConeDir2 must be in the northern hemisphere; i.e. their Z coefficient must be positive. Size
controls the portion of the (infinite) bisector actually represented.
Example:
BisectSrf = BSCTCONCON( vector( 0, 0, 1 ), 50,
vector( 0, 0, 1 ), 20, 1.0 );
computes the bisector of two concentric cones, which is also a cone. See also BSCTCONLN, BSCTCONPL, BSCTCONPT, BSCTCONSPR, BSCTCYLPL, BSCPCONCON, BSCTCONCN2, BSCTCONCYL, BSCTCYLPT, BSCTCYLSPR, BSCTPLNLN, BSCTPLNPT, BSCTSPRLN, BSCTSPRPL,
BSCTSPRPT, BSCTSPRSPR, BSCTTRSPT, BSCTTRSSPR, CALPHASECTOR, CBISECTOR2D,
CBISECTOR3D, SBISECTOR
11.2.24
BSCTCONCYL
SurfaceType BSCTCONCYL( PointType ConeApx1, VectorType ConeDir1,
NumericType ConeAngle1,
PointType CylPt2, VectorType CylDir2,
NumericType CylRad2 )
computes the bisector surface of a cone and a cylinder in general position. The cones apex is
in ConeApx1 with axes direction of ConeDir1 and spanning angles of ConeAngle1. The second
cylinder starts at CylPt2, in direction CylDir2 and radius CylRad2.
Example:
BisectSrf = BSCTCONCYL( Apx1, Dir1, Ang1, Pt2, Dir2, Rad2 );
See also BSCPCONCON, BSCTCONCN2, BSCTCYLCYL, BSCTCONLN, BSCTCONPL, BSCTCONPT, BSCTCONSPR, BSCTCYLPL, BSCTCYLPT, BSCTCYLSPR, BSCTPLNLN, BSCTPLNPT,
BSCTSPRLN, BSCTSPRPL, BSCTSPRPT, BSCTSPRSPR, BSCTTRSPT, BSCTTRSSPR, CALPHASECTOR, CBISECTOR2D, CBISECTOR3D, SBISECTOR
11.2.25
BSCTCONLN
SurfaceType | ListType BSCTCONLN( VectorType ConeDir, NumericType ConeAngle,
VectorType LineDir, NumericType Size )
computes the bisector surface of a cone and a line through its apex. The cone’s direction is ConeDir
and its spanning angle is ConeAngle. ConeDir and LineDir must be in the northern hemisphere;
i.e. their Z coefficient must be positive. Size controls the portion of the (infinite) bisector actually
represented.
Example:
IRIT Solid modeler
G. Elber
40
BisectSrf = ( vector( 0, 0, 1 ), 45, vector( 0, 0.1, 1 ), 1 );
computes the bisector surface of a cone along the Z axis with spanning angle of 45 degrees, and a
line through its apex in direction ( 0, 0.1, 1 ).
See also BSCPCONCON, BSCTCONCN2, BSCTCONCYL, BSCTCONCON, BSCTCONPL, BSCTCONPT, BSCTCONSPR, BSCTCYLPL, BSCTCYLPT, BSCTCYLSPR, BSCTPLNLN, BSCTPLNPT,
BSCTSPRLN, BSCTSPRPL, BSCTSPRPT, BSCTSPRSPR, BSCTTRSPT, BSCTTRSSPR, CALPHASECTOR, CBISECTOR2D, CBISECTOR3D, SBISECTOR,
11.2.26
BSCTCONPL
SurfaceType | ListType BSCTCONPL( PointType ConeApex, VectorType ConeDir,
NumericType ConeAngle, NumericType Size )
computes the bisector surface of a general cone and the XY plane (Z = 0 plane). The cone’s apex
is at ConeApex, the cone’s direction is ConeDir and its spanning angle is ConeAngle. Dir must
be in the northern hemisphere; i.e. their Z coefficient must be positive. Size controls the portion of
the (infinite) bisector actually represented.
Example:
BisectSrf = BSCTCONPL( point( 0, 0, -0.3 ), vector( 1, 1, 1 ), 20, 1 );
computes the bisector surface of a cone with its apex at (0, 0, -0.3) along the axis (1, 1, 1) with
spanning angle of 20 degrees, and the plane Z = 0.
See also BSCPCONCON, BSCTCONCN2, BSCTCONCYL, BSCTCONCON, BSCTCONLN, BSCTCONPT, BSCTCONSPR, BSCTCYLPL, BSCTCYLPT, BSCTCYLSPR, BSCTPLNLN, BSCTPLNPT,
BSCTSPRLN, BSCTSPRPL, BSCTSPRPT, BSCTSPRSPR, BSCTTRSPT, BSCTTRSSPR, CALPHASECTOR, CBISECTOR2D, CBISECTOR3D, SBISECTOR.
11.2.27
BSCTCONPT
SurfaceType | ListType BSCTCONPT( PointType ConeApex, VectorType ConeDir,
NumericType ConeAngle, PointType Pt,
NumericType Size )
computes the bisector surface of a cone in a general position and a point, Pt. The cone’s apex is
at ConeApex, the cone’s direction is ConeDir and its spanning angle is ConeAngle. Size controls
the portion of the (infinite) bisector actually represented.
Example:
Bisect = BSCTCONPT( point( 0, 0, 0 ), vector( 0, 0, 1 ), 22,
point( 0, 0.2, 0.7 ), 1 );
See also BSCPCONCON, BSCTCONCN2, BSCTCONCYL, BSCTCONCON, BSCTCONLN, BSCTCONPL, BSCTCONSPR, BSCTCYLPL, BSCTCYLPT, BSCTCYLSPR, BSCTPLNLN, BSCTPLNPT,
BSCTSPRLN, BSCTSPRPL, BSCTSPRPT, BSCTSPRSPR, BSCTTRSPT, BSCTTRSSPR, CALPHASECTOR, CBISECTOR2D, CBISECTOR3D, SBISECTOR.
IRIT Solid modeler
11.2.28
G. Elber
41
BSCTCONSPR
SurfaceType | ListType BSCTCONSPR( PointType ConeApex, VectorType ConeDir,
NumericType ConeAngle, PointType SptCntr,
NumericType SprRadius, NumericType Size )
computes the bisector surface of a cone and a sphere. The cone’s apex is at ConeApex, the cone’s
direction is ConeDir and its spanning angle is ConeAngle. The sphere is centered at SptCntr and
has a radius of SprRadius. Size controls the portion of the (infinite) bisector actually represented.
Example:
BisectSrf = BSCTCONSPR( point( 0, 0, 0 ), vector( 0, 0, 1 ),
45, point( 0, 0, 1 ), 0.5, 2.0 );
computes the bisector between a cone along the Z axis with a 45 degree spanning angle and a sphere
at (0, 0, 1) of radius 0.5.
See also BSCPCONCON, BSCTCONCN2, BSCTCONCYL, BSCTCONCON, BSCTCONLN, BSCTCONPL, BSCTCONPT, BSCTCYLPL, BSCTCYLPT, BSCTCYLSPR, BSCTPLNLN, BSCTPLNPT,
BSCTSPRLN, BSCTSPRPL, BSCTSPRPT, BSCTSPRSPR, BSCTTRSPT, BSCTTRSSPR, CALPHASECTOR, CBISECTOR2D, CBISECTOR3D, SBISECTOR.
11.2.29
BSCTCYLCYL
SurfaceType BSCTCYLCYL( PointType CylPt1, VectorType CylDir1,
NumericType CylRad1,
PointType CylPt2, VectorType CylDir2,
NumericType CylRad2 )
computes the bisector surface of two cylinders in a general position. The cylinders start at CylPt1
and CylPt2 and follow the directions CylDir1 and CylDir2. They have radii of CylRad1 and
CylRad2.
Example:
BisectSrf = BSCTCYLCYL( Pt1, Dir1, Rad1, Pt2, Dir2, Rad2 );
See also BSCPCONCON, BSCTCONCN2, BSCTCONCYL, BSCTCONLN, BSCTCONPL, BSCTCONPT, BSCTCONSPR, BSCTCYLPL, BSCTCYLPT, BSCTCYLSPR, BSCTPLNLN, BSCTPLNPT,
BSCTSPRLN, BSCTSPRPL, BSCTSPRPT, BSCTSPRSPR, BSCTTRSPT, BSCTTRSSPR, CALPHASECTOR, CBISECTOR2D, CBISECTOR3D, SBISECTOR.
11.2.30
BSCTCYLPL
SurfaceType | ListType BSCTCYLPL( PointType CylPos, VectorType CylDir,
NumericType CylRadius, Size )
computes the bisector surface of a a cylinder and the XY plane (plane Z = 0). The cylinder is
located at CylPos, in the direction of CylDir which also sets the length of the cylinder. The radius
of the cylinder is CylRadius. Size controls the portion of the (infinite) bisector actually represented.
Example:
IRIT Solid modeler
G. Elber
42
Pt = point( 0.1, 0, 0.2 );
BisectSrf = BSCTCYLPL( point( 0, 0, 0.5 ), vector( 0, 0, 1 ), 0.2, 1 );
computed the bisector surface between a cylinder of radius 0.2 along the Z axis and the XY plane.
See also BSCPCONCON, BSCTCONCN2, BSCTCONCYL, BSCTCONCON, BSCTCONLN, BSCTCONPL, BSCTCONPT, BSCTCONSPR, BSCTCYLPT, BSCTCYLSPR, BSCTPLNLN, BSCTPLNPT,
BSCTSPRLN, BSCTSPRPL, BSCTSPRPT, BSCTSPRSPR, BSCTTRSPT, BSCTTRSSPR, CALPHASECTOR, CBISECTOR2D, CBISECTOR3D, SBISECTOR.
11.2.31
BSCTCYLPT
SurfaceType | ListType BSCTCYLPT( PointType CylPos, VectorType CylDir,
NumericType CylRadius, PointType Pt,
NumericType Size )
computes the bisector surface of a a cylinder and a point, Pt. The cylinder is located at CylPos,
in the direction of CylDir which also sets the length of the cylinder. The radius of the cylinder is
CylRadius. Size controls the portion of the (infinite) bisector actually represented.
Example:
Pt = point( 0.1, 0, 0.2 );
BisectSrf = BSCTCYLPT( point( 0, 0, 0.5 ), vector( 0, 0, 1 ), 0.2, Pt, 1 );
computes the bisector surface between a cylinder of radius 0.2 along the Z axis and a point at (0.1,
0, 0.2).
See also BSCPCONCON, BSCTCONCN2, BSCTCONCYL, BSCTCONCON, BSCTCONLN, BSCTCONPL, BSCTCONPT, BSCTCONSPR, BSCTCYLPL, BSCTCYLSPR, BSCTPLNLN, BSCTPLNPT,
BSCTSPRLN, BSCTSPRPL, BSCTSPRPT, BSCTSPRSPR, BSCTTRSPT, BSCTTRSSPR, CALPHASECTOR, CBISECTOR2D, CBISECTOR3D, SBISECTOR
11.2.32
BSCTCYLSPR
SurfaceType | ListType BSCTCYLSPR( PointType CylPos, VectorType CylDir,
NumericType CylRadius, PointType SprCntr,
NumericType SprRadius, NumericType Size )
computes the bisector surface of a cylinder and a sphere. The cylinder is located at CylPos, in the
direction of CylDir which also sets the length of the cylinder. The radius of the cylinder is CylRadius.
The sphere is centered at SptCntr and has a radius of SprRadius. Size controls the portion of the
(infinite) bisector actually represented.
Example:
BisectSrf = BSCTCYLSPR( point( 0, 0, 1.5 ), vector( 0, 0, 3 ), 0.2,
point( 0, 0, 0 ), 0.7, 3 );
computed the bisector surface between a cylinder of radius 0.2 along the Z axis and a sphere at the
origin with radius 0.7.
See also BSCPCONCON, BSCTCONCN2, BSCTCONCYL, BSCTCONCON, BSCTCONLN, BSCTCONPL, BSCTCONPT, BSCTCONSPR, BSCTCYLPL, BSCTCYLPT, BSCTPLNLN, BSCTPLNPT,
BSCTSPRLN, BSCTSPRPL, BSCTSPRPT, BSCTSPRSPR, BSCTTRSPT, BSCTTRSSPR, CALPHASECTOR, CBISECTOR2D, CBISECTOR3D, SBISECTOR.
IRIT Solid modeler
11.2.33
G. Elber
43
BSCTPLNLN
SurfaceType | ListType BSCTPLNLN( VectorType LineDir, NumericType Size )
computes the bisector surface of the XY plane (plane Z = 0) and a line in direction LineDir. The
plane and the line are assumed to intersect at the origin. Size controls the portion of the (infinite)
bisector actually represented.
Example:
BisectSrf = BSCTPLNLN( vector( 0, 0, 1 ), 1 );
computes the bisector of the XY plane and the Z axis (a cone).
See also BSCPCONCON, BSCTCONCN2, BSCTCONCYL, BSCTCONCON, BSCTCONLN, BSCTCONPL, BSCTCONPT, BSCTCONSPR, BSCTCYLPL, BSCTCYLPT, BSCTCYLSPR, BSCTPLNPT,
BSCTSPRLN, BSCTSPRPL, BSCTSPRPT, BSCTSPRSPR, BSCTTRSPT, BSCTTRSSPR, CALPHASECTOR, CBISECTOR2D, CBISECTOR3D, SBISECTOR.
11.2.34
BSCTPLNPT
SurfaceType | ListType BSCTPLNPT( PointType Pt, NumericType Size )
computes the bisector surface of the XY plane (plane Z = 0) and a point Pt. This surface is a
paraboloid of revolution. Size controls the portion of the (infinite) bisector actually represented.
Example:
BisectSrf = BSCTPLNPT( point( 0, 0, 1 ), 1 );
computes the bisector surface of the XY plane and the point (0, 0, 1).
See also BSCPCONCON, BSCTCONCN2, BSCTCONCYL, BSCTCONCON, BSCTCONLN, BSCTCONPL, BSCTCONPT, BSCTCONSPR, BSCTCYLPL, BSCTCYLPT, BSCTCYLSPR, BSCTPLNLN,
BSCTSPRLN, BSCTSPRPL, BSCTSPRPT, BSCTSPRSPR, BSCTTRSPT, BSCTTRSSPR, CALPHASECTOR, CBISECTOR2D, CBISECTOR3D, SBISECTOR.
11.2.35
BSCTSPRLN
SurfaceType | ListType BSCTSPRLN( PointType SprCntr, NumericType SprRadius,
NumericType Size )
computes the bisector surface of a sphere and the Z axis line. The sphere is centered at SptCntr
and has a radius of SprRadius. Size controls the portion of the (infinite) bisector actually represented.
Example:
BisectSrf = BSCTSPRLN( vector( 2, 0, 0 ), 0.7, 1 );
See also BSCPCONCON, BSCTCONCN2, BSCTCONCYL, BSCTCONCON, BSCTCONLN, BSCTCONPL, BSCTCONPT, BSCTCONSPR, BSCTCYLPL, BSCTCYLPT, BSCTCYLSPR, BSCTPLNPT,
BSCTSPRLN, BSCTSPRPL, BSCTSPRPT, BSCTSPRSPR, BSCTTRSPT, BSCTTRSSPR, CALPHASECTOR, CBISECTOR2D, CBISECTOR3D, SBISECTOR.
IRIT Solid modeler
11.2.36
G. Elber
44
BSCTSPRPL
SurfaceType | ListType BSCTSPRPL( PointType SprCntr, NumericType SprRadius,
NumericType Size )
computes the bisector surface of the XP plane (the plane Z = 0) and a sphere. This bisector surface
is a paraboloid of revolution. The sphere is centered at SptCntr and has a radius of SprRadius.
Size controls the portion of the (infinite) bisector actually represented.
Example:
BisectSrf = BSCTSPRPL( point( 0, 0, 1.5 ), 0.7, 0.5 );
See also BSCPCONCON, BSCTCONCN2, BSCTCONCYL, BSCTCONCON, BSCTCONLN, BSCTCONPL, BSCTCONPT, BSCTCONSPR, BSCTCYLPL, BSCTCYLPT, BSCTCYLSPR, BSCTPLNLN,
BSCTPLNPT, BSCTSPRLN, BSCTSPRPT, BSCTSPRSPR, BSCTTRSPT, BSCTTRSSPR, CALPHASECTOR, CBISECTOR2D, CBISECTOR3D, SBISECTOR. See Figure 11.
11.2.37
BSCTSPRPT
SurfaceType | ListType BSCTSPRPT( PointType SprCntr, NumericType SprRadius
PointType Pt )
computes the bisector surface of a sphere and a point, Pt. The sphere is centered at SptCntr and
has a radius of SprRadius.
Example:
Pt = point( 0, 0, 1 );
BisectSrf = BSCTSPRPT( point( 0, 0, 0 ), 0.7, Pt );
computes the bisector of a sphere of radius 0.7 centered at the origin, and the point (0, 0, 1).
See also BSCPCONCON, BSCTCONCN2, BSCTCONCYL, BSCTCONCON, BSCTCONLN, BSCTCONPL, BSCTCONPT, BSCTCONSPR, BSCTCYLPL, BSCTCYLPT, BSCTCYLSPR, BSCTPLNLN,
BSCTPLNPT, BSCTSPRLN, BSCTSPRPL, BSCTSPRSPR, BSCTTRSPT, BSCTTRSSPR, CALPHASECTOR, CBISECTOR2D, CBISECTOR3D, SBISECTOR.
11.2.38
BSCTSPRSPR
SurfaceType | ListType BSCTSPRSPR( PointType Spr1Cntr, NumericType Spr1Radius
PointType Spr2Cntr, NumericType Spr2Radius )
computes the bisector surface of two spheres. The spheres are centered at Spt1Cntr and Spt2Cntr
and have a radii of Spr1Radius and Spr2Radius, respectively.
Example:
BisectSrf = ( point( 0, 0, 0 ), 0.7, point( 1, 0, 0 ), 0.2 );
compute the bisectors of a sphere at the origin with radius 0.7, and a sphere at (1, 0, 0) with a
radius of 0.2.
See also BSCPCONCON, BSCTCONCN2, BSCTCONCYL, BSCTCONCON, BSCTCONLN, BSCTCONPL, BSCTCONPT, BSCTCONSPR, BSCTCYLPL, BSCTCYLPT, BSCTCYLSPR, BSCTPLNLN,
BSCTPLNPT, BSCTSPRLN, BSCTSPRPL, BSCTSPRPT, BSCTTRSPT, BSCTTRSSPR, CALPHASECTOR, CBISECTOR2D, CBISECTOR3D, SBISECTOR.
IRIT Solid modeler
11.2.39
G. Elber
45
BSCTTRSPT
SurfaceType | ListType BSCTTRSPT( PointType TrsPos, VectorType TrsDir,
NumericType TrsMjrRad, NumericType TrsMnrRad,
PointType Pt )
computes the bisector surface of a torus and a point, Pt. The torus is located at TrsPos, with its
axis of symmetry TrsDir, a major radius of TrsMajorRad and a minor radius pf TrsMinorRad.
Example:
BisectSrf = BSCTTRSPT( point( 0.0, 0.0, 0.0 ), vector( 0.0, 0.0, 1.0 ),
0.7, 0.7, Pt );
See also BSCPCONCON, BSCTCONCN2, BSCTCONCYL, BSCTCONCON, BSCTCONLN, BSCTCONPL, BSCTCONPT, BSCTCONSPR, BSCTCYLPL, BSCTCYLPT, BSCTCYLSPR, BSCTPLNLN,
BSCTPLNPT, BSCTSPRLN, BSCTSPRPL, BSCTSPRPT, BSCTSPRSPR, BSCTTRSSPR, CALPHASECTOR, CBISECTOR2D, CBISECTOR3D, SBISECTOR.
11.2.40
BSCTTRSSPR
SurfaceType | ListType BSCTTRSSPR( PointType TrsPos, VectorType TrsDir,
NumericType TrsMjrRad, NumericType TrsMnrRad,
PointType SprCntr, NumericType SprRadius )
computes the bisector surface of a torus and a sphere. The torus is located at TrsPos, with its
axis of symmetry TrsDir, a major radius of TrsMajorRad and a minor radius pf TrsMinorRad.
The sphere is centered at SptCntr and has a radius of SprRadius.
Example:
BisectSrf = BSCTTRSSPR( point( 0.0, 0.0, 0.0 ), vector( 0.0, 0.0, 1.0 ),
0.7, 0.7, point( 0.7, 0.0, 0.0 ), 0.7);
See also BSCPCONCON, BSCTCONCN2, BSCTCONCYL, BSCTCONCON, BSCTCONLN, BSCTCONPL, BSCTCONPT, BSCTCONSPR, BSCTCYLPL, BSCTCYLPT, BSCTCYLSPR, BSCTPLNLN,
BSCTPLNPT, BSCTSPRLN, BSCTSPRPL, BSCTSPRPT, BSCTSPRSPR, BSCTTRSPT, CALPHASECTOR, CBISECTOR2D, CBISECTOR3D, SBISECTOR. See Figure 11.
11.2.41
BZR2BSP
CurveType BZR2BSP( CurveType Crv )
or
SurfaceType BZR2BSP( SurfaceType Srf )
creates a B-spline curve or a B-spline surface from the given Bezier curve or Bezier surface. The Bspline curve or surface is assigned an open end knot vector(s) with no interior knots, in the parametric
domain of zero to one.
Example:
BspSrf = BZR2BSP( BzrSrf );
IRIT Solid modeler
G. Elber
46
Figure 11: Bisectors of many CSG primitives such as points, lines, planes, spheres, cones, cylinders, and torii are rational. In (left), the rational bisector of a line and a sphere is shown while
(right) shows the bisector of a sphere and a torus tangent to each other. See BSCTCONCON,
BSCTCONLN, BSCTCONPL, BSCTCONPT, BSCTCONSPR, BSCTCYLPL, BSCTCYLPT, BSCTCYLSPR, BSCTPLNLN, BSCTPLNPT, BSCTSPRLN, BSCTSPRPL, BSCTSPRPT, BSCTSPRSPR,
BSCTTRSPT, BSCTTRSSPR.
11.2.42
BSP2BZR
CurveType | ListType BSP2BZR( CurveType Crv )
or
SurfaceType | ListType BSP2BZR( SurfaceType Srf )
creates Bezier curve(s) or surface(s) from a given B-spline curve or a B-spline surface. The B-spline
input is subdivided at all internal knots to create Bezier curves or surfaces. Therefore, if the input
B-spline does have internal knots, a list of Bezier curves or surfaces is returned. Otherwise, a single
Bezier curve or surface is returned. The returned Beziers will have BspDomainMin/Max attributes
with the original Bspline domain of the Bezier.
Example:
BzrCirc = BSP2BZR( circle( vector( 0.0, 0.0, 0.0 ), 1.0 ) );
would subdivide the unit circle into four 90 degrees Bezier arcs returned in a list.
11.2.43
C2CONTACT
CurveType C2CONTACT( CurveType C1, CurveType C2, NumericType StepSizeTol,
NumericType SubdivTol, NumericType NumericTol )
computes precise 2-contact planar motion of one curve against the other, building the configuration space of the possible motions. See also ”High-Precision Continuous Contact Motion for Planar
IRIT Solid modeler
G. Elber
47
Figure 12: The precise configuration space (three axes for the three degrees of freedom - XY motion and
rotation in the plane) is shown on the right for the two curves on the left. The specific configuration
on the left is designated as a point on the right. Computed by mapping the contacts formulation into
algebraic constraints and solving them.
Freeform Geometric Models”, Graphical Model, Vol 76, pp 580-592, 2014, by Yong-Joon Kim, Gershon
Elber, and Myung-Soo Kim.
Example:
MotionPath = C2CONTACT( c1, c2, 1e-3, 1e-3, 1e-8 );
See Figure 12 for one example.
See also MZERO and MUNIVZERO, MFROMMESH.
11.2.44
C2RECTRGN
CurveType C2RECTRGN( ListType CrvsList, NumericType BndryAngleDeviate,
NumericType OutputType, NumericType SizeRect,
NumericType Smoothing )
divides the 2D region bounded by CrvsList into rectangular domains. BndryAngleDeviate sets
the angle to split into a corner, at C 1 discontinuities inside the input curve(s). OutputType can be
either 0, 1, or 2 for rectangles outout, freeform 4-sided regions, or full tensor product surface for each
retion, respectively. SizeRect GERSHON Smoothing GERSHON
Example:
Srfs = C2RECTRGN( list( C1 ), 1, 2, 1.0, 0 );
See Figure 13 for one example.
IRIT Solid modeler
G. Elber
48
Figure 13: Divides the given curve into rectangle regions: into 4-sided polygons (left), 4-sided freeform
regions (middle), and tensor product surfaces (right).
11.2.45
CALPHASECTOR
SurfaceType CALPHASECTOR( ListType TwoCrvs, NumericType Alpha)
or
{CurveType | SurfaceType} CALPHASECTOR( ListType CrvPt, NumericType Alpha)
computes the alpha sector for TwoCrvs of E3 type or between a curve and a point, CrvPt.
Alpha varies between zero and one. An alpha-sector is created where for Alpha equals zero, the
created surface will contain the first curve, and whereas for Tolerance equals one, the created surface
will contain the second curve. For CrvPt case, if the Crv is E2, the alpha sector is a curve and if it is
E3, the alpha sector is a surface. See also CBISECTOR2D, CBISECTOR3D.
Example:
c1 = creparam( pcircle( vector( 0.0, 0.0, 0.0 ), 1 ), 0, 1 );
c2 = cbezier( list( ctlpt( E3, -1.0, 0.0, 1.0 ),
ctlpt( E3, 1.0, 0.0, -1.0 ) ) );
c1 = coerce( c1, E3);
AlphaSect = CALPHASECTOR( list( c1, c2 ), 0.2 );
interact( list( c1, c2, AlphaSect ) );
computes the alpha sector surface between the two curves c1 and c2 for alpha equals 0.2.
11.2.46
CANGLEMAP
CurveType CANGLEMAP( CurveType Crv, NumericType SubdivTol,
NumericType Angle, NumericType DiagSpan )
IRIT Solid modeler
G. Elber
49
Figure 14: Angular maps computed for the given planar curve on the left, at 30, 60, and 90 degrees,
using CANGLEMAP. Also show is the angular diagonal span in thin dark color.
or
SurfaceType CANGLEMAP( CurveType Crv, NumericType SubdivTol,
NumericType Angle, NumericType DiagSpan )
computes the angular map of planar curve Crv. This bivariate map corresponds pairs of locations
in Crv with tangents that are Angle degrees apart. If, for example, Angle is 90 degrees, locations with
orthogonal tangents are identified. The zero set of this bivariate map provides the actual correspondence
and this zero set is computed with SubdivTol accuracy. If SubdivTol is negative the function whose
zero set is the angular map is returned instead. If DiagSpan is non zero, the angular diagonal span is
sampled DiagSpan samples and is computed instead. The DiagSpan will provide for each parameter
t the forward and backward step that could be taken before hitting an angular span of Angle degrees
for the first time.
Example:
AM = cAngleMap( Crv, 0.01, Angle, false );
ADS = cAngleMap( Crv, 0.01, Angle, 300 );
computes the Angular map of curve Crv ay angle Angle with subdivison tolerance 0.01 and then
extract the angular diagonal span with the same parameters and 300 samples.
Figure 14 provides some insight curve, with three angular maps of 30, 60 and 90 degrees. The
angular diagonal span is also drawn in dark thin lines.
See also CVIEWMAP, CVISIBLE, CARRANGMNT.
11.2.47
CARCLEN
CurveType CARCLEN( CurveType Crv, NumericType Fineness, NumericType Order )
approximates an arc length curve out of the given curve Crv. The new approximated curve is
sampled with tolerance that is governed by Fineness and will be of order Order. The returned curve
is not guaranteed to share the exact same trace as the original curve Crv.
G. Elber
IRIT Solid modeler
50
Example:
c2 = carclen( c, 1e-4, 3 );
approximates c as a quadratic arc length curve c2 by sampling the original curve with tolerance
1e-4.
11.2.48
CAREA
CurveType CAREA( CurveType Crv )
computes the integral area curve, ACrv, of the given curve Crv, up to a sign. If Crv is a closed
curve with domain t0 to t1, then the difference of ACrv(t1) - ACrv(t0) is the requested area.
The integral area curve C(t) = (x(t), y(t)) is computed as the following integral:
1
2
t2
t1
−x (t)y(t) + x(t)y (t)dt
Example:
Crv = pcircle( vector( 0, 0, 0 ), 1 );
ACrv = CAREA( Crv );
Pi = abs( coord( ceval( ACrv, 4 ), 1 ) - coord( ceval( ACrv, 0 ), 1 ) );
is yet another way of approximating the value of Pi. See also SMOMENTS, SVOLUME and TVOLUME.
11.2.49
CARRANGMNT
CurveType CARRANGMNT( CurveType Crvs, NumericType Eps,
NumericType Operation, PointType CenterPt )
computations over the given arrangment of planar curves Crvs upto accuracy that is governed by
Eps. Operation can be one of:
• 1 - computes all the curve curve intersection locations in the arrangment and keep the results in
”InterPts” attributes on the returned curves.
• 2 - computes all the curve curve intersection locations in the arrangment and split all curves at
all those intersections.
• 3 - computes Y-minimum lower envelop for this curves’ arrangement.
• 4 - computes radial lower envelop around point Center Pt.
CenterPt is ignored if Operation is not equal to 4.
Example:
LinearLowEnv = carrangmnt( Crvs, 1e-12, 3, 0 );
computes the Y-minimum envelop of curve Crvs.
Figure 15 show one example of Y-minimum envelop of curves.
See also CVIEWMAP, CVISIBLE, CANGLEMAP, CARNGMNT2.
IRIT Solid modeler
G. Elber
51
Figure 15: Y-minimum envelop for a set of curves, computed using CARRANGMNT. The lower envelop
is shown in thick lines.
11.2.50
CARNGMNT2
CurveType CARNGMNT2( CurveType Crvs, NumericType Operation,
ListType Params )
computations over the given arrangment of planar curves Crvs upto accuracy. Operation can be
one of:
• 1 - create a new arrangment. Params contains four items: (Tolerance for equality of end points,
Planarity tolerance to consider arrangement planar, TRUE to project all curves to be on computed
plane, Mask for input type to consider: 0x01 to handle polylines. 0x02 to handle curves. 0x04
to handle trimming curves in trimmed surfaces).
• 2 - copy an arrangement. Params contains no items.
• 3 - filter duplications in the input arrangement. Params contains two items: (Epsilon to consider
the curves the same, TRUE to update end points to be the same).
IRIT Solid modeler
G. Elber
52
• 4 - filter duplications in the tangential input arrangement. Params contains one item: (Epsilon
angle in degrees to consider two curves with the same tangent).
• 5 - Splits curves at special points, Params contains two items: (Mask for splitting type to
consider: 0x01 to split at inflection pts — 0x02 to split at max curvatures — 0x04 to split at C1
disconts, Tolerance of splitting computation).
• 6 - Split piecewise curves at large angular deviation of adjacent edges. Params contains one
item: (Angular deviation (in degrees) to split linear curves at).
• 7 - Split curves at intersection locations. Params contains one item: (Intersection computation
tolerance).
• 8 - Splits curve near prescribed points. Params contains two items: (A list object of pts to
examine and split if near them, Tolerance to consider a point near/on a curve).
• 9 - Merge adjacent curves. Params contains one item: (Angular deviation (in degrees) to merge
C1 discont. curves at).
• 10 - Least square fit linear curves. Params contains one item: (Fitting Parameter to fit smooth
quadratic C1 curves to linear curves. Higher order curves are not affected. If Param positive,
the fitted curve size is set to InputCrvSize * FitC1Crv / 100 (i.e. Param serves as percetange of
input size). If Param negative, the Fitted curve size is simply set to ABS(Param))
• 11 - Evaluate the curve arrangement. Params contains one item: (TRUE to ignore hanging
curves that join other curves at only one of their end points).
• 12 - Classify the curve arrangement. This returns nothing. Params contains one item.
• 13 - Report the result. Params contains one item: (A mask of desired report: 0x01 to dump
info on crvs — 0x02 to also dump the crvs — 0x04 to report end pts in arrangment if evaluated
— 0x08 to report regions in arrangment if evaluated).
• 14 - Dumps to stdout information on the arrangement. Params contains three item: (Style of
expected output: 1 for individual crv segs in each region (loop etc.) or 2 for merged curves so
every region is one curve or 3 for topology as an ordered list of curve segments and each region is
a list of indices into the first list. A negative -i index means index i but a reversed crv. 101, 102,
103: same as 1,2,3 but pt is evaluated at 1/13 of curve parameteric domain to identify orientation,
Tolerance of topology reconstruction (in case 3 only), Zoffset in Z for the i’th region, by amount
i*ZOffset).
• 15 - Free a curve arrangement. Params contains no item.
Example:
ca1 = carngmnt2( crvs2, CA_CREATE, list( 1e-2, 1e-2, TRUE, 7 ) );
ca2 = carngmnt2( ca1, CA_BREAK_INTER, list( 1e-6 ) );
ca3 = carngmnt2( ca2, CA_EVAL_CA, list( TRUE ) );
dm = carngmnt2( ca3, CA_CLASSIFY, nil() );
CAFinal2 = carngmnt2( ca3, CA_OUTPUT, list( 2, 1e-2, 0.02 ) );
dm = carngmnt2( ca3, CA_REPORT, list( 1 ) );
dm = carngmnt2( ca3, CA_REPORT, list( 2 ) );
dm = carngmnt2( ca3, CA_REPORT, list( 4 ) );
dm = carngmnt2( ca3, CA_REPORT, list( 8 ) );
G. Elber
IRIT Solid modeler
53
Creates a curves’ arrangment from crvs2 and classify into closed loops after breaking at all crv-crv
intersections.
See also CARRANGMNT.
11.2.51
CBEZIER
CurveType CBEZIER( ListType CtlPtList )
creates a Bezier curve out of the provided control point list. CtlPtList is a list of control points,
all of which must be of type (E1-E9 P1-P9), or regular PointType defining the curve’s control polygon.
The curve’s point type will be of a space which is the union of the spaces of all points. The created
curve is polynomial (or rational),
C(t) =
k
Pi Bi (t),
(2)
i=0
where Pi are the control points CtlPtList, and k is the degree of the curve, which is one less than the
number of points.
Example:
s45 = sin(pi / 4);
Arc90 = CBEZIER( list( ctlpt( P2, 1.0, 0.0, 1.0 ),
ctlpt( P2, s45, s45, s45 ),
ctlpt( P1, 1.0, 1.0 ) ) );
constructs an arc of 90 degrees as a rational quadratic Bezier curve.
See also CBSPLINE, CPOWER and SBEZIER.
11.2.52
CBIARCS
ListType CBIARCS( CurveType Crv, NumericType Tol, NumericType MaxAngle )
computes bi-arc fitting to a given curve Crv, with a tolarence Tol in L-infinity sense, and a
maximum angular span of each arc of at most MaxAngle degrees. Returned is a list of arcs as
rational Bezier curves with an arc ”center” point attribute to ease the reconstruction of the analytic
representation of the geometry.
Example:
C1 = cbspline( 4,
list( ctlpt( E3,
ctlpt( E2,
ctlpt( E2,
ctlpt( E2,
ctlpt( E2,
ctlpt( E2,
ctlpt( E2,
ctlpt( E2,
ctlpt( E2,
ctlpt( E2,
ctlpt( E2,
-0.287, -0.286, 0 ),
0.0272, -0.425 ),
0.265, -0.0839 ),
0.607, -0.165 ),
0.832, -0.205 ),
0.737, 0.042 ),
0.357, 0.103 ),
0.508, 0.298 ),
0.814, 0.649 ),
0.692, 0.775 ),
0.411, 0.391 ),
IRIT Solid modeler
G. Elber
54
Figure 16: Bi-arcs are fitted to the given curve in the shape of a human hand, at two different tolerances,
using CBIARCS.
ctlpt( E2, 0.301, 0.315 ),
ctlpt( E2, 0.625, 0.945 ),
ctlpt( E2, 0.49, 1.03 ),
ctlpt( E2, 0.369, 0.829 ),
ctlpt( E2, 0.185, 0.384 ),
ctlpt( E2, 0.194, 0.518 ),
ctlpt( E2, 0.243, 1.09 ),
ctlpt( E2, 0.0653, 1.13 ),
ctlpt( E2, 0.0644, 0.381 ),
ctlpt( E2, 0.00925, 0.496 ),
ctlpt( E2, -0.0113, 0.943 ),
ctlpt( E2, -0.202, 0.954 ),
ctlpt( E2, -0.147, 0.644 ),
ctlpt( E2, -0.162, 0.208 ),
ctlpt( E2, -0.337, -0.156 ) ),
list( kv_periodic ) );
C1 = coerce( C1, kv_open );
Arcs = CBIARCS( Crv, 0.01, 90 );
computes bi-arcs fitting to a given curve in the shape of a human hand, with arcs with at most 90
degrees and tolerance of 0.01. See Figure 16. See also QUADCRVS, CUBICCRVS.
11.2.53
CBISECTOR2D
CurveType
CBISECTOR2D( CurveType Crv,
G. Elber
IRIT Solid modeler
NumericType
NumericType
NumericType
NumericType
NumericType
55
ZeroSet,
BisectFunc,
Tolerance,
NumerImprove,
SameNormal )
or
CurveType
CBISECTOR2D( ListType TwoCrvs,
NumericType ZeroSet,
NumericType BisectFunc,
NumericType Tolerance,
NumericType NumerImprove,
NumericType SameNormal )
or
SurfaceType CBISECTOR2D( ListType CrvPt,
NumericType ZeroSet,
NumericType UseNrmlTan,
NumericType Tolerance,
NumericType NumerImprove,
NumericType SameNormal )
computes the self bisector curve(s) for Crv or the bisector(s) of TwoCrvs or the bisector of a curve
and a point, CrvPt. If ZeroSet is TRUE, the zero-set surface is computed and is used mainly for
displaying the zero-set. If it is FALSE, the bisector is returned. The zero-set is computing using the
functions F1, F2 and F3 in the paper Gershon Elber and Myung Soo Kim, “Bisector Curves of Planar
Rational Curves,” CAD, Vol 30, No 14, pp 1089-1096, December 1998 which is determined by the BisectFunc parameter. If BisectFunc = 1, then F1 is used and so on. Tolerance controls the accuracy
of the computation, with 0.01 as a good starting value. If Tolerance is negative, NumerImprove can
be either TRUE or FALSE, allowing or disabling a final numerical improvement stage. SameNormal
can also assume a TRUE or FALSE value, selecting only opposite facing normals, if TRUE. The bisector curve of a curve (E2) and a point CrvPt is computed analytically. Other parameters are ignored.
See also CBISECTOR3D, CALPHASECTOR, SBISECTOR.
Example:
c1 = cbezier( list( ctlpt( E2, -0.5, -0.2
ctlpt( E2, 0.0, -0.2
ctlpt( E2, 0.6, 0.6
c2 = cbezier( list( ctlpt( E2, 0.3, -0.7
ctlpt( E2, -0.2, -0.7
ctlpt( E2, 0.7, 0.6
BisectCrvs = CBISECTOR2D( list( c1, c2 ),
All = list( c1, c2, BisectCrvs );
interact( list( All, view_mat2d ) );
),
),
) ) );
),
),
) ) );
TRUE, 1, 0.01, true, false );
computes the bisector for planar curves as a set of bisector curves. See Figure 17.
IRIT Solid modeler
G. Elber
56
Figure 17: (left) Bisectors of two quadratic Bezier curves in the plane. (right) A bisector surface of a
line and a circle in three space. See the CBISECTOR2D and CBISECTOR3D functions respectively.
11.2.54
CBISECTOR3D
SurfaceType CBISECTOR3D( ListType TwoCrvs, NumericType BisectFunc)
or
SurfaceType CBISECTOR3D( ListType CrvPt, NumericType BisectFunc)
computes the bisector surface TwoCrvs or the bisector surface of a curve and a point, CrvPt, in
R3. The BisectFunc determines the function to be used for generating the bisector surface between
the two E3 curves. If 1, a 3-space bisector surface is generated to the given curves or a curve and a
point. If 4, a surface whose zero set prescribes the bisectors of the given curves is returned. For a
bisector between a curve and a point, the BisectFunc parameter is ignored and a 3 space surface is
always computed. See also CBISECTOR2D, CALPHASECTOR, SBISECTOR.
Example:
c1 = creparam( pcircle( vector( 0.0, 0.0, 0.0 ), 1 ), 0, 1 );
c2 = cbezier( list( ctlpt( E3, -1.0, 0.0, 1.0 ),
ctlpt( E3, 1.0, 0.0, -1.0 ) ) );
c1 = coerce( c1, E3);
BisectSrf = CBISECTOR3D( list( c1, c2 ), 1 );
interact( list( c1, c2, BisectSrf ) );
computes a bisector surface of a Z parallel line and a circle in the XY plane. See Figure 17.
G. Elber
IRIT Solid modeler
11.2.55
57
CBSPLINE
CurveType CBSPLINE( NumericType Order, ListType CtlPtList,
ListType KnotVector )
creates a B-spline curve out of the provided control point list, the knot vector, and the specified
order. CtlPtList is a list of control points, all of which must be of type (E1-E9 P1-P9, or regular
PointType defining the curve’s control polygon. The curve’s point type will be of a space which is
the union of the spaces of all points. The length of the KnotVector must be equal to the number
of control points in CtlPtList plus the Order. If, however, the length of the knot vector is equal
to #CtlPtList + Order + Order - 1, the curve is assumed to be periodic. The knot vector list
may be specified as either list( KV OPEN ), list( KV FLOAT ) or list( KV PERIODIC ) in
which a uniform open, uniform floating or uniform periodic knot vector with the appropriate length is
automatically constructed.
The created curve is the piecewise polynomial (or rational),
C(t) =
k
Pi Bi,τ (t),
(3)
i=0
where Pi are the control points CtlPtList and k is the degree of the curve, which is one less than the
Order or number of points. τ is the knot vector of the curve.
Example:
s45 = sin(pi / 4);
HalfCirc = CBSPLINE( 3,
list( ctlpt( P3,
ctlpt( P3,
ctlpt( P3,
ctlpt( P3,
ctlpt( P3,
list( 0, 0, 0, 1,
1.0, 1.0, 0.0,
s45, s45, s45,
1.0, 0.0, 1.0,
s45, -s45, s45,
1.0, -1.0, 0.0,
1, 2, 2, 2 ) );
0.0
0.0
0.0
0.0
0.0
),
),
),
),
) ),
constructs an arc of 180 degrees in the XZ plane as a rational quadratic B-spline curve.
Example:
c = CBSPLINE( 4,
list( ctlpt( E2, 0.5, 0.5 ),
ctlpt( E2, -0.5, 0.5 ),
ctlpt( E2, -0.5, -0.5 ),
ctlpt( E2, 0.5, -0.5 ) ),
list( KV_PERIODIC ) );
color( c, red );
viewobj( c );
c1 = cregion( c, 3, 4 );
color( c1, green );
c2 = cregion( c, 4, 5 );
color( c2, yellow );
c3 = cregion( c, 5, 6 );
IRIT Solid modeler
G. Elber
58
Figure 18: A cubic periodic curve created using KV PERIODIC end conditions.
color( c3, cyan );
c4 = cregion( c, 6, 7 );
color( c3, magenta );
viewobj( list( c1, c2, c3, c4 ) );
creates a periodic curve and extracts its four polynomial domains as four open end B-spline curves.
See Figure 18.
See also CBEZIER, CPOWER and SBSPLINE.
11.2.56
CCINTER
ListType CCINTER( CurveType Crv1, CurveType Crv2, NumericType Epsilon,
NumericType SelfInter )
or
SurfaceType CCINTER( CurveType Crv1, CurveType Crv2, NumericType Epsilon,
NumericType SelfInter )
compute the intersection point(s) of Crv1 and Crv2 in the XY plane. Since this computation
involves numeric operations, Epsilon controls the accuracy of the parametric values of the result.
It returns a list of PointTypes, each containing the parameter of Crv1 in the X coordinate, and
IRIT Solid modeler
G. Elber
59
Figure 19: A intersection point of two freeform curve computed using CCINTER.
the parameter of Crv2 in the Y coordinate. If, however, Epsilon is negative, a scalar field surface
representing the square of the distance function is returned instead. If SelfInter is TRUE, Crv1 and
Crv2 can be the same curve, and self intersection points are searched for instead.
Example:
crv1 = cbspline( 3,
list( ctlpt( E2, 0, 0 ),
ctlpt( E2, 0, 0.5 ),
ctlpt( E2, 0.5, 0.7 ),
ctlpt( E2, 1, 1 ) ),
list( KV_OPEN ) );
crv2 = cbspline( 3,
list( ctlpt( E2, 1, 0 ),
ctlpt( E2, 0.7, 0.25 ),
ctlpt( E2, 0.3, 0.5 ),
ctlpt( E2, 0, 1 ) ),
list( KV_OPEN ) );
inter_pts = CCINTER( crv1, crv2, 0.0001, FALSE );
computes the parameter values of the intersection point of crv1 and crv2 to a tolerance of 0.0001.
See Figure 19.
G. Elber
IRIT Solid modeler
11.2.57
60
CCRVTR
ListType CCRVTR( CurveType Crv, NumericType Epsilon, NumericType Operation )
or
CurveType CCRVTR( CurveType Crv, NumericType Epsilon, NumericType Operation )
computes the curvature field’s magnitude square of Crv in the XY plane if Operation is 1, or its
extreme points if Operation equals 2. This set includes not only points of maximum (convexity) and
mimumum (concavity) curvature, but also points of zero curvature locations, such as inflection points.
A list of parameter value(s) of the location(s) with extreme curvature along the Crv is returned in the
latter case. Since this operation is partially numeric, Epsilon is used to set the needed accuracy. If,
however, Operation is 3, the input curve is being split at the extreme curvature location and a list of
curve segments is returned instead.
This function computes the (square of the) curvature scalar field for planar curves as,
κ(t) =
x (t)y (t) − x (t)y (t)
3
((x (t))2 + (y (t))2 ) 2
,
(4)
and computes (the square of) kN for three-dimensional curves as the following vector field,
κ(t)N (t) = κ(t)B(t) × T (t) =
(C × C ) × C C
C × C =
×
.
3
C C C 4
(5)
The extremum values are extracted from the computed curvature field. This (square of the) curvature field is a high order curve, even if the input geometry is of low order. This is especially true for
rational curves, for which the quotient rule for differentiation is used and almost doubles the degree in
every differentiation.
See also CCRVTREVAL, CINFLECT, CNRMLCRV, CZEROS, CEXTREMES, and SCRVTR.
Example:
crv = cbezier( list( ctlpt( E2, -1.0, 0.5 ),
ctlpt( E2, -0.5, -2.0 ),
ctlpt( E2, 0.0, 1.0 ),
ctlpt( E2, 1.0, 0.0 ) ) ) * rotz( 30 );
crvtr = CCRVTR( crv, 0.001, 2 );
pt_crvtr = nil();
pt = nil();
for ( i = 1, 1, sizeof( crvtr ),
( pt = ceval( crv, nth( crvtr, i ) ) ):
snoc( pt, pt_crvtr )
);
interact( list( crv, pt_crvtr ) );
finds the extreme curvature points in Crv and displays them all with the curve. See Figure 20.
11.2.58
CCRVTR
PolyType CCRVTR1PT( CurveType Crv, NumericType CtlPtIdx, NumericType Min,
G. Elber
IRIT Solid modeler
61
Figure 20: Extreme curvature locations on a freeform curve computed using CCRVTR.
NumericType Max, NumericType SubdivTol, NumericType NumerTol,
NumericType Operation )
or
MultivarType CCRVTR1PT( CurveType Crv, NumericType CtlPtIdx, NumericType Min,
NumericType Max, NumericType SubdivTol, NumericType NumerTol,
NumericType Operation )
computes the topology changes in the curvature field of curve Crv as control point index CtlPtIdx
in the curve is moving. The motion of the control points is limited to be between Min and Max in X
and Y. See MZERO for the meaning of the SubdivTol and NumerTol. The returned value depends
on Operation: If Operation is 0, a multivariate of dim(Crv) + 1 that is representing the curvature
topology field is returned. If Operation is 1, the marching cubes of Operation == 0 is computed
and returned as a polygonal surface. If Operation is 2 the silhouette of 1 is computed and returned
and if Operation is 3 the result of 2 is evaluated back into Euclidean space.
Example:
MV = CCRVTR1PT( Crv, 4, Min, Max, 0.01, 1e-10, 1 );
11.2.59
CCRVTREVAL
NumericType CCRVTREVAL( CurveType Curve, NumericType t )
computes the curvature of curve Curve at parameter t.
Example:
k = CCRVTREVAL(Crv, 0.5 );
See also CCRVTR.
IRIT Solid modeler
G. Elber
62
Figure 21: A piecewise cubic fit to a given general curve, at three different tolerances, using CCUBICS.
11.2.60
CCUBICS
CurveType CCUBICS( CurveType Crv, NumericType Tolerance )
returns a list of cubic curves approximating the given curve Crv to within Tolerance.
Example:
Crv = CCUBICS( Crv, 0.01 );
See Figure 21.
See also CUBICCRVS, QUADCRVS, and CBIARCS.
11.2.61
CDERIVE
CurveType CDERIVE( CurveType Curve )
returns a vector field curve representing the differentiated curve, also known as the Hodograph
curve.
Example:
Circ = circle( vector( 0.0, 0.0, 0.0 ), 1.0 );
Hodograph = CDERIVE( Circ );
See Figure 22. See also CINTEG, SDERIVE, TDERIVE, and MDERIVE
11.2.62
CDIVIDE
ListType CDIVIDE( CurveType Curve, NumericType Param )
subdivides a curve into two sub-curves at the specified parameter value. Curve can be either a
B-spline curve in which Param must be within the Curve’s parametric domain, or a Bezier curve in
which Param can be arbitrary, extrapolating if not in the range of zero to one.
It returns a list of the two sub-curves. The individual curves may be extracted from the list using
the NTH command.
Example:
IRIT Solid modeler
G. Elber
63
Figure 22: The Hodograph (thick) of a B-spline circle (thin) constructed as four 90 degrees rational
Bezier arcs, computed using CDERIVE.
Figure 23: A B-spline curve is subdivided into two distinct regions using CDIVIDE.
IRIT Solid modeler
G. Elber
64
CrvLst = CDIVIDE( Crv, 1.3 );
Crv1 = nth( CrvLst, 1 );
Crv2 = nth( CrvLst, 2 );
subdivides the curve Crv at the parameter value of 0.5. See Figure 23. See also SDIVIDE,
TDIVIDE, and MDIVIDE
11.2.63
CEDITPT
CurveType CEDITPT( CurveType Curve, CtlPtType CtlPt, NumericType Index )
provides a simple mechanism to manually modify a single control point number Index (base count
is 0) in the Curve, by substituting CtlPt instead. CtlPt must have the same point type as the control
points of the Curve. The original curve Curve is not modified.
Example:
CPt = ctlpt( E3, 1, 2, 3 );
NewCrv = CEDITPT( Curve, CPt, 1 );
constructs a NewCrv with the second control point of Curve being CPt.
11.2.64
CENVOFF
SurfaceType CENVOFF( CurveType Curve,
NumericType Height, NumericType Tolerance )
or
ListType CENVOFF( CurveType Curve, NumericType Height, NumericType Tolerance )
computes the offset envelope of a given planar curve Curve. The offset envelope is the envelope
of cones with apex on point on Curve in the Z direction. Height is the height of the cone which
also equals the offset distance or the width of the cones. Tolerance controls the accuracy of the offset
approximation.
If the Curve is closed, two surfaces are created in the offset envelope, one for the inside and another
for the outside. If Curve is open, a single envelope offset surface is computed, wrapping around both
sides.
Example:
c1 = cbezier( list( ctlpt( E2, -0.8, 0.0 ),
ctlpt( E2, -0.2, 1.0 ),
ctlpt( E2, 0.2, 0.0 ),
ctlpt( E2, 0.8, 0.6 ) ) );
s1 = CENVOFF( c1, 0.5, 0.01 );
computes an envelope offset surface for a cubic Bezier curve c1 of Height of 0.5 and Tolerance
of 0.01. See Figure 24.
IRIT Solid modeler
G. Elber
65
Figure 24: The envelope offset of a freeform planar curve computed using CENVOFF.
11.2.65
CEVAL
CtlPtType CEVAL( CurveType Curve, NumericType Param )
evaluates the provided Curve at the given Param value. Param should be in the curve’s parametric domain if the Curve is a B-spline curve, or between zero and one if the Curve is a Bezier
curve. The returned control point has the same point type as the control points of the Curve.
Example:
CPt = CEVAL( Crv, 0.25 );
evaluates Crv at the parameter value of 0.25. See also SEVAL, MEVAL, TEVAL.
11.2.66
CEXTREMES
ListType CEXTREMES( CurveType Crv, NumericType Epsilon, NumericType Axis )
computes the extreme set of the given Crv in the given axis (1 for X, 2 for Y, 3 for Z). Since this
computation is numeric, an Epsilon is also required to specify the desired tolerance. It returns a list
of all the parameter values (NumericType) in which the curve takes an extreme value.
Example:
extremes = CEXTREMES( Crv, 0.0001, 1 );
computes the extreme set of curve crv, in the X axis, with error tolerance of 0.0001. See also
CZERO. See Figure 25.
11.2.67
CFNCRVTR
CurveType CFNCRVTR( CurveType E2Crv, NumericType Samples,
NumericType Order, NumericType ArcLen )
or
CurveType CFNCRVTR( CurveType CrvtrE1Crv, NumericType Accuracy,
NumericType Order, NumericType Periodic )
IRIT Solid modeler
G. Elber
66
Figure 25: The X local extremums of a freeform curve are isolated using CEXTREMES.
computes the curvature field of planar curve E2Crv in the first form, and reconstructs an E2 planar
curve from the given curvature field CrvtrE1Crv in the second form. In the first form, Samples
defines the numer of samples to use along the input curve while if ArcLen TRUE the samples are also
made along the arc length of E2Crv. In the second form, a planar curve is reconstructed from the
curvature field of CrvtrE1Crv, with Accuracy to control the accuracy. If the reconstructed curve is
suppose to be closed, set Periodic to TRUE. In both forms, Order sets the order of the return curve.
Example:
CrvtrField = CFNCRVTR( Crv, 1000, 2, TRUE );
11.2.68
CHELIX
CurveType CHELIX( NumericType NumLoops, NumericType Pitch,
NumericType Radius, NumericType Samples,
NumericType CtlPtsPerLoop )
constructs a polynomial approximation of a helical curve of NumLoops loops and specified Radius
and Pitch. The curve is approximated as a least sqaures fit of Samples samples and CtlPtsPerLoop
control points per loop.
Example:
HelixcalCrv = chelix( 3, 0.333, 0.444, 100, 6 );
See Figure 26 for this helix 3 loops. See also CSPIRAL, CSIN
11.2.69
CIEXTREME
ListType CIEXTREME( SurfaceType Srf, NumericType Dir,
NumericType SubdivTol, NumericType NumerTol )
G. Elber
IRIT Solid modeler
67
Figure 26: Approximates a helical curve using CHELIX.
computes the X- or Y-extreme values of the implicit univariate defined as the zero set of Srf. In
addition, this function also detects hyperbolic tangent contact of Srf with the plane Z = 0. Dir
specified the desired direction of the extremum to extract, one of COL or ROW. See MZERO for the
meaning of the SubdivTol and NumerTol.
Example:
ViewMap = CIEXTREME( Srf, col, 0.01, 1e-9 );
See Figure 27.
11.2.70
CINFLECT
ListType CINFLECT( CurveType Crv, NumericType Epsilon, NumericType Operation )
or
CurveType CINFLECT( CurveType Crv, NumericType Epsilon,
NumericType Operation )
computes and returns a scalar field (the numerator of the curvature field, the sign of the curvature
field if you like) whose zeros are the inflection points of Crv in the XY plane, if Operation is 1.
G. Elber
IRIT Solid modeler
68
Figure 27: An example of computing the X- and Y-extreme locations of this implicit curve defined as
the zero set of the surface. Also detected surface tangency contacts with the plane Z = 0.
If Operation is 2, the inflection points are derived and returned as list of all the parameter values
(NumericType) in which the curve has an inflection point. Since this computation is partially numeric,
an Epsilon is also required to specify the desired tolerance. If, however, Operation is 3, the input
curve Crv is being split at all the inflection points and the different, inflection free, curve segements
are returned in a list.
The sign of curvature scalar field is equal to,
σ(t) = x (t)y (t) − x (t)y (t).
(6)
Example:
inflect = CINFLECT( crv, 0.001, 2 );
pt_inflect = nil();
pt = nil();
for ( i = 1, 1, sizeof( inflect ),
pt = ceval( crv, nth( inflect, i ) ):
snoc( pt, pt_inflect )
);
interact( list( axes, crv, pt_inflect ) );
computes the set of inflection points of curve crv with error tolerance of 0.001. This set is then
scanned in a loop and evaluated to the curve’s locations which are then displayed with the crv. See
also CZEROS, CEXTREMES, and CCRVTR. See Figure 28.
11.2.71
CINTEG
CurveType CINTEG( CurveType Crv );
returns a vector field curve representing the integral curve. See also CDERIVE.
IRIT Solid modeler
G. Elber
69
Figure 28: The Inflection points of a freeform curve can be isolated using CINFLECT.
11.2.72
CINTERP
CurveType CINTERP( ListType PtList, NumericType Order, NumericType Size,
ConstantType Param, NumericType Periodic)
or
CurveType CINTERP( CurveType Crv, NumericType Order, NumericType Size,
ConstantType Param, NumericType Periodic)
or
CurveType CINTERP( ListType PtList, NumericType Order, NumericType Size,
ListType Params, NumericType Periodic)
or
CurveType CINTERP( CurveType Crv, NumericType Order, NumericType Size,
ListType Params, NumericType Periodic)
compute a B-spline curve that interpolates or approximates the list of points in PtList or a given
curve Crv. The B-spline curve will have order Order and Size control points, and will be periodic if periodic is non zero. The knots will be spaced according to Param which can be one of
PARAM UNIFORM, PARAM CHORD, PARAM CENTRIP, PARAM NEILFOL, or lists of parameter values and knots (see below). The PARAM UNIFORM prescribes a uniform knot sequence,
PARAM CHORD specifies knot spacing according to the chord length and PARAM CENTRIP according to the square root of the chord length. Finally, PARAM NEILFOL takes into consideration the
angles between three consecutive points. A periodic curve will be coerced to have a PARAM UNIFORM
knot sequence. If Params is a list object, it should contain two lists of numerical values. The first
list contains the parameter values at which to approximate or interpolate the data points. Hence, the
length of this list must equal the length of the PtList data. The second list specifies the knot vector
of the construct B-spline curve. Use of Periodic end conditions can create cases with degenerated
linear systems (determinant equal zero). Increase or decrease of the Order of the B-spline by one will
resolve the problem. All points in PtList must be of type (E1-E9, P1-P9) control point, or regular
PointType. If Size is equal to the number of points in PtList, the resulting curve will interpolate the
data set. Otherwise, if Size is less than the number of points in PtList, the point data set will be least
square approximated. At no time can Size be lower than Order. Size of zero forces interpolation by
selecting Size to be the size of the data set. All interior knots will be distinct, preserving maximal
IRIT Solid modeler
G. Elber
70
Figure 29: A Helix, sampled at 100 locations, is least square fitted using CINTERP by a quadratic
B-spline curve and 21 control points.
continuity. The resulting B-spline curve will have open end conditions.
Example:
pl = nil();
for ( x = 0, 1, 100,
snoc(point(cos(x / 5), sin(x / 5), x / 50 - 1), pl)
);
c = CINTERP( pl, 3, 21, PARAM_UNIFORM, false );
samples a helical curve at 100 points and least square fit of a quadratic B-spline curve with 21 points
to the data set. The curve will have a uniform knot spacing and is not periodic. See also SINTERP,
TINTERP and LINTERP. See Figure 29.
11.2.73
CIRCLE
CurveType CIRCLE( VectorType Center, NumericType Radius )
constructs a circle at the specified Center with the specified Radius. The returned circle is a
B-spline curve of four piecewise Bezier 90 degree arcs. The construced circle is always parallel to the
XY plane. Use the linear transformation routines to place the circle in the appropriate orientation and
location.
11.2.74
CIRCPOLY
PolygonType CIRCPOLY( VectorType Normal, VectorType Trans, NumericType Radius )
defines a circular polygon in a plane perpendicular to Normal that contains the Trans point. The
constructed polygon is centered at Trans. RESOLUTION vertices will be defined with Radius from
distance from Trans.
G. Elber
IRIT Solid modeler
71
Alternative ways to construct a polygon are manual construction of the vertices using POLY, or
the construction of a flat ruled surface using RULEDSRF.
11.2.75
CLNTCRSR
ListType CLNTCRSR( NumericType TimeOut )
reads the mouse coordinates as well as mouse events from displace devices, or times out after
TimeOut miliseconds. A list object of two sub-objects, a points and a vector, named ” PickCrsr ” is
returned. These point and vector define the three-dimensional line of the mouse in object space.
Mouse events are typically processed by the display device. However, by the command ”CLNTPICKCRSR” (in iritinit.irt) which sends a ”PICKCRSR” request to the display devices, mouse events
will be sent to the server. The server can be requested to keep mouse events for ”CLNTCRSR” to be
read via the IritState command and the ”CursorKeep” attribute.
Both the point and the vector will have a numeric attribute of ”EventType” that will have the
following meaning:
1
2
5
Mouse motion event
Mouse down event
Mouse up event
In case of a time out the returned list object will be empty and will have the name ” PickFail ”.
Example:
ClntPickCrsr( clients_all );
IritState( "CursorKeep", 1 );
Quit = 0;
for ( i = 0, 1, 10,
CLNTCRSR( 10000 ) );
ClntPickDone( clients_all );
IritState( "CursorKeep", 0 );
asks all clients to send mouse events to the server, asks the server to keep mouse events, and then
reads 10 mouse events.
11.2.76
CLNTREAD
AnyType CLNTREAD( NumericType Handler, NumericType Block )
reads one object from a client communication channel. Handler contains the index of the communication channel opened via CLNTEXEC. If no data is available in the communication channel, this
function will block for at most Block milliseconds until data is found or timeout occurs. In the latter,
a single StringType object is returned with the content of ”no data (timeout)”. If Handler equals -1,
the regular display device (forked via, for example, VIEWOBJ command) is used. See also VIEWSET,
CLNTWRITE, CLNTCLOSE, and CLNTEXEC.
Example:
G. Elber
IRIT Solid modeler
72
h2 = clntexec( "xmtdrvs -s-" );
.
.
Model = CLNTREAD( h2 );
.
.
clntclose( h2,TRUE );
reads one object from client through communication channel h2 and saves it in variable model.
11.2.77
CMESH
CurveType CMESH( SurfaceType Srf, ConstantType Direction, NumericType Index )
returns a single ROW or COLumn as specified by the Direction and Index (base count is 0) of
the control mesh of surface Srf.
The returned curve will have the same knot vector as Srf in the appropriate direction. See also
CSURFACE.
This curve is not necessarily in the surface Srf. It is equal to,
C(t) =
m
Pij Bi (t),
(7)
i=0
and similar for the other parametric direction.
Example:
Crv = CMESH( Srf, COL, 0 );
extracts the first column of surface Srf as a curve.
MFROMMESH.
11.2.78
See also CSURFACE. See also SMESH,
CMOEBIUS
CurveType CMOEBIUS( CurveType Crv, NumericType Ratio )
rebalances the weights of a rational curve using the Moebius transformation. The shape of the
curve remains identical while the speed is modified. Ratio controls the ratio between the last and the
first weights. If Ratio = 0, the first and last weights are made equal.
See also SMOEBIUS.
11.2.79
CMORPH
CurveType CMORPH( CurveType Crv1, CurveType Crv2,
NumericType Method, NumericType Blend )
or
ListType CMORPH( CurveType Crv1, CurveType Crv2,
NumericType Method, NumericType Blend )
IRIT Solid modeler
G. Elber
73
create a new curve which is a metamorph of the two given curves. The two given curves must
be compatible (see FFCOMPAT) before this blend is invoked. This is very useful if a sequence that
”morphs” one curve to another is to be created. Several metamorphosis methods are supported according to the value of Method,
0
1
2
3
4
5
Simple convex blend.
Corner/Edge cutting scheme, scaled to same curve length.
Corner/Edge cutting scheme, scaled to same bounding box.
Same as 1 but with filtering out of tangencies.
Same as 2 but with filtering out of tangencies.
Multiresolution decomposition based metamorphosis. See CMULTRES.
In Method 1, Blend is a number between zero (Crv1) and one (Crv2) defining the similarity to
Crv1 and Crv2, respectively. A single curve is returned.
In Methods 2 to 5, Blend is a step size for the metamorphosis operation and a whole list describing
the entire metamorphosis operation is returned.
Examples:
for ( i = 0, 1, 300,
c = CMORPH( crv1a, crv1b, 0, i / 300.0 ):
color( c, yellow ):
viewobj( c )
);
crvs = CMORPH( crv1a, crv1b, 2, 0.003 );
snoc( crv1b, crvs );
for ( i = 1, 1, sizeof( crvs ),
c = nth( crvs, i ):
color( c, yellow ):
viewobj( c )
);
Turtle2 = ffmatch( Wolf, Turtle, 20, 100, 2, false, 2 );
ffcompat( Wolf, Turtle2 );
for ( i = 0, 1, 25,
c = CMORPH( Wolf, Turtle2, 0, i / 25 ):
color( c, yellow ):
viewobj( c )
);
creates three metamorphosis animation sequences, one that is based on a convex blend, and two that
are based on corner/edge cutting schemes. See also PMORPH, SMORPH, TMORPH, and FFMATCH.
See Figure 30.
11.2.80
CMULTIRES
ListType CMULTIRES( CurveType Crv, NumericType Discont,
NumericType LeastSquares )
IRIT Solid modeler
G. Elber
74
Figure 30: A morphing sequence using convex blend (top left), edge cutting (top right), and using
FFMATCH and convex blend (bottom).
computes a multiresolution decomposition of curve Crv using least squares approximation, if LeastSquares is TRUE, or using B-Wavelets if LeastSquares is FALSE. The latter is optimal but slower.
The resulting list of curves describes an hierarchy of curves in linear subspaces of the space in which
Crv lay. If LeastSquares is TRUE, the curves could be summed algebraically to form Crv. Each
of the curves in the hierarchy is a least squares approximation of Crv in the subspace in which it is
defined. If LeastSquares is FALSE, a list of orthogonal projections of the Crv onto the prescibed
subspaces (by the knot sequences) is provided. Finally, Discont is a Boolean flag that controls the
way tangent discontinuities are preserved throughout the decomposition. If, however, Discont is -1,
LeastSquares will indicate the index of the knot in Crv to compute its BWavelet function.
Example:
MRCrv = CMULTIRES( Animal, false, true );
sum = nth( MRCrv, 1 );
MRCrvs = list( sum * tx( 3.0 ) );
for ( ( i = 2 ), 1, sizeof( MRCrv ),
sum = symbsum( sum, nth( MRCrv, i ) ):
snoc( sum * tx( ( 3 - i ) * 1.5 ), MRCrvs )
);
All = MRCrvs * sc ( 0.25 );
view( All, on );
computes a multiresolution decomposition to curve CrossSec as MRCrv and displays all the
decomposition levels by summing them all up. The use of none as on object name allows one to
IRIT Solid modeler
G. Elber
75
Figure 31: A multiresolution decomposition of a curve of an animal using least squares. The original
curve is shown on the left.
display an object in the display device without replacing the previous object in the display device,
carrying the same name.
This creates two metamorphosis animation sequences, one based on a convex blend and one based
on a corner/edge cutting scheme. See Figure 31.
11.2.81
CNORMAL
VectorType CNORMAL( CurveType Crv, NumericType TParam )
computes the normal vector to curve Crv at the parameter values TParam. The returned vector
has a unit length.
Example:
Normal = CNORMAL( Crv, 0.5 );
computes the normal to Crv at the parameter value 0.5. See also CNRMLCRV, CTANGENT.
11.2.82
CNRMLCRV
CurveType CNRMLCRV( CurveType Crv )
symbolically computes a vector field curve representing the non-normalized normals of the given
curve. That is, a normal vector field, evaluated at t, provides a vector in the direction of the normal of
the original curve at t. The normal curve once computed is in fact equal to kN where k is the curvature
of Crv and N is its normal.
Example:
NrmlCrv = CNRMLCRV( Crv );
See also CCRVTR.
11.2.83
CNVXHULL
PolygonType CNVXHULL( PolygonType Poly | PolylineType Poly,
NumericType FineNess );
or
CurveType CNVXHULL( CurveType Crv, NumericType FineNess );
IRIT Solid modeler
G. Elber
76
Figure 32: A convex hull of a set of points and of a freeform B-spline curve. The left show a convex
hull of a set of points. The right shows the convex hull (thick line) of a freeform curve.
compute the convex hull of the given set of Poly or Curve with tolerance for curves only, which is
governed by the polygon subdivision accuracy as set via FineNess. FineNess is ignored for polylines.
For curves, the result might be partial if the curve is not closed or periodic. See also CRV2TANS and
CRVPTTAN.
Example:
Pts1 = nil();
Pts2 = nil();
for ( i = 0, 1, 7,
R = 0.2 + fmod( i, 2 ) / 2:
Pt = ctlpt( E2, R * cos( i * 2 * pi / 8 ), R * sin( i * 2 * pi / 8 ) ):
snoc( Pt, Pts1 ):
snoc( coerce( Pt, point_type ), Pts2 ) );
Crv = coerce( cbspline( 4, Pts1, list( KV_PERIODIC ) ), KV_OPEN );
CHPts = CNVXHULL( poly( Pts2, 0 ), 0 );
CHCrv = CNVXHULL( Crv, 10 );
computes the convex hull of a given control polygon and freeform curve. See Figure 32.
11.2.84
COERCE
AnyType COERCE( AnyType Object, ConstantType NewType )
provides a coercion mechanism between different objects or object types. PointType, VectorType,
PlaneType, and CtlPtType can be all coerced to each other by using the NewType of POINT TYPE,
VECTOR TYPE, PLANE TYPE, or one of E1-E9, P1-P9 (CtlPtType). Similarly, CurveType, SurfaceType, TrimSrfType, TriSrfType, TrivarType, and MultivarType can all be coerced to hold different
CtlPtType control points, or even different open end conditions from KV PERIODIC to KV FLOAT
to KV OPEN. Freefroms can be coerced to a Power, Bezier or a B-spline type via the NewType
of POWER TYPE, BEZIER TYPE or the BSPLINE TYPE. If a scalar (E1 or P1) curve is coerced
to E2 or P2 curve or a scalar (E1 or P1), the surface is coerced to an E3 or P3 surface, and the Y
IRIT Solid modeler
G. Elber
77
(YZ) coordinate(s) is (are) updated to hold the parametric domain of the curve (surface). That is
X = U (Y = V). Curves, Surfaces, and Trivariates can be coerced to/from Multivariates using the
CURVE TYPE, SURFACE TYPE, TRIVAR TYPE and MULTIVAR TYPE. Trimmed B-spline surfaces can ve coerced to trimmed Bezier surfaces via a BEZIER TYPE coercion and to untrimmed
tensor product pieces using UNTRIMMED TYPE.
Example:
CrvE2 = COERCE( Crv, E2 );
MultiVar == COERCE( COERCE( MultiVar, surface_type ), multivar_type );
BzrSrfs = COERCE( BspSrf, bezier_type );
coerces Crv to a new curve that will have an E2 CtlPtType control points. Coerction of a projective
curve (P1-P9) to a Euclidean curve (E1-E9) does not preseve the shape of the curve. The second
example coerces a bivariate MultiVar into a Srf and back and compares the result to the original
multivariate MultiVar... The third example coerces a B-spline surface BspSrf to a Bezier form,
returning one or more Bezier surfaces representing the same geometry as BspSrf.
11.2.85
COMPOSE
CurveType COMPOSE( CurveType Crv1, CurveType Crv2 )
or
CurveType COMPOSE( SurfaceType Srf, CurveType Crv )
or
CurveType COMPOSE( SurfaceType Srf1, SurfaceType Srf2 )
or
CurveType COMPOSE( TrivarType TV, SurfaceType Crv )
or
CurveType COMPOSE( TrivarType TV, SurfaceType Srf )
symbolically compute the composition curve or surface. In the above first form of Crv1(Crv2(t),
Crv1 can be any curve while Crv2 is assumed to be a one-dimensional curve that is either E1 or P1
(higher dimensions are ignored). In the above second form of Srf(Crv(t)), the Srf can be any surface,
while the Crv is assumed to be a two-dimensional curve, that is either E2 or P2 (higher dimensions
are ignored). In the above third form of Srf1(srf2(u, v)), Srf2 can be any surface, while it is assumed
to be a two-dimensional surface, that is either E2 or P2 (higher dimensions are ignored). Srf1 is a
Bezier. In the above fourth form of TV(Crv(t)), the Crv can be any curve, while it is assumed to
be a three-dimensional curve, that is either E3 or P3 (higher dimensions are ignored). TV is a Bezier.
In the above fifth form of TV(Srf(u, v)), the Srf can be any surface, while it is assumed to be a
three-dimensional surface, that is either E3 or P3 (higher dimensions are ignored). TV is a Bezier.
The second freeform must always be fully contained in the first freeform’s parametric domain.
Example:
IRIT Solid modeler
G. Elber
78
Figure 33: A circle in the parametric space of the freefrom surface is composed to create a closed loop
curve on the surface using COMPOSE.
srf = sbezier( list( list( ctlpt( E3, 0.0,
ctlpt( E3, 0.0,
ctlpt( E3, 0.0,
list( ctlpt( E3, 0.5,
ctlpt( E3, 0.5,
ctlpt( E3, 0.5,
list( ctlpt( E3, 1.0,
ctlpt( E3, 1.0,
ctlpt( E3, 1.0,
crv = circle( vector( 0.5, 0.5, 0.0 ), 0.4
comp_crv = COMPOSE( srf, crv );
0.0,
0.5,
1.0,
0.0,
0.5,
1.0,
0.0,
0.5,
1.0,
);
0.0
1.0
0.0
1.0
0.0
1.0
1.0
0.0
1.0
),
),
) ),
),
),
) ),
),
),
) ) ) );
composes a circle Crv to be on the surface Srf. See Figure 33 and also Figure 105. See also
TDEFORM.
11.2.86
CON2
PolygonType CON2( VectorType Center, VectorType Direction,
NumericType Radius1, NumericType Radius2,
NumericType Caps )
creates a truncated CONE geometric object, defined by Center as the center of the main base of
the CONE, with the Direction as both the CONE’s axis and the length of CONE, and the two radii
Radius1/2 of the two bases of the CONE. If Caps equals zero, no caps are created. If Caps equal
one (two), only the bottom (top) cap is created. If Caps equal three, both the top and the bottom
caps are created.
IRIT Solid modeler
G. Elber
79
Figure 34: A cone (left) can be constructed using the CONE constructor and a truncated cone (right)
using the constructor CONE2.
Unlike the regular cone (CONE) constructor which inherits discontinuities in its generated normals
at the apex, CON2 can be used to form a (truncated) cone with continuous normals. See RESOLUTION
for the accuracy of the CON2 approximation as a polygonal model. See also CONE. See IRITSTATE’s
”PrimRatSrfs” and ”PrimRatSrfs” state variables.
Example:
Cone2 = CON2( vector( 0, 0, -1 ), vector( 0, 0, 4 ), 2, 1, 3 );
constructs a truncated cone with bases parallel to the XY plane at Z = −1 and Z = 3, and with
radii of 2 and 1 respectively. Both caps are created. See Figure 34.
11.2.87
CONE
PolygonType CONE( VectorType Center, VectorType Direction,
NumericType Radius, NumericType Caps )
creates a CONE geometric object, defined by Center as the center of the base of the CONE,
Direction as the CONE’s axis and height, and Radius as the radius of the base of the CONE.
If Caps equals zero, no cap is created. If Caps equal one, the bottom (top) cap is created. See
RESOLUTION for accuracy of the CONE approximation as a polygonal model.
Example:
Cone1 = CONE( vector( 0, 0, 0 ), vector( 1, 1, 1 ), 1, 1 );
constructs a cone based in an XY parallel plane, centered at the origin with radius 1 and with
tilted apex at ( 1, 1, 1 ). Only the bottom cap is created.
See IRITSTATE’s ”PrimRatSrfs” and ”PrimRatSrfs” state variables. See also CON2. See Figure 34.
G. Elber
IRIT Solid modeler
11.2.88
80
CONICSEC
CurveType CONICSEC( ListType ABCDEF,
NumericType ZLevel,
PointType StartPoint,
PointType EndPoint )
or
{PolygonType | SurfaceType } CONICSEC( ListType TwoCurves,
NumericType ZLevel,
NumericType Dist,
NumericType EvalCurve )
In the first form, this will construct a quadratic form that represents the planar conic section
prescribed by the list of six coefficients ABCDEF as:
Ax2 + Bxy + Cy 2 + Dx + Ey + F = 0,
(8)
The conic will be parallel to the XY plane at Z level of Zlevel. The section of the curve will be from
StartPoint to EndPoint, or alternatively, unlimited by specifying ’off’ for StartPoint and EndPoint. The conic might be rational (for circles and ellipses, for example) or intergral (for parabolas).
Alternatively, in the second form, if the first list object parameter contains two planar curves in the
XY plane, a piecewise linear curve at Z level of Zlevel is computed that presents the elliptic/hyperbolic
distance Dist from the given two curves. The elliptic distance refers to the sum of distance (that equal
Dist) to the two curves, while hyperbolic distance refers to the difference of distances. Finally, if
EvalCurve = 0, the surface whose zero set is the desired curve, is returned instead. If EvalCurve
= 1, distance curves are returned in the parametric space as correspondence between the two curves’
parameters. If EvalCurve = 2, the conic curves themselves are returned. Note only elliptic surfaces
are compact and are reconstructed in whole.
Example:
Circ2 = CONICSEC( list( 1, 0, 1, 0, -0.5, -1 ), 0.0,
point( 1.0, 0.0, 0.0 ) * ty( 0.25 ),
point( -0.707, -0.707, 0.0 ) * ty( 0.25 ) );
Elp1 = CONICSEC( list( 1, 2, 4, 0.5, 2, -0.2 ), 0.0, off, off );
Prb1 = CONICSEC( list( 0.1, 0, 0, 0, 1, -1 ), 2, off, off ) * sc( 0.1 );
constructs a (portion of a) circle, an ellipse and a parabola as conic sections, and,
c1 = cbspline( 3,
list( ctlpt( E2, -1, -1 ),
ctlpt( E2, 1, -1 ),
ctlpt( E2, 1, 1 ),
ctlpt( E2, -1, 1 ) ),
list( KV_OPEN ) );
c2 = -c1 * sx( -1 ) * tx( 5 );
view( list( c1, c2 ), 1 );
G. Elber
IRIT Solid modeler
81
resolution = 15;
DistCrvE = list( CONICSEC(
CONICSEC(
CONICSEC(
CONICSEC(
CONICSEC(
color( DistCrvE, green );
list(
list(
list(
list(
list(
c1,
c1,
c1,
c1,
c1,
c2
c2
c2
c2
c2
),
),
),
),
),
1.0, 10, 2 ),
1.0, 9, 2 ),
1.0, 8, 2 ),
1.0, 7, 2 ),
1.0, 6, 2 ) );
computes the conic distance to the two curves c1 and c2 at distances of 6, 7, 8, 9, and 10.
See also QUADRIC.
11.2.89
CONTOUR
PolygonType CONTOUR( SurfaceType ContouredSrf, PlaneType ContourPlane,
NumericType SubdivTol )
or
PolygonType CONTOUR( SurfaceType ContouredSrf, PlaneType ContourPlane,
NumericType SubdivTol, SurfaceType MappedSrf )
or
PolygonType CONTOUR( SurfaceType ContouredSrf, PlaneType ContourPlane,
NumericType SubdivTol, SurfaceType MappedSrf,
ListType ValidatePt )
contours surface ContouredSrf by intersecting plane ContourPlane with ContouredSrf. If
SubdivTol ¡ 1, the contours are derived using the multivariate solver and SubdivTol controls the
subdivision accuracy. If SubdivTol ¿ 1 a polygonal approximating of ContouredSrf is first derived
and then polygon-polygon intersections are computed. If ContouredSrf is a scalar field surface of
type E1 or P1 and MappedSrf is provided, ContouredSrf is contoured above its parametric domain
(U is X, V is Y) and the resulting parametric curve is composed with MappedSrf to yield the returned
value. Further, if ValidatePt is prescribed, it should contain two elements, a vector, V, and an angle,
A, in degrees. Only the contour points for which the normal of surface MappedSrf there has less than
A degrees from V are returned.
Example:
resolution = 20;
nglass = snrmlsrf( glass ) * vector( 1, 1, 1 );
sils = contour( nglass, plane( 1, 0, 0, 0 ), glass );
color( sils, cyan );
attrib( sils, "dwidth", 4 );
view( list( axes, glass, sils ), on );
IRIT Solid modeler
G. Elber
82
Figure 35: Computes the silhouette of a freeform glass surface from viewing direction (1, 1, 1). On the
left, the original view is seen. On the right, a different, general, view is provided.
computes the normal field of the surface glass, projects it onto the viewing direction of (1, 1, 1) and
contours the resulting scalar field with the plane X = 0, to extract the silhouette curves from viewing
direction (1, 1, 1). See Figure 35.
11.2.90
CONVEX
PolygonType CONVEX( PolygonType Object )
or
ListType CONVEX( ListType Object )
convert non-convex polygons in Object, into convex ones. New vertices are introduced into the
polygonal data during this process. The Boolean operations require the input to have convex polygons
only (although it may return non convex polygons...) and it automatically converts non-convex input
polygons into convex ones, using this same routine.
However, some external tools (such as irit2ray and poly3d-h) require convex polygons. This function
must be used on the objects to guarantee that only convex polygons are saved into data files for these
external tools.
Example:
CnvxObj = CONVEX( Obj );
save( "data", CnvxObj );
converts non-convex polygons into convex ones, so that the data file can be used by external tools
requiring convex polygons.
11.2.91
COORD
AnyType COORD( AnyType Object, NumericType Index )
G. Elber
IRIT Solid modeler
83
extracts an element from a given Object, at index Index. From a PointType, VectorType, PlaneType, CtlPtType and MatrixType. A NumericType is returned with Index 0 for the X axis, 1 for the
Y axis etc. Index 0 denotes the weight of CtlPtType. For a PolygonType that contains more than
one polygon, the Indexth polygon is returned. For a PolygonType that contains a single Polygon, the
Indexth vertex is returned. For a freeform object (curve, surface, etc.), the Indexth CtlPtType is
returned. For a ListType, COORD behaves like NTH and returns the Indexth object in the list. For
a StringType, the Indexth character is returned as its ASCII numeric code.
Example:
a = vector( 1, 2, 3 );
vector( COORD( a, 0 ), COORD( a, 1 ), COORD( a, 2 ) );
a = ctlpt( P2, 6, 7, 8, 9 );
ctlpt( P3, coord( a, 0 ), coord( a, 1 ), coord( a, 2 ), coord( a, 3 ) );
a = plane( 10, 11, 12, 13 );
plane( COORD( a, 0 ), COORD( a, 1 ), COORD( a, 2 ), COORD( a, 3 ) );
constructs a vector/ctlpt/plane and reconstructs it by extracting the constructed scalar components
of the objects using COORD.
See also COERCE.
11.2.92
COVERISO
CurveType COVERISO( TrivarType TV,
NumericType NewOfStrokes,
NumericType StrokeType,
PointType MinMaxPwrLen,
NumericType StepSize,
NumericType IsoVal,
VectorType ViewDir )
computes a coverage for an iso surface of a trivariate function TV, using curves. NewOfStrokes
strokes are distributed on the iso surface with a length that is set via MinMaxPwrLen. MinMaxPwrLen is a triplet of the form (Min, Max, Power) that determines the length of the strokes as,
Avg =
or,
M ax + M in
,
2
Dev =
M ax − M in
,
2
Length = Avg + Dev ∗ Random(0, 1)P wr .
(9)
(10)
StepSize controls the steps size of the piecewise linear approximation formed and should typically be
smaller than Min. StrokeType can be one of,
1
2
3
4
5
6
Draw
Draw
Draw
Draw
Draw
Draw
strokes
strokes
strokes
strokes
strokes
strokes
along
along
along
along
along
along
minimal principal curvature.
maximal principal curvature.
both principal curvatures.
constant X planes.
constant Y planes.
constant Z planes.
IRIT Solid modeler
G. Elber
84
Figure 36: A uniform coverage of 500 curved strokes of an iso surface of a trivariate function, computed
using COVERISO command.
IsoVal controls the constant value of the iso surface level. See also ADAPISO, COVERPT,
MRCHCUBE, TVLOAD. Finally, ViewDir is the direction of view, used for silhouette computation.
Example:
IsoVal = 0.12;
Cover = CoverIso( ThreeCyls, 500, 1, vector( 3, 10, 1.0 ), 0.2, IsoVal );
draws 500 strokes on the iso surface of trivariate ThreeCyls at iso value IsoVal and step size of
0.2. Strokes are drawn in length of 3 to 10 along lines of curvatures of minimal curvature. See Figure 36
and also Figure 64.
11.2.93
COVERPT
PolygonType COVERPT( PolygonType Model,
NumericType NumOfPts,
VectorType ViewDir )
computes a uniform point distribution on the given polygonal Model. Approximately NumOfPts
points are uniformly distributed on the model’s surface, provided ViewDir is the zero vector. If
ViewDir is a non zero vector, the distribution is made to be uniform from this given viewing direction.
In all cases, NumOfPts is an upper bound of the the real number of distributed points, which will be
in the same order.
IRIT Solid modeler
G. Elber
85
Figure 37: A uniform coverage of 1000 and 3000 points of a polygonal model in three space, computed
using the COVERPT command. On the left, the distribution is directional, from the viewing direction,
while on the right, shows a point distribution that is uniform in 3-space. Distant points are smaller,
emulating point depth cueing.
See also ADAPISO, COVERISO, FFPTDIST.
Example:
Pts1 = CoverPt( solid1, 1000, vector( 0, 0, 0 ) );
Pts2 = CoverPt( solid1, 3000, vector( 0, 0, -1 ) );
computes two uniform distributions of 1000 and 3000 points on Solid1. Pts1 is uniform in three
space, while Pts2 is viewed uniform from the -Z direction.
See Figure 37.
11.2.94
CPINCLUDE
NumericType CPINCLUDE( CurveType Crv, PointType Pt, NumericType Tol )
tests if a point Pt is inside a 2D closed curve Crv. Returns TRUE if inside, FALSE otherwise.
Tol governs the tolerance of the computations.
Example:
if ( CPINCLUDE( Crv, pt ) != 0,
... );
See also PPINCLUDE.
G. Elber
IRIT Solid modeler
11.2.95
86
CPOWER
CurveType CPOWER( ListType CtlPtList )
creates a polynomial/rational curve out of the provided control point list. The created curve is
employing the monomial power basis. CtlPtList is a list of control points, all of which must be of
type (E1-E9 P1-P9), or regular PointType defining the curve’s control polygon. The curve’s point type
will be of a space which is the union of the spaces of all points. The created curve is the polynomial
(or rational),
C(t) =
k
Pi ti ,
(11)
i=0
where Pi are the control points CtlPtList, and k is the degree of the curve, which is one less than the
number of points.
Example:
c = CPOWER( list( ctlpt( E3, 0, 1, 0 ),
ctlpt( E3, 1, 0, 0 ),
ctlpt( E3, 0, 0, 1 ) ) );
c == coerce( coerce( c, bezier_type ), power_type );
constructs a quadratic power basis curve, coerces it to a Bezier form, coerces the Bezier form back
to the power basis, and then compares the result for equality.
See also CBEZIER, CBSPLINE and SPOWER.
11.2.96
CRAISE
CurveType CRAISE( CurveType Curve, NumericType NewOrder )
Raise Curve to the NewOrder Order specified.
Example:
Crv = cbezier( list( ctlpt( E2, -0.7,
ctlpt( E2, 0.0,
ctlpt( E2, 0.7,
Crv2 = CRAISE( Crv, 5 );
0.3 ),
1.0 ),
0.0 ) ) );
raises the 90 degrees corner Bezier curve Crv to be a quadratic. See Figure 38. See also CREDUCE,
TRAISE, SRAISE, and MRAISE.
11.2.97
CRC2CRVTAN
ListType CRC2CRVTAN( CurveType Crv1, CurveType Crv2,
NumericType Radius, NumericType Tol )
computes all circles that are bi-tangent to the given two curves Crv1 and Crv2. The circles
will posses a radius of Radius. The accuracy of the computation is governed by the tolerance Tol.
Returned is a list center point locations with ”Params” attributes of parameter values of the tangent
locations at the two curves.
Example:
IRIT Solid modeler
G. Elber
87
Figure 38: Raises a 90 degrees corner quadratic Bezier curve to a quintic using CRAISE. The control
polygons are also shown.
Cntrs = CRC2CRVTAN( c1, c2, R, 1e-3 );
computes all the circles of radius 0.1 that are bi-tangent to the two curves c1 and c2. Tolerance of
computation is 1e-3. See Figure 39. See also SKEL2DINT, CRV2TANS, TNSCRCR.
11.2.98
CREDUCE
CurveType CREDUCE( CurveType Curve, NumericType NewOrder )
reduces the Curve to the NewOrder Order specified. This function approximates the lower order
curve in the infinity norm sense, minimizing the maximal deviation between the original curve Curve
and the low order curve NewOrder. NewOrder will identify with Curve only if Curve was degree
raised before.
Example:
Crv = cbezier( list( ctlpt( E2, -0.7, 0.3 ),
ctlpt( E2, 0.0, 1.0 ),
ctlpt( E2, 0.7, 0.0 ) ) );
Crv2 = CREDUCE( craise( Crv, 5 ), 3 );
Crv == Crv2;
Should restore the original quadratic order. I.e. Crv2 should identify with Crv and ”Crv ==
Crv2;” should return TRUE.
See also CRAISE.
11.2.99
CREFINE
CurveType CREFINE( CurveType Curve, NumericType Replace, ListType KnotList )
IRIT Solid modeler
G. Elber
88
Figure 39: Computes all the bi-tangent circles to the given two curves via the CRC2CRVTAN function.
provides the ability to Replace a knot vector of Curve, or refine it. KnotList is a list of knots at
which to refine Curve. All knots should be contained in the parametric domain of the Curve. If the
knot vector is replaced, the length of KnotList should be identical to the length of the original knot
vector of the Curve. If Curve is a Bezier curve, it is automatically promoted to be a B-spline curve.
Example:
Crv2 = CREFINE( Crv, FALSE, list( 0.25, 0.5, 0.75 ) );
refines Crv and adds three new knots at 0.25, 0.5, and 0.75. See Figure 40. See also SREFINE,
TREFINE, and MREFINE.
11.2.100
CREGION
CurveType CREGION( CurveType Curve, NumericType MinParam,
NumericType MaxParam )
extracts a region from the Curve between MinParam and MaxParam. Both MinParam and
MaxParam should be contained in the parametric domain of the Curve, except for Bezier curves
when MinParam and MaxParam can be arbitrary (extrapolating if not between zero and one).
Example:
SubCrv = CREGION( Crv, 0.3, 0.6 );
G. Elber
IRIT Solid modeler
89
Figure 40: Refines a 90 degrees corner quadratic Bezier curve at three interior knots (the result is a
B-spline curve) using CREFINE. The control polygons are also shown.
extracts the region from the Crv from the parameter value 0.3 to the parameter value 0.6. See
Figure 41. See also SREGION, TREGION, and MREGION.
11.2.101
CREPARAM
CurveType CREPARAM( CurveType Curve, NumericType MinParam,
NumericType MaxParam )
reparametrizes the Curve over a new domain from MinParam to MaxParam. This operation
does not affect the geometry of the curve and only affine transforms its knot vector. A Bezier curve
will automatically be promoted into a B-spline curve by this function.
If MinParam equals MaxParam and both equates with one of the parameterization keywords of
PARAM UNIFORM, PARAM CENTRIP, PARAM CHORD, or PARAM NIELFOL, then that parametrization is approximated for the curve, by changing the knot sequence. Note this last operation affects the
geometry of the curve.
Example:
arc1 = arc( vector(
vector(
vector(
crv1 = arc( vector(
vector(
vector(
arc( vector(
vector(
vector(
0.0, 0.0, 0.0 ),
0.5, 2.0, 0.0 ),
1.0, 0.0, 0.0 ) );
1.0, 0.0, 0.75 ),
0.75, 0.0, 0.7 ),
0.5, 0.0, 0.85 ) ) +
0.5, 0.0, 0.75 ),
0.75, 0.0, 0.8 ),
1.0, 0.0, 0.65 ) );
IRIT Solid modeler
G. Elber
90
Figure 41: Extracts a sub region from a curve using CREGION.
arc1 = CREPARAM( arc1, 0, 10 );
crv1 = CREPARAM( crv1, 0, 10 );
sets the domain of the given two curves to be from zero to ten. The Bezier curve arc1 is promoted
to a B-spline curve. See also SREPARAM, TREPARAM, and MREPARAM.
11.2.102
CROSSEC
PolygonType CROSSEC( PolygonType Object )
This feature is NOT implemented.
11.2.103
CRV2TANS
ListType CRV2TANS( CurveType Crv, NumericType FineNess )
or
ListType CRV2TANS( ListType TwoCrvs, NumericType FineNess )
computes all the self bi-tangents of a Crv or all bi-tangents between TwoCrvs, in the XY plane.
That is, all lines that are tangent to Crv at two different locations. A list of points with X and Y
coefficients representing the two parametric locations on Crv or on TwoCrvs of the bi-tangent is
returned. FineNess controls the numerical accuracy (sploution separation) of the computation. A
value of 0.01 will provide a good start and the smaller this number is, the better the accuracy will be.
See also CRVPTTAN and CNVXHULL.
Example:
IRIT Solid modeler
G. Elber
91
Figure 42: Computes the bi-tangents of a freeform curve, using CRV2TANS.
Tans = nil();
Crv2Tns = Crv2Tans( Crv, 0.01 );
for ( i = 1, 1, sizeof( Crv2Tns ),
pt = nth( Crv2Tns, i ):
snoc( ceval( Crv, coord( pt, 0 ) ) +
ceval( Crv, coord( pt, 1 ) ), Tans ) );
finds the bi-tangents of Crv and converts them to a set of line segments. See Figure 42. See also
CRC2CRVTAN, TNSCRCR
11.2.104
CRVKERNEL
AnyType CRVKERNEL( CurveType Crv, NumericType Gamma, NumericType Euclid,
AnyType Fineness, NumericType Mode )
computes the (gamma) kernel of a given planar curve Crv. If Gamma is zero, regular kernel is
computed. Else, the gamma curves of Gamma degrees is being computed. If Euclid is TRUE then
the result is returned in the Euclidean space, or if zero, in the parametric space. Mode can be 0 for
a (gamma) kernel solution, 1 to extract silhouette sampling only out of the trivariate function, and 2
for the gamma kernel surface/trivariate functions themselves to be returned. Fineness controls the
refinement that is applied to the numeric solution. For Mode 0 it sets the number of knots to insert
into the (x, y, t) trivariate function. In Mode 2, it lists two numeric values, the subdivision and
IRIT Solid modeler
G. Elber
92
numeric tolerances, of the silhouette extraction process (See MZERO for their meaning). In Mode 2,
it controls the extent of the surfaces/trivariates.
Example:
Krnl = CrvKernel( Crv, 0, 0, list( 2, 3, 1 ), 0 );
computes the regular kernel of curve Crv with a refinement of (2, 3, 1) in the three (x, y, t) axes
of the computed trivariate function.
11.2.105
CRVLNDST
NumericType CRVLNDST( CurveType Crv, PointType PtOnLine, VectorType LnDir,
NumericType IsMinDist, NumericType Epsilon )
or
ListType CRVLNDST( CurveType Crv, PointType PtOnLine, VectorType LnDir,
NumericType IsMinDist, NumericType Epsilon )
compute the closest (if IsMinDist is TRUE, farthest if FALSE) point on the Curve to the line
specified by PtOnLine and LnDir as a point on the line and a line direction. Since this operation is
partially numeric, Epsilon is used to set the needed accuracy. It returns the parameter value of the
location on Crv closest to the line. If, however, Epsilon is negative, -Epsilon is used instead, and all
local extrema in the distance function are returned as a list (both minima and maxima). If the line
and the curve intersect, the point of intersection is returned as the minimum.
Example:
Param = CRVLNDST( Crv, linePt, lineVec, TRUE, 0.001 );
finds the closest point on Crv to the line defined by linePt and lineVec. See Figure 43.
11.2.106
CRVPTDST
NumericType CRVPTDST( CurveType Crv, PointType Point, NumericType IsMinDist,
NumericType Epsilon )
or
ListType CRVPTDST( CurveType Crv, PointType Point, NumericType IsMinDist,
NumericType Epsilon )
compute the closest (if IsMinDist is TRUE, farthest if FALSE) point on Crv to Point. Since this
operation is partially numeric, Epsilon is used to set the needed accuracy. It returns the parameter
value of the location on Crv closest to Point. If, however, Epsilon is negative, -Epsilon is used
instead, and all local extrema in the distance function are returned as a list (both minima and maxima).
Example:
Param = CRVPTDST( Crv, Pt, FALSE, 0.0001 );
finds the farthest point on Crv from point Pt. See Figure 44.
IRIT Solid modeler
G. Elber
93
Figure 43: Computes the locations on the freeform curve with local extreme distance to the given line,
using CRVLNDST.
11.2.107
CRVPTTAN
ListType CRVPTTAN( CurveType Crv, PointType Pt, NumericType FineNess )
computes all the tangents to Crv that go through point Pt, all in the XY plane. A list of points
with X and Y coefficients representing the parametric locations on Crv of the bi-tangent is returned.
FineNess controls the numerical accuracy of the computation. A value of 0.01 will provide a good
start, and the smaller this number is, the better the accuracy will be. See also CRV2TANS and
CNVXHULL.
Example:
Tans = nil();
Pt = point( 2, 0, 0 );
CrvPtTns = CrvPtTan( Crv, Pt, 0.01 );
for ( i = 1, 1, sizeof( CrvPtTns ),
snoc( ceval( Crv, nth( CrvPtTns, i ) ) + coerce( Pt, e3 ), Tans ) );
finds the tangents of Crv through Pt and converts them to a set of line segments. See Figure 45.
IRIT Solid modeler
G. Elber
94
Figure 44: Computes the locations on the freeform curve with local extreme distance to the given
point, using CRVPTDST.
Figure 45: Computes the tangents of a freeform curve through a point, using CRVPTTAN.
G. Elber
IRIT Solid modeler
95
Figure 46: Approximates a sine wave curve using CSINE.
11.2.108
CSINE
CurveType CSINE( NumericType NumCycles, NumericType Samples,
NumericType CtlPtsPerVCycle )
constructs a polynomial approximation of a sine wave planar curve of NumCycles cycles. The
curve is approximated as a least sqaures fit of Samples samples and CtlPtsPerVCycle control points
per loop.
Example:
SineW = csine( 3, 100, 16 );
See Figure 46 for this sine wave of 3 loops. See also CHELIX, CSPIRAL
11.2.109
CSPIRAL
CurveType CSPIRAL( NumericType NumLoops, NumericType Pitch,
NumericType Samples, NumericType CtlPtsPerLoop )
constructs a polynomial approximation of a spiral planar curve of NumLoops loops and specified
Pitch. The curve is approximated as a least sqaures fit of Samples samples and CtlPtsPerLoop
control points per loop.
Example:
Spiral = cspiral( 5, 0.7, 500, 6 );
See Figure 47 for this spiral of 5 loops. See also CHELIX, CSIN
11.2.110
CSURFACE
CurveType CSURFACE( SurfaceType Srf, ConstantType Direction,
NumericType Param )
G. Elber
IRIT Solid modeler
96
Figure 47: Approximates a spiral curve using CSPIRAL.
or
CurveType CSURFACE( TriSrfType Srf, ConstantType Direction,
NumericType Param )
extract an isoparametric curve out of Srf in the specified Direction (ROW or COL (or DEPTH
for triangular surface) at the specified parameter value Param. Param must be contained in the
parametric domain of Srf in Direction direction. The returned curve is in the surface Srf. For a
tensor product surface, it is equal to,
C(t) = S(t, v0 ) =
m n
Pij Bi (t)Bj (v0 ) =
i=0 j=0
m
i=0
⎛
⎝
n
j=0
⎞
Pij Bj (u0 )⎠ Bi (t) =
m
Qi Bi (t),
(12)
i=0
where Qi = nj=0 Pij Bj (u0 ) are the coefficients of the returned curve, and similar to the other parametric direction S(u0 , t). Param of CSURFACE is v0 in equation (12)
For a triangular Bezier surface of degree n, it is equal to,
C(v) =
n! i j k
u v w Pijk
i!j!k! 0
i,j,k
G. Elber
IRIT Solid modeler
=
i,j
=
i
=
i
97
n!
ui v j (1 − u0 − v)n−i−j Pijk
i!j!(n − i − j)! 0
n!
(n − i)!
ui0
v j (1 − u0 − v)n−i−j Pijk
i!(n − i)!
j!(n
−
i
−
j)!
j
n!
(n − i)!
ui0 (1 − u0 )n−i
i!(n − i)!
j!(n
− i − j)!
j
v
1 − u0
j
(1 −
v
)n−i−j Pijk
1 − u0
as i + j + k = n, and u + v + w = 1.0. Hence, the resulting isoparametric curve is a weighted sum of
n + 1 Bezier curves of varying degrees n − i formed by the different rows/cols/depths of the triangular
mesh. Param of CSURFACE is u0 in equation (13)
Example:
Crv = CSURFACE( Srf, COL, 0.45 );
extracts an isoparametric curve in the COLumn direction at the parameter value of 0.15 from
surface Srf. See also CMESH, COMPOSE, FFKNTLNS, STRIVAR, and MFROMMV. See Figure 48.
11.2.111
CTANGENT
VectorType CTANGENT( CurveType Curve, NumericType Param, NumericType Normalize )
computes the tangent vector to the Curve at the parameter value Param. The returned vector
will have a unit length, if Normalize is TRUE.
Example:
Tang = CTANGENT( Crv, 0.5, true );
computes the unit tangent vector to Crv at the parameter value of 0.5. See also CNORMAL,
CNRMLCRV.
11.2.112
CTLPT
CPt = CTLPT( ConstantType PtType, NumericType Coord1, ... )
constructs a single control point to be used in the construction of curves and surfaces. Points can
have from one to five dimensions, and may be either Euclidean or Projective (rational). Point type
is set via the constants E1 to E9 and P1 to P9. The coordinates of the point are specified in order;
weight is first if rational.
Examples:
CPt1 = CTLPT( E3, 0.0, 0.0, 0.0 );
CPt2 = CTLPT( P2, 0.707, 0.707, 0.707 );
constructs an E3 point at the origin and a P2 rational point with a weight of 0.707. The Projective
Pi points are specified as CTLPT(Pn, W, W X1, ... , W Xn).
IRIT Solid modeler
G. Elber
98
Figure 48: Extracts an isoparametric curve from the given surface, using CSURFACE.
11.2.113
CTRIMSRF
ListType CTRIMSRF( TrimSrfType TSrf, NumericType Parametric )
extracts the trimming curves of a trimmed surface TSrf. If Parametric is not zero, then the
trimming curves are extracted as parametric space curves of TSrf. Otherwise, the trimming curves
are evaluated into Euclidean space as curves on the surface TSrf.
Example:
TrimCrvs = CTRIMSRF( TrimSrf, FALSE );
extracts the trimming curves of TrimSrf as Euclidean curves on TrimSrf. See Figure 49.
11.2.114
CTRLCYCLE
ListType CTRLCYCLE( CurveType Crv, NumericType CycleLength,
NumericType SubdivTol, NumericType NumericTol )
Computes a control cycle of the given CycleLength around the given control Crv. Solution is
computed by mapping the problem to an algebraic set of constraints. See MZERO for the meaning of
SubdivTol and NumericTol.
IRIT Solid modeler
G. Elber
99
Figure 49: Extracts the trimming curves in Euclidean space (middle) and parametric space (right) of
a trimmed surface (left), using CTRIMSRF.
Figure 50: Cycles of length three (in black) to a linear control curve (left) and a cubic control curve
(right), computed using CTRLCYCLE.
Example:
CyclePts = CTRLCYCLE( CtrlCrv, 3, 0.001, 1e-8 );
computes a cycle of length 3 to curve CtrlCrv. See Figure 50.
11.2.115
CMESH
11.2.116
CUBICCRVS
ListType CUBICCRVS( CurveType Crv, NumericType Tolerance, NumericType MaxLen )
IRIT Solid modeler
G. Elber
100
approximates given curve Crv using piecewise cubic curves upto the prescribed tolerance Tolerance. If MaxLen is positive it is used to limit the arc length of the cubic curves’ segments.
Example:
PCubicCrvs = CUBICCRVS( Crv, 0.01, 0.5 );
creates a piecewise cubic approximation to curve Crv upto tolerance 0.01 and maximal arc length
of cubic segments of 0.5. See also QUADCRVS, CBIARCS, and CCUBICS.
11.2.117
CVIEWMAP
PolygonType CVIEWMAP( CurveType Crv, CurveType ViewCrv,
NumericType SubdivTol, NumericType NumerTol,
NumericType TrimInvisible )
computes algebraic constraints that reflects the visible domain of planar curve Crv as seen from
direction prescribed by planar vector curve ViewCrv. ViewCrv is typically a unit circle curve,
parametrizing all possible (360 degrees) planar views. See MZERO for the meaning of the SubdivTol
and NumerTol tolerances. If TrimInvisible is FALSE, the return set prescribes the 2D silhouette locations on Crv from the specific view direction. If TrimInvisible is TRUE, attempt ismade to remove
the invisile portions. Result is returned as 3D polylines, in (t, v, r) space where t and r parametrize
Crv and v parametrizes ViewCrv. This, since a silhouette point Crv(t) could hide a independent
curve location Crv(r).
Example:
ViewMap = CVIEWMAP( Crv, pcircle( vector( 0, 0, 0 ), 1 ), 0.1, 1e-6, 0 );
See also CANGLEMAP, CVISIBLE, CARRANGMNT.
11.2.118
CVISIBLE
PolygonType CVIVISIBLE( CurveType Crv, PointType Pt, NumericType Eps )
or
PolygonType CVIVISIBLE( CurveType Crv, VectorType Dir, NumericType Eps )
computes the visible regions of planar curve Crv as seen from either view point Pt or from view
direction Dir. Eps controls the accuracy of the computation. Dir must have its Z components zero,
whereas Pt’s Z coefficient must be one.
Example:
Crvs = CVISIBLE( c, Pt, 1e-5 );
See Figure 51 for an example. See also CANGLEMAP, CVIEWMAP, CARRANGMNT, SETCOVER.
IRIT Solid modeler
G. Elber
101
Figure 51: The visibility of the given curve on the left is sampled along its 360 degrees to create
a visibility atlas of the curve on the right, using CVISIBLE. Then SETCOVER is used to find the
minimal set that can see the entire curve, esselntially solving the so-called art-gallery problem.
11.2.119
CYLIN
PolygonType CYLIN( VectorType Center, VectorType Direction,
NumericType Radius, NumericType Caps )
creates a CYLINder geometric object, defined by Center as the center of the base of the CYLINder,
Direction as the CYLINder’s axis and height, and Radius as the radius of the base of the CYLINder.
If Caps equals zero, no caps are created. If Caps equal one (two), only the bottom (top) cap is created.
If Caps equal three, both the top and the bottom caps are created.
See RESOLUTION for the accuracy of the CYLINder approximation as a polygonal model. See
IRITSTATE’s ”PrimRatSrfs” and ”PrimRatSrfs” state variables.
Example:
Cylinder1 = CYLIN( vector( 0, 0, 0 ), vector( 1, 0, 0 ), 10, 3 );
constructs a cylinder with two caps of radius 10 along the X axis from the origin to X = 1. See
Figure 52.
11.2.120
CZEROS
ListType CZEROS( CurveType Crv, NumericType Epsilon, NumericType Axis )
computes the zero set of the given Crv in the given axis (1 for X, 2 for Y, 3 for Z). Since this
computation is numeric, an Epsilon is also required to specify the desired tolerance. It returns a list
of all the parameter values (NumericType) the curve is zero.
Example:
IRIT Solid modeler
G. Elber
102
Figure 52: A cylinder primitive can be constructed using the CYLIN constructor.
xzeros = CZEROS( cb, 0.001, 1 );
pt_xzeros = nil();
pt = nil();
for ( i = 1, 1, sizeof( xzeros ),
pt = ceval( cb, nth( xzeros, i ) ):
snoc( pt, pt_xzeros )
);
interact( list( axes, cb, pt_xzeros ), 0 );
computes the X zero set of curve cb with error tolerance of 0.001. This set is then scanned in
a loop and evaluated to the curve’s locations, which are then displayed. See also CINFLECT. See
Figure 53.
11.2.121
DIST2FF
SurfaceType DIST2FF( CurveType Crv1, CurveType Crv2, NumericType DistType )
or
MultivarType DIST2FF( CurveType Crv1, SurfaceType Srf2, NumericType DistType )
or
MultivarType DIST2FF( SurfaceType Srf1, SurfaceType Srf2, NumericType DistType )
computes the distance function between the two given freeform shapes. The returned variety is
bi-variate, tri-variate, or a four-variate, depending on the dimensionality of the input, in order. Based
on DistType, the following distance functions could be used:
IRIT Solid modeler
G. Elber
103
Figure 53: Computes the zero set of a given freeform curve, in the given axis, using CZEROS.
DistType Value
0
1
2
3
Description
Computes the distance vector function, (V1 - V2).
Computes the distance square function, (V1 - V2)^2.
Projection of the distance vector onto the normal
field of the first varietly, ¡ V1 - V2, N1 ¿.
Projection of the distance vector onto the normal
field of the second varietly, ¡ V1 - V2, N2 ¿.
In cases 2 and 3, the normal field is not a unit field.
Example:
Crv1 = cbezier( list( ctlpt( E1, .2 ),
ctlpt( E2, 0.5, 4 ),
ctlpt( E2, 1.3, 0.05 ) ) ) * sy( 0.2 );
Crv2 = cbezier( list( ctlpt( E1, -.2 ),
ctlpt( E2, 0.25, 1.9 ),
ctlpt( E2, 1.3, 0.05 ) ) ) * ty( 0.3 ) * sx( 1.5 );
bb = bbox( dist2ff( Crv1, Crv2, 1 ) );
computes a bound on the minimal and maximal distance square between the given two curves, by
computing a bounding box on this scalar distance square field.
G. Elber
IRIT Solid modeler
104
Figure 54: Two examples of a dual curve (left) and a dual surface (right) computed using the DUALITY
function. The duals are shown in thin black color.
11.2.122
DUALITY
CurveType DUALITY( CurveType Curve )
or
SurfaceType DUALITY( SurfaceType Srf )
computes the dual curve/surface to the given curve/surface. The dual shape is a mapping of every
point to a line (plane) in R2 (R3).
Example:
Ellipsoid = sphereSrf( 1.1 ) * sx( 2 ) * sy( 1.2 );
DualEllip = DUALITY( Ellipsoid );
See Figure 54.
11.2.123
ELLIPSE3PT
ListType ELLIPSE3PT( PointType Pt1, PointType Pt2, PointType Pt3,
NumericType Offset )
computes the 6 coefficients A-F of,
Ax2 + Bxy + Cy 2 + Dx + Ey + F = 0,
(13)
defining the ellipse of minimal area that bounds these 3 points Pti. computation is conducted in the
XY plane, with Z ignored. If Offset is not zero, the ellipse is offset approximated by Offset amount.
Example:
G. Elber
IRIT Solid modeler
Pt1 = point( random( -0.5, 0.5 ),
Pt2 = point( random( -0.5, 0.5 ),
Pt3 = point( random( -0.5, 0.5 ),
105
random( -0.5, 0.5 ),
random( -0.5, 0.5 ),
random( -0.5, 0.5 ),
0 );
0 );
0 );
EllImp = ELLIPSE3PT( Pt1, Pt2, Pt3, 0 );
Ell = ConicSec( EllImp, 0, off, off );
color( Ell, yellow );
adwidth( Ell, 2 );
creates three random points in the XY plane and compute the implicit minimal area ellipse for these
three points. the Ellipse is realized geometrically using the ConicSec function. See also CONICSEC,
IMPLCTTRANS, QUADRIC, MAP3PT2EQL.
11.2.124
EVOLUTE
CurveType EVOLUTE( CurveType Curve )
or
SurfaceType EVOLUTE( SurfaceType Srf )
compute the evolute of a curve or a surface. For curves, the evolute is defined as,
E(t) = C(t) +
N (t)
,
κ(t)
where N (t) is the unit normal of C(t) and k(t) is its curvature.
E(t) is computed symbolically as the symbolic sum of C(t) and
N (t)
κ(t)
=
=
=
(14)
N (t)
κ(t)
where the latter is,
κ(t)N (t)
k2 (t)
C (t)6
(C (t) × C (t)) × C (t)
C (t)4
(C (t) × C (t))2
((C (t) × C (t)) × C (t)) C (t)2
(C (t) × C (t))2
(15)
For surfaces, this function computes the mean evolute which is equal to,
E(u, v) = S(u, v) +
n(u, v)
,
2H(u, v)
(16)
where n(u, v) is the unit normal of S(u, v) and H(u, v) is the mean curvature.
E(u, v) is computed symbolically.
The result of this symbolic computation is exact (upto machine precision), unlike similar operations
such as OFFSET or AOFFSET, that are only approximated.
Example:
crv = cbspline( 3,
list( ctlpt( E3, -1.0,
0.1,
0.2 ),
IRIT Solid modeler
G. Elber
106
Figure 55: The evolute (thick) of a freeform curve (thin) can be computed using EVOLUTE.
ctlpt( E3, -0.1,
ctlpt( E3, 0.1,
ctlpt( E3, 1.0,
ctlpt( E3, 0.1,
list( KV_OPEN ) );
cev = EVOLUTE( Crv );
1.0,
0.1,
0.1,
1.0,
0.1
1.0
0.1
0.2
),
),
),
) ),
See Figure 55. See also SMEAN.
11.2.125
EXTRUDE
PolygonType EXTRUDE( PolygonType Object, VectorType Dir, NumericType Caps )
or
SurfaceType EXTRUDE( CurveType Object, VectorType Dir, NumericType Caps )
or
TrivarType EXTRUDE( SurfaceType Object, VectorType Dir, NumericType Caps )
or
TrivarType EXTRUDE( ListType Object, VectorType Dir, NumericType Caps )
create an extrusion of the given Object. If the Object is a PolygonObject, its first polygon is used
as the base for the extrusion in Dir direction. If the Object is a CurveType, an extrusion surface is
constructed. If the Object is a SurfaceType, an extrusion trivariate is constructed. If the Object is
a ListType, a list of extruded objects is created for the objects found in Object. If Caps equals zero,
no caps are created. If Caps equal one (two), only the bottom (top) cap is created. If Caps equal
three, both the top and the bottom caps are created. Note that caps are created for a closed Object
only, so the Object must be either a polygon or a closed curve for caps to be generated. Direction
Dir cannot be coplanar with the polygon plane. The curve may be nonplanar.
IRIT Solid modeler
G. Elber
107
Figure 56: An extrusion of a freeform curve using EXTRUDE to create a freeform surface.
Example:
Cross = cbspline( 3,
list( ctlpt( E2, -0.018, 0.001 ),
ctlpt( E2, 0.018, 0.001 ),
ctlpt( E2, 0.019, 0.002 ),
ctlpt( E2, 0.018, 0.004 ),
ctlpt( E2, -0.018, 0.004 ),
ctlpt( E2, -0.019, 0.001 ) ),
list( KV_OPEN ) );
Cross = Cross + -Cross * scale( vector( 1, -1, 1 ) );
Napkin = EXTRUDE( Cross * scale( vector( 1.6, 1.6, 1.6 ) ),
vector( 0.02, 0.03, 0.2 ),
0 );
constructs a closed cross section Cross by duplicating one half of it in reverse and merging the two
sub-curves. Cross is then used as the cross section for the extrusion operation. See Figure 56. See
also ZTEXTRUDE.
11.2.126
FFCMPCRV
FFCMPCRV( CurveType Crv1, CurveType Crv2, NumericType Tolerance )
compares the given two curves, Crv1 and Crv2 for an identical trace. Curves could have identical
trace while with different degrees (via degree raising of one of them), differet knot sequences (by
applying refinements to either curves or both), or even different speed (via composition). This function
reduces both curves to a canonical representation by reverse engineering unnecessary degree raising,
refinements, or composition and then compare the two curves upto the given tolerance Tolerance.
Returned is a list of 5 numeric values. The first number equals 1 if the curves are the same, 2 if the are
the same but domain is not exactly the same, or 3 f the curves are different. The other four numbers
in the list are the domains of the two given curves that overlap as (Start1, End1, Start2, End2).
IRIT Solid modeler
G. Elber
108
Example:
Similarity = FFCMPCRV( Crv1, Crv2, 1e-6 );
11.2.127
FFCOMPAT
FFCOMPAT( CurveType Crv1, CurveType Crv2 )
or
FFCOMPAT( SurfaceType Srf1, SurfaceType Srf2 )
make the given two curves or surfaces compatible by making them share the same point type,
the same curve type, the same degree, and the same continuity. The same point type is gained by
promoting a lower dimension into a higher one, and non-rational to rational points. Bezier curves are
promoted to B-spline curves if necessary, for curve type compatibility. Degree compatibility is achieved
by raising the degree of the lower order curve. Continuity is achieved by refining both curves to the
space with the same (unioned) knot vector. This function returns nothing and compatibility is made
in place.
Example:
FFCOMPAT( Srf1, Srf2 );
See also CMORPH and SMORPH.
11.2.128
FFCTLPTS
ListType FFCTLPTS( FreeformType Freeform );
returns all the control points of the given Freeform in a single list. See Also FFPTTYPE, FFGTYPE, FFKNTVEC, FFMSIZE, FFORDER.
Example:
Ctls = FFCTLPTS( Srf1 );
11.2.129
FFEXTEND
CurveType FFEXTEND( CurveType Crv, ListType Ends, ListType ExtendEps,
Numeric RemoveExtraKnots )
or
SurfaceType FFEXTEND( SurfaceType Srf, ListType Ends, ListType ExtendEps,
Numeric RemoveExtraKnots )
If a Crv, extends the given Crv in either one of its two ends as is specified by the list Ends
of two Booleans parameters, an amount equals to ExtendEps. If a Srf, extends the given Srf in
either one of its four sides as is specified by the list Ends of four Booleans parameters, an amount
equals to ExtendEps. If RemoveExtraKnots is true redundant knots are removed. The extension
IRIT Solid modeler
G. Elber
109
is computed so that the new entity will preserve the original domain and hence will be identical for the
original domain, to the input.
Example:
C1ext = FFEXTEND( c1, list( true, true ), list( 0.1 ), true );
extends curve c1 at both its ends by 0.1.
11.2.130
FFEXTREMA
ListType FFEXTREMA( CurveType Crv, NumericType Euclidean )
or
ListType FFEXTREMA( SurfaceType Srf, NumericType Euclidean )
or
ListType FFEXTREMA( trivarType TV, NumericType Euclidean )
computes and returns the parameter locations of local extrema values of given scalar freeform (a
curve, surface, or trivariate). Returned is a list of parameter locations where the extreme is taking place
(interior location, boundary location or possibly C 1 discontinuity location. However, if Euclidean is
true, the results are mapped to Euclidean space.
Example:
Extrema = FFEXTREMA( Srf, false );
computes a list of all parameter locations where Srf assumes local extrema. See also FFEXTREME
11.2.131
FFEXTREME
CtlPtType FFEXTREME( CurveType Crv, NumericType Minimum )
or
CtlPtType FFEXTREME( SurfaceType Srf, NumericType Minimum )
or
CtlPtType FFEXTREME( trivarType TV, NumericType Minimum )
compute a bound on the extreme values a curves Crv or surface Srf or trivariate TV can assume.
Returned control point provides a bound on the minimum (maximum) values that can be assumed if
Minimum is TRUE (FALSE).
Example:
Bound = FFEXTREME( Srf, false );
computes a bound on the maximal values Srf can assume. See also FFEXTREMA
G. Elber
IRIT Solid modeler
11.2.132
110
FFGTYPE
NumericType FFGTYPE( FreeformType Freeform )
returns the geometric type (BEZIER TYPE, BSPLINE TYPE etc.) of the given freeform. See
Also FFGTYPE, FFCTLPTS, FFKNTVEC, FFMSIZE, FFORDER, PDOMAIN.
11.2.133
FFKNTLNS
CurveType FFKNTLNS( SurfaceType Srf, NumericType Pllns )
or
PolyType FFKNTLNS( SurfaceType Srf, NumericType Pllns )
returns all isoparametric curves that are at an interior knot of the surface Srf. If, however, Pllns
is true, the result is converted to a piecewise linear approximation (i.e. polylines).
Example:
KntCrvs = FFKNTLNS( Srf, false );
See also GPOLYLINE, CSURFACE and CMESH.
11.2.134
FFKNTVEC
ListType FFKNTVEC( FreeformType Freeform )
returns all the knot vector(s) of the given Freeform in a list of knot vector(s). See Also FFPTTYPE, FFGTYPE, FFCTLPTS, FFMSIZE, FFORDER.
Example:
KVs = FFKNTVEC( Srf1 );
11.2.135
FFMATCH
FFMATCH( CurveType Crv1, CurveType Crv2, NumericType Reduce,
NumericType Samples, NumericType ReparamOrder,
NumericType Rotate, NumericType NormType, NumericType MaxError )
computes a reparametrization to Crv2 so it fits Crv1, the best under some prescribed norm,
NormType. Currently the following norms are valid for NormType
Value
1
2
3
4
5
Description
Suitable for ruled and blended curves, for modeling.
See RULEDSRF.
Suitable for metamorphosis of curves. See CMORPH.
Distance norm in ”walking the dog” notion.
Bisector (skeleton) matching norm for two curves.
Another variant for ruled and blended curves, for
modeling. See RULEDSRF.
IRIT Solid modeler
G. Elber
111
Whenever negative norms can result (for example, in cases were self intersection cannot be prevented
in ruled surface constructions), one can allow negativity with no extra penalty by applying negative
NormType. Use of positive-only norms would yield no output at all if no matching with positive
weights can be established, whereas allowing negative norm values would result in a globally optimal
result, but with possible self intersectiions.
The reparametrization is computed by sampling a fixed set of size Samples off both curves, and
fitting a B-spline curve of length Reduce as the reparametrization curve. Hence, Reduce must be
less than or equal to Samples. The reparametrization curve will have order of ReparamOrder. If
Rotate is TRUE or ON, then attempt is made to rotate the reparametrization of the curves. Rotation
can be used on closed curves only. if MaxError is TRUE the maximal error is minimized. Otherwise,
the error’s sum over the entire domain is minimized.
See RULEDSRF and CMORPH for examples.
11.2.136
FFMERGE
CurveType FFMERGE( ListType E1Curves, NumericType PointType )
or
SurfaceType FFMERGE( ListType E1Surfaces, NumericType PointType )
or
MultivarType FFMERGE( ListType E1Multivars, NumericType PointType )
merge the scalar curves/surfaces/multivariates in the list of curves E1Curves or list of surfaces
E1Surfaces or list of multivariates E1Multivars to one vector curve/surface/multivariate of point
type PointType.
Example:
Srf = FFMERGE( list( SrfW, SrfX, SrfY ), P2 );
merges three scalar surfaces into a single surface with point type P2. See also FFSPLIT.
11.2.137
FFMESH
ListType FFMESH( FreeformType Freeform )
returns the control mesh/polygon of the given Freeform in a list. See Also FFCTLPTS, FFKNTVEC,
FFORDER, FFPTTYPE, FFMSIZE.
Example:
SrfMesh = FFMESH( Srf );
11.2.138
FFMSIZE
ListType FFMSIZE( FreeformType Freeform )
returns the size of the control mesh/polygon of the given freeform in a list. See Also MESHSIZE,
FFMESH, FFPTTYPE, FFGTYPE, FFCTLPTS, FFKNTVEC, FFORDER, PDOMAIN.
Example:
MSizes = FFMSIZE( Srf1 );
G. Elber
IRIT Solid modeler
11.2.139
112
FFORDER
ListType FFORDER( FreeformType Freeform )
returns all the orders of the given Freeform in a single list. See Also FFPTTYPE, FFGTYPE,
FFCTLPTS, FFKNTVEC, FFMSIZE, PDOMAIN.
Example:
Orders = FFORDER( Srf1 );
11.2.140
FFPOLES
NumericType FFPOLES( FreeformType Freeform );
returns TRUE if the given Freeform has poles, FALSE otherwise. Poles are zeros in the weights
of rational functions.
Example:
HasPoles = FFPOLES( Srf1 );
See also FFSPLTPOLES
11.2.141
FFPTDIST
ListType FFPTDIST( CurveType Crv, NumericType Param, NumericType NumOfPts )
or
ListType FFPTDIST( SurfaceType Srf, NumericType Param, NumericType NumOfPts )
compute a uniform point distribution for Crv or Srf. If Param is FALSE, the distribution is
selected to be uniform in the Euclidean space; otherwise if TRUE, the distribution is made uniform in
the parametric space. NumOfPts sets the number of points in the distribution.
The returned list of points prescribes parameter values in the freeforms. For Crv, the returned list
is a list of reals, in the parameter space of Crv. For Srf, the returned list is a list of points, whose X
and Y coefficients hold the U and V parameters of Srf. See also COVERPT.
Example:
c1 = cbezier( list( ctlpt(
ctlpt(
ctlpt(
ctlpt(
color( c1, magenta );
E2, -1.0, 0.0 ),
E2, -1.0, 0.1 ),
E2, -0.9, -0.1 ),
E2, 0.9, 0.0 ) ) );
pts = FFPTDIST( c1, true, 300 );
e2pts = nil();
for ( i = 1, 10, sizeof( pts ),
pt = ceval( c1, coord( nth( pts, i ), 0 ) ):
snoc( pt, e2pts )
);
IRIT Solid modeler
G. Elber
113
Figure 57: (top) A distribution of 30 points uniformly in Euclidean space. (bottom) A distribution of
30 points uniformly in parameteric space. Both examples were computed using FFPTDIST.
interact( list( e2pts, c1 ) );
pts = FFPTDIST( c1, false, 300 );
e2pts = nil();
for ( i = 1, 10, sizeof( pts ),
pt = ceval( c1, coord( nth( pts, i ), 0 ) ):
snoc( pt, e2pts )
);
interact( list( e2pts, c1 ) );
computes the distribution of 100 points in curve c1 which has highly nonuniform speed characteristics. Two distributions are computed, one to be uniform in the parametric space and one to be
uniform in the Euclidean space. See Figure 57.
11.2.142
FFPTTYPE
NumericType FFPTTYPE( FreeformType Freeform )
returns the point type (E2, P4 etc.) of the given freeform. See Also FFGTYPE, FFCTLPTS,
FFKNTVEC, FFMSIZE, FFORDER, PDOMAIN.
11.2.143
FFSPLIT
ListType FFSPLIT( CurveType Crv )
or
ListType FFSPLIT( SurfaceType Srf )
or
ListType FFSPLIT( MultivarType MV )
split the given curve Crv or surface Srf or multivariate MV into its scalar components that are
returned as a list of scalar curves/surfaces/multivariates.
Example:
E1Srfs = FFSPLIT( circle( vector( 0, 0, 0 ), 1 ) );
splits the circle which is a curve in P3 into four scalar curves (W, X, Y, Z) that are returned in a
single list. See also FFMERGE, FFPTTYPE.
G. Elber
IRIT Solid modeler
11.2.144
114
FFSPLTPOLES
ListType FFSPLTPOLES( CurveType Crv, NumericType SubdivTol,
NumericType NumericTol, NumericType Offset )
or
ListType FFSPLTPOLES( SurfaceType Srf, NumericType SubdivTol,
NumericType NumericTol, NumericType Offset )
Splits the given rational Crv or Srf at its poles (locations were the denominator vanish). In the
case of surfaces, the result is a list of trimmed surfaces as the poles are not necessarily isoparameteric.
If Offset is not zero, the neighborhood of the pole is clipped as well upto a distance offset in the
parametric domain from the pole.
Example:
Crvs = FFSPLTPOLES( crv, 0.01, 1e-10, 0.001 );
See also FFPOLES
11.2.145
FITPMODEL
ListType FITPMODEL( PolygonType PlObj, NumericType FitType,
NumericType Tol, NumericType NumIters )
fits a primitive object to the given polygonal model, PlObj. The numeric fitting process is controled
via a bound on the number of iterations NumIters and the resulting tolerance of the fit that is required,
Tol. Returned is a list of numeric values with the error of the fit as the first value. The rest of the list
numeric values are the coefficients of the algebraic fitted form (see table below). FitType can be one
of:
0
1
2
3
4
A Planar face. Returned list holds (A, B, C, D), the four
coefficients of the plane equation.
A Sphere. Returned list holds (Xcntr, Ycntr, Zcntr, Radius)
of the fitted sphere.
A Cylinder. Returned list holds (Xcntr, Ycntr, Zcntr,
Xdir, Ydir, Zdir, Radius) of the fitted cylinder.
A Circle. Returned list holds (Xcntr, Ycntr, Radius) of
the fitted circle.
A Cone. Returned list holds (Xcntr, Ycntr, Zcntr,
Xdir, Ydir, Zdir, Radius) of the fitted cone.
Example:
resolution = 20;
x1 = triangl( sphere( vector( 1, 2, 3 ), 4 ), 1 );
SprParams = FitPModel( x1, 1, 0.01, 100 );
Computes a fitted sphere to a polygonal approximation of a sphere. See also ANALYFIT.
G. Elber
IRIT Solid modeler
11.2.146
115
FIXPLGEOM
PolygonType FIXPLGEOM( PolygonType PlObj, NumericType Oper, NumericType Eps )
or
ListType FIXPLGEOM( ListType Obj, NumericType Oper, NumericType Eps )
cleans polygonal geometry. based on Oper, the following will be conducted:
0
1
Remove identical duplicated polygons.
Remove zero length edges.
The clean up of an object will be applied individually to each part found in the object list Obj.
Example:
Obj2 = FIXPLGEOM( Obj, 0 );
Obj3 = FIXPLGEOM( Obj2, 1 );
Obj4 = FIXPLNRML( Obj3, 2 );
cleans duplicated polygons, zero length edges, and then reorient the result. See also FIXPLNRML.
11.2.147
FIXPLNRML
PolygonType FIXPLNRML( PolygonType PlObj, NumericType TrustInfo )
or
ListType FIXPLNRML( ListType Obj, NumericType TrustInfo )
corrects inconsistencies in polygonal geometry, between normals of polygons and normals at the
vertices based on TrustInfo. If TrustInfo is
0
1
2
3
Trust the normals at the vertices.
Trust the normals of the polygons.
Reorient all the polygon’s normals and vertices
normals to follow the orientation of first polygon.
Same as 2 but splits disjoints part in the input to
different objects.
The computation on an object will be applied individually to each part found in the object list
Obj. Option 2 of TrustInfo will correct cases where adjacent polygons are not oriented the same,
based on detection of adjacencies.
Example:
Obj2 = FIXPLNRML( Obj, 2 );
See also FIXPLGEOM and SMOOTHNRML.
IRIT Solid modeler
G. Elber
116
Figure 58: A ruled surface fitting along two different parametric directions of the input surface, computed using FMLNANAL. In blue, the boundaries of the strips are shown while in red, the tangency
curves are presented, between the original surface and the fitted ruled surface.
11.2.148
FMLNANAL
CurveType FMLNANAL( SurfaceType Srf, NumericType Tolerance,
NumericType Euclidean, NumericType CrvSizeReduction,
NumericType SubdivTol, NumericType NumericTol )
computes a piecewise ruled surface approximation to given surface Srf, where the fit always starts
from VMin parametric direction. The strips fits Srf to within Tolerance. If Euclidean is true, the
result is evaluated into Euclidean space, otherwise it is returned in the parametric domain of Srf.
CrvSizeReduction is used as a curve fitting size limit for the intermediate rail curves of the fruled
fitting. See MZERO for the meaning of SubdivTol and NumericTol.
Example:
Strips = FMLNANAL( Srf2, 0.01, true, 40, 0.01, 1e-10 );
See Figure 58. See also PRISA.
11.2.149
GBOX
PolygonType GBOX( VectorType Point,
VectorType Dx, VectorType Dy, VectorType Dz )
creates a parallelepiped - generalized BOX polygonal object, defined by Point as its base position,
and Dx, Dy, Dz as 3 3D vectors to define the 6 faces of this generalized BOX. The regular BOX
object is a special case of GBOX where Dx = vector(Dx, 0, 0), Dy = vector(0, Dy, 0), and Dz =
vector(0, 0, Dz).
Dx, Dy, Dz must all be independent in order to create an object with positive volume.
Example:
GB = GBOX( vector( 0.0, -0.35, 0.63 ), vector( 0.5, 0.0, 0.5 ),
vector( -0.5, 0.0, 0.5 ),
vector( 0.0, 0.7, 0.0 ) );
See Figure 59.
IRIT Solid modeler
G. Elber
117
Figure 59: A warped box in a general position can be constructed using the GBOX constructor.
11.2.150
GETATTR
AnyType GETATTR( AnyType Obj, StringType Name )
provides a mechanism to fetch an attribute named Name from object Obj.
Example:
attrib( axes, "test", 15 );
a = GETATTR( axes, "test" );
will set the value of a to be 15.
11.2.151
GETLINE
AnyType GETLINE( NumericType RequestedType )
provides a method to get input from the keyboard within functions and or subroutines. RequestedType can be a NUMERIC TYPE, POINT TYPE, VECTOR TYPE, or PLANE TYPE in which
the entered line will be parsed into one, three, or four numeric values (operated by either spaces or
commas) and the proper object will be created and returned. In any other case, including failure to
parse the numeric input, a STRING TYPE object will be constructed from the entered line.
Example:
G. Elber
IRIT Solid modeler
118
Pt = GETLINE( point_type );
to read one point (three numeric values) from stdin.
11.2.152
GETNAME
StringType GETNAME( ListType ListObj, NumericType Index )
gets the name of a sub object of index Index in list object ListObj. Index of the first element is
one.
Example:
A = list( XX, Second, C );
GETNAME( A, 1 );
returns the name of the second element, ”Second”.
See also SETNAME.
11.2.153
GGINTER
ListType GGINTER( CurveType Srf1Axis, CurveType Srf1Rad,
CurveType Srf2Aixs, CurveType Srf2Rad,
NumericType SubdivTol, NumericType ZeroSetFunc )
computes the intersection curves of the given two ring surfaces, defined as spine surfaces with axis
SrfiAxis, i = 1, 2 and circular cross section along the normal plane of the axis curve with radii SrfiRad.
The ring ring intersection (RRI) problem is tranformed into a zero set finding on another function.
If ZeroSetFunc is true, the function whose zero set provides the RRIsolution is returned. Otherwise, if
ZeroSetFunc is false, the RRI solution itself is returned. The zero set is computed via numerical zero
set finding methods and Tolerance controls the fineness of the approximated solution. See Figure 60.
Example:
s1 = cylinSrf( 4, 1 ) * tz( -2
c1 = cbezier( list( ctlpt( E3,
ctlpt( E3,
r1 = cbezier( list( ctlpt( E1,
);
0.0, 0.0, -1.0 ),
0.0, 0.0, 1.0 ) ) );
1.0 ) ) );
s2 = cylinSrf( 4, 1 ) * tz( -2
c2 = cbezier( list( ctlpt( E3,
ctlpt( E3,
r2 = cbezier( list( ctlpt( E1,
) * rx( 90 ) * tx( 0.5 );
0.5, -1.0, 0.0 ),
0.5, 1.0, 0.0 ) ) );
1.0 ) ) );
ZeroSetSrf = coerce( GGINTER( c1, r1, c2, r2, 0.1, true ), e3 )
* rotx( -90 ) * roty( -90 );
resolution = 100;
ZeroSet = contour( ZeroSetSrf, plane( 0, 0, 1, 0 ) );
interact( list( ZeroSetSrf * sz( 0.1 ), ZeroSet, axes ) );
c = nth( GGINTER( c1, r1, c2, r2, 0.03, false ), 1 );
interact( list( s1, s2, c ) );
IRIT Solid modeler
G. Elber
119
Figure 60: Computation of the intersection curve between two ring surfaces via the GGINTER command. On the left, the zero set function is displayed while on the right, the computed intersection
between two ocylinders is shown.
constructs two cylinders as s1 and s2, defines the same two cylinders as a ring surface with axes
spines of c1 and c2 and a constant radius, one in r1 and r2, and computes the zero set of the intersection
and the intersection curve itself. See also RRINTER, SSINTER and SSINTR2.
11.2.154
GPOINTLIST
PolylineType GPOINTLIST( GeometryTreeType Object, NumericType Optimal,
NumericType Merge )
converts all Curves(s), (Trimmed) Surface(s), and Trivariate(s) Object into pointlists using the
RESOLUTION variable. The larger the RESOLUTION is, the finer the resulting approximation will
be. Returns a single pointlist object if Merge is TRUE.
If Optimal is false, the points are sampled at equally spaced intervals in the parametric space. If
Optimal true, a better, more expensive computationally algorithm is used to derive optimal sampling
locations so as to minimize the maximal distance between the curve and piecewise linear approximation
(L infinity norm).
Example:
Pts = GPOINTLIST( list( Srf1, Srf2, Srf3, list( Crv1, Crv2, Crv3 ) ),
true, true );
See also GPOLYGON, GPOLYLINE.
11.2.155
GPOLYGON
PolygonType GPOLYGON( GeometryTreeType Object, NumericType Normals )
IRIT Solid modeler
G. Elber
120
approximates all Surface(s)/Trimmed surface(s)/Trivariate(s) in Object with polygons using the
POLY APPROX OPT, POLY APPROX TRI, POLY MERGE COPLANAR, RESOLUTION and FLAT4PLY
variables. If POLY APPROX OPT is FALSE, RESOLUTION vaguely prescribes the number of uniform (in parametric space) samples to sample the surface in each direction. If POLY APPROX OPT is
TRUE, POLY APPROX TOL prescribes the maximal deviation of the polygonal approximation from
the original surface, in object space coordinates. IF POLY APPROX TRI is TRUE, only triangles
are generated on the output set. POLY MERGE COPLANAR controls the way coplanar adjacent
polygons are merged into one (or not.) FLAT4PLY is a Boolean flag controlling the conversion of an
(almost) flat patch into four (TRUE) or two (FALSE) polygons. Normals are computed to polygon
vertices using surface normals, so Gouraud or Phong shading can be exploited. It returns a single
polygonal object.
If Normals is set, surface normals will be evaluated at the vertices. Otherwise flat shading and
constant normals across polygons are assumed.
Example:
Polys = GPOLYGON( list( Srf1, Srf2, Srf3 ), off );
converts to polygons the three surfaces Srf1, Srf2, and Srf3 with no normals. See also GPOINTLIST,
GPOLYLINE, POLY APPROX OPT, POLY APPROX TOL, POLY APPROX TRI, POLY APPROX UV,
POLY MERGE COPLANAR, RESOLUTION and FLAT4PLY.
11.2.156
GPOLYLINE
PolylineType GPOLYLINE( GeometryTreeType Object, NumericType Optimal )
converts all Curves(s), (Trimmed) Surface(s), and Trivariate(s) Object into polylines using the
RESOLUTION variable. The larger the RESOLUTION is, the finer the resulting approximation will
be. It returns a single polyline object.
If Optimal is false, the points are sampled at equally spaced intervals in the parametric space. If
Optimal true, a better, more expensive computationally algorithm is used to derive optimal sampling
locations so as to minimize the maximal distance between the curve and piecewise linear approximation
(L infinity norm).
Example:
Polys = GPOLYLINE( list( Srf1, Srf2, Srf3, list( Crv1, Crv2, Crv3 ) ),
on );
converts to polylines the three surfaces Srf1, Srf2, and Srf3 and the three curves Crv1, Crv2,
and Crv3. See also GPOINTLIST, GPOLYGON, RESOLUTION and FLAT4PLY.
11.2.157
HAUSDORFF
ListType HAUSDORFF( PointType Obj1, CurveType Obj2,
NumericType Eps, NumericType OneSided )
or
ListType HAUSDORFF( CurveType Obj1, CurveType Obj2,
NumericType Eps, NumericType OneSided )
IRIT Solid modeler
G. Elber
121
computes the Hausdorff distance between Obj1 and Obj2, with Eps as the tolerance of the computation. Note obj1 or Obj2 can be either a point, a curve, and to a certain extent a surface. If
OneSided is TRUE, the one sided Hausdorff distance from Obj1 to Obj2 is computed. Returned is
a list of two items, the first prescribes the parameter location of the Hausdorff distance event on the
Obj1 and the second prescribes the parameter location of the Hausdorff distance event on Obj2.
Example:
HDRes = hausdorff( O1, O2, Eps, false );
11.2.158
HAUSDRPTS
NumericType HAUSDRPTS( SurfaceType Srf1, SurfaceType Srf2,
NumericType NumPts, NumericType HausdorffDir )
ConstantType Direction, NumericType Index )
computes an Hausdorff distance estimate between the given two surfaces by sampling NumPts
points on both and computing distances between the points. HausdorffDir sets the distance direction
computation: 1 for Hausdorff distance from Srf1 to Srf2, 2 for Hausdorff distance from Srf2 to Srf3,
and 3 for a symmetric estimate.
Example:
HD = HAUSDRPTS( Srf1, Srf2, 100, 3 );
11.2.159
HERMITE
SurfaceType HERMITE( CurveType Bndry1, CurveType Bndry2,
CurveType Tan1, CurveType Tan2 )
or
CurveType HERMITE( PointType Bndry1, PointType Bndry2,
VectorType Tan1, VectorType Tan2 )
construct a cubic fit between Bndry1 and Bndry2 so that first derivative continuity constraints,
as prescribed by Tan1 at Bndry1 and Tan2 at Bndry2, are preserved.
It returns either a curve or a surface, according to type of input parameters.
Example:
h00 = HERMITE( point( 0, 0, 0 ),
point( 1, 1, 0 ),
vector( 1, 0, 0 ),
vector( 1, 0, 0 ) );
constructs a curve in the shape of the first basis function of the cubic Hermite basis functions. See also
BLHERMITE, BLSHERMITE and BLND2SRFS.
G. Elber
IRIT Solid modeler
11.2.160
122
ILOFFSET
NumericType ILOFFSET( CurveType Crv, CurveType OffsetCrv )
examines if the offset curve OffsetCrv has local self-intersections with respect to the original input
curve Crv. Returns TRUE if local self intersections detected, FALSE otherwise.
Example:
SelfInterTst = iloffset( cpawn, cpawnOffset );
11.2.161
IMPLCTTRANS
ListType IMPLCTTRANS( 1, ListType ImplicitConicSec, MatrixType Mat )
or
ListType IMPLCTTRANS( 2, ListType ImplicitQuadric, MatrixType Mat )
transforms a given conic section as the 6 coefficients A-F of:
Ax2 + Bxy + Cy 2 + Dx + Ey + F = 0,
(17)
in which case 6 coefficients are expected in ImplicitQuadric or transforms a given quadric section
given as the 10 coefficients A-J,
Ax2 + By 2 + Cz 2 + Dxy + Exz + F yz + Gx + Hy + Iz + J = 0,
(18)
using the given transformation matrix Mat.
Example:
ImplicitMappedEllipse = IMPLCTRANS( 1, ImplicitEllipse, Mat );
See also CONICSEC, QUADRIC, ELLIPSE3PT, MAP3PT2EQL.
11.2.162
INSTANCE
InstanceType INSTANCE( StringType GeomName, MatrixType Mat );
creates an instance of the geometry prescribed by GeomName to be related to a different position
as specified by matrix Mat.
The use of instances is advantageous where the same geometry is to be displayed/processed in
several different locations in space. A modification of the original geometry Geom will affect all
instances that reference it. The reference is by the original object’s name. The original object can be
a single object or a whole hierarchy of objects.
Example:
Tea1 = INSTANCE( "Teapot", tx( 10 ) );
Tea2 = INSTANCE( "Teapot", tx( 20 ) );
Tea3 = INSTANCE( "Teapot", tx( 30 ) );
viewobj( list( Teapot, Tea1, Tea2, Tea3 ) );
will display four teapots 10 units apart along X.
G. Elber
IRIT Solid modeler
11.2.163
123
IRITSTATE
AnyType IRITSTATE( StringType State, AnyType Data )
sets a state variable in the IRIT Solid Modeller and returns the old value, if applicative. Current
supported state variables are:
State Name
Data Type
Comments
BoolPerturb
NumericType
BoolFreeform
VectorType
CmpObjEps
BspProdMethod
NumericType
NumericType
CnvxPl2Vrtcs
NumericType
Coplanar
NumericType
CursorKeep
NumericType
DebugMalloc
StringType
DebugFunc
NumericType
Dependency
NumericType
DoGraphics
NumericType
DumpLevel
NumericType
Controls epsilon-pertubation in Booleans. Zero
value to disable.
Sets the tolerances used by the freeform
Boolean operations among models as triplet
(Subdivision Tol, Numeric Tol, Trace Tol).
Sets the epsilon to use to compare two objects.
1 for B-spline sym. products via
interpolation, 2 for blossoming B-spline based
product, and 0 for B-spline sym. products
via Bezier decomposition.
TRUE to try and split non convex polygons toward
vertices, which is usually more efficient.
If TRUE, Coplanar polygons are handled by
the Boolean operations.
If TRUE, keep mouse events reported by the
display devices for CLNTCRSR to read.
If ”Reset”, memory allocation is cleared/reset.
No ”Free unallocated pointer” test after
”Reset”. If ”Print”, all allocated blocks are
printed. Otherwise, used as ”address, n”: ptr
address to search for with abort() called after
n mallocs.
> 0 user func. debug information. > 2 print params
on entry, ret. val. on exit. > 4 global var. list
operations.
0 for no object dependency propagations, 1 for
automatic dependency propagation, in evaluation.
TRUE to enable any graphics display thru the
display devices. FALSE to disable it.
Bitmask to control the way variables/expressions
are dumped. Only object names/types if all 0.
Scalars and vectors are dumped if 0x01.
Curves and Surfaces are dumped if 0x02.
Polygons/lines are dumped if DumpLvl 0x04.
List objects are traversed recursively if 0x10.
List objects are dumped verbatim if 0x20.
Dependency information is dumped if 0x40.
G. Elber
IRIT Solid modeler
EchoSource
FastPolys
NumericType
NumericType
FlatLoad
NumericType
FloatFrmt
GMEpsilon
StringType
NumericType
HierarchyVisible
NumericType
InterCrv
NumericType
InterUV
NumericType
LoadFont
StringType
MVBivarOutPllns
NumericType
MvDmnExt
NumericType
MvDmnReduce
NumericType
MvGradPrecond
NumericType
MvHPlnTst
NumericType
MvNConeTst
NumericType
MVSbdvTolAction
NumericType
MvSnglrPts
NumericType
PolySort
NumericType
If TRUE, IRIT scripts are echoed to stdout.
If 0x01, surface polygons are computed fast and
are only approximated. If 0x02, surface normals
are computed fast and are only approximated. If
0x01 — 0x02, both are fast and approximated.
If TRUE, the hierarchy of loaded objects is
flattened into a linear list.
Specifies a new printf floating point format.
Controls the epsilon of the basic geometry
processing computation (point on plane etc.)
If TRUE, insert all sub objects into Irit’s
DB, when an object is inserted to the DB.
See also IritState’s PropagateNames.
If TRUE, Boolean operations creates only
intersection curves. If FALSE, full Boolean
operation results.
If TRUE, Boolean operations creates only UV
intersection curves (if InterCrv is set).
Specifies a new IRIT font file to use in
TEXTGEOM commands.
Sets the way univariate solution are returned
by the multivariate solver (see MZERO and
MUNIVZERO).
Positive to extend domains of multivariates
by this relative-to-SubdivTol value to
ensure catching zeros on the boundaries.
Zero to disable.
TRUE to use domain reduction in multivariate
zero set finding, FALSE to disable.
TRUE to apply gradient preconditioning in the
multivariate zero set finding, FALSE to disable.
TRUE to use hyperplane tests in multivariate
zero set finding, FALSE to disable.
TRUE to use normal cone tests in multivariate
zero set finding, FALSE to ignore such tests.
Controls the behaviour of the multivariate
solver (See MZERO and MUNIVZERO) when reaching
the subdivision tolerance.
TRUE to also dump out singular solutions,
FALSE to ignore singularities.
Axis of Polygon Intersection sweep in Boolean
operations: 0 for X axis, 1 for Y axis, 2 for
Z axis.
124
G. Elber
IRIT Solid modeler
PrimRatSrfs
NumericType
PrimType
NumericType
PropagateNames
NumericType
RandomInit
NumericType
TCrvs2Lin
NumericType
TrimCrvs
NumericType
UVBoolean
NumericType
125
TRUE for rational exact primitive surfaces,
FALSE for approximated polynomial (integral)
surfaces. See also PrimType.
0 for primitive construction as polygonal
objects,
1 for freeform surfaces,
2 for freeform model objects,
3 for freeform volumetric trivariates.
See also PrimRatSrfs.
If true, sub objects are assigned unique
names derived from their parent name.
See also IritState’s HierarchyVisible.
Initialize the seed random number generator
in IRIT. See also the RANDOM function.
if TRUE, trimmed surfaces, when subdivided,
also forces all trimming curves to be linear
as a side effect. if FALSE, higher order
trimmed curves are left as is.
Number of samples the higher order trimmed
curves are sampled, in piecewise linear
approximation. If zero, computed
symbolically as composition.
If TRUE, Boolean between surfaces returns UV
instead of Euclidean curves.
Example:
IRITSTATE( "DebugFunc", 3 );
IRITSTATE( "FloatFrmt", "%8.5lg" );
To print parameters of user defined functions on entry, and return value on exit. Also selects a
floating point printf format of ”
11.2.164
ISGEOM
ListType ISGEOM( AnyType Obj, NumericType GeomType, NumericType Eps )
verifies if the given freeform geometry in Obj is a line, circle, plane, sphere, surface of revolution,
extrusion, ruled surface, or a sweep surface, upto some tolerance Eps. GeomType prescribes the
type to check for as one of the GEOM LINE/CIRCLE etc. constants. The return value is a list of
two objects. The first is a numeric value with the success/failure of the result. A zero is returned in
a failure case whereas non zero value hints on the direction relevant. As an example a ruled surface
along U will return 1 and a ruled surface along V will return a 2. The second object is a list with the
construction entities of Obj, if any. For example, for a detected sphere, the center and radius will be
returned.
Example:
b = nth( ISGEOM( Crv, GEOM_LINE ), 1 ) ||
nth( ISGEOM( Crv, GEOM_CIRCLE ), 1 );
checks if Crv is either line or a circle, ignoring the construction entities.
IRIT Solid modeler
11.2.165
G. Elber
126
ISOCLINE
SurfaceType ISOCLINE( SurfaceType Srf, VectorType ViewDir,
NumericType Theta, NumericType SubdivTol,
NumericType Euc, NumericType Mode )
computes the isocline edges of the given Srf from the prescribed viewing direction ViewDir.
Isocline curves are curves on the surface at which location the surface normal forms a fixed angle,
Theta, in degrees, with the prescribed viewing direction, ViewDir. The selection of 90 degrees for
Theta results in the extraction of silhouette edges. The end result is a piecewise linear approximation
of the exact isocline edges, and its accuracy is controlled via the RESOLUTION variable. If Mode is
zero, the isoclines are simply computed and returned. If Mode is either -1 or +1, the surface regions
with normals with angles of less than or great than Theta are returned as trimmed surfaces. If Mode
is either -2, the surface regions with normals with angles of less than than Theta are returned along
with ruled surface that are stitched along the removed region. This -2 mode is useful in mold design.
SubdivTol controls the accuracy of the computation. If Euc is TRUE, the isocline edges are returned
on the surface, in Euclidean space. Otherwise, the isocline edges are returned in the parametric space
of Srf.
Example:
Resolution = 10;
Isocs = ISOCLINE( glass, vector( 1, -2, 1 ), 80, 0.01, true, 0 );
computes the isocline edges forming 80 degrees between the surface normal and the given viewing
direction (1, -2, 1) for surface glass, and returns the isocline edges in the Euclidean space. See also
SILHOUETTE.
11.2.166
KNOTCLEAN
CurveType KNOTCLEAN( CurveType Crv )
cleans unnecessary knots from the given curve Crv. The returned curve is identical to the given
curve, but in, possibly, a sub space with less knots. Note this function can undo refinement operations.
c1 = pcircle( vector( 0, 0, 0 ), 1 );
c1r1 = crefine( c1, FALSE, list( 0.1, 0.3, 0.7, 1.5, 1.7, 1.7, 1.7, 1.7,
2.3, 2.3, 2.7, 3.5, 3.5, 3.5 ) );
c1r2 = KNOTCLEAN( c1r1 );
c1 == c1r2;
refines a polynomial circle approximation and then restores the original curve via the KNOTCLEAN
operation. The last line validates this cleaning. See also KNOTREMOVE.
11.2.167
KNOTREMOVE
CurveType KNOTREMOVE( CurveType Crv, NumericType Tolerance )
removes knots from curve Crv so as to keep the global error less than the Tolerance.
c1r = KNOTREMOVE( c1, 0.01 );
curve c1r is the curve with the minimum number of knots possible such that the global error
(distance between c1 and c1r) is less than 0.01. See also KNOTCLEAN.
IRIT Solid modeler
11.2.168
G. Elber
127
LINTERP
ListType LINTERP( ListType PtList)
computes a least squares fit of a line to a list of points, PtList. A list of three elements, a point
on the fitted line, a unit vector in the direction of the line and the average distance between a point
and the fitted line, is returned.
Example:
R = 10;
Rx = Random( -1, 1 );
Ry = Random( -1, 1 );
Rz = Random( -1, 1 );
Pts = nil();
Len = 1.0;
NumPts = 100;
for ( i = 1, 1, NumPts,
Pt = ctlpt( E3, ( Random( -R, R )
( Random( -R, R )
( Random( -R, R )
snoc( Pt, Pts ) );
Pts = Pts * trans( vector( random( -10,
random( -10,
random( -10,
LnFit
LnPos
LnDir
LnErr
=
=
=
=
+ Rx * i * 2 ) / NumPts,
+ Ry * i * -5 ) / NumPts,
+ Rz * i * Pi ) / NumPts ):
-10 ),
-10 ),
-10 ) ) );
LINTERP( Pts );
nth( LnFit, 1 );
nth( LnFit, 2 );
nth( LnFit, 3 );
randomly samples 100 points to be approximately along a line and computes a least squares fit of
a line to this data. LnPos, LnDir, and LnErr contain a point on the fitted line, the unit direction of
the fitted line and the average distance between a point and the line, respectively. See also CINTERP
and SINTERP.
11.2.169
LOFFSET
CurveType LOFFSET( CurveType Crv, NumericType OffsetDistance,
NumericType NumOfSamples, NumericType NumOfDOF,
NumericType Order )
approximates an offset of OffsetDistance by sampling NumOfSamples samples along the offset
curve and least square fitting them using a B-spline curve of order Order and NumOfDOF control
points.
Example:
OffCrv1 = LOFFSET( Crv, -0.4, 100, 10, 4 );
See also OFFSET, TOFFSET, AOFFSET, and MOFFSET.
IRIT Solid modeler
11.2.170
G. Elber
128
MATDECOMP
ListType MATDECOMP( MatrixType Mat );
decomposes a given homogeneous transformation into its scaling and translation vectors, and a pure
(orthogonal) rotation matrix.
Example:
MATDECOMP( rx( 45 ) * sy( 3 ) * sx( 2 ) * tx( 5 ) * ty( 7 ) );
would result in the ”(2, 3, 1)” scaling vector, ”(5, 7, 0)” translation vector and a rotation around
X matrix of 45 degrees, all in one returned list object. See also MATDECOMP2 and MATRECOMP
11.2.171
MATDECOMP2
ListType MATDECOMP2( MatrixType Mat );
decomposes a given homogeneous transformation into its three Euler rotation angles, RotX, RotY,
RotZ, unifrom scale factor, and three translation factors, and returns a list of these seven numeric
coefficients.
Example:
MATDECOMP2( rx( 90 ) * sc( 3 ) * tx( 5 ) * ty( 7 ) );
would result in the numeric list of ”(Pi/2, 0, 0, 3, 5, 7, 0)”. See also MATDECOMP and MATRECOMP
11.2.172
MATRECOMP
MatrixType MATRECOMP( ListType MatCoeffs );
Recomposes the seven numeric coeffcients of (RotX, RotY, RotZ, Scale, TransX, TransY, TransZ)
to an homogeneous matrix.
Example:
MATRECOMP( list( Pi/2, 0, 0, 3, 5, 7, 0 ) );
would result in an homogeneous matrix that rotates by 90 degrees in x, scales by a factor of 3 and
translates by 5 and 7 in x and y, respectively. See also MATDECOMP and MATDECOMP2.
11.2.173
MAXEDGELEN
PolyType MAXEDGELEN( PolyType Pl, NumericType MaxLen );
splits all triangles in polygonal object Pl to triangles with edges no greater than MaxLen in length.
Example:
PlNew = MAXEDGELEN( Pl, 0.5 );
See also TRIANGL
G. Elber
IRIT Solid modeler
11.2.174
129
MBEZIER
MultivarType MBEZIER( ListType Orders, ListType CtlPts )
creates a Bezier polynomial/rational multivariate out of the provided control mesh. Orders is a
list of orders whose size define the number of dimensions that the multivariate has. CtlPts is a linear
list of control points. All control points must be of type (E1-E9, P1-P9), or regular PointType defining
the multivariate’s control mesh. The multivariate’s point type will be of a space which is the union of
the spaces of all points.
Example:
MV = MBEZIER( list( 4 ),
list( ctlpt(
ctlpt(
ctlpt(
ctlpt(
E3, -1, 0.5, 2 ),
E1, 3 ),
E3, 0, -1.5, 0 ),
E2, -1, 3.5 ) ) );
constructs a univariate cubic multivariate object. See also MPOWER and MBSPLINE
11.2.175
MBISECTOR
ListType MBISECTOR( MultivarType MV1, MultivarType MV2, NumericType RetType,
NumericType SubdivTol, NumericType NumerTol )
computes the bisector surface in R3 of two surfaces or a curve and a surface, posed as multivariate
functions.
The returned results depend upon the value of RetType. If RetType = 1, the algebraic constraints
are returned as a list of multivariates. If RetType = 2, a list of points in R3 on the bisector sheet(s)
is returned. If RetType = 3, a list of points in (u, v, x, y, z) space, as E5 points, is returned, where
(u, v) are the respective parameter locations of the (must be) surface MV1. These E5 points can then
directly be employed by SINTERP through which to fit a surface. Finally, if RetType = 4, marching
cubes is applied to extract a piecewise linear approximation of the solution, in Euclidean space.
This bisector problem is posed as a set of two multivariate algebraic constraints with three variables.
The simultaneous solution of these constraints is computed using the MZERO function. See MZERO
for the meaning of the SubdivTol and NumerTol tolerances.
Example:
s1 = sbezier(
list( list( ctlpt(
ctlpt(
list( ctlpt(
ctlpt(
color( s1, red );
s2 = sbezier(
list( list( ctlpt(
ctlpt(
ctlpt(
list( ctlpt(
E3,
E3,
E3,
E3,
0,
2,
0,
2,
0,
0,
2,
2,
0
0
0
0
),
) ),
),
) ) ) ) * tx( -1 ) * ty( -1 );
E3,
E3,
E3,
E3,
0,
1,
2,
0,
0,
0,
0,
1,
2
1
2
1
),
),
) ),
),
G. Elber
IRIT Solid modeler
ctlpt(
ctlpt(
list( ctlpt(
ctlpt(
ctlpt(
color( s2, magenta );
E3,
E3,
E3,
E3,
E3,
1,
2,
0,
1,
2,
1,
1,
2,
2,
2,
0
1
2
1
2
130
),
) ),
),
),
) ) ) )* tx( -1 ) * ty( -1 );
ms1 = coerce( s1, multivar_type );
ms2 = coerce( s2, multivar_type );
mb1 = MBISECTOR( ms1, ms2, 3, 0.3, -0.001 );
b1 = sinterp( mb1, 3, 3, 4, 4, PARAM_UNIFORM );
mb2 = MBISECTOR( ms1, ms2, 2, 0.3, -0.001 );
interact( list( s1, s2, mb2, b1 ) );
c = cbezier( list( ctlpt( E3,
ctlpt( E3,
color( c, red );
0,
0,
0,
0,
0 ),
2 ) ) );
mc = coerce( c, multivar_type );
mb1 = MBISECTOR( mc, ms1, 3, 0.2, -0.001 );
b1 = sinterp( mb1, 3, 3, 8, 8, PARAM_UNIFORM );
mb2 = MBISECTOR( mc, ms1, 2, 0.2, -0.001 );
interact( list( c, s1, mb2, b1 ) );
computes two examples of a bisector between a plane and a biquadratic surface and between a plane
and a line. The cloud of points is computed twice, once interpolated by a surface, and also displayed
as is. See Figure 61.
11.2.176
MBSPLINE
MultivarType MBSPLINE( ListType Lengths, ListType Orders,
ListType CtlPts, ListType KVLst )
creates a Bspline polynomial/rational multivariate out of the provided control mesh of lengths
Lengths and orders Orders in each axis. The sizes of Lengths and Orders define the number of
dimensions that the multivariate has. CtlPts is a linear list of control points. All control points
must be of type (E1-E9, P1-P9), or regular PointType defining the multivariate’s control mesh. The
multivariate’s point type will be of a space which is the union of the spaces of all points. KVLst is a
list of knot sequences of the new Bspline multivariate.
Example:
MV = MBSPLINE( list( 3, 3 ), list( 3, 3 ),
list( ctlpt( E1, 0 ),
IRIT Solid modeler
G. Elber
131
Figure 61: A bisector between two surfaces (left) and a plane and a line (right) computed using
MBISECTOR.
ctlpt( E2, 0.25, 1 ),
ctlpt( E3, 0.5, 0.25, 2 ),
ctlpt( E3, 0.5, -1, 3 ),
ctlpt( E3, 0.75, 0.25, 4 ),
ctlpt( E3, 1, -0.5, 5 ),
ctlpt( E3, 1, 0, 6 ),
ctlpt( E3, 1.25, 1, 7 ),
ctlpt( E3, 1.3, 0.25, 8 ) ),
list( list( kv_open ),
list( kv_open ) ) );
constructs a bivariate quadratic multivariate object. See also MPOWER and MBEZIER.
11.2.177
MDERIVE
MultivarType MDERIVE( MultivarType MV, NumericType Dir )
returns a vector field multivariate representing the differentiated multivariate MV, in the given
direction. Evaluation of the returned multivariate at a given parameter value will return a vector
tangent to TV in Dir at that parameter value.
DMV = MDERIVE( MV, 2 );
computes the partial derivative of the multivariate MV with respect to its second variable. See
also CDERIVE, SDERIVE, and TDERIVE.
G. Elber
IRIT Solid modeler
11.2.178
132
MDIVIDE
MultivarType MDIVIDE( MultivarType MV, ConstantType Direction,
NumericType Param )
subdivides a multivariate into two at the specified parameter value Param in the specified Direction. MV can be either a B-spline multivariate in which Param must be contained in the parametric
domain of the multivariate, or a Bezier multivariate in which Param can be arbitrary, extrapolating
if not in the range of zero to one.
It returns a list of the two sub-multivariates. The individual multivariates may be extracted from
the list using the NTH command.
Example:
MvDiv = MDIVIDE( Mv2, 3, 0.3 );
Mv2a = nth( MvDiv, 1 ) * tx( -2.2 );
Mv2b = nth( MvDiv, 2 ) * tx( 2.0 );
subdivides Mv2 at the parameter value of 0.3 in the direction 3 and then extracts the two subdivided
multivariate. See also CDIVIDE, SDIVIDE, and TDIVIDE.
11.2.179
MERGEPLLN
PolygonType MERGEPLLN( PolygonType PolyList, NumericType Eps )
or
PolygonType MERGEPLLN( ListType PolyList, NumericType Eps )
merges a set of polylines/polyline objects in PolyList to larger polyline object. All elements in
the PolyList in the second form must be of PolygonType type. This function merges two polylines if
their end point is the same upto Eps.
Example:
Vrtx1
Vrtx2
Vrtx3
Vrtx4
Polys
=
=
=
=
=
vector( -3, -2, -1 );
vector( 3, -2, -1 );
vector( 3, 2, -1 );
vector( -3, 2, -1 );
list( poly( list( Vrtx1,
poly( list( Vrtx3,
poly( list( Vrtx3,
poly( list( Vrtx1,
Vrtx2
Vrtx2
Vrtx4
Vrtx4
),
),
),
),
true
true
true
true
),
),
),
) );
Polys = MERGEPLLN( Polys, 1e-6 );
will merge the four 2-vertices polylines into one polyline prescribing a square. Note polylines might be
reversed in the merging process. See also MERGEPOLY.
IRIT Solid modeler
G. Elber
133
Figure 62: Individual polygons can be merged into a complete model using MERGEPOLY.
11.2.180
MERGEPOLY
PolygonType MERGEPOLY( ListType PolyList )
merges a set of polygonal objects in the PolyList list to a single polygonal object. All elements
in the ObjectList must be of PolygonType type. This function performs the same operation as the
overloaded ^ operator would, but may be more convenient to use under some circumstances.
Example:
Vrtx1
Vrtx2
Vrtx3
Vrtx4
Poly1
=
=
=
=
=
vector( -3, -2, -1 );
vector( 3, -2, -1 );
vector( 3, 2, -1 );
vector( -3, 2, -1 );
poly( list( Vrtx1, Vrtx2, Vrtx3, Vrtx4 ), false );
Vrtx1
Vrtx2
Vrtx3
Vrtx4
Poly2
=
=
=
=
=
vector( -3, 2, 1 );
vector( 3, 2, 1 );
vector( 3, -2, 1 );
vector( -3, -2, 1 );
poly( list( Vrtx1, Vrtx2, Vrtx3, Vrtx4 ), false );
Vrtx1
Vrtx2
Vrtx3
Vrtx4
Poly3
=
=
=
=
=
vector( -3, -2, 1 );
vector( 3, -2, 1 );
vector( 3, -2, -1 );
vector( -3, -2, -1 );
poly( list( Vrtx1, Vrtx2, Vrtx3, Vrtx4 ), false );
PolyObj = MERGEPOLY( list( Poly1, Poly2, Poly3 ) );
See Figure 62. See also INSERTPOLY, SPLITLST.
11.2.181
MEVAL
CtlPtType MEVAL( MultivarType MV, ListType Params )
IRIT Solid modeler
G. Elber
134
evaluates the provided multivariate MV at the given Params values. Params is a list of NumericTypes of length equal to the dimension of the multivariate that must be contained in the multivariate
parametric domain, if MV is a B-spline multivariate, or all between zero and one if MV is a Bezier
multivariate. The returned control point has the same type as the control points of MV.
Example:
CPt = MEVAL( MV1, list( 0.1, 0.25, 0.22, 0.7 ) );
evaluates the four-variate MV1 at the parameter values of (0.1, 0.25, 0.22, 0.7). See also CEVAL,
SEVAL, TEVAL.
11.2.182
MFROM2IMG
CurveType MFROM2IMG( StringType Img1, StringType Img2,
NumericType DoTexture, GeometricType Blob,
NumericType BlobSpread, NumericType BlobColor,
NumericType Resolution, NumericType Negative,
NumericType Intensity, NumericType MinIntensity,
NumericType MergePolys )
Constructs a 3D model of numerous tiny blobs that looks like Img1 from one view direction, like
Img2 from another view direction. DoTexture TRUE adds UV paramterization to the geometry so
it can be used with textures. If Blob cis a geometric object, it is used as the (tiny) blob element.
Otherwise a cross blob is employed. Blob must be normalized in size to [0, 1]3 unit cube. If blob
coloring methods are used, it must be a list of three different geometries to be used for the three
different axes. BlobSpread sets the blobs spreading methods to be used. 0 for random placement
and 1 to 7 for seven different placements along 3D diagonal planes. Set BlobColor to 0 for no color,
1 for gray levels, and 2 for colored blobs. Resolution sets the number of blobs to position in each
axes of the three dimensional cube of blobs. If Negative TRUE, dark blobs are positioned over light
background. If FALSE, light blobs over dark background is used. Intensity controls the gray scaling
factor. MinIntensity prescribes the minimal level. if zero, blobs might be scaled to zero in one
diemsion which will make it difficult to manufacture this model. Set MinIntensity to TRUE to merge
all polygons in the different blobs into one object.
Example:
resolution = 6;
Blob = sphere( vector( 0, 0, 0 ), 0.35 );
M1 = MFrom2Img( "BenGurion.ppm", "Herzel.ppm",
FALSE, Blob, 0, 0, 25, FALSE, 1.0, 0.01, TRUE )
See Figure 63.
See also MFROM3IMG, BFROM2IMG and BFROM3IMG.
11.2.183
MFROM3IMG
CurveType MFROM3IMG( StringType Img1, StringType Img2, StringType Img3,
NumericType DoTexture, GeometricType Blob,
NumericType BlobSpread, NumericType BlobColor,
NumericType Resolution, NumericType Negative,
NumericType Intensity, NumericType MinIntensity,
NumericType MergePolys )
IRIT Solid modeler
G. Elber
135
Figure 63: A 3D model consisting of many small spherical blobs mimics one image from one view and a
different image from an orthogonal view. Model constructed using the MFROM2IMG command. Left
image shows Ben Gurion, right image shows Herzl and the middle image is a general view of the 3D
model.
Constructs a 3D model of numerous tiny blobs that looks like Img1 from one view direction, like
Img2 from another view direction, and like Img3 from a third view direction. DoTexture TRUE adds
UV paramterization to the geometry so it can be used with textures. If Blob cis a geometric object,
it is used as the (tiny) blob element. Otherwise a cross blob is employed. Blob must be normalized
in size to [0, 1]3 unit cube. If blob coloring methods are used, it must be a list of three different
geometries to be used for the three different axes. BlobSpread sets the blobs spreading methods to
be used. 0 for random placement and 1 to 7 for seven different placements along 3D diagonal planes.
Set BlobColor to 0 for no color, 1 for gray levels, and 2 for colored blobs. Resolution sets the
number of blobs to position in each axes of the three dimensional cube of blobs. If Negative TRUE,
dark blobs are positioned over light background. If FALSE, light blobs over dark background is used.
Intensity controls the gray scaling factor. MinIntensity prescribes the minimal level. if zero, blobs
might be scaled to zero in one diemsion which will make it difficult to manufacture this model. Set
MinIntensity to TRUE to merge all polygons in the different blobs into one object.
Example:
M2 = MFrom3Img( "BenGurion.ppm", "Herzel.ppm", "Rabin.ppm",
FALSE, FALSE, 1, 1, 40, FALSE, 1.0, 0.01, 1 );
See also MFROM2IMG, BFROM2IMG and BFROM3IMG.
11.2.184
MFROMMESH
MultivarType MFROMMESH( MultivarType MV, MumericType Dir, NumericType Index )
extracts a multivariate out of a multivariate, MV, as the Index’s plane of the control mesh of MV
in direction Dir.
Example:
cmesh( s, row, 2 ) ==
coerce( MFROMMESH( coerce( s, multivar_type ), 1, 2 ), curve_type );
IRIT Solid modeler
G. Elber
136
coerces surface s to a multivariate, extracts a one-dimensional-less multivariate (a curve) from the
second direction (first direction is direction zero), at index 2 and compares the result for equality to
the curve extracted using cmesh from s.
11.2.185
MFROMMV
MultivarType MFROMMV( MultivarType MV, NumericType Dir, NumericType Param )
extracts a multivariate of one lower dimension from multivariate MV by extracting an iso-variate
of MV in direction Dir at parameter value Param.
Example:
MVFirst = MFROMMV( MV, 0, FirstParam );
extracts a multivariate for one less dimension than MV as the constant first parameter of MV at
parameter value FirstParam. See also STRIVAR, CSURFACE.
11.2.186
MMERGE
MultivarType MMERGE( MultivarType MV1, MultivarType MV2, NumericType Dir,
NumericType Discont )
merges MV1 and MV2 together into one multivariate along the direction Dir. The first direction
starts from zero. If Discont, the merge is assumed to be along a discontoinuous edge.
Example:
MVFirst = MMERGE( M1, M2, 2, false );
merges M1 and M2 along the third direction. See also SMERGE,
11.2.187
MOFFSET
CurveType MOFFSET( CurveType Crv, NumericType OffsetDistance,
NumericType AngularError )
computes an offset of OffsetDistance with a globally bounded error (controlled by AngularError). The smaller the AngularError is, the better the approximation to the offset. The bounded
error is achieved by adaptive refinement of the Crv. The offset is computed via matching of the tangent
fields of the given curve Crv and an arc spanning the same angular domain. Further, AngularError
measures the angular deviation allowed between the two tangent fields.
Example:
OffCrv1 = MOFFSET( Crv, -0.4, 10 );
OffCrv2 = MOFFSET( Crv, -0.4, 5 );
computes an offset approximation to Crv with OffsetDistance of -0.4 and AngularError of 10
and 5 degrees, respectively. See also OFFSET, TOFFSET, AOFFSET, LOFFSET, and FFMATCH.
G. Elber
IRIT Solid modeler
11.2.188
137
MOMENT
PointType MOMENT( CurveType Crv, 0 );
or
VectorType MOMENT( CurveType Crv, 1 );
approximate the zero and first moments of curve Crv.
Example:
a = circle( vector( 0, 0, 0 ), 1 );
a = cregion( a, 0, 1 );
p = moment( a, 0 );
v = moment( a, 1 );
view(list(a, p, v), on);
a = cregion( a, 0, 1 ) * rz( 45 );
p = moment( a, 0 );
v = moment( a, 1 );
view(list(a, p, v), on);
computes and displays the zero and first moments of a quarter of a circle in two orientations. See
also SMOMENTS, SVOLUME and TVOLUME.
11.2.189
MPOWER
MultivarType MPOWER( ListType Orders, ListType CtlPts )
creates a polynomial/rational multivariate out of the provided control mesh. Orders is a list of
orders whose size define the number of dimensions that the multivariate has. The created multivariate
employs the monomial power basis. CtlPts is a linear list of control points. All control points
must be of type (E1-E9, P1-P9), or regular PointType defining the multivariate’s control mesh. The
multivariate’s point type will be of a space which is the union of the spaces of all points.
Example:
MV = MPOWER( list( 4 ),
list( ctlpt(
ctlpt(
ctlpt(
ctlpt(
E3, -1, 0.5, 2 ),
E3, 3, -1.5, 0 ),
E3, 0, -1.5, 0 ),
E3, -1, 3.5, 0 ) ) );
constructs a univariate cubic multivariate object. See also MBEZIER and MBSPLINE.
11.2.190
MRAISE
MultivarType MRAISE( MultivarType TV,
ConstantType Direction,
NumericType NewOrder )
G. Elber
IRIT Solid modeler
138
raises Srf to the specified NewOrder in the specified Direction.
Example:
MV2 = MRAISE( MRAISE( MV2, 0, 4 ), 1, 4 );
raises multivariate MV1 to a cubic in the first and second directions. See also TRAISE, SRAISE,
and CRAISE.
11.2.191
MRCHCUBE
PolygonType MRCHCUBE( ListType VolumeSpec,
PointType CubeDim,
NumericType SkipFactor,
NumericType IsoVal )
applies (a variation of) the marching cubes algorithm (see W. E. Lorensen and H. E. Cline. ”Marching Cubes: A High Resolution 3D Surface Construction Algorithm.” Computer Graphics (SIGGRAPH
’87 Proceedings), Vol. 21, No. 4, pp 163-169, July 1987.) to the given volumetric data set or trivariate.
VolumeSpec can be a list of four or five objects as follows:
1
4
5
a list of image file names as
list( list( ImageName1, ..., ImageNameN) )
a 4-tuple of the form
(TrivarType TV, NumericType Axis,
NumericType SamplingFactor, NumericType TVNormal)
a 5-tuple of the form
(StringType FileName, NumericType DataType,
NumericType Width, NumericType Height, NumericType Depth )
In the first case, the list of images are considered slices in the volume. All images are read in and
stacked together to form the volume. The RGB colors are converted into a gray scale values.
In the second case, the trivariate TV is iso surface contoured at level IsoVal along the prescribed
Axis (Note a trivariate need not be a scalar function, whereas Marching Cubes assumes a scalar
function). The sampling rate of the trivariate is governed by SamplingFactor with SamplingFactor
equal 1.0 sets sampling rate that equates with the dimensions of the trivaariate (control mesh volume
size). If TVNormals is not zero, much more accurate normals are derived using the trivariate function
though it is also slower. Otherwise, first order differencing on the cubes is employed for normal
estimation.
In the third case, the volume file prescribed by FileName is loaded and iso surface contoured.
The file is assumed to hold Width * Height * Depth (Width first, Depth order last) scalar numeric
values of type DataType:
1
2
3
4
5
6
Regular float or int ASCII (separated by white spaces)
Two bytes short integer.
Four bytes long integer.
One byte (char) integer.
Four bytes float.
Eight bytes double.
IRIT Solid modeler
G. Elber
139
Figure 64: The result of applying Marching Cubes to a trivariate scalar function using the MRCHCUBE
command.
Beware of the little vs big Endian problem! We assume here that you have read the volume in the
same machine type in which this file was written.
CubeDim allows the user to prescribe the real cell size (not necessarily cubical). SkipFactor
allows the skipping of data in large data sets. SkipFactor = 1 skips nothing. SkipFactor = 2, skips
every other scalar value, reducing in half all dimensions, etc. Last but not least, IsoVal sets the iso
surface level.
See also COVERISO, TVLOAD, and TMORPH.
Example:
IsoSrf = MRCHCUBE( list( ThreeCyls, 1, 1, TRUE ), point( 1, 1, 1 ), 1, 0.12 );
iso surface contours the X axis of trivariate ThreeCyls and uses the trivariate to get better normals’
estimations. Cell size is unit cube like, no dat is skipped and the iso surface level is 0.12. See Figure 64
and also Figure 36.
IRIT Solid modeler
11.2.192
G. Elber
140
MREFINE
MultivarType MREFINE( MultivarType TV, ConstantType Direction,
NumericType Replace, ListType KnotList )
provides the ability to Replace a knot vector of MV or refine it in the specified direction Direction.
KnotList is a list of knots at which to refine MV. All knots should be contained in the parametric
domain of MV in Direction. If the knot vector is replaced, the length of KnotList should be identical
to the length of the original knot vector of MV in Direction. If MV is a Bezier multivariate, it is
automatically promoted to be a B-spline multivariate.
Example:
MV = MREFINE( MREFINE( MREFINE( MV,
0, FALSE, list( 0.333, 0.667 ) ),
1, FALSE, list( 0.333, 0.667 ) ),
2, FALSE, list( 0.333, 0.667 ) );
refines MV in the first three directions by adding two more knots at 0.333 and 0.667. See also
CREFINE, SREFINE, and TREFINE.
11.2.193
MREGION
MultivarType MREGION( MultivarType MV, ConstantType Direction,
NumericType MinParam, NumericType MaxParam )
extracts a region of MV between MinParam and MaxParam in the specified Direction. Both
MinParam and MaxParam should be contained in the parametric domain of MV in Direction.
Example:
MV1r1 = MREGION( MV1, 3, 0.1, 0.2 );
MV1r2 = MREGION( MV1, 3, 0.4, 0.6 );
MV1r3 = MREGION( MV1, 3, 0.99, 1.0 );
extracts three regions of MV1 along the 4th (directions are counted from zero) direction. See also
CREGION, SREGION, and TREGION.
11.2.194
MREPARAM
MultivarType MREPARAM( MultivarType MV, ConstantType Direction,
NumericType MinParam, NumericType MaxParam )
reparametrizes MV over a new domain from MinParam to MaxParam, in the prescribed Direction. This operation does not affect the geometry of the multivariate and only affine transforms
its knot vectors. A Bezier multivariate will automatically be promoted into a B-spline surface by this
function.
Example:
MV = MREPARAM( MREPARAM( MV, 0, 0.1, 1.9 ),
1, 0.1, 0.9 );
ensures that the multivariate MV is defined over [0.1, 0.9] in the first two directions. See also
CREPARAM, SREPARAM, and TREPARAM.
IRIT Solid modeler
11.2.195
G. Elber
141
MREVERSE
MultivarType MREVERSE( MultivarType MV, NumericType Dir1, NumericType Dir2 )
reverses MV by flipping the given two parametric directions, Dir1 and Dir2, (starting to count
directions from zero). If, however, Dir2 is negative, the multivariate is reversed by flipping the direction
of MV in Dir1.
Example:
RevMV = MREVERSE( MV, 2, 4 );
reverses MV by flipping the third and fifth directions of MV. See also SREVERSE.
11.2.196
MSCIRC
CurveType MSCIRC( PolyType Poly, ListType Tols )
or
CurveType MSCIRC( ListType Geom, ListType Tols )
computes a minimum spanning circle to polyline(s) (first form), or to a list of curves (second form).
Tols is a list of two numeric values, SubdivTol and NumerTol, that are used only if the minimum
spannng circle of a set of curves is required. See MZERO for the meaning of the SubdivTol and
NumerTol tolerances. The returned circle will have ’center’ and ’radius’ attributes with the circles
parameters. If a cone is returned, ’angle’ and ’center’ of the cone will be returned.
Example:
Msc = MSCIRC( Crvs, list( 0.01, 1e-10 ) ):
See Figure 65.
11.2.197
MSCONE
ListType MSCONE( ListType Vecs )
computes the minimum spanning cone of a set of input vectors, Vecs. Returned is a list of the
cone’s parameters as well as a geometry representation of the cone.
Example:
MSC = MSCONE( Vecs );
See also MSCIRC and MSSPHERE
11.2.198
MSSPHERE
SurfaceType MSSPHERE( ListType Pts )
computes a minimum spanning sphere to a list of 3D points. Returned is a geometric representation
of the cone with ”radius” and ”center” attributes of the parameters of the sphere.
Example:
MSS = MSSPHERE( Pts );
IRIT Solid modeler
G. Elber
142
Figure 65: The minimum spanning circle of a set of planar curves is computed with the aid of MSCIRC.
Two examples are shown.
11.2.199
MUNIVZERO
ListType MUNIVZERO( ListType MVs, NumericType StepSize,
NumericType SubdivTol, NumericType NumerTol )
computes the simultaneous zeros of several scalar multivariate functions, in MVs. The system is
assumed to be underdetermined, having n constraints in n + 1 degrees of freedom (parameters). StepSize specifies the marching step size. SubdivTol specifies the subdivision tolerance in the parametric
domain of the multivariates, whereas NumerTol prescribes the tolerance of the numerical improvement stage. A numerical improvement stage is applied if |NumerTol| < SubdivTol. If NumerTol
is negative, and a numeric improvement stage is indeed applied, all points that fail to improve to the
requested accuracy are purged away.
A list of piecewise linear solution curves, each designating one univariate in the parameter space of
the multivariates, is returned.
Example:
UnivZeroMVs = MUNIVZERO( list( MV1, MV2, MV3 ), 0.01, -1e-6 );
.
See also SSINTR2, CONTOUR and MZERO.
11.2.200
MVCONTACT
MultivarType MVCONTACT( SurfaceType S1, SurfaceType S2, ListType MotionCrvs,
NumericType SubdivTol, NumericType NumerTol,
NumericType UseExprTrees )
IRIT Solid modeler
G. Elber
143
computes the contact locations, if any, when S1 is stationary and S2 is moving along the MotionCrvs animation curves. Currently only ”MOV XYZ” and ”SCL” animation curves are supported.
SubdivTol and NumerTol control the tolerance of the computation as in MZERO. If UseExpreTrees, expression trees are used in the computation which is typically faster.
Example:
Cntct = MVCONTACT( s1, s2, list( mov_xyz ), 0.02, -1e-14, true );
11.2.201
MVEXPLICIT
MultivarType MVEXPLICIT( NumericType Dim, StringType Expression )
constructs a multivariate power basis from the given polynomial Expression. The Expression
can be any infix notational expression using +-/*^ with no parenthesis. The parameters are the 26
letters A-Z. The dimension of the multivariate is set by Dim and should be in line with the variables
used. A stands for the first dimension, B for the second, etc., so if Dim equal 3, only A, B, and C
could appear in Expression. Having a higher letter with a lower dimension constitutes an error.
Example:
M1 = coerce( mvexplicit( 2, "A^2 + B^2 - 1" ), bezier_type );
M2 = coerce( mvexplicit( 2, "4 * A^2 + B^2 / 4 - 1" ), bezier_type );
constructs two scalar saddle Bezier bivariate surfaces, represented as multivariates.
11.2.202
MVINTER
MultivarType MVINTER( ListType Geometry, NumericType SubdivTol,
NumericType NumerTol, NumericType UseExprTrees )
computes the intersection of two planar curves (Geometry is a list of two planar curves) or three
surfaces (Geometry is a list of three surfaces). SubdivTol and NumerTol control the tolerance
of the computation as in MZERO. If UseExpreTrees, expression trees are used in the computation
which is typically faster.
Example:
Sln1 = MVINTER( list( c1, c2 ), 0.001, 1e-8, true );
11.2.203
NCCNTRPATH
ListType NCCNTRPATH( PolyType Obj, NumericType Offset, NumericType ZBaseLevel,
NumericType TPathSpace, NumericType Units )
or
ListType NCCNTRPATH( SurfaceType Obj, NumericType Offset, NumericType ZBaseLevel,
NumericType TPathSpace, NumericType Units )
builds Numerically controlled (NC) tool path to mill (machine) the given Obj geometry. The
Offset prescribes the necessary offset, due to the tool’s ball end radius. ZBaseLevel sets a base level
the toolpath will not go below. and Units sets the used units with 0 for inches and 1 for mm. The
IRIT Solid modeler
G. Elber
144
toolpath is built as parallel contours of the (offset of the) input Obj, contours that are TPathSpace
spacing apart.
The following attributes are optional and supported by NCCNTRPATH:
NCCntrBBox
NCCntrClip
NCCntrMaxDepthStep
NCCntrSlowOnPlunge
A string attribute with six numeric values as
”XMin XMax YMin YMax ZMin ZMax”. Bounds the
working space of the contouring.
A closed polyline object to clip the final
toolpath to be confined to its interior.
Specifies how deep can tool plunge in compared
to the last depth, in the last contour. Adds
additional paths to confirm to this, if needed.
If set and plung this much, generates toolpath
with ”RelFeedrate” attributes to slowdown.
Example:
Tea = load( "teapot" );
NCPath = NCCntrPath( Tea, 1/4, 0.0, 1/8, 0 );
attrib( NCPath, "NCRetractZLevel", 3.5 );
attrib( NCPath, "NCMaxXYBridgeGap", 0.25 );
save( "NCPath.nc", NCPath );
NC data can be saved using the SAVE command in G-code if the saved file type is ”.nc”. See
SAVE for more, including the meaning of the different attributes in the above example. See also
NCPCKTPATH.
11.2.204
NCPCKTPATH
ListType NCPCKTPATH( PolyType Obj, NumericType ToolRadius, NumericType RoughOffset,
NumericType TPathSpace, NumericType TPathJoin,
NumericType Units, NumericType TrimSelfInters )
computes tool path to 2D pocket machining from +Z direction the given Obj geometry (a closed
curve or a closed polygon). ToolRadius sets the offset to use in the pocket whereas RoughOffset sets
the offset to use during roughing (RoughOffset better be larger than ToolRadius). TPathSpace
sets the space between adjacent pockets slices in the zigzag motion and TPathJoin prescribes the
maximum distance to connect adjacent slices (if larger a full retracting will be performed). Units
sets the used units with 0 for inches and 1 for mm and if TrimSelfInters is TRUE also attempts to
eliminate self intersections due to the applied offsets.
Example:
TPath = NCPcktPath( Crv, 0.05, 0.06, 0.02, 0.05, 0, true );
attrib( TPath, "NCRetractZLevel", 1.0 );
attrib( TPath, "NCMaxXYBridgeGap", 0.05 );
save( "TPath.nc", TPath );
NC data can be saved using the SAVE command in G-code if the saved file type is ”.nc”. See
SAVE for more, including the meaning of the different attributes in the above example. See also
NCCNTRPATH.
IRIT Solid modeler
11.2.205
G. Elber
145
MZERO
ListType MZERO( ListType MVs, NumericType SubdivTol, NumericType NumerTol )
computes the simultaneous zeros of several scalar multivariate functions, in MVs. SubdivTol
specifies the subdivision tolerance in the parametric domain of the multivariates, whereas NumerTol
prescribes the tolerance of the numerical improvement stage. A numerical improvement stage is applied
if |NumerTol| < SubdivTol. If NumerTol is negative, and a numeric improvement stage is indeed
applied, all points that fail to improve to the requested accuracy are purged away.
A list of control points, each designating one location in the parameter space of the multivariates,
is returned.
The number of multivariates cannot exceed the dimension of the multivariates. That is, if the MVs
are trivariates, then, at most, three of them may be provided. If less are provided, then the dimension
of the solution space is larger than zero and a finite cloud of points sampled from that solution space
will be returned.
Example:
ZeroMVs = MZERO( list( MV1, MV2, MV3 ), 0.01, -1e-6 );
.
See also CONTOUR and MUNIVZERO.
11.2.206
MPROMOTE
PromMV = MPROMOTE( MultivarType MV, ListType AddDir );
or
PromMV = MPROMOTE( MultivarType MV, ListType NewDimStartAxis );
promote the multivariate MV to a higher dimension. In the first form (a list of one numeric
value), the multivariate will be promoted to have one more dimension (i.e. a bivariate would become
a trivariate). The new added axis will be AddDir.
The second form (a list of two numeric values) allows the original multivariate to be placed at axes
from StartAxis and have a new dimensional NewDim.
Example:
ms = coerce( srf, multivar_type );
coerce( mfrommv( MPROMOTE( ms, list( 0 ) ), 0, 0.5 ), surface_type ) == srf;
coerces a surface to a multivariate, promotes it to a trivariate-multivariate, extracts an iso-surface
bivariate-multivariate along the new introduced axis from the trivariate-multivariate and compares it
to the original surface. It should be equal!
11.2.207
NIL
ListType NIL()
creates an empty list so data can be accumulated in it. See CINFLECT or CZEROS for examples.
See also LIST and SNOC.
IRIT Solid modeler
11.2.208
G. Elber
146
OFFSET
PolygonType OFFSET( PolygonType Poly, NumericType OffsetDistance,
NumericType Smoothing, NumericType MiterEdge )
or
CurveType OFFSET( CurveType Crv, NumericType OffsetDistance,
NumericType Tolerance, NumericType BezInterp )
or
CurveType OFFSET( CurveType Crv, CurveType OffsetDistance,
NumericType Tolerance, NumericType BezInterp )
or
SurfaceType OFFSET( SurfaceType Srf, NumericType OffsetDistance,
NumericType Tolerance, NumericType BezInterp )
or
TrimSrfType OFFSET( TrimSrfType TrimSrf, NumericType OffsetDistance,
NumericType Tolerance, NumericType BezInterp )
offset Poly, Crv, Srf or a TrimSrf, by translating all the vertices or control points in the direction
of the normal of the poly/curve or of the (trimmed) surface by an OffsetDistance amount. For a
Poly object, the input can be a single polygon or a single polyline, in which case the offset is computed
in the XY plane, or can be a polygonal model in which case the offset is computed in R3 . In the former
case, the result is an offset of the original polygon/line in the XY plane and is exact. In the latter
case, the normals at the vertices of the polygonal model are employed (and are locally estimated if non
detected), and all vertices are moved in the vertices normals, scaled by this offset distance. For offset
in R3 , if Smoothing is TRUE, normals at the vertices are always recomputed and smoothed out. Also
for an offset in R3 , if MiterEdge is positive, attempts to properly compenstate for miter edges’ based
offset is made, upto a scaling factor set by the value of MiterEdge.
Otherwise, each control point has a node parameter value associated with it, which is used to compute the normal. The returned curve or surface only approximates the real offset. If the resulting
approximation does not satisfy the accuracy required by Tolerance, Crv or Srf or TrimSrf is subdivided and an offset approximation fit is computed for the two halves. For curves, one can request a
Bezier interpolation scheme in the offset approximation by setting BezInterp. BezInterp is not yet
supported for (trimmed) surfaces. Negative OffsetDistance denotes offset in the reversed direction
of the normal. If the curve is a 3D curve (E3 or P3) the offset is computed using the nornal of the
frenet frame of the curve. Make sure you use a 2D curve (E2 or P2) for a proper offset in the plane.
If OffsetDistance is a (scalar) curve, the curve’s first coordinate is used to prescribe a variable offset
amount along the curve for which we compute the variable offset. Both Crv and OffsetDistance
must share the same parametric domain.
Example:
OffCrv = OFFSET( Crv, -0.4, 0.1, off );
IRIT Solid modeler
G. Elber
147
Figure 66: Offset approximation (thick) of a B-spline curve (thin). (See also Figure 5.)
offsets Crv by the amount of −0.4 in the reversed normal direction, Tolerance of 0.1 and no Bezier
interpolation. See also TOFFSET, AOFFSET, LOFFSET and MOFFSET. See Figure 66.
11.2.209
ORTHOTOMC
CurveType ORTHOTOMC( CurveType Crv, PointType Pt, NumericType K )
or,
SurfaceType ORTHOTOMC( SurfaceType Srf, PointType Pt, NumericType K )
compute the K-orthotomic of freeform curves and surfaces. See Fundamentals of Computer Aided
Geometric Design, by J. Hoschek and D. Lasser. A K-orthotomic equal,
P t + K (F − P t), N N,
(19)
where F is the curve or surface and N is its unit normal field.
Example:
pt = point( 0, 0.35, 0 );
crv = cbezier( list( ctlpt( E2, -0.8, -0.6 ),
ctlpt( E2, -0.3, -0.2 ),
ctlpt( E2, 0.0, 0.0 ),
ctlpt( E2, 0.8, -0.6 ) ) );
Orth = ORTHOTOMC( crv, pt, 2 );
interact( list( Orth, crv, pt ) * tx( 0.5 ) ) );
computes the orthotomic of a cubic Bezier curve that has an inflection point. Note that inflection
points are reduced to cusps in the orthotomic result. See Figure 67.
11.2.210
PATTRIB
AnyType PATTRIB( PolyType Poly, NumericType Index,
StringType Name, AnyType Value )
IRIT Solid modeler
G. Elber
148
Figure 67: An orthotomic (thick) of a cubic Bezier curve. The inflection point in the cubic Bezier is
reduced to a cusp in the orthotomic. Computed using the ORTHOTOMC command.
provides a mechanism to set/get an attribute to a vertex of a polygon. Unlike the regular ATTRIB/RMATTR functions, PATTRIB allows access to the Index vertex in polygon Poly, access that
is otherwise impossible. Index starts at zero for the first vertex. The attribute will have a name
Name and a value Value. If Value is NIL(), no attributes are set and the named attribute, if any, is
returned. This PATTRIB function only allows numeric values or strings as Value.
For example,
PATTRIB( Tri, 0, "rgb", "255,0,0");
PATTRIB( Tri, 1, "rgb", "0,255,0");
PATTRIB( Tri, 2, "rgb", "0,0,255");
sets the RGB values of the three vertices of triangle Tri. See also PNORMAL, ATTRIB, ATTRPROP, GETATTR, RMATTR, CPATTR.
11.2.211
PCIRCLE
CurveType PCIRCLE( VectorType Center, NumericType Radius )
is the same as CIRCLE but approximates the circle as a polynomial curve. See also CIRCLE.
11.2.212
PCRVTR
PolyType PCRVTR( PolyType Pl, NumericType NumOfRings, NumericType CubicFit )
G. Elber
IRIT Solid modeler
149
estimates curvature properties of given polygonal model Pl, assuming Pl originated from a continuous freeform surfaces. NumOfRings sets the number of rings around a vertex that will be used to
estimate the curvature properties of the vertex. If (CubicFit is TRUE, a cubic fit is computed to the
local vertex neighborhood, or a quadratic fit, if FALSE. The return polygonal object is identical to Pl,
but with the following attributes set at each vertex:
”K1Curv”
”K2Curv”
”KCurv”
”HCurv”
”D1”
”D2”
First principal curvature value
Second principal curvature value
The Gaussian Curvature
The Mean Curvature
The first principal direction
The second principal direction
See also PPROPFTCH.
11.2.213
PDECIMATE
PolygonType PDECIMATE( PolygonType Obj, NumericType DecimType,
NumericType Threshold )
Given a polygonal model, Obj, decimate and merge polygons, effectively reducing the size of
the data subject to a maximal deviation distance as controlled via Threshold and DecimType.
DecimType can be either TRUE when Threshold has a continuous zero to one control over the
output size or FALSE when Threshold prescribes the exact number of polygons desired.
Example:
gcross = cbspline( 3,
list( ctlpt( E3, 0.3,
ctlpt( E3, 0.1,
ctlpt( E3, 0.1,
ctlpt( E3, 0.5,
ctlpt( E3, 0.6,
list( KV_OPEN ) );
resolution = 30;
glass = surfprev( gcross );
0.0,
0.0,
0.0,
0.0,
0.0,
0.0
0.1
0.4
0.5
0.8
),
),
),
),
) ),
pglass = gpolygon( glass, false );
dglass = PDECIMATE( pglass, false, 0.5 );
creates a surface of a glass, approximates it with polygons and then decimates the latter. See
Figure 68 for the original and decimated polygonal glass.
11.2.214
PDOMAIN
ListType PDOMAIN( FreeformType Freeform )
returns the parametric domain of the given Freeform. See also MESHSIZE, FFCTLPTS, FFKNTVEC,
FFMESH, FFMSIZE, FFPTTYPE, FFORDER.
Example:
circ_domain = PDOMAIN( circle( vector( 0.0, 0.0, 0.0 ), 1.0 ) );
IRIT Solid modeler
G. Elber
150
Figure 68: A polygonal object (left) can be decimated and reduced (right) to within a given tolerance
by using PDECIMATE.
11.2.215
PINTERP
PlaneType PINTERP( ListType PtsList )
least squares fits a plane to a given set of points PtsList.
Example:
Pln = PINTERP( Pts );
11.2.216
PIMPRTNC
PolyType PIMPRTNC( PolyType Pl, NumericType GenImprtncPolylines )
computes the importance of a local neighborhood in a triangular polygonal mesh bf Pl, based on the
dihedral angles of the edges in that neighborhood. If GenImprtncPolylines FALSE, every vertex in
the returned mesh will have a ”SilImp” (See the connection of this importance to silhouettes?) attribute
with its importance. Otherwise, if GenImprtncPolylines TRUE, polylines that stylistically convey
the importance of the different regions in this mesh are returned.
Example:
Pl = triangl( box( vector( 0, 0, 0 ), 1, 2, 3 ), 1 );
PlImp = PIMPRTNC( Pl, 0 );
11.2.217
PLANE
PointType PLANE( NumericType A, NumericType B, NumericType C, NumericType D )
creates a plane type object, using the four provided NumericType coefficients. See also VECTOR,
POINT.
IRIT Solid modeler
11.2.218
G. Elber
151
PLANECLIP
ListType PLANECLIP( PolyType Poly, PlaneType Pln )
clips a polygonal model Poly against a plane Pln. Three polygonal objects are returned in a list:
polygons on the positive side of the plane, polygons that intersect the plane, and polygons on the
negative side of the plane, in this order. If one of these lists is empty, a numeric zero is substituted.
Example:
Pls = PLANECLIP( Pl, plane( 1, 1, 0, 0 ) );
clips polygonal object Pl against the plane X+Y=0.
11.2.219
PLN3PTS
PlaneType PLN3PTS( PointType Pt1, PointType Pt2, PointType Pt3 )
computes a plane out of three points.
Example:
Pl1 = PLN3PTS( point( 0, 0, 0 ), point( 0, 1, 0 ), point( 1, 0, 0 ) );
11.2.220
PMORPH
PlaneType PMORPH( PolyType Pl1, PolyType Pl2, NumericType Blend )
creates a new polygonal object which is a metamorph of the two given polygonal objects that
share the same topology. That is, Pl1 and Pl2 must share the same number of polygons and the i’th
polygon in Pl1 must be equal in its number of vertices to the i’th polygon of Pl2. This is very useful
if a sequence that ”morphs” one polygonal model to another is to be created.
Example:
Pl1 = con2( vector( 0.0, -0.5, -0.5 ), vector( 0.0, 0.0, 1.0 ), 0.4, 0.1, 3 );
Pl2 = con2( vector( 0.0, 0.5, 0.0 ), vector( 0.0, 0.0, 1.0 ), 0.1, 0.4, 3 );
Pl = PMORPH( Pl1, Pl2, 0.5 );
creates a cylinder out of two truncated cones, using PMORPH. See also CMORPH and SMORPH.
11.2.221
PNORMAL
PointType PNORMAL( PolyType Poly, NumericType Index, VectorType Normal )
provides a mechanism to set/get the normal of vertex number Index in a polygon Poly. Index
starts at zero for the first vertex. Normal replaces the current normal that is also returned. If Normal
is not a VectorType, no new normal is set but the current normal is still returned, allowing normals to
be queried.
For example,
PNORMAL( Tri, 0, vector( 1, 0, 0 ) );
PNORMAL( Tri, 1, vector( 0, 1, 0 ) );
sets the normals of the first two vertices in triangle Tri to be the X and Y axes, respectively.
See also PATTRIB.
IRIT Solid modeler
G. Elber
152
Figure 69: Polar silhouette computed for this glass shaped surface using the POLARSIL
11.2.222
POINT
PointType POINT( NumericType X, NumericType Y, NumericType Z )
Creates a point type object, using the three provided NumericType scalars. See also VECTOR,
PLANE.
11.2.223
POLARSIL
PolygonType POLARSIL( SurfaceType Srf, VectorType ViewDir,
NumericType SubdivTol, NumericType EuclideanSpace )
Computes the polar silhouettes of surface Srf from view direction ViewDir. Equal to ¡ S(u, v) x
N(u, v), VDir ¿ = 0. If EuclideanSpace TRUE, the polar silhouettes are returned in Euclidean space,
over Srf. Otherwise, the polar silhouettes are returned in the parametric domain of Srf. SubdivTol
controls the accuracy of the computation of the polar silhouettes.
Example:
pSil = polarsil( glass, vector( 1, 0, 0 ), 0.01, true );
See Figure 69 for this example.
11.2.224
POLY
PolygonType POLY( ListType VrtxList, NumericType IsPolyline )
creates a single polygon/polyline (and therefore open) object, defined by the vertices in VrtxList
(see LIST). All elements in VrtxList must be one of PointType, VectorType, CtlPtType, or PolygonType types. If IsPolyline, a polyline is created; otherwise, a polygon.
Example:
V1
V2
= vector( 0.0, 0.0, 0.0 );
= vector( 0.3, 0.0, 0.0 );
G. Elber
IRIT Solid modeler
Figure 70: Polygons or polylines can be manually constructed using the POLY constructor.
V3
V4
V5
V6
V7
V8
V9
V10
V11
V12
I =
= vector( 0.3, 0.0,
= vector( 0.2, 0.0,
= vector( 0.2, 0.0,
= vector( 0.3, 0.0,
= vector( 0.3, 0.0,
= vector( 0.0, 0.0,
= vector( 0.0, 0.0,
= vector( 0.1, 0.0,
= vector( 0.1, 0.0,
= vector( 0.0, 0.0,
POLY( list( V1, V2,
FALSE );
0.1
0.1
0.5
0.5
0.6
0.6
0.5
0.5
0.1
0.1
V3,
);
);
);
);
);
);
);
);
);
);
V4, V5, V6, V7, V8, V9, V10, V11, V12 ),
constructs an object with a single polygon in the shape of the letter I. See Figure 70.
11.2.225
POLYHOLES
PolygonType POLYHOLES( PolygonType OuterPoly, PolygonType Island )
or
PolygonType POLYHOLES( PolygonType OuterPoly, ListType Islands )
153
G. Elber
IRIT Solid modeler
154
merges the given Island(s) into the main polygon OuterPoly, creating a polygon with holes. The
outer polygon OuterPoly is assumed to be oriented in the opposite direction to that of the Island(s).
11.2.226
PPINCLUDE
NumericType PPINCLUDE( PolyType Pl, PointType Pt )
tests if a point Pt is inside a 3D closed polyhedra Pl in 3-space or if a point Pt is inside a 2D
closed polygon Pl in 2-space, if Pl contains only one (planar) polygon. Returns TRUE if inside, FALSE
otherwise.
Example:
if ( PPINCLUDE( Pl, pt ),
... );
See also CPINCLUDE.
11.2.227
PPINTER
ListType PPINTER( PolyType Pl1, PolyType Pl2 )
computes the intersection of two individual polygons in R3, Pl1 and Pl2. Similar results can also
be obtained via Boolean operations.
Example:
Pl1 = poly( list( point( -1, -1, 0
point( -1, 1, 0
point( 1, 1, 0
point( 1, -1, 0
Pl2 = Pl1 * rx( 70 ) * tx( 0.5 );
),
),
),
) ), false );
Inter1 = PPINTER( Pl1, Pl2 );
iritstate( "intercrv", true );
Inter2 = Pl1 * Pl2;
computes the intersection edge of two polygons in two different ways. Note, however, that while
PPINTER considers only the first polygon in a polygonal object, the Boolean operations considers
them all.
11.2.228
PPROPFTCH
PolyType PPROPFTCH( PolyType Pl, NumericType PropType, ListType PropParam )
computes piecwise linear curves over polygonal mesh Pl. The extracted curves could be one of,
Property
Attribute Value
Isophotes
Gaussian Crvtr
Mean Crvtr
PropType
0
1
2
3
PropParam
list( AttrName, AttrValue )
list( ViewDir, InclinationAngle )
list( NumRingCrvtrAprx, CrvtrVal )
list( NumRingCrvtrAprx, CrvtrVal )
G. Elber
IRIT Solid modeler
155
The NumRingCrvtrAprx specifies how many rings around a vertex should be considered when the
curvature of the vertex is estimated. Typically 1.
Example:
Pl1 = PPropFtch( Srf, 1, list( normalize( vector( 1, 1, 1 ) ), 90 ) );
Pl2 = PPropFtch( Srf, 1, list( normalize( vector( 1, -1, 1 ) ), 90 ) );
Pl3 = PPropFtch( Srf, 1, list( normalize( vector( 1, 0, 1 ) ), 90 ) );
extracts silhouettes from surface Srf (note an InclinationAngle of 90 degrees extract silhouettes),
from three different viewing direction. See also PCRVTR, SILHOUETTE, ISOCLINE, PPROPFTCH
and SASPCTGRPH.
11.2.229
PRINTER
ListType PRINTER( PolyType Pl, NumericType RayPt, NumericType RayDir )
computes the number of XY planar intersection of ray (RayPt, RayDir) with a single polygon
Pl. Returned is the number of interesections found.
11.2.230
PRISA
ListType PRISA( SurfaceType Srfs, NumericType SamplesPerCurve,
NumericType Epsilon, ConstantType Dir, VectorType Space,
NumericType CrossSecs )
or
ListType PRISA( TrimSrfType TrimSrfs, NumericType SamplesPerCurve,
NumericType Epsilon, ConstantType Dir, VectorType Space,
NumericType CrossSecs )
compute a layout (prisa) of the given surface(s) Srfs or TrimSrfs, and return a list of (trimmed)
surface objects representing the layout. The surface is approximated to within Epsilon in direction
Dir into a set of ruled surfaces, and then developable surfaces that are laid out flat onto the XY plane.
If Epsilon is negative, the piecewise ruled surface approximation in 3-space is returned. SamplesPerCurve controls the piecewise linear approximation of the boundary of the ruled/developable surfaces.
Space is a vector whose X component controls the space between the different surfaces’ layout, and
whose Y component controls the space between different layout pieces. If CrossSecs is not zero, the
3D cross sections, approximated as planar, of each laid out region are also provided.
Example:
cross = cbspline( 3,
list( ctlpt(
ctlpt(
ctlpt(
ctlpt(
ctlpt(
ctlpt(
ctlpt(
E3,
E3,
E3,
E3,
E3,
E3,
E3,
0.7,
0.7,
0.1,
0.1,
0.6,
0.8,
0.8,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0. ),
0.06 ),
0.1 ),
0.6 ),
0.6 ),
0.8 ),
1.4 ),
IRIT Solid modeler
G. Elber
156
Figure 71: The layout (prisa in hebrew...) of a freeform surface can be approximated using the PRISA
function.
ctlpt( E3, 0.6, 0.0, 1.6 ) ),
list( KV_OPEN ) );
wglass = surfrev( cross );
wgl_ruled = PRISA( wglass, 6, -0.1, COL, vector( 0, 0.25, 0.0 ), false );
wgl_prisa = PRISA( wglass, 6, 0.1, COL, vector( 0, 0.25, 0.0 ), true );
computes a layout of a wine glass in wgl prisa and a three-dimensional ruled surface approximation
of wglass in wgl ruled. See Figure 71.
See also FMLNANAL.
11.2.231
PSUBDIV
CurveType PSUBDIV( PolyType Plgns, NumericType SubdivisionScheme,
NumericType Numiterations, NumericType SmoothNormals,
NumericType TrianglesOnly, NumericType AdditionalParam )
applies one of several subdivision schemes to the given polygonal object Plgns. The SubdivisionScheme can be one of: Catmull Clark if 0, Loop if 1, Butterfly if 2. The number of subdivision
iterations applied is set by Numiterations. If SmoothNormals is TRUE, a normal approximation
scheme is applied to the result, for the vertices of the model, by averaging adjacent faces normals at
each vertex. If TrianglesOnly, the output is examined and non triangles are dividied into triangles.
Finally, if the Butterfly scheme is applied, AdditionalParam is used as the tension.
CatmulRomPl = PSUBDIV( Plgns, 0, 1, 1, 1, 0 );
See Figure 72.
G. Elber
IRIT Solid modeler
157
Figure 72: Applied a subdivision scheme for polygonal models using the PSUBDIV command. From
left to right: Original half-a-pawn model, Catmull Clark, Loop, and Butterfly, after one iteration.
11.2.232
PT3BARY
VectorType PT3BARY( PointType Pt1, PointType Pt2, PointType Pt3,
PointType InteriorPt )
computes the barycentric coordinates of InterPt with respect to the triangle defined by Pt1, Pt2,
Pt3. A vector of three coefficents, which are the weights of the three points of the triangle, are returned.
InteriorPt is assumed to be in the triangle.
Example:
Coeffs = PT3BARY( point(
point(
point(
point(
11.2.233
0, 0,
1, 0,
0, 1,
0.25,
0 ),
0 ),
0 ),
0.25, 0.0 ) );
PTHMSPR
ListType PTHMSPR( NumericType Size )
computes a fairly uniform distribution of points on a hemisphere. Size hints at the distance between
adjacent placed points.
Example:
Pts = PTHMSPR( 0.1 );
11.2.234
PTLNPLN
VectorType PTLNPLN( PointType LineOrig, VectorType LineRay, PlaneType Plane )
computes the point of intersection of given line LineOrig, LineRay with plane Plane.
Example:
InterPt = PtLnPln( point( 1, 0, 1 ), vector( 1, 1, 1 ), Plane( 0, 0, 1, 0 ) );
IRIT Solid modeler
11.2.235
G. Elber
158
PTPTLN
VectorType PTPTLN( PointType Point, PointType LineOrig, VectorType LineRay )
computes the point on line LineOrig, LineRay that is closest to point Point. See also DSTPTLN.
Example:
ClosestPt = PTPTLN( point( 0, 0, 0 ), point( 1, 1, 0 ), vector( 1, 1, 1 ) );
11.2.236
PTREGISTER
MatrixType PTREGISTER( ListType PtSet1, ListType PtSet2,
NumericType StepSize, NumericType Tolerance )
registers one points set, PtSet1, with another, PtSet2. The two points sets are assumed to be
rigid motion of one another. StepSize controls the step size of the numerical process and must be
a positive real less than 1.0. The larger StepSize is, the faster the convergance with less stability.
Finally, Tolerance prescribes the necessary accuraacy in L-infinity sense. This function will converge
for small rotational deviations only.
Pt1 = nil();
for (i = 0, 1, 15,
Pt = point( random( -.7, .7 ), random( -.7, .7 ), random( -.7, .7 ) ):
snoc( Pt * tx( 0 ), Pt1 ) );
Pt2 = Pt1 * rx( 13 ) * ry( 5 ) * rz( 11 )
* tx( 0.1 ) * ty( 0.03 ) * tz( -0.05 );
Tr = PTREGISTER( Pt1, Pt2, 1, 1e-6 );
11.2.237
PTS2PLLN
ListType PTS2PLLN( ListType Points, NumericType MaxMatchDist )
matches the given cloud of points in a list of polylines. MaxMatchDist is used as the maximal
distance between two adjacent points to connect.
Example:
Pts = nil();
for ( i = 0, 1, 100,
t = random( 0, 2 * Pi ):
snoc( point( cos( t ), sin( t ), 0 ), Pts ) );
Pll = PTS2PLLN( Pts, 0.1 );
connects 100 random points on the unit circle into a polyline approximating an (almost) complete
circle.
11.2.238
PTS2PLYS
PolylineType PTS2PLYS( ListType Points, NumericType MergeTol )
merges a list of points Points to polylines. Merges the points until two adjacent points are at most
MergeTol apart. Points is a list of with PointType or CtlPtType. In the later case the control point
can be of arbitrary dimension.
IRIT Solid modeler
11.2.239
G. Elber
159
PTSLNLN
ListType PTSLNLN( PointType Line1Orig, VectorType Line1Ray,
PointType Line2Orig, VectorType Line2Ray )
computes the closest two points on the two lines defined by point LineiOrig and ray LineiRay.
See also DSTLNLN. A list object with the two points is returned.
Example:
ClosestPts = PtsLnLn( point( 1, 0, 0 ), vector( 0, 1, 0 ),
point( 0, 1, 0 ), vector( 1, 0, 0 ) );
11.2.240
QUADCRVS
ListType QUADCRVS( CurveType Crv, NumericType Tolerance, NumericType MaxLen )
approximates given curve Crv using piecewise quadratic curves upto the prescribed tolerance Tolerance. If MaxLen is positive it is used to limit the arc length of the cubic curves segments.
Example:
PQaudCrv = QUADCRVS( Crv, 0.01, 0.5 );
creates a piecewise quadratic approximation to curve Crv upto tolerance 0.01 and maximal arc
length of cubic segments of 0.5. See also CUBICCRVS, CBIARCS.
11.2.241
QUADRIC
ListType QUADRIC( ListType ABCDEFGHIJ ) )
or
ListType QUADRIC( ListType ABCDEFZ ) )
in the first form, constructs a quadric parametric surface whose coefficients are the ten coefficients
in the list ABCDEFGHIJ:
Ax2 + By 2 + Cz 2 + Dxy + Exz + F yz + Gx + Hy + Iz + J = 0.
(20)
In the second form, promotes the given conic curve whose coefficients are the first six coefficients in
the list ABCDEFZ:
(21)
Ax2 + Bxy + Cy 2 + Dx + Ey + F = 0.
into a quadric surface with height in z of Z amount, the seven’th list element.
Example:
Sph
= QUADRIC( list( 1, 1 , 1 , 0, 0,
Hyp1s = QUADRIC( list( 1, 1, -1, 0, 0,
Hyp2s = QUADRIC( list( 1, -1, -1, 0, 0,
Ellipse = list( 1, 0, 2, 0, 0, -1 ):
Ellipsoid = QUADRIC( Ellipse + list( 0.1 )
0,
0,
0,
);
0,
0,
0,
0,
0,
0,
0, -1 ) );
0, -1 ) );
0, -1 ) );
IRIT Solid modeler
G. Elber
160
constructs four quadric surfaces, a sphere, a portion of a hyperboloid of one sheet, a portion of a
hyperboloid of two sheets, and promotes an ellipse to an ellipsoid of Z height of 0.1. Note only elliptic
surfaces are compact and are reconstructed in whole. Because the parametrization of the quadric
is predetermined, one might need to use SREGION and SMOEBIUS to extract subregions and/or
reparametrize the surface.
See also CONICSEC, IMPLCTTRANS, ELLIPSE3PT.
11.2.242
RAYTRAPS
ListType RAYTRAPS( ListType Crvs, NumericType Orient
NumericType SubdivTol, NumericType NumerTol,
NumericType UserExprTree )
or
ListType RAYTRAPS( ListType Srfs, NumericType Orient
NumericType SubdivTol, NumericType NumerTol,
NumericType UserExprTree )
computes locations on the given planar curves or 3-space surfaces that would bounce rays from one
object to the next, in an infinite cycle. Such traps are denoted ray traps. Ray-traps are computed
for the given list of Crvs or Srfs, in the given order. The ray-trap problem is posed as a set of n
multivariate algebraic constraints with n variables, given n objects prescribed in Crvs or Srfs. The
simultaneous solution of these constraints is computed using the MZERO function. See MZERO for
the meaning of the SubdivTol and NumerTol tolerances. If Orient, attempt is made to orient the
curves/surfaces which is likely to speed up the process. If UserExprTree, expression trees constraints
are used instead of tensor products. Again, typically faster and much less memory use.
Example:
Crv1 = pcircle( vector( -0.75, -0.75, 0 ), 0.5 );
Crv2 = Crv1 * sc( 1.5 ) * tx( 2 );
Crv3 = Crv1 * sc( 0.5 ) * tx( 0.2 ) * ty( 0.6 );
Tris = RayTraps( list( Crv1, Crv2, Crv3 ), 0.1, -1e-6 );
computes the ray-traps between three circles. See Figure 73.
11.2.243
RFLCTLN
ListType RFLCTLN( SurfaceType Srf, VectorType ViewDir,
ListType LinesSprs, NumericType Euclidean )
computes reflection lines/ovals to the given surface Srf as seen from view direction ViewDir. The
resulting piecewise linear curves are in Euclidean space if Euclidean is TRUE and in Srf parameter
space, otherwise.
The reflection/ovals themselves are defined via LinesSprs. For reflection lines, LinesSprs consists
of
list( LineDir, list( LinePos1, LinePos2, ... , LinePosN ) );
IRIT Solid modeler
G. Elber
Figure 73: Computes all ray-traps between three circles, using RAYTRAPS.
defining n parallel lines with direction LineDir through point LinePos1 to LinePosN.
For reflection ovals, LinesSprs consists of
list( SprCntr, list( Rad1, Rad2, ... , RadN ) );
defining n co-spherical spheres, all located at SprCntr with radii of Rad1 to RadN.
Example:
resolution = 20;
RefLns = RflctLn( Srf,
vector( 0, 1, 2 ),
list( vector( 0, 0, 1 ),
list( point( -3.0, 2, 0 ),
point( -1.5, 2, 0 ),
point( 0.0, 2, 0 ),
point( 1.5, 2, 0 ),
point( 3.0, 2, 0 ) ) ),
true );
RefOvals = RflctLn( Srf,
vector( 1, 1, 0 ),
list( point( 0, 2, 0 ),
list( 5, 25, 45, 65, 85 ) ),
161
G. Elber
IRIT Solid modeler
162
Figure 74: Computation of the intersection curve between two ruled surfaces via the RRINTER command. On the left, the four intersection curves are shown, while (right) shows the computed function
whose zero set provides the request RRI solution.
true );
computes the reflection lines of surface Srf from viewing direction ( 0, 1, 2 ) having five reflected
lines and computes five reflection ovals from viewing direction ( 1, 1, 0 ). See also ReflectLns attributes
in the display devices.
11.2.244
RRINTER
ListType RRINTER( CurveType Srf1Crv1, CurveType Srf1Crv2,
CurveType Srf2Crv1, CurveType Srf2Crv2,
NumericType SubdivTol, NumericType ZeroSetFunc )
computes the intersection curves of the given two ruled surfaces, defined as
Srf iCrv1 ∗ v + Srf iCrv2 ∗ (1 − v), i = 1, 2, v ∈ [0, 1].
(22)
The ruled ruled intersection (RRI) problem is tranformed into a zero set finding on another function. If
ZeroSetFunc is true, the function whose zero set provides the RRIsolution is returned. Otherwise, if
ZeroSetFunc is false, the RRI solution itself is returned. The zero set is computed via numerical zero
set finding methods and Tolerance controls the fineness of the approximated solution. If Tolerance
is negative, the absolute value is employed as Tolerance but the intersection curves are computed as
if the two ruled surfaces are infinite (i.e. v is unbounded). See Figure 74.
Example:
c1 = cbezier( list( ctlpt( E3, -1.0, -1.0, -1.0 ),
ctlpt( E3, -0.5,
8.0, -1.0 ),
ctlpt( E3, 0.0, -15.0, -1.0 ),
ctlpt( E3, 0.5,
8.0, -1.0 ),
ctlpt( E3, 1.0, -1.0, -1.0 ) ) );
c2 = c1 * sc( 0.7 ) * tz( 1.7 );
G. Elber
IRIT Solid modeler
163
r1 = ruledSrf( c1, c2 );
c1 = pcircle( vector( 0, 0, 0 ), 0.3 ) * tz( 2 );
c2 = c1 * sc( 0.5 ) * tz( -3 );
r2 = ruledSrf( c1, c2 ) * ry( 90 );
c = RRINTER( cMesh( r1,
cMesh( r1,
cMesh( r2,
cMesh( r2,
0.1, false
row,
row,
row,
row,
);
0
1
0
1
),
),
),
),
interact( list( r1, r2, nth( c, 1 ) ) );
See also SSINTER, SSINTR2 and GGINTER.
11.2.245
RULEDFIT
SurfaceType RULEDFIT( SurfaceType Srf, NumericType Dir,
NumericType DomainExtension, NumericType SamplingRate )
fits a ruled surface to the given general surface Srf along the specified Dir direction. Normally
DomainExtension is zero by can be used to extend the domain so the ruling can start/end outside
Srf’s domain. Finally SamplingRate sets the number of samples to use along the fitting Dir.
Example:
rSrf = ruledfit( Srf, col, 0.0, 40 );
fits a ruled surface to Srf along the col direction with no extension and 40 samples.
See Figure 75.
See also RULEDSRF.
11.2.246
RULEDSRF
SurfaceType RULEDSRF( CurveType Crv1, CurveType Crv2 )
or
PolygonType RULEDSRF( PolygonType Poly1, PolygonType Poly2 )
construct a ruled surface between the two curves Crv1 and Crv2 or two polylines Poly1 and
Poly2. The curves do not have to have the same order or type, and will be promoted to their least
common denominator. The polys must have the same number of points and both must be either
polygons or polylines.
Example:
c1 = cbspline( 3,
list( ctlpt(E3, 1.7, 0.0 , 0
ctlpt(E3, 0.7, 0.7 , 0
),
),
G. Elber
IRIT Solid modeler
Figure 75: A ruled surface fitting to a general hyperbolic surface using RULEDFIT.
ctlpt(E3, 1.7,
ctlpt(E3, 1.5,
ctlpt(E3, 1.6,
list( KV_OPEN ) );
c2 = cbspline( 3,
list( ctlpt(E3, 0.7,
ctlpt(E3,-0.7,
ctlpt(E3, 0.7,
ctlpt(E3,-0.7,
ctlpt(E3, 0.7,
list( KV_OPEN ) );
0.3 , 0
0.8 , 0
1.0 , 0
),
),
) ),
0.0
0.2
0.5
0.7
1.0
),
),
),
),
) ) ,
,
,
,
,
,
0
0
0
0
0
srf1 = RULEDSRF( c1, c2 );
interact( list( c1, c2, srf1 ), on );
c2a = ffmatch( c1, c2, 50, 100, 2, false, 1 );
srf2 = RULEDSRF( c1, c2a );
interact( list( c1, c2, srf2 ), on );
164
IRIT Solid modeler
G. Elber
165
Figure 76: A naive construction of a ruled surface (left) using RULEDSRF results in self intersection.
FFMATCH is employed (right) to automatically resolve this self intersection.
constructs a planar ruled surface between two curves, c1 and c2. The naive construction causes
self intersection, but by employing FFMATCH the self intersection can be resolved. See Figure 76.
See also FFMATCH and RULEDFIT.
11.2.247
RULEDTV
TrivarType RULEDTV( SurfaceType Srf1, SurfaceType Srf2 )
constructs a ruled trivariate between the two surfaces Srf1 and Srf2. The surfaces do not have to
have the same order or type, and will be promoted to their least common denominator.
Example:
s1 = boolone( pcircle( vector( 0, 0, 0 ), 1 ) );
s2 = boolone( pcircle( vector( 0, 0, 1 ), 0.5 ) );
tv = RULEDTV( s1, s2 );
constructs a truncated cone-volume as a ruled trivariate between two surfaces, s1 and s2. See
Figure 77.
See also EXTRUDE, TFROMSRFS.
11.2.248
SACCESS
ListType SACCESS( SurfaceType AccessSrf,
AnyType OrientFieldSrf,
SurfaceType CheckSrf,
NumericType SubdivTol,
NumericType NumericTol )
computes the domain on the AccessSrf surface that is accessible from the orientation that is
optionally prescribed by OrientFieldSrf, without gouging into the CheckSrf surface. If OrientFieldSrf is not a surface, the normal field of AccessSrf is employed. AccessSrf and OrientFieldSrf
must share a (u, v) domain, whereas CheckSrf can present a different (s, t) domain.
The accuracy of the computation is governed by a two stage solution, a subdivision stage with
tolerance SubdivTol followed by a numerical improvement stage with NumericTol accuracy. The
second, numeric, stage is invoked only if NumericTol ¡ SubdivTol.
IRIT Solid modeler
G. Elber
166
Figure 77: A ruled volume as a trivariate between two disc surfaces, created via the RULEDTV
function.
The returned results are a set of points on the boundary of the accessible region. The points are in
E4 space as (u, v, s, t) 4-tuples.
Example:
c = cregion( pcircle( vector( 0, 0, 0 ), 1 ), 1, 3 ) * ry( 90 );
pSphere = surfPRev( c ) * sc( 0.3 ) * tz( 1 );
Pln = ruledSrf( ctlpt( E3, -1, -1, 0 ) + ctlpt( E3, -1,
ctlpt( E3, 1, -1, 0 ) + ctlpt( E3, 1,
1, 0 ),
1, 0 ) );
Pts = SACCESS( Pln, 0, pSphere, 0.1, 1e-5 );
sPts = nil();
sPtsErr = nil();
for ( i = 1, 1, sizeof( Pts ),
Pt = nth( Pts, i ):
Err = getAttr( Pt, "Error"):
if ( Err > 1e-5,
snoc( seval( Pln, coord( Pt, 1 ), coord( Pt, 2 ) ), sPtsErr ),
snoc( seval( Pln, coord( Pt, 1 ), coord( Pt, 2 ) ), sPts ) ) );
color( sPts, green );
color( sPtsErr, red );
IRIT Solid modeler
G. Elber
167
Figure 78: The limit of the accessible area of the plane along the normal direction, without gouging
into the sphere is computed and presented using the SACCESS function.
interact( list( pSphere, Pln, sPts, sPtsErr ) );
computes the access domain of plane Pln along the normal, Z, direction while preventing gouging
into the check surface pSphere. See Figure 78. See MZERO for the meaning of SubdivTol and
NumerTol.
11.2.249
SASPCTGRPH
PolyType SASPCTGRPH( SurfaceType Srf )
approximates the aspect graph of surface Srf by computing the principal directions with zero
curvature at the parabolic points of Srf. The aspect graph is defined over the unit sphere and identifies
all direction from which the silhouette curves of Srf change topology.
Example:
AG = SAspctGrph( Srf );
See also SILHOUETTE.
11.2.250
SASYMPEVAL
ListType SASYMPEVAL( SurfaceType Srf, NumericType U, NumericType V,
NumericType Euclidean )
evalutes the asymptotic direction of surface Srf at parametric location (U, V), if any. If Euclidean
is not zero, the directions are returned in Euclidean space, otherwise, in parametric space. Returned
is a list of upto two vectors.
Example:
AsympDir = SAsympEval( Srf, u, v, true );
See also SCRVTR.
G. Elber
IRIT Solid modeler
168
Figure 79: A Bezier surface (left) of degree 3 by 5 and a B-spline surface (right) of degree 3 by 3
(bi-quadratic). Both share the same control mesh.
11.2.251
SBEZIER
SurfaceType SBEZIER( ListType CtlMesh )
creates a Bezier surface using the provided control mesh. CtlMesh is a list of rows, each of which
is a list of control points. All control points must be of type (E1-E9, P1-P9), or regular PointType
defining the surface’s control mesh. The surface’s point type will be of a space which is the union of
the spaces of all points.
The created surface is the piecewise polynomial (or rational) surface,
S(u, v) =
m n
Pij Bi (u)Bj (v)
(23)
i=0 j=0
where Pij are the control points CtlMesh, and m and n are the degrees of the surface, which are one
less than the number of points in the appropriate direction.
Example:
Srf = SBEZIER( list ( list( ctlpt(
ctlpt(
ctlpt(
list( ctlpt(
ctlpt(
ctlpt(
list( ctlpt(
ctlpt(
ctlpt(
list( ctlpt(
ctlpt(
ctlpt(
list( ctlpt(
ctlpt(
ctlpt(
E3,
E3,
E3,
E3,
E3,
E3,
E3,
E3,
E3,
E3,
E3,
E3,
E3,
E3,
E3,
0.0,
0.0,
0.0,
1.0,
1.0,
1.0,
2.0,
2.0,
2.0,
3.0,
3.0,
3.0,
4.0,
4.0,
4.0,
See Figure 79.
See also CBEZIER, SBSPLINE and SPOWER.
0.0,
1.0,
2.0,
0.0,
1.0,
2.0,
0.0,
1.0,
2.0,
0.0,
1.0,
2.0,
0.0,
1.0,
2.0,
1.0
0.0
1.0
0.0
2.0
0.0
2.0
0.0
2.0
0.0
2.0
0.0
1.0
0.0
1.0
),
),
) ),
),
),
) ),
),
),
) ),
),
),
) ),
),
),
) ) ) );
IRIT Solid modeler
G. Elber
169
Figure 80: (a) Bisector surface of a plane and a point computed using the SBISECTOR command.
11.2.252
SBISECTOR
SurfaceType SBISECTOR( SurfaceType Srf, PointType Pt )
computes the bisector surface of a given surface to a point. See also CBISECTOR2D, CBISECTOR3D.
Example:
s = ruledSrf( ctlpt( E3, -1.0, -1.0, 0.0 ) + ctlpt( E3,
ctlpt( E3, -1.0, 1.0, 0.0 ) + ctlpt( E3,
pt = point( 0.0, 0.0, 1.0 );
bisect = SBISECTOR( s, pt );
interact( list( s, pt, bisect ) );
computes the bisector surface of a plane and a point. See Figure 80.
1.0, -1.0, 0.0 ),
1.0, 1.0, 0.0 ) );
G. Elber
IRIT Solid modeler
11.2.253
170
SBSPLINE
SurfaceType SBSPLINE( NumericType UOrder, NumericType VOrder,
ListType CtlMesh, ListType KnotVectors )
creates a B-spline surface from the provided UOrder and VOrder orders, the control mesh
CtlMesh, and the two knot vectors KnotVectors. CtlMesh is a list of rows, each of which is a
list of control points. All control points must be of point type (E1-E9, P1-P9), or regular PointType
defining the surface’s control mesh. The surface’s point type will be of a space which is the union
of the spaces of all points. KnotVectors is a list of two knot vectors. Each knot vector is a list of
NumericType knots of length #CtlPtList plus the Order. If, however, the length of the knot vector
is equal to #CtlPtList + Order + Order - 1, the curve is assumed to be periodic. The knot
vector may also be a list of a single constant KV OPEN or KV FLOAT or KV PERIODIC, in which a
uniform knot vector with the appropriate length and with an open, floating or periodic end condition
will be constructed automatically.
The created surface is the piecewise polynomial (or rational) surface,
S(u, v) =
m n
i=0 j=0
Pij Bi,χ (u)Bj,ξ (v)
(24)
where Pij are the control points CtlMesh, and m and n are the degrees of the surface, which are one
less than UOrder and VOrder. χ and ξ are the two knot vectors of the surface.
Example:
Mesh = list ( list( ctlpt( E3, 0.0, 0.0, 1.0 ),
ctlpt( E3, 0.0, 1.0, 0.0 ),
ctlpt( E3, 0.0, 2.0, 1.0 ) ),
list( ctlpt( E3, 1.0, 0.0, 0.0 ),
ctlpt( E3, 1.0, 1.0, 2.0 ),
ctlpt( E3, 1.0, 2.0, 0.0 ) ),
list( ctlpt( E3, 2.0, 0.0, 2.0 ),
ctlpt( E3, 2.0, 1.0, 0.0 ),
ctlpt( E3, 2.0, 2.0, 2.0 ) ),
list( ctlpt( E3, 3.0, 0.0, 0.0 ),
ctlpt( E3, 3.0, 1.0, 2.0 ),
ctlpt( E3, 3.0, 2.0, 0.0 ) ),
list( ctlpt( E3, 4.0, 0.0, 1.0 ),
ctlpt( E3, 4.0, 1.0, 0.0 ),
ctlpt( E3, 4.0, 2.0, 1.0 ) ) );
Srf = SBSPLINE( 3, 3, Mesh, list( list( KV_OPEN ),
list( 3, 3, 3, 4, 5, 6, 6, 6 ) ) );
constructs a bi-quadratic B-spline surface with its first knot vector having a uniform knot spacing
with open end conditions. See Figure 79.
See also CBSPLINE, SBEZIER and SPOWER.
11.2.254
SCRVTR
SurfaceType SCRVTR( SurfaceType Srf, ConstType PtType, ConstType Dir )
G. Elber
IRIT Solid modeler
171
symbolically computes the extreme curvature bound on Srf. If Dir is either ROW or COL, then
the normal curvature square of Srf in Dir is computed symbolically and returned. Otherwise, an
upper bound on the sum of the squares of the two principle curvatures is symbolically computed and
returned.
The returned value is a surface that can be evaluated to the curvature bound, given a UV location.
The returned surface value is a scalar field of point type P1 (scalar rational). However, if PtType is
one of E1, P1, E3, or P3, the returned surface is coerced to this given type. If the types are one of E3,
or P3, then the Y and Z axes are set to be equivalent to the U and V parametric domains.
This function computes the square of the normal curvature scalar field for surfaces as (in the U
parametric direction, same for V),
2
n, ∂∂uS2
(25)
κun (u, v) = ∂S ∂S
∂u , ∂u
and computes ξ(u, v) = k1 (u, v)2 + k2 (u, v)2 as the scalar field of
ξ(u, v) =
(g11 l22 + l11 g22 − 2g12 l12 )2 − 2 |G| |L|
,
|G|2 n2
(26)
where gij and lij are the coefficients of the first and second fundamental forms G and L.
See also CCRVTR, SCRVTREVAL, SASYMPEVAL.
Example:
cross = cbspline( 3,
list( ctlpt( E2, 0.0, 0.0 ),
ctlpt( E2, 0.8, 0.0 ),
ctlpt( E2, 0.8, 0.2 ),
ctlpt( E2, 0.07, 1.4 ),
ctlpt( E2, -0.07, 1.4 ),
ctlpt( E2, -0.8, 0.2 ),
ctlpt( E2, -0.8, 0.0 ),
ctlpt( E2, 0.0, 0.0 ) ),
list( KV_OPEN ) );
cross = coerce( cross, e3 );
s = sFromCrvs( list( cross,
cross * trans( vector( 0.5, 0, 1 ) ),
cross * trans( vector( 0, 0, 2 ) ) ), 3, KV_OPEN );
view( list( s, axes ), on );
UCrvtrZXY = scrvtr( s, E3, row );
VCrvtrZXY = scrvtr( s, E3, col );
UCrvtrXYZ = UCrvtrZXY * rotx( -90 ) * roty( -90 ) * scale( vector( 1, 1, 0.001 ) );
VCrvtrXYZ = VCrvtrZXY * rotx( -90 ) * roty( -90 ) * scale( vector( 1, 1, 10 ) );
color( UCrvtrXYZ, red );
color( VCrvtrXYZ, magenta );
view( list( UCrvtrXYZ, VCrvtrXYZ ), off );
CrvtrZXY = scrvtr( s, E3, off );
IRIT Solid modeler
G. Elber
172
Figure 81: From left to right: original surface, normal curvature in the U direction, normal curvature
in the V direction, sum of the square of principle curvatures (different scales). All computed using
SCRVTR.
CrvtrXYZ = CrvtrZXY * rotx( -90 ) * roty( -90 ) * scale( vector( 1, 1, 0.001 ) );
color( CrvtrXYZ, green );
view( CrvtrXYZ, off );
computes the square of the normal curvature in the U and V directions, flips its scalar value from X
to Z using rotations and scales the fields to reasonable values, and then displays them. It also displays
a total bound on the normal curvature.
Due to the large degree of the resulting fields, be aware that rational surfaces will compute into
large degree curvature bound fields. See also IRITSTATE ”InterpProd” option for faster symbolic
computation. See Figure 81.
11.2.255
SCRVTREVAL
ListType SCRVTREVAL( SurfaceType Srf, NumericType U, NumericType V,
NumericType Euclidean )
computes the principle curvatures and directions of surface Srf at parametric location (U, V). A
list of four elements (k1, V1, k2, V2), with k1/V1 being the first principle curvature/direction and
k2/V2 being the second, is returned. If Euclidean is TRUE then the principle curvatures are returned
in Euclidean space. Consecutive calls with the same surface Srf to SCRVTREVAL will yield more
efficient evaluations as derivative data is cached.
Example:
Crvtr = SCRVTREVAL( Srf, 0.5, 0.5, True );
K = nth( Crvtr, 1 ) * nth( Crvtr, 3 );
computes the Total (Gaussian) curvatures, K = k1 * k2, of Srf at (0.5, 0.5). See also SCRVTR.
G. Elber
IRIT Solid modeler
+
173
=
Figure 82: Polygonal geometry (left) could be tiled over arbitrary surface, torus in this case (middle),
to yield a bumpy shape (right) using the SDDMMAP function.
11.2.256
SDDMMAP
PolyType SDDMMAP( SurfaceType BaseSrf, PolyType Bump,
NumericType UDup, NumericTye VDup, NumericTye LclUVs )
Tiles a composition of Bump over surface BaseSrf UDup by VDup times, creating a detailed
bump geometry. Bump can be any polygonal geometry whatsoever with XY coordinates that are
contained in the unit square [0, 1] x [0, 1], while Z serves as the elevation above the surface. The
composed geometry could inherit the UV texture ccordinates from the UV coordinates found in Bump
if LclUVs is TRUE or inherit BaseSrf UV coordinates if LclUVs is FALSE.
Example:
BaseTorus = torusSrf( 1, 0.2 );
BumpTorus = SDDMMAP( BaseTorus, BumpPolyObj, 6, 8, on );
constructs a bumpy BumpTorus with a bump tiled 6 x 8 times over the surface. See Figure 82.
See also TEXTWARP, TDEFORM.
11.2.257
SDERIVE
SurfaceType SDERIVE( SurfaceType Srf, NumericType Dir )
returns a vector field surface representing the differentiated surface in the given direction (ROW or
COL). Evaluation of the returned surface at a given parameter value will return a vector tangent to
Srf in Dir at that parameter value.
DuSrf = SDERIVE(
DvSrf = SDERIVE(
Normal = coerce(
coerce(
Srf, ROW );
Srf, COL );
seval( DuSrf, 0.5, 0.5 ), VECTOR_TYPE ) ^
seval( DvSrf, 0.5, 0.5 ), VECTOR_TYPE );
computes the two partial derivatives of the surface Srf and computes its normal as their cross
product, at the parametric location (0.5, 0.5). See also CDERIVE, TDERIVE, and MDERIVE.
IRIT Solid modeler
G. Elber
174
Figure 83: A surface can be subdivided along a general curve that splits its domain into two distinct
regions using SDIVCRV. Left shows the input and the right shows the result (after shifting a bit the
two surface regions).
11.2.258
SDIVCRV
CurveType SDIVCRV( SurfaceType Srf, CurveType Crv)
subdivides surface Srf into two along curve Crv, assuming that: Crv is a simple curve in the UV
parametrci domain of Srf and that Crv divides the domain of Srf into two regions by starting and
ending on two opposite boundaries of Srf. Either Crv starts and ends in Umin.UMax or VMin/VMax
of Srf.
Example:
Srfs = SDIVCRV( Srf, Crv );
See Figure 83. See also SDIVIDE.
11.2.259
SDIVIDE
SurfaceType SDIVIDE( SurfaceType Srf, ConstantType Direction,
NumericType Param )
or
TrimSrfType SDIVIDE( TrimSrfType Srf, ConstantType Direction,
NumericType Param )
subdivide a (possibly trimmed) surface into two at the specified parameter value Param in the
specified Direction (ROW or COL). Srf can be either a B-spline surface in which Param must be
IRIT Solid modeler
G. Elber
175
Figure 84: A surface can be subdivided into two distinct regions using SDIVIDE.
contained in the parametric domain of the surface, or a Bezier surface in which Param can be arbitrary,
extrapolating if not in the range of zero to one.
It returns a list of upto two sub-surfaces. The individual surfaces may be extracted from the
list using the NTH command. If Srf is a trimmed surface, it may be the case that one of the two
subdivided surfaces is completely trimmed out, and hence only one surface will be returned.
Example:
SrfLst = SDIVIDE( Srf, ROW, 0.5 );
Srf1 = nth( SrfLst, 1 );
Srf2 = nth( SrfLst, 2 );
subdivides Srf at the parameter value of 0.5 in the ROW direction. See Figure 84. See also
CDIVIDE, SDIVCRV, TDIVIDE, and MDIVIDE
11.2.260
SELFINTER
ListType SELFINTER( CurveType Crv, NumericType SubdivTol,
NumericType NumerTol, NumericType MinNrmlDeviation,
NumericType Euclidean )
or
ListType SELFINTER( SurfaceType Srf, NumericType SubdivTol,
NumericType NumerTol, NumericType MinNrmlDeviation,
G. Elber
IRIT Solid modeler
176
NumericType Euclidean )
computes the self intersection locations/curves of a given curve or surface. Returned is a list of
points/piecewise linear curves. The returned locations, if in the parameteric space (see below), are
pairs of parameter values along the curve in case of a curve and a 4-tuple holding the pair of surface
location, in case of surfaces. See MZERO for the meaning of SubdivTol and NumerTol. If MinNrmlDeviation is positive it specifies the minimal deviation angle required for the two normal at the
self intersection (of the two different interesecting locations), in degrees. If negative, a different approach algother is used that eliminates the redundant diagonal factor in the self intersection constraint.
If Euclidean, the returned data is in Euclidean space. Otherwise, the returned data is in parameteric
space.
Example:
si1 = selfinter( crv, 0.001, 1e-10, 15.0, true );
si2 = selfinter( crv, 0.001, 1e-10, -1.0, true );
11.2.261
SETCOVER
ListType SETCOVER( ListType RangesSet, NumericType OverlapTolerance )
computes the minimal subset of the given set RangesSet, that covers the entire domain spanned
by RangesSet. A range is a list object with two numeric values, the start and end of this specific
range. Each element in RangesSet can be either a range, or a list of ranges. OverlapTolerance
specifies the tolerance to use in overlapping ranges. Returned is a list of indices (first element zero)
that prescribe the minimal coverage. Note that the former case of a single range per element is solved
in an almost linear time whereas the later case of multiple ranges per element is exponential. Hence,
do not attempt to find minimal coverage of more than a few elements in the later case.
Example:
Ranges = list( list( 0.0,
list( 0.1,
list( 0.3,
list( 0.1,
Indcs = SETCOVER( Ranges,
0.4 ),
0.4 ),
1.0 ),
0.9 ) );
1e-7 );
and SETCOVER should return ”list( 0, 2 )”, the two indices of the ranges that cover this domain
of [0, 1]. See also CVISIBLE.
11.2.262
SEDITPT
SurfaceType SEDITPT( SurfaceType Srf, CtlPtType CPt, NumericType UIndex,
NumericType VIndex )
provides a simple mechanism to manually modify a single control point number UIndex and
VIndex (base count is 0) in the control mesh of Srf by substituting CtlPt instead. CtlPt must have
the same point type as the control points of Srf. The original surface Srf is not modified.
Example:
CPt = ctlpt( E3, 1, 2, 3 );
NewSrf = SEDITPT( Srf, CPt, 0, 0 );
constructs a NewSrf with the first control point of Srf being CPt.
IRIT Solid modeler
11.2.263
G. Elber
177
SEVAL
CtlPtType SEVAL( SurfaceType Srf, NumericType UParam, NumericType VParam )
or
CtlPtType SEVAL( TrimSrfType Srf, NumericType UParam, NumericType VParam )
evaluates the provided (possibly trimmed) surface Srf at the given UParam and VParam parameters. Both UParam and VParam should be contained in the surface parametric domain if Srf is a
B-spline surface, or between zero and one if Srf is a Bezier surface. The returned control point has the
same type as the control points of Srf.
Example:
CPt = SEVAL( Srf, 0.25, 0.22 );
evaluates Srf at the parameter values of (0.25, 0.22). See also CEVAL, MEVAL, TEVAL.
11.2.264
SFLECNODAL
PolyType SFLECNODAL( SurfaceType Srf, NumericType SubdivTol,
NumericType NumericTol, NumericType ContactOrder )
computes the flecnodal curves over a given freeform geometry, Srf, if ContactOrder is 4.. The
flecnodal curves are curves of contact of order three with a line in an asymptotic direction. SubdivTol
and NumericTol controls the subdivision and numeric tolerances of the approximation. Typically the
subdivision tolerance is fairly coarse. This function can also be used to compute flecnodal points of
contact, if ContactOrder is set to 4.
Example:
flecs = SFlecnodal( srf, 0.05, -1e-6, 3 );
See also MZERO for the meaning of SubdivTol and NumerTol.
11.2.265
SFOCAL
SurfaceType SFOCAL( SurfaceType Srf, NumericType Dir )
evaluates the focal surface field of surface Srf using the normal curvature in the isoparametric
direction as given by Dir (either ROW or COL). Note this function is not using the principal curvatures
as is generaly the case for focal surfaces.
Example:
gcross = cbspline( 3,
list( ctlpt( E3, 0.3,
ctlpt( E3, 0.1,
ctlpt( E3, 0.1,
ctlpt( E3, 0.5,
ctlpt( E3, 0.6,
list( KV_OPEN ) );
0.0,
0.0,
0.0,
0.0,
0.0,
0.0
0.1
0.4
0.5
0.8
),
),
),
),
) ),
IRIT Solid modeler
G. Elber
178
Figure 85: A focal surface (right) of a glass surface (left) can be computed using SFOCAL.
glass = surfprev( gcross );
color( glass, red );
gfocal = SFOCAL(glass, col);
evaluates the focal surface using the COL isoparametric direction’s normal curvature of the glass
surface. See Figure 85.
11.2.266
SFROMCRVS
SurfaceType SFROMCRVS( ListType CrvList,
NumericType OtherOrder,
NumericType OtherEndCond )
constructs a surface by substituting the curves in CrvList as rows in a control mesh of a surface.
The curves in CrvList are made compatible by promoting Bezier curves to B-splines if necessary, and
raising the degrees and refining as required before substituting the control polygons of the curves as
rows in the mesh. The other direction order is set by OtherOrder, which cannot be larger than the
number of curves. If B-spline (OtherOrder is smaller than number of curves) end conditions are set
via OtherEndCond and can be one of KV OPEN, KV FLOAT or KV PERIODIC.
The surface interpolates the first and last curves only, if a Bezier or open end conditions are selected;
otherwise, no curve is interpolated.
See also SINTERP, SINTPCRVS.
Example:
Crv1 = cbspline( 3,
list( ctlpt( E3, 0.0, 0.0, 0.0 ),
ctlpt( E3, 1.0, 0.0, 0.0 ),
IRIT Solid modeler
G. Elber
179
Figure 86: A surface can be constructed from a list of curves substituted as rows into its mesh using
SFROMCRVS. The surface does not necessarily interpolate the curves.
ctlpt( E3, 1.0, 1.0, 0.0 ) ),
list( KV_OPEN ) );
Crv2 = Crv1 * trans( vector( 0.0, 0.0, 1.0 ) );
Crv3 = Crv2 * trans( vector( 0.0, 1.0, 0.0 ) );
Srf = SFROMCRVS( list( Crv1, Crv2, Crv3 ), 3, KV_OPEN );
See Figure 86.
11.2.267
SGAUSS
SurfaceType SGAUSS( SurfaceType Srf, NumericType NumerOnly )
evaluates the Gaussian curvature (K) field of surface Srf. If NumerOnly is TRUE, only the
numerator of the Gaussian curvature is derived. Otherwise, if NumerOnly is FALSE, the full exact
Gaussian field is derived. NumerOnly TRUE may be used in cases where the zero set of K is needed
(parabolic lines).
Example:
Srf1 = hermite( cbezier( list( ctlpt( E3, 0.0, 0.0, 0.0 ),
G. Elber
IRIT Solid modeler
180
Figure 87: The Gaussian curvature field (right) of the quadratic by cubic surface (left) is computed
using SGAUSS. The Gaussian curvature field is scaled down to %1 to fit into the figure. Compare with
figure 91.
ctlpt(
ctlpt(
cbezier( list( ctlpt(
ctlpt(
ctlpt(
cbezier( list( ctlpt(
ctlpt(
ctlpt(
cbezier( list( ctlpt(
ctlpt(
ctlpt(
E3,
E3,
E3,
E3,
E3,
E3,
E3,
E3,
E3,
E3,
E3,
0.5,
1.0,
0.0,
0.5,
1.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.2,
0.0,
1.0,
0.8,
1.0,
2.0,
2.0,
2.0,
2.0,
2.0,
2.0,
0.0
0.0
0.0
0.0
0.5
0.0
0.0
0.0
0.0
0.0
0.0
),
) )
),
),
) )
),
),
) )
),
),
) )
),
),
),
) );
SGauss = SGAUSS( Srf1, false );
evaluates the Gaussian curvaure of Srf1. See Figure 87. See also EVOLUTE and SMEAN.
11.2.268
SILHOUETTE
PolyType SILHOUETTE( SurfaceType Srf, VectorType ViewDir,
NumericType SubdivTol, NumericType Euc )
or
PolyType SILHOUETTE( PolyType Pl, VectorType ViewDir,
NumericType SubdivTol, NumericType Euc )
IRIT Solid modeler
G. Elber
181
Compute the silhouette edges of the given Srf or Pl from the prescribed viewing direction ViewDir.
The end result is a piecewise linear approximation of the exact silhouette, and its accuracy is controlled
via the SubdivTol, in the case of a freeform surface Srf. If Euc is TRUE, the silhouette curves are
returned on the surface, in Euclidean space. Otherwise, the silhouette curves are returned in the
parametric space of Srf. Both Euc and the RESOLUTION variables have no affect in the case of a
polygonal model Pl.
Example:
Resolution = 10;
Sils = SILHOUETTE( glass, vector( 1, -2, 1 ), 0.01, true );
computes the silhouette curves of surface glass as viewed from viewing direction (1, -2, 1), and
returns the silhouette curves in Euclidean space. See also ISOCLINE, PPROPFTCH and SASPCTGRPH.
11.2.269
SINTERP
SurfaceType SINTERP( ListType PtList, NumericType UOrder, NumericType VOrder,
NumericType USize, NumericType VSize,
ConstantType Param)
computes a B-spline polynomial surface that interpolates or approximates the rectangular grid
or scattered set of points in PtList. The B-spline surface will have orders UOrder and VOrder
and mesh of size USize by VSize control points. If the data is on a grid, the knots will be spaced
according to Param which can be one of PARAM UNIFORM, PARAM CHORD, PARAM CENTRIP,
or PARAM NEILFOL. Currently, only PARAM UNIFORM is supported. For a scattered point set,
the Param parameter is ignored. PtList is a list of points for grid data in which all lists carry the
same amount of points, thereby defining a rectangular grid. For scattered data, PtList is a linear list
of points. All points in PtList must be of type (E1-E9, P1-P9) control point, or regular PointType.
If USize and VSize are equal to the number of points in the grid data set of PtList, the resulting
surface will interpolate the data set. Otherwise, if USize or VSize is less than the number of points
in the grid of PtList, the point data set will be least square approximated. At no time can USize or
VSize be larger that the number of points in PtList or lower than UOrder and VOrder, respectively.
If USize or VSize are zero, the grid size is used, forcing an interpolation of the data set. If PtList
contains a linear list of points, these points are treated as scattered. Each scattered point is assumed
to be holding the parameteric location at which to interpolate its first two coefficients. The other
coefficients are the interpolation values. In other words, to interpolate scattered data of type E3, E5
control points in a linear list must be provided in (u, v, x, y, z) format. Scattered data is interpolated
over a unit square (0 to 1) parameteric domain in both u and v.
All interior knots will be distinctly preserving maximal continuity. The resulting B-spline surface
will have open end conditions.
See also SINTPCRVS, SFROMCRVS.
Example:
pl = nil();
pll = nil();
for ( x = -5, 1, 5,
pl = nil():
for ( y = -5, 1, 5,
IRIT Solid modeler
G. Elber
182
Figure 88: A surface least square fitting a data set with insufficient degrees of freedom (left) and
actually interpolating the data set (right), all using SINTERP.
snoc( point( x, y, sin( x * Pi / 2 ) * cos( y * Pi / 2 ) ),
pl )
):
snoc( pl, pll ) );
s1 = SINTERP( pll, 3, 3, 8, 8, PARAM_UNIFORM );
s2 = SINTERP( pll, 3, 3, 11, 11, PARAM_UNIFORM );
samples an explicit surface sin(x) * cos(y) at a grid of 11 by 11 points, least square fit with a grid
of size of 8 by 8 surface s1, and interpolates surface s2 using this data set. See also CINTERP and
LINTERP. See Figure 88.
11.2.270
SINTPCRVS
SurfaceType SINTPCRVS( ListType CrvList,
NumericType OtherOrder,
NumericType OtherEndCond,
NumericType OtherParam )
constructs a surface by fitting it to the curves in CrvList. The curves in CrvList are made
compatible by promoting Bezier curves to B-splines if necessary, and raising the degrees and refining
as required before fitting a surface through them all. The other direction order is set by OtherOrder,
which cannot be larger than the number of curves. If B-spline (OtherOrder is smaller than number of
curves) end conditions are set via OtherEndCond and can be one of KV OPEN, KV FLOAT or
KV PERIODIC. Finally OtherParam sets the parametrization in the other direction and can be
one of PARAM CENTRIP, PARAM CENTRIP, PARAM CHORD, or PARAM NIELFOL. See also
SINTERP, SFROMCRVS.
Example:
Crv1 = cbspline( 3,
list( ctlpt( E3, 0.0,
ctlpt( E3, 1.0,
ctlpt( E3, 1.0,
list( KV_OPEN ) );
Crv2 = Crv1 * trans( vector( 0.0, 0.0,
0.0, 0.0 ),
0.0, 0.0 ),
1.0, 0.0 ) ),
1.0 ) );
IRIT Solid modeler
G. Elber
183
Figure 89: A surface can be fitted to a list of curves using SINTPCRVS.
Crv3 = Crv2 * trans( vector( 0.0, 1.0, 0.0 ) );
Srf = SINTPCRVS( list( Crv1, Crv2, Crv3 ), 3, KV_OPEN );
See Figure 89.
11.2.271
SKEL2DINT
ListType SKEL2DINT( CurveType Crv1 | PointType Pt1 | CtlPtType Pt1,
CurveType Crv2 | PointType Pt2 | CtlPtType Pt1,
CurveType Crv3 | PointType Pt3 | CtlPtType Pt1,
NumericType OutExtent, NumericType Epsilon,
NumericType FineNess, ListType MZeroTols )
computes locations in the plane of points that are equadistant from the three given entities. Entities
can be points or control points or curves, all in the XY plane. The equadistant points are computed
as the mutual intersection of the bisectors of the entities. Infinite bisectors (such as the bisector
of two points) are extended up to OutExtent. Epsilon controls the tolerances while FineNess
controls the subdivision fineness in the bisector intersection computations. MZeroTols controls the
subdivision/numeric tolerances of the MV solver, as a list of the two numeric tolerances.
Exanple:
Crv1 = pcircle( vector( -0.5, 0.7, 0.0 ), 0.3 );
Crv2 = pcircle( vector( -0.4, -0.6, 0.0 ), 0.5 );
Crv3 = pcircle( vector( 0.3, 0.2, 0.0 ), 0.4 );
EquaPt = SKEL2DINT( Crv1, Crv2, Crv3, 100, 0.1, 150, list( 1e-3, -1e-9 ) ):
computes the eight points that are equadistant to three circles. See Figure 90. See also CRC2CRVTAN.
11.2.272
SMEAN
SurfaceType SMEAN( SurfaceType Srf, NumericType NumerOnly )
evaluates the mean curvature field of surface Srf as follows: if NumerOnly is true, it computes
the numerator of only the Mean curvature. Otherwise, if NumerOnly is false, the square of the exact
Mean curvature field is derived. NumerOnly TRUE may be used in cases where the zero set of H is
needed (k1 == -k2 points).
Example:
G. Elber
IRIT Solid modeler
184
Figure 90: Computes the eight points that are equadistant to three circles, using SKEL2DINT.
Srf1 = hermite( cbezier( list( ctlpt(
ctlpt(
ctlpt(
cbezier( list( ctlpt(
ctlpt(
ctlpt(
cbezier( list( ctlpt(
ctlpt(
ctlpt(
cbezier( list( ctlpt(
ctlpt(
ctlpt(
E3,
E3,
E3,
E3,
E3,
E3,
E3,
E3,
E3,
E3,
E3,
E3,
0.0,
0.5,
1.0,
0.0,
0.5,
1.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
0.2,
0.0,
1.0,
0.8,
1.0,
2.0,
2.0,
2.0,
2.0,
2.0,
2.0,
0.0
0.0
0.0
0.0
0.0
0.5
0.0
0.0
0.0
0.0
0.0
0.0
),
),
) )
),
),
) )
),
),
) )
),
),
) )
),
),
),
) );
SMean = SMEAN( Srf1, false );
evaluates the square of the mean curvature of Srf1. See Figure 91. See also EVOLUTE and
SGAUSS.
G. Elber
IRIT Solid modeler
185
Figure 91: The square of the mean curvature field (right) of the quadratic by cubic surface (left) is
computed using SMEAN. The square of the mean curvature field is scaled down to %1 to fit into the
figure. Compare with figure 87.
11.2.273
SMERGE
SurfaceType SMERGE( SurfaceType Srf1, SurfaceType Srf2,
NumericType Dir, NumericType SameEdge )
merges two surfaces along the requested direction (ROW or COL). If SameEdge is non-zero (ON
or TRUE), then the common edge is assumed to be identical and copied only once. Otherwise (OFF
or FALSE), a ruled surface is constructed between the two surfaces along the (not) common edge.
Example:
MergedSrf = SMERGE( Srf1, Srf2, ROW, TRUE );
See also MMERGE.
11.2.274
SMESH
SurfaceType SMESH( TrivarType TV, MumericType Dir, NumericType Index )
extracts a surface out of a trivariate, TV, as the Index’s plane of the control mesh of TV in
direction Dir. Dir can be one of COL, ROW, DEPTH.
Example:
tv = tbezier( list( list( list( ctlpt(
ctlpt(
list( ctlpt(
ctlpt(
list( list( ctlpt(
ctlpt(
list( ctlpt(
ctlpt(
s0 = SMESH( tv, col, 0 );
s1 = SMESH( tv, col, 1 );
E3,
E3,
E3,
E3,
E3,
E3,
E3,
E3,
0.1,
0.2,
0.3,
0.4,
2.4,
2.2,
2.3,
2.1,
0.0,
0.1,
2.2,
2.3,
0.8,
0.7,
2.6,
2.5,
0.8 ),
2.4 ) ),
0.2 ),
2.0 ) ) ),
0.1 ),
2.3 ) ),
0.5 ),
2.7) ) ) ) );
IRIT Solid modeler
G. Elber
186
extracts the two (first and last) planes in direction col out of trivariate tv.
See also STRIVAR, CMESH, MFROMMESH.
11.2.275
SMOEBIUS
CurveType SMOEBIUS( CurveType Crv, NumericType Ratio, NumericType Dir )
rebalances the weights of a rational surface using the Moebius transformation. The shape of the
surface remains identical, while the speed is modified in the direction Dir. Ratio controls the ratio
between the last and first weights of the first row/column. If Ratio = 0, the first and last weights are
made equal.
See also CMOEBIUS.
11.2.276
SMOOTHNRML
ListType SMOOTHNRML( ListType Obj, NumericType MaxAngle )
or
PolygonType SMOOTHNRML( PolygonType Obj, NumericType MaxAngle )
Given a (list of) polygonal object(s), Obj, compute normals to the vertices by averaging the normals
of the polygons that share the vertices. Only vertices where the deviation between the polygons’ normals
and the averaged normal is less than MaxAngle are updated. If MaxAngle is negative, all vertices
normals are cleared and all polygon normals reevaluated. This is useful for polygonal data sets that
have no vertex normals.
Example:
A = box( vector( -1, -1, -1 ), 2, 2, 2 );
B = SMOOTHNRML( A, 90 );
computes average normals to a curve resulting in the smoothly shaded display of a cube. See also
FIXPLNRML.
11.2.277
SMOMENTS
SurfaceType SMOMENTS( SurfaceType Srf, NumericType Moment,
NumericType Axis1, NumericType Axis2,
NumericType Eval )
or
NumericType SMOMENTS( SurfaceType Srf, NumericType Moment,
NumericType Axis1, NumericType Axis2,
NumericType Eval )
compute the integral moment surface, MSrf, of the given surface Srf, up to a sign. The computed
moment can be either a first order moment when Moment = 1, or a second order moment when
Moment = 2. If Srf is a closed surface with domain (u0, v0) to (u1, v1), then the difference of
MSrf(u1, v1) - MSrf(u0, v0) is the requested moment. Otherwise, the computation is for the volume
IRIT Solid modeler
G. Elber
187
Figure 92: A morphing sequence between a bottle and a glass. Snapshots computed using SMORPH.
occupied between the surface Srf and the XY plane. If Eval is TRUE, the actual numerical value of
the moment is returned. The moment integral surface is returned if Eval is FALSE. Axis1 and Axis2
prescribe the two axes to compute the moments for a second order moment computation. For a first
order moment computation only Axis1 is considered.
Example:
Spr = surfPRev( cregion( pcircle( vector( 0, 0, 0 ), 1 ), 1, 3 )
* ry( 90 ) );
SMOMENTS( Spr, 2, 1, 1, 2, 1 );
computes the second order XX moment of a polynomial approximation of a unit sphere, using method
one. See also TVOLUME, SVOLUME, MOMENT and CAREA.
11.2.278
SMORPH
SurfaceType SMORPH( SurfaceType Srf1, SurfaceType Srf2, NumericType Blend )
creates a new surface which is a convex blend of the two given surfaces. The two given surfaces
must be compatible (see FFCOMPAT) before this blend is invoked. This is very useful if a sequence
that ”morphs” one surface to another is to be created.
Example:
for ( i = 0.0, 1.0, 11.0,
Msrf = SMORPH( Srf1, Srf2, i / 11.0 ):
color( Msrf, white ):
attrib( Msrf, "rgb", "255,255,255" ):
attrib( Msrf, "reflect", "0.7" ):
save( "morp1-" + i, Msrf )
);
creates a sequence of 12 surfaces, morphed from Srf1 to Srf2 and saves them in the files ”morph0.itd” to ”morph-11.itd”. See also PMORPH, CMORPH and TMORPH. See Figure 92.
11.2.279
SNORMAL
VectorType SNORMAL( SurfaceType Srf, NumericType UParam, NumericType VParam )
or
IRIT Solid modeler
G. Elber
188
Figure 93: A vector field normal (right) computed for a unit sphere (left) using SNRMLSRF. The
normal field degenerates at the north and south poles because the surface is not regular there.
VectorType SNORMAL( TrimSrfType Srf, NumericType UParam, NumericType VParam )
compute the normal vector to (possibly trimmed) surface Srf at the parameter values UParam
and VParam. The returned vector has a unit length.
Example:
Normal = SNORMAL( Srf, 0.5, 0.5 );
computes the normal to Srf at the parameter values (0.5, 0.5). See also SNRMLSRF.
11.2.280
SNRMLSRF
SurfaceType SNRMLSRF( SurfaceType Srf )
symbolically computes a vector field surface representing the non-normalized normals of the given
surface. That is, the normal surface, evaluated at (u, v), provides a vector in the direction of the normal
of the original surface at (u, v). The normal surface is computed as the symbolic cross product of the
two surfaces representing the partial derivatives of the original surface.
Example:
NrmlSrf = SNRMLSRF( Srf );
See Figure 93.
11.2.281
SPARABOLC
ListType SPARABOLC( SurfaceType Srf, NumericType SubdivTol,
NumericType NumericTol, NumericType Euclidean,
DecompSrfs )
IRIT Solid modeler
G. Elber
189
computes the parabolic edges of a freeform surface, Srf, as the zero set of the Gaussian curvature.
A scalar field with the sign of the Gauss curvature is computed and its zero is derived. SubdivTol
and NumericTol controls the subdivision and numeric tolerances of the approximation. Typically
the subdivision tolerance is fairly coarse. If Euclidean is false, the list of (piecewise linear) parabolic
curves is returned in the parametric space of Srf. Otherwise, if Euclidean is true, the parabolic curves
are mapped onto Srf. if DecompSrfs is set, the surface is divided into several trimed surfaces along
the parabolic lines, creating regions that are solely convex, concave, and saddle-like.
Example:
pl = nil();
pll = nil();
for ( x = -3, 1, 3,
pl = nil():
for ( y = -3, 1, 3,
snoc( point( x, y, sin( x * Pi / 2 ) * cos( y * Pi / 2 ) ),
pl ) ):
snoc( pl, pll ) );
EggBase = sinterp( pll, 4, 4, 0, 0, PARAM_UNIFORM );
Resolution = 15;
Parab = SPARABOLC( EggBase, 0.005, 1e-6, true, false );
constructs a surface in the shape of an egg carton’s base and then derives its parabolic edges in
Euclidean space. See also MZERO for the meaning of SubdivTol and NumerTol.
11.2.282
SPHERE
PolygonType SPHERE( VectorType Center, NumericType Radius )
creates a SPHERE geometric object, defined by Center as the center of the SPHERE, and with
Radius as the radius of the SPHERE. See RESOLUTION for accuracy of SPHERE approximation as
a polygonal model. See IRITSTATE’s ”PrimRatSrfs” and ”PrimRatSrfs” state variables.
11.2.283
SPLITLST
ListType SPLITLST( AnyType LinkedListObj )
splits an objected of several linked list data elements such as polygons, curves, or suraces, into a
list object that contains an object for each of the individual objects.
Example:
ObjLst = SPLITLST( axes );
splits the axes object into a list object of several objects each holding a single polyline.
11.2.284
SPOWER
SurfaceType SPOWER( ListType CtlMesh )
G. Elber
IRIT Solid modeler
190
creates a polynomial/rational surface out of the provided control mesh. The created surface employs
the monomial power basis. CtlMesh is a list of rows, each of which is a list of control points. All
control points must be of type (E1-E9, P1-P9), or regular PointType defining the surface’s control
mesh. The surface’s point type will be of a space which is the union of the spaces of all points. The
created surface is the polynomial (or rational),
C(u, v) =
n
m Pij ui v i
(27)
i=0 j=0
where Pij are the control points CtlMesh. and m and n are the degrees of the surface, which are one
less than the number of points in the appropriate direction.
Example:
s = SPOWER( list( list( ctlpt( E3, 1, 0, 1 ),
ctlpt( E3, 0, 1, 1 ) ),
list( ctlpt( E3, 0, 0, 1 ),
ctlpt( E3, 0, 0, 1 ) ) ) );
s == coerce( coerce( s, bezier_type ), power_type );
constructs a bilinear power basis surface, coerces it to a Bezier form, coerces the Bezier form back
to a power basis, and then compares the result for equality.
See also CBEZIER, SBSPLINE and SPOWER.
11.2.285
SRADCRVTR
SurfaceType SRADCRVTR( SurfaceType Srf, VectorType ViewDir,
NumericType SubdivTol, NumericType SubdivTol,
NUmericType MergeTol )
computes the radial curvature of surface Srf, as viewed from view direction ViewDir. See MZERO
for the meaning of the SubdivTol and NumerTol tolerances. MergeTol specifies the tolerance to
use to merge points into polygons,
11.2.286
SRAISE
SurfaceType SRAISE( SurfaceType Srf, ConstantType Direction,
NumericType NewOrder )
raises Srf to the specified NewOrder in the specified Direction.
Example:
Srf = ruledSrf( cbezier( list( ctlpt( E3, -0.5, -0.5, 0.0 ),
ctlpt( E3, 0.5, -0.5, 0.0 ) ) ),
cbezier( list( ctlpt( E3, -0.5, 0.5, 0.0 ),
ctlpt( E3, 0.5, 0.5, 0.0 ) ) ) );
Srf = SRAISE( SRAISE( Srf, ROW, 3 ), COL, 3 );
constructs a bilinear flat-ruled surface and raises both its directions to be a bi-quadratic surface.
See also TRAISE, MRAISE, and CRAISE.
IRIT Solid modeler
11.2.287
G. Elber
191
SRAYCLIP
ListType SRAYCLIP( PointType Pt, VectorType Dir, SurfaceType Srf )
computes the intersection of ray (Pt, Dir) with Bezier surface Srf, using the Bezier clipping scheme.
The returned list is of the form ”list( NumInters, UV0, EucPt0, ..., UVn, EucPtn )”.
Example:
InterPts = SRayClip( point( 0, 0, 0 ), vector( 0, 0, 1 ), Srf );
computes the intersection of surface Srf with the positive Z axis.
11.2.288
SREFINE
SurfaceType SREFINE( SurfaceType Srf, ConstantType Direction,
NumericType Replace, ListType KnotList )
provides the ability to Replace a knot vector of Srf or refine it in the specified direction Direction
(ROW or COL). KnotList is a list of knots at which to refine Srf. All knots should be contained in
the parametric domain of Srf in Direction. If the knot vector is replaced, the length of KnotList
should be identical to the length of the original knot vector of Srf in Direction. If Srf is a Bezier
surface, it is automatically promoted to be a B-spline surface.
Example:
Srf = SREFINE( SREFINE( Srf,
ROW, FALSE, list( 0.333, 0.667 ) ),
COL, FALSE, list( 0.333, 0.667 ) );
refines Srf in both directions by adding two more knots at 0.333 and 0.667. See also CREFINE,
TREFINE, and MREFINE.
11.2.289
SREGION
SurfaceType SREGION( SurfaceType Srf, ConstantType Direction,
NumericType MinParam, NumericType MaxParam )
or
TrimSrfType SREGION( TrimSrfType Srf, ConstantType Direction,
NumericType MinParam, NumericType MaxParam )
extract a region of Srf between MinParam and MaxParam in the specified Direction. Both
MinParam and MaxParam should be contained in the parametric domain of Srf in Direction,
except for Bezier surfaces when MinParam and MaxParam can be arbitrary (extrapolating if not
between zero and one).
Example:
Srf = ruledSrf( cbezier( list( ctlpt( E3, -0.5, -0.5, 0.5 ),
ctlpt( E3, 0.0, 0.5, 0.0 ),
ctlpt( E3, 0.5, -0.5, 0.0 ) ) ),
cbezier( list( ctlpt( E3, -0.5, 0.5, 0.0 ),
ctlpt( E3, 0.0, 0.0, 0.0 ),
ctlpt( E3, 0.5, 0.5, 0.5 ) ) ) );
SubSrf = SREGION( Srf, ROW, 0.3, 0.6 );
G. Elber
IRIT Solid modeler
192
Figure 94: A region can be extracted from a freeform surface using SREGION.
extracts the region of Srf from the parameter value 0.3 to the parameter value 0.6 along the
ROW direction. The COLumn direction is extracted as a whole. See Figure 94. See also CREGION,
TREGION, and MREGION.
11.2.290
SREPARAM
SurfaceType SREPARAM( SurfaceType Srf, ConstantType Direction,
NumericType MinParam, NumericType MaxParam )
or
TrimSrfType SREPARAM( TrimSrfType Srf, ConstantType Direction,
NumericType MinParam, NumericType MaxParam )
reparametrize Srf over a new domain from MinParam to MaxParam, in the prescribed Direction. This operation does not affect the geometry of the (trimmed) surface and only affine transforms
its knot vectors. A Bezier (trimmed) surface will automatically be promoted into a B-spline surface by
this function.
If MinParam equals MaxParam and both equates with one of the parameterization keywords of
PARAM CENTRIP, PARAM CENTRIP, PARAM CHORD, or PARAM NIELFOL, then that parametrization is approximated for the surface, by changing the knot sequence. Note this last operation affects
the geometry of the surface.
Example:
srf = sbspline( 2, 4,
list( list( ctlpt(
ctlpt(
ctlpt(
list( ctlpt(
ctlpt(
ctlpt(
E3,
E2,
E3,
E2,
E3,
E2,
0.0,
0.0,
0.0,
1.0,
1.0,
1.0,
0.0, 1.0 ),
1.0 ),
2.0, 1.0 ) ),
0.0 ),
1.0, 2.0 ),
2.0 ) ),
G. Elber
IRIT Solid modeler
list( ctlpt( E3, 2.0,
ctlpt( E2, 2.0,
ctlpt( E3, 2.0,
list( ctlpt( E2, 3.0,
ctlpt( E3, 3.0,
ctlpt( E2, 3.0,
list( ctlpt( E3, 4.0,
ctlpt( E2, 4.0,
ctlpt( E3, 4.0,
list( list( KV_OPEN ),
list( KV_OPEN ) ) );
0.0, 2.0
1.0 ),
2.0, 2.0
0.0 ),
1.0, 2.0
2.0 ) ),
0.0, 1.0
1.0 ),
2.0, 1.0
193
),
) ),
),
),
) ) ),
srf = sreparam( sreparam( srf, ROW, 0, 1 ), COL, 0, 1 );
ensures that the (trimmed) B-spline surface is defined over the unit size parametric domain. See
also CREPARAM, TREPARAM, and MREPARAM.
11.2.291
SREVERSE
SurfaceType SREVERSE( SurfaceType Srf )
or
TrimSrfType SREVERSE( TrimSrfType Srf )
reverse Srf by flipping the U and V parametric directions. Note that the unary minus (i.e -Srf)
also reverses the surface by reversing the U parametric direction. If the surface is a trimmed surface,
the trimming curves are flipped accordingly to yield the same shape.
RevSrf = SREVERSE( Srf );
See also MREVERSE.
11.2.292
SRF2TANS
ListType SRF2TANS( SurfaceType Srf1, SurfaceType Srf2,
NumericType SubdivTol, NumericType NumericTol )
computes the developable sheet(s) bi-tangent to given two surfaces Srf1 and Srf2. See MZERO
for the meaning of the SubdivTol and NumerTol tolerances. Returns are lists, one per developable
sheet, of piecewise linear curves in E4, having two pairs of parameter values of the bi-tangent points
in the two input surfaces, in their parametric domain.
Example:
c1 = cbspline( 3,
list( ctlpt(
ctlpt(
ctlpt(
ctlpt(
E2, -1, -1 ),
E2, 1, -1 ),
E2, 1, 1 ),
E2, -1, 1 ) ),
IRIT Solid modeler
G. Elber
194
Figure 95: Extracts self bi-tangent developable out of the given surface using SRF2TANS.
c1 =
c2 =
s1 =
s2 =
list( kv_periodic ) );
coerce( c1, kv_open );
cbspline( 3,
list( ctlpt( E3, 0.8, -0.2, -0.3
ctlpt( E3, 0.5,
0.0, -0.2
ctlpt( E2, -0.45, -0.21 ),
ctlpt( E2, -0.45, 0.32 ),
ctlpt( E3, 0.5, -0.0,
0.2
ctlpt( E3, 0.8,
0.28, 0.3
list( kv_open ) );
sregion( sweepSrf( c1 * sc( 0.1 ), c2, off ),
sregion( sweepSrf( c1 * sc( 0.1 ), c2, off ),
),
),
),
) ),
col, 0, 0.5 );
col, 0.5, 1.0 );
BiTans = SRF2TANS( s1, s2, 0.1, 1e-6 );
computes the self bi-tangencies of a given bottle-like surface. See Figure 95. See also SRF3TANS.
11.2.293
SRF3TANS
ListType SRF3TANS( ListType Srfs, NumericType Orientation,
NumericType SubdivTol, NumericType NumericTol )
computes the plane(s) tri-tangent to given three surfaces Srfs. Srfs can be either a list of three
surfaces or a list of one surface in which self bi-tangencies are being sought. If Orientation is 0 all
tri-tangent planes are returned. Otherwise, if Orientation equal +1 or -1, tri-tangent sheets(s)with
G. Elber
IRIT Solid modeler
195
same or different tangency orienation are returned, respectively. See MZERO for the meaning of the
SubdivTol and NumerTol tolerances. Returns are lists, one per developable sheet, of sample points
in E6, having three pairs of parameter values of the tri-tangent points in the three surfaces, in their
parametric domain.
Example:
c2 = cbspline( 3,
list( ctlpt( E3, 0.8, -0.2, -0.3 ),
ctlpt( E3, 0.5,
0.0, -0.2 ),
ctlpt( E2, -0.45, -0.21 ),
ctlpt( E2, -0.45, 0.32 ),
ctlpt( E3, 0.5, -0.0,
0.2 ),
ctlpt( E3, 0.8,
0.28, 0.3 ) ),
list( kv_open ) );
s1 = sFromCrvs( list( c2 * sc( 0.001 ),
c2,
c2 * tz( 1.0 ),
c2 * sc( 0.001 ) * tz( 1.0 ) ),
3, kv_open ) * sc( 0.1 );
s2 = s1 * ry( 14 ) * tx( 0.6 ) * tz( 0.02 );
s3 = s1 * rx( 12 ) * ty( 0.6 ) * tx( 0.3 ) * tz( 0.01 );
TriTans = SRF3TANS( list( s1, s2, s3 )
Edges = nil();
for ( i = 1, 1, sizeof( TriTans ),
Pt = nth( TriTans, i ):
snoc( seval( s1, coord( Pt, 1 ),
seval( s2, coord( Pt, 3 ),
snoc( seval( s1, coord( Pt, 1 ),
seval( s3, coord( Pt, 5 ),
snoc( seval( s2, coord( Pt, 3 ),
seval( s3, coord( Pt, 5 ),
* sz( 1 ), 1, 0.5, -1e-6 );
coord(
coord(
coord(
coord(
coord(
coord(
Pt,
Pt,
Pt,
Pt,
Pt,
Pt,
2
4
2
6
4
6
)
)
)
)
)
)
) +
), Edges ):
) +
), Edges ):
) +
), Edges ) );
computes the two outer oriented tri-tangencies to three approximate ellipsoids. Extract and draw
the two tri-tangent triangles. See Figure 96. See also SRF2TANS.
11.2.294
SRFFFORM
ListType SRFFFORM( SurfaceType Srf, NumericType Form )
derives the four coefficients of the 1st, 2nd or 3rd surface fundamental forms. Form can be one of 1,
2, or 3 only, designating the requested form. Since this 2x2 matrix is symmetric, only three coefficients
are returned as a list of three scalar surfaces as (A11, A12 == A21, A22).
Example:
FFF = SRFFFORM( Srf, 1 );
SFF = SRFFFORM( Srf, 2 );
TFF = SRFFFORM( Srf, 3 );
computes the three fundamental forms of Srf.
IRIT Solid modeler
G. Elber
196
Figure 96: Extracts tri-tangent planes out of the given three approximate ellipsoids using SRF3TANS.
11.2.295
SRFLNDST
PointType SRFLNDST( SurfaceType Srf, PointType LnPt, VectorType LnDir,
NumericType IsMinDist, NumericType SubdivTol,
NumericType NumerTol )
compute the minimal (IsMinDist TRUE) or maximal (IsMinDist FALSE) distance betweeb
surface Srf and the line defined by LnPt, a point on the line, and LnDir, the direction of the line.
See MZERO for the meaning of the SubdivTol and NumerTol tolerances.
Example:
Dst = SRFLNDST( Srf, LnPoint, vector( 1, 1, 1 ), TRUE, 0.1, 1e-6 );
computes the minimal distance between Srf and line LnPoint/Vector( 1, 1, 1 ). See also SRFPTDST,
CRVLNDST.
PolyType SRFKERNEL( SurfaceType Srf, NumericType Fineness,
NumericType SkipRate )
11.2.296
SRFKERNEL
PolyType SRFKERNEL( SurfaceType Srf, NumericType Fineness,
NumericType SkipRate )
approximates the kernel of (closed and continuous) surface Srf by deriving the parabolic points
of Srf and intersecting half planes tangent to Srf and placed at a sampled set of parabolic locations.
The fineness of the parabolic curves’ approximation is governed by Fineness and the sampling rate is
controled by SkipRate.
Example:
Krnl = SRFKERNEL( Srf, 40, 15 );
estimates the kernel of Srf with Fineness of 40 and SkipRate of 15.
IRIT Solid modeler
11.2.297
G. Elber
197
SRFPTDST
PointType SRFPTDST( SurfaceType Srf, PointType Pt
NumericType IsMinDist, NumericType SubdivTol,
NumericType NumerTol )
compute the minimal (IsMinDist TRUE) or maximal (IsMinDist FALSE) distance between
surface Srf and point Pt. See MZERO for the meaning of the SubdivTol and NumerTol tolerances.
Example:
Dst = SRFPTDST( Srf, Pt1, FALSE, 0.1, 1e-6 );
computes the maximal distance between Srf and point Pt1. See also SRFLNDST, CRVPTDST.
11.2.298
SRINTER
PointType SRINTER( SurfaceType Srf, PointType RayOrigin,
VectorType RayDirection, NumericType Tolerance )
computes the first intersection, if any, of the prescribed ray originating from RayOrigin in direction
RayDirection with surface Srf. It returns the intersection point in the parametric space of Srf with
the U and V coordinates as the X and Y coefficients of the returned value. The intersection is computed
between the ray and a polygonal approximation of the surface Srf as set via the RESOLUTION
variable. If RayDirection is the zero vector, the closest position on Srf to RayOrigin is returned
instead. Tolerance sets the accuracy of the computation.
This function is tailored toward many invokations of ray-surface test against the same surface.
Hence, it caches local data for faster processing. To signal the function that the processing of the
current surface is complete, use a Tolerance of zero.
Example:
RayOrigin = point( 2, 0.1, 0.3 );
RayDir = vector( -4, 0, 0 );
RayLine = coerce( RayOrigin, E3 ) + coerce( RayOrigin + RayDir, E3 );
color( RayLine, magenta );
attrib( RayLine, "dwidth", 2 );
resolution = 80;
InterPt = SRINTER( glass, RayOrigin, RayDir, 0.001 );
InterPtE3 = seval( glass, coord( InterPt, 0 ), coord( InterPt, 1 ) );
color( InterPtE3, cyan );
attrib( InterPtE3, "dwidth", 3 );
view( list( InterPtE3, RayLine, glass, axes ), 1 );
InterPt = SRINTER( glass, RayOrigin, RayDir, 0.0 );
This is a complete example of constructing a ray and intersecting it against a surface of a glass at
two different resolutions, resulting in two different accuracies. See also RESOLUTION.
IRIT Solid modeler
11.2.299
G. Elber
198
SSINTER
ListType SSINTER( SurfaceType Srf1, SurfaceType Srf2,
NumericType Euclidean, NumericType Epsilon,
NumericType Alignment )
computes the intersection curve of two surfaces, Srf1 and Srf2, up to Epsilon accuracy. The
returned data is in Euclidean space if Euclidean is true; otherwise it is in the parametric space. A
list of two lists (for the two surfaces) of n curves each, where n is the number of intersection curves, is
returned. If Alignment is true, the surfaces are rotated to that one bbox of one surface whose axes
are aligned, increasing the probability of detecting disjoint cases.
Example:
s1 = sphereSrf( 0.35 ) * trans( vector( 0.0, 0.1, 0.2 ) );
s2 = coneSrf( 1, 0.5 );
Inter = nth( SSINTER( s1, s2, true, 0.1, false ), 1 );
computes the Euclidean intersection curves of a cone and a sphere, in general positions. The
Euclidean curves on the first surface are extracted while purging the Euclidean curves on the second
surface. See also RRINTER, SSINTR2 and GGINTER.
11.2.300
SSINTR2
ListType SSINTR2( SurfaceType Srf1, SurfaceType Srf2,
NumericType Step, NumericType SubdivTol,
NumericType NumerTol, NumericType Euclidean )
computes the intersection curve of two surfaces, Srf1 and Srf2, up to SubdivTol/NumerTol
accuracy. The returned data is in Euclidean space if Euclidean is true; otherwise it is in the parametric
space. Step controls the forward step size while tracing the intersection curves. A list of pairs of
(piecewise linear) intersection curves is returned, one for each connected component. If Euclidean is
true a Euclidean curve is also evaluated and returned.
Example:
s1 = sphereSrf( 0.35 ) * trans( vector( 0.0, 0.1, 0.2 ) );
s2 = coneSrf( 1, 0.5 );
Inter = nth( SSINTR2( s1, s2, 0.01, 0.01, 1e-8, false ), 1 );
computes the intersection curves of a cone and a sphere in parameter spaces. See also MUNIVZERO,
RRINTER, SSINTER and GGINTER.
11.2.301
STANGENT
VectorType STANGENT( SurfaceType Srf, ConstantType Direction,
NumericType UParam, NumericType VParam,
NumericType Normalize )
or
IRIT Solid modeler
G. Elber
199
VectorType STANGENT( TrimSrfType Srf, ConstantType Direction,
NumericType UParam, NumericType VParam,
NumericType Normalize )
compute the tangent vector to the (possibly trimmed) surface Srf at the parameter values UParam
and VParam in Direction. The returned vector has a unit length. If Normalize TRUE, the returned
vector is normalized as well.
Example:
Tang = STANGENT( Srf, ROW, 0.5, 0.6, TRUE );
computes the unit tangent to Srf in the ROW direction at the parameter values (0.5, 0.6).
11.2.302
STRIMSRF
SurfaceType STRIMSRF( TrimSrfType TSrf )
extracts the surface of a trimmed surface TSrf.
Example:
Srf = STRIMSRF( TrimSrf );
extracts the surface of TrimSrf.
11.2.303
STRIVAR
SurfaceType STRIVAR( TrivarType TV, ConstantType Direction,
NumericType Param ) )
extracts an iso surface from a trivariate function TV in the specified Direction (ROW or COL
or DEPTH) at the specified parameter value Param. Param must be contained in the parametric
domain of TV in Direction direction. The returned surface is in the trivariate TV.
Example:
TV1 = tbezier( list( list( list( ctlpt(
ctlpt(
list( ctlpt(
ctlpt(
list( list( ctlpt(
ctlpt(
list( ctlpt(
ctlpt(
Srf = STRIVAR( TV1, col, 0.4 );
E3,
E3,
E3,
E3,
E3,
E3,
E3,
E3,
0.1,
0.2,
0.3,
0.4,
2.4,
2.2,
2.3,
2.1,
0.0,
0.1,
2.2,
2.3,
0.8,
0.7,
2.6,
2.5,
0.8 ),
2.4 ) ),
0.2 ),
2.0 ) ) ),
0.1 ),
2.3 ) ),
0.5 ),
2.7) ) ) ) );
extracts an iso surface of TV1, in the col direction at parameter value 0.4. See Figure 97. See also
SMESH, CSURFACE, MFROMMV.
G. Elber
IRIT Solid modeler
200
Figure 97: Extracts an iso bilinear surface from a trilinear function, using STRIVAR.
11.2.304
SURFPREV
SurfaceType SURFPREV( CurveType Object )
This is the same as SURFREV but approximates the surface of revolution as a polynomial surface.
The object must be a polynomial curve. The behaviour of this function can be modified if ”Rational”
attribute is provided with a non zero value to construct a precise surface of revolution instead of a
polynomial approximation. Further if ”StartAngle” and ”EndAngle” are found with valid angular
prescription (in degrees), only that angular slice out of the surface of revolution is constructed. See
SURFREV.
11.2.305
SURFREV
PolygonType SURFREV( PolygonType Object )
or
SurfaceType SURFREV( CurveType Object )
create a surface of revolution by rotating the first polygon/curve of the given Object, around
the Z axis. Use the linear transformation functions to position a surface of revolution in a different
orientation.
Example:
VTailAntn = SURFREV( ctlpt(
ctlpt(
ctlpt(
ctlpt(
ctlpt(
ctlpt(
E3,
E3,
E3,
E3,
E3,
E3,
0.001,
0.01,
0.01,
0.03,
0.03,
0.001,
0.0,
0.0,
0.0,
0.0,
0.0,
0.0,
1.0
1.0
0.8
0.7
0.3
0.0
)
)
)
)
)
)
+
+
+
+
+
);
constructs a piecewise linear B-spline curve in the XZ plane and uses it to construct a surface
of revolution by rotating it around the Z axis. See also SURFPREV, SURFREVAXS, SURFREV2,
SURFREVAX2, and TVREV. See Figure 98.
IRIT Solid modeler
G. Elber
201
Figure 98: A surface of revolution, VTailAntn in surfrev documentation, can be constructed using
SURFREV or SURFPREV.
11.2.306
SURFREVAXS
PolygonType SURFREVAXS( PolygonType Object, VectorType Axis )
or
SurfaceType SURFREVAXS( CurveType Object, VectorType Axis )
create a surface of revolution by rotating the first polygon/curve of the given Object, around the
Axis axis. Use the linear transformation functions to position a surface of revolution in a different
location.
Example:
Glass = SURFREVAXS( GCross, vector( 1, 0, 1 ) );
constructs a surface of revolution by rotating GCross around the axis of (1, 0, 1). See also
SURFPREV, SURFREV, SURFREV2, SURFREVAX2.
11.2.307
SURFREV2
PolygonType SURFREV2( PolygonType Object,
NumericType StartAngle,
NumericType EndAngle )
or
SurfaceType SURFREV2( CurveType Object,
NumericType StartAngle,
NumericType EndAngle )
IRIT Solid modeler
G. Elber
202
create a surface of revolution by rotating the first polygon/curve of the given Object, around the Z
axis. The rotation does not form a complete circle and is from the StartAngle to the EndAngle only,
in degrees, starting from the X axis toward the Y axis, in the XY plane. Use the linear transformation
functions to position a surface of revolution in a different orientation.
Example:
Glass = SURFREV2( GCross, 45, 180 );
constructs a surface of revolution by rotating it around the Z axis from 45 to 180 degrees. See also
SURFPREV, SURFREVAXS, SURFREV, SURFREVAX2.
11.2.308
SURFREVAX2
PolygonType SURFREVAX2( PolygonType Object,
NumericType StartAngle,
NumericType EndAngle,
VectorType Axis )
or
SurfaceType SURFREVAX2( CurveType Object,
NumericType StartAngle,
NumericType EndAngle,
VectorType Axis )
create a surface of revolution by rotating the first polygon/curve of the given Object, around
the Axis axis. The rotation does not form a complete circle and is from the StartAngle to the
EndAngle only, in degrees, starting from the X axis toward the Y axis, in the XY plane. Use the
linear transformation functions to position a surface of revolution in a different location.
Example:
T4 = SURFREVAX2( PolyCross, 90, 360, vector( 1, 0, 1 ) );
constructs a polygonal surface of revolution by rotating PolygonType PolyCross around the axis
(1, 0, 1), from 45 to 180 degrees. See also SURFPREV, SURFREVAXS, SURFREV2, SURFREV.
11.2.309
SVISIBLE
ListType SVISIBLE( SurfaceType Srf,
NumericType Resolution,
NumericType ConeSize )
computes a decomposition of a freeform surface Srf into regions, each visible with a cone visibility
of ConeSize degrees from one direction. In other words, all points in one region have angular deviation
of their surface normal of less than ConeSize degrees from the set viewing direction. Resolution
controls the accuracy of the computation; the higher this value is, more exact the result. 20 is a good
starting value. Each returned region is a trimmed surface that has a ”ViewDir” attribute that contains
the viewing direction of this region.
Example:
IRIT Solid modeler
G. Elber
203
Figure 99: A decomposition of a freeform surface into cone visible regions of 30 degrees. The direction
of visibility is also presented. Computed using the SVISIBLE command.
c1 = cbezier( list( ctlpt( E3, 1.0, 0.0, 0.5
ctlpt( E3, 1.1, 0.0, 0.0
ctlpt( E3, 1.0, 0.0, -0.5
Simp = sregion( surfPRev( c1 ), col, 0.0, 1.0
Decomp = SVISIBLE( Simp, 20, 30 * pi / 180 );
),
),
) ) );
) * rz( 45 ) * rx( 90 );
SimDecomp = nil();
Mod = 5;
for ( i = 1, 1, sizeof( Decomp ),
o = nth( Decomp, i ):
v = getattr( o, "ViewDir" ):
l = ( ctlpt( E3, 0, 0, 0 ) + coerce( v, e3 ) ) * sc( 1.5 ):
j = floor( ( i - 1 ) / Mod ):
snoc( list( o, Simp, l, axes )
* view_mat * tx( ( i - 1 - j * Mod ) * 2 - 4 )
* ty( -j * 2 ),
SimDecomp ) );
view( SimDecomp, on );
decomposes a given surface Simp into regions of 30 degrees at most, goes over the decomposed
regions and orders them five in a row. See Figure 99.
11.2.310
SVOLUME
SurfaceType SVOLUME( SurfaceType Srf, NumericType Method, NumericType Eval )
or
NumericType SVOLUME( SurfaceType Srf, NumericType Method, NumericType Eval )
G. Elber
IRIT Solid modeler
204
computes the integral volume surface, VSrf, of the given surface Srf, up to a sign. If Srf is a closed
surface with domain (u0, v0) to (u1, v1), then the difference of VSrf(u1, v1) - VSrf(u0, v0) is the
requested volume. Otherwise, the computation is for the volume occupied between the surface Srf and
the XY plane if Method equals one, and the volume occupied between the surface Srf and the origin
if Method equals two. If Eval is TRUE, the actual numerical value of the volume is returned. The
volume integral surface is returned if Eval is FALSE.
Example:
Spr = surfPRev( cregion(
* ry( 90
SVOLUME( Spr, 1, 1 ) * 3
SVOLUME( Spr, 2, 1 ) * 3
pcircle( vector( 0, 0, 0 ), 1 ), 1, 3 )
) );
/ 4;
/ 4;
are yet another two ways of approximating the value of Pi. See also TVOLUME, SMOMENTS and
CAREA.
11.2.311
SWEEPSRF
SurfaceType SWEEPSRF( CurveType CrossSection | ListType CrossSectionList,
CurveType Axis,
CurveType FrameCrv | VectorType FrameVec
| ConstType OFF )
constructs a generalized cylinder surface. This function sweeps a specified cross section CrossSection along the provided Axis. If a list of curves CrossSectionList is specified instead, the cross
sections are blended along the Axis of the curve so that the first/last cross section in the list fits the
first/last location on the Axis. By default, when frame specification is OFF, the orientation of the
cross section is computed using the Axis curve tangent and normal. However, unlike the Frenet frame,
attempt is made to minimize the normal change, as can happen along inflection points in Axis. If a
VectorType FrameVec is provided as a frame orientation setting, it is used to fix the binormal direction
to this value. In other words, the orientation frame has a fixed binormal. If a CurveType FrameCrv
is specified as a frame orientation setting, this vector field curve is evaluated at each placement of the
cross section to yield the needed binormal.
The resulting sweep is only an approximation of the real sweep. The resulting sweep surface will not
be exact, in general. Refinement of the axis curve at the proper location, where accuracy is important,
should improve the accuracy of the output. The parametric domains of FrameCrv do not have to
match the parametric domain of Axis, and its parametric domain is automatically made compatible
by this function.
Example:
Cross = arc( vector(
vector(
vector(
arc( vector(
vector(
vector(
arc( vector(
vector(
vector(
0.2,
0.2,
0.0,
0.0,
0.1,
0.1,
0.8,
0.8,
1.0,
0.0,
0.2,
0.2,
0.4,
0.4,
0.5,
0.5,
0.3,
0.3,
0.0
0.0
0.0
0.0
0.0
0.0
0.0
0.0
0.0
),
),
) ) +
),
),
) ) +
),
),
) ) +
IRIT Solid modeler
G. Elber
205
Figure 100: Three examples of the use of SWEEPSRF (Srf1, Srf2, Srf3 from left to right in sweepsrf
documentation).
Axis =
Axis
Srf1
Srf2
Srf3
=
=
=
=
arc( vector( 1.0, 0.1, 0.0 ),
vector( 0.9, 0.1, 0.0 ),
vector( 0.9, 0.0, 0.0 ) ) +
ctlpt( E2, 0.2, 0.0 );
arc( vector( -1.0, 0.0, 0.0 ),
vector( 0.0, 0.0, 0.1 ),
vector( 1.0, 0.0, 0.0 ) );
crefine( Axis, FALSE, list( 0.25, 0.5, 0.75 ) );
SWEEPSRF( Cross, Axis, OFF );
SWEEPSRF( Cross, Axis, vector( 0.0, 1.0, 1.0 ) );
SWEEPSRF( Cross, Axis,
cbezier( list( ctlpt( E3, 1.0, 0.0, 0.0 ),
ctlpt( E3, 0.0, 1.0, 0.0 ),
ctlpt( E3, -1.0, 0.0, 0.0 ) ) ) );
constructs a rounded rectangle cross section and sweeps it along an arc, while orienting it several
ways. The axis curve Axis is manually refined to better approximate the requested shape.
See also SWPSCLSRF for sweep with scale. See Figure 100.
11.2.312
SWPSCLSRF
SurfaceType SWPSCLSRF( CurveType CrossSection | ListType CrossSectionList,
CurveType Axis, NumericType Scale | CurveType ScaleCrv,
CurveType FrameCrv | VectorType FrameVec
| ConstType OFF,
NumericType ScaleRefine )
constructs a generalized cylinder surface. This function sweeps a specified cross section CrossSection along the provided Axis. If a list of curves CrossSectionList is specified instead, the cross
sections are blended along the Axis of the curve so that the first/last cross section in the list fits
the first/last location on the Axis. The cross section may be scaled by a constant value Scale, or
scaled along the Axis parametric direction via a scaling curve ScaleCrv. By default, when frame
specification is OFF, the orientation of the cross section is computed using the Axis curve tangent
and normal. However, unlike the Frenet frame, attempt is made to minimize the normal change, as
can happen along inflection points in Axis. If a VectorType FrameVec is provided as a frame orientation setting, it is used to fix the binormal direction to this value. In other words, the orientation
frame has a fixed binormal. If a CurveType FrameCrv is specified as a frame orientation setting,
IRIT Solid modeler
G. Elber
206
this vector field curve is evaluated at each placement of the cross section to yield the needed binormal.
ScaleRefine is an integer value to define possible refinement of the Axis to reflect the information in
ScalingCrv. A value of zero will force no refinement while a value of n > 0 will insert n times the
number of control points in ScaleCrv into Axis, better emulating the scaling requested. The resulting
sweep is only an approximation of the real sweep. The scaling and axis placement will not be exact,
in general. Manual refinement (in addition to ScaleRefine) of the axis curve at the proper location,
where accuracy is important, should improve the accuracy of the output. The parametric domains of
ScaleCrv and FrameCrv do not have to match the parametric domain of Axis, and their domains
are made compatible by this function.
Example:
Cross = arc( vector( -0.11, -0.1, 0.0 ),
vector( -0.1, -0.1, 0.0 ),
vector( -0.1, -0.11, 0.0 ) ) +
arc( vector( 0.1, -0.11, 0.0 ),
vector( 0.1, -0.1, 0.0 ),
vector( 0.11, -0.1, 0.0 ) ) +
arc( vector( 0.11, 0.1, 0.0 ),
vector( 0.1,
0.1, 0.0 ),
vector( 0.1,
0.11, 0.0 ) ) +
arc( vector( -0.1,
0.11, 0.0 ),
vector( -0.1,
0.1, 0.0 ),
vector( -0.11, 0.1, 0.0 ) ) +
ctlpt( E2, -0.11, -0.1 );
scaleCrv = cbspline( 3,
list( ctlpt( E2, 0.05, 1.0
ctlpt( E2, 0.1, 0.0
ctlpt( E2, 0.2, 2.0
ctlpt( E2, 0.3, 0.0
ctlpt( E2, 0.4, 2.0
ctlpt( E2, 0.5, 0.0
ctlpt( E2, 0.6, 2.0
ctlpt( E2, 0.7, 0.0
ctlpt( E2, 0.8, 2.0
ctlpt( E2, 0.85, 1.0
list( KV_OPEN ) );
Axis = circle( vector( 0, 0, 0 ), 1 );
Frame = circle( vector( 0, 0, 0 ), 1 )
* rotx( 90 ) * trans( vector( 1.5, 0.0,
),
),
),
),
),
),
),
),
),
) ),
0.0 ) );
Srf1 = SWPSCLSRF( Cross, Axis, scaleCrv, off, 0 );
Srf2 = SWPSCLSRF( Cross, Axis, scaleCrv, off, 2 );
Srf3 = SWPSCLSRF( Cross, Axis, 1.0, Frame, 0 );
constructs a rounded rectangle cross section and sweeps it along a circle, while scaling and orienting
in several ways. The axis curve Axis is automatically refined in Srf2 to better approximate the
requested scaling.
See also SWEEPSRF for sweep with no scale. See Figure 101.
G. Elber
IRIT Solid modeler
207
Figure 101: Three examples of the use of SWPSCLSRF (Srf1, Srf2, Srf3 from left to right in SWPSCLSRF documentation).
11.2.313
SWUNGASUM
SurfaceType SWUNGASUM( CurveType Crv1, CurveType Crv2 )
Given two curves, compute a swung surface that equals:
S(r, t) = (x1 (r)x2 (t), x1 (r)y2 (t), y1 (r))
(28)
Example:
circ = circle( vector( 0.0, 0.0, 0.0 ), 1.5 ) * ry( 90 );
arc1 = arc( vector( 0.0, 1.0, 0.0 ),
vector( 0.0, 0.0, 0.0 ),
vector( 1.0, 0.0, 0.0 ) );
as1 = SWUNGASUM( circ * ry( -90 ), arc1 );
arc1 = cregion( circle( vector( 0.0, 0.0, 0.0
c2 = coerce( cbspline( 3,
list( ctlpt( E2, 1.0,
ctlpt( E2, 0.2,
ctlpt( E2, 0.0,
ctlpt( E2, -0.2,
ctlpt( E2, -1.0,
ctlpt( E2, -0.2,
ctlpt( E2, 0.0,
ctlpt( E2, 0.2,
list( KV_PERIODIC ) ),
KV_OPEN );
as2 = SWUNGASUM( arc1, c2 );
), 1.5 ), 0, 2 ) * rz( 90 );
0.0
0.2
1.0
0.2
0.0
-0.2
-1.0
-0.2
),
),
),
),
),
),
),
) ),
creates two algebraic sum surfaces, one in the shape of a cylinder as a sum of a line and a circle,
and one circular sweep. See Figure 102.
11.2.314
SYMBCPROD
CurveType SYMBCPROD( CurveType Crv1, CurveType Crv2 )
IRIT Solid modeler
G. Elber
208
Figure 102: An algebraic swung sum of a circle and a line creating a portion of a sphere (left) and a
general swung surface between a circle and a periodic curve (right), both using SWUNGASUM.
or
SurfaceType SYMBCPROD( SurfaceType Srf1, SurfaceType Srf2 )
or
MultivarType SYMBCPROD( MultivarType MV1, MultivarType MV2 )
compute the symbolic cross product of the two given curves/surfaces/multivariates as a curve,
surface or multivariate.
Example:
NrmlSrf = SYMBCPROD( sderive( Srf, ROW ), sderive( Srf, COL ) )
computes a normal surface as the cross product of the two surface partial derivatives (see SNRMLSRF). See also SYMBIPROD, SYMBDPROD, SYMBPROD, SYMBSUM, SYMBDIFF.
11.2.315
SYMBDIFF
CurveType SYMBDIFF( CurveType Crv1, CurveType Crv2 )
or
SurfaceType SYMBDIFF( SurfaceType Srf1, SurfaceType Srf2 )
or
MultivarType SYMBDIFF( MultivarType MV1, MultivarType MV2 )
IRIT Solid modeler
G. Elber
209
compute the symbolic difference of the two given curves/surfaces/multivariates as a curve, surface
or multivariate. The difference is computed coordinate-wise.
Example:
DiffCrv = SYMBDIFF( Crv1, Crv2 )
DistSqrCrv = symbdprod( DiffCrv, DiffCrv )
See also SYMBCPROD, SYMBDPROD, SYMBIPROD, SYMBPROD, SYMBSUM.
11.2.316
SYMBDPROD
CurveType SYMBDPROD( CurveType Crv1, CurveType Crv2 )
or
CurveType SYMBDPROD( CurveType Crv1, VectorType Vec2 )
or
SurfaceType SYMBDPROD( SurfaceType Srf1, SurfaceType Srf2 )
or
SurfaceType SYMBDPROD( SurfaceType Srf1, VectorType Vec2 )
or
MultivarType SYMBDPROD( MultivarType MV1, MultivarType MV2 )
or
MultivarType SYMBDPROD( MultivarType MV1, VectorType Vec2 )
compute the symbolic dot (inner) product of the two given curves/surfaces/multivariates as a scalar
curve/surface/multivariate. As an alternative, one parameter can also be a regular vector.
Example:
DiffCrv = symbdiff( Crv1, Crv2 )
DistSqrCrv = SYMBDPROD( DiffCrv, DiffCrv )
computes a scalar curve that at parameter t is equal to the distance square between Crv1 at t and
Crv2. See also SYMBCPROD, SYMBIPROD, SYMBPROD, SYMBSUM, SYMBDIFF.
11.2.317
SYMBIPROD
NumericType SYMBIPROD( CurveType Crv, NumericType Order1, NumericType Order2 )
or
NumericType SYMBIPROD( NumericType Dummy, NumericType Idx1, NumericType Idx2 )
G. Elber
IRIT Solid modeler
210
compute the inner product of two B-spline basis functions. The first form defines the function space
to be the same as the function space of Crv of order Order1 (first basis function) by Order2. The
second basis function in the inner product is defined as,
Bi,o1 (t)Bj,o2 (t)dt.
(29)
The second form prescribes the indices of the two basis functions, i and j. The first form returns
zero in case of an error. The second form returns the result of the inner product.
Example:
SYMBIPROD( Crv = pcircle( vector( 0, 0, 0 ), 1 ), 4, 4 );
for ( i = 0, 1, nth( ffmsize( Crv ), 1 ) - 1,
for ( j = 0, 1, nth( ffmsize( Crv ), 1 ) - 2,
printf( "%3.3f ", list( SYMBIPROD( 0, i, j ) ) ) ):
printf( "\\n", nil() ) );
prints all possible inner products of the B-spline function space of pcircle, of cubics vs. cubics.
See also SYMBCPROD, SYMBDPROD, SYMBPROD, SYMBSUM, SYMBDIFF.
11.2.318
SYMBPROD
CurveType SYMBPROD( CurveType Crv1, CurveType Crv2 )
or
SurfaceType SYMBPROD( SurfaceType Srf1, SurfaceType Srf2 )
or
MultivarType SYMBPROD( MultivarType MV1, MultivarType MV2 )
compute the symbolic product of the two given curves/surfaces/multivariates as a curve, surface or
multivariate. The product is computed coordinate-wise.
Example:
ProdSrf = SYMBPROD( Srf1, Srf2 )
See also SYMBCPROD, SYMBDPROD, SYMBIPROD, SYMBSUM, SYMBDIFF.
11.2.319
SYMBSUM
CurveType SYMBSUM( CurveType Crv1, CurveType Crv2 )
or
SurfaceType SYMBSUM( SurfaceType Srf1, SurfaceType Srf2 )
or
MultivarType SYMBSUM( MultivarType MV1, MultivarType MV2 )
G. Elber
IRIT Solid modeler
211
compute the symbolic sum of the two given curves/surfaces/multivariates as a curve, surface or
multivariate. The sum is computed coordinate-wise.
Example:
SumCrv = SYMBSUM( Crv1, Crv2 )
See also SYMBCPROD, SYMBDPROD, SYMBIPROD, SYMBPROD, SYMBDIFF.
11.2.320
TBEZIER
TrivarType TBEZIER( ListType CtlMesh )
creates a Bezier trivariate using the provided control mesh. CtlMesh is a list of planes, each of
which is a list of rows, each of which is a list of control points. All control points must be of type
(E1-E9, P1-P9), or regular PointType defining the trivariate’s control mesh. The surface point type
will be of a space which is the union of the spaces of all points.
The created trivariate is the piecewise polynomial (or rational) function,
T (u, v, w) =
m n l
i=0 j=0 k=0
Pijk Bi (u)Bj (v)Bk (w)
(30)
where Pijk are the control points CtlMesh, and l, m and n are the degrees of the trivariate, which are
one less than the number of points in the appropriate direction.
Example:
TV = TBEZIER( list( list( list( ctlpt(
ctlpt(
ctlpt(
list( ctlpt(
ctlpt(
ctlpt(
list( ctlpt(
ctlpt(
ctlpt(
list( list( ctlpt(
ctlpt(
ctlpt(
list( ctlpt(
ctlpt(
ctlpt(
list( ctlpt(
ctlpt(
ctlpt(
E3,
E3,
E3,
E3,
E3,
E3,
E3,
E3,
E3,
E3,
E3,
E3,
E3,
E3,
E3,
E3,
E3,
E3,
0.1,
0.2,
0.3,
0.4,
0.5,
0.6,
0.7,
0.8,
0.9,
1.1,
1.3,
1.5,
1.7,
1.9,
1.2,
1.4,
1.6,
1.8,
0.1,
0.5,
0.1,
1.3,
1.7,
1.3,
2.4,
2.6,
2.8,
0.1,
0.2,
0.3,
1.2,
1.4,
1.6,
2.3,
2.5,
2.7,
0.0
1.1
2.2
0.5
1.7
2.9
0.5
1.4
2.3
0.5
1.7
2.9
0.0
1.2
2.4
0.9
1.7
2.5
),
),
) ),
),
),
) ),
),
),
) ) ),
),
),
) ),
),
),
) ),
),
),
) ) ) ) );
creates a trivariate Bezier which is linear in the first direction, and quadratic in the second and
third. See Figure 103.
IRIT Solid modeler
G. Elber
212
Figure 103: A trivariate Bezier of degree 2 by 3 by 3 (left) and a trilinear B-spline (right). Both share
the same control mesh.
11.2.321
TBOOLONE
TrivarType TBOOLONE( SurfaceType Srf )
Given a surface closed in one direction (like a sweep of a closed curve), the surface is subdivided
into four segments in the parametric space that are then fed into TBOOLSUM. This is useful if a
volume bounded by Srf should be ”filled” abd parameterized.
Example:
Srf = TBOOLSUM( CylinderSrf );
creates a cylinder volume, parameterizing the entire volume of CylinderSrf. See Figure 104. See
also TBOOLSUM, BOOLONE.
11.2.322
TBOOLSUM
TrivarType TBOOLSUM( SurfaceType Srf1, SurfaceType Srf2,
SurfaceType Srf3, SurfaceType Srf4,
SurfaceType Srf5, SurfaceType Srf6 )
constructs a volume using the provided six surfaces as its six boundary surfaces. Surfaces do not
have to have the same order or type, and will be promoted to their least common denominator. The
end boundary curves of the six surfaces should match. Surfaces Srf1, Srf2, Srf3, and Srf4 should
share one parameteric direction and should form a topological cylinder where Srf5 and Srf6 serve as
two bottom and top caps for. Srf5 and Srf6 are optional and if not provided, surface Boolean sum is
use to construct them from surfaces Srf1, Srf2, Srf3, and Srf4.
Example:
tv = TBOOLSUM( sregion( s, col, 0, 1 ),
sregion( s, col, 1, 2 ),
IRIT Solid modeler
G. Elber
213
Figure 104: A volumetric Boolean sum of a cylinder (left) using TBOOLONE and a general volumetric
Boolean sum of six surfaces (right) using TBOOLSUM.
sregion( s, col, 2, 3 ),
sregion( s, col, 3, 4 ),
0, 0 );
constructs a volume for the interior of surface s as will TBOOLONE when operated on s. See also
TBOOLONE, BOOLSUM.
11.2.323
TBSPLINE
TrivarType TBSPLINE( NumericType UOrder,
NumericType VOrder,
NumericType WOrder,
ListType CtlMesh,
ListType KnotVectors )
creates a B-spline trivariate with the provided UOrder, VOrder and WOrder orders, the control
mesh CtlMesh, and the three knot vectors in KnotVectors. CtlMesh is a list of planes, each of
which is a list of rows, each of which is a list of control points. All control points must be of point type
(E1-E9, P1-P9), or regular PointType defining the trivariate’s control mesh. Trivariate point type will
be of a space which is the union of the spaces of all points. KnotVectors is a list of three knot vectors.
Each knot vector is a list of NumericType knots of length #CtlPtList plus the Order. If, however,
the length of the knot vector is equal to #CtlPtList + Order + Order - 1, the curve is assumed
to be periodic. The knot vector may also be a list of a single constant, KV OPEN, KV FLOAT or
G. Elber
IRIT Solid modeler
214
KV PERIODIC, in which a uniform knot vector with the appropriate length and with open, floating
or periodic end conditions will be constructed automatically.
The created surface is the piecewise polynomial (or rational) surface,
T (u, v, w) =
n l
m i=0 j=0 k=0
Pijk Bi,χ (u)Bj,ξ (v)Bk,φ (w)
(31)
where Pijk are the control points CtlMesh, and l, m and n are the degrees of the surface, which
are one less than UOrder, VOrder and WOrder and χ, ξ and φ are the three knot vectors of the
trivariate.
Example:
TV = TBSPLINE( 2, 2, 2,
list( list( list( ctlpt( E3,
ctlpt( E3,
ctlpt( E3,
list( ctlpt( E3,
ctlpt( E3,
ctlpt( E3,
list( ctlpt( E3,
ctlpt( E3,
ctlpt( E3,
list( list( ctlpt( E3,
ctlpt( E3,
ctlpt( E3,
list( ctlpt( E3,
ctlpt( E3,
ctlpt( E3,
list( ctlpt( E3,
ctlpt( E3,
ctlpt( E3,
list( list( KV_OPEN ),
list( KV_OPEN ),
list( KV_OPEN ) ) );
0.1,
0.2,
0.3,
0.4,
0.5,
0.6,
0.7,
0.8,
0.9,
1.1,
1.3,
1.5,
1.7,
1.9,
1.2,
1.4,
1.6,
1.8,
0.1,
0.5,
0.1,
1.3,
1.7,
1.3,
2.4,
2.6,
2.8,
0.1,
0.2,
0.3,
1.2,
1.4,
1.6,
2.3,
2.5,
2.7,
0.0
1.1
2.2
0.5
1.7
2.9
0.5
1.4
2.3
0.5
1.7
2.9
0.0
1.2
2.4
0.9
1.7
2.5
),
),
) ),
),
),
) ),
),
),
) ) ),
),
),
) ),
),
),
) ),
),
),
) ) ) ),
constructs a trilinear B-spline trivariate with open end conditions. See Figure 103. TCRVTR
11.2.324
TCRVTR
AnyType TCRVTR( TrivarType TV, PointType Pos, NumericType ComputeWhat )
computes differential curvature properties of an isosurface of the given trivariate TV at the given
(parameteric) location Pos. Following the value of ComputeWhat, the result equals,
G. Elber
IRIT Solid modeler
-1
0
1
2
3
215
Initialization (a must prelude)
Conclusion (a must postlude)
Returns a vector hold of the gradient
Returns a list of three vectors
equal to the Hessian of this location
Returns a list of two scalar values
(Principle curvatures) and two vectors
(Principal directions).
Every evaluation must start with an invocation of ComputeWhat equal to -1 and terminate with
ComputeWhat 0. In both cases, 1 is returned in case of success.
Example:
TCRVTR(
Grad1 =
Grad2 =
Grad3 =
Grad4 =
TCRVTR(
11.2.325
TV, point( 0, 0, 0
TCRVTR( TV, point(
TCRVTR( TV, point(
TCRVTR( TV, point(
TCRVTR( TV, point(
TV, point( 0, 0, 0
),
0,
0,
0,
1,
),
-1 ); # Prelude
0, 0 ), 1 );
0, 1 ), 1 );
1, 0 ), 1 );
0, 0 ), 1 );
0 ); #Postlude
TDEFORM
AnyType TDEFORM( GeometryType Tile, SurfaceType DeformingSrf,
NumericType UTiles, NumericType VTiles, NumericType WTiles,
NumericType FitTile, NumericType Precise )
or
AnyType TDEFORM( GeometryType Tile, TrivarType DeformingTV,
NumericType UTiles, NumericType VTiles, NumericType WTiles,
NumericType FitTile, NumericType Precise )
Tiles Tile UTiles x VTiles (x WTiles) times inside the surface domain of DeformingSrf or
the volumetric domain of DeformingTV by compose Tile with DeformingSrf or DeformingTV.
Result is precisely deformed, using composition, if DeformingSrf, where the Tile can be almost any
geometric type (a curve, a (trimmed) surface, etc.). If Tile is a surface, DeformingSrf must be a
Bezier surface. Result is approximated if DeformingTV and Precise is FALSE, by mapping only
(control) points through the trivariate. In this case, if Precise is TRUE and Tile is either a curve or
a (trimmed) surface, the computation will indeed be precise using composition. The Tile is supposed
to span [0, 1]2 or [0, 1]3 and if FitTile is TRUE, the Tile is first scaled into that domain.
Example:
Geom = TDEFORM( Tubes, TV, 2, 2, 4, FALSE, FALSE );
See Figure 105. See also SDDMMAP, TEXTWARP,
G. Elber
IRIT Solid modeler
216
Figure 105: Geometry can be composed into trivariate volumetric splines using the TDEFORM command. Here, three orthogonal tubes (middle) are composed into a trivariate (left) 2x2x4 times, yeilding
the approximated result on the right.
11.2.326
TDERIVE
TrivarType TDERIVE( TrivarType TV, NumericType Dir )
returns a vector field trivariate representing the differentiated trivariate in the given direction
(ROW, COL, or DEPTH). Evaluation of the returned trivariate at a given parameter value will return
a vector representing the partial derivative of TV in Dir at that parameter value.
TV = tbezier( list( list( list( ctlpt(
ctlpt(
list( ctlpt(
ctlpt(
list( list( ctlpt(
ctlpt(
list( ctlpt(
ctlpt(
E1,
E1,
E1,
E1,
E1,
E1,
E1,
E1,
0.1
0.2
0.3
0.4
2.4
2.2
2.3
2.1
),
) ),
),
) ) ),
),
) ),
),
) ) ) ) );
DuTV = TDERIVE( TV, ROW );
DvTV = TDERIVE( TV, COL );
DwTV = TDERIVE( TV, DEPTH );
computes the gradiate of a scalar trivariate field, by computing its partials with respect to u, v,
and w. See also CDERIVE, SDERIVE, and MDERIVE.
11.2.327
TDIVIDE
TrivarType TDIVIDE( TrivarType TV, ConstantType Direction,
NumericType Param )
subdivides a trivariate into two at the specified parameter value Param in the specified Direction
(ROW, COL, or DEPTH). TV can be either a B-spline trivariate in which Param must be contained
IRIT Solid modeler
G. Elber
217
Figure 106: A trivariate can be subdivided into two distinct regions using TDIVIDE.
in the parametric domain of the trivariate, or a Bezier trivariate in which Param must be in the range
of zero to one.
It returns a list of the two sub-trivariates. The individual trivariates may be extracted from the
list using the NTH command.
Example:
TvDiv = TDIVIDE( Tv2, depth, 0.3 );
Tv2a = nth( TvDiv, 1 ) * tx( -2.2 );
Tv2b = nth( TvDiv, 2 ) * tx( 2.0 );
subdivides Tv2 at the parameter value of 0.3 in the DEPTH direction, See Figure 106. See also
CDIVIDE, SDIVIDE, and MDIVIDE
11.2.328
TEDITPT
TrivarType TEDITPT( TrivarType TV, CtlPtType CPt, NumericType UIndex,
NumericType VIndex )
NumericType WIndex )
provides a simple mechanism to manually modify a single control point number UIndex, VIndex
and WIndex (base count is 0) in the control mesh of Srf by substituting CtlPt instead. CtlPt must
have the same point type as the control points of Srf. Original surface Srf is not modified.
Example:
CPt = ctlpt( E3, 1, 2, 3 );
NewTV = TEDITPT( TV, CPt, 0, 0, 0 );
constructs a NewTV with the first control point of TV being CPt.
11.2.329
TEVAL
CtlPtType TEVAL( TrivarType TV,
NumericType UParam,
NumericType VParam,
NumericType WParam )
IRIT Solid modeler
G. Elber
218
Figure 107: Outline fonts can be used to synthesize text geometry, using the TEXT2GEOM command.
evaluates the provided trivariate TV at the given UParam, VParam and WParam values.
UParam, VParam, WParam must be contained in the surface parametric domain if TV is a Bspline trivariate, or between zero and one if TV is a Bezier trivariate. The returned control point has
the same type as the control points of TV.
Example:
CPt = TEVAL( TV1, 0.25, 0.22, 0.7 );
evaluates TV at the parameter values of (0.25, 0.22, 0.7). See also CEVAL, SEVAL, MEVAL.
11.2.330
TEXT2GEOM
CurveType TEXT2GEOM( StringType Text, StringType Font,
NumericType FontStyle, NumericType SpaceWidth,
NumericType EdgeType3D, NumericType Setup3D,
NumericType Tolerance, NumericType OutputType )
synthesizes geometry that represents Text in one long line. The font that is used to synthesized the
text is an outline font Font, whereas under windows Font simple lists the font name (i.e. ”Times New
Roman”) and under other system Font specifies the full path of an outline ttf font file. FontStyle
selects regular font if 0, italics if 1, bold if 2, and italic bold if 3. Might be ignored if specific font
does not support the specific style. SpaceWidth controls the space between different characters.
EdgeType3D sets for 3D text syntehsis, the edge style than can be one of regular if 1, chamferred
if 2 or rounded if 3. Ignored for 2D text. If 3D text generated is chamferred, Setup3D sets a 2D
vector that controls the chamfering offset amount. If solid text is to be generated, Tolerance controls
the accuracy of the polygonal approximations. OutputType selects the type of output geometry to
create: 0 for Bezier curves, 1 for Bspline curves, 2 for 2D solid text, 3 for solid 3D polygonal text, 4
for 2D trimmed surfaces text, 5 for 3D trimmed surfaces text.
Example:
Text = TEXT2GEOM( "This is a test example of some 3D text",
"Times New Roman",
0, 0, 2, list( 0.01, 0.1 ), 0.001, 1 );
See Figure 107 for the result of this example. See also TEXTLAYSHP, TEXTGEOM, and TEXTWARP.
11.2.331
TEXTLAYSHP
CurveType TEXTLAYSHP( StringType Text, StringType Font,
NumericType FontStyle, NumericType Size,
NumericType Space, NumericType Tolerance
NumericType EdgeType3D, NumericType Setup3D,
G. Elber
IRIT Solid modeler
219
NumericType AlignmentType, NumericType OutputType,
PolyType BoundingRegion )
or
CurveType TEXTLAYSHP( StringType Text, StringType Font,
NumericType FontStyle, NumericType Size,
VectorType Space, NumericType Tolerance
NumericType EdgeType3D, NumericType Setup3D,
NumericType AlignmentType, NumericType OutputType,
CurveType BoundingRegion )
synthesizes geometry that represents Text inside BoundingRegion. The font that is used to
synthesized the text is an outline font Font, whereas under windows Font simple lists the font name
(i.e. ”Times New Roman”) and under other system Font specifies the full path of an outline ttf font
file. FontStyle selects regular font if 0, italics if 1, bold if 2, and italic bold if 3. Might be ignored
if specific font does not support the specific style. Size simply scales the text. Space is a vector
of size three: (WordWidth, SpaceWidth, LineHeight), controling the space between different words,
characters, and lines, respectively. If solid text is to be generated, Tolerance controls the accuracy
of the polygonal approximations. EdgeType3D sets for 3D text syntehsis, the edge style than can
be one of regular if 1, chamferred if 2 or rounded if 3. Ignored for 2D text. If 3D text generated is
chamferred, Setup3D sets a 2D vector that controls the chamfering offset amount. AlignmentType
selects the type of text alignments: 0 for left, 1 for center, 2 for right, and 3 for wide (full width)
alignments. OutputType selects the type of output geometry to create: 0 for Bezier curves, 1 for
Bspline curves, 2 for 2D solid text, 3 for solid 3D polygonal text, 4 for 2D trimmed surfaces text, 5 for
3D trimmed surfaces text
Example:
Heart = cbspline( 4,
list( ctlpt( E2, 0, 0.6 ),
ctlpt( E2, 0.2, 1 ),
ctlpt( E2, 1, 1 ),
ctlpt( E1, 1.2 ),
ctlpt( E2, 0.8, -0.6 ),
ctlpt( E2, 0, -1 ),
ctlpt( E2, 0, -1 ),
ctlpt( E2, -0.8, -0.6 ),
ctlpt( E1, -1.2 ),
ctlpt( E2, -1, 1 ),
ctlpt( E2, -0.2, 1 ),
ctlpt( E2, 0, 0.6 ) ),
list( kv_open ) ) * sc( 10 );
Str = "This is a test example of some 3D text. ";
text = TextLayShp( Str + Str + Str + Str + Str + Str + Str + Str,
"Courier New",
2, 0.67, list( 35, 10, 34 ), 0.001, 0,
G. Elber
IRIT Solid modeler
220
Figure 108: Outline fonts can be used to synthesize text geometry and confine it to arbitrary 2D shaped
boundary, using the TEXTLAYSHP command.
list( 0.01, 0.5 ), 3, 1, Heart );
See Figure 108 for the result of this example. See also TEXT2GEOM, TEXTGEOM, and TEXTWARP.
11.2.332
TEXTGEOM
AnyType TEXTGEOM( StringType Str, VectorType Spacing, NumericType Scaling )
creates a displayable geometry that represents the text in Str, with Spacing space between individual characters. Each character is scaled by Scaling where scaling of one generates a close to unit
size character.
Example:
a = TEXTGEOM("Text", vector( 0.12, 0, 0 ), 0.1 );
b = TEXTGEOM("IRIT", vector( 0, -0.12, 0 ), 0.1 );
creates a horizontal Text and a vertical top to bottom IRIT, both as geometrical objects. See
TEXTWARP, TEXTLAYSHP, TEXT2GEOM and IRITSTATE’s ”LoadFont” state variable.
IRIT Solid modeler
G. Elber
221
Figure 109: Font and text warping using the TEXTWARP function.
11.2.333
TEXTWARP
AnyType TEXTWARP( Surface Srf, StringType Text, NumericType HSpace,
NumericType VBase, NumericType VTop, NumericType Ligature )
warps the given text, Text, using surface Srf as warping function with HSpace setting the horizontal spacing between characters, VBase and VTop controls the vertical spacing of the characters
in Srf, and Ligature, if not zero, sets the amount to contract the distance between two adjacent
characters.
Example:
c = cbezier( list( ctlpt( e2, -1.5, -0.5 ),
ctlpt( e2, -2,
0 ),
ctlpt( e2, -1,
1 ),
ctlpt( e2, 0,
-2 ),
ctlpt( e2, 1,
0 ) ) );
s = sreparam( ruledSrf( c, offset( c, -0.4, 0.02, off ) ), col, 0, 6 );
Txt = TEXTWARP( s, "Text Warping Toolkit", 0.08, 0.25, 0.75, 0 );
See also TEXTGEOM, TEXTLAYSHP, TEXT2GEOM and IRITSTATE’s ”LoadFont” state variable.
11.2.334
TFROMSRFS
TrivarType TFROMSRFS( ListType SrfList, NumericType OtherOrder,
NumericType OtherEndCond )
constructs a trivariate by substituting the surfaces in SrfList as planes in a control mesh of a
trivariate. Surfaces in SrfList are made compatible by promoting Bezier surfaces to B-splines if
necessary, and raising degree and refining as required before substituting the control meshes of the
surfaces as planes in the mesh of the trivariate. The other, third, direction order is controlled by
OtherOrder and OtherEndCond. OtherOrder cannot be larger than the number of surfaces,
and OtherEndCond prescribes the desired end conditions as one of KV OPEN, KV FLOAT or
KV PERIODIC.
IRIT Solid modeler
G. Elber
222
Figure 110: A trivariate (thin lines) is constructed via five planar surfaces (thick lines) using the
TFROMSRFS constructor...
The trivariate interpolates the first and last surfaces only.
Example:
s1 = sbezier( list( list( ctlpt( E3, -0.5, -0.5,
ctlpt( E3, -0.5, 0.5,
list( ctlpt( E3, 0.5, -0.5,
ctlpt( E3, 0.5, 0.5,
Srfs = list( s1 * sc( 2.0 ),
s1 * sx( 1.4 ) * ry( 45 ) * tz( 1.0
s1 * ry( 90 ) * trans( vector( 1.0,
s1 * sx( 1.4 ) * ry( 135 ) * trans(
s1 * sc( 2.0 ) * ry( 180 ) * trans(
color( Srfs, red );
0
0
0
0
),
) ),
),
) ) ) ) * sc( 0.3 );
),
0.0, 1.1 ) ),
vector( 2.0, 0.0, 1.0 ) ),
vector( 2.0, 0.0, 0.0 ) ) );
ts = TFROMSRFS( Srfs, 3, kv_open );
color( ts, green );
view( list( Srfs, ts ), on );
constructs a trivariate from five planar surfaces and displays both the trivariate and the five planar
surfaces, in different colors. See Figure 110.
See also EXTRUDE, RULEDTV, SFROMCRVS.
11.2.335
TINTERP
TrivarType TINTERP( TrivarType TV,
NumericType ULength, NumericType VLength, NumericType WLength,
NumericType UOrder, NumericType VOrder, NumericType WOrder );
or
IRIT Solid modeler
G. Elber
223
TrivarType TINTERP( ListType PtList,
NumericType ULength, NumericType VLength, NumericType WLength,
NumericType UOrder, NumericType VOrder, NumericType WOrder );
Given a trivariate data structure or a list of points in R3, the above computes a fitted trivariate in
the prescribed function space (i.e. U/V/WLength and U/V/WOrder) that interpolates/least squares
approximates the given trivariate, TV, at the node parameter values. PtList is a list of points in Rn,
n ¿ 3. The first three coordinates of each points in PtList prescribes the (u, v, w) parametric value
and the rest, the interpolation values. To construct a mapping from R3 to R3, the points of PtList
should be in R6. To construct a scalar trivariate function, R4 points are expected. The (u, v, w) points
are assumed to be containted in a unit curve paramteric space - zero to one in all three dimensions. If
U/V/WOrder are zero and the first parameter is a trivariate, the respective order is taken for TV.
If U/V/WLength are zero and the first parameter is a trivariate, the respective length is taken for
TV.
Example:
tv = tbspline( 3, 3, 2,
list( list( list( ctlpt( E3,
ctlpt( E3,
ctlpt( E3,
list( ctlpt( E3,
ctlpt( E3,
ctlpt( E3,
list( ctlpt( E3,
ctlpt( E3,
ctlpt( E3,
list( list( ctlpt( E3,
ctlpt( E3,
ctlpt( E3,
list( ctlpt( E3,
ctlpt( E3,
ctlpt( E3,
list( ctlpt( E3,
ctlpt( E3,
ctlpt( E3,
list( list( ctlpt( E3,
ctlpt( E3,
ctlpt( E3,
list( ctlpt( E3,
ctlpt( E3,
ctlpt( E3,
list( ctlpt( E3,
ctlpt( E3,
ctlpt( E3,
list( list( KV_OPEN ),
list( KV_OPEN ),
list( KV_OPEN ) ) );
0.1,
0.2,
0.3,
0.4,
0.5,
0.6,
0.7,
0.8,
0.9,
1.1,
1.3,
1.5,
1.7,
1.9,
1.2,
1.4,
1.6,
1.8,
2.8,
2.6,
2.4,
2.2,
2.9,
2.7,
2.5,
2.3,
2.1,
0.1,
0.5,
0.1,
1.3,
1.7,
1.3,
2.4,
2.6,
2.8,
0.1,
0.2,
0.3,
1.2,
1.4,
1.6,
2.3,
2.5,
2.7,
0.1,
0.7,
0.2,
1.1,
1.2,
1.3,
2.9,
2.8,
2.7,
0.0
1.1
2.2
0.5
1.7
2.9
0.5
1.4
2.3
0.5
1.7
2.9
0.0
1.2
2.4
0.9
1.7
2.5
0.4
1.3
2.2
0.4
1.5
2.6
0.7
1.7
2.7
),
),
) ),
),
),
) ),
),
),
) ) ),
),
),
) ),
),
),
) ),
),
),
) ) ),
),
),
) ),
),
),
) ),
),
),
) ) ) ),
IRIT Solid modeler
G. Elber
224
tvi = TINTERP( tv, 0, 0, 0, 0, 0, 0 );
creates a quadratic by quaratic by linear trivariate tvi that interpolates the control points of tv at
the node parameter values.
11.2.336
TMORPH
TrivarType TMORPH( TrivarType TV1, SurfaceType TV2, NumericType Blend )
creates a new trivariate which is a convex blend of the two given trivariates. The two given trivariates
must be compatible (see FFCOMPAT) before this blend is invoked. This isv ery useful if a sequence
that ”morphs” one trivariate to another is to be created and in combination with MRCHCUBE.
Example:
Size = 0.05;
for ( i = 0, step, 1.0,
Tv = TMORPH( Tv1, Tv2, i ):
view( mrchcube( list( Tv, 1, off ),
point( Size, Size, Size ), 1, IsoVal ), on ) );
creates a sequence of 1/step trivariates, morphed from Tv1 to Tv2 and displays an extracted iso
surface at level IsoVal. See also MRCHCUBE, PMORPH, CMORPH and SMORPH.
11.2.337
TNSCRCR
ListType TNSCRCR( PointType Cntr1, NumericType Rad1,
PointType Cntr2, NumericType Rad2, NumericType OuterTans )
computes the two outer, if OuterTans TRUE, or the two inner if OuterTans FALSE, bi-tangents
between the prescribed two circles. Note the bi-tangents might no exist of one circle is containt in the
other.
Example:
T1 = TnsCrCr( point( -2, 0.3, 0 ), 0.7, point( 1, 0, 0 ), 1, 0 );
T2 = TnsCrCr( point( -2, 0.3, 0 ), 0.7, point( 1, 0, 0 ), 1, 1 );
See also CRC2CRVTAN.
11.2.338
TOFFSET
ListType TOFFSET( CurveType Crv, CurveType OffCrv, ListType Params )
or
ListType TOFFSET( SurfaceType Srf, SurfaceType OffSrf, ListType Params )
Trims local and global self intersections in curve OffCrv (surface OffSrf) that is an offset approximation to curve Crv (surface Srf) with parameters Params as follows: For curves, Params contains
the 4 paramers (Method, SubdivTol, TrimAmount, NumerTol) stating with the Method of trimming
which can be 1 of distance map trmming or 2 for self intersection via uv-elimination. 2nd paramter
IRIT Solid modeler
G. Elber
225
is the tolerance of the subdivision search, 3rd is the trimming amount which should be a tad below
the offset distance and the last parameter is a numerical tolerance to improve trimmed locations. For
surfaces Params hold 5 parameters (TrimAmount, Validate, Euclidean, SubdivTol, NumerTol). The
TrimAmount is again a tad below the offset distance, Validate is a boolean to activate the filering of
self intersecting regions, Eculidean sets the output form to be in Euclidean or parametric space and
finally SubdivTol and NumerTol is used by the multivariate solver.
Example:
c0 = cbspline( 3,
list( ctlpt( E2, -1,
3 ),
ctlpt( E2, -0.3, 0 ),
ctlpt( E2, 0.3, 0 ),
ctlpt( E2, 1,
3 ) ),
list( kv_open ) );
for ( i = -5, 1, 5,
if ( i != 0,
ofst = 0.15 * i:
co = offset( c0, ofst, 0.0001, off ):
none = TOFFSET( c0, co, list( 1, 15, abs( ofst * 0.999 ), 0.001 ) ):
color( none, i + 6 ):
viewobj( none ) ) );
approximates several offset curves at offset amounts of 0.15 * i to curve c0 and trim the self
intersections detected in them. See Figure 111.
11.2.339
TORUS
PolygonType TORUS( VectorType Center, VectorType Normal,
NumericType MRadius, NumericType mRadius )
creates a TORUS geometric object, defined by Center as the center of the TORUS, Normal as
the normal to the main plane of the TORUS, MRadius and mRadius as the major and minor radii of
the TORUS. See RESOLUTION for the accuracy of the TORUS approximation as a polygonal model.
See IRITSTATE’s ”PrimRatSrfs” and ”PrimRatSrfs” state variables.
Example:
T = TORUS( vector( 0.0, 0.0, 0.0), vector( 0.0, 0.0, 1.0), 0.5, 0.2 );
constructs a torus with its major plane as the XY plane, major radius of 0.5, and minor radius of
0.2. See Figure 112.
11.2.340
TPINCLUDE
CurveType TPINCLUDE( TrivarType TV, PointType Pt, NumericType Sampling )
examines if Pt is inside the triavariate TV. The function is optimizied for many point including in
a trivairate tests. If Sampling is positive, a data structure is prepared with the given Sampling rate,
for coming queries. If sampling is negative, the structure is freed and if sampling is zero, the actualy
inclusion test is conducted.
Example:
IRIT Solid modeler
G. Elber
Figure 111: Properly trimmed offsets could be created using the TOFFSET function.
226
IRIT Solid modeler
G. Elber
227
Figure 112: A torus primitive can be constructed using a TORUS constructor...
TPInclude( tv2, point( 0, 0, 0 ), 20 ); # Prep. aux data.
for ( i = 0, 1, 1000,
if ( TPInclude( tv2, nth( Pts, i ), 0 ), # actual query.
printf( "Point is inside\n", nil() ),
printf( "Point is outside\n", nil() ) );
TPInclude( tv2, point( 0, 0, 0 ), -1 ); # Free aux data.
11.2.341
TRAISE
TrivarType TRAISE( TrivarType TV, ConstantType Direction,
NumericType NewOrder )
raises TV to the specified NewOrder in the specified Direction.
Example:
tv1r = TRAISE( traise( traise( tv1, row, 4 ), col, 4 ), depth, 4 );
ensures that the trivariate is a tricubic. See also MRAISE, SRAISE, and CRAISE.
11.2.342
TREFINE
TrivarType TREFINE( TrivarType TV, ConstantType Direction,
NumericType Replace, ListType KnotList )
provides the ability to Replace a knot vector of TV or refine it in the specified direction Direction
(ROW, COL, or DEPTH). KnotList is a list of knots at which to refine TV. All knots should be
contained in the parametric domain of TV in Direction. If the knot vector is replaced, the length of
IRIT Solid modeler
G. Elber
228
KnotList should be identical to the length of the original knot vector of TV in the Direction. If TV
is a Bezier trivariate, it is automatically promoted to be a B-spline trivariate.
Example:
TV = TREFINE( TREFINE( TREFINE( TV,
ROW, FALSE, list( 0.333, 0.667 ) ),
COL, FALSE, list( 0.333, 0.667 ) ),
DEPTH, FALSE, list( 0.333, 0.667 ) );
refines TV in all directions by adding two more knots at 0.333 and 0.667. See also CREFINE,
SREFINE, and MREFINE.
11.2.343
TREGION
TrivarType TREGION( TrivarType TV, ConstantType Direction,
NumericType MinParam, NumericType MaxParam )
extracts a region of TV between MinParam and MaxParam in the specified Direction. Both
MinParam and MaxParam should be contained in the parametric domain of TV in the Direction.
Example:
Tv1 = tbezier( list( list( list( ctlpt(
ctlpt(
list( ctlpt(
ctlpt(
list( list( ctlpt(
ctlpt(
list( ctlpt(
ctlpt(
E3,
E3,
E3,
E3,
E3,
E3,
E3,
E3,
0.1,
0.2,
0.3,
0.4,
2.4,
2.2,
2.3,
2.1,
0.0,
0.1,
2.2,
2.3,
0.8,
0.7,
2.6,
2.5,
0.8 ),
2.4 ) ),
0.2 ),
2.0 ) ) ),
0.1 ),
2.3 ) ),
0.5 ),
2.7) ) ) ) );
Tv1r1 = TREGION( Tv1, row, 0.1, 0.2 );
Tv1r2 = TREGION( Tv1, row, 0.4, 0.6 );
Tv1r3 = TREGION( Tv1, row, 0.99, 1.0 );
extracts three regions of Tv1 along the ROW direction. See Figure 113. See also CREGION,
SREGION, and MREGION.
11.2.344
TREPARAM
TrivarType TREPARAM( TrivarType TV, ConstantType Direction,
NumericType MinParam, NumericType MaxParam )
reparametrizes TV over a new domain from MinParam to MaxParam, in the prescribed Direction. This operation does not affect the geometry of the trivariate and only affine transforms its knot
vectors. A Bezier trivariate will automatically be promoted into a B-spline surface by this function.
Example:
Tv = TREPARAM( TREPARAM( TREPARAM( tv, row, 0, 1 ),
col, 0, 1 ),
depth, 0, 1 );
ensures that the trivariate is defined over the unit size parametric cube. See also CREPARAM,
SREPARAM, and MREPARAM.
IRIT Solid modeler
G. Elber
229
Figure 113: A region can be extracted from a freeform trivariate using TREGION.
11.2.345
TRIANGL
PolygonType TRIANGL( PolygonType Model, NumericType Regular )
converts Model into a new model with exactly the same shape that holds only triangles. If the
Regular is not zero, the object is regularized as well. Example:
final2 = triangl( final, false );
See also MAXEDGELEN
11.2.346
TRIMSRF
TrimSrfType TRIMSRF( SurfaceType Srf,
CurveType TrimCrv,
NumericType HasUpperLevel )
or
TrimSrfType TRIMSRF( SurfaceType Srf,
ListType TrimCrvs,
NumericType HasUpperLevel )
create a trimmed surface from the provided surface Srf and the trimming curve TrimCrv or curves
TrimCrvs. If HasUpperLevel is FALSE, an additional trimming curve is automatically added that
contains the entire parametric domain of Srf. No validity test is performed on the trimming curves
which are assumed to be two-dimensional curves contained in the parametric domain of Srf.
Example:
spts = list( list( ctlpt( E3, 0.1, 0.0, 1.0 ),
ctlpt( E3, 0.3, 1.0, 0.0 ),
IRIT Solid modeler
G. Elber
230
ctlpt( E3, 0.0, 2.0, 1.0 ) ),
list( ctlpt( E3, 1.1, 0.0, 0.0 ),
ctlpt( E3, 1.3, 1.5, 2.0 ),
ctlpt( E3, 1.0, 2.1, 0.0 ) ),
list( ctlpt( E3, 2.1, 0.0, 2.0 ),
ctlpt( E3, 2.3, 1.0, 0.0 ),
ctlpt( E3, 2.0, 2.0, 2.0 ) ),
list( ctlpt( E3, 3.1, 0.0, 0.0 ),
ctlpt( E3, 3.3, 1.5, 2.0 ),
ctlpt( E3, 3.0, 2.1, 0.0 ) ),
list( ctlpt( E3, 4.1, 0.0, 1.0 ),
ctlpt( E3, 4.3, 1.0, 0.0 ),
ctlpt( E3, 4.0, 2.0, 1.0 ) ) );
sb = sbspline( 3, 3, spts, list( list( KV_OPEN ), list( KV_OPEN ) ) );
TCrv1 = cbspline( 2,
list( ctlpt( E2, 0.3, 0.3 ),
ctlpt( E2, 0.7, 0.3 ),
ctlpt( E2, 0.7, 0.7 ),
ctlpt( E2, 0.3, 0.7 ),
ctlpt( E2, 0.3, 0.3 ) ),
list( KV_OPEN ) );
TCrv2 = circle( vector( 0.5, 0.5, 0.0 ), 0.25 );
TCrv3 = cbspline( 3,
list( ctlpt( E2, 0.3, 0.3 ),
ctlpt( E2, 0.7, 0.3 ),
ctlpt( E2, 0.7, 0.7 ),
ctlpt( E2, 0.3, 0.7 ) ),
list( KV_PERIODIC ) );
TSrf1 = TRIMSRF( sb, TCrv1, false );
TSrf2 = TRIMSRF( sb, TCrv1, true );
TSrf3 = TRIMSRF( sb, list( TCrv1, TcRv2 * ty( 1 ), TCrv3 * ty( 2 ) ),
false );
constructs three trimmed surfaces. Tsrf1 contains the outer boundary and excludes what is inside
TCrv1, TSrf2 contains only the domain inside TCrv1. TCrv3 has three holes corresponding to the
three trimming curves. See also TRMSRFS. See Figure 114.
11.2.347
TRMSRFS
TrimSrfType TRMSRFS( SurfaceType Srf, CurveType Cntrs )
or
TrimSrfType TRMSRFS( SurfaceType Srf, PolyType Cntrs )
or
IRIT Solid modeler
G. Elber
231
Figure 114: Three trimmed surfaces created from the same B-spline surface. The original surface is
outline by thin lines and the trimmed surfaces are outlined by thick lines.
TrimSrfType TRMSRFS( SurfaceType Srf, ListType Cntrs )
create a set of trimmed surfaces from the provided surface Srf and the set of contours Cntrs in
Srf’s parametric domain.
The contours in Cntrs can be polylines, curves, or a list of such entities. The contours in Cntrs
must be either closed or start and end on the boundary of the parametric domain of Srf. Further, these
contours must be (self) intersection free. Finally, all trimming input is first converted to a piecewise
linear representation.
The returned result is a (list of) trimmed surfaces, each defining one sub-region that results from
Cntrs’s trimming.
Example:
tsrfs = TRMSRFS( srf,
list( poly( list( point( 0.0, 0.2, 0.0 ),
point( 1.0, 0.5, 0.0 ) ), true ),
cbezier( list( ctlpt( E2, 0.0, 2.5 ),
ctlpt( E2, 0.5, 2.5 ),
ctlpt( E2, 0.5, 3.0 ) ) ) ) );
interact( list( nth( tsrfs, 1 ) * tz( -0.2 ),
nth( tsrfs, 2 ) * tz( 0.0 ),
nth( tsrfs, 3 ) * tz( 0.2 ) ) );
constructs trimmed surfaces using two contours. One contour is a polyline with two points, and
the other is a quadratic Bezier curve. See also TRIMSRF. See Figure 115.
11.2.348
TSBEZIER
SurfaceType TSBEZIER( NumericType Order, ListType CtlMesh )
G. Elber
IRIT Solid modeler
232
Figure 115: Three trimmed surfaces created from the same B-spline surface using the TRMSRFS and
two prescribed contour in the surface’s parametric domain.
creates a triangular Bezier surface of order Order using the provided control mesh. CtlMesh is
a list of control points of size (Order + 1) * Order / 2. All control points must be of type (E1-E9,
P1-P9), or regular PointType defining the surface’s control polygon. The surface point type will be of
a space which is the union of the spaces of all points.
The created surface is the piecewise polynomial (or rational) surface,
S(u, v) =
m
n! i j k
u v w Pijk
i!j!k!
i,j,k=0
(32)
where Pijk are the control points CtlMesh, and i + j + k = m and m are the degree of the surface,
which are one less than Order.
Example:
b = TSBEZIER( 3,
list( ctlpt( E3, 0.0,
ctlpt( E3, 0.3,
ctlpt( E3, 0.7,
0.0,
0.0,
0.0,
0.4 ),
0.3 ),
0.8 ),
ctlpt( E3, 0.2,
ctlpt( E3, 0.4,
0.4,
0.5,
1.0 ),
1.0 ),
ctlpt( E3, 0.5,
1.0,
0.7 ) ) );
See Figure 116. See also TSGREGORY and TSBSPLINE.
11.2.349
TSBSPLINE
TriSrfType TSBSPLINE( NumericType Order, NumericType Length,
ListType CtlMesh, ListType KnotVector )
IRIT Solid modeler
G. Elber
233
Figure 116: A triangular Bezier surface of degree 2 or order 3.
creates a B-spline surface from the provided Order and Length, the control mesh CtlMesh, and
the knot vector KnotVector. CtlMesh is a list of control points of size (Length + 1) * Length / 2.
All control points must be of point type (E1-E9, P1-P9), or regular PointType defining the surface’s
control mesh. The surface point type will be of a space which is the union of the spaces of all points.
KnotVector is a list of NumericType knots of length Length plus the Order. The knot vector may
also be a list of a single constant KV OPEN or KV FLOAT, in which a uniform knot vector with the
appropriate length and with an open or floating end condition will be constructed automatically.
Not fully supported at this time. See also TSBEZIER and TSGREGORY.
11.2.350
TSDERIVE
TriSrfType TSDERIVE( TriSrfType Srf, NumericType Dir )
returns a vector field surface representing the differentiated triangular surface in the given direction
(ROW, COL, or DEPTH). Evaluation of the returned surface at a given parameter value will return a
vector tangent to Srf in Dir at that parameter value.
DuSrf = TSDERIVE( Srf, ROW );
DvSrf = TSDERIVE( Srf, COL );
Normal = coerce( tseval( DuSrf, 0.5, 0.25, 0.25 ), VECTOR_TYPE ) ^
coerce( tseval( DvSrf, 0.5, 0.25, 0.25 ), VECTOR_TYPE );
computes two partial derivatives of the surface Srf and computes its normal as their cross product,
at the parametric location (0.5, 0.25, 0.25).
See also TSNORMAL
G. Elber
IRIT Solid modeler
11.2.351
234
TSEVAL
CtlPtType TSEVAL( TriSrfType Srf,
NumericType UParam, NumericType VParam, NumericType WParam )
evaluates the provided triangular surface Srf at the given UParam, VParam, WParam parameters. UParam, VParam, and WParam must all be non negative and must sum to one for a Bezier
triangular surface or to the maximum domain, if a B-spline surface.
Example:
CPt = TSEVAL( Srf, u, v, 1.0 - u - v );
evaluates Srf at the parameter values prescribed by u and v.
11.2.352
TSGREGORY
SurfaceType TSGREGORY( NumericType Order, ListType CtlMesh )
cCreates a triangular Gregory surface of order Order using the provided control mesh. CtlMesh
is a list of control points of size (Order + 1) * Order / 2 + 3. All control points must be of type
(E1-E9, P1-P9), or regular PointType defining the surface’s control polygon. The surface point type
will be of a space which is the union of the spaces of all points.
The created surface is the polynomial (or rational) surface,
S(u, v) =
m
n! i j k
u v w Pijk
i!j!k!
i,j,k=0
(33)
where Pijk are the control points CtlMesh, and i + j + k = m and m are the degree of the surface,
which are one less than Order, where Pijk for i = j = 1, or i = k = 1, or j = k = 1 are the three
Gregory, double points.
Example:
Srf = tsgregory(
list( ctlpt(
ctlpt(
ctlpt(
ctlpt(
ctlpt(
ctlpt(
ctlpt(
ctlpt(
ctlpt(
ctlpt(
ctlpt(
ctlpt(
ctlpt(
ctlpt(
ctlpt(
ctlpt(
ctlpt(
ctlpt(
5,
E3,
E3,
E3,
E3,
E3,
E3,
E3,
E3,
E3,
E3,
E3,
E3,
E3,
E3,
E3,
E3,
E3,
E3,
2, -1, 0 ),
2.3, -1, 0.25 ),
2.6, -1, 0.25 ),
2.8, -1, 0.13 ),
3, -1, 0 ),
2.25, -0.7, 0.25 ),
2.5, -0.7, -0.25 ),
2.6, -0.7, -0.15 ),
2.75, -0.7, 0.25 ),
2.4, -0.4, 0.25 ),
2.5, -0.4, 0 ),
2.6, -0.4, -0.25 ),
2.45, -0.2, 0.12 ),
2.55, -0.2, -0.12 ),
2.5, 0, 0 ),
2.5, -0.7, -0.25 ),
2.6, -0.7, -0.15 ),
2.5, -0.4, 0 ) ) );
Not fully supported at this time. See also TSBEZIER and TSBSPLINE.
G. Elber
IRIT Solid modeler
11.2.353
235
TSNORMAL
VectorType TSNORMAL( TriSrfType Srf,
NumericType UParam, NumericType VParam, NumericType WParam)
computes the normal vector to a triangular surface Srf at the parameter values UParam, VParam,
WParam. The returned vector has a unit length.
UParam, VParam, and WParam must all be non negative and must sum to one for a Bezier
triangular surface or to the maximum domain, if a B-spline surface.
Example:
Normal = TSNORMAL( Srf, 0.5, 0.5, 0.0 );
computes the normal to Srf at the parameter values (0.5, 0.5, 0.0).
11.2.354
TVIMPJACOB
TrivarType TVIMPJACOB( TrivarType TV, NumericType StepSize,
NumericType NumIter )
numerically improves, if possible, the parametrization of TV so that the difference between the
minimal and maximal determinant of the Jacobian of TV is reduced.
It is equal to,
C(t) =
m
Pij Bi (t),
(34)
i=0
and similar for the other parametric direction.
Example:
TV = TVIMPJACOB( TV, 0.001, 10 );
See also TVJACOBIAN and TVZRJACOB.
11.2.355
TVJACOBIAN
TrivarType TVJACOBIAN( TrivarType TV )
computes a scalar trivariate field from the given scalar trivariate TV that equals the determinant
of teh jacobian of TV.
Example:
exList = ffextrema( TVJACOBIAN( tv ), false ):
computes extreme Jaciban values in the parametrization of tv. See also TVIMPJACOB and TVZRJACOB.
G. Elber
IRIT Solid modeler
11.2.356
236
TVLOAD
TrivarType TVLOAD( StringType FileName,
NumericType DataType,
VectorType VolSize,
VectorType Orders )
loads a volumetric data set from file FileName in as a trivariate of orders Orders. DataType
can be one of:
1
2
3
4
5
6
Regular ASCII (separated by white spaces).
Two bytes short integer.
Four bytes long integer.
One byte (char) integer.
Four bytes float.
Eight bytes double.
Beware of the little vs big Endian problem! We assume here you have read the volume in the same
machine type in which this file was written.
VolSize provides the dimensions of the volume, with width first and depth last. Uniform open end
condition knot vectors are constructed to all three axes.
Example:
Tv = TVLOAD( "3dhead", 1, vector( 32, 32, 13 ), vector( 3, 3, 3 ) );
loads the data set ”3dhead” of size (32, 32, 13) as a triquadratic function. THe sata set is assumed
to contain ASCII numeric values.
See also MRCHCUBE.
11.2.357
TVPREV
TrivarType TVPREV( SurfaceType Srf )
or
TrivarType TVPREV( ListType SrfList )
computes trivariate of revolution for the given polynomial surface(s) by rotating the input along
the Z axis. Result is a polynomial approximation for the real circular shape.
Example:
Tv = TVRev( Disk );
Create a a trivariate torus, TV by rotating the input Disk surface along the Z axis. The behaviour
of this function can be modified if ”Rational” attribute is provided with a non zero value to construct
a precise rational trivariate of revolution and a polynomial approximation otherwise. Further if ”StartAngle” and ”EndAngle” are found with valid angular prescription (in degrees), only that angular slice
out of the trivariate of revolution is constructed. See also SURFPREV, TVREV.
G. Elber
IRIT Solid modeler
11.2.358
237
TVOLUME
NumericType TVOLUME( TrivarType TV, NumericType VolType )
Computes the volume enclosed by trivariate, TV. If VolType is TRUE, volume is integrates over
the six faces’ surfaces with respect to the XY plane. If VolType is FALSE, the integration of the six
face surfaces is with respect to the origin,
Example:
V = TVolume( TV1 );
See also SVOLUME, SMOMENTS and CAREA.
11.2.359
TVREV
TrivarType TVREV( SurfaceType Srf )
or
TrivarType TVREV( ListType SrfList )
computes trivariate of revolution for the given surface(s) by rotating the input along the Z axis.
Example:
Tv = TVRev( Disk );
Createa a trivariate torus, TV by rotating the input Disk surface along the Z axis. See also
SURFREV, TVPREV.
See Figure 117.
11.2.360
TVZRJACOB
PolyType TVZRJACOB( TrivarType TV,
NumericType Euclidean,
NumericType SkipRate,
NumericType Fineness )
computes the zero set of the Jacobian of the given trivariate, TV. This zero set is the implicit
boundary of the trivariate and, for example, equals the envelop of the sweep of a bivariate surface
in space (see example below). The zero set is returned as a polygonal data set approximation with
Fineness tolerance. If Euclidean, the resulting polygons are in Euclidean space. Otherwise, the
polygons are returned in the trivariate’s parametric domain. Finally, SkipRate provides a mechanism
to skip to every SkipRate row, column and plane while a SkipRate skips nothing.
Let T (u, v, w) = (xT (u, v, w), yT (u, v, w), zT (u, v, w)). Then, the zero of the Jacobian equals,
0=
Example:
∂xT
∂u
∂yT
∂u
∂zT
∂u
∂xT
∂v
∂yT
∂v
∂zT
∂v
∂xT
∂w
∂yT
∂w
∂zT
∂w
= xT , yT × zT .
(35)
IRIT Solid modeler
G. Elber
238
Figure 117: A trivariate of revolution in the shape of a torus is creating by rotating a disk surface.
Figure 118: The envelope of the motion of the wine glass surface in space can be derived with the aid
of the TvZrJacob function.
Tv = tfromsrfs( list( Srf,
Srf * tx( 3 ) * ty( 3 ),
Srf * tx( 6 ) ), 3 );
Tv1ZeroJacobian = TVZRJACOB( Tv, 1, 1, 0 );
A trivariate TV is constructed as a sweep of surface Srf along a quadratic Bezier curve with (0, 0),
(3, 3), (6, 0) as control points, and then the zero set of the Jacobian is derived to yield the envelope of
this motion of Srf. See Figure 118. See also TVJACOBIAN and TVIMPJACOB.
IRIT Solid modeler
11.2.361
G. Elber
239
UVPOLY
PolyType UVPOLY( PolyType Obj, ListType Scales, ListType Translates );
Sets UV coordinates to polygonal object Obj. The UV coordinates are set using the XY Euclidean
coordinates if Scales is a list that holds two scaling factors (XScale, YScale), or the UV coordinates
are set via the two largest span in XYZ for each polygon, if Scales is a list of three scaling factors
(XScale, YScale, ZScale). Translates offers a way to shift the UV coordinates in the texture 2D
domain, Translates of (0, 0) does nothing. Needless to say, the ?Scale factors scales the Euclidean
coordinates before being sets as UV texture coordinates.
Example:
UVCube = UVPOLY( Cube, list( 1, 1, 1 ), list( 0, 0 ) );
sets UV coordinates to the six faces of the cube, each face with UV values between zero and one.
11.2.362
ZCOLLIDE
NumericType ZCOLLIDE( GeometricTreeType Obj1,
GeometricTreeType Obj2,
NumericType Fineness,
NumericType NumOfIters );
Given two objects, Obj1 and Obj2, where Obj1 is assumed to be above (in the Z direction)
Obj2, this function computes the amount that Obj1 could be moved down, the -Z direction, until it
collides with Obj2. The collision detection is considered using a polygonal approximation that has a
Fineness resolution (see RESOLUTION variable). The computation cost is linear in NumOfIters
with quadratic accuracy convergence. Values of ten for both Fineness and NumOfIters are reasonable
selections. While Obj1 is considered in its exact form, in Obj2, only the bbox of the shape is
considered.
Example:
view( chair, 1 );
for ( x = 0, 1, 5,
b = box( vector( x / 10, 0, 2 ), 0.1, 0.1, 0.1 ):
view( b * tz( ZCOLLIDE( chair, b, 10, 10 ) ), 0 ) );
places and draws six different cubes on top of the object called chair.
11.2.363
ZTEXTRUDE
SurfaceType ZTEXTRUDE( CurveType CrossSection, NumericType Rational,
NumericType ZPitch )
or
TrivarType ZTEXTRUDE( SurfaceType CrossSection, NumericType Rational,
NumericType ZPitch )
IRIT Solid modeler
G. Elber
240
Figure 119: A twisting extrusion can be constructed via the ZTEXTRUDE command. Here a start
shaped planar surface ( in blue) is extruded and twisted to created the shown trivariate (in red).
constructs an extrusion of CrossSection in the +Z direction while twisting (rotation the CrossSection along the Z axis). ZPitch sets the Z extrusion amount (for 360 rotation) as we advances in the
+Z direction. If Rational is TRUE the result is a precise rational freeform. If FALSE, a polynomial
approximation is constructed instead.
Example:
TV = ZTEXTRUDE( Srf, TRUE, 1 );
See Figure 119 for an example. See also EXTRUDE.
11.3
Object transformation functions
All the routines in this section construct a 4 by 4 homogeneous transformation matrix representing the
required transform. These matrices may be concatenated to achieve more complex transforms using
the matrix multiplication operator ∗. For example, the expression
m = trans( vector( -1, 0, 0 ) ) * rotx( 45 ) * trans( vector( 1, 0, 0 ) );
constructs a transform to rotate an object around the X = 1 line, 45 degrees. A matrix representing
the inverse transformation can be computed as:
InvM = m ^ -1
See also overloading of the - operator.
G. Elber
IRIT Solid modeler
11.3.1
241
HOMOMAT
MatrixType HOMOMAT( ListType MatData )
creates an arbitrary homogeneous transformation matrix by manually providing its 16 coefficients.
Example:
step = 10;
for ( a = 1, 1, 720 / step,
view_mat = save_mat *
HOMOMAT( list( list( 1,
list( 0,
list( 0,
list( 0,
view( list( view_mat, axes ), on )
);
0,
1,
0,
0,
0,
0,
1,
0,
0 ),
0 ),
-a * step / 500 ),
1 ) ) ):
looping and viewing through a sequence of perspective transforms, created using the HOMOMAT
constructor. See also RFLCTMAT and PROJMAP.
11.3.2
MAP3PT2EQL
MatrixType MAP3PT2EQL( PointType Pt1, PointType Pt2, PointType Pt3 )
computes the transofrmation matrix in the XY plane that takes the given three planar points into
an equilateral triangle around the origin.
Example:
Mat = MAP3PT2EQL( Pt1, Pt2, Pt3 );
See also ELLIPSE3PT, CONICSEC.
11.3.3
MATPOSDIR
MatrixType MATPOSDIR( PointType Pos, VectorType Dir, VectorType UpDir )
creates a viewing transformation matrix of a viewer at Pos, looking at direction Dir and upper
view of UpDir.
Example:
step = 10;
for ( a = 1, 1, 720 / step,
view_mat = MATPOSDIR( point( 0.5, 0.1, 0.5 ),
vector( 0.0, 1.0, 0.0 ),
vector( cos( a * step * Pi / 360 ), 0,
sin( a * step * Pi / 360 ) ) ):
view( list( view_mat, axes ), on )
);
looping and viewing through a sequence of transforms, created using the MATPOSDIR constructor.
IRIT Solid modeler
11.3.4
G. Elber
242
PROJMAT
MatrixType PROJMAT( PlaneType ProjPlane,
VectorType EyePos,
NumericType EyeInf )
constructs a projection matrix to project the universe onto the given projection plane ProjPlane,
with the eye position at EyePos (divided by EyeInf). Note that if EyeInf is zero, the eye is at infinity.
Example:
PMat = PROJMAT( plane( 0, 0, 1, -0.1 ), vector( 1, 1, 1 ), 0 );
contstructs a projection matrix PMat onto the Z = -0.1 plane with a view direction of ( 1, 1, 1 ).
See also RFLCTMAP, HOMOMAT.
11.3.5
RFLCTMAT
MatrixType RFLCTMAT( PlaneType RflctPlane )
constructs a reflection matrix to reflect the universe along the given reflection plane RflctPlane.
Example:
PMat = RFLCTMAT( plane( 0, 0, 1, 0 ) );
constructs a reflection matrix PMat around the Z = 0 plane. See also PROJMAP, HOMOMAT.
11.3.6
ROTV2V
MatrixType ROTV2V( VectorType Vec1, VectorType Vec2 )
creates a rotation that takes vector Vec1 to vector Vec2. See also ROTVEC, ROTZ2V, ROTZ2V2.
11.3.7
ROTVEC
MatrixType ROTVEC( VectorType Vec, NumericType Angle )
creates a rotation around the vector Vec matrix with Angle degrees. See also ROTV2V, ROTZ2V,
ROTZ2V2.
11.3.8
ROTX
MatrixType ROTX( NumericType Angle )
creates a rotation around the X transformation matrix with Angle degrees.
11.3.9
ROTY
MatrixType ROTY( NumericType Angle )
creates a rotation around the Y transformation matrix with Angle degrees.
IRIT Solid modeler
11.3.10
G. Elber
243
ROTZ
MatrixType ROTZ( NumericType Angle )
creates a rotation around the Z transformation matrix with Angle degrees.
11.3.11
ROTZ2V
MatrixType ROTZ2V( VectorType Dir )
creates a rotation matrix that takes Z axis into Dir. Length of Dir is ignored. See also ROTV2V,
ROTVEC, ROTZ2V2.
11.3.12
ROTZ2V2
MatrixType ROTZ2V2( VectorType Dir, VectorType Dir2 )
creates a rotation matrix that takes the Z axis into Dir, while the X axis is aligned with Dir2.
The lengths of Dir and Dir2 are ignored. See also ROTV2V, ROTVEC, ROTZ2V, ROTVEC.
11.3.13
SCALE
MatrixType SCALE( VectorType ScaleFactors )
creates a scaling by the ScaleFactors transformation matrix.
11.3.14
TRANS
MatrixType TRANS( VectorType TransFactors )
creates a translation by the TransFactors transformation matrix.
11.4
11.4.1
General purpose functions
ADWIDTH
ADWIDTH( GeometricType Object, NumericType DWidth )
sets the width of the object. This display width is used in pixels in display devices for width of line
drawing, if supported by the display device. See also ATTRIB, COLOR, and AWIDTH.
This function is equivalent to using,
ATTRIB( Object, ”dwidth”, DWidth );
11.4.2
ATTRIB
ATTRIB( AnyType Object, StringType Name, AnyType Value )
provides a mechanism to add an attribute of any type to an Object, with name Name and value
Value. This ATTRIB function is tuned and optimized toward numeric values or strings as Value
although any other object type can be saved as attribute.
These attributes may be used to pass information to other programs about this object, and are
saved with the objects in data files. Attributes placed on a list object or even a whole hierarchy of
IRIT Solid modeler
G. Elber
244
objects will be propagated into all items in the list or hierarchy. There are a few exception to this
propagation. The ”animation” attribute is not propagated and is kept in the internal nodes, forming
a hierachy of animation commands for all the objects contained in the list/hierarchy. The ”invisible”
attribute is saved at all levels of the hierarchy, used to denote a complete sub tree that is invisible (yet
can serve as a source at which instances can point).
For example,
ATTRIB(Glass, "rgb", "255,0,0");
ATTRIB(Glass, "refract", "1.4");
.
.
.
RmAttr(Glass, "rgb");
# Removes "rgb" attribute.
sets the RGB color and refraction index of the Glass object and later removes the RGB attribute.
Attribute names are case insensitive. Spaces are allowed in the Value string, as well as the double
quote itself, although the latter must be escaped:
ATTRIB(Glass, "text", "Say \"this is me\"");
See also RMATTR for removal of attributes, CPATTR for copying them, GETATTR to get an
attribute, ATTRPROP for setting attributes on all subtrees of parts, as well as AWIDTH, ADWIDTH,
COLOR and PATTRIB.
11.4.3
ATTRPROP
ATTRPROP( AnyType Object, StringType Name, AnyType Value )
Same as ATTRIB but propagates the attributes to all sub-parts of the object. See also ATTRVPROP.
Example:
Glass1 = list( Base, Handle, Wine );
Glass2 = list( Base, Handle, Wine );
attrib( Glass1, "ptexture", "marble1.gif" );
ATTRPROP( Glass2, "ptexture", "marble1.gif" );
In Glass1, only Glass1 will be set with ”texture” while in Glass2, the ”texture” attribute will
propagate to the sub-parts of Glass2, namely to the Base, Handle, Wine.
11.4.4
ATTRVPROP
ATTRVPROP( AnyType Object, StringType Name )
Propagates an Object attribute named Name to the vertices in Object. Typically for RGB color
values.
Example:
Obj2 = ATTRVPROP( Obj, "RGB" );
IRIT Solid modeler
11.4.5
G. Elber
245
AWIDTH
AWIDTH( GeometricType Object, NumericType Width )
sets the width of the object to one of those specified below. This width is used in real object side
dimensions in tools such as scan converters and rendering tools for rendering lines and curves, as well
as postscript. See also ATTRIB, COLOR, and ADWIDTH.
This function is equivalent to using,
ATTRIB( Object, ”width”, Width );
11.4.6
CHDIR
CHDIR( StringType NewDir )
sets the current working directory to be NewDir.
11.4.7
CLNTCLOSE
CLNTCLOSE( NumericType Handler, NumericType Kill )
closes a communication channel to a client. Handler contains the index of the communication
channel opened via CLNTEXEC. If Kill, the client is sent an exit request for it to die. Otherwise,
the communication is closed and the client runs standing alone. See also VIEWOBJ, VIEWSET,
CLNTREAD, CLNTWRITE, and CLNTEXEC.
Example:
h2 = clntexec( "nuldrvs -s-" );
.
.
.
CLNTCLOSE( h2,TRUE );
closes the connection to the nuldrvs client, opened via CLNTEXEC.
11.4.8
CLNTWRITE
CLNTWRITE( NumericType Handler, AnyType Object )
writes one object Object to a communication channel of a client. Handler contains the index
of the communication channel opened via CLNTEXEC. If the Handler equals -1, the regular display
device (forked via, for example, VIEWOBJ command) is used. If Handler equals CLIENTS ALL,
a broadcast of Object to all clients is performed. See also VIEWOBJ, VIEWSET, CLNTREAD,
CLNTCLOSE, and CLNTEXEC.
Example:
h2 = clntexec( "nuldrvs -s-" );
.
.
IRIT Solid modeler
G. Elber
246
CLNTWRITE( h2, Model );
.
.
clntclose( h2,TRUE );
writes the object named Model to client through communication channel h2.
11.4.9
COLOR
COLOR( GeometricType Object, NumericType Color )
sets the color of the object to one of those specified below. Note that an object has a default
color (see irit.cfg file) according to its origin - loaded with the LOAD command, PRIMITIVE, or a
BOOLEAN operation result. The system internally supports colors (although you may have a B&W
system) and the colors recognized are: BLACK, BLUE, GREEN, CYAN, RED, MAGENTA,
YELLOW, and WHITE.
See the ATTRIB command for more fine control of colors using the RGB attribute. See also
AWIDTH and AWIDTH.
This function is equivalent to using,
ATTRIB( Object, ”color”, Color );
11.4.10
COMMENT
COMMENT
Two types of comments are allowed:
1. One-line comment: starts anywhere in a line at the ’#’ character, up to the end of the line.
2. Block comment: starts at the COMMENT keyword followed by a unique character (anything
but white space), up to the second occurrence of that character. This is a fast way to comment out
large blocks.
Example:
COMMENT $
This is a comment
$
11.4.11
CPATTR
CPATTR( AnyType DestObj, AnyType SrcObj )
copies all attribute from object SrcObj into object DestObj. All attributes, if any, in DestObj
are purged. Needless to say, both objects must exist at the time of attribute copy.
See also ATTRIB, ATTRPROP, GETATTR, RMATTR.
11.4.12
ERROR
ERROR( StringType Message);
breaks the execution and returns to the IRIT main loop, after printing a Message to the screen.
This may be useful in user defined functions to break execution in cases of fatal errors.
IRIT Solid modeler
11.4.13
G. Elber
247
EXEC
EXEC( StringType Command );
executes a string Command in the IRIT interepreter, indirectly.
Example:
Univariate2Bezier = function( Polynom, Deg ): x: f:
return = nil():
f = 1:
for ( x = 0, 0.05 / Deg, 1,
EXEC( "f = " + Polynom ):
snoc( ctlpt( E1, f ), return ) ):
return = coerce( cinterp( return, Deg + 1, Deg + 1, PARAM_UNIFORM, FALSE ),
bezier_type );
defines a function that converts univariate expressions into explicit, E1, Bezier curves. For example
”Univariate2Bezier( ”3 * x ^ 2 - 2 * x + 5”, 3 );” would return a cubic Bezier curve representing ”3 *
x ^ 2 - 2 * x + 5”.
11.4.14
EXIT
EXIT()
exits from the solid modeler. NO warning is given!
11.4.15
FOR
FOR( NumericType Start, NumericType Increment, NumericType End, AnyType Body )
executes the Body (see below), while the FOR loop conditions hold. Start, Increment, End
are evaluated first, and the loop is executed while <= End if Increment > 0, or while >= End
if Increment < 0. If Start is of the form ”Variable = Expression”, then that variable is updated
on each iteration, and can be used within the body. The body may consist of any number of regular
commands, separated by COLONs, including nesting FOR loops to an arbitrary level.
Example:
step = 10;
rotstepx = rotx(step);
FOR ( a = 1, 1, 360 / step,
view_mat = rotstepx * view_mat:
view( list( view_mat, axes ), ON )
);
displays axes with a view direction that is rotated 10 degrees at a time around the X axis.
IRIT Solid modeler
11.4.16
G. Elber
248
HELP
HELP( StringType Subject )
provides help on the specified Subject.
Example:
HELP("");
will list all IRIT help subjects.
11.4.17
FNFREE
FNFREE( StringType UserFuncName )
frees a user defined function named UserFuncName. See also FREE.
11.4.18
FREE
FREE( GeometricType Object )
Because of the usually huge size of geometric objects, this procedure may be used to free them.
Reassigning a value (even of different type) to a variable automatically releases the old variable’s
allocated space as well. See also FNFREE.
11.4.19
FUNCTION
FuncName = FUNCTION(Prm1, Prm2, ... , PrmN):LclVal1:LclVar2: ... :LclVarM:
FuncBody;
defines a function named FuncName with N parameters and M local variables (N, M >= 0). Here
is a (simple) example of a function with no local variables and a single parameter that computes the
square of a number:
sqr = FUNCTION(x):
return = x * x;
Functions can be defined with optional parameters and optional local variables. A function’s body
may contain an arbitrary set of expressions including for/while loops, (user) function calls, or even
recursive function calls, all separated by colons. The returned value of the function is the value of
an automatically defined local variable named return. The return variable is a regular local variable
within the scope of the function and can be used as any other variable.
If a variable’s name is found in neither the local variable list nor the parameter list, it is searched
for in the global variable list (outside the scope of the function). Binding of names of variables is static
as in the C programming language.
Because binding of variables is performed in execution time, there is a somewhat less restrictive
type checking of parameters of functions that are invoked within a user’s defined function.
A function can invoke itself, i.e., it can be recursive. However, since a function should be defined
when it is called, a dummy function should be defined before the recursive one is defined:
IRIT Solid modeler
G. Elber
249
factorial = function(x):return = x; # Dummy function.
factorial = function(x):
if (x <= 1, return = 1, return = x * factorial(x - 1));
Overloading is valid inside a function as it is outside. For example, for
add = FUNCTION(x, y):
return = x + y;
the following function calls are all valid:
add(1, 2);
add(vector(1,2,3), point(1,2,3));
add(box(vector(-3, -2, -1), 6, 4, 2), box(vector(-4, -3, -2), 2, 2, 4));
Finally, here is a more interesting example that computes an approximation of the length of a curve,
using the sqr function defined above:
distptpt = FUNCTION(pt1, pt2):
return = sqrt(sqr(coord(pt1, 1) - coord(pt2, 1)) +
sqr(coord(pt1, 2) - coord(pt2, 2)) +
sqr(coord(pt1, 3) - coord(pt2, 3)));
crvlength = FUNCTION(crv, n):pd:t:t1:t2:dt:pt1:pt2:i:
return = 0.0:
pd = pdomain(crv):
t1 = nth(pd, 1):
t2 = nth(pd, 2):
dt = (t2 - t1) / n:
pt1 = coerce(ceval(crv, t1), e3):
for (i = 1, 1, n,
pt2 = coerce(ceval(crv, t1 + dt * i), e3):
return = return + distptpt(pt1, pt2):
pt1 = pt2);
Try, for example:
crvlength(circle(vector(0.0, 0.0, 0.0), 1.0), 30) / 2;
crvlength(circle(vector(0.0, 0.0, 0.0), 1.0), 100) / 2;
crvlength(circle(vector(0.0, 0.0, 0.0), 1.0), 300) / 2;
See PROCEDURE and IRITSTATE’s ”DebugFunc” for more.
11.4.20
IF
IF( NumericType Cond, AnyType TrueBody { , AnyType FalseBody } )
executes TrueBody (a group of regular commands, separated by COLONs - see FOR loop) if the
Cond holds, i.e., it is a numeric value other than zero, or optionally, if it exists, executes FalseBody.
If the Cond does not hold, i.e., it evaluates to a numeric value equal to zero.
Examples:
G. Elber
IRIT Solid modeler
250
IF ( machine == IBMOS2, resolution = 5, resolution = 10 );
IF ( a > b, max = a, max = b );
sets the resolution to 10, unless running on an IBMOS2 system, in which case the RESOLUTION
variable will be set to 5 in the first statement, and set to max to the maximum of a and b in the second
statement.
11.4.21
INCLUDE
INCLUDE( StringType FileName )
executes the script file FileName. Nesting of an include file is allowed up to 10 levels deep. If an
error occurs, all open files in all nested files are closed and data are waited for at the top level (standard
input). Files are searched for inclusion in the current directory. If not found, and the inclusion is from
a different file at some directory, that directory is searched as well. Finally, if all the above fails, the
directories specified via the IRIT INCLUDE environment variable are also searched.
A script file can contain any command the solid modeler supports.
Example:
INCLUDE( "/tmp/general.irt" );
includes the file ”/tmp/general.irt”. Any inclusion inside general.irt will search for the included file
in the current directory, then in /tmp, and then in the directories specified via IRIT INCLUDE.
11.4.22
INSERTPOLY
INSERTPOLY( PolyType Poly, PolyType Polys )
inserts, in place, Poly as a new polygon of object Polys. After the completion of this function
Poly is unmodified but Polys has a new polygon in it.
Example:
X = poly( list( point(
point(
point(
point(
Y = X * tz( 1 );
INSERTPOLY( Y, X );
0,
0,
1,
1,
0,
1,
1,
0,
0
0
0
0
),
),
),
) ), false );
At the end of the execution of this sequence of command, X contains two polygons, one at Z = 0
and one at Z = 1. See also MERGEPOLY, SPLITLST.
11.4.23
INTERACT
INTERACT( GeometryTreeType Object )
This is a user-defined function (see iritinit.irt) that does the following, in order outlined:
1. Clear the display device.
2. Display the given Object.
G. Elber
IRIT Solid modeler
251
3. Pause for a keystroke.
This user-defined function in version 4.0 of IRIT is an emulation of the INTERACT function that
used to exist in previous versions.
Example:
INTERACT( list( view_mat, Axes, Obj ) );
displays and interacts with the object Obj and the predefined object Axes. VIEW MAT will be
used to set the starting transformation.
See VIEW and VIEWOBJ for more.
11.4.24
IQUERY
IQUERY( NumericType QueryType )
A low level query tool for checking the current state of the IRIT internal tables. According to the
values of QueryType the following is printed to stdout:
QueryType
1
2
11.4.25
Printed content
All the known functions/user defined functions/constants
and parameters/returned values (if any).
All the knwon keywords
LIST
ListType LIST( AnyType Elem1, AnyType Elem2, ... )
constructs an object as a list of several other objects. Only a reference is made to the Elements, so
modifying Elem1 after being included in the list will affect Elem1 in that list next time list is used!
Each inclusion of an object in a list increases its internal used reference. The object is freed iff
theused reference is zero. As a result, attempt to delete a variable (using FREE) which is referenced
in a list removes the variable, but the object itself is freed only when the list is freed.
11.4.26
LOAD
AnyType LOAD( StringType FileName )
loads an object from the given FileName. The object may be any object defined in the system,
including lists, in which the structure is recovered and reconstructed as well (internal objects are
inserted into the global system object list if they have names). If no file type is provided, ”.itd” is
assumed.
This command can also be used to load binary files. ASCII regular data files usually take longer to
load than binary files due to the required parsing. Binary data files can be loaded directly, like ASCII
files in IRIT, but can only be inspected through IRIT tools such as dat2irit. A binary data file must
have a ”.ibd” (IRIT Binary Data) type in its name.
Compressed files can be loaded if the given file name has a postfix of ”.Z” or .”.gz”. The gnu utility
”gzip” will be invoked via a pipe for that purpose.
See also IRITSTATE’s option ”FlatLoad” for optioanl flattening of the object hierarechy during a
load.
IRIT Solid modeler
11.4.27
G. Elber
252
LOGFILE
LOGFILE( NumericType Set )
or
LOGFILE( StringType FileName )
If Set is non zero (see TRUE/FALSE and ON/OFF), then everything printed in the input window
will go to the log file specified in the irit.cfg configuration file. This file will be created the first time
logfile is turned ON. If a string FileName is provided, it will be used as a log file name from now on.
It also closes the current log file. A ”LOGFILE( on );” must be issued after a log file name change.
Example:
LOGFILE( "Data1" );
LOGFILE( on );
printf( "Resolution = %lf\\n", list( resolution ) );
LOGFILE( off );
to print the current resolution level into file Data1.
11.4.28
MSLEEP
MSLEEP( NumericType MilliSeconds )
causes the solid modeller to sleep for the prescribed time in milliseconds.
Example:
for ( i = 1, 1, sizeof( crvs ),
c = nth( crvs, i ):
color( c, yellow ):
msleep(20):
viewobj( c )
);
displays an animation sequence and sleeps for 20 milliseconds between iterations.
11.4.29
NREF
AnyType NREF( ListType ListObject, NumericType Index )
returns a reference to the Index (base count 1) element of the list ListObject. The reference
points to the original object and hence can be used to modify (add attributes for example) to objects
in lists. Assignment of this reference to a new object would result in a copy of the object. In contrast,
a FREE of a reference to an object would have an undefined result.
Example:
Lst = list( a, b, c );
attrib( NREF( Lst, 2 ), "NewAttr", on );
adds a new attribute to the second element of Lst. See also NTH.
G. Elber
IRIT Solid modeler
11.4.30
253
NRMLCONE
ListType NRMLCONE( SurfaceType Srf )
computes a cone that bounds all normals of surface Srf. A list of two objects, the axis vector of
the cone and the opening radius, in radians, is returned.
Example:
NCone = NRMLCONE( Srf );
Cn = Cone( vector( 0, 0, 0 ), normalize( nth( NCone, 1 ) ),
nth( NCone, 2 ), 0 ) * tz( 1.0 ) * sc( 0.75 );
computes a normals’ cone for surface Srf and builds a real cone following these limits.
11.4.31
NTH
AnyType NTH( ListType ListObject, NumericType Index )
returns the Index (base count 1) element of the list ListObject.
Example:
Lst = list( a, list( b, c ), d );
Lst2 = NTH( Lst, 2 );
and now Lst2 is equal to ’list( b, c )’. See also NREF.
11.4.32
PAUSE
PAUSE( NumericType Flush )
waits for a keystroke. This is nice to have if a temporary stop in a middle of an included file (see
INCLUDE) is required. If Flush is TRUE, then the input is first flushed to guarantee that the actual
stop will occur.
11.4.33
PRINTF
PRINTF( StringType CtrlStr, ListType Data )
This results in a formatted printing routine, following the concepts of the C programming language’s
printf routine. CtrlStr is a string object for which the following special ’%’ commands are supported:
%d, %i, %u
%o, %x, %X
%e, %f, %g,
%E, %F
%s
%pe, %pf, %pg
%ve, %vf, %vg
%Pe, %Pf, %Pg,
%De, %Df, %Dg,
Prints the numeric object as an integer or unsigned integer.
Prints the numeric object as an octal or hexadecimal integer.
Prints the numeric object in several formats of
floating point numbers.
Prints the string object as a string.
Prints the three coordinates of the point object.
Prints the three coordinates of the vector object.
Prints the four coordinates of the plane object.
Prints the given object in IRIT’s data file format.
IRIT Solid modeler
G. Elber
254
All the ’%’ commands can include any modifier that is valid in the C programming language
PRINTF routine, including l (long), prefix character(s), size, etc. The point, vector, plane, and object
commands can also be modified in a similar way, to set the format of the numeric data printed.
Also supported are the newline and tab using the backslash escape character:
PRINTF("\\tThis is the char \"\\%\"\\n", nil());
Backslashes should be escaped themselves as can be seen in the above example. Here are few more
examples:
PRINTF("this is a string \"%s\" and this is an integer %8d.\\n",
list("STRING", 1987));
PRINTF("this is a vector [%8.5lvf]\\n", list(vector(1,2,3)));
IritState("DumpLevel", 9);
PRINTF("this is a object %8.6lDf...\\n", list(axes));
PRINTF("this is a object %10.8lDg...\\n", list(axes));
This implementation of PRINTF is somewhat different than the C programming language’s version,
because the backslash always escapes the next character during the processing stage of IRIT’s parser.
That is, the string
’\\tThis is the char \"\\%\"\\n’
is actually parsed by the IRIT’s parser into
’\tThis is the char "\%"\n’
because this is the way the IRIT parser processes strings. The latter string is the one that PRINTF
actually sees.
See also PRINTFILE for ways to redirect PRINTF to a file..
11.4.34
PRINTFILE
PRINTFILE( StringType FileName );
Sets the file PRINTF prints to to FileName. Any newer call to PRINTFILE will close the current
file used so far. If FileName is an empty string, PRINTF will print to stdout.
11.4.35
PROCEDURE
ProcName = PROCEDURE(Prm1, Prm2, ... , PrmN):LclVal1:LclVar2: ... :LclVarM:
ProcBody;
A procedure is a function that does not return a value, and therefore the returned variable (see
FUNCTION) should not be used. A procedure is identical to a function in every other way. See
FUNCTION for more.
11.4.36
RESET
RESET()
clears all variables and initializes the environment to the starting state. User defined functions,
however, are kept intact.
IRIT Solid modeler
11.4.37
G. Elber
255
RMATTR
RMATTR( AnyType Object, StringType Name )
removes attribute named Name from object Object. This function will have no affect on the
Object if the Object has no attribute named Name.
See also ATTRIB, ATTRPROP, GETATTR, CPATTR.
11.4.38
SAVE
SAVE( StringType FileName, AnyType Object )
saves the provided Object in the specified file name FileName. No extension type is needed
(ignored if specified), and ”.itd” is supplied by default. The Object can be any object type, including
list, in which the structure is saved recursively. See also LOAD. If a display device is actively running
at the time SAVE is invoked, its transformation matrix will be saved with the same name but with
extension type of ”.imd” instead of ”.itd”.
This command can also be used to save binary files. ASCII regular data files usually take longer to
load than binary files due to the required parsing. Binary data files can be loaded directly like ASCII
files in IRIT, but must be inspected through IRIT tools such as dat2irit. A binary data file must have
a ”.ibd” (IRIT Binary Data) type in its name.
This command can also save geometry in one of the following formats:
IGES file, If the file type is either ”igs” or ”iges”.
STL file, if the file type is ”stl”. If Object has the int attribute ”RegularTriang” as TRUE, the
geometry will be regularized first (no T junctions). If Object has the int attribute ”MultiObjSplit”,
the data will be saved in one large STL object in one file if 0, one STL object per IRIT object in one
file if 1, or in one file per IRIT obejct if 2.
OBJ file. if the file type is ”obj”.
VRML file. if the file type is ”wrl”.
CNC Gcode tool path file, if the file type is either ”nc” or ”gcode”. For this format, only
univariate data sets (polylines and curves) will be processed and saved as 3-axis G code commands.
The following attributes are supported in this mode, if found in Object:
G. Elber
IRIT Solid modeler
”NCCommentChar”
”NCDownPlungeFast”
”NCFeedRate”
”NCBridgeRelFeedRate”
”NCMaxXYBridgeGap”
”NCMaxZBridgeGap”
”NCRetractZLevel”
”NCReverseZ”
”NCUpRetractFast”
256
Holds a string of one character to define the
comment character. If exists a header comment is
dumped as well.
distance, above the plunging destination to move down
in fast g0 motion. Infinity to disable and plunge in
g1 all the way, or zero to plunge fast in g0 all way.
Feedrate to use. Default is 10 mm per second.
Relative feedrate to use (relative to NCFeedRate)
when bridging from one polyline/curve to the next.
The maximal gap in the XY plane to bridge between
adjacent polylines/curves without retraction.
By default, this value is one mm (0.04inch).
The maximal gap in Z to bridge between adjacent
polylines/curves without retraction. By default,
this value is two mm (0.08inch).
Set as the Z retraction level above the (bounding
box) of the model. By default, the retration level
will be one inch 925mm) above the bounding box of
the model.
If set to a non negative value, the Z coordinates
are assumed reversed. That is the +Z is down.
By default +Z is assumed up.
If TRUE, up retracting will be in fast g0 motion.
Otherwise, if FALSE, g1 will be used.
On some platforms, files will be saved compressed if the given file name has a postfix of ”.Z” or
”.gz”. The gnu ”gzip” utility will be invoked via a pipe for that purpose.
Example:
SAVE( "oObj1.ibd.Z", Obj1 );
Saves Obj1 in the file Obj1.ibd.Z as compressed binary file.
11.4.39
SETNAME
SETNAME( ListType ListObj, NumericType Index, StringType NewName )
sets the name of a sub object of index Index in list object ListObj to a new name NewName.
The index of the first element is zero.
Example:
A = list( 1, 2, 3 );
SETNAME( A, 0, "First" );
sets the name of the first element in object A to ”First”.
While it is not a good idea to modify names of objects in the top level global space, one can use
this function to do exactly that. To rename the object ”Axes” to ”XYZ”, do:
SETNAME( list( Axes ), 0, "XYZ" );
See also GETNAME.
IRIT Solid modeler
11.4.40
G. Elber
257
SNOC
SNOC( AnyType Object, ListType ListObject )
This is similar to the lisp cons operator but puts the new Object in the end of the list ListObject
instead of at the beginning.
Example:
Lst = list( axes );
SNOC( Srf, Lst );
and now Lst is equal to the list ’list( axes, Srf )’.
11.4.41
SYSTEM
SYSTEM( StringType Command )
executes a system command Command. For example,
SYSTEM( "ls -l" );
11.4.42
TIME
TIME( NumericType Reset )
returns the time in seconds from the last time TIME was called with Reset TRUE. This time is
CPU time if such support is available from the system (times function), and otherwise, is real time
(time function). The time is automatically reset at the beginning of the execution of this program.
Example:
Dummy = TIME( TRUE );
.
.
.
TIME( FALSE );
prints the time in seconds between the above two time function calls.
11.4.43
VARLIST
VARLIST()
lists all the currently defined objects in the system.
11.4.44
VECTOR
VectorType VECTOR( NumericType X, NumericType Y, NumericType Z )
sreates a vector type object, using the three provided NumericType scalars. See also PLANE,
POINT.
G. Elber
IRIT Solid modeler
11.4.45
258
VIEW
VIEW( GeometricTreeType Object, NumericType ClearWindow )
displays the (geometric) object(s) as given in Object.
If ClearWindow is non zero (see TRUE/FALSE and ON/OFF), the window is first cleared (before
drawing the objects).
Example:
VIEW( Axes, FALSE );
displays the predefined object Axes in the viewing window on top of what is drawn already.
In version 4.0, this function is emulated (see iritinit.irt) using the VIEWOBJ function. In order
to use the current viewing matrix, VIEW MAT should be provided as an additional parameter. For
example,
VIEW( list( view_mat, Obj ), TRUE );
However, since VIEW is a user defined function, the following will not use VIEW MAT as one
would expect:
VIEW( view_mat, TRUE );
because VIEW MAT will be renamed inside the VIEW user defined function to a local (to the user
defined function) variable.
In iritinit.irt one can find several other useful VIEW related functions:
VIEWCLEAR
VIEWREMOVE
VIEWDISC
VIEWEXIT
VIEWSAVE
BEEP
VIEWSTATE
Clears all data displayed on the display device.
Removes the object specified by name from display.
Disconnects from display device (which is still running)
while allowing IRIT to connect to a new device.
Forces the display device to exit.
Requests the display device to save transformation matrix.
An emulation of the BEEP command of versions prior to 4.0.
Allows change to the state of the display device.
For the above VIEW related functions, only VIEWREMOVE, VIEWSAVE, and VIEWSTATE
require parameters, which are the file name and view state, respectively. The view state can be one of
several commands. See the display device section for more.
Examples:
VIEWCLEAR();
VIEW( axes, off );
VIEWSTATE( "LngrVecs" );
VIEWSTATE( "DrawStyle" );
VIEWSAVE( "matrix1" );
VIEWREMOVE( "axes" );
VIEWDISC();
IRIT Solid modeler
11.4.46
G. Elber
259
VIEWOBJ
VIEWOBJ( GeometricTreeType Object )
displays the (geometric) object(s) as given in Object. Object may be any GeometricType or a
list of other GeometricTypes nested to an arbitrary level.
Unlike IRIT versions prior to 4.0, VIEW MAT is not explicitly used as the transformation matrix.
In order to display with a VIEW MAT view, VIEW MAT should be listed as an argument (in that
exact name) to VIEWOBJ. The same is true for the perspective matrix PRSP MAT.
Example:
VIEWOBJ( list( view_mat, Axes ) );
displays the predefined object Axes in the viewing window using the viewing matrix VIEW MAT.
11.4.47
VIEWSET
VIEWSET( NumericType DispHandle )
sets the current display device to be DispHandle. DispHandle is returned by the CLNTEXEC
command. The use of the reserved constant of CLIENTS ALL would broadcast the viewing commands
to all objects.
Example:
h1 = clntexec( DispDeviceName );
h2 = clntexec( DispDeviceName );
clntwrite( h1, sphere( vector( 0, 0, 0 ), 1 ) );
clntwrite( h2, axes );
pause();
VIEWSET( h1 );
viewclear();
viewobj( list( sphere( vector( 0, 0, 0 ), 1 ), axes ) );
VIEWSET( h2 );
viewclear();
viewobj( list( sphere( vector( 0, 0, 0 ), 1 ), axes ) );
pause();
VIEWSET( CLIENTS_ALL );
viewobj( axes );
pause();
viewexit();
IRIT Solid modeler
G. Elber
260
opens two display devices, and displays a unit sphere to the first, and the axes object, to the second.
After a pause, displays both objects on both display devices, then pauses and exits from both.
See also VIEWOBJ, CLNTEXEC, CLNTCLOSE, CLNTREAD, CLNTWRITE.
11.4.48
WHILE
WHILE( NumericType Cond, AnyType Body )
executes the Body (see below), while the WHILE loop condition Cond is evaluated into a non
zero value. Cond is evaluated before each iteration.
The body may consist of any number of regular commands, separated by COLONs, including
nesting loops to an arbitrary level.
Example:
deg = 0;
rotstepx = rotx( 10 );
WHILE ( deg < 360,
deg = deg + 10:
view_mat = rotstepx * view_mat:
view( list( view_mat, axes ), ON )
);
displays axes with a view direction that is rotated 10 degrees at a time around the X axis.
11.5
System variables
System variables are predefined objects in the system. Any time IRIT is executed, these variable are
automatically defined and set to values which are sometimes machine dependent. These are regular
objects in any other sense, including the ability to be deleted or overwritten. One can modify, delete,
or introduce other objects using the iritinit.irt file.
11.5.1
AXES
Predefined polyline object (PolylineType) that describes the XY Z axes.
11.5.2
DRAWCTLPT
Predefined Boolean variable (NumericType) that controls whether curves’ control polygons and surfaces’ control meshes are drawn (TRUE) or not (FALSE). Default is FALSE.
11.5.3
FLAT4PLY
Predefined Boolean object (NumericType) that controls the way almost flat surface patches are converted to polygons: four polygons (TRUE) or only two polygons (FALSE). Default value is FALSE.
11.5.4
MACHINE
Predefined numeric object (NumericType) holding the machine type as one of the following constants:
MSDOS, SGI, HP, APOLLO, SUN, UNIX, IBMOS2, WINDOWS, AMIGA, CYGWIN, MACOSX, and
LINUX.
IRIT Solid modeler
G. Elber
261
POLY APPROX OPT
11.5.5
A variable controlling the algorithm to tesselate surfaces into polygons. If FALSE, that is, uniform, in
parametric space, sampling is used. If TRUE, maximal deviation between the polygonal approximation
and the surface is used, with distance as prescribed by POLY APPROX TOL.
11.5.6
POLY APPROX UV
A Boolean predefined variable. If TRUE, UV values of surface polygonal approximation are placed on
the attribute lists of vertices.
POLY APPROX TOL
11.5.7
A numeric predefined tesselation control on the distance between the surface and its polygonal approximation in POLY APPROX OPT settings.
POLY APPROX TRI
11.5.8
A numeric predefined tesselation control. If TRUE, only triangles are generated in surface tesselations.
POLY MERGE COPLANAR
11.5.9
A numeric predefined surface tesselation control. If TRUE, coplanar adjacent polygons are merged
into one.
11.5.10
PRSP MAT
Predefined matrix object (MatrixType) to hold the perspective matrix used/set by VIEW and/or
INTERACT commands. See also VIEW MAT.
11.5.11
RESOLUTION
Predefined numeric object (NumericType) that sets the accuracy of the polygonal primitive geometric
objects and the approximation of curves and surfaces. It holds the number of divisions into which
a circle is divided (with minimum value of 4). If, for example, RESOLUTION is set to 6, then a
generated CONE will effectively be a six-sided pyramid. It also controls the fineness of freeform curves
and surfaces when they are approximated as piecewise linear polylines, and the fineness of freeform
surfaces when they are approximated as polygons.
11.5.12
VIEW MAT
Predefined matrix object (MatrixType) to hold the viewing matrix used/set by VIEW and/or INTERACT commands. See also PRSP MAT.
11.6
System constants
The following constants are used by the various functions of the system to signal certain conditions.
Internally, they are represented numerically, although, in general, their exact value is unimportant and
may be changed in future versions. In the rare circumstance that you need to know their values, simply
type the constant as an expression.
Example:
IRIT Solid modeler
G. Elber
MAGENTA;
11.6.1
AMIGA
A constant designating an AMIGA system, in the MACHINE variable.
11.6.2
APOLLO
A constant designating an APOLLO system, in the MACHINE variable.
11.6.3
BEZIER TYPE
A constant defining a Bezier freeform geometry.
11.6.4
BLACK
A constant defining a BLACK color.
11.6.5
BLUE
A constant defining a BLUE color.
11.6.6
BSPLINE TYPE
A constant defining a B-spline freeform geometry.
11.6.7
CLIENTS ALL
A constant defining a request to address (broadcast to) all clients.
11.6.8
COL
A constant defining the COLumn or U direction of a surface or a trivariate mesh.
11.6.9
CTLPT TYPE
A constant defining an object of type control point.
11.6.10
CURVE TYPE
A constant defining an object of type curve.
11.6.11
CYAN
A constant defining a CYAN color.
11.6.12
CYGWIN
A constant designating an IBM system running under Cygwin, in the MACHINE variable.
11.6.13
DEPTH
A constant defining the DEPTH direction of a trivariate mesh. See TBEZIER, TBSPLINE.
262
IRIT Solid modeler
11.6.14
G. Elber
E1
A constant defining an E1 (X only coordinate) control point type.
11.6.15
E2
A constant defining an E2 (X and Y coordinates) control point type.
11.6.16
E3
A constant defining an E3 (X, Y and Z coordinates) control point type.
11.6.17
E4
A constant defining an E4 control point type.
11.6.18
E5
A constant defining an E5 control point type.
11.6.19
E6
A constant defining an E6 control point type.
11.6.20
E7
A constant defining an E7 control point type.
11.6.21
E8
A constant defining an E8 control point type.
11.6.22
E9
A constant defining an E9 control point type.
11.6.23
FALSE
A zero constant. May be used as a Boolean operand.
11.6.24
GEOM CONST
Designates a constant shape.
11.6.25
GEOM LINEAR
Designates a shape of a (piecewise) linear curve.
11.6.26
GEOM CIRCULAR
Designates a shape of a circle/arc.
263
IRIT Solid modeler
11.6.27
G. Elber
264
GEOM PLANAR
Designates a planar shape.
11.6.28
GEOM SPHERICAL
Designates a spherical shape.
11.6.29
GEOM SRF OF REV
Designates a shape that is (a portion of) a surface of revolution..
11.6.30
GEOM EXTRUSION
Designates a shape that is an extrusion surface.
11.6.31
GEOM RULED SRF
Designates a shape that is a ruled surface.
11.6.32
GEOM DEVELOP SRF
Designates a shape that is a ruled surface.
11.6.33
GEOM SWEEP
Designates a shape that is a sweep surface.
11.6.34
GREEN
A constant defining a GREEN color.
11.6.35
GREGORY TYPE
A constant defining a Gregory freeform geometry.
11.6.36
HP
A constant designating an HP system, in the MACHINE variable.
11.6.37
IBMOS2
A constant designating an IBM system running under OS2, in the MACHINE variable.
11.6.38
KV DISC OPEN
A constant defining an open end condition with a discontinuous uniformly spaced knot vector. That
is, all interior knots are of multiplicity order -1 and are equally spaced.
11.6.39
KV FLOAT
A constant defining a floating end condition uniformly spaced knot vector.
IRIT Solid modeler
11.6.40
G. Elber
KV OPEN
A constant defining an open end condition uniformly spaced knot vector.
11.6.41
KV PERIODIC
A constant defining a periodic end condition with a uniformly spaced knot vector.
11.6.42
LINUX
A constant designating an IBM system running under Linux, in the MACHINE variable.
11.6.43
LIST TYPE
A constant defining an object of type list.
11.6.44
MACOSX
A constant designating an IBM system running under Mac OSX, in the MACHINE variable.
11.6.45
MAGENTA
A constant defining a MAGENTA color.
11.6.46
MATRIX TYPE
A constant defining an object of type matrix.
11.6.47
MSDOS
A constant designating an MSDOS system, in the MACHINE variable.
11.6.48
MODEL TYPE
A constant defining an object of type model.
11.6.49
MULTIVAR TYPE
A constant defining an object of type multivariate function.
11.6.50
NUMERIC TYPE
A constant defining an object of type numeric.
11.6.51
OFF
Synonym for FALSE.
11.6.52
ON
Synonym for TRUE.
265
IRIT Solid modeler
11.6.53
G. Elber
266
P1
A constant defining a P1 (W and WX coordinates, in that order) rational control point type.
11.6.54
P2
A constant defining a P2 (W, WX, and WY coordinates, in that order) rational control point type.
11.6.55
P3
A constant defining a P3 (W, WX, WY, and WZ coordinates, in that order) rational control point
type.
11.6.56
P4
A constant defining a P4 rational control point type.
11.6.57
P5
A constant defining a P5 rational control point type.
11.6.58
P6
A constant defining a P6 rational control point type.
11.6.59
P7
A constant defining a P7 rational control point type.
11.6.60
P8
A constant defining a P8 rational control point type.
11.6.61
P9
A constant defining a P9 rational control point type.
11.6.62
PARAM CENTRIP
A constant defining a centripetal length parametrization.
11.6.63
PARAM CHORD
A constant defining a chord length parametrization.
11.6.64
PARAM NIELFOL
A constant defining a Neilson-Foley parametrization.
11.6.65
PARAM UNIFORM
A constant defining an uniform parametrization.
IRIT Solid modeler
11.6.66
G. Elber
PI
The constant of 3.141592...
11.6.67
PLANE TYPE
A constant defining an object of type plane.
11.6.68
POINT TYPE
A constant defining an object of type point.
11.6.69
POLY TYPE
A constant defining an object of type poly.
11.6.70
POWER TYPE
A constant defining a power basis freeform geometry.
11.6.71
RED
A constant defining a RED color.
11.6.72
ROW
A constant defining the ROW or V direction of a surface or a trivariate mesh.
11.6.73
SGI
A constant designating an SGI system, in the MACHINE variable.
11.6.74
STRING TYPE
A constant defining an object of type string.
11.6.75
SURFACE TYPE
A constant defining an object of type surface.
11.6.76
SUN
A constant designating a SUN system, in the MACHINE variable.
11.6.77
TRIMSRF TYPE
A constant defining an object of type trimmed surface.
11.6.78
TRISRF TYPE
A constant defining an object of type triangular surface.
267
IRIT Solid modeler
11.6.79
G. Elber
268
TRIVAR TYPE
A constant defining an object of type trivariate function.
11.6.80
TRUE
A non zero constant. May be used as a Boolean operand.
11.6.81
UNDEF TYPE
A constant defining an object of no type (yet).
11.6.82
UNIX
A constant designating a generic UNIX system, in the MACHINE variable.
11.6.83
UNTRIMMED TYPE
A constant defining an untrimmed freeform geometry.
11.6.84
VECTOR TYPE
A constant defining an object of type vector.
11.6.85
WINDOWS
A constant designating an IBM system running under Windows, in the MACHINE variable.
11.6.86
WHITE
A constant defining a WHITE color.
11.6.87
YELLOW
A constant defining a YELLOW color.
12
Animation
The animation tool adds the capability of animating objects using forward kinematics, exploiting
animation curves. Each object has different attributes, that prescribe its motion, scale, and visibility
as a function of time. Every attribute has a name, which designates its role. For instance, an attribute
animation curve named MOV X describes a translation motion along the X axis.
12.1
How to create animation curves in IRIT
Let OBJ be an object in IRIT which we want to animate.
Animation curves are either scalar (E1/P1) curves or three-dimensional (E3/P3) curves with one
of the following name prefixes:
IRIT Solid modeler
MOV X, MOV Y, MOV Z
MOV XYZ
ROT X, ROT Y, ROT Z
SCL X, SCL Y, SCL Z
SCL
VISIBLE
G. Elber
269
Translation along one axis
Arbitrary translation along all three axes
Rotating around a single axis (degrees)
Scale along a single axis
Global scale
Visibility
The visibility curve is a scalar curve that enables the display of the object if the visibility curve is
positive at time t and disables the display (hides) the object if the visibility curve is negative at time
t. A positive visibility value between zero and one also hints at the opacity of the object, if supported;
one means fully opaque.
The animation curves are all attached as an attribute named ”animation” to the object OBJ.
Example:
mov_x = cbezier( list( ctlpt( E1, 0.0 ),
ctlpt( E1, 1.0 ) ) );
scl
= cbezier( list( ctlpt( E1, 1.0 ),
ctlpt( E1, 0.1 ) ) );
rot_y = cbezier( list( ctlpt( E1, 0.0 ),
ctlpt( E1, 0.0 ) );
ctlpt( E1, 360.0 ) ) );
attrib(OBJ, "animation", list( mov_x, scl, rot_y ) );
The above will animate OBJ between time zero and one (Bezier curves are always between zero and
one), by moving it a unit size in the X direction, scaling it to angular speed from zero to 360 degrees.
OBJ can now be saved into a file or displayed via one of the regular viewing commands in IRIT
(i.e. VIEWOBJ).
Animation is not always between zero and one. To that end, one can apply the CREPARAM
function to modify the parametric domain of the animation curve. The convention is that if the time
is below the starting value of the parametric domain, the starting value of the curve is used. Similarly,
if the time is beyond the end of the parameter domain of the animation curve, the end value of the
animation curve is used.
Example:
CREPARAM( mov_x, 3.0, 5.0 );
to set the time of the motion in the x axis to be from t = 3 to t = 5. For t < 3, use mov x(3), and
for t > 5, use mov x(5).
The animation curves are regular objects in the IRIT system. Hence, only one object named mov x
or scl can exist at one time. If you create a new object named mov x, the old one is overwritten! To
preserve old animation curves you can detach the old ones by executing ’free(mov x)’ which will remove
the object named mov x from IRIT’s object list but not from its previously used locations within other
list objects, if any. A different way to do this is to call the animation curves mov x1, mov x2 etc. as
only the prefix of the name is verified.
For example:
mov_x = cbezier( list( ctlpt( E1, 0.0 ),
ctlpt( E1, 1.0 ) ) );
attrib(obj1, "animation", list( mov_x ) );
G. Elber
IRIT Solid modeler
270
free(mov_x);
mov_x1 = cbezier( list( ctlpt( E1, 2.0 ),
ctlpt( E1, 3.0 ) ) );
mov_x2 = cbezier( list( ctlpt( E1, 2.0 ),
ctlpt( E1, 3.0 ) ) );
attrib(obj2, "animation", list( mov_x1, mov_x2 ) );
free(mov_x);
Notice the way we have two animation curves translating obj2 in x. This is somewhat artificial
but makes more sense if other transformations appear in between.
One can evaluate an object with animation curves at a certain time, only to find the proper
expected transformation matrix at that time on the object as an ”animation mat” attribute. The
following example defines a user defined TransformAnim function that creates a transformed object
out of object that was evaluated with ANIMEVAL. Then, a simple loop (slowly) animates the scene...
TransformAnim = function( Obj ):
return = 0;
TransformAnim = function( Obj ): m: i:
if ( thisobj( "Obj" ) == list_type,
return = nil():
for ( i = 1, 1, sizeof( Obj ),
snoc( TransformAnim( nth( Obj, i ) ), return ) ),
return = Obj * tx( 0 ) ):
m = getattr( Obj, "animation_mat" ):
if ( thisobj( "m" ) == matrix_type,
return = return * m );
for ( t = 0, 0.1, 1,
ANIMEVAL( t, Object ):
view( TransformAnim( Object ), 1 ) );
Animation of movies are supported to a certain extent. A movie animation is prescribed using a
”pmovie” (parametric texture movie) attribute. The format of the ”pmovie” attribute is as follows
"MovieName {, S X Y {Z}} {, F} {, R} {, T=tmin,tmax}"
where ”S X, Y, Z,” prescribes image scaling much like regular ”ptexture” attributes (how many
times the image will span the object?) with the default being for the movie to span the entire object
and ’F’ requests the flipping of the X and Y axes of the movie, again much like in the ”ptexture’
attribute. Further, ”T=tmin,tmax” sets the time range to execute the animation at, beginning to end
and ’R’, if set, request that the movie will be repeated modulus this (tmin,tmax) domain.
12.2
a
b
c
d
=
=
=
=
A more complete animation example
box( vector( 0,
box( vector( 0,
box( vector( 0,
sphere( vector(
0,
0,
0,
0,
0 ), 1, 1,
0 ), 1, 1,
0 ), 1, 1,
0, 0), 0.7
1 );
1 );
1 );
);
G. Elber
IRIT Solid modeler
pt0
pt1
pt2
pt6
pt360
pt10
pt11
pt12
pt13
=
=
=
=
=
=
=
=
=
ctlpt(
ctlpt(
ctlpt(
ctlpt(
ctlpt(
ctlpt(
ctlpt(
ctlpt(
ctlpt(
visible
mov_x
mov_y
mov_z
rot_x
=
=
=
=
=
rot_y
rot_z
scl
=
=
=
scl_x
scl_y
scl_z
mov_xyz
=
=
=
=
e1,
e1,
e1,
e1,
e1,
0.0 );
1.0 );
2.0 );
6.0 );
360.0 );
e1, -4.0 );
e1, 1.0 );
e1, 4.0 );
e1, -1.0 );
creparam( cbezier( list( pt10, pt11 ) ), 0.0, 5.0 );
creparam( cbezier( list( pt0, pt6, pt2 ) ), 0.0, 1.2 );
mov_x;
mov_x;
creparam( cbspline( 2,
list( pt0, pt360, pt0 ),
list( KV_OPEN ) ),
1.2, 2.5 );
rot_x;
rot_x;
creparam( cbezier( list( pt1, pt2, pt1, pt2, pt1 ) ),
2.5, 4.0 );
scl;
scl;
scl;
creparam( circle( vector( 0, 0, 0 ), 2.0 ), 4.0, 5.0 );
attrib( d, "animation", list( mov_xyz, visible ) );
free( visible );
visible = creparam( cbezier( list( pt12,
pt13 ) ), 0.0, 5.0 );
attrib( a, "animation", list( rot_x, mov_x, scl, scl_x, visible ) );
attrib( b, "animation", list( rot_y, mov_y, scl, scl_y, visible ) );
attrib( c, "animation", list( rot_z, mov_z, scl, scl_z, visible ) );
color(
color(
color(
color(
a,
b,
c,
d,
red );
green );
blue );
cyan );
demo = list( a, b, c, d );
interact( demo );
viewanim( 0, 5, 0.01 );
271
IRIT Solid modeler
G. Elber
272
In this example, we create four objects, three cubes and one sphere. Animation curves to translate
the three cubes along the three axes for time period of t = 0 to t = 1.2 are created. Rotation curves to
rotate the three cubes along the three axes are then created for time period t = 1.2 to t = 2.5. Finally,
for time period t = 2.5 to t = 4.0. the cubes are (not only) unifomly scaled. For time period t = 4
to t = 5, the cubes become invisible and the sphere, which becomes visible, is rotated along a circle of
radius 2.
12.3
Another complete animation example
This example demonstrates the ability to put ”animation” attributes on internal nodes of a hierarchy,
thereb, affecting the entire set of objects in the hierachy. Herein, we present an robotic arm with three
edges and two joints.
BoxLength = 2;
BoxWidth = 2;
BoxHeight = 10;
LowerBox = box( vector( -BoxLength / 2, -BoxWidth / 2, 0 ),
BoxLength, BoxWidth, BoxHeight);
MiddleBox = box( vector( -BoxLength / 2, -BoxWidth / 2, 0 ),
BoxLength, BoxWidth, BoxHeight);
UpperBox = box( vector( -BoxLength / 2, -BoxWidth / 2, 0 ),
BoxLength, BoxWidth, BoxHeight);
Cn1 = cone( vector( 0, 0, 0 ), vector( 0, BoxHeight / 3, 0 ), 1 );
color(
color(
color(
color(
LowerBox, magenta );
MiddleBox, yellow );
UpperBox, cyan );
Cn1, green );
rot_x1 = creparam( cbspline( 3,
list( ctlpt( E1, 0 ),
ctlpt( E1, -200 ),
ctlpt( E1, 200 ),
ctlpt( E1, 0 ) ),
list( KV_OPEN ) ),
0, 3 );
rot_x2 = creparam( cbspline( 4,
list( ctlpt( E1, 0 ),
ctlpt( E1, 400 ),
ctlpt( E1, -400 ),
ctlpt( E1, 0 ) ),
list( KV_OPEN ) ),
0, 3 );
rot_y = creparam( cbspline( 2,
list( ctlpt( E1, 0 ),
ctlpt( E1, 100 ),
ctlpt( E1, -100 ),
G. Elber
IRIT Solid modeler
273
ctlpt( E1, 0 ) ),
list( KV_OPEN ) ),
0, 3 );
rot_z = creparam( cbspline( 2,
list( ctlpt( E1, 0 ),
ctlpt( E1, 1440 ) ),
list( KV_OPEN ) ),
0, 3 );
Translate = trans( vector( 0, 0, BoxHeight ) );
attrib( Cn1, "animation", list( rot_z, Translate ) );
Upr = list( Cn1, UpperBox );
attrib( Upr, "animation", list( rot_y, Translate ) );
Mid = list( Upr, MiddleBox );
attrib( Mid, "animation", list( rot_x2, Translate ) );
rbt_hand = list( Mid, LowerBox );
attrib( rbt_hand, "animation", list( rot_x1 ) );
view( rbt_hand, 1 );
In this example, we create four objects, three cubes and one cone, simulating a robotic hand with
three edges an a gripper (the cone). The animation is defined hierarchically, making it very easy to
model the robot.
13
Display devices
The following display device drivers are available,
Device Name
Invocation
Environment
xgldrvs
xogldrvs
xgladap
xgldrvs -sxogldrvs -sxgladap -s-
x11drvs
xmtdrvs
xglmdrvs
wntdrvs
wntgdrvs
wntgaiso
os2drvs
amidrvs
nuldrvs
x11drvs -sxmtdrvs -sxglmdrvs -swntdrvs -swntgdrvs -swntgaiso -sos2drvs -samidrvs -snuldrvs -s- [-d] [-D]
SGI 4D GL regular driver.
SGI 4D Open GL/Motif driver.
SGI 4D GL adaptive isocurve
experimental driver.
X11 driver.
X11 Motif driver.
SGI 4D GL and X11/Motif driver.
IBM PC Windows NT driver.
IBM PC Windows NT Open GL driver.
IBM PC OGL Adap. Iso. driver.
IBM PC OS2 2.x/3.x driver.
AmigaDOS 2.04+ driver.
A device to print the
object stream to stdout.
IRIT Solid modeler
G. Elber
274
All display devices are clients communicating with the (IRIT) server using IPC (inter process
communication). On Unix and Windows NT, sockets are used. A Windows NT client can talk to a
server (IRIT) on a Unix host if hooked to the same network. On OS2 pipes are used, and both the
client and server must run on the same machine. On AmigaDOS exec messages are used, and both the
client and server must run on the same machine.
While all display devices support object(s) transformations via a transformation control window,
many of the display devices allow one to click and drag on the viewing window to rotate (Left Button)
and to translate (Right Button). This mode exploits the mouse’s two degrees of freedom to provide
intuitive dual axis rotation and translation. Most display devices supports two levels of fineness. A
rough display is used when in the middle of a transformation operation (i.e. the mouse button is
down/dragged), while a fine object display is employed when the display is idle (mouse button is up).
See also option ’-E’.
The (IRIT) server will automatically start a client display device if the IRIT DISPLAY environment
variable is set to the name and options of the display device to run. For example:
setenv IRIT_DISPLAY xgldrvs -sThe display device must be in a directory that is in the environment variable path. Most display
devices require the ’-s-’ flags to run in a non-standalone mode, or a client-server mode. Most drivers
can also be used to display data in a standalone mode (i.e., no server). For example:
xgldrvs -s solid1.itd irit.imd
Effectively, all the display devices are also data display programs. Therefore, some functionality is
not always as expected. For example, the Quit button will always force the display device to quit, even
if popped up from IRIT, but will not cause IRIT to quit as might logically expected. In fact, the next
time IRIT will try to communicate with the display device, it will find the broken connection and will
start up a new display device.
Most display devices recognize attributes found on objects. The following attributes are usually
recognized (depending on the device capability):
• Color: Selects the drawn color of the object to be one of the 8/16 predefined colors in the IRIT
system: white, red, green, blue, yellow, cyan, magenta, black.
• DWidth: Sets the width in pixels of the drawn object, when drawn as a wireframe.
• Light source: Mark a points object as a light source. Such a marked object is not rendered but
rather used to set a light source position. A light source object also honors ”index” attribute that
sets the light source number (between 0 and 9), and ”type” which can be either ”point infty” for
a light source direction (light source at infinity) or ”point pos” for a point light source. See also
”advanced usage” in the irender program.
• ReflectLns: Allows the display of reflection lines off a freeform surface. The ”ReflectLns”
attribute is a list object of two subobjects, a vector and a list of points. The vector is the
reflection lines’ direction (all reflection lines are parallel) and the list of points is a list of points
on the different reflection lines. For example,
attrib( S, "RflctLines",
list( vector( 0, 0, 1 ),
list( point( -1.6, 2, 0 ),
G. Elber
IRIT Solid modeler
275
point( -0.8, 2, 0 ),
point( 0.0, 2, 0 ),
point( 0.8, 2, 0 ),
point( 1.6, 2, 0 ) ) ) );
defines five reflection lines to be reflected off surface S, all in the direction of (0, 0, 1) and on
the plane Y = 2. See also RFLCTLN command.
• RGB: Overwrites (if supported) the COLOR attribute (if given) and sets the color of the object
to the exact prescribed RGB set.
• StrScale, StrPos, StrSpace: Allows control over string drawing, controlling the scale of the
string, its position, and the spacing between characters in the string.
All display devices recognize all the command line flags and all the configuration options in a
configuration file, as described below. The display devices will attempt to honor the requests, to the
best of their ability. For example, only gl and OpenGL devices can render shaded models, and so only
they will honor all DrawStyle configuration options.
13.1
Command Line Options
???drvs [-s] [-u] [-n] [-N] [-i] [-c] [-C] [-m] [-a] [-g "x1,x2,y1,y2"]
[-G "x1,x2,y1,y2"] [-I #IsoLines] [-F PlgnOpti PlgnFineNess] [-R]
[-f PllnOpti PllnFineNess] [-E RelLowRes] [-p] [-l LineWidth]
[-r] [-A Shader] [-B] [-2] [-d] [-D] [-L NormalLen] [-4]
[-k SketchType Sil Shd Imp] [-K] [-b "R,B,G (background)"]
[-S "x,y,z,w{,a,d,s} (LgtSrcPosADS)"] [-1] [-e PickDist]
[-O PickObjType] [-Z ZMin ZMax] [-M] [-W WireSetup] [-P] [-o]
[-x ExecAnimCmd] [-X Min,Max,Dt,R{,flags}] [-w InitWidget] [-T]
[-z] DFiles
• -s: Runs the driver in a standalone mode. Otherwise, the driver will attempt to communicate
with the IRIT server.
• -u: Forces a unit matrix. That is, input data are not transformed at all.
• -n: Draws normals of vertices.
• -N: Draws normals of polygons.
• -i: Draws internal edges (created by IRIT) - default is not to display them; this option will also
force their display.
• -c: Sets depth cueing on. Drawings that are closer to the viewer will be drawn in more intense
color.
• -C: Caches the piecewise linear geometry so curves and surface can be redisplayed faster. Purging
it will free memory, on the other hand.
• -m: Provides some more information on the parsed data file(s).
• -a: Activate antialiased lines and shaded display.
IRIT Solid modeler
G. Elber
276
• -g x1,x2,y1,y2: Prescribes the position and location of the transformation window by prescribing
the domain of the window in screen space pixels.
• -G x1,x2,y1,y2: Prescribes the position and location of the viewing window by prescribing the
domain of the window in screen space pixels.
• -I #IsoLines: Specifies the number of isolines per surface, per direction. A specification of zero
isolines is possible only on the command line and it denotes the obvious.
• -F PolyOpti FineNess: Controls the method used to approximate surfaces into polygons. See
the variable POLY APPROX OPT for the meaning of FineNess. See also -4.
• -R: Use optimized polygonal strips instead of lists of polygons, if possible. This feasibility depends
on the support of the underlying hardware/graphics libraries.
• -f PolyOpti SampTol: Controls the method used to approximate curves into polylines. If
PolyOpti == 0, equally spaced intervals are used. For PolyOpti == 1, SampTol (real number)
specifies the maximal allowed dveiation tolerance of the piecewise linear approximation from the
original curve. Default is 0 64 (uniform sampling with 64 samples).
• -E RelLowRes: Sets the relative fineness of curves and surface while the input device is active,
such as in a drag operation.
• -p: Sets the width of drawn points.
• -l LineWidth: Sets the linewidth, in pixels. Default is one pixel wide.
• -r: Activate solid Rendering mode. Draws object as shaded solid.
• -A Shader: Shader can be one of 0 (None), 1 (Background), 2 (Flat), 3 (Gouraud), or 4 (Phong).
• -B: Back face culling of polygons.
• -2: Double buffering. Prevents screen flicker at the possible cost of fewer colors.
• -d: Debug objects. Prints to stderr all objects read from the communication port with the server
IRIT.
• -D: Debug input. Prints to stderr all characters read from communcation port with the server
IRIT. Lowest level of communication.
• -L NormalLen: Sets the length of the drawn normals in thousandths of a unit.
• -4: Forces four polygons per almost flat region in the surface to polygon conversion. Otherwise
two polygons only.
• -k SketchType Sil Shd Imp: Sets the strokes type (one of 1 (isoparametric curves), 2 (lines
of curvature), 3 (silhoutees)), and the silhouette and shader powers (between zero and one) and
strokes improtance factor, in interactive line art strokes (See -W).
• -K: Captures the image underneath the display device and use that as a bacKground image.
• -b BackGround: Sets the background color as three RGB integers in the range of 0 to 255.
IRIT Solid modeler
G. Elber
277
• -S x,y,z,w{,a,d,s} (LgtSrcPosADS): Sets the lighting by setting the light source position as
well as the optional Ambient, Diffuse, and Specular intensities.
• -1: One or two sides for light sources.
• -e PickDist: Sets the distance to the near and far Z clipping planes.
• -O PickObjType: A binary mask that controls which object can be picked: bit 0 - not used,
bit 1 - poly, bit 2 - numeric, bit 3 - point, bit 4 - vector, bit 5 - Plane, bit 6 - matrix, bit 7 curve, bit 8 - surface, bit 9 - string, bit 10 - list object, bit 11 - ctl pt, bit 12 - trimmed srf, bit
13 - trivariate, bit 14 - instance, bit 15 - triangular srf, bit 16 - model, bit 17 - multivariate.
• -Z ZMin ZMax: Sets the near and far Z clipping planes.
• -M: Draw control mesh/polygon of curves and surfaces, as well.
• -W WireSetup: Controls the line drawing of the freeforms where WireSetup is a mask that
controls: bit 0: Draw curves and surfaces using a set of isocurves (see -I and -f), bit 1: Draw
boundary curves of surfaces, bit 2: Draw silhouette curves of surfaces, bit 3: Draw surfaces in
sketch style line art (see -k). bit 4: Draw surfaces’ reflection lines (surface also must have a
”ReflectLns” attribute - see attributes above).
• -P: Draws curves and surfaces using a set of polygons (see -F).
• -o: Reverses the Orientation by flipping all normals (see -n, -N).
• -x ExecAnimCmd: Command to execute as a subprocess every iteration of display of an
animation sequence. This command can, for example, save the display into an image file, saving
the animation sequence. One parameter, which is an running index starting from one, is passed.
• -X Min,Max,Dt,R{,flags}: Executes an animation sequence between Min time to Max time
in steps of Dt. R repetitions of the animations are executed. Flags could be any combination of:
’s’: Flag to specify the saving of the animation as individual data files, one per frame, for high
quality rendering. ’t’: Two way animation - bounce back and forth. ’b’: Reset the animation
back to its starting position. ’x’: Flag to force the display device to exit upon completion of the
animation.
• -w InitWidget: Sets the widgets that are displayed initially (as an or’ed mask): 1 - Environment
widget, 2 - Animation widget, 4 - Curves widget, 8 - surfaces widget, 16 - Shading widget, 32 Pick objects widget, 64 - Object transforms widget.
• -T: Enable continuous moTion. Objects continue to move indefinitely following the last transformation applied.
• -z: Prints version number and current defaults.
13.2
Configuration Options
The configuration file is read before the command line options are processed. Therefore, all options in
this section can be overridden by the appropriate command line option, if any.
• TransPrefPos: Preferred location (Xmin, YMin, Xmax, Ymax) of the transformation window.
IRIT Solid modeler
G. Elber
278
• ViewPrefPos: Preferred location (Xmin, YMin, Xmax, Ymax) of the viewing window.
• BackGround: Background color. Same as ’-b’.
• Internal: Draws internal edges. Same as ’-i’.
• LightSrcPos: Sets the location of the (first) light source as a rational four coefficient location.
W of zero sets the light source at infinity.
• ExecAnimCmd: Executes a command at each step of the animation. Same as ’-x’.
• ExecAnimation: Executes an animation sequence on startup. Same as ’-X’.
• DrawVNormal: Draws normals of vertices. Same as ’-n’.
• DrawPNormal: Draws normals of polygons. Same as ’-n’.
• MoreVerbose: Provides some more information on the parsed data file(s). Same as ’-m’.
• UnitMatrix: Forces a unit matrix. That is, input data are not transformed at all. Same as ’-u’.
• DrawStyle: Requests a shaded surface rendering, or isocurve/polyline surface rendering, or
point rendering.
• BFaceCull: Requests the removal of back facing polygons, for better visibility.
• DoubleBuffer: Requests drawing using a double buffer, if any.
• DebugObjects: Debugs objects. Prints to stderr all objects read from the communication port
with the server IRIT. Same as ’-d’.
• DebugEchoInput: Debugs input. Prints to stderr all characters read from the communication
port with the server IRIT. Lowest level of communication.
• DepthCue: Sets depth cueing on. Drawings that are closer to the viewer will be drawn in more
intense color. Same as ’-c’.
• CacheGeom: Normally piecewise linear approximation of freefroms is cached. By setting this
option to FALSE, no such auxiliary data is saved, reducing the memory overhead. Same as ’-C’.
• FourPerFlat: Forces four polygons per almost flat region in the surface to polygon conversion.
Otherwise two polygons only. Same as ’-4’.
• AntiAlias: Requests the drawing of antialiased lines.
• DrawSurfaceMesh: Draws control mesh/polygon of curves and surfaces, as well. Same as ’-M’.
• DrawSurfacePoly: Draws curves and surfaces (surfaces are drawn using a set of isocurves, see
-I, or polygons, see -f). Same as ’-P’.
• StandAlone: Runs the driver in a standalone mode. Otherwise, the driver will attempt to
communicate with the IRIT server. Same as ’-s’.
• PolyStrips: Renders using polygonal strips, if possible. Same as ’-R’.
IRIT Solid modeler
G. Elber
279
• ContMotion: Renders using continuous motions. Objects continue to move indefinitely, following the last transformation applied. Same as ’-T’.
• NumOfIsolines: Specifies number of isolines per surface, per direction. Same as ’-I’.
• PllnFineNess: Specifies the samples per (iso)curve or tolerance of approximation. See ’-f’.
• LineWidth: Sets the linewidth, in pixels. Default is one pixel wide. Same as ’-l’
• AdapIsoDir: Selects the direction of the adaptive isoline rendering.
• PolygonOpti: Controls the method used to subdivide a surface into polygons that approximate
it. See ’-F’.
• PolylineOpti: Controls the method used to subdivide a curve into polylines that approximate
it. See ’-f’.
• ShadingModel: One of 1 (Flat), 2 (Gouraud), or 3 (Phong). Same as ’-A’.
• TransMode: Selects between object space transformations and screen space transformation.
• ViewMode: Selects between perspective and orthographic views.
• NormalLength: Sets the length of the drawn normals in thousandths of a unit. Same as ’-L’.
• ZClipMin: Sets the minimal clipping plane in Z. Same as ’-Z’.
• ZClipMax: Sets the maximal clipping plane in Z. Same as ’-Z’.
• PlgnFineNess: Controls the fineness of the surface to polygon subdivision. See ’-F’.
13.3
Interactive mode setup
Commands that affect the status of the display device can also be sent via the communication port
with the IRIT server. The following commands are recognized as string objects with object name of
”COMMAND ”:
IRIT Solid modeler
ANIMATE TMin TMax Dt
BEEP
CLEAR
CLONEOBJ OBJNAME
DCLEAR
DISCONNECT
EDITCRV CRVNAME
EDITOBJ OBJNAME
EDITSRF SRFNAME
EXIT
GETOBJ NAME
HIGHLIGHT1 NAME
HIGHLIGHT2 NAME
IMGSAVE NAME
MSAVE NAME
PICKCRSR
PICKDONE
PICKNAME
PICKOBJ
REMOVE NAME
STATE COMMAND
UNHIGHLIGHT
G. Elber
Animates current scene from TMin to TMax in Dt
steps.
Makes some sound.
Clears the display area. All objects are deleted.
Clone the object OBJNAME.
Delays clear. Same as CLEAR but delayed until next
object is sent from the server. Useful for animation.
Closes connection with the server, but does not quit.
Requests immediate editing mode of crv CRVNAME.
Requests immediate editing mode of obj OBJNAME.
Requests immediate editing mode of srf SRFNAME.
Closes connection with the server and quits.
Requests the object named NAME that is returned
in the output channel to the server.
Color the object named NAME with highlight1 color.
Color the object named NAME with highlight2 color.
Save the current display in an image file named NAME.
Save the current matrix in a file named NAME.
Requests to interactively sample mouse/cursor events
for mouse-up, mouse-down, and mouse-move-while-down.
Stop interactive pick reports to server. Stops all
PICKCRSR, PICKNAME and PICKOBJ modes.
Requests to interactively pick an object by name that
is returned in the output channel to the server.
Requests to interactively pick an object that is
returned in the output channel to the server.
Requests the removal of object named NAME from
display.
Changes the state of the display device. See below.
Unhighlight all highlighted objects.
The following commands are valid for the STATE COMMAND above,
280
IRIT Solid modeler
MouseSense:
ScrnObjct:
PerspOrtho:
DepthCue:
CacheGeom:
DrawStyle:
ShadingMdl:
BFaceCull:
DblBuffer:
AntiAlias:
DrawIntrnl:
DrawVNrml:
DrawPNrml:
DrawPlgns:
DSrfMesh:
DSrfWire:
DSrfBndry:
DSrfSilh:
DSrfPoly:
DSrfSktch:
4PerFlat:
NumIsos:
PolyAprx:
PllnAprx:
LenVecs:
WidthLines:
WidthPts:
Front:
Side:
Top:
Isometry:
4Views:
Clear:
ResAdapIso:
ResRldSrf:
RuledSrfApx:
AdapIsoDir:
LowResRatio:
ClipAtPoles:
G. Elber
281
Mouse sensitivity control.
Controls screen/object transformation mode.
Controls perspective/orthographic trans. mode.
Controls depth cueing drawing.
Cache the created piecewise linear geometry.
Controls isocurve/shaded solid/points rendering.
Controls shading model for solid solid drawing.
Cull backfacing polygons.
Controls single/double buffer mode.
Controls antialiased lines.
Controls drawing of internal lines.
Controls drawing of normals of vertices.
Controls drawing of normals of polygons.
Controls drawing of polygonal objects as polygons.
Controls drawing of control meshes/polygons.
Controls drawing of curves/surfaces as wireframes.
Controls drawing of boundary curves of surfaces.
Controls drawing of silhouette curves of surfaces.
Controls drawing of curves/surfaces as polygons.
Controls drawing of surfaces as sketches.
Controls 2/4 polygons per flat surface regions.
Controls the number of isocurves in a surface.
Controls the surface tesselation fineness.
Controls the curves to polylines fineness.
Controls the length of displayed normal vectors.
Controls the width of the drawn lines.
Controls the width of the cross of drawn points.
Selects a front view.
Selects a side view.
Selects a top view.
Selects an isometric view.
Selects a four views mode.
Clears the viewing area.
Controls the resolution of a number of adaptive isocurves.
Controls the resolution of ruled srfs in adaptive isocurves.
Controls the ruled surface approx. in adaptive isocurves.
Controls the row/col direction of adaptive isocurves.
Controls the low/high resolution ratios.
Controls the optional clipping of polygons/lines at poles.
Obviously not all state options are valid for all drivers. The IRIT server defines in iritinit.irt
several user-defined functions that exercise some of the above state commands, such as VIEWSTATE
and VIEWSAVE. VIEWSTATE accepts a second parameter which can be -1 to toggle the value, 0 to
reset the value or 1 to set it. If the state value is real, 1 doubles its value and 0 halfs it.
In addition to state modification via communication with the IRIT server, modes can be interactively modified on most of the display devices using a pop-up menu that is activated using the right
button in the transformation window. This pop-up menu is somewhat different in different drivers, but
its entries closely follow the entries of the above state command table.
IRIT Solid modeler
G. Elber
282
All driver support three special matrices. The VIEW MAT can set the current viewing direction and
PRSP MAT can set the current perspective view. Finally, CONT MAT can set the current continuous
motion (see also ’-T’ option).
Animation of movies are supported to a certain extent. A movie animation is prescribed using a
”pmovie” (parametric texture movie) attribute. The format of the ”pmovie” attribute is as follows
13.4
Basic Attributes
The display devices support basic graphics capabilities like color via the ”color” attribute that selects
between 15 basic different colors and the”rgb” attribute that allows full ”red, green. blue” specification.
If both ”rgb” and ”color” are found in the same object, the ”rgb” attribute will govern.
Some display devices also support transparency via the ”transp” attributes that expects a translucency value between zero and one.
Some display devices also support parameteric texture via the ”ptexture attribute” that can look
like (see also irender for a more elaborated ”ptexture” options that are not supported by the ????drvs
devices.
"ImageName {, S X Y {Z}} {, F} {, N}"
where ”S X, Y, Z,” prescribes image scaling (how many times the image will span the object?) with
the default being for the movie to span the entire object, ’F’ requests the flipping of the X and Y axes
of the image, and ’N’ optionally forces a reload the image as a New image, even if an image by this
exact same name was already loaded and is cached.
13.5
Animation Mode
All the display drivers are now able to animate objects with animation curve attributes on them.
For more on the way animation curves can be created, see the Animation Section of this manual.
(Section 12).
Once a scene with animation curve attributes is being loaded into a display device, one can enter
”animation” mode using the ”Animation” button available in all display devices. The user is then
prompted (either graphically or in a textual based interface) for the starting time, termination time
and step size of the animation. The parameter space of the animation curve serves as the time domain.
The default starting and terminating times are set as the minimal and maximal parametric domain
values of all animation curves. An object at time t below the minimal parametric value will be placed at
the starting value of the animation curve. Similarly, an object at time t above the maximal parametric
value will be placed at the termination value of the animation curve. The user can also set a bouncing
back and forth mode, the number of repetitions, and if desired, request the saving of all the different
scenes in the animation as separate files so a high quality animation can be created.
A string object can be viewed as the text of selected PS font (See -N). The string position is set via
a ”StrPos” vector attribute (default to the origin), and ”StrScale” real attribute to control the string
height in world unit (default to 0.1). Text will always be in a plane parallel to the XY plane.
13.6
Advanced (Programmable) Hardware Graphics Support
Programmable hardware allows us to change the standard pipeline of the GPU. This features enables
users to create dedicated GPU programs (called shaders) to implement advanced rendering algorithms.
Under Windows, IRITS OpenGL display device is able to use programmable hardware features. In
order to use these advanced hardware rendering features, the GPU must support the proper shader
IRIT Solid modeler
G. Elber
283
model. The display device will ignore advanced hardware features attributes if the local GPU does not
support the proper shaders requirements.
The following advanced hardware features are supported by IRIT:
13.6.1
HDDM (Hardware Deformation Displacement Mapping)
Deformation displacement mapping is a technique that allows us to tile the geometry of a given object
without the limitations of strict displacement mapping.
Requirements: Shader model 3.0 and above Shader file: ddm vshd.cg Shader Language: CG Shaders
compilation: run time. Supported geometries: All surfaces and polygonal models with UV values
In order to use DDM texture in an object, a ”DTexture” attribute string must be defined for the
object ([.] are optional):
”TileFileName, T TilesU TilesV, [S SamplingU SamplingV], [H Shader], [Z Scale], [OB/OA],
[RU/CU/CRU], [RV/CV/CRV], [M], [NO/NT], [A AnimationSamples]”
where
• TileFileName: The DDM Tile.
• T TilesU TilesV: Number of tiles to place.
• S SamplingU SamplingV: Number of samples to take on the original object (default S=T).
• H Shader: Shader filename (default: ddm vshd.cg).
• Z Scale: Z Scale factor on tiles Z axes (default = 1).
• OB/OA: Draw the original object before the tiles (OB) or draw the original object after the
tiles (OA). This matters when using tiles with transparency (Default: dont draw original object).
• RU/CU/CRU, RV/CV/CRV: How the tiles should be handled when overlapping the objects UV domain: RU, RV: Repeat end conditions. CU, CV: Clamp end conditions. CRU,
CRV: Clamp to tile size - simulates repeat with clamping (handles the stretch side effect in the
background of objects with only 1 side when using simple repeat. (Default: RU, RV)
• M: Use multitiles (see below).
• NO/NT: Normal calculation methods offset (NO), or tangent plane mapping (NT) (Default:
NO).
• Animation Samples: The number of samples from a continuous animation sequence that is
defined on an object (default: 1).
Examples:
[DTexture "horn.itd, H ddm_vshd.cg, T 4 16, S 32 64, CRU, CV, Z 0.7, NT"]
[DTexture "stone-t1.itd, H ddm_vshd.cg, T 6 1, S 64 64, CU, RV, Z -0.1, M, NO"]
DDM supports usage of more than one tile per object. When using multitiles, tiles are placed
randomly on the object. To use multitiles, an ’M flag should placed in the dtexture attribute. Furthermore, an additional ”DTextureFiles” attributes must be defined for the object with the following
string: ”Tilefile1, tilefile2, tilefile3...”. The maximum number of supported tiles is 10.
Example:
G. Elber
IRIT Solid modeler
284
[DTextureFiles "stone-t4.itd stone-t3.itd stone-t2.itd stone-t6.itd"]
The tile geometry also supports some attributes such as animation. The following animations are
supported:
• MORPH: Morphing between two compatible tiles (same number of vertices) according to the
curve. The morphing is between the DDM tiles (”DTexture” attribute) and the first tile in the
”DTextureFiles” attribute (hence, using morph requires multitiles).
• SCL Z: Z scale of the tile (in tile space) according to the animation curve (see also animation
in IRIT and the display device).
• MOV U/MOV V: Change the UV placement of the tile in the parametric space of the base,
textured, surface, according to the animation curve.
• RECT TILE, or HEX TILE or TRIG TILE or TRIG TILE REV: DDM supports four
types of tiles:
Rectangle:
Hexagon:
Triangle:
Reversed Triangle:
Creates square tiling.
Creates honeycomb tiling.
Tiles the surfaces using triangles.
Tiles the surfaces using reversed triangles.
In order to define the type of tiling, one of the above attributes should be added to the tile object:
13.6.2
HFFD (Hardware Free Form Deformation)
FFD is a technique which deforms objects by deforming the space in which the object is embedded.
Requirements: Shader model 3.0 and above Shader file: ddm vshd.cg Shader Language: CG Shaders
compilation: run time. Supported geometries: All surfaces and polygonal models with UV values
In order to use FFD in an object, an ”FFD texture” attribute must be added to the object with
the following string:
”ObjectFile, ShaderType, DrawTV, ScaleX, ScaleY, ScaleZ, AnimationSamples, OffsetX, OffsetY,
OffsetZ, NormalCalcMethod”
where
• Objectfile: The file of the object to use with TV.
• ShaderType: 0 - Single Phase Shader (Limited shader), 1 - Double Phase Shader
• DrawTV: 0 - Dont draw the trivariate object. 1 - Draw the trivariate object.
• ScaleX, ScaleY, ScaleZ: The scale of the object in xyz.
• AnimationSamples: Number of times to sample object when object has animation, along the
animation.
• OffsetX, OffsetY, OffsetZ: The offset of the object in xyz axes.
• NormalCalcMethod: 0 - No shading (use original normal values), 1 - Normal offset calculation,
2 - Tangent plane mapping
Examples:
[FFD_texture "porschesc.itd, 1, 0, 1.8, 0.15, 1.8, 0, 0, 0, 0, 2"]
IRIT Solid modeler
13.7
G. Elber
285
Specific Comments
• The x11drvs supports the following X Defaults (searched at /.Xdefaults):
#ifndef COLOR
irit*MaxColors:
irit*Trans*BackGround:
irit*Trans*BorderColor:
irit*Trans*TextColor:
irit*Trans*SubWin*BackGround:
irit*Trans*SubWin*BorderColor:
irit*Trans*CursorColor:
irit*View*BackGround:
irit*View*BorderColor:
irit*View*CursorColor:
#else
irit*MaxColors:
irit*Trans*BackGround:
irit*Trans*BorderColor:
irit*Trans*TextColor:
irit*Trans*SubWin*BackGround:
irit*Trans*SubWin*BorderColor:
irit*Trans*CursorColor:
irit*View*BackGround:
irit*View*BorderColor:
irit*View*CursorColor:
#endif
irit*Trans*BorderWidth:
irit*Trans*Geometry:
irit*View*BorderWidth:
irit*View*Geometry:
1
Black
White
White
Black
White
White
Black
White
White
15
NavyBlue
Red
Yellow
DarkGreen
Magenta
Green
NavyBlue
Red
Red
3
=150x500+510+0
3
=500x500+0+0
• The Motif-based display drivers contain three types of gadgets which can be operated in the
following manner. Scales: can be dragged or clicked outside for single (mouse’s middle button)
or continuous (mouse’s left button) action. Pushbuttons: activated by clicking the mouse’s left
button. The control panel: allows rotation, translation of the objects in three axes, determining
of the perspective ratio, viewing an object from top, side, front or isometrically, determining scale
factor and clipping settings, and operating the matrix stack.
The environment window toggles between screen or object transformation, depth cue on or off,
orthographic or perspective projection, wireframe or solid display, single or double buffering,
showing or hiding normals, including or excluding the surface’s mesh and curve’s control polygon,
surface drawing using isolines or polygons, and four or two polygons per flat patch. Some display
devices allow for the inclusion or exclusion of internal edges, and enable or disable of antialiased
lines. Scales in the X11/Motif based devices set normals length, lines width, control sensitivity,
the number of islolines and samples, etc.
• The locations of windows as set via [-g] and [-G] and/or via the configuration file overwrite in
x11drvs the Geometry X11 defaults. To use the Geometry X11 default, use ’-G ” ”’ and ’-g ” ”’
or set the string to empty size in the configuration file.
G. Elber
IRIT Solid modeler
286
• In os2drvs, only -G is used to specify the dimensions of the parent window that holds both the
viewing and the transformation window.
• In os2drvs, the following key strokes are available as shortcuts:
Key
^x
^s
^f
^d
^t
^i
^p
^n
^v
^g
^b
^c
^m
13.8
Function
Quit
Save
Front View
Side View
Top View
Isometric VIew
Perspetive/Orthographic
View Internal Edges
View Vertices’ Normals
View Polygons’ Normals
Backface Culling
Depth Cue
View Control Mesh/Poly
Examples
xglmdrvs -z
prints all the options and their current values.
xglmdrvs -B -i -l 3 solid1.itd
displays the model of solid1.itd using backface culling (’-B’), with internal edges (’-i’), and line
width of 3.
xglmdrvs -r -A flat wiggle.itd
displays the model of wiggle.itd shaded (’-r’) using flat shading (’-A’).
xglmdrvs -I 40 -u -b 255 255 255 wiggle.itd
displays the model of wiggle.itd using isolines’ density of 40 (’-I’), using unit matrix to begin with
(’-u’), and a white background (’-b’).
xglmdrvs -X 0,2,0.1,sx -r anim.itd
executes the animation in anim.itd, from time 0 to time 2 in steps of 0.1. The animation is saved
in one frame per file (flag ’s’ in ’-X’) and the display device exists once the animation has terminated
(flag ’x’ in ’-X’)). The animation will be shaded (’-r’).
IRIT Solid modeler
14
G. Elber
287
Utilities - General Usage
The IRIT Solid Modeler is accompanied by quite a few utilities. They can be subdivided into two
major groups. The first includes auxiliary tools such as illustrt and poly3d-h. The second includes
filters such as irit2ray and irit2ps.
All these tools operate on input files, and most of the time produce data files. In all utilities that
read files, the dash (’-’) can be used to read stdin.
Example:
poly3d-h solid1.itd | irit2ps - > solid1.ps
All the utilities have command line options. If an option is set by a ’-x’, then ’-x-’ resets the option.
The command line options overwrite the settings in config files, and the reset option is useful for cases
where the option is set by default, in the configuration file.
All utilities can read a sequence of data files. However, the last transformation matrices found
(VIEW MAT and PRSP MAT) are actually used.
Example:
poly3d-h solid1.itd | x11drvs solid1.itd - solid1.imd
x11drvs will display the original solid1.itd file with its hidden version, as computed by poly3d-h,
all with the solid1.imd, ignoring all other matrices in the data stream.
Compressed files with a postfix ”.Z” or ”.gz” will be automatically uncompressed on read and write.
The following is legal:
poly3d-h solid1.itd.Z | x11drvs solid1.itd.Z - solid1.imd
where solid1.itd.Z was saved from within IRIT using the command
save( "solid1.itd.Z", solid1 );
or similarly. The gnu utility ”gzip” is used for the purpose of (un)compressing the data via pipes.
See also SAVE and LOAD.
15
15.1
Poly3d-h - Hidden Line Removing Program
Introduction
poly3d-h is a program to remove hidden lines from a given polygonal model. Freeform objects are
preprocessed into polygons with controlled fineness. See Figure 120 for some output examples which
use this tool.
The program performs 4 passes over the input:
1. Preprocesses and maps all polygons in a scene, and sorts them.
2. Generates edges out of the polygonal model and sorts them (preprocessing for the scan line
algorithm) into buckets.
3. Intersects edges, and splits edges with non-homogeneous visibility (the scan line algorithm).
4. Applies a visibility test on each edge.
This program can handle CONVEX polygons only. From IRIT one can ensure that a model consists
of convex polygons only, using the CONVEX command:
IRIT Solid modeler
G. Elber
288
Figure 120: Some examples of the use of the hidden line removal tool, poly3d-h, to remove hidden
lines.
CnvxObj = convex( Obj );
just before saving it into a file. Surfaces are always decomposed into triangles.
poly3d-h output is in the form of polylines. It is a regular IRIT data file that can be viewed using
any of the display devices, for example.
15.2
Command Line Options
poly3d-h [-b] [-m] [-i] [-e #Edges] [-H] [-4] [-W Width]
[-F PolyOpti FineNess] [-q] [-o OutName] [-t AnimTime]
[-c] [-z] DFiles > OutFile
• -b: BackFacing - if an object is closed (such as most models created by IRIT), backfacing polygons
can be deleted, thereby speeding up the process by at least a factor of two.
• -m: More - provides some more information on the parsed data file(s).
• -i: Internal edges (created by IRIT) - default is not to display them, and this option will force
their display, as well.
• -e n: Number of edges to use from each given polygon (default all). Handy as ’-e 1 -4’ for freeform
data.
• -H: Dumps both visible lines and hidden lines as separated objects. Hidden lines will be dumped
using a different (dimmer) color and (a narrower) line width.
• -4: Forces four polygons per almost flat region in the surface to polygon conversion. Otherwise
two polygons only.
• -W Width: Selects a default width for visible lines in inches.
• -F PolyOpti FineNess: Optimality of polygonal approximation of surfaces. See the variable
POLY APPROX OPT for the meaning of FineNess. See also -4.
IRIT Solid modeler
G. Elber
289
• -q: Quiet mode. No printing aside from fatal errors. Disables -m.
• -o OutName: Name of output file. Default is stdout.
• -t AnimTime: If the data contains animation curves, evaluate and process the scene at time
AnimTime.
• -z: Prints version number and current defaults.
• -c: Clips data to screen (default). If disabled (’-c-’), data outside the view screen ([-1, 1] in x
and y) are also processed.
Some of the options may be turned on in poly3d-h.cfg. They can then be turned off in the command
line as ’-?-’.
15.3
Configuration
The program can be configured using a configuration file named poly3d-h.cfg. This is a plain ASCII
file you can edit directly and set the parameters according to the comments there. ’poly3d-h -z’ will
display the current configuration as read from the configuration file.
The configuration file is searched in the directory specified by the IRIT PATH environment variable.
For example, ’setenv IRIT PATH /u/gershon/irit/bin/’. If the IRIT PATH variable is not set, the
current directory is searched.
15.4
Usage
As this program is not interactive, usage is quite simple, and the only control available is the command
line options.
The images in Figure 120 were created using the following commands:
poly3d-h -W 0.01 -H -q molecule.itd view1.itd | irit2ps - > molecule.ps
poly3d-h -W 0.02 -q solid2h.itd view2.itd | irit2ps - > solid2h.ps
poly3d-h -W 0.02 -H -q dodechdr.itd view3.itd |
irit2ps -d -0.59 0.59 - > dodechdr.ps
If a certain surface should be polygonized into a finer/coarser set of polygons than the rest of the
scene, one can set a ”resolution” attribute which specifies the relative FineNess resolution of this specific
surface. Further, ”u resolution” and ”v resolution” might be similarly used to set relative resolution
for the u or v direction only. The ”crv resolution” attribute controls the relative fineness of curves as
polylines. The ”num of isolines” attribute controls the relative number of isoparametric curves.
See also IHidden.
16
16.1
Illustrt - Simple line illustration filter
Introduction
illustrt is a filter that processes IRIT data files and dumps out modified IRIT data files. illustrt can be
used to make simple, nice illustrations of data. The features of illustrt include depth sorting, hidden
line clipping at intersection points, and vertex enhancements. illustrt is designed to closely interact
with irit2ps, although it is not neceessary to use irit2ps on illustrt output.
See Figure 121 for some output examples which use this tool.
IRIT Solid modeler
G. Elber
290
Figure 121: Some examples of the use of the illustration tool, illustrt.
16.2
Command Line Options
illustrt [-I #UIso[:#VIso[:#WIso]]] [-f PolyOpti SampTol] [-s] [-M] [-P]
[-p] [-O] [-l MaxLnLen] [-a] [-t TrimInter] [-o OutName]
[-Z InterSameZ] [-m] [-T AnimTime] [-z] DFiles
• -I #UIso[:#VIso[:#WIso]]: Specifies the number of isolines per surface/trivariate, per direction. If #VIso is not specified, #UIso is used for #VIso as well and so no.
• -f PolyOpti SampTol: Controls the method used to approximate curves into polylines. If
PolyOpti == 0, equally spaced intervals are used. For PolyOpti == 1, SampTol (real number)
specifies the maximal allowed deviation tolerance of the piecewise linear approximation from the
original curve. Default is 0 64 (uniform sampling with 64 samples).
• -s: sorts the data in Z depth order that emulates hidden line removal once the data are drawn.
• -M: Dumps the control mesh/polygon as well.
• -P: Dumps the curve/surface as isocurves.
• -p: Dumps vertices of polygons/lines as points.
• -O: Handles polygonal objects as possibly open. This will generate two identical edges for an
edge shared by two adjacent polygons. This can be useful for open or isolated polygons.
• -l MaxLnLen: Breaks long lines into shorter ones with maximal length of MaxLnLen. This
option is necessary to achieve good depth depending on line width in the ’-d’ option of irit2ps.
IRIT Solid modeler
G. Elber
291
• -a: Takes into account the angle between the two (poly)lines that intersect when computing how
much to trim. See also -t.
• -t TrimInter: Each time two (poly)line segments intersect in the projection plane, the (poly)line
that is farther away from the viewer is clipped by the TrimInter amount from both sides. See
also -a.
• -o OutName: Name of output file. Default is stdout.
• -Z InterSameZ: The maximal Z depth difference of intersection curves to be be considered
invalid.
• -m: More talkative mode. Prints processing information.
• -T AnimTime: If the data contain animation curves, evaluate and process the scene at time
AnimTime.
• -z: Prints version number and current defaults.
16.3
Usage
illustrt is a simple line illustration tool. It processes geometry such as polylines and surfaces and dumps
geometry with attributes that will make nice line illustrations. illustrt is geared mainly toward its use
with irit2ps to create postscript illustrations. Here is a simple example:
illustrt -s -l 0.1 solid1.itd | irit2ps -W 0.05 -d 0.2 0.6 -u - > solid.ps
makes sure all segments piped into irit2ps are shorter than 0.1 and sorts them in order to make
sure hidden surface removal is correctly applied. Irit2ps is invoked with depth cueing activated, and a
default width of 0.05.
illustrt dumps out regular IRIT data files, so output can be handled like any other data set. illustrt
does the following processing to the input data set:
• Converts surfaces to isocurves (’-I’ flag) and isocurves and curves to polylines (’-S’ flag), and
converts polygons to polylines. Polygonal objects are considered closed and even though each
edge is shared by two polygons, only a single one is generated.
• Finds the intersection location in the projection plane of all segments in the input data set and
trims away the far segment at both sides of the intersection point by an amount controlled by
the ’-t’ and ’-a’ flags.
• Breaks polylines and long lines into short segments, as specified via the ’-l’ flag, so that width
depth cueing can be applied more accurately (see irit2ps’s ’-d’ flag) as well as the Z sorting.
• Generates vertices of polygons in the input data set as points in output data controlled via the
’-p’ flag. set.
• Applies a Z sort to the output data, if ’-s’, so drawing in order of the data will produce a properly
hidden surface removal drawing.
Here is a more complex example. Make sure tubular is properly set via ”attrib(solid1, ”tubular”,
0.7);” and invoke:
IRIT Solid modeler
G. Elber
292
illustrt -s -p -l 0.1 -t 0.05 solid1.itd |
irit2ps -W 0.05 -d 0.2 0.6 -p h 0.05 -u - > solid.ps
makes sure all segments piped into irit2ps are shorter than 0.1, generates points for the vertices,
sorts the data in order to make sure hidden surface removal is correctly applied, and trims the far edge
by 0.05 at an intersection point. Irit2ps is invoked with depth cueing activated and a default width of
0.05, points are drawn as hollowed circles of default size 0.05, and lines are drawn tubular.
Objects in the input stream that have an integer attribute by the name of ”IllustrtNoProcess” are
passed to the output unmodified. If this attribute value is ¡= 0, the object is sent to the output stream
immediately (in the beginning of the output stream. If this attribute value is ¿ 0, the object is sent to
the output stream at the end (in the end of the output stream. Objects in the input stream that have a
real attribute by the name of ”IllustrtShadeBG” are copied and rendered also in the background with
a gray color as set by this attribute (between zero and one). If a regular color/rgb attribute is found on
the object, this value will scale that as well. Objects in the input stream that have an attribute by the
name of ”SpeedWave” will have a linear segment added that emulates fast motion with the following
attributes,
"Randomness,DirX,DirY,DirZ,Len,Dist,LenRandom,DistRandom, width".
Objects in the input stream that have an attribute by the name of ”HeatWave” will have a spiral curves
added that emulate a heat wave in the +Z axis with the following attributes,
"Randomness,Len,Dist,LenRandom,DistRandom, width".
Examples:
attrib(Axis, "IllustrtNoProcess", 1);
attrib(Srf, "IllustrtShadeBG", 0.7);
attrib(Obj, "SpeedWave", "0.0005,1,0,0,5,3,3,2,0.05");
attrib(Obj, "HeatWave", "0.015,0.1,0.03,0.06,0.03,0.002");
17
Aisoshad - Simple line illustration filter
17.1
Introduction
Aisoshad is a filter that processes IRIT data files of freeform shapes and dumps out modified IRIT
data files in the form of short univariate strokes. Aisoshad can be used to make simple yet nice line
art illustrations of geometry that is based solely on isoparametric curves.
Aisoshad employs a simple shader to determine the density of the isoparametric strokes as well as
the thickness etc. Output of aisoshad can be piped into the irit2ps postscript postprocessor.
See Figure 122 for output examples of using this tool.
17.2
Command Line Options
aisoshad [-o OutName] [-m] [-i] [-F PolyOpti FineNess]
[-f PolyOpti SampTol] [-r RndrMdl] [-c CosPwr] [-s SdrPwr]
[-l Lx Ly Lz] [-R Random] [-d AdapDir] [-t SrfZTrans]
[-M MinSubdiv] [-D AdapDist] [-w AdapIsoWidth] [-S WidthScale]
[-W] [-u] [-Z ZbufSize] [-b] [-z] DFiles
• -o OutName: Name of output file. Default is stdout.
IRIT Solid modeler
G. Elber
293
Figure 122: Examples of the use of the aisoshad illustration tool to line art illustrative drawing using
isoparametric curves. In (left), silhouettes are emphasized, while in (right) a light source above and to
the right is placed using a cosine shader.
• -m: More talkative mode. Prints processing information.
• -i: Solve symbolic products using interpolations. Faster but the generated output is not as
compact as possible.
• -I #IsoLines: Specifies number of isolines per surface, per direction.
• -F PolyOpti FineNess: Optimality of polygonal approximation of surfaces. See the variable
POLY APPROX OPT for the meaning of FineNess. Default is 0 and 20.0 (no optimal sampling
with fineness of 20.0 (real number)).
• -f PolyOpti SampTol: Controls the method used to approximate curves into polylines. If
PolyOpti == 0, equally spaced intervals are used. For PolyOpti == 1, SampTol (real number)
specifies the maximal allowed deviation tolerance of the piecewise linear approximation from the
original curve. Default is 0 64 (uniform sampling with 64 samples).
• -r: Selects the rendering model of the shader as follows:
1. Cosine shader, diffuse only, light source regular.
2. Cosine shader, diffuse only, light source as two lights from opposite directions.
3. Cosine shader, has specular term, light source regular.
4. Cosine shader, has specular term, light source as two lights.
IRIT Solid modeler
G. Elber
294
5. Shader emphasizing the silhouette areas of the model.
6. Shader estimating distance decay from a point light source.
• -c CosPower: Controls the cosine shader’s power.
• -s SdrPower: Controls the shader’s relative influence.
• -l Lx Ly Lz: Sets the light source position/direction.
• -R Random: Controls the levels of randomness that the isoparametric curves perturb. Low
levels of randomness would leave visible artifacts while too high levels would disturb the shading.
Should be greater than one or negative one to disable.
• -d AdapDir: Sets the isoparametric directions of the strokes. Either 0, 1, or 2 for U direction,
V direction or both U and V directions, respectively.
• -t SrfZTrans: The amount to translate the created line strokes in Z, in order to prevent Z
fighting with the rendered object itself.
• -M MinSubdiv: Sets the minimal number of subdivision to enforce during the isoparametric
strokes’ construction. This flag should be used rarely and typically MinSubdiv should be low and
close to one.
• -D AdapDist: Sets the distance between adjacent isocurves. The smaller AdapDist is, the
denser the coverage of the strokes will be.
• -w AdapIsoWidth: Sets the default width attribute of the generated strokes.
• -S WidthScale: Controls the relative variance of the width of the strokes in variable width
strokes.
• -W: If set, enables variable width strokes.
• -u: If set, maps the strokes to screen space. Otherwise, strokes are mapped back to object space.
• -Z ZbufSize: Sets the size of the (square) Z buffer to set.
• -b: If set, generates a binary IRIT data file that holds the strokes. Otherwise, IRIT text file will
be created.
• -z: Print version number and current defaults.
17.3
Usage
Aisoshad is a simple line art illustration tool that generates strokes that follow the isoparametric curves.
It processes freeform geometry such as surfaces and dumps geometry with attributes that makes nice
line illustrations. Aisoshad is geared mainly toward its use with irit2ps to create postscript illustrations.
Here is a simple example:
aisoshad -Z -500 -F 0 50 -s 10 -c 1 -D 0.3 -r 5 wglass.itd view.imd |
irit2ps -W 0.05 -d 0.2 0.6 -u - > wglass1.ps
IRIT Solid modeler
G. Elber
295
that creates line art illustrations of a wine glass wglass.itd with hidden strokes removed via a
Z-buffer of size 500 that will be displayed on screen, polygonal fineness of 50 for the surface of the
glass, shader power of 10 and cosine power of 1, isoparametric curves maximal distance of 0.3, and
shader number 5 that emphasizes silhouettes. The output of the shader is piped to a irit2ps filter to
postscript that sets the width of the strokes to be a function of depth. Figure 122 (a) shows the result
of this example.
Here is another example:
aisoshad -Z 700 -R 4 -F 0 50 -l 1 1 1 -D 0.02 -r 2 wglass.itd view.imd
irit2ps -W 0.005 -d 0.2 0.6 -u - > wglass2.ps
that creates line art illustrations of a wine glass wglass.itd with hidden strokes removal via a
Z-buffer of size 700 that is allocated off-line in core memory, polygonal fineness of 50 for the surface of
the glass, a light source at (1, 1, 1), isoparametric curves maximal distance of 0.02, and a cosine shader
number 2. The output of the shader is piped to a irit2ps filter to postscript that sets the width of the
strokes to be a function of depth. Figure 122 (b) shows the result of this example.
Transparent objects, or objects with the ”transp” attribute, would generate strokes as regular
surfaces but would not participate in the hidden strokes removal. An ”AdapIsoDir” attribute that is
found on some surface object would override the global isoparametric direction’s setup of strokes as is
set via the ’d’ option.
See also the illustrt, izebra, lineshad, and irit2ps tools.
18
IZebra - Simple zebra style, parallel curve based rendering
18.1
Introduction
Izebra is a filter that processes IRIT data files into a 2D striped, zebra style illustration that gives the
user an illusionary depth cue. The output is also an IRIT data file in the form of freeform curves.
Izebra can be used to make simple yet nice art illustrations of geometry that is based on a specific style
inspired by the artist Victor Vasarely.
Izebra employs a Z buffer to determine the density and warping of the stripes. Output of izebra
can be piped into the irit2ps postscript postprocessor.
See Figure 123 for output examples which use this tool.
18.2
Command Line Options
IZebra [-o OutName] [-m] [-O ImgOper] [-F PolyOpti FineNess] [-u]
[-I NumIters] [-Z ZbufSize] [-B CbcBspSize] [-D DataSrf]
[-A StripeAngle] [-b] [-s Stripes] [-S ZScale] [-d ZInitDepth]
[-z] DFiles
• -o OutName: Name of output file. Default is stdout.
• -m: More talkative mode. Prints processing information.
• -O ImgOper: By default, the Z buffer is employed directly. However, once the Z buffer is fully
evaluated and before beginning the stripes processing, one can apply a filter to the Z map of the
Z buffer. The filter can be a first order Roberts derivative if ”-O 1”, a second order Laplacian if
”-O 2”, or an inverted depth if ”-O 3”.
IRIT Solid modeler
G. Elber
296
Figure 123: Examples of the use of the izebra illustration tool toward line art illustrative drawings. On
the left, the Utah teapot is rendered, while on the right, a chess piece, a pawn, is portrayed.
• -F PolyOpti FineNess: Optimality of polygonal approximation of surfaces. See the variable
POLY APPROX OPT for the meaning of FineNess. Default is 0 and 20.0 (no optimal sampling
with fineness of 20.0 (real number)).
• -u: Forces a unit matrix. That is, input data are not transformed at all.
• -I NumIters: Puts a bound on the number of iterations in the numerical processing stage.
• -Z ZbufSize: ZbufSize sets the size of the (square) Z buffer to set.
• -B CbcBspSize: Sets the mesh size of the constructed uniform cubic B-spline grid, if no data
surface is specified by ’-D’.
• -D DataSrf: If specified, provides the name of the uniform cubic B-spline to load and warp.
Overrides the ’-B’ option.
• -A StripeAngle: Sets the angle of the stripes with respect to the horizontal line, in degrees.
• -b: If set, generates a binary IRIT data file that holds the stripes. Otherwise, an IRIT text file
will be created.
• -s Stripes: If set, prescribes the number of strips to extract as iso parametric curves of the
warped B-spline surface. Otherwise, the warped B-spline surface itself is dumped out.
• -S ZScale: A relative factor to control the effect of the depth on the warping amount. This
should be around one.
• -d ZInitDepth: By default, the Z buffer is initialized to a depth of zero which amounts to no
warping of the B-spline surface. Here is a proper way to prescribe a different background depth
(which will cause warping in the surface).
IRIT Solid modeler
G. Elber
297
• -z: Print version number and current defaults.
18.3
Usage
Izebra is a simple stripes art illustration tool that generates stripes that follow a warped B-spline
surface as its isoparametric curves. It processes the given geometry, such as surfaces, into a Z map
of a Z buffer and warps a B-spline surface that is placed over it, with a warping amount that is a
function of the locally detected depth. IZebra dumps out stripes geometry that makes nice illusionary
illustrations. IZebra is geared mainly toward its use with irit2ps to create postscript illustrations. Here
is a simple example:
izebra -m -Z 500 -B 150 -I 10 -F 0 100 -A 140 -S 0.35 pawn.itd |
irit2ps -f 0 300 -u -B -0.45 -0.75 0.65 0.75 -W 0.004 -I 0:250 - > pawn.ps
creates striped illustrations of a pawn chess piece, with the aid of a Z-buffer of size 500 by 500, a
uniform cubic B-spline surface with mesh size of 150 by 150, polygonal fineness of 100 for the surface of
the pawn, rotation of stripes of 140 degrees and Z scale factor of 0.35. Ten iterations will be conducted
during the numerical processing of the data. The output of izebra is piped by the irit2ps filter to
postscript that extracts 250 isoparametric curves out of the dumped warped surface and sets the width
of the strokes to be 0.004. Figure 123 (a) shows the result of this example.
Here is another example:
izebra -m -Z 500 -B 200 -I 10 -F 0 100 -A -90 -S 0.4 teapot.itd |
irit2ps -f 0 200 -u -B -0.55 -0.35 0.55 0.35 -W 0.007 -I 0:150 - > teapot.ps
creates striped illustrations of the Utah Teapot, with the aid of a Z-buffer of size 500 by 500, a uniform
cubic B-spline surface with mesh size of 200 by 200, polygonal fineness of 100 for the surface of the
teapot, rotation of stripes of -90 degrees and Z scale factor of 0.4. Ten iterations will be conducted
during the numerical processing of the data. The output of izebra is piped by the irit2ps filter to
postscript that extracts 150 isoparametric curves out of the dumped warped surface and sets the width
of the strokes to be 0.007.
Figure 123 (b) shows the result of this example.
See also the illustrt, aisoshad, lineshad, and irit2ps tools.
19
19.1
LineShad - Simple line illustration filter
Introduction
Lineshad is a filter that processes IRIT data files of freeform shapes and dumps out modified IRIT
data files in the form of short univariate strokes. Lineshad can be used to make simple yet nice line
art illustrations of geometry that is based on arbitrarily stroked curves on the surfaces.
Lineshad employs a simple shader to determine the density of the isoparametric strokes as well as
the thickness etc. Output of lineshad can be piped into the irit2ps postscript postprocessor.
See Figure 124 for output examples using this tool.
19.2
Command Line Options
lineshad [-o OutName] [-m] [-F PolyOpti FineNess] [-R RelStepSize]
[-f PolyOpti SampTol] [-r RndrMdl] [-c CosPwr] [-s SdrPwr]
[-i Intensity] [-l Lx Ly Lz] [-v Vx Vy Vz] [-w Width]
IRIT Solid modeler
G. Elber
298
Figure 124: Examples of the use of the lineshad illustration tool to line art illustrative drawing using
isoparametric curves. On the left, silhouettes are emphasized, while on the right, a light source above
and to the right is placed using a cosine shader.
[-d Density] [-t SrfZTrans] [-S WidthScale] [-T Texture]
[-Z ZbufSize] [-b] [-z] DFiles
• -o OutName: Name of output file. Default is stdout.
• -m: More talkative mode. Prints processing information.
• -F PolyOpti FineNess: Optimality of polygonal approximation of surfaces. See the variable
POLY APPROX OPT for the meaning of FineNess. Default is 0 and 20.0 (no optimal sampling
with fineness of 20.0 (real number)).
• -R RelStepSize: Relative control (default to 1.0) on the step size taken during the numerical
marching on the surfaces in the different strokes’ patterns.
• -f PolyOpti SampTol: Controls the method used to approximate curves into polylines. If
PolyOpti == 0, equally spaced intervals are used. For PolyOpti == 1, SampTol (real number)
specifies the maximal allowed deviation tolerance of the piecewise linear approximation from the
original curve. Default is 0 64 (uniform sampling with 64 samples).
• -r: Selects the rendering model of the shader as follows:
1. Dumps only the uniform point distribution.
2. Cosine shader, diffuse only, light source regular.
IRIT Solid modeler
G. Elber
299
3. Cosine shader, diffuse only, light source as two lights from opposite directions.
4. Cosine shader, has specular term, light source regular.
5. Cosine shader, has specular term, light source as two lights.
6. Shader emphasizing the silhouette areas of the model.
7. Shader estimating distance decay from a point light source.
• -c CosPower: Controls the cosine shader’s power.
• -s SdrPower: Controls the shader’s relative influence. -i Intensity: Controls the global density
of the constructed line art. The larger Intensity is, the denser the drawing becomes.
• -l Lx Ly Lz: Sets the light source position/direction.
• -v Vx Vy Vz: Sets the viewing direction; typically, the Z axis.
• -w Width: Sets the width of the generated strokes.
• -d Density: Relative control (default to 1.0) of the density of the uniform point distribution
from which the strokes are developed.
• -t SrfZTrans: Amount of created line strokes in Z to translate, in order to prevent Z from
fighting with the rendered object itself.
• -S WidthScale: Controls the relative variance of the width of the strokes in variable width
strokes.
• -T Textures: Selects the pattern of the strokes. Texture can be one of:
1. ”isoparam[,0,1,2w]”: Isoparametric curves will be created in a similar way to the aisoshad
tool. Following the ”isoparam” string, one can optionally specify the isoparametric direction
as 0, 1 or 2 for U, V, or both, and a second ’w’ character for optional variable width. This
option extracts exact isoparametric curves from the given surface.
2. ”wood[,Dx,Dy,Dz]”: A strokes’ style following layers of wood will be used. Optionally, a
direction normal to the layers can be specified, with a default being the Z axis.
3. ”vood[,Ry,Rz]”: A variation on the wood texture, this time with a layered orientation set
via two rotation angles around Y and Z.
4. ”isomarch[,0,1,2]”: Similar to ”isparam” but numerically march on the surface in the
isoparametric direction. Again, 0, 1, or 2 stands for U, V, or both isoparametric directions.
5. ”silhouette[,t,n,tn]”: Extract strokes emphasizing the silhoeutte areas from the given
viewing direction. Strokes can be extracted in the direction of the surface normal near the
silhouette area if option ”,n” is given, tangent along the surface if ”,t”, or both if ”,tn”.
6. ”iTexture”: Employ a raster image as a texture image on the surface with the gradient
of the image serving as the strokes direction. The name of the image itself (must be in urt
rle format) is expected in a ”iTexture” attribute on the specific object.
7. ”curvature[,0,1,2]”: Develop strokes along lines of curvatures. Strokes are developed
along the minimal curvature if ”,0”, the maximal curvature if ”,1”, and both if ”,2”.
8. ”CurveStroke”: An XY curve object is expected as a ”CurveStroke” attribute on the
same object and serves as a specification of motion in the parametric space of the surface
for each given point.
IRIT Solid modeler
G. Elber
300
• -Z ZbufSize: ZbufSize sets the size of the (square) Z buffer to set.
• -b: If set, generates a binary IRIT data file that holds the strokes. Otherwise, an IRIT text file
will be created.
• -z: Print version number and current defaults.
19.3
Usage
lineshad is a simple line art illustration tool that generates strokes that follow the isoparametric curves.
It processes freeform geometry such as surfaces, and dumps geometry with attributes that makes nice
line illustrations. lineshad is geared mainly toward its use with irit2ps to create postscript illustrations.
Here is a simple example:
lineshad -Z -500 -F 0 50 -T "isoparam" -d 0.5 -c 10 -r 2 wglass.itd view.imd |
irit2ps -W 0.002 -u - > wglass3.ps
creates line art illustrations of a wine glass wglass.itd with hidden strokes removal via a Z-buffer
of size 500 that will be displayed on screen, polygonal fineness of 50 for the surface of the glass, shader
that employs isoparametric curves, relative density of distribution of 0.5, and cosine power of 10 of the
cosine shader number 2. Figure 124 (a) shows the result of this example.
Here is another example:
lineshad -Z -500 -F 0 50 -T "wood,1,1,1" -d 6 -c 10 -r 2 wglass.itd view.imd |
irit2ps -W 0.002 -u - > wglass4.ps
creates line art illustrations of a wine glass wglass.itd with hidden strokes removal via a Z-buffer
of size 500 that is allocated off-line in core memory, polygonal fineness of 50 for the surface of the glass,
a light source at (1, 1, 1) for the wood strokes’ style, relative point distribution of 6, and a cosine power
of 10 for the cosine shader number 2. Figure 124 (b) shows the result of this example.
Transparent objects, or objects with the ”transp” attribute, will generate strokes as regular surfaces
but will not participate in the hidden strokes removal. A string ”itexture” attribute is expected
if ”itexture” strokes’ style is used. A curve object as the ”CurveStroke” attribute is expected if
”CurveStroke” is employed. One can override the strokes’ style as it is set via the ’-T’ command
line option by setting an ”lTexture” string attribute with the prefered strokes’ style of this object.
One can modify the relative density of some specific object by placing a real number attribute named
”PtsDensity” on the object.
See also the illustrt, izebra, aisoshad, and irit2ps tools.
20
20.1
ihidden - Hidden Curve Removing Program
Introduction
ihidden is a program to remove hidden curves from a given surface model. Only freeform objects are
processed in ihidden. See Figure 125 for some output examples which use this tool.
The program performs 3 passes over the input:
1. Preprocesses and extracts the different curves in a scene, boundary curves, silhouette curves,
isoparametric curves and discontinuity curves.
2. Solves for all the intersections of the different curves in the parametric space, and at that point
splits the curves into curve segments.
IRIT Solid modeler
G. Elber
301
Figure 125: Some examples of the use of hidden curve removal tool, ihidden, to remove hidden curves.
3. Applies a visibility test to each segment of curve.
This program can handle non self interesecting surfaces only. Further, surfaces that intersect other
surfaces and are not properly trimmed into a model are likely to result in the wrong answer as well.
The output of ihidden is in the form of curves. It is a regular IRIT data file that can be viewed
using any of the display devices, for example.
20.2
Command Line Options
ihidden [-q] [-H] [-M] [-I #UIso[:#VIso[:#WIso]]] [-d] [-s Stage] [-b]
[-o OutName] [-t Tolerance] [-Z ZBufSz] [-T AnimTime] [-z] DFiles
• -q: Quiet - provides no information on the progress if TRUE.
• -H: Dumps both visible lines and hidden curves as separated objects. Hidden curves will be
dumped using a narrower line width.
• -M: Force conversion of (active) curves to be monotone.
• -I #UIso[:#VIso[:#WIso]]: Specifies the number of isolines per surface/trivariate, per direction. If #VIso is not specified, #UIso is used for #VIso as well and so on.
• -d: Add to also display C1 discontinuity curves.
• -s: Specifies the step at which to stop this process, where step 3, as described above, will complete
the entire hidden curve removal process and is the default.
• -b: If set, generates a binary IRIT data file that holds the strokes. Otherwise, an IRIT text file
will be created.
IRIT Solid modeler
G. Elber
302
• -o OutName: Name of output file. Default is stdout.
• -t Tolerance: Tolerance of computation.
• -Z ZBufSz: Size of the Z buffer in the visibility testing process.
• -T AnimTime: If the data contains animation curves, evaluate and process the scene at time
AnimTime.
• -z: Prints version number and current defaults.
Some of the options may be turned on in ihidden.cfg. They can then be turned off in the command
line as ’-?-’.
20.3
Configuration
The program can be configured using a configuration file named ihidden.cfg. This is a plain ASCII file
you can edit directly and set the parameters according to the comments there. ’ihidden -z’ will display
the current configuration as read from the configuration file.
The configuration file is searched in the directory specified by the IRIT PATH environment variable.
For example, ’setenv IRIT PATH /u/gershon/irit/bin/’. If the IRIT PATH variable is not set, the
current directory is searched.
20.4
Usage
As this program is not interactive, usage is quite simple, and the only control available is using the
command line options.
The images in Figure 125 were created using the following commands:
ihidden ih_glass.itd | irit2ps -d -W 0.02 - > ih_glass.ps
ihidden -H ih_wiggl.itd | irit2ps -d -W 0.02 - > ih_wiggl.ps
If a certain surface should contain more or less isoparametric curves, a relative change could be
applied to some specific object via the ”num of isolines” attribute. If a ”transp” attribute is found on
some object, it will generate all the curves but will not affect the visibility (i.e. be fully transparent).
See also Poly3d-h.
21
21.1
Irender - Simple Scan Line Renderer
Introduction
irender is a program to render IRIT scenes into images. It is a software based Z buffer that is able
to create images in few formats. Several of its features includes parametric and volumetric texture
mapping, shadow computations, transparency and antialiasing.
Freeform objects are preprocessed into polygons with controlled fineness. See Figure 126 for some
output examples of using this tool.
IRIT Solid modeler
G. Elber
303
Figure 126: Some examples of the use of irender scan convertion tool to render images of IRIT scenes.
Highlights can be seen in the molecule image while the glass is rendered transparent.
21.2
Command Line Options
irender [-v] [-s XSize YSize] [-Z Znear Zfar] [-a Ambient] [-b R G B]
[-B] [-F PolyOpti FineNess] [-f PolyOpti SampPerCrv]
[-M Flat/Gouraud/Phong/None] [-p PtRad] [-P WMin [WMax]] [-S]
[-T] [-t AnimTime] [-N ClrQuant SilWidth [SilR SilG SilB]]
[-A FilterName] [-d] [-l] [-V] [-n] [-i rle/ppm{3,6}/png]
[-o OutName] [-z] files
• -v: Verbose mode. Prints informative messages as it progresses.
• -s XSize YSize: Sets the size of the output image, in pixels. Default to 512x512.
• -Z Znear Zfar: Sets the near and far cliping planes with default of no clipping.
• -a Ambient: Sets the ambient lighting fraction. Between zero (no ambient lighting) and one.
Default to 0.2.
• -b R G B: Sets the background color. Each of thre R,G,B colors is an integer value between
zero and 255. Default to black.
• -B: Apply back face culling. Somewhat faster, but only correct for closed objects. Default is no
back face culling.
• -F PolyOpti FineNess: Optimality of polygonal approximation of surfaces. See the variable
POLY APPROX OPT for the meaning of FineNess. Default is 0 and 20.0 (no optimal sampling
with fineness of 20.0 (real number)).
IRIT Solid modeler
G. Elber
304
• -f PolyOpti SampTol: Controls the method used to approximate curves into polylines. If
PolyOpti == 0, equally spaced intervals are used. For PolyOpti == 1, SampTol (real number)
specifies the maximal allowed deviation tolerance of the piecewise linear approximation from the
original curve. Default is 0 64 (uniform sampling with 64 samples).
• -M Flat/Gouraud/Phong/None: Selects the shader to be used. Default to Phong if has
normals of vertices, Flat if no normals are found. The None options exactly paints the objects
with the given color, applying no shader.
• -p PtRad]: Width of rendered points (as spheres).
• -P WMin [WMax]: Width of rendered polyline, in world units. If only WMin is specified, all
polylines are set to have WMin width. Otherwise, if WMax is prescribed as well, polylines’ width
is set to be proportional to their depth with WMax is the width of closest polyline and WMin
the farest polyline. Polylines and curves will be ignored without the setting of this option.
• -S: Enable shadow computation. No shadows will be rendered without -S. The is no shadow
support for this release of irender.
• -T: Enable transparency computation. No transparent object will be processed without -T.
• -t AnimTime: If the data contains animation curves, evaluate and process the scene at time
AnimTime.
• -N ClrQuant SilWidth [SilR SilG SilB]: Requests cartooN style NPR rendering. Two
effects could be activated using this option: the colors could be quantized into ClrQuant levels
or, alternatively a value of zero for ClrQuant denotes no quantization. Also, open boundaries
and silhouettes could be rendered if SilWidth ¿ 0.0 at SilWidth polyline width and optional
color SilR SilG SilB.
• -A FilterName: Selects an antialiasing filter. FilterName can be one of ’none’, ’box’, ’triangle’,
’quadratic’, ’cubic’, ’catrom’, ’mitchell’, ’gaussian’, ’sinc, and ’bessel’. Default is ’none’.
• -d: Output will be in the form of Z depth instead of a color image. Output will be 32 bits depth
instead of RGBA.
• -V: Output will be in form of visibility map: a map in model’s UV coordinates that represents
the visibility of the model from the specified rendering direction.
• -n: Reverses the normals of vertices and planes, globally.
• -i rle/ppm{3,6}/png: Selects output image type. Currently the Utah Raster Toolkit’s (URT)
rle format is being supported as well as the PPM and PNG formats. PPM can be either P6 or
P3 style.
• -o OutName: Name of output file. By default the output goes to stdout.
• -z: Prints version number and current defaults.
Some of the options may be turned on in irender.cfg. They can be then turned off in the command
line as ’-?-’.
IRIT Solid modeler
21.3
G. Elber
305
Configuration
The program can be configured using a configuration file named irender.cfg. This is a plain ASCII file
you can edit directly and set the parameters according to the comments there. ’irender -z’ will display
the current configuration as read from the configuration file.
The configuration file is searched in the directory specified by the IRIT PATH environment variable.
For example, ’setenv IRIT PATH /u/gershon/irit/bin/’. If the IRIT PATH variable is not set, the
current directory is searched.
21.4
Usage
As this program is not interactive, usage is quite simple, and the only control available is using the
command line options.
The images in Figure 126 were created using the following commands:
irender -s 350 350 -b 255 255 255 -S -A sinc -i rle lightsrc.itd
molecule.itd view_mat.itd > molecule.rle
irender -s 700 700 -F 0 64 -M Flat -b 255 255 255 -T -A sinc -i rle
glass.itd view_mat.itd > glass.rle
21.5
Advanced Usage
One can specify several attributes that affect the way the scene is rendered. The attributes can be
generated within IRIT. See also the ATTRIB IRIT command.
Surface color is controlled on two levels. If the object has an RGB attribute, it is used. Otherwise,
a color as set via the IRIT COLOR command. If a vertex of a poly object has an RGB attribute it
will overwrite the object’s RGB color for that vertex.
If a certain surface should be finer/coarser than the rest of the scene, one can set a ”resolution”
attribute which specifies the relative FineNess resolution of this specific surface. Further, ”u resolution”
and ”v resolution” might be similarly used to set relative resolution for the u or v direction only. The
”crv resolution” attribute controls the relative fineness of curves as polylines. The ”num of isolines”
attribute controls the relative number of isoparametric curves. Points are rendered as small spheres
with size (radius) that is controlled by the ”width” attribute found on the object or the radius that is
specified by the ’-p’ option as default size.
Objects are rendered with no shading if ”NoShading” attribute is found on them.
Example:
attrib( Ball, "rgb", "255,0,0" );
color( Sphere, white );
The cosine exponent of the phong shader can be set for a specific object via the SRF COSINE
attribute, with 128 as default value. An object can affect its diffuse and specular components via the
DIFFUSE and SPECULAR real attributes, with 0.4 as default value.
Example:
attrib( Ball, "srf_cosine", 16 );
attrib( Ball, "diffuse", 0.7 );
attrib( Ball, "specular", 1.0 );
G. Elber
IRIT Solid modeler
306
An object can be drawn transparent instead of opaque, if it has a ”transp” attribute. A transparent
value of one denotes a completely transparent object, while a value of zero means a completely opaque
object. Transparent objects will be rendered as such if and only if the ’-T’ command line option is set.
Example:
attrib( final, "transp", 0.5 );
An object can have its silhouettes (and boundary curves) rendered if a real ”SilWidth” attribute
with width larger than zero is specified. ”SilColor” will then set the color of the rendered outline
curves. See also ’-N’ which sets this option globally.
Several types of texture mapping are supported. Parametric texture may be attached to a parametric surface where the prescribed image is mapped onto the rectangular parametric domain of the
surface.
The parametric texture may be applied with the following options:
’D’ x y z
’O’ x y z
’S’ Su Sv {Sw}
’A’ a
’T’ TextureType
Vector that will be rotated to Z along with the
texture coordinates. Applies to ’T’ 1, 2 or 3.
Default to the Z axis.
a point to which that texture Origin will be translated.
Applies to ’T’ 1, 2 or 3. Default to origin.
Scales the coordinates in u and v. Scale
factors of 1.0 would cover the entire surface
once. Default to scale factors of 1.0. If Sw is
specified for a polygonal object, each polygonal is
locally scaled based on its maximal projection on
one of the main, XY XZ or YZ, planes.
If (Su = Sv = 0) for freeforms, the texture coords
are undergoing no scale at all (assuming image domain
of zero to one in all axes).
Angle of rotation in degrees of texture map with
respect to main axis. Applies to ’T’ 1, 2 or 3.
Default to no rotations.
with 0 denotes regular parametric texture,
1 denotes spherical coordinates,
2 denotes spherical bijective coordinates,
3 denotes cylinderical coordinates,
4 denotes planar coordinates.
Regular parametric texture employs the inherited surface parametrization of the freeform surface
and can only be used on parametric surfaces.
Spherical, cylinderical, and planar coordinate transformations are useable for all types of geometry
from polygons to freeform surfaces and is fairly straightforward with the origin as set by ’O’ being the
center of the mapping while the direction set by ’D’ controls the north pole of the sphere, the axis of
the cylinder, and the normal of the plane. Finally, the angle set by ’A’ rotates the texture around this
’D’ prescribed axis.
The spherical bijective mapping is more complex. An object identical to the textured object should
be found as an ”PTextureBijectObj” that contains the identical topology of the original object. The
original object must be genus zero non convex, while the attribute object must be a genus zero convex
G. Elber
IRIT Solid modeler
307
object with the origin as set via ’O’, inside this convex object. It is likely that both the original object
and its attribute object will be a polygonal object. Both objects must contain triangles only.
A bijective mapping is then conducted from every point on the original non convex object to the
convex attribute object and from there through spherical mapping to the texture map.
Example:
attrib(
attrib(
attrib(
attrib(
Srf1,
Srf2,
Srf3Triangs,
Srf3Triangs,
"ptexture", "checker.ppm, S 1 1, A 45" );
"ptexture", "checker.ppm, S 1 3, T 1, O 1 1 1, D 0 0 1" );
"ptexture", "checker.ppm, S 1 2, T 1, O 1 1 1, D 0 0 1" );
"PTextureBijectObj", Srf3ConvexTriangles );
Srf1 is a parametrically textured map using spherical mapping, Srf2 is a parametrically textured
map using cylinderical mapping and Srf3Triangs is a parametrically textured map using spherical
bijective mapping and Srf3ConvexTriangles is the convex topologically equivalent object.
The program will automatically detect the image type according to the file’s type. Note that regular
parametric texture may be applied to parametric surfaces only, whereas the spherical, cylinderical and
planar parametric textures may be used on all types of geometry. Depending upon the way irender is
compiled, texture images could be in ppm format (always), or gif, png, and rle. If the image has an
alpha channel (fully supported in png and rle and binary supported in gif images via its transparent
color) it is honored if transparency (-T) is activated.
A second type of texture mapping can be applied to all geometric objects. Herein, a procedural
texture mapping is employed. The currently supported textures are
camouf
checker
chocolate
contour
curvature
marble
ncontour
orange
wood
punky
Camouflage style
Checker style
Chocolate chips style
Parallel plane contouring
Gaussian/Mean etc. curvature
Marble style
Constant normal angle to major axis
Bump mapping orange style
Wood style
Colorful punky style
A second parameter that must be provided for procedural textures is the scaling factor of the
texture, which can be either one parameter of uniform scaling or a vector of three coefficients for
scaling in x, y, and z. For contour style, the scale denotes the spacing of the contouring planes in
X, Y and Z. For ncontour style, the scale also denotes the spacing of the adjacent constant normal
contours. Related attributes are ”texture color” and ”texture width” that support the color and the
width of the textured strokes.
Example:
attrib( Obj1, "texture", "marble, 2" );
attrib( Obj2, "texture", "wood, 1 0.5 2.5" );
which sets Obj1 to have a marble procedural texture with a uniform scaling factor of 2 and a wood
texture for Obj2 with scaling factors of (1, 0.5, 2.5) in x, y, and z.
In addition, the appearance of each procedural texture can be controlled by optional parameters
which are different for each texture. Each texture parameter is recognized by a letter; to enter a
G. Elber
IRIT Solid modeler
308
parameter, add to the attribute string the paramter letter followed by the value or values. Each
parameter should be separated by a comma.
Example:
attrib( Obj1, "texture", "wood, 2, b 0.3, o 5 5 5" );
sets Obj1 to have a wood procedural texture with a scaling factor of 2, a Brightness level of 0.3,
and the Origin point at (5,5,5).
The optional parameters are:
checker:
’z’ x y z
’o’ x y z
’b’ x
’CP’ f
’C1’ r g b
’C2’ r g b
’C3’ r g b
a vector to which the Z axis will be rotated.
a point to which the Origin will be translated.
the brightness of the checker color scaling,
should be between 0 and 1.
To force a 2D checker plane orthogonal to the
vector that is specified via the ’z’ option.
A second optional color for the checkerboard.
A third optional color for the checkerboard,
used in the second layer of the checker volume.
A fourth optional color for the checkerboard,
used in the second layer of the checker volume.
chocolate:
’W’ w
’d’ x
the ’width’ of chocolate piece (zero to half).
the ’depth’ of the bumps on the bump-mapping.
contour:
’W’ w
’C’ r g b
the ’width’ of contour.
the color of the contour in RGB betweeo zero
and one (”C 1 1 1” fully is white).
curvature:
The curvature texture has no optional parameter, but the first scale parameter has a special meaning. A scale of
0
>0
<0
Paints convex regions in red, concave in
green, and saddle-like in yellow.
Paints the Gaussian curvature in convex regions
in red to magenta, in concave regions in yellow
to green, and in saddle-like in cyan to blue.
Paints the Mean curvature in positive mean
curvature regions in yellow to green and in
negative Mean curvature in red to magenta.
G. Elber
IRIT Solid modeler
309
If this first scale parameter is non zero, its absolute value is used to modify the blending speeds
between the different colors.
marble:
’z’ x y z
’o’ x y z
’t’ f s
’f’ x
a vector to which the Z axis will be rotated.
a point to which the Origin will be translated.
the scale of the turbulence noise, and the
factor to multiply that noise.
the ’frequency’ of the marble layers.
ncontour:
’W’ w
’C’ r g b
the ’width’ of contour.
the color of the contour in RGB betweeo zero
and one (”C 1 1 1” fully is white).
orange:
’d’ x
the ’depth’ of the bumps on the bump-mapping.
wood:
’z’ x y z
’o’ x y z
’b’ x
’c’ f s
’w’ n f
’f’ x
’r’ f s
a vector to which Z axis will be rotated.
a point to which the Origin will be translated.
the brightness of the wood color scaling,
should be between 0 and 1.
the scale of the noise in the wood center axis
and the factor by which to multiply that noise.
the number of angles to sample noise when creating
distortion in the circle shape of the wood
cylinders, and the factor by which to multiply that noise.
the ’frequency’ of the wood cylinders.
the scale of the wood-fibers noise, and the
factor by which to multiply that noise.
punky:
’b’ x
the brightness/saturation of the punky color.
More Examples:
attrib( Obj1, "texture", "marble, 2, t 3.0 12.0, f 7.0" );
attrib( Obj2, "texture", "contour, 1 0.5 2.5, W 0.004, C 1 1 0" );
sets Obj1 to have a marble procedural texture with a uniform scaling factor of 2, and new turbulance
and frequency factors. This also sets a contouring texture for Obj2 with scaling factors of (1, 0.5, 2.5)
in x, y, and z, in yellow color and width 0.004.
G. Elber
IRIT Solid modeler
310
In addition, a scalar surface spanning the same parameteric domain as an original surface may
be used as a texture mapping function. Herein, the scalar function texture is evaluated at each UV
parameter value and is mapped through a color scale to yield the output color. This type of texture
is useful for stress maps or analysis maps on top of freeform surfaces. Several related attributes are
supported: ”stexture scale” which prescribes the color scale image (only its first column is employed),
and ”stexture bound” that sets the domain that will be clipped to the min max values. Funally,
”stexture func” can hold the functions ”sqrt” or ”abs” to be applied to the evaluated surface value.
Example:
attrib(
attrib(
attrib(
attrib(
Srf,
Srf,
Srf,
Srf,
"stexture", scrvtr( Srf, P1, off ) );
"stexture_scale", "color_scale.ppm" );
"stexture_func", "sqrt" );
"stexture_bound", "0.0 100.0" );
where scrvtr computes a scalar field to Srf that represents the sum of the squares of the principle
curvatures. The evaluated scalar texture surface’s value is piped through a sqrt function. The first
column of the image of color scale.ppm is used to set the coloring scale for curvature bounds values
between 0.0 and 100.0.
Both ”stexture scale” and ”stexture bound” are optional. The default color scale maps the min/max
values from blue to red through green. The default scalar surface texture bound is computed as the
extreme values of the ”stexture” surface.
While the program has a default for lighting which is two light sources at opposite directions at (1,
1, 1) and (-1, -1, -1), one can overwrite this default. A POINT TYPE object with LIGHT SOURCE
attribute denotes a light source. If irender detects one or more light sources in the input stream, the
default light sources are not created. Two types of light sources may be prescribed, a parallel at infinity
or a point at a finite distance light source, distinguished by a TYPE attribute of either POINT POS
or POINT INFTY. A point light source can be colored; an RGB attribute will set its (diffuse) color.
Specular color defaults to white but can be set via the ”SpecRGB” attribute. Ambient color defaults
to black but can be set via the ”AmbtRGB” attribute. A point light source will cast shadows, if and
only if, it has a SHADOW attribute (one needs to apply the ’-S’ command line option as well for
rendering shadows). Finally, one can construct two mirrored light sources at opposite directions if the
TWOLIGHT attribute is added to the light source object.
Example:
Light1 = point(
attrib( Light1,
attrib( Light1,
attrib( Light1,
attrib( Light1,
0, 0, 10 );
"light_source", on );
"shadow", on );
"rgb", "255,0,0" );
"type", "point_pos" );
Light2 = point(
attrib( Light2,
attrib( Light2,
attrib( Light2,
1, 1, 1 );
"light_source", on );
"twolight", on );
"type", "point_infty" );
constructs two lights sources with Light1 with red color positioned at (0, 0, 10) and casting
shadows, while Light2 will create two mirrored white parallel lights sources in the direction of (1, 1,
1) and (-1, -1, -1), as its irender’s default.
Visibility Maps
IRIT Solid modeler
G. Elber
311
if the -V option is selected, the output will be a visibility map. Visibility maps are created in the
model’s UV (texture) space and are composed of 4 colors:
• White: if pixel isn’t mapped. I.e. the model UV’s map does not cover this pixel
• Green: if the pixel is a (UV location of a Eculidean) visible location.
• Red: if pixel is (UV location of a Eculidean) invisible location.
• Yellow: if large errors are detected while calculating pixel’s visibility. This indeterministic result
is due to almost vertical polygns, typically.
Tips for geting higher quality visibility map: 1. Use the -s option for larger output resolution. 2.
Use the -F option for finer polygonal sampling of surfaces.
Controlling the output can also be done by object attributes, as follow:
Use the ’tan angle’ property to change the yellow area of output. A rendered triangle will be colored
in yellow if it’s surface is close to being vertical, or tangent to the view, z, axis. Change the ’tan angle’
property to get maximal value of normalized scalar product of triangle normal and z axis. Below that
value the triangle will be colored yellow. Default value: 0.1. Example:
attrib( Obj1, "tan\_angle", 0.1 );
Use ’critic ar’ to change the unmapped area of output. Poor aspect ratio of triangles leads to major
errors. Aspect ratio is defined as the ratio of largest edge by the smallest edge of triangle. Any triangle
with aspect ratio larger than ’critic ar’ will not be mapped. Default value: 20.
attrib( Obj2, "critic_ar", 20 );
22
3DS2Irit - AutoCad 3DS Data To IRIT file filter
Converts ’.3ds’ data files to ’.itd’ IRIT data files.
22.1
Command Line Options
3ds2Irit [-m] [-c ClrScale] [-o OutName] [-b] [-z] 3DSFile
• -m: More information flag.
• -c ClrScale: Scaling the color values (intensity control).
• -o OutName: Name of output file. By default the output goes to stdout.
• -b: If set, generates a binary IRIT data file that holds the strokes. Otherwise, an IRIT text file
will be created.
• -z: Print version number and current defaults.
22.2
Usage
3ds2irit converts Autocad’s 3DS data files into IRIT data files. The current version provides only
partial support, mainly due to lack of documentation examples on the dxf format and the convoluted
way freeform surfaces are saved.
Example:
3ds2irit file.3ds > file.itd
IRIT Solid modeler
23
G. Elber
312
Dat2Bin - Data To Binary Data file filter
23.1
Command Line Options
dat2bin [-t] [-z] {[-c QuantVal]} DFiles
• -t: Dumps data to stdout as text instead of binary. -z: Print version number and current defaults.
-c: Optional option that is available only if compressed binary files are supported. Dumps data
to stdout as compressed binary file with a quanitization level of QuantVal.
23.2
Usage
The user may sometimes wish to convert .itd data files into a binary form, for example, for fast loading
of files with large geometry. Binary files can be somewhat larger and are unreadable in editors but are
much faster to load. A binary file must have a ’.ibd’ file type.
Example:
dat2bin b58polys.itd > b58polys.ibd
dat2bin -t b58polys.ibd | more
The above converts a text file b58polys.itd into a binary file b58polys.ibd and shows the content of
the binary file by converting it back to text. At this time data through pipes must be in text. That is,
the following is illegal:
dat2bin b58polys.itd | xglmdrvs It should be remembered that the binary format is not documented and it might change in the
future. Moreover, it is machine dependent and can very well may be unreadable between different
platforms.
24
Dat2Irit - Data To IRIT file filter
Converts ’.itd’ and ’.ibd’ data files to ’.irt’ IRIT scripts. Optionally, if compressed binary files are
supported, also handle ’.icd’ compressed data files.
24.1
Command Line Options
dat2irit [-z] DFiles
• -z: Print version number and current defaults.
24.2
Usage
Users may sometimes wish to convert .itd data files into a form that can be fed back to IRIT - a ’.irt’
file. This filter does exactly that.
Example:
dat2irit b58.itd > b58-new.irt
IRIT Solid modeler
25
G. Elber
313
Dxf2Irit - DXF (Autocad) To IRIT filter
Converts Autocad’s, DXF data files into IRIT data files.
25.1
Command Line Options
dxf2irit [-m] [-f] [-o OutName] [-z] DXFFile
• -m: Provides some more information on the data file(s) parsed.
• -f: Coerces floating end conditions to constructed freeform surfaces. Default is open end conditions.
• -o OutName: Name of output file. By default the output goes to stdout.
• -z: Prints version number and current defaults.
25.2
Usage
dxf2irit converts Autocad’s DXF data files into IRIT data files. The current version provides only
partial support for the conversion of freeform surfaces, mainly due to lack of documentation examples
on the dxf format and the convoluted way freeform surfaces are saved.
Example:
dxf2irit file.dxf > file.itd
26
IGS2Irit - IGES Data To IRIT file filter
Converts ’.igs’ data files to ’.itd’ IRIT data files.
26.1
Command Line Options
IGS2Irit [-m] [-M] [-c] [-a] [-s] [-o OutName] [-b] [-z] IGSFile
• -m: More information flag.
• -M: Even more information flag - dumps all parsed entities.
• -c: Clips trimmed surfaces to the minimal domain as prescribed by the trimming curves.
• -a: Dumps all. Without this flag setting, only top level objects, that are referenced by no other
object, will be dumped out.
• -s: Dumps surfaces only. When set only (trimmed) surfaces are dumped.
• -o OutName: Name of output file. By default the output goes to stdout.
• -b: If set, generates a binary IRIT data file that holds the data. Otherwise, an IRIT text file
will be created.
• -z: Print version number and current defaults.
IRIT Solid modeler
26.2
G. Elber
314
Usage
igs2irit converts IGES data files into IRIT data files.
Example:
igs2irit file.igs > file.itd
27
Iirit23js - IRIT To ThreeJS filter
27.1
Command Line Options
irit23JS [-l] [-4] [-p] [-F PolyOpti FineNess] -i InName -o OutName
[-T] [-t AnimTime] [-z]
• -l: Linear - forces linear (degree two) surfaces to be approximated by a single polygon along
their linear direction. Although most of the time linear direction can be represented exactly
using a single polygon, even a bilinear surface can have a freeform shape (saddle-like) that is
not representable using a single polygon. Note that although this option will better emulate the
surface shape, it will create unnecessary polygons in cases where one is enough.
• -4: Four - Generates four polygons per flat patch. Default is 2.
• -p: for perspective camera, or orthographic camera otherwise.
• -F PolygonOpti FineNess: Optimality of polygonal approximation of surfaces. See the variable
POLY APPROX OPT for the meaning of FineNess. See also -4. Default FineNess is 20.
• -o OutName: Specify the file path to the output file.
• -i InName: Specify the file path to the input file.
• -T: Talkative mode. Prints processing information.
• -t AnimTime: If the data contains animation curves, evaluate and process the scene at time
AnimTime.
• -z: Prints version number and current defaults.
27.2
Usage
Irit23js extracts the relevant data from Irit object files and converts the object’s polygon data to a
format that can be loaded into THREE.js via JSON file (see http://json.org/). The result is an HTML
file that can be used to view the Irit model in various web browsers (Internet Explorer, Google Chrome,
Firefox, Safari, etc), with help from THREE.js, and using WebGL rendering.
Four files are created in all: three with a ’.js’ (JavaScript) extension and one with an ’.html’
extension. Two of the JavaScript files are required in order for the viewer to function properly. The
first is ’irit23js.js’, which is a version of the THREE.js library, and the second is ’iritOC.js’, which is
a THREE.js (Orbit Controls) library that allows the user to pan, orbit, and zoom within the viewer.
These two files can be obtained by downloading the package from the ’download’ link on the three.js
website (see http://threejs.org/). The last JavaScript file is the actual geometry output file that is
written in JSON (JavaScript Object Notation) format, and contains the polygon data for each object.
Polygon data exists in this JSON file as vertices, materials, textures, normals, colors, UVs, and faces
IRIT Solid modeler
G. Elber
315
(refer to https://github.com/mrdoob/three.js/wiki/JSON-Model-format-3 for an explanation of this
formatting). The HTML file allows the user to directly view the model in the browser, as well as
manipulate it with the mouse and arrow keys if so desired.
In order to view the model in a web browser, the files must be uploaded to a website, and all four
of them should be placed in the same web directory. This is the intended use, but if a user would like
to view the model from his/her file system, the HTML file must be opened with Firefox or run locally
through any web browser (IE, Firefox, Chrome, Safari, etc). This restriction is a consequence of the
same-origin policy. A user attempting this second option should take a look at the methods listed on
this page: https://github.com/mrdoob/three.js/wiki/How-to-run-things-locally.
If a model contained a texture in Irit, its image name within irit23js has been modified to end
with a ’.jpg’ extension, if it wasn’t already an image of that type. If the user wishes to see a texture
displayed on the model, the texture image must be placed in the same directory as the above four
output files, and its name must match the one specified in the JavaScript file written in JSON (look
for the ’materials’ property and the ’mapDiffuse’ attribute).
Example:
irit23js -l -F 0 5 -i C:/irit/data/b58.itd -o C:/irit/b58.js
creates b58.js, b58Viewer.html, irit3js.js, and iritOC.js. The model is created with low resolution
(FineNess of 5). At such low resolution, it may very well happen that triangles will have normals ”over
the edge” since a single polygon may approximate a highly curved surface. This problem will not arise
if high fineness is used:
irit23js -l -F 0 30 -i C:/irit/data/b58.itd -o C:/irit/b58.js
creates ir b58.js, ir b58Viewer.html, irit3js.js, and iritOC.js. The model is created with high resolution (FineNess of 30), so it will have smooth curves and surfaces.
27.3
Advanced Usage
One can specify surface qualities for individual surfaces of a model. Several such attributes are supported by irit23js and can be set within IRIT. See also the ATTRIB IRIT command.
Example:
attrib( srf1, "resolution", 2 );
will force srf1 to have twice the default resolution, as set via the ’-F’ flag.
Almost flat patches are converted to polygons. The rectangle can be converted into two polygons
(by subdividing along one of its diagonals) or into four by introducing a new point at the patch center.
This behavior is controlled by the ’-4’ flag, but can be overwritten for individual surfaces by setting
”twoperflat” or ”fourperflat”.
irit23js specific properties are controlled via the following attributes: ”transp” and ”ptexture”. The
value of these attributes must be strings as it is copied verbatim.
Example:
attrib( legs, "transp", "0.3" );
attrib( legs, "ptexture", "wood.jpg,2" );
attrib( table, "ptexture", "marble.jpg" );
An optional scale can be prescribed to textures. In the above example wooden legs’ (that are also
transparent...) texture is selected with a texture scaling factor of 2.
Surface color is controlled on two levels. If the object has an RGB attribute, it is used. Otherwise
a color as set via the IRIT COLOR command is used, if set.
Example:
IRIT Solid modeler
G. Elber
316
attrib( tankBody, "rgb", "244,164,96" );
28
Irit2Dxf - IRIT To DXF (Autocad) filter
Converts IRIT data files into Autocad’s, DXF data files.
28.1
Command Line Options
irit2dxf [-s Scale] [-t Tx Ty Tz] [-i] [-f] [-F PolyOpti FineNess]
[-4] [-o OutName] [-T] [-a AnimTime] [-z] DFiles
• -s Scale: Global scaling factor of the converted geometry.
• -t Tx Ty Tz: a Vector of size three of translation factors along the X, Y, and Z axes.
• -i: Shows internal edges as well.
• -f: Dumps freeforms as converted polygonal geometry.
• -F PolyOpti FineNess: Optimality of polygonal approximation of surfaces. See the variable
POLY APPROX OPT for the meaning of FineNess. See also -4.
• -4: Forces four polygons per almost flat region in the surface to polygon conversion. Otherwise
two polygons only.
• -o OutName: Name of output file. By default the output goes to stdout.
• -T: Talkative mode. Prints processing information.
• -a AnimTime: If the data contains animation curves, evaluate and process the scene at time
AnimTime.
• -z: Prints version number and current defaults.
28.2
Usage
irit2dxf converts IRIT data files into Autocad’s DXF data files. The current version provides only
partial support for the direct conversion of freeform surfaces, mainly due to lack of documentation
examples on the dxf format and the convoluted way freeform surfaces are saved. Nonetheless, freeform
surfaces can be converted into polygons using the ’-f’ flag.
Example:
irit2dxf -z -t 1 2 3 -F 0 20 -4 -o file.dxf file.itd
29
Irit2Hgl - IRIT To HPGL filter
Converts IRIT geometry into the HL Graphics Language used by HP’s plotters.
IRIT Solid modeler
29.1
G. Elber
317
Command Line Options
irit2hgl [-t XTrans YTrans] [-I #UIso[:#VIso[:#WIso]]]
[-f PolyOpti SampTol] [-F PolyOpti FineNess] [-M] [-G] [-T]
[-a AnimTime] [-i] [-o OutName] [-z] DFiles
• -t XTrans YTrans: X and Y translation. of the image. Default is (0, 0).
• -I #UIso[:#VIso[:#WIso]]: Specifies the number of isolines per surface/trivariate, per direction. If #VIso is not specified, #UIso is used for #VIso as well and so no.
• -f PolyOpti SampTol: Controls the method used to approximate curves into polylines. If
PolyOpti == 0, equally spaced intervals are used. For PolyOpti == 1, SampTol (real number)
specifies the maximal allowed deviation tolerance of the piecewise linear approximation from the
original curve. Default is 0 64 (uniform sampling with 64 samples).
• -F PolygonOpti FineNess: Optimality of polygonal approximation of surfaces. See the variable
POLY APPROX OPT for the meaning of FineNess. See also -4. This enforces the dump of
freefrom geometry as polygons.
• -M: Dumps the control mesh/polygon as well.
• -G: Dumps the freeform geometry.
• -T: Talkative mode. Prints processing information.
• -a AnimTime: If the data contains animation curves, evaluate and process the scene at time
AnimTime.
• -i: Internal edges (created by IRIT) - default is not to display them, and this option will force
their display.
• -o OutName: Name of output file. By default the name of the first data file from DFiles list is
used. See below on the output files.
• -z: Prints version number and current defaults.
29.2
Usage
Irit2Hgl converts freeform surfaces and polygons into polylines in a format that can be used by HPGL.
Example:
irit2Hgl -M -f 0 16 saddle.itd > saddle.hgl
However, one can overwrite the viewing matrix by appending a new matrix in the end of the
command line, created by the display devices:
x11drvs b58.itd
irit2Hgl -M -f 0 16 b58.itd irit.imd > saddle.hgl
where irit.imd is the viewing matrix created by x11drvs.
IRIT Solid modeler
30
G. Elber
318
Irit2IGS - IRIT To IGES filter
Converts IRIT data files into IGES/IGS data files.
30.1
Command Line Options
Irit2igs [-m] [-o OutName] [-t AnimTime] [-u] [-z] IritFile
• -m: More information flag.
• -o OutName: Name of output file. By default the output goes to stdout.
• -t AnimTime: If has animation data, time of dump.
• -u: Forces a unit transformation matrix.
• -z: Prints version number and current defaults.
30.2
Usage
Irit2IGS converts IRIT data files into IGES data files.
Example:
Irit2IGS -u -o file.igs file.itd
31
Irit2Iv - IRIT To SGI’s Inventor filter
IV is the format used by the Inventor modeling/rendering package from SGI.
31.1
Command Line Options
irit2iv [-l] [-4] [-P] [-F PolyOpti FineNess] [-f PolyOpti SampTol]
[-T] [-t AnimTime] [-z] DFiles
• -l: Linear - forces linear (degree two) surfaces to be approximated by a single polygon along
their linear direction. Although most of the time linear direction can be represented exactly
using a single polygon, even a bilinear surface can have a freeform shape (saddle-like) that is
not representable using a single polygon. Note that although this option will better emulate the
surface shape, it will create unnecessary polygons in cases where one is enough.
• -4: Four - Generates four polygons per flat patch. Default is 2.
• -P: Polygonize freeform shapes. Default is to leave freeform curves and surfaces as is.
• -F PolyOpti FineNess: Optimality of polygonal approximation of surfaces. See the variable
POLY APPROX OPT for the meaning of FineNess. See also -4.
• -f PolyOpti SampTol: Controls the method used to approximate curves into polylines. If
PolyOpti == 0, equally spaced intervals are used. For PolyOpti == 1, SampTol (real number)
specifies the maximal allowed deviation tolerance of the piecewise linear approximation from the
original curve. Default is 0 64 (uniform sampling with 64 samples).
IRIT Solid modeler
G. Elber
319
• -T: Talkative mode. Prints processing information.
• -t AnimTime: If the data contains animation curves, evaluate and process the scene at time
AnimTime.
• -z: Prints version number and current defaults.
31.2
Usage
Irit2Iv converts freeform surfaces and polygons into polygons and saved in iv Inventor’s ASCII file
format.
Example:
irit2iv solid1.itd > solid1.iv
Surfaces are converted to polygons with fineness control:
irit2iv -F 0 16 - view.imd < saddle.itd > saddle.iv
Note the use of ’-’ for stdin.
32
Irit2Nff - IRIT To NFF filter
32.1
Command Line Options
irit2nff [-l] [-4] [-c] [-F PolyOpti FineNess] [-o OutName] [-T]
[-t AnimTime] [-g] [-z] DFiles
• -l: Linear - forces linear (degree two) surfaces to be approximated by a single polygon along
their linear direction. Although most of the time linear direction can be represented exactly
using a single polygon, even a bilinear surface can have a freeform shape (saddle-like) that is
not representable using a single polygon. Note that although this option will better emulate the
surface shape, it will create unnecessary polygons in cases where one is enough.
• -4: Four - Generates four polygons per flat patch. Default is 2.
• -c: Output files should be filtered by cpp. When set, the usually huge geometry file is separated
from the main nff file that contains the surface properties and view parameters. By default all
data, including the geometry, are saved into a single file with type extension ’.nff’. Use of ’-c’
will pull out all the geometry into a file with the same name but a ’.geom’ extension, which will
be included using the ’#include’ command. The ’.nff’ file should, in that case, be preprocessed
using cpp before being piped into the nff renderer.
• -F PolyOpti FineNess: Optimality of polygonal approximation of surfaces. See the variable
POLY APPROX OPT for the meaning of FineNess. See also -4.
• -o OutName: Name of output file. By default the name of the first data file from the DFiles
list is used. See below on the output files.
• -T: Talkative mode. Prints processing information.
IRIT Solid modeler
G. Elber
320
• -t AnimTime: If the data contains animation curves, evaluate and process the scene at time
AnimTime.
• -g: Generates the geometry file only. See below.
• -z: Prints version number and current defaults.
32.2
Usage
Irit2Nff converts freeform surfaces into polygons in a format that can be used by an NFF renderer.
Usually, one file is created with the ’.nff’ type extension. Since the number of polygons can be extremely
large, a ’-c’ option is provided, which separates the geometry from the surface properties and view
specification, but requires preprocessing by cpp. The geometry is isolated in a file with the extension
’.geom’ and included (via ’#include’) in the main ’.nff’ file. The latter holds the surface properties for
all the geometry as well as the viewing specification. This allows for the changing of the shading or
viewing properties while editing small (’.nff’) files.
If ’-g’ is specified, only the ’.geom’ file is created, preserving the current ’.nff’ file. The ’-g’ flag can
be specified only with ’-c’.
In practice, it may be useful to create a low resolution approximation of the model, change viewing/shading parameters in the ’.nff’ file until a good view and/or surface quality is found, and then
run Irit2Nff once more to create a high resolution approximation of the geometry using ’-g’.
Example:
irit2nff -c -l -F 0 8 b58.itd
creates b58.nff and b58.geom with low resolution (FineNess of 5).
Once done with parameter setting, a fine approximation of the model can be created with:
irit2nff -c -l -g -F 0 64 b58.itd
which will only recreate b58.geom (because of the -g option).
One can overwrite the viewing matrix by appending a new matrix in the end of the command line,
created by a display device:
xgldrvs b58.itd
irit2nff -l -F 0 32 b58.itd irit.imd
where irit.imd is the viewing matrix created by xgldrvs.
32.3
Advanced Usage
One can specify surface qualities for individual surfaces of a model. Several such attributes are supported by Irit2Nff and can be set within IRIT. See also the ATTRIB IRIT command.
If a certain surface should be finer/coarser than the rest of the scene, one can set a ”resolution”
attribute which specifies the relative FineNess resolution of this specific surface. Further, ”u resolution”
and ”v resolution” might be similarly used to set relative resolution for the u or v direction only. The
”crv resolution” attribute controls the relative fineness of curves as polylines. The ”num of isolines”
attribute controls the relative number of isoparametric curves.
Example:
attrib( srf1, "resolution", 2 );
IRIT Solid modeler
G. Elber
321
will force srf1 to have twice the default resolution, as set via the ’-f’ flag.
Almost flat patches are converted to polygons. The rectangle can be converted into two polygons
(by subdividing along one of its diagonals) or into four by introducing a new point at the center of the
patch. This behavior is controlled by the ’-4’ flag, but can be overwritten for individual surfaces by
setting a ”twoperflat” or a ”fourperflat” attribute.
NFF specific properties are controlled via the following attributes: ”kd”, ”ks”, ”shine”, ”trans”,
”index”. Refer to the NFF manual for detail.
Example:
attrib( srf1, "kd", 0.3 );
attrib( srf1, "shine", 30 );
Surface color is controlled on two levels. If the object has an RGB attribute, it is used. Otherwise,
a color, as set via the IRIT COLOR command, is used if set.
Example:
attrib( tankBody, "rgb", "244,164,96" );
33
Irit2Off - IRIT To OFF filter
Converts IRIT data files into OFF data files.
33.1
Command Line Options
Irit2Off [-l] [-4] [-n] [-F PolyOpti FineNess] [-E VrtxEps] [-o OutName]
[-m] [-z] DFiles
• -l: Linear - forces linear (degree two) surfaces to be approximated by a single polygon along
their linear direction. Although most of the time linear direction can be represented exactly
using a single polygon, even a bilinear surface can have a freeform shape (saddle-like) that is
not representable using a single polygon. Note that although this option will better emulate the
surface shape, it will create unnecessary polygons in cases where one is enough.
• -4: Four - Generates four polygons per flat patch. Default is 2.
• -n: Vertex Normals - Dumps the normals of the vertices with the coordinates.
• -F PolyOpti FineNess: Optimality of polygonal approximation of surfaces. See the variable
POLY APPROX OPT for the meaning of FineNess. See also -4.
• -E VrtxEps: Epsilon to consider two vertices same.
• -o OutName: Name of output file. By default the output goes to stdout.
• -m: More information flag.
• -z: Prints version number and current defaults.
IRIT Solid modeler
33.2
G. Elber
322
Usage
Irit2Off converts IRIT data files into Geom View OFF data files.
Example:
Irit2Off -m -o file.off file.itd
34
Irit2Plg - IRIT To PLG (REND386) filter
PLG is the format used by the rend386 real time renderer for the IBM PC.
34.1
Command Line Options
irit2plg [-l] [-4] [-F PolyOpti FineNess] [-T] [-z] DFiles
• -l: Linear - forces linear (degree two) surfaces to be approximated by a single polygon along
their linear direction. Although most of the time linear direction can be represented exactly
using a single polygon, even a bilinear surface can have a freeform shape (saddle-like) that is
not representable using a single polygon. Note that although this option will better emulate the
surface shape, it will create unnecessary polygons in cases where one is enough.
• -4: Four - Generates four polygons per flat patch. Default is 2.
• -F PolyOpti FineNess: Optimality of polygonal approximation of surfaces. See the variable
POLY APPROX OPT for the meaning of FineNess. See also -4.
• -T: Talkative mode. Prints processing information.
• -z: Prints version number and current defaults.
34.2
Usage
Irit2Plg converts freeform surfaces and polygons into polygons in a format that can be used by the
REND386 renderer.
Example:
irit2plg solid1.itd > solid1.plg
Surfaces are converted to polygons with fineness control:
irit2plg -F 0 16 - view.imd < saddle.itd > saddle.plg
Note the use of ’-’ for stdin.
35
35.1
Irit2pov - IRIT To POVRAY raytracer filter
Command Line Options
irit2pov [-l] [-4] [-C] [-F PolyOpti FineNess] [-f PolyOpti SampTol]
[-o OutName] [-g] [-p Zmin Zmax] [-P] [-M] [-T] [-t AnimTime]
[-I #UIso[:#VIso[:#WIso]]] [-s ObjSeq#] [-i Includes] [-z] DFiles
IRIT Solid modeler
G. Elber
323
• -l: Linear - forces linear (degree two) surfaces to be approximated by a single polygon along
their linear direction. Although most of the time linear direction can be represented exactly
using a single polygon, even a bilinear surface can have a freeform shape (saddle-like) that is
not representable using a single polygon. Note that although this option will better emulate the
surface shape, it will create unnecessary polygons in cases where one is enough.
• -4: Four - Generates four polygons per flat patch. Default is 2.
• -C: Constructs bicubic Bezier patches whenever possible as POVRAY supports this type of
surface. Polynomial Bezier surfaces of orders up to and including bicubic (order 4, degree 3) are
degree raised to bicubic. Piecewise polynomials B-spline surfaces are split into Bezier patches.
Higher order surfaces and rational surfaces are always converted into polygons.
• -F PolygonOpti FineNess: Optimality of polygonal approximation of surfaces. See the variable
POLY APPROX OPT for the meaning of FineNess. See also -4, -C, and -l.
• -f PolyOpti SampTol: Controls the method used to approximate curves into polylines. If
PolyOpti == 0, equally spaced intervals are used. For PolyOpti == 1, SampTol (real number)
specifies the maximal allowed deviation tolerance of the piecewise linear approximation from the
original curve. Default is 0 64 (uniform sampling with 64 samples).
• -o OutName: Name of output file. By default the name of the first data file from the DFiles
list is used. See below on the output files.
• -g: Generates the geometry file only. See below.
• -p Zmin Zmax: Sets the ratios between the depth cue and the width of the dumped polylines.
See also -P. Closer lines will be drawn wider.
• -P: Forces dumping polygons as polylines with thickness controlled by -p.
• -M: If -P (see -P and -p), then convert the control mesh/polygon to polylines which are represented as a sequence of truncated cones.
• -T: Talkative mode. Prints processing information.
• -t AnimTime: If the data contains animation curves, evaluate and process the scene at time
AnimTime.
• -I #UIso[:#VIso[:#WIso]]: Specifies the number of isolines per surface/trivariate, per direction. If #VIso or #WIso is not specified, #UIso is used for #VIso etc.
• -s ObjSeq#: Sets object sequence number if there is no object name. Default 1.
• -i Includes: Expands the comma’s separated list of POVRAY include file names into POVRAY
include commands at the beginning of the created POVRAY output file.
• -z: Prints version number and current defaults.
IRIT Solid modeler
35.2
G. Elber
324
Usage
Irit2pov converts freeform surfaces into polygons in a format that can be used by the POVRAY ray
tracing program. Two files are created, one with a ’.geom’ extension and one with a ’.pov’ extension.
Since the number of polygons can be extremely large, the geometry is isolated in the ’.geom’ file and
is included (via ’#include’) in the main ’.pov’ file. The latter holds the surface properties for all the
geometry as well as viewing and POVRAY specific commands. This allows for the changing of the
shading or the viewing properties while editing small (’.pov’) files.
If ’-g’ is specified, only the ’.geom’ file is created, preserving the current, possibly manually modified,
’.pov’ file.
In practice, it may be useful to create a low resolution approximation of the model, change the
viewing/shading parameters in the ’.pov’ file until a good view and/or surface quality is found, and
then run Irit2pov once more to create a high resolution approximation of the geometry using ’-g’.
Example:
irit2pov -l -F 0 5 b58.itd
creates b58.pov and b58.geom with low resolution (FineNess of 5). At such low resolution it
may very well happen that triangles will have normals ”over the edge” since a single polygon may
approximate a highly curved surface. One can ray trace this scene using a command similar to:
POVRAY -Q0 +Ib58
Once done with a parameter setting for POVRAY, a fine approximation of the model can be created
with:
irit2pov -l -g -F 0 64 b58.itd
which will only recreate b58.geom (because of the -g option).
Interesting effects can be created using the depth cue support and polyline conversion of irit2pov.
For example,
irit2pov -P -p -0.0 0.5 solid1.itd
will dump solid1 as a set of polylines (represented as truncated cones in POVRAY) with varying
thickness according to the z depth. Another example is
irit2pov -P -p -0.1 1.0 saddle.itd
which dumps the isolines extracted from the saddle surface with varying thickness.
Each time a data file is saved in IRIT, it can be saved with the viewing matrix of the last INTERACT
by saving the VIEW MAT object as well. I.e.:
save( "b58", b58 );
However, one can overwrite the viewing matrix by appending a new matrix in the end of the
command line, created by the display devices:
xglmdrvs b58.itd
irit2pov -l -F 0 16 b58.itd irit.imd
// Also creates irit.imd
where irit.imd is the viewing matrix created by xglmdrvs. The output name, by default, is the last
input file name, so you might want to provide an explicit name with the -o flag.
IRIT Solid modeler
35.3
G. Elber
325
Advanced Usage
One can specify surface qualities for individual surfaces of a model. Several such attributes are supported by Irit2pov and can be set within IRIT. See also the ATTRIB IRIT command.
If a certain surface should be finer/coarser than the rest of the scene, one can set a ”resolution”
attribute which specifies the relative FineNess resolution of this specific surface. Further, ”u resolution”
and ”v resolution” might be similarly used to set relative resolution for the u or v direction only. The
”crv resolution” attribute controls the relative fineness of curves as polylines. The ”num of isolines”
attribute controls the relative number of isoparametric curves.
Example:
attrib( srf1, "resolution", 2 );
will force srf1 to have twice the default resolution as set via the ’-f’ flag.
Almost flat patches are converted to polygons. The rectangle can be converted into two polygons
(by subdividing along one of its diagonals) or into four by introducing a new point at the patch center.
This behavior is controlled by the ’-4’ flag, but can be overwritten for individual surfaces by setting
”twoperflat” or ”fourperflat”.
POVRAY also supports bicubic Bezier patches and the ’-C’ option of irit2pov supports that. In
such a case, the resolution that is requested from POVRAY to polygonize these patches approximately
follows the resolution as selected via the ’-F’ flag of irit2pov. Nevertheless, one can override the
requested resolution via the ”steps”, ”u steps”, and ”v steps” attributes to irit2pov data files that are
transferred directly to POVRAY’s bicubic Bezier patches. The ”steps” attributes sets both ”u steps”
and ”v steps”.
While the program has a default for lighting which is a point light source at (1, 2, 10), one can
overwrite this default. A POINT TYPE object with LIGHT SOURCE attribute in the data stream
denotes a light source. If irit2pov detects one or more light sources in the input stream, the default
light sources are not created. A point light source can be colored, when an RGB attribute will set its
color.
Example:
l1 - point( 5, 5, 5 );
attrib( l1, "rgb", "255, 0, 0" );
creates a red light source at (5, 5, 5).
POVRAY specific properties are controlled via the following attributes: ”ambient”, ”diffuse”,
”brilliance”, ”phong”, ”phong size”, ”specular”, ”roughness”, ”metallic”, ”reflection”, ”crand”, ”conserve energy”, ”irid”, ”ior”, ”caustics”, ”dispersion”, ”dispersion samples”, ”fade distance”, ”fade power”,
”fade color”. One can prescribe a whole property block of POV attributes via the ”texture”, ”pigment”,
”finish”, ”halo”, and ”normal”. The values of this attributes must be strings as they are copied verbatim. Refer to POVRAY’s manual for their exact meaning.
Example:
attrib(
attrib(
attrib(
attrib(
legs, "ambient", 0.1 );
pot, "matallic", "" );
table, "ior", 1.4 );
bird, "finish", "ambient 0 diffuse 1 specular 1" );
Surface color is controlled on two levels. If the object has an RGB attribute, it is used. Otherwise
a color as set via the IRIT COLOR command is used, if set.
Example:
IRIT Solid modeler
G. Elber
326
attrib( tankBody, "rgb", "244,164,96" );
Transparency is controlled via the ”transp” attribute, with values between zero and one.
Example:
attrib( Glass, "transp", 0.9 );
36
Irit2Ps - IRIT To PS filter
36.1
Command Line Options
irit2ps [-l] [-4] [-s Size] [-I #UIso[:#VIso[:#WIso]]] [-F PolyOpti FineNess]
[-f PolyOpti SampTol] [-M] [-G] [-P] [-W LineWidth]
[-w WidenLen WidenWidth] [-b R G B] [-B X1 Y1 X2 Y2] [-c] [-C]
[-T] [-t AnimTime] [-N FontName] [-i] [-o OutName] [-d [Zmin Zmax]]
[-D [Zmin Zmax]] [-p PtType PtSize] [-u] [-z] DFiles
• -l: Linear - forces linear (degree two) surfaces to be approximated by a single polygon along
their linear direction. Although most of the time linear direction can be represented exactly
using a single polygon, even a bilinear surface can have a freeform shape (saddle-like) that is
not representable using a single polygon. Note that although this option will better emulate the
surface shape, it will create unnecessary polygons in cases where one is enough.
• -4: Four - Generates four polygons per flat patch. Default is 2.
• -s Size: Controls the size of the postscript output in inches. Default is to fill the entire screen.
• -I #UIso[:#VIso[:#WIso]]: Specifies the number of isolines per surface/trivariate, per direction. If #VIso or #WIso is not specified, #UIso is used for #VIso etc.
• -F PolygonOpti FineNess: Optimality of polygonal approximation of surfaces. See the variable
POLY APPROX OPT for the meaning of FineNess. See also -4.
• -f PolyOpti SampTol: Controls the method used to approximate curves into polylines. If
PolyOpti == 0, equally spaced intervals are used. For PolyOpti == 1, SampTol (real number)
specifies the maximal allowed deviation tolerance of the piecewise linear approximation from the
original curve. Default is 0 64 (uniform sampling with 64 samples).
• -M: Dumps the control mesh/polygon as well.
• -G: Dumps the curve/surface (as freeform geometry). Default. See -I, -C, -f for control on
polyline approximation.
• -P: Dumps the curve/surface (as polygons). See -F, -l, -4 for control on polygonal approximation.
• -W #LineWidth: Sets the line drawing width in inches. Default is as thin as possible. This
option will overwrite only those objects that do not have a ”width” attribute. See also -d. If
LineWidth is negative, its absolute value is used to scale the current width of the object if it has
one, or the default width otherwise.
• -w WidenLen WidenWidth: Widens the end points of polylines if they should be made wider,
and if so, to what width.
IRIT Solid modeler
G. Elber
327
• -b R G B: Sets a colored background. RGB are three integers prescribing the Red, Green, and
Blue coefficients. If there is no -c (i.e. a gray level drawing), this color is converted to a gray
level using RGB to T.V. Y(IQ) channel conversion.
• -B X1 Y1 X2 Y2: Clips the drawing area outsize the bounding box from (X1, Y1) to (X2, Y2).
• -c: Creates a color postscript file.
• -C: Curve mode. Dumps freeform curves and surfaces as cubic Bezier curves. Higher order curves
and surfaces and/or rationals are approximated by cubic Bezier curves. This option generates
data files that are roughly a third of piecewise linear postscript files (by disabling this feature,
-C-), but it takes a longer time to compute.
• -T: Talkative mode. Prints processing information.
• -t AnimTime: If the data contains animation curves, evaluate and process the scene at time
AnimTime.
• -N FontName: Sets the font to use when dumping text out of string objects.
• -i: Internal edges (created by IRIT) - the default is not to display them, and this option will
force displaying them as well.
• -o OutName: Name of output file. Default is stdout.
• -d [Zmin Zmax]: Sets the ratios between the depth cue and the width of the dumped data. See
also -W, -p. Closer lines/points will be drawn wider/larger. Zmin and Zmax are optional. The
object’s bounding box is otherwise computed and used.
• -D [Zmin Zmax]: Same as -d, but depth cue the color or gray scale instead of width. You
might need to consider the sorting option of the illustrt tool (-s of illustrt) for proper drawings.
Only one of -d and -D can be used.
• -p PtType PtSize: Specifies the way points are drawn. PtType can be one of H, F, C for
Hollow circle, Full Circle, or Cross. PtSize specifies the size of the point to be drawn, in inches.
Vectors will also be drawn as points, but with an additional thin line to the origin. See also -d.
• -u: Forces a unit matrix transformation, i.e. no transformation.
• -z: Prints version number and current defaults.
36.2
Usage
Irit2Ps converts freeform surfaces and polygons into a postscript file.
Example:
irit2ps solid1.itd > solid1.ps
Surfaces are converted to polygons with fineness control:
irit2ps -f 0 32 -c -W 0.01 saddle.itd > saddle.ps
creates a postscript file for the saddle model, in color, and with lines 0.01 inch thick.
IRIT Solid modeler
36.3
G. Elber
328
Advanced Usage
One can specify several attributes that affect the way the postscript file is generated. The attributes
can be generated within IRIT. See also the ATTRIB IRIT command.
If a certain object should be thinner or thicker than the rest of the scene, one can set a ”width”
attribute which specifies the line width in inches of this specific object.
Example:
attrib( srf1, "width", 0.02 );
will force srf1 to have this width, instead of the default as set via the ’-W’ flag.
If a (closed) object, a polygon, for example, needs to be filled, a ”fill” attribute should be set.
Example:
attrib( poly, "fill", true );
will fill poly.
If an object, a polygon, for example, needs to be painted/filled in a gray level instead of black, a
”gray” attribute should be set, with a value equal to the gray level desired.
Example:
attrib( poly, "gray", 0.5 );
will draw/fill poly with %50 gray.
Dotted or dashed line effects can be created using a ”dash” attribute which is a direct postScript
dash string. A simple form of this string is ”[a b]” in which a is the drawing portion (black) in inches,
followed by b inches of white space. See the postScript manual for more about the format of this string.
Here is an example for a dotted-dash line.
attrib( poly, "dash", "[0.006 0.0015 0.001 0.0015] 0" );
Surface color is controlled (for color postscript only - see -c) on two levels. If the object has an
RGB attribute, it is used. Otherwise, a color as set via the IRIT COLOR command is used.
Example:
attrib( Ball, "rgb", "255,0,0" );
An object can be drawn as ”tubes” instead of full lines. The ratio between the inner and the outer
radii of the tube is provided as the TUBULAR attribute:
attrib( final, "tubular", 0.7 );
The depth cueing option of irit2ps could be disabled for individual objects by placing an integer
attribute ”DepthCue” with the FALSE value:
attrib( final, "DepthCue", FALSE );
IRIT Solid modeler
G. Elber
329
The ”resolution” attribute controls the relative fineness of polygonal approximation of surfaces,
and ”u resolution” and ”v resolution” similarly control this relative fineness along one parametric
direction only. The ”crv resolution” attribute controls the relative fineness of curves as polylines. The
”num of isolines” attribute controls the relative number of isoparametric curves.
A string object can be dumped as text of a selected PS font (See -N). The string position is set via
a ”StrPos” vector attribute (default to the origin), and ”StrScale” real attribute to control the string
height in world unit (default to 0.1). Text will always be dumped horizontally.
Example:
Text = "Some text";
attrib( Text, "StrPos", vector( 1, 2, 3 ) );
attrib( Text, "StrScale", 0.1 );
Will print the Text ”Some text” at location (1, 2, 3). The text height be be 0.1.
37
Irit2Ray - IRIT To RAYSHADE filter
37.1
Command Line Options
irit2ray [-l] [-4] [-G GridSize] [-F PolyOpti FineNess]
[-f PolyOpti SampTol] [-o OutName] [-g] [-p Zmin Zmax] [-P]
[-M] [-T] [-t AnimTime] [-I #UIso[:#VIso[:#WIso]]] [-s ObjSeq#]
[-z] DFiles
• -l: Linear - forces linear (degree two) surfaces to be approximated by a single polygon along
their linear direction. Although most of the time linear direction can be represented exactly
using a single polygon, even a bilinear surface can have a freeform shape (saddle-like) that is
not representable using a single polygon. Note that although this option will better emulate the
surface shape, it will create unnecessary polygons in cases where one is enough.
• -4: Four - Generates four polygons per flat patch. Default is 2.
• -G GridSize: Usually objects are grouped as lists of polygons. This flag will coerce the usage
of the RAYSHADE grid structure, with GridSize being used as the grid size along the object
bounding box’s largest dimension.
• -F PolygonOpti FineNess: Optimality of polygonal approximation of surfaces. See the variable
POLY APPROX OPT for the meaning of FineNess. See also -4.
• -f PolyOpti SampTol: Controls the method used to approximate curves into polylines. If
PolyOpti == 0, equally spaced intervals are used. For PolyOpti == 1, SampTol (real number)
specifies the maximal allowed deviation tolerance of the piecewise linear approximation from the
original curve. Default is 0 64 (uniform sampling with 64 samples).
• -o OutName: Name of output file. By default, the name of the first data file from the DFiles
list is used. See below on the output files.
• -g: Generates the geometry file only. See below.
• -p Zmin Zmax: Sets the ratios between the depth cue and the width of the dumped polylines.
See also -P. Closer lines will be drawn wider.
IRIT Solid modeler
G. Elber
330
• -P: Forces dumping polygons as polylines with thickness controlled by -p.
• -M: If -P (see -P and -p), will then convert the control mesh/polygon to polylines which are
represented as a sequence of truncated cones.
• -T: Talkative mode. Prints processing information.
• -t AnimTime: If the data contains animation curves, evaluate and process the scene at time
AnimTime.
• -I #UIso[:#VIso[:#WIso]]: Specifies the number of isolines per surface/trivariate, per direction. If #VIso or #WIso is not specified, #UIso is used for #VIso etc.
• -s ObjSeq#: Sets object sequence number if no object name. Default 1.
• -z: Prints version number and current defaults.
37.2
Usage
Irit2Ray converts freeform surfaces into polygons in a format that can be used by the RAYSHADE ray
tracing program. Two files are created, one with a ’.geom’ extension and one with a ’.ray’ extension.
Since the number of polygons can be extremely large, the geometry is isolated in the ’.geom’ file and
is included (via ’#include’) in the main ’.ray’ file. The latter holds the surface properties for all the
geometry as well as viewing and RAYSHADE specific commands. This allows for the changing of the
shading or viewing properties while editing small (’.ray’) files.
If ’-g’ is specified, only the ’.geom’ file is created, preserving the current ’.ray’ file.
In practice, it may be useful to create a low resolution approximation of the model, change the
viewing/shading parameters in the ’.ray’ file until a good view and/or surface quality is found, and
then run Irit2Ray once more to create a high resolution approximation of the geometry using ’-g’.
Example:
irit2ray -l -F 0 5 b58.itd
creates b58.ray and b58.geom with low resolution (FineNess of 5). At such low resolution it may very
well happen that triangles will have normals ”over the edge” since a single polygon may approximate
a highly curved surface. That will cause RAYSHADE to issue an ”Inconsistent triangle normals”
warning. This problem will not arise if high fineness is used. One can ray trace this scene using a
command similar to:
RAYSHADE -p -W 256 256 b58.ray > b58.rle
Once done with the parameter setting for RAYSHADE, a fine approximation of the model can be
created with:
irit2ray -l -g -F 0 64 b58.itd
which will only recreate b58.geom (because of the -g option).
Interesting effects can be created using the depth cue support and polyline conversion of irit2ray.
For example,
irit2ray -G 5 -P -p -0.0 0.5 solid1.itd
G. Elber
IRIT Solid modeler
331
will dump solid1 as a set of polylines (represented as truncated cones in RAYSHADE) with varying
thickness according to the z depth. Another example is
irit2ray -G 5 -P -p -0.1 1.0 saddle.itd
which dumps the isolines extracted from the saddle surface with varying thickness.
Each time a data file is saved in IRIT, it can be saved with the viewing matrix of the last INTERACT
by saving the VIEW MAT object as well. I.e.:
save( "b58", b58 );
However, one can overwrite the viewing matrix by appending a new matrix in the end of the
command line, created by the display devices:
os2drvs b58.itd
irit2ray -l -F 0 16 b58.itd irit.imd
// Also creates irit.imd
where irit.imd is the viewing matrix created by os2drvs. The output name, by default, is the last
input file name, so you might want to provide an explicit name with the -o flag.
37.3
Advanced Usage
One can specify surface qualities for individual surfaces of a model. Several such attributes are supported by Irit2Ray and can be set within IRIT. See also the ATTRIB IRIT command.
If a certain surface should be finer/coarser than the rest of the scene, one can set a ”resolution”
attribute which specifies the relative FineNess resolution of this specific surface. Further, ”u resolution”
and ”v resolution” might be similarly used to set relative resolution for the u or v direction only. The
”crv resolution” attribute controls the relative fineness of curves as polylines. The ”num of isolines”
attribute controls the relative number of isoparametric curves.
Example:
attrib( srf1, "resolution", 2 );
will force srf1 to have twice the default resolution, as set via the ’-f’ flag.
Almost flat patches are converted to polygons. The rectangle can be converted into two polygons
(by subdividing along one of its diagonals) or into four by introducing a new point at the patch center.
This behavior is controlled by the ’-4’ flag, but can be overwritten for individual surfaces bu setting
”twoperflat” or ”fourperflat”.
RAYSHADE specific properties are controlled via the following attributes: ”specpow”, ”reflect”,
”transp”, ”body”, ”index”, and ”texture”. The value of these attributes must be strings as it is copied
verbatim. Refer to RAYSHADE’s manual for their meaning.
Example:
attrib(
attrib(
attrib(
attrib(
legs, "transp", "0.3" );
legs, "texture", "wood,2" );
table, "texture", "marble" );
table, "reflect", "0.5" );
IRIT Solid modeler
G. Elber
332
An optional scale can be prescribed to textures. In the above example wooden legs’ (that are also
transparent...) texture is selected with a texture scaling factor of 2.
Surface color is controlled on two levels. If the object has an RGB attribute, it is used. Otherwise
a color as set via the IRIT COLOR command is used, if set.
Example:
attrib( tankBody, "rgb", "244,164,96" );
38
Irit2Scn - IRIT To SCENE (RTrace) filter
SCENE is the format used by the RTrace ray tracer. This filter was donated by Antonio Costa
([email protected]), the author of RTrace.
38.1
Command Line Options
irit2scn [-l] [-4] [-F PolyOpti FineNess] [-o OutName] [-g] [-T]
[-t AnimTime] [-z] DFiles
• -l: Linear - forces linear (degree two) surfaces to be approximated as a single polygon along
their linear direction. Although most of the time linear direction can be represented exactly
using a single polygon, even a bilinear surface can have a freeform shape (saddle-like) that is
not representable using a single polygon. Note that although this option will better emulate the
surface shape, it will create unnecessary polygons in cases where one is enough.
• -4: Four - Generates four polygons per flat patch.
• -F PolyOpti FineNess: Optimality of polygonal approximation of surfaces. See the variable
POLY APPROX OPT for the meaning of FineNess. See also -4.
• -o OutName: Name of output file. By default the name of the first data file from DFiles list is
used. See below on the output files.
• -g: Generates the geometry file only. See below.
• -T: Talkative mode. Prints processing information.
• -t AnimTime: If the data contains animation curves, evaluate and process the scene at time
AnimTime.
• -z: Prints version number and current defaults.
38.2
Usage
Irit2Scn converts freeform surfaces and polygons into polygons in a format that can be used by RTrace.
Two files are created, one with a ’.geom’ extension and one with a ’.scn’ extension. Since the number
of polygons can be extremely large, the geometry is isolated in the ’.geom’ file and is included (via
’#include’) in the main ’.scn’ file. The latter holds the surface properties for all the geometry as well
as viewing and RTrace specific commands. This allows for the changing of the shading or viewing
properties while editing small (’.scn’) files.
If ’-g’ is specified, only the ’.geom’ file is created, preserving the current ’.scn’ file.
IRIT Solid modeler
G. Elber
333
In practice, it may be useful to create a low resolution approximation of the model, adjust the
viewing/shading parameters in the ’.scn’ file until a good view and/or surface quality is found, and
then run Irit2Scn once more to create a high resolution approximation of the geometry using ’-g’.
Example:
irit2scn -l -F 0 8 b58.itd
creates b58.scn and b58.geom with low resolution (FineNess of 5).
One can ray trace this scene after converting the scn file to a sff file, using scn2sff provided with
the RTrace package.
Once done with the parameter setting of RTrace, a fine approximation of the model can be created
with:
irit2scn -l -g -F 0 64 b58.itd
which will only recreate b58.geom (because of the -g option).
One can overwrite the viewing matrix by appending a new matrix at the end of the command line,
created by the display devices:
wntdrvs b58.itd
irit2scn -l -F 0 8 b58.itd irit.imd
where irit.imd is the viewing matrix created by wntdrvs. The output name, by default, is the last
input file name, so you might want to provide an explicit name with the -o flag.
38.3
Advanced Usage
One can specify surface qualities for individual surfaces of a model. Several such attributes are supported by Irit2Scn and can be set within IRIT. See also the ATTRIB IRIT command.
If a certain surface should be finer/coarser than the rest of the scene, one can set a ”resolution”
attribute which specifies the relative FineNess resolution of this specific surface. Further, ”u resolution”
and ”v resolution” might be similarly used to set relative resolution for the u or v direction only. The
”crv resolution” attribute controls the relative fineness of curves as polylines. The ”num of isolines”
attribute controls the relative number of isoparametric curves.
Example:
attrib( srf1, "resolution", 2 );
will force srf1 to have twice the default resolution, as set via the ’-f’ flag.
Almost flat patches are converted to polygons. The patch can be converted into two polygons (by
subdividing along one of its diagonals) or into four by introducing a new point at the patch center.
This behavior is controlled by the ’-4’ flag, but can be overwritten for individual surfaces by setting
”twoperflat” or ”fourperflat”.
RTrace specific properties are controlled via the following attributes: ”SCNrefraction”, ”SCNtexture”, ”SCNsurface. Refer to the RTrace manual for their meaning.
Example:
attrib( srf1, "SCNrefraction", 0.3 );
Surface color is controlled on two levels. If the object has an RGB attribute, it is used. Otherwise
a color as set via IRIT COLOR command is used, if set.
Example:
attrib( tankBody, "rgb", "244,164,96" );
IRIT Solid modeler
39
G. Elber
334
Irit2Stl - IRIT To STL filter
39.1
Command Line Options
irit2stl [-l] [-4] [-r] [-F PolyOpti FineNess] [-E VrtxEps] [-s] [-S]
[-o OutName] [-m] [-u] [-z] DFiles
• -l: Linear - forces linear (degree two) surfaces to be approximated by a single polygon along
their linear direction. Although most of the time linear direction can be represented exactly
using a single polygon, even a bilinear surface can have a freeform shape (saddle-like) that is
not representable using a single polygon. Note that although this option will better emulate the
surface shape, it will create unnecessary polygons in cases where one is enough.
• -4: Four - Generates four polygons per flat patch. Default is 2.
• -r: Regularize and triangulate the input data if not regularized and with triangles only to begin
with.
• -F PolygonOpti FineNess: Optimality of polygonal approximation of surfaces. See the variable
POLY APPROX OPT for the meaning of FineNess. See also -4.
• -E VrtxEps: Tolerance of two adjacent verices to be considered the same. Vertices that are
considered the same are collapsed to an identical location.
• -s: Dumps each object as a separated ”solid” - ”endsolid” brackets.
• -S: Dumps each object as a separated ”solid” - ”endsolid” brackets in a separated stl file, with
file name appended with numeric index.
• -o OutName: Name of output file. By default the output goes to stdout.
• -m: More information flag.
• -u: Forces a unit matrix. That is, input data are not transformed at all.
• -z: Prints version number and current defaults.
39.2
Usage
Irit2Stl converts freeform surfaces and polygons into the STL (Stereolithography) file format. The STL
data should be a closed solid in general but no such validity check is conducted by irit2stl.
Example:
irit2stl -u solid2.itd > solid2.stl
40
Irit2Wrl - IRIT To IGES filter
Converts IRIT data files into IGS data files.
IRIT Solid modeler
40.1
G. Elber
335
Command Line Options
irit2wrl [-l] [-4] [-u] [-F PolyOpti FineNess] [-f PolyOpti SampTol]
[-o OutName] [-T] [-z] DFiles
• -l: Linear - forces linear (degree two) surfaces to be approximated by a single polygon along
their linear direction. Although most of the time linear direction can be represented exactly
using a single polygon, even a bilinear surface can have a freeform shape (saddle-like) that is
not representable using a single polygon. Note that although this option will better emulate the
surface shape, it will create unnecessary polygons in cases where one is enough.
• -4: Four - Generates four polygons per flat patch. Default is 2.
• -u: Forces a unit matrix. That is, input data are not transformed at all.
• -F PolyOpti FineNess: Optimality of polygonal approximation of surfaces. See the variable
POLY APPROX OPT for the meaning of FineNess. See also -4.
• -f PolyOpti SampTol: Controls the method used to approximate curves into polylines. If
PolyOpti == 0, equally spaced intervals are used. For PolyOpti == 1, SampTol (real number)
specifies the maximal allowed deviation tolerance of the piecewise linear approximation from the
original curve. Default is 0 64 (uniform sampling with 64 samples).
• -o OutName: Name of output file. By default the output goes to stdout.
• -T: More talkative/information flag.
• -z: Prints version number and current defaults.
40.2
Usage
Irit2Wrl converts IRIT data files into Geom View OFF data files.
Example:
Irit2Wrl -m -o file.off file.itd
41
Irit2Wgl - IRIT To WGL filter
41.1
Command Line Options
irit2wgl [-l] [-4] [-F PolyOpti FineNess] [-C] [-w CanvasWidth]
[-h CanvasHeight] [-b R G B] [-W] [-D] [-P] [-M] [-d DrawMode] [-T]
[-v ViewAngle] [-p ProjectionMode] [-a R G B] [-o OutName]
[-z] DFiles
• -l: Linear - forces linear (degree two) surfaces to be approximated by a single polygon along
their linear direction. Although most of the time linear direction can be represented exactly
using a single polygon, even a bilinear surface can have a freeform shape (saddle-like) that is
not representable using a single polygon. Note that although this option will better emulate the
surface shape, it will create unnecessary polygons in cases where one is enough.
• -4: Four - Generates four polygons per flat patch. Default is 2.
IRIT Solid modeler
G. Elber
336
• -F PolyOpti FineNess: Optimality of polygonal approximation of surfaces. See the variable
POLY APPROX OPT for the meaning of FineNess. See also -4.
• -C: HideCtrlBar - Hides the scene control bar.
• -w CanvasWidth: Width of the html canvas in pixels.
• -h CanvasWidth: Height of the html canvas in pixels.
• -b R G B: Sets the background color. Each of thre R,G,B colors is an integer value between
zero and 255. Default is black.
• -W: ShowWorldAxes - Shows axes relative to the world.
• -D: DisableDepthTest - Disables the depth test.
• -P: EnablePicking - Enables picking.
• -M: ShowModelAxes - Shows axes relative to the model.
• -d DrawMode: The draw mode of the model. 1, 2 and 4 for wireframe, solid and texture,
respectively (default is wireframe).
• -T: ModelTrans - Transformation will be relative to model coordinates. By default (or -T-),
transformation is relative to world coordinates.
• -v ViewAngle: The view angle of the camera. 0 for the original view angle and 1, 2, 3, 4, 5 and
6 for front, back, right, left, top and bottom view angles, respectively (default is original view
angle).
• -p ProjectionMode: The projection mode of the scene. 0 for orthographic projection (the
default) and 1 for perspective projection.
• -a R G B: Sets the global ambient light intensity. Each of thre R,G,B colors is a double value
between 0 and 1. Default is 0.2 for each component.
• -o OutName: Name of output file. Default is stdout.
• -z: Prints version number and current defaults.
41.2
Usage
Irit2Wgl converts IRIT data files into WebGL based HTML data files.
Example:
irit2wgl teapot.itd > teapot.html
If an output file name is supplied, the output will consist of three files all having the same file name,
but a different extension - html file, javascript file and css file. For example, the following command
will output the files teapot.html, teapot.js and teapot.css:
irit2wgl -o teapot teapot.itd
If an output file name is not supplied, the entire output data is dumped into the standard output.
In order to load that data into the web, it should be redirected into an html file.
IRIT Solid modeler
41.3
G. Elber
337
Runtime Usage
Right click the mouse in order to translate the model, Left click the mouse in order to rotate the mode
and press the middle button in order to scale the model.
If picking is enabled, right click the mouse in order to pick an object. Please notice that when
picking is enabled, the right mouse button is used both for picking objects and for translating the
model.
41.4
Browser Support
Make sure that your graphics drivers are up to date. When running under Windows, make sure you
have the Microsoft DirectX runtime installed.
Explorer: WebGL is not supported in with Internet Explorer.
Firefox: WebGL is supported in version 4 or higher. However, it is recommended to upgrade to
the latest version available. In case of security errors, set the following Firefox security flag to false:
about:config -¿ set security.fileuri.strict origin policy as false
Chrome: WebGL is available in the stable release of Chrome. If you catch the error ”Uncaught Error: SECURITY ERR: DOM Exception 18”, run Chrome with ”–allow-file-access-from-files”. For debugging WebGL with Chrome, WebGL Inspector is highly recommended: http://benvanik.github.com/WebGLInspector/
Opera: WebGL is supported in Opera 12 alpha.
Safari: WebGL is supported on Mac OS X 10.6 in the WebKit nightly builds. After downloading
and installing the browser, open the Terminal and type the following: defaults write com.apple.Safari
WebKitWebGLEnabled -bool YES This command only needs to be run once. All future invocations
of the browser will run with WebGL enabled.
41.5
Usefull Links
To check if your browser supports WebGL, visit the following page: http://get.webgl.org/
WebGL specification can be found at: https://www.khronos.org/registry/webgl/specs/1.0/
WebGL tutorial (Lesson 0 provides good troubleshootong tips): http://learningwebgl.com/blog/
WebGL Techniques and Performance presentation: http://www.youtube.com/watch?v=rfQ8rKGTVlg
42
Irit2Xfg - IRIT To XFIG filter
42.1
Command Line Options
irit2xfg [-s Size] [-t XTrans YTrans] [-I #UIso[:#VIso[:#WIso]]]
[-f PolyOpti SampTol] [-F PolyOpti FineNess] [-M] [-G] [-T]
[-a AnimTime] [-i] [-o OutName] [-z] DFiles
• -s Size: Size in inches of the page. Default is 7 inches.
• -t XTrans YTrans: X and Y translation. of the image. Default is (0, 0).
• -I #UIso[:#VIso]: Specifies the number of isolines per surface, per direction. If #VIso is not
specified, #UIso is used for #VIso as well.
• -f PolyOpti SampTol: Controls the method used to approximate curves into polylines. If
PolyOpti == 0, equally spaced intervals are used. For PolyOpti == 1, SampTol (real number)
IRIT Solid modeler
G. Elber
338
specifies the maximal allowed deviation tolerance of the piecewise linear approximation from the
original curve. Default is 0 64 (uniform sampling with 64 samples).
• -F PolygonOpti FineNess: Optimality of polygonal approximation of surfaces. See the variable
POLY APPROX OPT for the meaning of FineNess. See also -4. This enforces the dump of
freefrom geometry as polygons.
• -M: Dumps the control mesh/polygon as well.
• -G: Dumps the freeform geometry.
• -T: Talkative mode. Prints processing information.
• -a AnimTime: If the data contains animation curves, evaluate and process the scene at time
AnimTime.
• -i: Internal edges (created by IRIT) - default is not to display them, and this option will force
their display.
• -o OutName: Name of output file. By default, the name of the first data file from DFiles list
is used. See output files below.
• -z: Prints version number and current defaults.
42.2
Usage
Irit2Xfg converts freeform surfaces and polygons into polylines in a format that can be used by XFIG.
Example:
irit2Xfg -T -f 0 16 saddle.itd > saddle.xfg
However, one can overwrite the viewing matrix by appending a new matrix at the end of the
command line, created by the display devices:
x11drvs b58.itd
irit2Xfg -T -f 0 16 b58.itd irit.imd > saddle.xfg
where irit.imd is the viewing matrix created by x11drvs.
43
Obj2irit - Wavefront OBJ format To IRIT data files
converts Waverfront’s OBJ data files into IRIT data files.
43.1
Command Line Options
obj2irit [-m] [-r] [-o OutName] [-z] OBJFile
• -m: Provides some more information on the data file(s) parsed.
• -r: Reverses all polygons’ orientation in generated data.
• -o OutName: Name of output file. By default, the output goes to stdout.
• -z: Prints version number and current defaults.
IRIT Solid modeler
43.2
G. Elber
339
Usage
obj2irit converts Wavefront’s OBJ data files into IRIT data files. The current version provides only
partial support for the direct conversion of freeform surfaces, mainly due to luck of examples of freeform
surfaces in obj format.
Example:
obj2irit -o file.itd file.obj
44
Off2irit - Geom View Off format To IRIT data files
Converts Geom View’s Off data files into IRIT data files.
44.1
Command Line Options
Off2irit [-o OutName] [-z] OffFile
• -o OutName: Name of output file. By default the output goes to stdout.
• -z: Prints version number and current defaults.
44.2
Usage
Off2irit converts Geom View’s Off data files into IRIT data files.
Example:
Off2irit - < file.off > file.itd
45
Stl2Irit - Stl (stereo lithograph) data To IRIT file filter
Converts ’.stl’ stereolithography data files to ’.irt’ IRIT scripts. Both binary and text STL files are
supported.
45.1
Command Line Options
stl2irit [-b] [-w] [-n] [-o OutName] [-z] STLFile
•
• -b: The stl file is a binary stl. -w: Perform an endian swap on all read data. Little vs. Big
Endian is supported for binary STL files only. -n: Flip orientation of all polygons by flipping
their normals. -o OutName: Name of output file. By default, the output goes to stdout. -z:
Print version number and current defaults.
45.2
Usage
stl2irit converts stereo-lithography STL data files into IRIT data files.
Example:
stl2irit -o file.itd file.stl
G. Elber
IRIT Solid modeler
46
340
Data File Format
This section describes the data file format used to exchange data between IRIT and its accompanying
tools.
[OBJECT {ATTRS} OBJNAME
[NUMBER n]
| [POINT x y z]
| [VECTOR x y z]
| [CTLPT POINT_TYPE {w} x y {z}]
| [STRING "a string"]
| [MATRIX m00
m10
m20
m30
...
...
...
...
m03
m13
m23
m33]
;A polyline should be drawn from first point to last. Nothing is drawn
;from last to first (in a closed polyline, last point is equal to first).
| [POLYLINE {ATTRS} #PTS
;#PTS = number of points.
[{ATTRS} x y z]
[{ATTRS} x y z]
.
.
.
[{ATTRS} x y z]
]
;Defines a closed planar region. Last point is NOT equal to first,
;and a line from last point to first should be drawn when the boundary
;of the polygon is drawn.
| [POLYGON {ATTRS} #PTS
[{ATTRS} x y z]
[{ATTRS} x y z]
.
.
.
[{ATTRS} x y z]
]
;Defines a "cloud" of points.
| [POINTLIST {ATTRS} #PTS
[{ATTRS} x y z]
[{ATTRS} x y z]
IRIT Solid modeler
G. Elber
.
.
.
[{ATTRS} x y z]
]
;Defines a polygon triangle strip. At least 3 vertices are expected.
;Last point is NOT equal to first, and a line from last point to first
;should be drawn when the boundary of the polygon is drawn.
| [POLYSTRIP {ATTRS} #PTS
[{ATTRS} x y z]
[{ATTRS} x y z]
.
.
.
[{ATTRS} x y z]
]
;Defines an instance - a geometric reference (by name, SRF13 below)
;and a transformation matrix to apply to this geoemtry
| [INSTANCE SRF13
m00 ... m03
m10 ... m13
m20 ... m23
m30 ... m33]
;Defines a Bezier curve with #PTS control points. If the curve is
;rational, the rational component is introduced first.
| [CURVE BEZIER {ATTRS} #PTS POINT_TYPE
[{ATTRS} {w} x y z ...]
[{ATTRS} {w} x y z ...]
.
.
.
[{ATTRS} {w} x y z ...]
]
;Defines a Bezier surface with #UPTS * #VPTS control points. If the
;surface is rational, the rational component is introduced first.
;Points are printed row after row (#UPTS per row), #VPTS rows.
| [SURFACE BEZIER {ATTRS} #UPTS #VPTS POINT_TYPE
[{ATTRS} {w} x y z ...]
[{ATTRS} {w} x y z ...]
.
.
.
[{ATTRS} {w} x y z ...]
]
341
IRIT Solid modeler
G. Elber
;Defines a Bezier triangular surface with (#PTS + 1) * #PTS / 2 control
;points, of order ORDER. If the surface is rational, the rational
;component is introduced first. Note #PTS holds number of points along
;an edge and is exactly equal to ORDER. Points are printed sequentially.
| [TRISRF BEZIER {ATTRS} #PTS POINT_TYPE
[{ATTRS} {w} x y z ...]
[{ATTRS} {w} x y z ...]
.
.
.
[{ATTRS} {w} x y z ...]
]
;Defines a Bezier trivariate with #UPTS * #VPTS * #WPTS control
;points. If the trivariate is rational, the rational component is
;introduced first. Points are printed row after row (#UPTS per row),
;#VPTS rows, #WPTS layers (depth).
| [TRIVAR BEZIER {ATTRS} #UPTS #VPTS #WPTS POINT_TYPE
[{ATTRS} {w} x y z ...]
[{ATTRS} {w} x y z ...]
.
.
.
[{ATTRS} {w} x y z ...]
]
;Defines a Bezier multivariate of #Dim dimensions (#Dim = 1 for a
;curve, #Dim = 2 for a surface, #Dim = 3 for a trivariate, etc.)
;with (Dim1#PTS * ... * Dim1#PTS) control points. If the multivariate
;is rational, the rational component is introduced first.
| [MULTIVAR BEZIER {ATTRS} #Dim Dim1#PTS ... DimN#PTS POINT_TYPE
[{ATTRS} {w} x y z ...]
[{ATTRS} {w} x y z ...]
.
.
.
[{ATTRS} {w} x y z ...]
]
;Defines a B-spline curve of order ORDER with #PTS control points. If the
;curve is rational, the rational component is introduced first.
;Note that the length of knot vector is equal to #PTS + ORDER.
;If the curve is periodic, KVP prefix the knot vector that has length of
;’Length + Order + Order - 1’.
| [CURVE BSPLINE {ATTRS} #PTS ORDER POINT_TYPE
[KV{P} {ATTRS} kv0 kv1 kv2 ...]
;Knot vector
[{ATTRS} {w} x y z ...]
342
IRIT Solid modeler
G. Elber
[{ATTRS} {w} x y z ...]
.
.
.
[{ATTRS} {w} x y z ...]
]
;Defines a B-spline surface with #UPTS * #VPTS control points, of order
;UORDER by VORDER. If the surface is rational, the rational component
;is introduced first.
;Points are printed row after row (#UPTS per row), #VPTS rows.
;If the surface is periodic in some direction, KVP prefix the knot vector
;that has length of ’Length + Order + Order - 1’.
| [SURFACE BSPLINE {ATTRS} #UPTS #VPTS UORDER VORDER POINT_TYPE
[KV{P} {ATTRS} kv0 kv1 kv2 ...]
;U Knot vector
[KV{P} {ATTRS} kv0 kv1 kv2 ...]
;V Knot vector
[{ATTRS} {w} x y z ...]
[{ATTRS} {w} x y z ...]
.
.
.
[{ATTRS} {w} x y z ...]
]
;Defines a B-spline triangular surface with (#PTS + 1) * #PTS / 2 control
;points, of order ORDER. If the surface is rational, the rational
;component is introduced first.
;Points are printed sequentially.
| [TRISRF BSPLINE {ATTRS} #PTS ORDER POINT_TYPE
[KV {ATTRS} kv0 kv1 kv2 ...]
;Knot vector
[{ATTRS} {w} x y z ...]
[{ATTRS} {w} x y z ...]
.
.
.
[{ATTRS} {w} x y z ...]
]
;Defines a B-spline trivariate with #UPTS * #VPTS * #WPTS control
;points. If the trivariate is rational, the rational component is
;introduced first. Points are printed row after row (#UPTS per row),
;#VPTS rows, #WPTS layers (depth).
;If trivariate is periodic in some direction, KVP prefix the knot vector
;that has length of ’Length + Order + Order - 1’.
| [TRIVAR BSPLINE {ATTRS} #UPTS #VPTS #WPTS UORDER VORDER WORDER POINT_TYPE
[KV{P} {ATTRS} kv0 kv1 kv2 ...]
;U Knot vector
[KV{P} {ATTRS} kv0 kv1 kv2 ...]
;V Knot vector
[KV{P} {ATTRS} kv0 kv1 kv2 ...]
;W Knot vector
343
IRIT Solid modeler
G. Elber
[{ATTRS} {w} x y z ...]
[{ATTRS} {w} x y z ...]
.
.
.
[{ATTRS} {w} x y z ...]
]
;Defines a B-spline multivariate of #Dim dimensions (#Dim = 1 for a
;curve, #Dim = 2 for a surface, #Dim = 3 for a trivariate, etc.)
;with (Dim1#PTS * ... * Dim1#PTS) control points. If the multivariate
;is rational, the rational component is introduced first.
| [MULTIVAR BSPLINE {ATTRS} #Dim Dim1#PTS ... DimN#PTS POINT_TYPE
[KV{P} {ATTRS} kv0 kv1 kv2 ...]
;Dim1 Knot vector
.
.
.
[KV{P} {ATTRS} kv0 kv1 kv2 ...]
;DimN Knot vector
[{ATTRS} {w} x y z ...]
[{ATTRS} {w} x y z ...]
.
.
.
[{ATTRS} {w} x y z ...]
]
;Defines a trimmed surface. Encapsulates a surface (can be either a
;B-spline or a Bezier surface) and prescribes its trimming curves.
;There can be an arbitrary number of trimming curves (either Bezier
; or B-spline). Each trimming curve contains an arbitrary number of
;trimming curve segments, while each trimming curve segment contains
;a parameteric representation optionally followed by a Euclidean
;representation of the trimming curve segment.
| [TRIMSRF
[SURFACE ...
]
[TRIMCRV
[TRIMCRVSEG
[CURVE ...
]
]
.
.
.
[TRIMCRVSEG
[CURVE ...
]
]
344
IRIT Solid modeler
G. Elber
]
.
.
.
[TRIMCRV
[TRIMCRVSEG
[CURVE ...
]
]
.
.
.
[TRIMCRVSEG
[CURVE ...
]
]
]
]
;Defines a model. A model contains a set of (trimmed) surfaces along
;with a set of trimming curves that are shared by (at most) two
;surfaces each.
;The trimming curves must form closed loops in each surface.
| [MODEL #TrimSrfs #TrimSegs
;A surface in the model holds a regular surface and a set of
;closed loops that defines the trimming loops of the surface.
[MDLTSRF #Loops
;Number of trimming loops
[SURFACE ...
]
;Each trimming loop is a list of trimming curve segments.
;If the index is negative, it denotes the traversal of the
;curve in reverse order.
[MDLLOOP trim seg’s indices]
;Negative index - reversed
.
.
.
[MDLLOOP trim seg’s indices]
;Negative index - reversed
]
.
.
.
[MDLTSRF #Loops
;Number of trimming loops
[SURFACE ...
]
[MDLLOOP trim seg’s indices]
;Negative index - reversed
.
.
.
345
IRIT Solid modeler
[MDLLOOP trim seg’s indices]
G. Elber
346
;Negative index - reversed
]
;The trimming curve segments can hold a parameteric curve of the
;in first surface, a parametric curve in the second surface, and a
;a Euclidean representation, in this order. A 3 bits mask ’CurveMask’
;says what is available, as one bit per curve type.
;’#1stSrf’ and ’#2ndSrf’ specify the two surfaces that share
;this boundary trimming curve, with 0 denoting no surface.
[MDLTSEG CurveMask #1stSrf #2ndSrf
;CurveMask = 5
[CURVE ...
]
[CURVE ...
]
]
.
.
.
[MDLTSEG CurveMask #1stSrf #2ndSrf
;CurveMask = 7
[CURVE ...
]
[CURVE ...
]
[CURVE ...
]
]
]
]
POINT_TYPE -> E1 | E2 | E3 | E4 | E5 | E6 | E7 | E8 | E9 |
P1 | P2 | P3 | P4 | P5 | P6 | P7 | P8 | P9
ATTRS -> [ATTRNAME ATTRVALUE]
| [ATTRNAME]
| [ATTRNAME ATTRVALUE] ATTRS
Some notes:
* This definition for the text file is designed to minimize the reading time and space. All information
can be read without backward or forward referencing.
* An OBJECT must never hold different geometry types or other entities. I.e. CURVEs, SURFACEs, and POLYGONs must all be in different OBJECTs.
* Attributes should be ignored if not needed. The attribute list may have any length and is always
terminated by a token that is NOT ’[’. This simplifies and disambiguates the parsing.
* Comments may appear between ’[OBJECT ...]’ blocks, or immediately after OBJECT OBJNAME, and only there.
A comment body can be anything not containing the ’[’ or the ’]’ tokens (signals start/end of
block). Some of the comments in the above definition are illegal and appear there only for the sake of
IRIT Solid modeler
G. Elber
347
clarity.
* It is preferable that geometric attributes such as NORMALs be saved on the geometric structure
level (POLYGON, CURVE or vertices) while graphical and other attribures such as COLORs will be
saved on the OBJECT level.
* Objects may be contained in other objects to an arbitrary level.
Here is an example that exercises most of the data format:
This is a legal comment in a data file.
[OBJECT DEMO
[OBJECT REAL_NUM
And this is also a legal comment.
[NUMBER 4]
]
[OBJECT A_POINT
[POINT 1 2 3]
]
[OBJECT A_VECTOR
[VECTOR 1 2 3]
]
[OBJECT CTL_POINT
[CTLPT E3 1 2 3]
]
[OBJECT STR_OBJ
[STRING "string"]
]
[OBJECT UNIT_MAT
[MATRIX
1 0 0 0
0 1 0 0
0 0 1 0
0 0 0 1
]
]
[OBJECT [COLOR 4] POLY1OBJ
[POLYGON [PLANE 1 0 0 0.5] 4
[-0.5 0.5 0.5]
[-0.5 -0.5 0.5]
[-0.5 -0.5 -0.5]
[-0.5 0.5 -0.5]
]
[POLYGON [PLANE 0 -1 0 0.5] 4
[0.5 0.5 0.5]
IRIT Solid modeler
G. Elber
[-0.5 0.5 0.5]
[-0.5 0.5 -0.5]
[0.5 0.5 -0.5]
]
]
[OBJECT [COLOR 63] ACURVE
[CURVE BSPLINE 16 4 E2
[KV 0 0 0 0 1 1 1 2 3 4 5 6 7 8 9 10 11 11 11 11]
[0.874 0]
[0.899333 0.0253333]
[0.924667 0.0506667]
[0.95 0.076]
[0.95 0.76]
[0.304 1.52]
[0.304 1.9]
[0.494 2.09]
[0.722 2.242]
[0.722 2.318]
[0.38 2.508]
[0.418 2.698]
[0.57 2.812]
[0.57 3.42]
[0.19 3.572]
[0 3.572]
]
]
[OBJECT [COLOR 2] SOMESRF
[SURFACE BEZIER 3 3 E3
[0 0 0]
[0.05 0.2 0.1]
[0.1 0.05 0.2]
[0.1 -0.2 0]
[0.15 0.05 0.1]
[0.2 -0.1 0.2]
[0.2 0 0]
[0.25 0.2 0.1]
[0.3 0.05 0.2]
]
]
]
348
IRIT Solid modeler
47
G. Elber
349
Bugs and Limitations
As with any program of more than one line, this is far from perfect. Some limitations, as well as
simplifications, are laid out below.
* If the intersection curve of two objects falls exactly on polygon boundaries, for all polygons, the
system will scream that the two objects do not intersect at all. Try to move one by EPSILON into the
other. I probably should fix this one - it is supposed to be relatively easy.
* Avoid degenerate intersections that result in a point or a line. They will probably cause wrong
propagation of the inner and outer parts of one object relative to another. Always extend your object
beyond the other object.
* If two objects have no intersection in their boundary, IRIT assumes they are disjoint: a union
simply combines them, and the other Boolean operators return a NULL object. One should find a
FAST way (3D Jordan theorem) to find the relation between the two (A in B, B in A, A disjoint B)
and according to that, make a decision.
* Since the Boolean sum implementation constructs ruled surfaces with uniform speed, it might
return a somewhat incorrect answer, given non-uniform input curves.
* The parser is out of hand and difficult to maintain. There are several memory leaks there that
one should fix.
* Rayshade complains a lot about degenerate polygons on irit2ray output. To alleviate the problem,
change the ’equal’ macro in common.h in libcommon of rayshade from EPSILON (1e-5) to 1e-7 or even
lower.
* On the motif-based drivers (xmtdrvs etc.) clicking the mouse left and right of the scale’s button
produces stepped transformations. This step size is constant, and is not proportional to the distance
between the mouse’s position and the position of the button. The reason for the flaw is incorrect
callback information returned from the scale in repetitive mode.
* Binary data files are not documented, nor will they be. They might change in the future and are
in fact machine dependent. Hence, one platform might fail to read another’s binary data file.
Was this manual useful for you? yes no
Thank you for your participation!

* Your assessment is very important for improving the work of artificial intelligence, which forms the content of this project

Download PDF

advertisement